diff --git a/app/build.gradle b/app/build.gradle index fa37e77..55df49f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { minSdkVersion 24 targetSdkVersion 29 - versionCode 71 - versionName "1.7.9" + versionCode 73 + versionName "1.8.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java index e8ddb62..ad2e116 100644 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java @@ -514,7 +514,6 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie return; } Log.e(TAG, "onGranted: 获取权限成功"); - getLocationPermission(); } @Override @@ -552,7 +551,7 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie public void onGranted(@NonNull List permissions, boolean allGranted) { Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); if (!allGranted) { - Toaster.show("获取部分权限成功,但部分权限未正常授予"); + Toaster.show("获取定位权限失败"); return; } Log.e(TAG, "onGranted: 获取定位权限成功"); @@ -561,13 +560,13 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie @Override public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); - if (doNotAskAgain) { - Toaster.show("被永久拒绝授权,请手动授予定位权限"); - // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(MainActivity.this, permissions); - } else { - Log.e(TAG, "onGranted: 获取定位权限失败"); - } +// if (doNotAskAgain) { +// Toaster.show("被永久拒绝授权,请手动授予定位权限"); +// // 如果是被永久拒绝就跳转到应用权限系统设置页面 +// XXPermissions.startPermissionActivity(MainActivity.this, permissions); +// } else { +// Log.e(TAG, "onGranted: 获取定位权限失败"); +// } } }); } @@ -590,6 +589,7 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie mMMKV.encode("AgreePrivacyPolicy", 1); privacyPolicyDialog.dismiss(); getPermission(); + getLocationPermission(); } }); privacyPolicyDialog.show(); diff --git a/app/src/main/java/com/uiui/zyos/base/mvvm/fragment/BaseMvvmFragment.java b/app/src/main/java/com/uiui/zyos/base/mvvm/fragment/BaseMvvmFragment.java new file mode 100644 index 0000000..cb8e83d --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvvm/fragment/BaseMvvmFragment.java @@ -0,0 +1,275 @@ +package com.uiui.zyos.base.mvvm.fragment; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.uiui.zyos.base.BaseFragment; + +import java.lang.ref.WeakReference; +import java.lang.reflect.ParameterizedType; + +/** + * @author: lml + * @date: 2021/12/15 + */ +public abstract class BaseMvvmFragment extends BaseFragment { + protected String mTag = this.getClass().getSimpleName(); + /** + * 是否顯示了 + */ + protected boolean mIsVisible; + /** + * 是否準備好了-Created + */ + protected boolean mHasPrepare; + + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + // +// protected Toolbar toolbar; +// protected View statusBarView; + // + protected Bundle bundle;//来自getArguments() + protected Bundle savedInstanceState; + +// protected Context context; + + /** + * 上下文 + */ + private WeakReference ctx; + + public Context getCtx() { + return ctx == null ? null : ctx.get(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); +// this.context = context; + ctx = new WeakReference<>(context); + } + + /** + * onCreate、onResume里不能调用 + * + * @return + */ + public boolean isAttached() { + boolean flag = getCtx() != null && isAdded(); + Log.e(" >> isAttached >>", "flag = " + flag); + return flag; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //ViewDataBinding + mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false); + mViewDataBinding.setLifecycleOwner(this); + + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + mViewModel = new ViewModelProvider(this).get(vmClass); + // + return mViewDataBinding.getRoot(); + } + + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + +// if (initStatusBarToolBar()) { +// toolbar = getToolbar(); +// } + //注册eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.register(this); + // + +// fitsLayoutOverlap(); + initDataBinding(); + initView(bundle = getArguments()); + // + initData(this.savedInstanceState = savedInstanceState); + // + if (mIsVisible) { + onEnter(); + } + mHasPrepare = true; + // +// LiveDataBus.get().with(ConstantUtils.DATA_BUS_LOADING_FRAGMENT, Boolean.class).observe(getActivity(), bool -> { +// L.e(" >> LiveDataBus >> DATA_BUS_LOADING_FRAGMENT: %s", bool); +// if(bool) { +// showLoading(R.string.str_please_wait); +// } else { +// hideLoading(); +// } +// }); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mHasPrepare = false; + mViewDataBinding = null; + //移除eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.unregister(this); + // + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (mIsVisible == getUserVisibleHint()) + return; + mIsVisible = getUserVisibleHint(); + if (mIsVisible) { + if (!mHasPrepare) + return; + onEnter(); + } else { + onExit(); + } + } + + @LayoutRes + protected abstract int getLayoutId(); + +// protected abstract Toolbar getToolbar(); + +// protected View getStatusView() { +// return null; +// } + + protected abstract void initDataBinding(); + + protected abstract void initView(Bundle bundle); + + protected abstract void initData(Bundle savedInstanceState); + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); +// fitsLayoutOverlap(); + } + +// protected boolean isImmersionBarEnabled() { +// return true; +// } + +// protected boolean initStatusBarToolBar() { +// return true; +// } + + +// private void fitsLayoutOverlap() { +// if (!isImmersionBarEnabled()) return; +// if (statusBarView != null) { +// ImmersionBar.setStatusBarView(getActivity(), statusBarView); +// } +// if (toolbar != null) { +// ImmersionBar.setTitleBar(getActivity(), toolbar); +// } +// } + + protected void hideInputMethod(Activity activity) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + protected void hideInputMethod(Activity activity, EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + } + + protected void showInputMethod(EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); + } + + +// private CustomDialog mWaitDialog; +// +// public void showLoading(@StringRes int contentID) { +// showLoading(contentID, R.color.white); +// } +// +// public void showLoading(@StringRes int contentID, @ColorRes int color) { +// hideLoading(); +// DialogX.init(getActivity()); +// if (color == R.color.white) { +// mWaitDialog = DialogXUtil.getInstance().showLoading(getActivity(), getString(contentID), getResources().getColor(color)); +// } else { +// mWaitDialog = DialogXUtil.getInstance().showLoading_black(getActivity(), getString(contentID), getResources().getColor(color)); +// } +// } +// +// public void updateLoadingTip(@StringRes int messageID, int percent) { +// try { +// if (mWaitDialog != null && mWaitDialog.isShow()) { +// TextView tvTip = mWaitDialog.getCustomView().findViewById(R.id.tv_load_tip); +// if (tvTip != null) +// tvTip.setText(getResources().getString(messageID) + (percent == -1 ? "" : percent + "%")); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// public boolean isShowLoading() { +// return mWaitDialog != null && mWaitDialog.isShow(); +// } +// +// public void hideLoading() { +// try { +// boolean isShow = isShowLoading(); +// L.d(" >> hideLoading :: isShow: %s", isShow); +// if (isShow) +// mWaitDialog.dismiss(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + + /** + * 進入界面 + */ + protected void onEnter() { + + } + + /** + * 離開界面 + */ + protected void onExit() { + + } + +} diff --git a/app/src/main/java/com/uiui/zyos/config/CommonConfig.java b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java index 830ad70..a52c691 100644 --- a/app/src/main/java/com/uiui/zyos/config/CommonConfig.java +++ b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java @@ -40,4 +40,7 @@ public class CommonConfig { public static final String MANUALLY_SELECT_LOCATION_TUDE = "map_manually_select_tude"; /*默认北京原点*/ public static final String DEFAULT_LOCATION_TUDE = "116.40529,39.90499"; + + public static final String APPOINT_PERIOD_NAME = "appoint_period_name_key"; + } diff --git a/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java index 8e8291e..ebd5bda 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java @@ -5,15 +5,23 @@ import android.media.Image; import android.os.Bundle; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.TextView; +import com.tencent.mmkv.MMKV; import com.uiui.zyos.R; import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.databinding.FragmentPrecisionBinding; import com.uiui.zyos.fragment.ar.ARStudyFragment; import com.uiui.zyos.fragment.chinese.ChinesePresenter; import com.uiui.zyos.utils.OpenApkUtils; @@ -26,9 +34,11 @@ import butterknife.ButterKnife; * Use the {@link PrecisionFragment#newInstance} factory method to * create an instance of this fragment. */ -public class PrecisionFragment extends BaseFragment { +public class PrecisionFragment extends BaseMvvmFragment { private static final String TAG = PrecisionFragment.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @BindView(R.id.iv_bunk) ImageView iv_bunk; @BindView(R.id.iv_paper) @@ -40,9 +50,6 @@ public class PrecisionFragment extends BaseFragment { @BindView(R.id.iv_favorites) ImageView iv_favorites; - private View rootView;// 设置为全局的 - private Activity mContext; - // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -76,31 +83,43 @@ public class PrecisionFragment extends BaseFragment { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + protected int getLayoutId() { + return R.layout.fragment_precision; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + String grade = mMMKV.decodeString(CommonConfig.APPOINT_PERIOD_NAME, OpenApkUtils.NAME_PRIMARY_SCHOOL); + mViewDataBinding.tvGrade.setText(grade); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - Log.e(TAG, "onCreateView: "); - if (null != rootView) { - ViewGroup parent = (ViewGroup) rootView.getParent(); - if (null != parent) { - parent.removeView(rootView); + protected void initData(Bundle savedInstanceState) { + mViewModel.getTypeData().observe(this, new Observer() { + @Override + public void onChanged(String s) { + mMMKV.encode(CommonConfig.APPOINT_PERIOD_NAME,s); + mViewDataBinding.tvGrade.setText(s); } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_precision, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + }); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } @Override @@ -111,7 +130,6 @@ public class PrecisionFragment extends BaseFragment { @Override public void onDestroyView() { super.onDestroyView(); - rootView = null; } @Override @@ -125,66 +143,97 @@ public class PrecisionFragment extends BaseFragment { } } - private ARStudyFragment.UserVisibleHintCallback mUserVisibleHintCallback; + private UserVisibleHintCallback mUserVisibleHintCallback; public interface UserVisibleHintCallback { void onUserVisibleHint(); } - public void setUserVisibleHintCallback(ARStudyFragment.UserVisibleHintCallback userVisibleHintCallback) { + public void setUserVisibleHintCallback(UserVisibleHintCallback userVisibleHintCallback) { mUserVisibleHintCallback = userVisibleHintCallback; } - private void initView() { - iv_bunk.setOnClickListener(new View.OnClickListener() { + private void showPopupWindow(View view) { + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(getCtx()).inflate( + R.layout.popup_fault_type, null); + PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + // 设置按钮的点击事件 + TextView tv_type1 = contentView.findViewById(R.id.tv_type1); + tv_type1.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - if (OpenApkUtils.getInstance().isNewAiApp()) { - OpenApkUtils.getInstance().openAiPrecision(0, "语文"); - } else { - OpenApkUtils.getInstance().openPrecision("1"); - } + public void onClick(View v) { + mViewModel.getTypeData().setValue(OpenApkUtils.NAME_PRIMARY_SCHOOL); + popupWindow.dismiss(); } }); - iv_paper.setOnClickListener(new View.OnClickListener() { + TextView tv_type2 = contentView.findViewById(R.id.tv_type2); + tv_type2.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - if (OpenApkUtils.getInstance().isNewAiApp()) { - OpenApkUtils.getInstance().openAiPrecision(5, "语文"); - } else { - OpenApkUtils.getInstance().openPrecision("3"); - } + public void onClick(View v) { + mViewModel.getTypeData().setValue(OpenApkUtils.NAME_MIDDLE_SCHOOL); + popupWindow.dismiss(); } }); - iv_test.setOnClickListener(new View.OnClickListener() { + TextView tv_type3 = contentView.findViewById(R.id.tv_type3); + tv_type3.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - if (OpenApkUtils.getInstance().isNewAiApp()) { - OpenApkUtils.getInstance().openAiPrecision(1, "语文"); - } else { - OpenApkUtils.getInstance().openPrecision("2"); - } + public void onClick(View v) { + mViewModel.getTypeData().setValue(OpenApkUtils.NAME_HIGH_SCHOOL); + popupWindow.dismiss(); } }); - iv_book.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (OpenApkUtils.getInstance().isNewAiApp()) { - OpenApkUtils.getInstance().openAiPrecision(4, "语文"); - } else { - OpenApkUtils.getInstance().openPrecision("4"); - } + // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 + // 我觉得这里是API的一个bug +// popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.popup_background)); + // 设置好参数之后再show + popupWindow.showAsDropDown(view, 0, 4, Gravity.CENTER); + } + + public class BtnClick { + public void openPrecisionHome(View view) { + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, ""); + } else { + OpenApkUtils.getInstance().openPrecision("1"); } - }); - iv_favorites.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (OpenApkUtils.getInstance().isNewAiApp()) { - OpenApkUtils.getInstance().openAiPrecision(3, "语文"); - } else { - OpenApkUtils.getInstance().openPrecision("5"); - } + } + + public void openPrecisionTestPaper(View view) { + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(8, ""); + } else { + OpenApkUtils.getInstance().openPrecision("3"); } - }); + } + + public void openPrecisionSpecial(View view) { + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(7, ""); + } else { + OpenApkUtils.getInstance().openPrecision("2"); + } + } + + public void openPrecisionQuestionBook(View view) { + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(4, ""); + } else { + OpenApkUtils.getInstance().openPrecision("4"); + } + } + + public void openPrecisionFavorites(View view) { + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(3, ""); + } else { + OpenApkUtils.getInstance().openPrecision("5"); + } + } + + public void showWindow(View view) { + showPopupWindow(view); + } } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionViewModel.java new file mode 100644 index 0000000..b00172b --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionViewModel.java @@ -0,0 +1,25 @@ +package com.uiui.zyos.fragment.precision; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.zyos.base.mvvm.BaseViewModel; +import com.uiui.zyos.databinding.FragmentPrecisionBinding; + +public class PrecisionViewModel extends BaseViewModel { + @Override + public FragmentPrecisionBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + private MutableLiveData mTypeData = new MutableLiveData<>(); + + public MutableLiveData getTypeData() { + return mTypeData; + } +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java b/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java index afa3bf8..c9c5108 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java @@ -100,7 +100,7 @@ public class SubjectFragment extends BaseFragment { // } // }); mPrecisionFragment = new PrecisionFragment(); - mPrecisionFragment.setUserVisibleHintCallback(new ARStudyFragment.UserVisibleHintCallback() { + mPrecisionFragment.setUserVisibleHintCallback(new PrecisionFragment.UserVisibleHintCallback() { @Override public void onUserVisibleHint() { if (mViewPager != null) { diff --git a/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java index 44c6b79..753f3f6 100644 --- a/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java @@ -359,6 +359,17 @@ public class OpenApkUtils { /** * page_navigate 写死传0 + *

+ * key:"page_navigate" 说明: + * 0:主页 + * 3:收藏夹 + * 4:错题本 + * 7:考点学测 + * 8:一键诊断 + * 组卷中心:5 + * 阶段测:1 + * 专项测:2 + *

* appoint_subject_list 不需要传 * appoint_period_name 这个是学段,一定要传 , *

@@ -379,12 +390,15 @@ public class OpenApkUtils { Toaster.show("应用未安装"); return false; } + String grade = mMMKV.decodeString(CommonConfig.APPOINT_PERIOD_NAME, NAME_PRIMARY_SCHOOL); ComponentName cn = new ComponentName(packageName, className); Intent intent = new Intent(); intent.setComponent(cn); intent.putExtra("page_navigate", page); - intent.putExtra("appoint_subject_name", subject); - intent.putExtra("appoint_period_name", NAME_HIGH_SCHOOL); + if (!TextUtils.isEmpty(subject)) { + intent.putExtra("appoint_subject_name", subject); + } + intent.putExtra("appoint_period_name", grade); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); try { diff --git a/app/src/main/res/drawable-hdpi/icon_pull.png b/app/src/main/res/drawable-hdpi/icon_pull.png new file mode 100644 index 0000000..b1b7493 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_pull.png differ diff --git a/app/src/main/res/drawable-xhdpi/precision_stage_test.png b/app/src/main/res/drawable-xhdpi/precision_stage_test.png index 91c3c31..56f12fe 100644 Binary files a/app/src/main/res/drawable-xhdpi/precision_stage_test.png and b/app/src/main/res/drawable-xhdpi/precision_stage_test.png differ diff --git a/app/src/main/res/drawable-xhdpi/precision_test_paper.png b/app/src/main/res/drawable-xhdpi/precision_test_paper.png index f5f2bca..ee4ab24 100644 Binary files a/app/src/main/res/drawable-xhdpi/precision_test_paper.png and b/app/src/main/res/drawable-xhdpi/precision_test_paper.png differ diff --git a/app/src/main/res/drawable/grade_bg.xml b/app/src/main/res/drawable/grade_bg.xml new file mode 100644 index 0000000..891dbe8 --- /dev/null +++ b/app/src/main/res/drawable/grade_bg.xml @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/grade_pop_bg.xml b/app/src/main/res/drawable/grade_pop_bg.xml new file mode 100644 index 0000000..12ca56d --- /dev/null +++ b/app/src/main/res/drawable/grade_pop_bg.xml @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_precision.xml b/app/src/main/res/layout-land/fragment_precision.xml index 3f0643e..04179d1 100644 --- a/app/src/main/res/layout-land/fragment_precision.xml +++ b/app/src/main/res/layout-land/fragment_precision.xml @@ -1,130 +1,176 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout"> - + - + - + - + + + + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_precision.xml b/app/src/main/res/layout-sw800dp/fragment_precision.xml index 661e0bb..7a7d46d 100644 --- a/app/src/main/res/layout-sw800dp/fragment_precision.xml +++ b/app/src/main/res/layout-sw800dp/fragment_precision.xml @@ -1,128 +1,177 @@ - - + + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout"> + + + + + + + - + - - - - - - + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_precision.xml b/app/src/main/res/layout/fragment_precision.xml index 3f0643e..04179d1 100644 --- a/app/src/main/res/layout/fragment_precision.xml +++ b/app/src/main/res/layout/fragment_precision.xml @@ -1,130 +1,176 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout"> - + - + - + - + + + + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_fault_type.xml b/app/src/main/res/layout/popup_fault_type.xml new file mode 100644 index 0000000..12752dd --- /dev/null +++ b/app/src/main/res/layout/popup_fault_type.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file