From 7ba860336315ff14a49ea482d792237882e3d879 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Wed, 28 Aug 2024 15:24:57 +0800 Subject: [PATCH] =?UTF-8?q?version:1.8.7=20fix:=20update:=E5=8E=BB?= =?UTF-8?q?=E6=8E=89butterknife?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 14 +- app/src/main/AndroidManifest.xml | 1 - .../aidl/com/uiui/zy/IGetInfoInterface.aidl | 4 + .../uiui/zyos/activity/AddIconActivity.java | 37 +- .../com/uiui/zyos/activity/ExitActivity.java | 98 +- .../uiui/zyos/activity/NoticeActivity.java | 123 ++- .../uiui/zyos/activity/PasswordActivity.java | 98 +- .../uiui/zyos/activity/main/MainActivity.java | 301 +++--- .../uiui/zyos/activity/main/MainContact.java | 18 - ...MainAPresenter.java => MainViewModel.java} | 58 +- .../zyos/activity/more/MoreAppActivity.java | 75 +- .../zyos/activity/more/MoreAppViewModel.java | 37 + .../uiui/zyos/activity/more/MoreContact.java | 17 - .../zyos/activity/more/MorePresenter.java | 59 -- .../com/uiui/zyos/adapter/AddAppAdapter.java | 2 +- .../com/uiui/zyos/adapter/AppAdapter.java | 2 +- .../com/uiui/zyos/adapter/FileAdapter.java | 139 +++ .../java/com/uiui/zyos/alarm/AlarmUtils.java | 3 +- .../com/uiui/zyos/base/BaseApplication.java | 4 +- .../zyos/base/BaseDataBindingFragment.java | 257 +++++ .../com/uiui/zyos/base/BaseLazyFragment.java | 2 +- .../uiui/zyos/base/mvvm/BaseMvvmActivity.java | 2 +- .../java/com/uiui/zyos/bean/GuideBean.java | 26 + .../uiui/zyos/disklrucache/CacheHelper.java | 2 +- .../uiui/zyos/fragment/app/AppContact.java | 17 - .../uiui/zyos/fragment/app/AppFragment.java | 113 +-- .../{AppPresenter.java => AppViewModel.java} | 51 +- .../zyos/fragment/ar/ARStudyFragment.java | 113 +-- .../fragment/biology/BiologyFragment.java | 79 +- .../fragment/chemical/ChemicalFragment.java | 79 +- .../zyos/fragment/chinese/ChineseContact.java | 15 - .../fragment/chinese/ChineseFragment.java | 152 +-- .../fragment/chinese/ChinesePresenter.java | 39 - .../fragment/chinese/ChineseViewModel.java | 18 + .../fragment/complex/ComplexFragment.java | 100 +- .../fragment/english/EnglishFragment.java | 88 +- .../uiui/zyos/fragment/main/MainContact.java | 14 - .../zyos/fragment/main/MainFPresenter.java | 39 - .../uiui/zyos/fragment/main/MainFragment.java | 150 +-- .../zyos/fragment/main/MainViewModel.java | 20 + .../uiui/zyos/fragment/math/MathFragment.java | 114 +-- .../fragment/physics/PhysicsFragment.java | 66 +- .../fragment/precision/PrecisionFragment.java | 30 +- .../fragment/subject/SubjectFragment.java | 98 +- .../uiui/zyos/fragment/user/UserContact.java | 31 - .../uiui/zyos/fragment/user/UserFragment.java | 379 +++---- ...{UserPresenter.java => UserViewModel.java} | 87 +- .../iconpostition/IconPositionManager.java | 2 +- .../com/uiui/zyos/manager/AmapManager.java | 2 +- .../com/uiui/zyos/manager/AppManager.java | 2 +- .../com/uiui/zyos/manager/ConnectManager.java | 2 +- .../com/uiui/zyos/manager/RemoteManager.java | 12 +- .../zyos/network/NetInterfaceManager.java | 19 +- .../com/uiui/zyos/network/UrlAddress.java | 2 + .../uiui/zyos/network/api/GetFilesApi.java | 16 + .../interceptor/RepeatRequestInterceptor.java | 4 +- .../java/com/uiui/zyos/push/PushManager.java | 2 +- .../push/alipush/AliMessageIntentService.java | 2 +- .../push/alipush/AliyunMessageReceiver.java | 2 +- .../zyos/receiver/APKinstallReceiver.java | 2 +- .../com/uiui/zyos/receiver/BootReceiver.java | 2 +- .../uiui/zyos/service/DownloadService.java | 2 +- .../zyos/service/NotificationService.java | 2 +- .../uiui/zyos/service/main/MainSContact.java | 3 - .../zyos/service/main/MainSPresenter.java | 3 +- .../uiui/zyos/service/main/MainService.java | 8 +- .../java/com/uiui/zyos/utils/ApkUtils.java | 4 +- .../com/uiui/zyos/utils/AppUsedTimeUtils.java | 2 +- .../uiui/zyos/utils/ForegroundAppUtil.java | 2 +- .../com/uiui/zyos/utils/GlideLoadUtils.java | 2 +- .../com/uiui/zyos/utils/OpenApkUtils.java | 2 +- .../java/com/uiui/zyos/utils/TimeUtils.java | 2 +- .../main/java/com/uiui/zyos/utils/Utils.java | 2 +- .../zyos/view/GridSpaceItemDecoration.java | 3 +- .../java/com/uiui/zyos/view/MyGridLayout.java | 2 +- .../main/res/drawable-hdpi/default_avatar.png | Bin 7537 -> 7777 bytes .../drawable-hdpi/icon_activition_bind.png | Bin 0 -> 7715 bytes .../main/res/drawable-xhdpi/user_app_box.png | Bin 6902 -> 6809 bytes .../res/drawable-xhdpi/user_center_box.png | Bin 5823 -> 4280 bytes app/src/main/res/drawable-xhdpi/user_more.png | Bin 1672 -> 1722 bytes .../main/res/drawable/tv_bind_background.xml | 25 + .../main/res/layout-land/activity_exit.xml | 447 ++++----- app/src/main/res/layout-land/fragment_app.xml | 69 +- .../res/layout-land/fragment_ar_study.xml | 131 +-- .../main/res/layout-land/fragment_biology.xml | 247 ++--- .../res/layout-land/fragment_chemical.xml | 249 ++--- .../main/res/layout-land/fragment_chinese.xml | 861 ++++++++-------- .../main/res/layout-land/fragment_complex.xml | 857 ++++++++-------- .../main/res/layout-land/fragment_english.xml | 247 ++--- .../main/res/layout-land/fragment_main.xml | 509 +++++----- .../main/res/layout-land/fragment_math.xml | 705 ++++++------- .../main/res/layout-land/fragment_physics.xml | 245 ++--- .../main/res/layout-land/fragment_subject.xml | 63 +- .../main/res/layout-land/fragment_user.xml | 927 ++++++++--------- .../main/res/layout-sw800dp/activity_exit.xml | 447 ++++----- .../main/res/layout-sw800dp/activity_main.xml | 682 ++++++------- .../res/layout-sw800dp/fragment_biology.xml | 247 ++--- .../res/layout-sw800dp/fragment_chemical.xml | 249 ++--- .../res/layout-sw800dp/fragment_chinese.xml | 861 ++++++++-------- .../res/layout-sw800dp/fragment_complex.xml | 857 ++++++++-------- .../res/layout-sw800dp/fragment_english.xml | 247 ++--- .../main/res/layout-sw800dp/fragment_math.xml | 703 ++++++------- .../res/layout-sw800dp/fragment_physics.xml | 245 ++--- .../res/layout-sw800dp/fragment_subject.xml | 63 +- .../main/res/layout-sw800dp/fragment_user.xml | 930 +++++++++--------- app/src/main/res/layout/activity_add_icon.xml | 113 ++- app/src/main/res/layout/activity_exit.xml | 451 ++++----- app/src/main/res/layout/activity_main.xml | 769 ++++++++------- app/src/main/res/layout/activity_moreapp.xml | 117 ++- app/src/main/res/layout/activity_notice.xml | 141 +-- app/src/main/res/layout/activity_passwd.xml | 453 ++++----- app/src/main/res/layout/fragment_app.xml | 69 +- app/src/main/res/layout/fragment_ar_study.xml | 131 +-- app/src/main/res/layout/fragment_biology.xml | 247 ++--- app/src/main/res/layout/fragment_chemical.xml | 249 ++--- app/src/main/res/layout/fragment_chinese.xml | 861 ++++++++-------- app/src/main/res/layout/fragment_complex.xml | 857 ++++++++-------- app/src/main/res/layout/fragment_english.xml | 247 ++--- app/src/main/res/layout/fragment_main.xml | 516 +++++----- app/src/main/res/layout/fragment_math.xml | 705 ++++++------- app/src/main/res/layout/fragment_physics.xml | 245 ++--- app/src/main/res/layout/fragment_subject.xml | 63 +- app/src/main/res/layout/fragment_user.xml | 929 ++++++++--------- app/src/main/res/layout/item_file.xml | 72 ++ 124 files changed, 10906 insertions(+), 10823 deletions(-) delete mode 100644 app/src/main/java/com/uiui/zyos/activity/main/MainContact.java rename app/src/main/java/com/uiui/zyos/activity/main/{MainAPresenter.java => MainViewModel.java} (70%) create mode 100644 app/src/main/java/com/uiui/zyos/activity/more/MoreAppViewModel.java delete mode 100644 app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java delete mode 100644 app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java create mode 100644 app/src/main/java/com/uiui/zyos/adapter/FileAdapter.java create mode 100644 app/src/main/java/com/uiui/zyos/base/BaseDataBindingFragment.java create mode 100644 app/src/main/java/com/uiui/zyos/bean/GuideBean.java delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java rename app/src/main/java/com/uiui/zyos/fragment/app/{AppPresenter.java => AppViewModel.java} (61%) delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java create mode 100644 app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseViewModel.java delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java create mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainViewModel.java delete mode 100644 app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java rename app/src/main/java/com/uiui/zyos/fragment/user/{UserPresenter.java => UserViewModel.java} (74%) create mode 100644 app/src/main/java/com/uiui/zyos/network/api/GetFilesApi.java create mode 100644 app/src/main/res/drawable-hdpi/icon_activition_bind.png create mode 100644 app/src/main/res/drawable/tv_bind_background.xml create mode 100644 app/src/main/res/layout/item_file.xml diff --git a/app/build.gradle b/app/build.gradle index 065f9bf..5e691ba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { minSdkVersion 24 targetSdkVersion 29 - versionCode 78 - versionName "1.8.6" + versionCode 79 + versionName "1.8.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -84,7 +84,7 @@ android { signingConfig signingConfigs.U807 buildConfigField "String", "platform", '"U807"' manifestPlaceholders = [ - AMAP_KEY : "d0cdff4516bb1a788ebdc02aeee75614" + AMAP_KEY : "8200776fc8cad995184a9a3a17a552e4" ] } @@ -93,7 +93,7 @@ android { signingConfig signingConfigs.U807 buildConfigField "String", "platform", '"U807"' manifestPlaceholders = [ - AMAP_KEY : "d0cdff4516bb1a788ebdc02aeee75614" + AMAP_KEY : "8200776fc8cad995184a9a3a17a552e4" ] } @@ -172,7 +172,7 @@ dependencies { implementation "androidx.room:room-runtime:2.4.3" annotationProcessor "androidx.room:room-compiler:2.4.3" //内存泄漏检测 - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14' //磁盘缓存 implementation 'com.jakewharton:disklrucache:2.0.2' //glide @@ -196,9 +196,7 @@ dependencies { implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2' - //bindView - implementation 'com.jakewharton:butterknife:10.2.3' - annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' + implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' implementation 'com.jeremyliao:live-event-bus-x:1.7.3' //MMKV diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7d6cb6f..f6be341 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ diff --git a/app/src/main/aidl/com/uiui/zy/IGetInfoInterface.aidl b/app/src/main/aidl/com/uiui/zy/IGetInfoInterface.aidl index f9c0dd6..13d32e4 100644 --- a/app/src/main/aidl/com/uiui/zy/IGetInfoInterface.aidl +++ b/app/src/main/aidl/com/uiui/zy/IGetInfoInterface.aidl @@ -27,4 +27,8 @@ interface IGetInfoInterface { List getAdminApp(); //写入系统数据 boolean putSecureInt(String key, int value); + //写入系统数据 + boolean putSystemInt(String key, int value); + //写入系统数据 + boolean putSystemFloat(String key, float value); } diff --git a/app/src/main/java/com/uiui/zyos/activity/AddIconActivity.java b/app/src/main/java/com/uiui/zyos/activity/AddIconActivity.java index 9388655..ed234a4 100644 --- a/app/src/main/java/com/uiui/zyos/activity/AddIconActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/AddIconActivity.java @@ -4,16 +4,15 @@ import android.content.Context; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; import com.uiui.zyos.adapter.AddAppAdapter; -import com.uiui.zyos.base.mvp.BaseMvpActivity; +import com.uiui.zyos.base.BaseDataBindingActivity; import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.databinding.ActivityAddIconBinding; import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; @@ -21,36 +20,27 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Set; -import butterknife.BindView; -import butterknife.ButterKnife; +public class AddIconActivity extends BaseDataBindingActivity { -public class AddIconActivity extends BaseMvpActivity { - - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.tv_appsize) - TextView tv_appsize; + private ActivityAddIconBinding mBinding; private AddAppAdapter mAddAppAdapter; @Override - public int getLayoutId() { - return R.layout.activity_add_icon; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_add_icon); } @Override public void initView() { - ButterKnife.bind(this); - iv_back.setOnClickListener(new View.OnClickListener() { + mBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); - recyclerView.setLayoutManager(new GridLayoutManager(this, 6)); + mBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 6)); HashMap stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); @@ -60,9 +50,9 @@ public class AddIconActivity extends BaseMvpActivity { stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mAddAppAdapter = new AddAppAdapter(); - recyclerView.setAdapter(mAddAppAdapter); + mBinding.recyclerView.setAdapter(mAddAppAdapter); } @Override @@ -72,9 +62,6 @@ public class AddIconActivity extends BaseMvpActivity { Set appList = AppManager.getInstance().getFilterAppset(); mAddAppAdapter.setPackageSet(appList); - tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size())); - + mBinding.tvAppsize.setText(String.format(getString(R.string.app_size), desktopIcons.size())); } - - } diff --git a/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java b/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java index 10ea3ca..a1d46cf 100644 --- a/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java @@ -11,56 +11,21 @@ import android.util.Log; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import android.widget.LinearLayout; -import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; import com.tuo.customview.VerificationCodeView; import com.uiui.zyos.R; -import com.uiui.zyos.base.mvp.BaseMvpActivity; +import com.uiui.zyos.base.BaseDataBindingActivity; import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.databinding.ActivityExitBinding; import com.uiui.zyos.utils.Utils; -import butterknife.BindView; -import butterknife.ButterKnife; +public class ExitActivity extends BaseDataBindingActivity { + private static final String TAG = "ExitActivity"; -public class ExitActivity extends BaseMvpActivity { - private static final String TAG = ExitActivity.class.getSimpleName(); - - @BindView(R.id.bt_0) - TextView bt0; - @BindView(R.id.bt_1) - TextView bt1; - @BindView(R.id.bt_2) - TextView bt2; - @BindView(R.id.bt_3) - TextView bt3; - @BindView(R.id.bt_4) - TextView bt4; - @BindView(R.id.bt_5) - TextView bt5; - @BindView(R.id.bt_6) - TextView bt6; - @BindView(R.id.bt_7) - TextView bt7; - @BindView(R.id.bt_8) - TextView bt8; - @BindView(R.id.bt_9) - TextView bt9; - @BindView(R.id.bt_del) - TextView bt_del; - @BindView(R.id.bt_confirm) - TextView bt_confirm; - - @BindView(R.id.textView) - TextView textView; - @BindView(R.id.tv_hint) - TextView tv_hint; - @BindView(R.id.ll_keyboard) - LinearLayout ll_keyboard; - @BindView(R.id.icv) - VerificationCodeView codeView; + private ActivityExitBinding mBinding; private SoundPool soundPool; private int soundId; @@ -80,22 +45,21 @@ public class ExitActivity extends BaseMvpActivity { } @Override - public int getLayoutId() { - return R.layout.activity_exit; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_exit); } @Override public void initView() { - ButterKnife.bind(this); InputMethodManager imm = (InputMethodManager) ExitActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0); - codeView.getEditText().setOnClickListener(new View.OnClickListener() { + imm.hideSoftInputFromWindow(mBinding.icv.getWindowToken(), 0); + mBinding.icv.getEditText().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ll_keyboard.setVisibility(View.VISIBLE); + mBinding.llKeyboard.setVisibility(View.VISIBLE); } }); - codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { + mBinding.icv.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { @Override public void inputComplete() { checkPasswd(); @@ -107,34 +71,34 @@ public class ExitActivity extends BaseMvpActivity { } }); - bt_del.setOnClickListener(new View.OnClickListener() { + mBinding.btDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - tv_hint.setText(""); - codeView.clearInputContent(); + mBinding.tvHint.setText(""); + mBinding.icv.clearInputContent(); } }); - bt_confirm.setOnClickListener(new View.OnClickListener() { + mBinding.btConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkPasswd(); } }); - bt0.setOnClickListener(view1 -> add(codeView, "0")); - bt1.setOnClickListener(view1 -> add(codeView, "1")); - bt2.setOnClickListener(view1 -> add(codeView, "2")); - bt3.setOnClickListener(view1 -> add(codeView, "3")); - bt4.setOnClickListener(view1 -> add(codeView, "4")); - bt5.setOnClickListener(view1 -> add(codeView, "5")); - bt6.setOnClickListener(view1 -> add(codeView, "6")); - bt7.setOnClickListener(view1 -> add(codeView, "7")); - bt8.setOnClickListener(view1 -> add(codeView, "8")); - bt9.setOnClickListener(view1 -> add(codeView, "9")); + mBinding.bt0.setOnClickListener(view1 -> add(mBinding.icv, "0")); + mBinding.bt1.setOnClickListener(view1 -> add(mBinding.icv, "1")); + mBinding.bt2.setOnClickListener(view1 -> add(mBinding.icv, "2")); + mBinding.bt3.setOnClickListener(view1 -> add(mBinding.icv, "3")); + mBinding.bt4.setOnClickListener(view1 -> add(mBinding.icv, "4")); + mBinding.bt5.setOnClickListener(view1 -> add(mBinding.icv, "5")); + mBinding.bt6.setOnClickListener(view1 -> add(mBinding.icv, "6")); + mBinding.bt7.setOnClickListener(view1 -> add(mBinding.icv, "7")); + mBinding.bt8.setOnClickListener(view1 -> add(mBinding.icv, "8")); + mBinding.bt9.setOnClickListener(view1 -> add(mBinding.icv, "9")); } private void checkPasswd() { - String content = codeView.getInputContent(); + String content = mBinding.icv.getInputContent(); if (TextUtils.isEmpty(content) || content.length() != 6) { return; } @@ -145,13 +109,13 @@ public class ExitActivity extends BaseMvpActivity { Utils.exitDesktop(this); } else { setEmpty(); - tv_hint.setText("密码错误"); + mBinding.tvHint.setText("密码错误"); } } else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) { Utils.exitDesktop(this); } else { setEmpty(); - tv_hint.setText("密码错误"); + mBinding.tvHint.setText("密码错误"); } } @@ -159,8 +123,8 @@ public class ExitActivity extends BaseMvpActivity { Handler.getMain().postDelayed(new Runnable() { @Override public void run() { - codeView.clearInputContent(); - tv_hint.setText(""); + mBinding.icv.clearInputContent(); + mBinding.tvHint.setText(""); } }, 1000); } diff --git a/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java b/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java index 21b2b5d..2b67bd9 100644 --- a/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java @@ -4,18 +4,13 @@ import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; -import android.os.Bundle; import android.os.PowerManager; import android.os.Vibrator; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.appcompat.app.AppCompatActivity; -import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.databinding.DataBindingUtil; import com.blankj.utilcode.util.FileUtils; import com.bumptech.glide.Glide; @@ -23,14 +18,15 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.uiui.zyos.R; import com.uiui.zyos.alarm.AlarmUtils; +import com.uiui.zyos.base.BaseDataBindingActivity; import com.uiui.zyos.bean.AlarmClockData; import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.databinding.ActivityNoticeBinding; import com.uiui.zyos.network.NetInterfaceManager; import com.uiui.zyos.utils.FileUtil; import com.uiui.zyos.utils.ScreenUtils; import com.uiui.zyos.utils.Utils; import com.uiui.zyos.utils.WakeUpUtils; -import com.uiui.zyos.view.JzvdStdAssert; import java.io.File; import java.io.FileInputStream; @@ -38,63 +34,58 @@ import java.io.IOException; import java.net.URI; import java.util.HashMap; -import butterknife.BindView; -import butterknife.ButterKnife; import cn.jzvd.JZDataSource; import cn.jzvd.Jzvd; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class NoticeActivity extends AppCompatActivity { - private String TAG = NoticeActivity.class.getSimpleName(); +public class NoticeActivity extends BaseDataBindingActivity { + private static final String TAG = "NoticeActivity"; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.bt_ok) - Button bt_ok; - @BindView(R.id.cl_voice) - ConstraintLayout cl_voice; - @BindView(R.id.cl_vp) - ConstraintLayout cl_vp; - @BindView(R.id.jz_video) - JzvdStdAssert jz_video; - @BindView(R.id.iv_dictation) - ImageView imageView; + private ActivityNoticeBinding mBinding; - private AlarmClockData alarmClockData; + private AlarmClockData mAlarmClockData; private int code; - private MediaPlayer mediaPlayer; - private PowerManager pm; - private PowerManager.WakeLock wakeLock; + private MediaPlayer mMediaPlayer; + private PowerManager mPowerManager; + private PowerManager.WakeLock mWakeLock; private AudioManager audioManager; - private Vibrator vibrator; + private Vibrator mVibrator; + @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_notice); - ButterKnife.bind(this); + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_notice); + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { Intent intent = getIntent(); code = intent.getIntExtra("id", -1); - pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock"); - vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); + mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); + mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock"); + mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); if (code == -1) { finish(); } else { - wakeLock.acquire(60 * 1000L); + mWakeLock.acquire(60 * 1000L); long[] pattern = {1000, 5000, 1000, 5000}; - vibrator.vibrate(pattern, 0); + mVibrator.vibrate(pattern, 0); WakeUpUtils.wakeUpAndUnlockScreen(this); HashMap oldData = AlarmUtils.getInstance().getOldData(); - alarmClockData = oldData.get(code); - if (alarmClockData == null) { + mAlarmClockData = oldData.get(code); + if (mAlarmClockData == null) { finish(); } - Log.e(TAG, "onCreate: " + alarmClockData); - showData(alarmClockData); + Log.e(TAG, "onCreate: " + mAlarmClockData); + showData(mAlarmClockData); } } @@ -102,8 +93,8 @@ public class NoticeActivity extends AppCompatActivity { audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.FLAG_PLAY_SOUND); - tv_title.setText(alarmClockData.getTitle()); - bt_ok.setOnClickListener(new View.OnClickListener() { + mBinding.tvTitle.setText(alarmClockData.getTitle()); + mBinding.btOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { HashMap oldData = AlarmUtils.getInstance().getOldData(); @@ -145,45 +136,45 @@ public class NoticeActivity extends AppCompatActivity { String filePath = alarmClockData.getFile(); if (!TextUtils.isEmpty(voiceUrl)) { - cl_voice.setVisibility(View.VISIBLE); + mBinding.clVoice.setVisibility(View.VISIBLE); String fileName = Utils.getFileNamefromURL(voiceUrl); File file = new File(Utils.getDownLoadPath(NoticeActivity.this) + fileName); String fileMD5 = FileUtils.getFileMD5ToString(file); // if (!md5.equals(fileMD5)) { // // TODO: 2021/12/16 // } else { - mediaPlayer = new MediaPlayer(); + mMediaPlayer = new MediaPlayer(); try { // 切歌之前先重置,释放掉之前的资源 - mediaPlayer.reset(); + mMediaPlayer.reset(); FileInputStream fis = new FileInputStream(file); - mediaPlayer.setDataSource(fis.getFD()); + mMediaPlayer.setDataSource(fis.getFD()); // 设置播放源 // mediaPlayer.setDataSource(file.getAbsolutePath()); // 开始播放前的准备工作,加载多媒体资源,获取相关信息 - mediaPlayer.prepare(); + mMediaPlayer.prepare(); // 开始播放 - mediaPlayer.start(); + mMediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "showData: " + e.getMessage()); } // } } else { - cl_voice.setVisibility(View.GONE); + mBinding.clVoice.setVisibility(View.GONE); } if (!TextUtils.isEmpty(filePath)) { - cl_vp.setVisibility(View.VISIBLE); + mBinding.clVp.setVisibility(View.VISIBLE); String fileType = FileUtil.getFileType(filePath); Log.e(TAG, "showData: " + fileType); if (FileUtil.isPictureFile(fileType)) { - jz_video.setVisibility(View.GONE); - imageView.setVisibility(View.VISIBLE); + mBinding.jzVideo.setVisibility(View.GONE); + mBinding.ivDictation.setVisibility(View.VISIBLE); RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(this, 16F))); - Glide.with(NoticeActivity.this).load(filePath).apply(options).into(imageView); + Glide.with(NoticeActivity.this).load(filePath).apply(options).into(mBinding.ivDictation); } else if (FileUtil.isVideoFile(fileType)) { - jz_video.setVisibility(View.VISIBLE); - imageView.setVisibility(View.GONE); + mBinding.jzVideo.setVisibility(View.VISIBLE); + mBinding.ivDictation.setVisibility(View.GONE); String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length()); String realPath = Utils.getDownLoadPath(NoticeActivity.this) + fileName; File file = new File(realPath); @@ -197,13 +188,13 @@ public class NoticeActivity extends AppCompatActivity { jzDataSource = new JZDataSource(uri.toString(), ""); } jzDataSource.looping = true; - jz_video.setUp(jzDataSource, Jzvd.SCREEN_NORMAL); - jz_video.startPreloading(); - jz_video.startVideoAfterPreloading(); - jz_video.startVideo(); + mBinding.jzVideo.setUp(jzDataSource, Jzvd.SCREEN_NORMAL); + mBinding.jzVideo.startPreloading(); + mBinding.jzVideo.startVideoAfterPreloading(); + mBinding.jzVideo.startVideo(); } } else { - cl_vp.setVisibility(View.GONE); + mBinding.clVp.setVisibility(View.GONE); } } @@ -211,12 +202,12 @@ public class NoticeActivity extends AppCompatActivity { @Override protected void onDestroy() { super.onDestroy(); - if (mediaPlayer != null) { - if (mediaPlayer.isPlaying()) { - mediaPlayer.stop(); + if (mMediaPlayer != null) { + if (mMediaPlayer.isPlaying()) { + mMediaPlayer.stop(); } - mediaPlayer.release(); - mediaPlayer = null; + mMediaPlayer.release(); + mMediaPlayer = null; } } diff --git a/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java b/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java index 7b7b48e..2a5c5b4 100644 --- a/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java @@ -10,55 +10,20 @@ import android.util.Log; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import android.widget.LinearLayout; -import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; import com.tuo.customview.VerificationCodeView; import com.uiui.zyos.R; -import com.uiui.zyos.base.mvp.BaseMvpActivity; +import com.uiui.zyos.base.BaseDataBindingActivity; import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.databinding.ActivityPasswdBinding; -import butterknife.BindView; -import butterknife.ButterKnife; +public class PasswordActivity extends BaseDataBindingActivity { + private static final String TAG = "PasswordActivity"; -public class PasswordActivity extends BaseMvpActivity { - private static final String TAG = PasswordActivity.class.getSimpleName(); - - @BindView(R.id.bt_0) - TextView bt0; - @BindView(R.id.bt_1) - TextView bt1; - @BindView(R.id.bt_2) - TextView bt2; - @BindView(R.id.bt_3) - TextView bt3; - @BindView(R.id.bt_4) - TextView bt4; - @BindView(R.id.bt_5) - TextView bt5; - @BindView(R.id.bt_6) - TextView bt6; - @BindView(R.id.bt_7) - TextView bt7; - @BindView(R.id.bt_8) - TextView bt8; - @BindView(R.id.bt_9) - TextView bt9; - @BindView(R.id.bt_del) - TextView bt_del; - @BindView(R.id.bt_confirm) - TextView bt_confirm; - - @BindView(R.id.textView) - TextView textView; - @BindView(R.id.tv_hint) - TextView tv_hint; - @BindView(R.id.ll_keyboard) - LinearLayout ll_keyboard; - @BindView(R.id.icv) - VerificationCodeView codeView; + private ActivityPasswdBinding mBinding; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -67,22 +32,21 @@ public class PasswordActivity extends BaseMvpActivity { } @Override - public int getLayoutId() { - return R.layout.activity_passwd; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_passwd); } @Override public void initView() { - ButterKnife.bind(this); InputMethodManager imm = (InputMethodManager) PasswordActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0); - codeView.getEditText().setOnClickListener(new View.OnClickListener() { + imm.hideSoftInputFromWindow(mBinding.icv.getWindowToken(), 0); + mBinding.icv.getEditText().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ll_keyboard.setVisibility(View.VISIBLE); + mBinding.llKeyboard.setVisibility(View.VISIBLE); } }); - codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { + mBinding.icv.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { @Override public void inputComplete() { checkPasswd(); @@ -94,34 +58,34 @@ public class PasswordActivity extends BaseMvpActivity { } }); - bt_del.setOnClickListener(new View.OnClickListener() { + mBinding.btDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - tv_hint.setText(""); - codeView.clearInputContent(); + mBinding.tvHint.setText(""); + mBinding.icv.clearInputContent(); } }); - bt_confirm.setOnClickListener(new View.OnClickListener() { + mBinding.btConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkPasswd(); } }); - bt0.setOnClickListener(view1 -> add(codeView, "0")); - bt1.setOnClickListener(view1 -> add(codeView, "1")); - bt2.setOnClickListener(view1 -> add(codeView, "2")); - bt3.setOnClickListener(view1 -> add(codeView, "3")); - bt4.setOnClickListener(view1 -> add(codeView, "4")); - bt5.setOnClickListener(view1 -> add(codeView, "5")); - bt6.setOnClickListener(view1 -> add(codeView, "6")); - bt7.setOnClickListener(view1 -> add(codeView, "7")); - bt8.setOnClickListener(view1 -> add(codeView, "8")); - bt9.setOnClickListener(view1 -> add(codeView, "9")); + mBinding.bt0.setOnClickListener(view1 -> add(mBinding.icv, "0")); + mBinding.bt1.setOnClickListener(view1 -> add(mBinding.icv, "1")); + mBinding.bt2.setOnClickListener(view1 -> add(mBinding.icv, "2")); + mBinding.bt3.setOnClickListener(view1 -> add(mBinding.icv, "3")); + mBinding.bt4.setOnClickListener(view1 -> add(mBinding.icv, "4")); + mBinding.bt5.setOnClickListener(view1 -> add(mBinding.icv, "5")); + mBinding.bt6.setOnClickListener(view1 -> add(mBinding.icv, "6")); + mBinding.bt7.setOnClickListener(view1 -> add(mBinding.icv, "7")); + mBinding.bt8.setOnClickListener(view1 -> add(mBinding.icv, "8")); + mBinding.bt9.setOnClickListener(view1 -> add(mBinding.icv, "9")); } private void checkPasswd() { - String content = codeView.getInputContent(); + String content = mBinding.icv.getInputContent(); if (TextUtils.isEmpty(content) || content.length() != 6) { return; } @@ -133,14 +97,14 @@ public class PasswordActivity extends BaseMvpActivity { finish(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mBinding.tvHint.setText("密码错误"); } } else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) { startActivity(new Intent(PasswordActivity.this, AddIconActivity.class)); finish(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mBinding.tvHint.setText("密码错误"); } } @@ -148,8 +112,8 @@ public class PasswordActivity extends BaseMvpActivity { Handler.getMain().postDelayed(new Runnable() { @Override public void run() { - codeView.clearInputContent(); - tv_hint.setText(""); + mBinding.icv.clearInputContent(); + mBinding.tvHint.setText(""); } }, 1000); } 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 e50756e..be64930 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 @@ -17,10 +17,8 @@ import android.view.KeyEvent; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; -import android.widget.ImageView; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; @@ -33,8 +31,9 @@ import com.tencent.mmkv.MMKV; import com.uiui.zyos.BuildConfig; import com.uiui.zyos.R; import com.uiui.zyos.activity.ExitActivity; -import com.uiui.zyos.base.mvp.BaseMvpActivity; +import com.uiui.zyos.base.mvvm.BaseMvvmActivity; import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.databinding.ActivityMainBinding; import com.uiui.zyos.dialog.PrivacyPolicyDialog; import com.uiui.zyos.fragment.subject.SubjectFragment; import com.uiui.zyos.fragment.user.UserFragment; @@ -47,79 +46,43 @@ import com.uiui.zyos.utils.Utils; import com.uiui.zyos.view.ScaleCircleNavigator; import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; -import net.lucode.hackware.magicindicator.MagicIndicator; - import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class MainActivity extends BaseMvpActivity implements MainContact.MainView, RemoteManager.ConnectedListener { - private static final String TAG = MainActivity.class.getSimpleName(); - - - @BindView(R.id.viewPager) - ViewPager mViewPager; - @BindView(R.id.magicIndicator) - MagicIndicator mMagicIndicator; - - @BindView(R.id.cl_0) - ConstraintLayout cl_0; - @BindView(R.id.cl_1) - ConstraintLayout cl_1; - @BindView(R.id.cl_2) - ConstraintLayout cl_2; - @BindView(R.id.cl_3) - ConstraintLayout cl_3; - @BindView(R.id.cl_4) - ConstraintLayout cl_4; - @BindView(R.id.cl_5) - ConstraintLayout cl_5; - @BindView(R.id.cl_6) - ConstraintLayout cl_6; - @BindView(R.id.cl_7) - ConstraintLayout cl_7; - @BindView(R.id.cl_8) - ConstraintLayout cl_8; - @BindView(R.id.cl_9) - ConstraintLayout cl_9; - - @BindView(R.id.iv_robot) - ImageView iv_robot; +public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener { + private static final String TAG = "MainActivity"; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - private MainAPresenter mPresenter; -// private HomeWatcher mHomeWatcher; - private ScaleCircleNavigator scaleCircleNavigator; private FragmentManager mFragmentManager; private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter; private List mFragments; + private UserFragment mUserFragment; private SubjectFragment mSubjectFragment; + private int defaultCurrent = 1; + @Override + public void onRemoteConnected() { + Log.e(TAG, "onConnected: "); + setDefaultDesktop(); + } + @Override public int getLayoutId() { return R.layout.activity_main; } - private void hideSystemUI() { - // Enables regular immersive mode. - // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE. - // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY - View decorView = getWindow().getDecorView(); - decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE - // Set the content to appear under the system bars so that the - // content doesn't resize when the system bars hide and show. - | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION -// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - // Hide the nav bar and status bar - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); } @Override @@ -133,11 +96,8 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie if (Build.VERSION.SDK_INT >= 33) { hideSystemUI(); } - ButterKnife.bind(this); + // toggleNotificationListenerService(this); - mPresenter = new MainAPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); RemoteManager.setListener(this); Utils.getAndroiodScreenProperty(this); @@ -154,8 +114,8 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie } mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments); - mViewPager.setAdapter(mBaseFragmentPagerAdapter); - mViewPager.setCurrentItem(defaultCurrent); + mViewDataBinding.viewPager.setAdapter(mBaseFragmentPagerAdapter); + mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); scaleCircleNavigator = new ScaleCircleNavigator(this); scaleCircleNavigator.setCircleCount(1 + mSubjectFragment.getFragmentSize()); @@ -168,34 +128,34 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie } }); - mMagicIndicator.setNavigator(scaleCircleNavigator); + mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator); // ViewPagerHelper.bind(mMagicIndicator, mViewPager); mSubjectFragment.setPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Log.e("mSubjectFragment", "onPageScrolled: position = " + position + " positionOffset = " + positionOffset + " positionOffsetPixels = " + positionOffsetPixels); - mMagicIndicator.onPageScrolled(position + 1, positionOffset, positionOffsetPixels); + mViewDataBinding.magicIndicator.onPageScrolled(position + 1, positionOffset, positionOffsetPixels); } @Override public void onPageSelected(int position) { // Log.e("mSubjectFragment", "onPageSelected: position = " + position); - mMagicIndicator.onPageSelected(position + 1); + mViewDataBinding.magicIndicator.onPageSelected(position + 1); } @Override public void onPageScrollStateChanged(int state) { // Log.e("mSubjectFragment", "onPageSelected: state = " + state); - mMagicIndicator.onPageScrollStateChanged(state); + mViewDataBinding.magicIndicator.onPageScrollStateChanged(state); } }); - mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + mViewDataBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Log.e("mViewPager", "onPageScrolled: position = " + position + " positionOffset = " + positionOffset + " positionOffsetPixels = " + positionOffsetPixels); if (!(position == 1 && positionOffsetPixels == 0)) { if (position <= 1) { - mMagicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); + mViewDataBinding.magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); } } } @@ -204,115 +164,21 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie public void onPageSelected(int position) { // Log.e("mViewPager", "onPageSelected: position = " + position); if (position <= 1) { - mMagicIndicator.onPageSelected(position); + mViewDataBinding.magicIndicator.onPageSelected(position); } } @Override public void onPageScrollStateChanged(int state) { // Log.e("mViewPager", "onPageSelected: state = " + state); - mMagicIndicator.onPageScrollStateChanged(state); + mViewDataBinding.magicIndicator.onPageScrollStateChanged(state); } }); if (mFragments.size() > 1) { - mViewPager.setCurrentItem(defaultCurrent); - mMagicIndicator.onPageSelected(defaultCurrent); + mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); + mViewDataBinding.magicIndicator.onPageSelected(defaultCurrent); } - iv_robot.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_VOICE_PACKAGE_NAME, JxwPackageConfig.JXW_VOICE_CLASS_NAME); - } - }); - cl_0.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// OpenApkUtils.getInstance().openApp("com.uiui.zyappstore", "com.uiui.zyappstore.activity.MainActivity"); - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_EXAMSYSTEM_NAME, JxwPackageConfig.JXW_EXAMSYSTEM_CLASS); - } - }); - cl_1.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openApp("com.uiui.zybrowser", "com.uiui.zybrowser.activity.main.MainActivity"); - } - }); - cl_2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// OpenApkUtils.getInstance().openApp("com.android.documentsui"); - OpenApkUtils.getInstance().openApp("com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); - } - }); - cl_3.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openApp("com.mediatek.camera"); - } - }); - cl_4.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// Intent intent = new Intent(Settings.ACTION_SETTINGS); -// startActivity(intent); -// int activated = Settings.Secure.getInt(getContentResolver(), Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 0); -// if (RemoteManager.getInstance().putSecureInt(Settings.Secure.NIGHT_DISPLAY_ACTIVATED, activated == 0 ? 1 : 0)) { -// Log.e(TAG, "onClick: putSecureInt successfully"); -// } else { -// Log.e(TAG, "onClick: putSecureInt failed"); -// } - ComponentName cn = new ComponentName(RemoteManager.SN_PACKAGE_NAME, "com.uiui.zy.activity.EyeProtectionActivity"); - Intent intent = new Intent(); - intent.setComponent(cn); - try { - startActivity(intent); - } catch (Exception e) { - Log.e(TAG, "onClick: " + e.getMessage()); - Toaster.show("应用未安装"); - } - } - }); - cl_5.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// OpenApkUtils.getInstance().openApp("com.android.gallery3d"); - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_YOUER_PACKAGE_NAME, JxwPackageConfig.JXW_YOUER_CLASS_NAME); - } - }); - cl_6.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openQuality(); - } - }); - cl_7.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_DICTIONARY_PACKAGE_NAME, JxwPackageConfig.JXW_DICTIONARY_CLASS_NAME); - } - }); - cl_8.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME); - } - }); - cl_9.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent("Receiver_Refresh_Password_Action"); - intent.setPackage("com.uiui.zy"); - sendBroadcast(intent); - - int is_activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); - if (is_activation == 1) { - startActivity(new Intent(MainActivity.this, ExitActivity.class)); - } else { - Utils.exitDesktop(MainActivity.this); - } - } - }); // ComponentName cn = new ComponentName("com.jxw.mskt.video", "com.jxw.mskt.video.VideoDownload"); // Intent intent = new Intent(); // intent.setComponent(cn); @@ -335,10 +201,18 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie registmUpdateAddressReceiver(); } - @Override - public void onConnected() { - Log.e(TAG, "onConnected: "); - setDefaultDesktop(); + private void hideSystemUI() { + // Enables regular immersive mode. + // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE. + // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY + View decorView = getWindow().getDecorView(); + decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE + // Set the content to appear under the system bars so that the + // content doesn't resize when the system bars hide and show. + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION +// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + // Hide the nav bar and status bar + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); } private void setDefaultDesktop() { @@ -365,11 +239,11 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie super.onWindowFocusChanged(hasFocus); Log.e(TAG, "onWindowFocusChanged: hasFocus = " + hasFocus); if (hasFocus) {//表示渲染结束 - if (mViewPager != null) { - mViewPager.postDelayed(new Runnable() { + if (mViewDataBinding.viewPager != null) { + mViewDataBinding.viewPager.postDelayed(new Runnable() { @Override public void run() { - mViewPager.setOffscreenPageLimit(4); + mViewDataBinding.viewPager.setOffscreenPageLimit(4); } }, 1987); } @@ -435,8 +309,8 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie protected void onRestart() { super.onRestart(); Log.e(TAG, "onRestart: "); - mPresenter.sendAPPUsage(); - mPresenter.sendRunningInfo(); + mViewModel.sendAPPUsage(); + mViewModel.sendRunningInfo(); } @Override @@ -454,7 +328,6 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie @Override protected void onDestroy() { super.onDestroy(); - mPresenter.detachView(); // if (mHomeWatcher != null) { // mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 // } @@ -713,13 +586,81 @@ public class MainActivity extends BaseMvpActivity implements MainContact.MainVie } } - @Override - public void sendAPPUsageFinish() { + public class BtnClick { + public void openRobot(View view) { + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_VOICE_PACKAGE_NAME, JxwPackageConfig.JXW_VOICE_CLASS_NAME); + } - } + public void open0(View view) { +// OpenApkUtils.getInstance().openApp("com.uiui.zyappstore", "com.uiui.zyappstore.activity.MainActivity"); + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_EXAMSYSTEM_NAME, JxwPackageConfig.JXW_EXAMSYSTEM_CLASS); + } - @Override - public void sendRunningInfoFinish() { + public void open1(View view) { + OpenApkUtils.getInstance().openApp("com.uiui.zybrowser", "com.uiui.zybrowser.activity.main.MainActivity"); + } + public void open2(View view) { +// OpenApkUtils.getInstance().openApp("com.android.documentsui"); + OpenApkUtils.getInstance().openApp("com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); + } + + public void open3(View view) { + OpenApkUtils.getInstance().openApp("com.mediatek.camera"); + } + + public void open4(View view) { +// Intent intent = new Intent(Settings.ACTION_SETTINGS); +// startActivity(intent); +// int activated = Settings.Secure.getInt(getContentResolver(), Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 0); +// if (RemoteManager.getInstance().putSecureInt(Settings.Secure.NIGHT_DISPLAY_ACTIVATED, activated == 0 ? 1 : 0)) { +// Log.e(TAG, "onClick: putSecureInt successfully"); +// } else { +// Log.e(TAG, "onClick: putSecureInt failed"); +// } + ComponentName cn = new ComponentName(RemoteManager.SN_PACKAGE_NAME, "com.uiui.zy.activity.EyeProtectionActivity"); + Intent intent = new Intent(); + intent.setComponent(cn); + try { + startActivity(intent); + } catch (Exception e) { + Log.e(TAG, "onClick: " + e.getMessage()); + Toaster.show("应用未安装"); + } + } + + public void open5(View view) { +// OpenApkUtils.getInstance().openApp("com.android.gallery3d"); + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_YOUER_PACKAGE_NAME, JxwPackageConfig.JXW_YOUER_CLASS_NAME); + } + + public void open6(View view) { + OpenApkUtils.getInstance().openQuality(); + } + + public void open7(View view) { + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_DICTIONARY_PACKAGE_NAME, JxwPackageConfig.JXW_DICTIONARY_CLASS_NAME); + } + + public void open8(View view) { + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME); + } + + public void open9(View view) { + Intent intent = new Intent("Receiver_Refresh_Password_Action"); + intent.setPackage("com.uiui.zy"); + sendBroadcast(intent); + + int is_activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); + if (is_activation == 1) { + startActivity(new Intent(MainActivity.this, ExitActivity.class)); + } else { + Utils.exitDesktop(MainActivity.this); + } + } + + public void openAppStore(View view) { + ApkUtils.openPackage(MainActivity.this, "com.uiui.appstore"); + } } } diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java b/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java deleted file mode 100644 index 932f39b..0000000 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.zyos.activity.main; - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; - -public class MainContact { - public interface Presenter extends BasePresenter { - /*上传正在运行的APP*/ - void sendAPPUsage(); - /*上传后台运行的APP*/ - void sendRunningInfo(); - } - - public interface MainView extends BaseView { - void sendAPPUsageFinish(); - void sendRunningInfoFinish(); - } -} diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java b/app/src/main/java/com/uiui/zyos/activity/main/MainViewModel.java similarity index 70% rename from app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java rename to app/src/main/java/com/uiui/zyos/activity/main/MainViewModel.java index 7dda83e..4c6906e 100644 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainViewModel.java @@ -1,6 +1,5 @@ package com.uiui.zyos.activity.main; -import android.content.Context; import android.text.TextUtils; import android.util.Log; @@ -8,7 +7,9 @@ import com.google.gson.JsonObject; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.base.mvvm.BaseViewModel; import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.databinding.ActivityMainBinding; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.network.NetInterfaceManager; import com.uiui.zyos.utils.ActivationUtil; @@ -19,42 +20,23 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; -import io.reactivex.rxjava3.subjects.BehaviorSubject; -public class MainAPresenter implements MainContact.Presenter { - private static final String TAG = MainAPresenter.class.getSimpleName(); +public class MainViewModel extends BaseViewModel { - private Context mContext; - private MainContact.MainView mView; + private static final String TAG = "MainViewModel"; - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - MainAPresenter(Context context) { - this.mContext = context; - Log.e(TAG, "MainAPresenter: " + context.getClass()); + @Override + public ActivityMainBinding getVDBinding() { + return binding; } @Override - public void attachView(MainContact.MainView view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; - } - - @Override public void sendAPPUsage() { - boolean activation = ActivationUtil.isActivation(mContext); + boolean activation = ActivationUtil.isActivation(getCtx()); if (!activation) { return; } @@ -62,18 +44,18 @@ public class MainAPresenter implements MainContact.Presenter { String packagename = AppUsedTimeUtils.getInstance().getAppPackageName(); Log.e(TAG, "onRestart packagename == " + packagename); if (!TextUtils.isEmpty(packagename)) { - Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(mContext, packagename)); + Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(getCtx(), packagename)); Log.e(TAG, "onRestart: " + packagename); NetInterfaceManager.getInstance() .getAppUsageRecordControl() .sendappUsageRecord(RemoteManager.getInstance().getSerial(), - ApkUtils.getAppNameByPackage(mContext, packagename), + ApkUtils.getAppNameByPackage(getCtx(), packagename), packagename, AppUsedTimeUtils.getInstance().getStartTime() / 1000, AppUsedTimeUtils.getInstance().getEndTime() / 1000) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { @@ -94,18 +76,15 @@ public class MainAPresenter implements MainContact.Presenter { @Override public void onComplete() { Log.e("sendAPPUsage", "onComplete: "); - mView.sendAPPUsageFinish(); } }); } else { - Log.e("onRestart", "app = null" + packagename); - mView.sendAPPUsageFinish(); + Log.e("sendAPPUsage", "app = null" + packagename); } } - @Override public void sendRunningInfo() { - boolean activation = ActivationUtil.isActivation(mContext); + boolean activation = ActivationUtil.isActivation(getCtx()); if (!activation) { return; } @@ -114,18 +93,15 @@ public class MainAPresenter implements MainContact.Presenter { long time = AppUsedTimeUtils.getInstance().getStartTime(); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID); - jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(mContext, BuildConfig.APPLICATION_ID)); + jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(getCtx(), BuildConfig.APPLICATION_ID)); jsonObject.addProperty("start_time", time / 1000); String jsonString = jsonObject.toString(); Log.e(TAG, "sendRunningInfo: " + jsonString); AppUsedTimeUtils.getInstance().sendRunningApp(new AppUsedTimeUtils.RunningAppCallback() { @Override public void onComplete() { - if (mView != null) { - mView.sendRunningInfoFinish(); - } + Log.e("sendRunningInfo", "onComplete: " ); } }); } - } diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java index bd7cc5d..35d938e 100644 --- a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java @@ -9,56 +9,40 @@ import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; import com.uiui.zyos.adapter.AppAdapter; -import com.uiui.zyos.base.mvp.BaseMvpActivity; +import com.uiui.zyos.base.mvvm.BaseMvvmActivity; import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.databinding.ActivityMoreappBinding; import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; +import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; +public class MoreAppActivity extends BaseMvvmActivity { -public class MoreAppActivity extends BaseMvpActivity implements MoreContact.MoreView { - - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.tv_appsize) - TextView tv_appsize; - - private MorePresenter mPresenter; private AppAdapter mAppAdapter; - @Override public int getLayoutId() { return R.layout.activity_moreapp; } @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new MorePresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - recyclerView.setLayoutManager(new GridLayoutManager(this, 6)); + @Override + public void initView() { + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 6)); HashMap stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); @@ -68,21 +52,28 @@ public class MoreAppActivity extends BaseMvpActivity implements MoreContact.More stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mViewDataBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mAppAdapter = new AppAdapter(); - recyclerView.setAdapter(mAppAdapter); + mViewDataBinding.recyclerView.setAdapter(mAppAdapter); + registerAppChangedReceiver(); } @Override public void initData() { - registerAppChangedReceiver(); - mPresenter.getInstalledApp(); + mViewModel.mDesktopIconListData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList desktopIcons) { + mAppAdapter.setDesktopIcons(desktopIcons); + mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), desktopIcons.size() - 1)); + } + }); + mViewModel.getInstalledApp(); } @Override protected void onResume() { super.onResume(); - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } @Override @@ -93,12 +84,6 @@ public class MoreAppActivity extends BaseMvpActivity implements MoreContact.More } } - @Override - public void setDesktopIcons(List desktopIcons) { - mAppAdapter.setDesktopIcons(desktopIcons); - tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size() - 1)); - } - private AppChangedReceiver mAppChangedReceiver; private void registerAppChangedReceiver() { @@ -124,7 +109,13 @@ public class MoreAppActivity extends BaseMvpActivity implements MoreContact.More if (TextUtils.isEmpty(action)) { return; } - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); + } + } + + public class BtnClick { + public void exit(View view) { + finish(); } } } diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppViewModel.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppViewModel.java new file mode 100644 index 0000000..f186726 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppViewModel.java @@ -0,0 +1,37 @@ +package com.uiui.zyos.activity.more; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.zyos.R; +import com.uiui.zyos.base.mvvm.BaseViewModel; +import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.databinding.ActivityMoreappBinding; +import com.uiui.zyos.manager.AppManager; + +import java.util.ArrayList; + +public class MoreAppViewModel extends BaseViewModel { + + @Override + public ActivityMoreappBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mDesktopIconListData = new MutableLiveData<>(); + + public void getInstalledApp() { + ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); + DesktopIcon desktopIcon = new DesktopIcon(); + desktopIcon.setLable("添加应用"); + desktopIcon.setPackageName("com.zyos.add"); + desktopIcon.setIcon(getCtx().getDrawable(R.drawable.icon_add)); + desktopIcons.add(desktopIcons.size(), desktopIcon); + mDesktopIconListData.setValue(desktopIcons); + } +} diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java deleted file mode 100644 index fd119d2..0000000 --- a/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.uiui.zyos.activity.more; - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; -import com.uiui.zyos.bean.DesktopIcon; - -import java.util.List; - -public class MoreContact { - public interface Presenter extends BasePresenter { - void getInstalledApp(); - } - - public interface MoreView extends BaseView { - void setDesktopIcons(List desktopIcons); - } -} diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java b/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java deleted file mode 100644 index 40f5e5b..0000000 --- a/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.uiui.zyos.activity.more; - -import android.content.Context; -import android.util.Log; - -import androidx.annotation.NonNull; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.zyos.R; -import com.uiui.zyos.bean.DesktopIcon; -import com.uiui.zyos.manager.AppManager; - -import java.util.ArrayList; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class MorePresenter implements MoreContact.Presenter { - private static final String TAG = MorePresenter.class.getSimpleName(); - - - private Context mContext; - private MoreContact.MoreView mView; - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - MorePresenter(Context context) { - this.mContext = context; - Log.e(TAG, "MainAPresenter: " + context.getClass()); - } - - @Override - public void attachView(@NonNull MoreContact.MoreView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getInstalledApp() { - ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); - DesktopIcon desktopIcon = new DesktopIcon(); - desktopIcon.setLable("添加应用"); - desktopIcon.setPackageName("com.zyos.add"); - desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add)); - desktopIcons.add(desktopIcons.size(), desktopIcon); - mView.setDesktopIcons(desktopIcons); - } -} diff --git a/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java index 5d3dc4b..82e7148 100644 --- a/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Set; public class AddAppAdapter extends RecyclerView.Adapter { - private static final String TAG = AddAppAdapter.class.getSimpleName(); + private static final String TAG = "AddAppAdapter"; private Context mContext; diff --git a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java index 3cf5b6c..92e6627 100644 --- a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java @@ -34,7 +34,7 @@ import java.util.ArrayList; import java.util.List; public class AppAdapter extends RecyclerView.Adapter { - private static final String TAG = AppAdapter.class.getSimpleName(); + private static final String TAG = "AppAdapter"; private Context mContext; diff --git a/app/src/main/java/com/uiui/zyos/adapter/FileAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/FileAdapter.java new file mode 100644 index 0000000..5aaf472 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/adapter/FileAdapter.java @@ -0,0 +1,139 @@ +package com.uiui.zyos.adapter; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.provider.Settings; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.hjq.toast.Toaster; +import com.uiui.zyos.R; +import com.uiui.zyos.activity.ManualActivity; +import com.uiui.zyos.activity.PasswordActivity; +import com.uiui.zyos.activity.ServiceActivity; +import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.manager.AppManager; +import com.uiui.zyos.utils.ApkUtils; +import com.uiui.zyos.utils.BitmapUtils; +import com.uiui.zyos.utils.IconUtils; +import com.uiui.zyos.utils.OpenApkUtils; + +import java.util.List; + +public class FileAdapter extends RecyclerView.Adapter { + private static final String TAG = "FileAdapter"; + + private Context mContext; + + private List desktopIcons; + + @NonNull + @Override + public AppHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + return new AppHolder(LayoutInflater.from(mContext).inflate(R.layout.item_file, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull AppHolder holder, int position) { + DesktopIcon desktopIcon = desktopIcons.get(position); + String lable = desktopIcon.getLable(); + holder.tv_appname.setText(lable); + holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); + String pkg = desktopIcon.getPackageName(); + Log.e(TAG, "getView: " + pkg); + int i = IconUtils.appClassNameList.indexOf(pkg); + if (i != -1) { + String val = IconUtils.appIconList.get(i); + int resID = mContext.getResources().getIdentifier(val, "drawable", "com.uiui.zyos"); + if (resID == 0) { + Log.e(TAG, "getView: not found src : " + pkg); + holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + } else { + holder.iv_icon.setImageDrawable(mContext.getResources().getDrawable(resID)); + } + } else { + switch (pkg) { + case AppManager.ADD_NAME: + case AppManager.UPDATE_NAME: + case AppManager.MANUAL_NAME: + case AppManager.SERVICE_NAME: + holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); + break; + default: + holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + break; + } + } + holder.root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (pkg) { + case AppManager.ADD_NAME: + mContext.startActivity(new Intent(mContext, PasswordActivity.class)); + break; + case AppManager.UPDATE_NAME: + Intent intent = new Intent(); + ComponentName componentName = new ComponentName("com.uiui.zy", "com.uiui.zy.activity.update.UpdateActivity"); + intent.setComponent(componentName); + mContext.startActivity(intent); + break; + case AppManager.MANUAL_NAME: + mContext.startActivity(new Intent(mContext, ManualActivity.class)); + break; + case AppManager.SERVICE_NAME: + mContext.startActivity(new Intent(mContext, ServiceActivity.class)); + break; + default: + int settingOtherAppInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1); + if (settingOtherAppInstaller == 0 + && !ApkUtils.isSystemApp(mContext, desktopIcon.getPackageName() + )) { + Toaster.show("已禁止应用打开"); + } else { + OpenApkUtils.getInstance().openApp(desktopIcon.getPackageName(), desktopIcon.getClassName()); + } + break; + } + + } + }); + } + + @Override + public int getItemCount() { + return desktopIcons == null ? 0 : desktopIcons.size(); + } + + public List getDesktopIcons() { + return desktopIcons; + } + + public void setDesktopIcons(List desktopIcons) { + this.desktopIcons = desktopIcons; + notifyDataSetChanged(); + } + + class AppHolder extends RecyclerView.ViewHolder { + ConstraintLayout root; + TextView tv_appname; + ImageView iv_icon; + + public AppHolder(@NonNull View itemView) { + super(itemView); + root = itemView.findViewById(R.id.root); + tv_appname = itemView.findViewById(R.id.tv_appname); + iv_icon = itemView.findViewById(R.id.iv_icon); + } + } +} diff --git a/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java b/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java index 2507227..ca6ffbe 100644 --- a/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java +++ b/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java @@ -35,9 +35,10 @@ import java.util.Map; import java.util.TimeZone; public class AlarmUtils { + private static final String TAG = "AlarmUtils"; + @SuppressLint("StaticFieldLeak") private static AlarmUtils sInstance; - private static String TAG = AlarmUtils.class.getSimpleName(); private Context mContext; private AlarmManager alarmManager; private SQLiteDatabase db; diff --git a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java index 161e1bf..ba66cb3 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java @@ -28,7 +28,7 @@ import com.uiui.zyos.utils.OpenApkUtils; import com.uiui.zyos.utils.SystemUtils; public class BaseApplication extends Application { - private static final String TAG = BaseApplication.class.getSimpleName(); + private static final String TAG = "BaseApplication"; @Override public void onCreate() { @@ -62,7 +62,7 @@ public class BaseApplication extends Application { RemoteManager.init(this); RemoteManager.setListener(new RemoteManager.ConnectedListener() { @Override - public void onConnected() { + public void onRemoteConnected() { CrashReport.setDeviceId(BaseApplication.this, RemoteManager.getInstance().getSerial()); RemoteManager.getInstance().aliyunPushInit(); } diff --git a/app/src/main/java/com/uiui/zyos/base/BaseDataBindingFragment.java b/app/src/main/java/com/uiui/zyos/base/BaseDataBindingFragment.java new file mode 100644 index 0000000..cbc3f9d --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/BaseDataBindingFragment.java @@ -0,0 +1,257 @@ +package com.uiui.zyos.base; + +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 java.lang.ref.WeakReference; +import java.lang.reflect.ParameterizedType; + +/** + * @author: lml + * @date: 2021/12/15 + */ +public abstract class BaseDataBindingFragment extends BaseFragment { + protected String mTag = this.getClass().getSimpleName(); + /** + * 是否顯示了 + */ + protected boolean mIsVisible; + /** + * 是否準備好了-Created + */ + protected boolean mHasPrepare; + protected VDB mViewDataBinding; + + protected Bundle bundle;//来自getArguments() + protected Bundle savedInstanceState; + + /** + * 上下文 + */ + private WeakReference ctx; + + public Context getCtx() { + return ctx == null ? null : ctx.get(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(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) { + mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false); + mViewDataBinding.setLifecycleOwner(this); + 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/base/BaseLazyFragment.java b/app/src/main/java/com/uiui/zyos/base/BaseLazyFragment.java index 4a28d7a..45e27f9 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseLazyFragment.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseLazyFragment.java @@ -11,7 +11,7 @@ import androidx.fragment.app.Fragment; * Date: 1/23/15. */ public abstract class BaseLazyFragment extends Fragment { - private static final String TAG = BaseLazyFragment.class.getSimpleName(); + private static final String TAG = "BaseLazyFragment"; private boolean isPrepared; @Override diff --git a/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java index 62ee1f8..98ff14d 100644 --- a/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java +++ b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java @@ -16,7 +16,7 @@ import java.lang.reflect.ParameterizedType; public abstract class BaseMvvmActivity extends BaseTransparentActivity { - private static final String TAG = BaseMvvmActivity.class.getSimpleName(); + private static final String TAG = "BaseMvvmActivity"; protected VM mViewModel; protected VDB mViewDataBinding; diff --git a/app/src/main/java/com/uiui/zyos/bean/GuideBean.java b/app/src/main/java/com/uiui/zyos/bean/GuideBean.java new file mode 100644 index 0000000..80f421e --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/bean/GuideBean.java @@ -0,0 +1,26 @@ +package com.uiui.zyos.bean; + +import java.io.Serializable; + +public class GuideBean implements Serializable { + private static final long serialVersionUID = 603876094734315379L; + + String type; + String file; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getFile() { + return file; + } + + public void setFile(String file) { + this.file = file; + } +} diff --git a/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java b/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java index bb29c4c..b32a0b5 100644 --- a/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java +++ b/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java @@ -30,7 +30,7 @@ import java.io.Serializable; * 磁盘缓存帮助类 */ public class CacheHelper { - private static final String TAG = CacheHelper.class.getSimpleName(); + private static final String TAG = "CacheHelper"; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java deleted file mode 100644 index 03f20c2..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.uiui.zyos.fragment.app; - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; -import com.uiui.zyos.bean.DesktopIcon; - -import java.util.ArrayList; - -public class AppContact { - public interface AppPresenter extends BasePresenter { - void getInstalledApp(); - } - - public interface AppView extends BaseView { - void setInstalledApp( ArrayList desktopIcons); - } -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java index b4f087d..2cd2592 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java @@ -8,46 +8,32 @@ import android.os.Bundle; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; -import android.widget.ImageView; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; -import com.uiui.zyos.activity.more.MoreAppActivity; import com.uiui.zyos.adapter.AppAdapter; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment; import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.databinding.FragmentAppBinding; import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; import java.util.ArrayList; import java.util.HashMap; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link AppFragment#newInstance} factory method to * create an instance of this fragment. */ -public class AppFragment extends BaseFragment implements AppContact.AppView { - private static final String TAG = AppFragment.class.getSimpleName(); +public class AppFragment extends BaseMvvmFragment { + private static final String TAG = "AppFragment"; - @BindView(R.id.rv_app) - RecyclerView rv_app; - @BindView(R.id.iv_nodata) - ImageView iv_nodata; - - private AppPresenter mPresenter; - private View rootView; private FragmentActivity mContext; private AppAdapter mAppAdapter; @@ -95,41 +81,22 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_app, container, false); - mContext = (FragmentActivity) rootView.getContext(); - mPresenter = new AppPresenter(mContext); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_app; } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); - initData(); - } - - private void initView() { - rv_app.setLayoutManager(new GridLayoutManager(mContext, 6)); + protected void initView(Bundle bundle) { + mViewDataBinding.rvApp.setLayoutManager(new GridLayoutManager(mContext, 6)); HashMap stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); @@ -139,14 +106,38 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - rv_app.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mViewDataBinding.rvApp.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mAppAdapter = new AppAdapter(); - rv_app.setAdapter(mAppAdapter); + mViewDataBinding.rvApp.setAdapter(mAppAdapter); registerOwnReceiver(); } - private void initData() { + @Override + protected void initData(Bundle savedInstanceState) { + mViewModel.mDesktopIconListData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList desktopIcons) { + Log.e(TAG, "setInstalledApp: " + desktopIcons); + if (desktopIcons == null || desktopIcons.size() == 0) { + mViewDataBinding.ivNodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvApp.setVisibility(View.INVISIBLE); + } else { + mViewDataBinding.ivNodata.setVisibility(View.GONE); + mViewDataBinding.rvApp.setVisibility(View.VISIBLE); + mAppAdapter.setDesktopIcons(desktopIcons); + } + } + }); + } + @Override + public void onDestroyView() { + super.onDestroyView(); + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); } @Override @@ -154,7 +145,7 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { super.setUserVisibleHint(isVisibleToUser); Log.e(TAG, "setUserVisibleHint: " + isVisibleToUser); if (isVisibleToUser && isViewInitiated) { - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } } @@ -162,7 +153,7 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { public void onResume() { super.onResume(); Log.e(TAG, "onResume: "); - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } @Override @@ -210,7 +201,7 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { return; } if (UPDATE_DESKTOP_ICON_ACTION.equals(action)) { - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } } } @@ -240,21 +231,11 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { if (TextUtils.isEmpty(action)) { return; } - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } } + public class BtnClick { - @Override - public void setInstalledApp(ArrayList desktopIcons) { - Log.e(TAG, "setInstalledApp: " + desktopIcons); - if (desktopIcons == null || desktopIcons.size() == 0) { - iv_nodata.setVisibility(View.VISIBLE); - rv_app.setVisibility(View.INVISIBLE); - } else { - iv_nodata.setVisibility(View.GONE); - rv_app.setVisibility(View.VISIBLE); - mAppAdapter.setDesktopIcons(desktopIcons); - } } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppViewModel.java similarity index 61% rename from app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java rename to app/src/main/java/com/uiui/zyos/fragment/app/AppViewModel.java index eae4613..dd596b0 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/app/AppViewModel.java @@ -1,47 +1,30 @@ package com.uiui.zyos.fragment.app; -import android.content.Context; +import androidx.lifecycle.MutableLiveData; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.zyos.R; +import com.uiui.zyos.base.mvvm.BaseViewModel; import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.databinding.FragmentAppBinding; import com.uiui.zyos.manager.AppManager; import java.util.ArrayList; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; +public class AppViewModel extends BaseViewModel { -public class AppPresenter implements AppContact.AppPresenter { - private static final String TAG = AppPresenter.class.getSimpleName(); - private Context mContext; - private AppContact.AppView mView; - - public AppPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; + @Override + public FragmentAppBinding getVDBinding() { + return binding; } @Override - public void attachView(@NonNull AppContact.AppView view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; - } + public MutableLiveData> mDesktopIconListData = new MutableLiveData<>(); - @Override public void getInstalledApp() { ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); @@ -49,30 +32,30 @@ public class AppPresenter implements AppContact.AppPresenter { appstoreDesktopIcon.setLable("应用市场"); appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_PACKAGE_NAME); appstoreDesktopIcon.setClassName(AppManager.APPSTORE_CLASS_NAME); - appstoreDesktopIcon.setIcon(mContext.getDrawable(R.drawable.com_android_appstore)); + appstoreDesktopIcon.setIcon(getCtx().getDrawable(R.drawable.com_android_appstore)); desktopIcons.add(desktopIcons.size(), appstoreDesktopIcon); DesktopIcon updateDesktopIcon = new DesktopIcon(); updateDesktopIcon.setLable("应用更新"); updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME); - updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update)); + updateDesktopIcon.setIcon(getCtx().getDrawable(R.drawable.icon_update)); desktopIcons.add(desktopIcons.size(), updateDesktopIcon); // DesktopIcon manualIcon = new DesktopIcon(); // manualIcon.setLable("使用手册"); // manualIcon.setPackageName(AppManager.MANUAL_NAME); -// manualIcon.setIcon(mContext.getDrawable(R.drawable.icon_manual)); +// manualIcon.setIcon(getCtx().getDrawable(R.drawable.icon_manual)); // desktopIcons.add(desktopIcons.size(), manualIcon); DesktopIcon browserIcon = new DesktopIcon(); - browserIcon.setIcon(mContext.getDrawable(R.drawable.uiui_zybrowser)); + browserIcon.setIcon(getCtx().getDrawable(R.drawable.uiui_zybrowser)); browserIcon.setLable("浏览器"); browserIcon.setPackageName(AppManager.BROWSER_PACKAGE_NAME); browserIcon.setClassName(AppManager.BROWSER_CLASS_NAME); desktopIcons.add(browserIcon); DesktopIcon serviceIcon = new DesktopIcon(); - serviceIcon.setIcon(mContext.getDrawable(R.drawable.service_icon)); + serviceIcon.setIcon(getCtx().getDrawable(R.drawable.service_icon)); serviceIcon.setLable("联系客服"); serviceIcon.setPackageName(AppManager.SERVICE_NAME); desktopIcons.add(serviceIcon); @@ -80,8 +63,8 @@ public class AppPresenter implements AppContact.AppPresenter { DesktopIcon desktopIcon = new DesktopIcon(); desktopIcon.setLable("添加应用"); desktopIcon.setPackageName(AppManager.ADD_NAME); - desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add)); + desktopIcon.setIcon(getCtx().getDrawable(R.drawable.icon_add)); desktopIcons.add(desktopIcons.size(), desktopIcon); - mView.setInstalledApp(desktopIcons); + mDesktopIconListData.setValue(desktopIcons); } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/ar/ARStudyFragment.java b/app/src/main/java/com/uiui/zyos/fragment/ar/ARStudyFragment.java index f4db921..3ebccad 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/ar/ARStudyFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/ar/ARStudyFragment.java @@ -3,22 +3,18 @@ package com.uiui.zyos.fragment.ar; import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.os.Debug; import android.util.DisplayMetrics; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; -import android.widget.ImageView; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; import com.uiui.zyos.adapter.HomeworkAdapter; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentArStudyBinding; import com.uiui.zyos.utils.ApkUtils; import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; @@ -26,24 +22,16 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link ARStudyFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ARStudyFragment extends BaseFragment { - private static final String TAG = ARStudyFragment.class.getSimpleName(); +public class ARStudyFragment extends BaseDataBindingFragment { + private static final String TAG = "ARStudyFragment"; - @BindView(R.id.iv_app) - ImageView iv_app; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - - private View rootView;// 设置为全局的 private Activity mContext; + private HomeworkAdapter mHomeworkAdapter; // TODO: Rename parameter arguments, choose names that match @@ -89,54 +77,17 @@ public class ARStudyFragment extends BaseFragment { } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_ar_study; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_ar_study, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - Log.e(TAG, "setUserVisibleHint: isVisibleToUser = " + isVisibleToUser); - if (isVisibleToUser){ - if (mUserVisibleHintCallback!=null) { - mUserVisibleHintCallback.onUserVisibleHint(); - } - } - } - private UserVisibleHintCallback mUserVisibleHintCallback; - public interface UserVisibleHintCallback{ - void onUserVisibleHint(); - } - - public void setUserVisibleHintCallback(UserVisibleHintCallback userVisibleHintCallback) { - mUserVisibleHintCallback = userVisibleHintCallback; - } - - private void initView() { + protected void initView(Bundle bundle) { WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getRealMetrics(dm); @@ -146,18 +97,18 @@ public class ARStudyFragment extends BaseFragment { stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 10));//底部间距 // stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 // stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mViewDataBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mHomeworkAdapter = new HomeworkAdapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - recyclerView.setLayoutManager(linearLayoutManager); - recyclerView.setAdapter(mHomeworkAdapter); + mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager); + mViewDataBinding.recyclerView.setAdapter(mHomeworkAdapter); List homeworkList = new ArrayList<>(); homeworkList.add("暂时没有作业"); mHomeworkAdapter.setHomeworkList(homeworkList); - iv_app.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivApp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openArApk(); @@ -165,6 +116,42 @@ public class ARStudyFragment extends BaseFragment { }); } + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + Log.e(TAG, "setUserVisibleHint: isVisibleToUser = " + isVisibleToUser); + if (isVisibleToUser) { + if (mUserVisibleHintCallback != null) { + mUserVisibleHintCallback.onUserVisibleHint(); + } + } + } + + private UserVisibleHintCallback mUserVisibleHintCallback; + + public interface UserVisibleHintCallback { + void onUserVisibleHint(); + } + + public void setUserVisibleHintCallback(UserVisibleHintCallback userVisibleHintCallback) { + mUserVisibleHintCallback = userVisibleHintCallback; + } + private void openArApk() { if (ApkUtils.isAvailable(mContext, "com.visiontalk.taskoptions") && ApkUtils.isAvailable(mContext, "com.visiontalk.honor")) { ApkUtils.openPackage(mContext, "com.visiontalk.taskoptions"); diff --git a/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java b/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java index 4e88b39..c7489c1 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java @@ -2,40 +2,24 @@ package com.uiui.zyos.fragment.biology; import android.app.Activity; import android.os.Bundle; +import android.util.Log; +import android.view.View; import androidx.fragment.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentBiologyBinding; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link BiologyFragment#newInstance} factory method to * create an instance of this fragment. */ -public class BiologyFragment extends BaseFragment { - private static final String TAG = BiologyFragment.class.getSimpleName(); +public class BiologyFragment extends BaseDataBindingFragment { + private static final String TAG = "BiologyFragment"; - @BindView(R.id.imageView1) - ImageView imageView1; - @BindView(R.id.imageView2) - ImageView imageView2; - @BindView(R.id.imageView3) - ImageView imageView3; - @BindView(R.id.imageView4) - ImageView imageView4; - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -81,55 +65,36 @@ public class BiologyFragment extends BaseFragment { } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_biology; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_biology, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { - imageView1.setOnClickListener(new View.OnClickListener() { + protected void initView(Bundle bundle) { + mViewDataBinding.imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|生物"); } }); - imageView2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/生物|e:JWFD"); } }); - imageView3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openLaboratory("生物实验室"); } }); - imageView4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -139,7 +104,21 @@ public class BiologyFragment extends BaseFragment { } } }); + } + + @Override + protected void initData(Bundle savedInstanceState) { } + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java b/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java index 244b5fd..c4ecffa 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java @@ -2,41 +2,24 @@ package com.uiui.zyos.fragment.chemical; import android.app.Activity; import android.os.Bundle; +import android.util.Log; +import android.view.View; import androidx.fragment.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentChemicalBinding; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link ChemicalFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ChemicalFragment extends BaseFragment { - private static final String TAG = ChemicalFragment.class.getSimpleName(); +public class ChemicalFragment extends BaseDataBindingFragment { + private static final String TAG = "ChemicalFragment"; - @BindView(R.id.imageView1) - ImageView imageView1; - @BindView(R.id.imageView2) - ImageView imageView2; - @BindView(R.id.imageView3) - ImageView imageView3; - @BindView(R.id.imageView4) - ImageView imageView4; - - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -82,55 +65,36 @@ public class ChemicalFragment extends BaseFragment { } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_chemical; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_chemical, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { - imageView1.setOnClickListener(new View.OnClickListener() { + protected void initView(Bundle bundle) { + mViewDataBinding.imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|化学"); } }); - imageView2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/化学|e:JWFD"); } }); - imageView3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openLaboratory("化学实验室"); } }); - imageView4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -140,7 +104,20 @@ public class ChemicalFragment extends BaseFragment { } } }); + } + + @Override + protected void initData(Bundle savedInstanceState) { } + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java deleted file mode 100644 index 602a7ec..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.uiui.zyos.fragment.chinese; - - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; - -public class ChineseContact { - public interface Presenter extends BasePresenter { - - } - - public interface ChineseView extends BaseView { - - } -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java index e87c8de..18a5f76 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java @@ -9,73 +9,31 @@ import android.content.res.Configuration; import android.os.BatteryManager; import android.os.Bundle; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import com.blankj.utilcode.util.NetworkUtils; import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment; +import com.uiui.zyos.databinding.FragmentChineseBinding; import com.uiui.zyos.dialog.ChineseDialog; import com.uiui.zyos.dialog.FoundationDialog; import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.manager.AmapManager; -import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.utils.OpenApkUtils; import com.uiui.zyos.utils.Utils; -import butterknife.BindView; -import butterknife.ButterKnife; - - /** * A simple {@link Fragment} subclass. * Use the {@link ChineseFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ChineseFragment extends BaseFragment implements ChineseContact.ChineseView, NetworkUtils.OnNetworkStatusChangedListener { - private static final String TAG = ChineseFragment.class.getSimpleName(); +public class ChineseFragment extends BaseMvvmFragment implements NetworkUtils.OnNetworkStatusChangedListener { + private static final String TAG = "ChineseFragment"; - @BindView(R.id.iv_sync_video) - ImageView iv_sync_video; - @BindView(R.id.tv_more_app) - TextView tv_more_app; - @BindView(R.id.cl_tutoring) - ConstraintLayout cl_tutoring; - @BindView(R.id.cl_near_antonyms) - ConstraintLayout cl_near_antonyms; - @BindView(R.id.cl_composition) - ConstraintLayout cl_composition; - @BindView(R.id.cl_read) - ConstraintLayout cl_read; - @BindView(R.id.cl_character) - ConstraintLayout cl_character; - @BindView(R.id.cl_classical) - ConstraintLayout cl_classical; - @BindView(R.id.cl_rhetoric) - ConstraintLayout cl_rhetoric; - @BindView(R.id.cl_treasure) - ConstraintLayout cl_treasure; - @BindView(R.id.cl_punctuation) - ConstraintLayout cl_punctuation; - - @BindView(R.id.iv_dictation) - ImageView iv_dictation; - @BindView(R.id.iv_character) - ImageView iv_character; - @BindView(R.id.iv_foundation) - ImageView iv_foundation; - - - private View rootView;// 设置为全局的 private Activity mContext; - private ChinesePresenter mChinesePresenter; // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -131,74 +89,50 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin } @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); + protected int getLayoutId() { + return R.layout.fragment_chinese; } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); - AmapManager.getInstance().startLocation(); - initData(); + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_chinese, container, false); - mContext = (Activity) rootView.getContext(); - mChinesePresenter = new ChinesePresenter(mContext); - mChinesePresenter.attachView(this); - mChinesePresenter.setLifecycle(getLifecycleSubject()); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { + protected void initView(Bundle bundle) { Log.e(TAG, "initView: " + Utils.getBatteryLevel(mContext)); registerBatteryReceiver(); registTimeReceiver(); mContext.registerReceiver(mbatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - iv_sync_video.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivSyncVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|语文"); } }); - tv_more_app.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvMoreApp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); - cl_tutoring.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clTutoring.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/语文|e:JWFD"); } }); - cl_near_antonyms.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clNearAntonyms.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_NEAR_ANTONYMS_PACKAGE_NAME, JxwPackageConfig.JXW_NEAR_ANTONYMS_CLASS_NAME); } }); - cl_composition.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clComposition.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // OpenApkUtils.getInstance().openComposition(); @@ -217,38 +151,38 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin chineseDialog.show(); } }); - cl_read.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clRead.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_READING_PACKAGE_NAME, JxwPackageConfig.JXW_READING_CLASS_NAME); } }); - cl_character.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clCharacter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_CHARACTER_PACKAGE_NAME, JxwPackageConfig.JXW_CHARACTER_CLASS_NAME); // OpenApkUtils.getInstance().openSolidifiedData("d:/同步学习/语文|e:JWFD"); } }); - cl_classical.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clClassical.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/中学文言文.JXW"); } }); - cl_rhetoric.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clRhetoric.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/中学修辞方法.JXW"); } }); - cl_treasure.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clTreasure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学中华宝典.JXW"); } }); - cl_punctuation.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPunctuation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/中学标点符号.JXW"); @@ -256,7 +190,7 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin }); - iv_dictation.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivDictation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -266,13 +200,13 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin } } }); - iv_character.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivCharacter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_CHARACTER_PACKAGE_NAME, JxwPackageConfig.JXW_CHARACTER_CLASS_NAME); } }); - iv_foundation.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivFoundation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { FoundationDialog foundationDialog = new FoundationDialog(mContext); @@ -303,8 +237,25 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin }); } - private void initData() { - initAmap(); + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + AmapManager.getInstance().startLocation(); + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); } @Override @@ -322,10 +273,6 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin super.onResume(); } - - private void initAmap() { - } - private void registerBatteryReceiver() { if (null == batteryReceiver) { batteryReceiver = new BatteryReceiver(); @@ -373,11 +320,9 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN); if (status == BatteryManager.BATTERY_STATUS_CHARGING) { - if (rootView != null) { - } + } else { - if (rootView != null) { - } + } } } @@ -422,7 +367,6 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin @Override public void onDestroy() { super.onDestroy(); - mChinesePresenter.detachView(); NetworkUtils.unregisterNetworkStatusChangedListener(this); if (batteryReceiver != null) { mContext.unregisterReceiver(batteryReceiver); diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java deleted file mode 100644 index 8b11e49..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.uiui.zyos.fragment.chinese; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.FragmentEvent; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class ChinesePresenter implements ChineseContact.Presenter { - private static final String TAG = ChinesePresenter.class.getSimpleName(); - private Context mContext; - private ChineseContact.ChineseView mView; - - public ChinesePresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull ChineseContact.ChineseView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseViewModel.java new file mode 100644 index 0000000..44c39ca --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.zyos.fragment.chinese; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.zyos.base.mvvm.BaseViewModel; +import com.uiui.zyos.databinding.FragmentChineseBinding; + +public class ChineseViewModel extends BaseViewModel { + + @Override + public FragmentChineseBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/complex/ComplexFragment.java b/app/src/main/java/com/uiui/zyos/fragment/complex/ComplexFragment.java index 323175e..194bc54 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/complex/ComplexFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/complex/ComplexFragment.java @@ -2,55 +2,25 @@ package com.uiui.zyos.fragment.complex; import android.app.Activity; import android.os.Bundle; +import android.util.Log; +import android.view.View; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentComplexBinding; import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link ComplexFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ComplexFragment extends BaseFragment { - private static final String TAG = ComplexFragment.class.getSimpleName(); +public class ComplexFragment extends BaseDataBindingFragment { + private static final String TAG = "ComplexFragment"; - @BindView(R.id.cl_politics_video) - ConstraintLayout cl_politics_video; - @BindView(R.id.cl_politics_coach) - ConstraintLayout cl_politics_coach; - @BindView(R.id.cl_history_video) - ConstraintLayout cl_history_video; - @BindView(R.id.cl_history_coach) - ConstraintLayout cl_history_coach; - @BindView(R.id.cl_geography_video) - ConstraintLayout cl_geography_video; - @BindView(R.id.cl_geography_coach) - ConstraintLayout cl_geography_coach; - @BindView(R.id.cl_science_video) - ConstraintLayout cl_science_video; - @BindView(R.id.cl_science_coach) - ConstraintLayout cl_science_coach; - - @BindView(R.id.iv_video) - ImageView iv_video; - @BindView(R.id.iv_famous_teacher) - ImageView iv_famous_teacher; - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -95,86 +65,74 @@ public class ComplexFragment extends BaseFragment { Log.e(TAG, "onCreate: "); } + @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_complex; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_complex, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); } - private void initView() { - cl_politics_video.setOnClickListener(new View.OnClickListener() { + @Override + protected void initView(Bundle bundle) { + mViewDataBinding.clPoliticsVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|政治"); } }); - cl_politics_coach.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPoliticsCoach.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/政治|e:JWFD"); } }); - cl_history_video.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clHistoryVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|历史"); } }); - cl_history_coach.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clHistoryCoach.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/历史|e:JWFD"); } }); - cl_geography_video.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clGeographyVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|地理"); } }); - cl_geography_coach.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clGeographyCoach.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/地理|e:JWFD"); } }); - cl_science_video.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clScienceVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|科学"); } }); - cl_science_coach.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clScienceCoach.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/科学|e:JWFD"); } }); - iv_video.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|政治"); } }); - iv_famous_teacher.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivFamousTeacher.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_TEACHER_PACKAGE_NAME, JxwPackageConfig.JXW_TEACHER_CLASS_NAME); @@ -182,9 +140,19 @@ public class ComplexFragment extends BaseFragment { }); } + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + @Override public void onDestroyView() { super.onDestroyView(); - rootView = null; } + } diff --git a/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java b/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java index 34cf31a..aac6706 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java @@ -3,47 +3,25 @@ package com.uiui.zyos.fragment.english; import android.app.Activity; import android.os.Bundle; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; import androidx.fragment.app.Fragment; import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentEnglishBinding; import com.uiui.zyos.dialog.EnglishBasicsDialog; import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link EnglishFragment#newInstance} factory method to * create an instance of this fragment. */ -public class EnglishFragment extends BaseFragment { - private static final String TAG = EnglishFragment.class.getSimpleName(); +public class EnglishFragment extends BaseDataBindingFragment { + private static final String TAG = "EnglishFragment"; - @BindView(R.id.imageView5) - ImageView imageView5; - @BindView(R.id.imageView6) - ImageView imageView6; - @BindView(R.id.imageView7) - ImageView imageView7; - @BindView(R.id.imageView8) - ImageView imageView8; - @BindView(R.id.imageView9) - ImageView imageView9; - @BindView(R.id.imageView10) - ImageView imageView10; - @BindView(R.id.imageView11) - ImageView imageView11; - - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -89,49 +67,30 @@ public class EnglishFragment extends BaseFragment { } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_english; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_english, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { - imageView5.setOnClickListener(new View.OnClickListener() { + protected void initView(Bundle bundle) { + mViewDataBinding.imageView5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|英语"); } }); - imageView6.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/英语|e:JWFD"); } }); - imageView7.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学英语词汇.JXW"); @@ -181,25 +140,25 @@ public class EnglishFragment extends BaseFragment { englishBasicsDialog.show(); } }); - imageView8.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_TRANSLATE_PACKAGE_NAME, JxwPackageConfig.JXW_TRANSLATE_CLASS_NAME); } }); - imageView9.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_MEMORIZE_WORDS_PACKAGE_NAME, JxwPackageConfig.JXW_WUWEI_WORDS_CLASS_NAME); } }); - imageView10.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView10.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_ORAL_TEST_PACKAGE_NAME, JxwPackageConfig.JXW_ORAL_TEST_CLASS_NAME); } }); - imageView11.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView11.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -210,4 +169,19 @@ public class EnglishFragment extends BaseFragment { } }); } + + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java deleted file mode 100644 index eb14b02..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.uiui.zyos.fragment.main; - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; - -public class MainContact { - public interface Presenter extends BasePresenter { - - } - - public interface MainView extends BaseView { - - } -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java deleted file mode 100644 index 90d1bef..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.uiui.zyos.fragment.main; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.FragmentEvent; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class MainFPresenter implements MainContact.Presenter { - private static final String TAG = MainFPresenter.class.getSimpleName(); - private Context mContext; - private MainContact.MainView mView; - - public MainFPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull MainContact.MainView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java index 58da4a3..10cd080 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java @@ -3,68 +3,35 @@ package com.uiui.zyos.fragment.main; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; +import android.provider.Settings; +import android.util.Log; +import android.view.View; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; -import android.provider.Settings; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; -import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; +import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment; +import com.uiui.zyos.databinding.FragmentMainBinding; import com.uiui.zyos.fragment.subject.SubjectFragment; import com.uiui.zyos.fragment.user.UserFragment; import com.uiui.zyos.utils.OpenApkUtils; import com.uiui.zyos.view.ScaleCircleNavigator; - -import net.lucode.hackware.magicindicator.MagicIndicator; +import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link MainFragment#newInstance} factory method to * create an instance of this fragment. */ -public class MainFragment extends BaseFragment implements MainContact.MainView { - private static final String TAG = MainFragment.class.getSimpleName(); +public class MainFragment extends BaseMvvmFragment { + private static final String TAG = "MainFragment"; - @BindView(R.id.viewPager) - ViewPager mViewPager; - @BindView(R.id.magicIndicator) - MagicIndicator mMagicIndicator; - - @BindView(R.id.cl_0) - ConstraintLayout cl_0; - @BindView(R.id.cl_1) - ConstraintLayout cl_1; - @BindView(R.id.cl_2) - ConstraintLayout cl_2; - @BindView(R.id.cl_3) - ConstraintLayout cl_3; - @BindView(R.id.cl_4) - ConstraintLayout cl_4; - @BindView(R.id.cl_5) - ConstraintLayout cl_5; - @BindView(R.id.cl_6) - ConstraintLayout cl_6; - @BindView(R.id.cl_7) - ConstraintLayout cl_7; - - - private MainFPresenter mPresenter; - private View rootView; private FragmentActivity mContext; private ScaleCircleNavigator scaleCircleNavigator; @@ -119,45 +86,21 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_main, container, false); - mContext = (FragmentActivity) rootView.getContext(); - mPresenter = new MainFPresenter(mContext); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_main; } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); - initData(); - } - - public void setCurrentItem() { - mViewPager.setCurrentItem(defaultCurrent); - mSubjectFragment.setCurrentItem(); - } - - private void initView() { + protected void initView(Bundle bundle) { mFragmentManager = getChildFragmentManager(); // mFragmentTransaction = mFragmentManager.beginTransaction(); mFragments = new ArrayList<>(); @@ -179,32 +122,32 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { } }); - mViewPager.setAdapter(mBaseFragmentPagerAdapter); - mViewPager.setOffscreenPageLimit(8); - mMagicIndicator.setNavigator(scaleCircleNavigator); + mViewDataBinding.viewPager.setAdapter(mBaseFragmentPagerAdapter); + mViewDataBinding.viewPager.setOffscreenPageLimit(8); + mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator); // ViewPagerHelper.bind(mMagicIndicator, mViewPager); mSubjectFragment.setPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - mMagicIndicator.onPageScrolled(position + 1, positionOffset, positionOffsetPixels); + mViewDataBinding.magicIndicator.onPageScrolled(position + 1, positionOffset, positionOffsetPixels); } @Override public void onPageSelected(int position) { - mMagicIndicator.onPageSelected(position + 1); + mViewDataBinding.magicIndicator.onPageSelected(position + 1); } @Override public void onPageScrollStateChanged(int state) { - mMagicIndicator.onPageScrollStateChanged(state + 1); + mViewDataBinding.magicIndicator.onPageScrollStateChanged(state + 1); } }); - mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + mViewDataBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Log.e(TAG, "onPageScrolled: position = " + position + " positionOffset = " + positionOffset + " positionOffsetPixels = " + positionOffsetPixels); if (position <= 1) { - mMagicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); + mViewDataBinding.magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); } } @@ -212,7 +155,7 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { public void onPageSelected(int position) { Log.e(TAG, "onPageSelected: position = " + position); if (position <= 1) { - mMagicIndicator.onPageSelected(position); + mViewDataBinding.magicIndicator.onPageSelected(position); } } @@ -220,33 +163,33 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { public void onPageScrollStateChanged(int state) { Log.e(TAG, "onPageSelected: state = " + state); if (state <= 1) { - mMagicIndicator.onPageScrollStateChanged(state); + mViewDataBinding.magicIndicator.onPageScrollStateChanged(state); } } }); if (mFragments.size() > 1) { - mViewPager.setCurrentItem(defaultCurrent); + mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); } - cl_0.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openApp("com.uiui.zyappstore","com.uiui.zyappstore.activity.MainActivity"); + OpenApkUtils.getInstance().openApp("com.uiui.zyappstore", "com.uiui.zyappstore.activity.MainActivity"); } }); - cl_1.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openApp("com.uiui.zybrowser","com.uiui.zybrowser.activity.main.MainActivity"); + OpenApkUtils.getInstance().openApp("com.uiui.zybrowser", "com.uiui.zybrowser.activity.main.MainActivity"); } }); - cl_2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openApp("com.android.documentsui"); } }); - cl_3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // OpenApkUtils.getInstance().openApp("com.android.camera"); @@ -254,14 +197,14 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { startActivity(intent); } }); - cl_4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Settings.ACTION_SETTINGS); startActivity(intent); } }); - cl_5.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // OpenApkUtils.getInstance().openApp("com.android.gallery3d.app"); @@ -269,22 +212,37 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { startActivity(intent); } }); - cl_6.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openApp("com.uiui.zyappstore"); } }); - cl_7.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openApp("com.uiui.zyappstore"); } }); + } + + @Override + protected void initData(Bundle savedInstanceState) { } - private void initData() { + @Override + public void onDestroyView() { + super.onDestroyView(); + } + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + public void setCurrentItem() { + mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); + mSubjectFragment.setCurrentItem(); } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainViewModel.java new file mode 100644 index 0000000..3deff52 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainViewModel.java @@ -0,0 +1,20 @@ +package com.uiui.zyos.fragment.main; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.zyos.base.mvvm.BaseViewModel; +import com.uiui.zyos.databinding.FragmentMainBinding; + +public class MainViewModel extends BaseViewModel { + + @Override + public FragmentMainBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java b/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java index 531c553..21e9f7f 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java @@ -2,59 +2,25 @@ package com.uiui.zyos.fragment.math; import android.app.Activity; import android.os.Bundle; +import android.util.Log; +import android.view.View; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentMathBinding; import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link MathFragment#newInstance} factory method to * create an instance of this fragment. */ -public class MathFragment extends BaseFragment { - private static final String TAG = MathFragment.class.getSimpleName(); +public class MathFragment extends BaseDataBindingFragment { + private static final String TAG = "MathFragment"; - @BindView(R.id.iv_sync_video) - ImageView iv_sync_video; - @BindView(R.id.cl_tutoring) - ConstraintLayout cl_tutoring; - @BindView(R.id.cl_near_antonyms) - ConstraintLayout cl_near_antonyms; - @BindView(R.id.cl_composition) - ConstraintLayout cl_composition; - @BindView(R.id.cl_read) - ConstraintLayout cl_read; - @BindView(R.id.cl_character) - ConstraintLayout cl_rhetoric; - @BindView(R.id.cl_classical) - ConstraintLayout cl_classical; - - @BindView(R.id.cl_encyclopedia) - ConstraintLayout cl_encyclopedia; - @BindView(R.id.cl_number) - ConstraintLayout cl_number; - @BindView(R.id.cl_formula) - ConstraintLayout cl_formula; - - @BindView(R.id.iv_precision_learning) - ImageView iv_precision_learning; - - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -99,101 +65,83 @@ public class MathFragment extends BaseFragment { Log.e(TAG, "onCreate: "); } + @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); + protected int getLayoutId() { + return R.layout.fragment_math; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_math, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { - iv_sync_video.setOnClickListener(new View.OnClickListener() { + protected void initView(Bundle bundle) { + mViewDataBinding.ivSyncVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|数学"); } }); - cl_tutoring.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clTutoring.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/数学|e:JWFD"); } }); - cl_near_antonyms.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clNearAntonyms.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学应用题训练.JXW"); } }); - cl_composition.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clComposition.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学奥数训练.JXW"); } }); - cl_read.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clRead.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/中学方程精解.JXW"); } }); - cl_rhetoric.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clCharacter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学趣味数学.JXW"); } }); - cl_classical.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clClassical.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_ARITHMETIC_PACKAGE_NAME, JxwPackageConfig.JXW_ARITHMETIC_CLASS_NAME); } }); - cl_encyclopedia.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clEncyclopedia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/中学公式大全.JXW"); } }); - cl_number.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clNumber.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_KNOW_MATHEMATICS_PACKAGE_NAME, JxwPackageConfig.JXW_KNOW_MATHEMATICS_CLASS_NAME); } }); - cl_formula.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clFormula.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSolidifiedData("f:/ansystem/固化数据/小学数学公式.JXW"); } }); - iv_precision_learning.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivPrecisionLearning.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -204,4 +152,20 @@ public class MathFragment extends BaseFragment { } }); } + + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } + } diff --git a/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java b/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java index f62ceba..c28f0c5 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java @@ -3,38 +3,23 @@ package com.uiui.zyos.fragment.physics; import android.app.Activity; import android.os.Bundle; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; import androidx.fragment.app.Fragment; import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentPhysicsBinding; import com.uiui.zyos.utils.OpenApkUtils; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link PhysicsFragment#newInstance} factory method to * create an instance of this fragment. */ -public class PhysicsFragment extends BaseFragment { - private static final String TAG = PhysicsFragment.class.getSimpleName(); +public class PhysicsFragment extends BaseDataBindingFragment { + private static final String TAG = "PhysicsFragment"; - @BindView(R.id.imageView1) - ImageView imageView1; - @BindView(R.id.imageView2) - ImageView imageView2; - @BindView(R.id.imageView3) - ImageView imageView3; - @BindView(R.id.imageView4) - ImageView imageView4; - - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -85,50 +70,36 @@ public class PhysicsFragment extends BaseFragment { } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_physics, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_physics; } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; + protected void initDataBinding() { + mContext = getActivity(); } - private void initView() { - imageView1.setOnClickListener(new View.OnClickListener() { + @Override + protected void initView(Bundle bundle) { + mViewDataBinding.imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSyncVideo("同步视频|物理"); } }); - imageView2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openSynchronousTutoring("d:/同步学习/物理|e:JWFD"); } }); - imageView3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openLaboratory("物理实验室"); } }); - imageView4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (OpenApkUtils.getInstance().isNewAiApp()) { @@ -138,6 +109,15 @@ public class PhysicsFragment extends BaseFragment { } } }); + } + + @Override + protected void initData(Bundle savedInstanceState) { } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } } 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 ebd5bda..eea2fa7 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 @@ -1,56 +1,34 @@ package com.uiui.zyos.fragment.precision; -import android.app.Activity; -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 androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; + 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; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link PrecisionFragment#newInstance} factory method to * create an instance of this fragment. */ public class PrecisionFragment extends BaseMvvmFragment { - private static final String TAG = PrecisionFragment.class.getSimpleName(); + private static final String TAG = "PrecisionFragment"; 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) - ImageView iv_paper; - @BindView(R.id.iv_test) - ImageView iv_test; - @BindView(R.id.iv_book) - ImageView iv_book; - @BindView(R.id.iv_favorites) - ImageView iv_favorites; - - // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; 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 c9c5108..44ba48c 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 @@ -1,23 +1,17 @@ package com.uiui.zyos.fragment.subject; import android.os.Bundle; +import android.util.Log; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.flyco.tablayout.SlidingTabLayout; import com.uiui.zyos.R; -import com.uiui.zyos.base.BaseFragment; -import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; +import com.uiui.zyos.base.BaseDataBindingFragment; +import com.uiui.zyos.databinding.FragmentSubjectBinding; import com.uiui.zyos.fragment.app.AppFragment; -import com.uiui.zyos.fragment.ar.ARStudyFragment; import com.uiui.zyos.fragment.biology.BiologyFragment; import com.uiui.zyos.fragment.chemical.ChemicalFragment; import com.uiui.zyos.fragment.chinese.ChineseFragment; @@ -26,32 +20,25 @@ import com.uiui.zyos.fragment.english.EnglishFragment; import com.uiui.zyos.fragment.math.MathFragment; import com.uiui.zyos.fragment.physics.PhysicsFragment; import com.uiui.zyos.fragment.precision.PrecisionFragment; +import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link SubjectFragment#newInstance} factory method to * create an instance of this fragment. */ -public class SubjectFragment extends BaseFragment { - private static final String TAG = SubjectFragment.class.getSimpleName(); - - @BindView(R.id.main_sliding_tab_layout) - SlidingTabLayout main_sliding_tab_layout; - @BindView(R.id.viewPager) - ViewPager mViewPager; +public class SubjectFragment extends BaseDataBindingFragment { + private static final String TAG = "SubjectFragment"; private String[] title = new String[]{ // "AR自主学", "精准学", "语文", "数学", "英语", "物理", "化学", "生物", "综合", "应用"}; - private View rootView; private FragmentActivity mContext; + // private ARStudyFragment mARStudyFragment; private PrecisionFragment mPrecisionFragment; private ChineseFragment mChineseFragment; @@ -88,11 +75,11 @@ public class SubjectFragment extends BaseFragment { // mARStudyFragment.setUserVisibleHintCallback(new ARStudyFragment.UserVisibleHintCallback() { // @Override // public void onUserVisibleHint() { -// if (mViewPager != null) { -// mViewPager.postDelayed(new Runnable() { +// if (mViewDataBinding.viewPager != null) { +// mViewDataBinding.viewPager.postDelayed(new Runnable() { // @Override // public void run() { -// mViewPager.setOffscreenPageLimit(11); +// mViewDataBinding.viewPager.setOffscreenPageLimit(11); // } // }, 2345); // Log.e(TAG, "setUserVisibleHint: setOffscreenPageLimit"); @@ -103,11 +90,11 @@ public class SubjectFragment extends BaseFragment { mPrecisionFragment.setUserVisibleHintCallback(new PrecisionFragment.UserVisibleHintCallback() { @Override public void onUserVisibleHint() { - if (mViewPager != null) { - mViewPager.postDelayed(new Runnable() { + if (mViewDataBinding.viewPager != null) { + mViewDataBinding.viewPager.postDelayed(new Runnable() { @Override public void run() { - mViewPager.setOffscreenPageLimit(10); + mViewDataBinding.viewPager.setOffscreenPageLimit(10); } }, 1234); Log.e(TAG, "setUserVisibleHint: setOffscreenPageLimit"); @@ -165,27 +152,31 @@ public class SubjectFragment extends BaseFragment { } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_subject, container, false); - mContext = (FragmentActivity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_subject; } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; + protected void initDataBinding() { + mContext = getActivity(); + } + + @Override + protected void initView(Bundle bundle) { + long time = System.currentTimeMillis(); + Log.e(TAG, "initView: start " + time); + mFragmentManager = getChildFragmentManager(); + mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments); + mViewDataBinding.viewPager.setAdapter(mBaseFragmentPagerAdapter); + mViewDataBinding.viewPager.setOnPageChangeListener(mListener); + mViewDataBinding.mainSlidingTabLayout.setViewPager(mViewDataBinding.viewPager, title); + Log.e(TAG, "initView: end = " + (System.currentTimeMillis() - time)); + + } + + @Override + protected void initData(Bundle savedInstanceState) { + } @Override @@ -204,6 +195,11 @@ public class SubjectFragment extends BaseFragment { } } + @Override + public void onDestroyView() { + super.onDestroyView(); + } + @Override public void onResume() { Log.e(TAG, "onResume: "); @@ -216,22 +212,10 @@ public class SubjectFragment extends BaseFragment { } public void setCurrentItem() { - mViewPager.setCurrentItem(defaultCurrent); + mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); } public void setPageChangeListener(ViewPager.OnPageChangeListener listener) { this.mListener = listener; } - - private void initView() { - long time = System.currentTimeMillis(); - Log.e(TAG, "initView: start " + time); - mFragmentManager = getChildFragmentManager(); - mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments); - mViewPager.setAdapter(mBaseFragmentPagerAdapter); - mViewPager.setOnPageChangeListener(mListener); - main_sliding_tab_layout.setViewPager(mViewPager, title); - Log.e(TAG, "initView: end = " + (System.currentTimeMillis() - time)); - - } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java deleted file mode 100644 index 390e1ed..0000000 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.uiui.zyos.fragment.user; - -import android.graphics.Bitmap; - -import com.uiui.zyos.base.mvp.BasePresenter; -import com.uiui.zyos.base.mvp.BaseView; -import com.uiui.zyos.bean.BaseResponse; -import com.uiui.zyos.bean.DesktopIcon; -import com.uiui.zyos.bean.SnInfo; -import com.uiui.zyos.bean.StudyStatBean; - -import java.util.ArrayList; - -public class UserContact { - public interface Presenter extends BasePresenter { - /*获取设备信息*/ - void getSnInfo(); - void getStudyStat(); - void getQrCode(); - void getInstalledApp(); - void getAppUsedStatistics(); - } - - public interface UserView extends BaseView { - void setSnInfo(BaseResponse response); - void setStudyStat(StudyStatBean studyStat); - void setQrCode(Bitmap bitmap); - void setInstalledApp( ArrayList desktopIcons); - void setAppUsedStatistics(long time); - } -} diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java index 71d1dfb..7fa57d4 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java @@ -11,32 +11,27 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.shehuan.niv.NiceImageView; import com.tencent.mmkv.MMKV; import com.uiui.zyos.R; import com.uiui.zyos.activity.ExitActivity; import com.uiui.zyos.activity.more.MoreAppActivity; import com.uiui.zyos.adapter.AppAdapter; -import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment; import com.uiui.zyos.bean.BaseResponse; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.bean.SnInfo; import com.uiui.zyos.bean.StudyStatBean; import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.databinding.FragmentUserBinding; import com.uiui.zyos.dialog.SingleDialog; import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.utils.ApkUtils; @@ -48,73 +43,20 @@ import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; import java.util.ArrayList; import java.util.HashMap; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link UserFragment#newInstance} factory method to * create an instance of this fragment. */ -public class UserFragment extends BaseFragment implements UserContact.UserView { - private static final String TAG = UserFragment.class.getSimpleName(); +public class UserFragment extends BaseMvvmFragment { + private static final String TAG = "UserFragment"; - @BindView(R.id.iv_avatar) - NiceImageView iv_avatar; - @BindView(R.id.tv_name) - TextView tv_name; - @BindView(R.id.tv_grade) - TextView tv_grade; - @BindView(R.id.tv_exit) - TextView tv_exit; - @BindView(R.id.iv_speaker) - ImageView iv_speaker; - @BindView(R.id.tv_notification) - TextView tv_notification; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - @BindView(R.id.cl_usedata) - ConstraintLayout cl_usedata; - @BindView(R.id.tv_percent) - TextView tv_percent; - @BindView(R.id.tv_activated) - TextView tv_activated; - @BindView(R.id.tv_activated2) - TextView tv_activated2; - @BindView(R.id.tv_applet) - TextView tv_applet; - @BindView(R.id.tv_duration) - TextView tv_duration; - @BindView(R.id.tv_date1) - TextView tv_date1; - @BindView(R.id.iv_applet_qrcode) - NiceImageView iv_applet_qrcode; - @BindView(R.id.iv_device_qrcode) - NiceImageView iv_device_qrcode; - @BindView(R.id.cl_app) - ConstraintLayout cl_app; - @BindView(R.id.tv_date2) - TextView tv_date2; - @BindView(R.id.cl_more) - ConstraintLayout cl_more; - @BindView(R.id.rv_app) - RecyclerView rv_app; - @BindView(R.id.iv_nodata) - ImageView iv_nodata; - @BindView(R.id.tv_activation) - TextView tv_activation; - @BindView(R.id.cl_bind_statu) - ConstraintLayout cl_bind_statu; - @BindView(R.id.iv_bind) - ImageView iv_bind; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + private FragmentActivity mContext; private AppAdapter mAppAdapter; - private UserPresenter mPresenter; - private View rootView; - private FragmentActivity mContext; - private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -158,85 +100,65 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { } @Override - public void fetchData() { - Log.e(TAG, "fetchData: "); -// mPresenter.getInstalledApp(); -// mPresenter.getSnInfo(); + protected int getLayoutId() { + return R.layout.fragment_user; } @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); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_user, container, false); - mContext = (FragmentActivity) rootView.getContext(); - mPresenter = new UserPresenter(mContext); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); } @Override - public void onDestroyView() { - super.onDestroyView(); - rootView = null; - } - - private void initView() { + protected void initView(Bundle bundle) { Log.e(TAG, "initView: "); - tv_notification.requestFocus(); - tv_activated2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvNotification.requestFocus(); + mViewDataBinding.tvActivated2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME); } }); - tv_activated.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvActivated.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME); } }); - tv_applet.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvApplet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); } }); - iv_avatar.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); - iv_applet_qrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); - iv_device_qrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); + mViewDataBinding.ivAvatar.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); + mViewDataBinding.ivAppletQrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); + mViewDataBinding.ivDeviceQrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity")); registerOwnReceiver(); String name = mMMKV.decodeString("USERINFO_NAME", ""); if (TextUtils.isEmpty(name)) { - tv_name.setText(getString(R.string.default_nickname)); + mViewDataBinding.tvName.setText(getString(R.string.default_nickname)); } else { - tv_name.setText(name); + mViewDataBinding.tvName.setText(name); } String grade = mMMKV.decodeString("USERINFO_GRADE", ""); if (TextUtils.isEmpty(grade)) { - tv_grade.setText(getString(R.string.default_grade)); + mViewDataBinding.tvGrade.setText(getString(R.string.default_grade)); } else { - tv_grade.setText(grade); + mViewDataBinding.tvGrade.setText(grade); } int logined = mMMKV.decodeInt(CommonConfig.isLogined, 0); if (logined == 1) { - cl_nodata.setVisibility(View.GONE); - cl_usedata.setVisibility(View.VISIBLE); + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.clUsedata.setVisibility(View.VISIBLE); } setButtonVisibility(); - tv_exit.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent("Receiver_Refresh_Password_Action"); @@ -251,30 +173,30 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { } } }); - tv_activation.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivActivation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); } }); String avatar = mMMKV.decodeString("USERINFO_AVATAR", ""); - Glide.with(iv_avatar).load(avatar).error(R.drawable.default_avatar).into(iv_avatar); - tv_date1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); - tv_date2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); - cl_more.setOnClickListener(new View.OnClickListener() { + Glide.with(mViewDataBinding.ivAvatar).load(avatar).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar); + mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); + mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); + mViewDataBinding.clMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(mContext, MoreAppActivity.class)); } }); - cl_bind_statu.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clBindStatu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); } }); - rv_app.setLayoutManager(new GridLayoutManager(mContext, 4)); + mViewDataBinding.rvApp.setLayoutManager(new GridLayoutManager(mContext, 4)); HashMap stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); @@ -284,9 +206,117 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - rv_app.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mViewDataBinding.rvApp.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mAppAdapter = new AppAdapter(); - rv_app.setAdapter(mAppAdapter); + mViewDataBinding.rvApp.setAdapter(mAppAdapter); + } + + @Override + protected void initData(Bundle savedInstanceState) { + mViewModel.mSnInfoData.observe(this, new Observer>() { + @Override + public void onChanged(BaseResponse snInfoBaseResponse) { + if (snInfoBaseResponse != null) { + //设备已经绑定 + switch (snInfoBaseResponse.code) { + case 200://设备已经绑定 + SnInfo snInfo = snInfoBaseResponse.data; + Glide.with(mViewDataBinding.ivAvatar).load(snInfo.getAvatar()).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar); + String name = snInfo.getSn_name(); + String grade = snInfo.getGrade(); + if (TextUtils.isEmpty(name)) { + mViewDataBinding.tvName.setText(getString(R.string.default_nickname)); + } else { + mViewDataBinding.tvName.setText(name); + } + if (TextUtils.isEmpty(grade)) { + mViewDataBinding.tvGrade.setText(getString(R.string.default_grade)); + } else { + mViewDataBinding.tvGrade.setText(grade); + } + mViewDataBinding.tvPercent.setText(snInfo.getStudy_time_ranking() + "%"); + mViewDataBinding.tvDuration.setText(String.format(getString(R.string.today_study_time), TimeUtils.formatTime(snInfo.getStudy_time()))); + + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.clUsedata.setVisibility(View.VISIBLE); + mViewDataBinding.ivBind.setVisibility(View.GONE); + break; + case 300: //设备没有绑定 + case 400://没有授权的设备 + case 403://设备归属不存在 + case 402://sn不存在 + mViewDataBinding.tvName.setText(getString(R.string.unbind)); + mViewDataBinding.tvGrade.setText(getString(R.string.notset)); + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.clUsedata.setVisibility(View.GONE); + mViewDataBinding.ivBind.setVisibility(View.VISIBLE); + break; +// Toaster.show(getString(R.string.device_unauthorized)); +// Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized)); +// tvName.setText(getString(R.string.device_unauthorized)); +// tvGrade.setText(getString(R.string.device_unauthorized)); +// clNodata.setVisibility(View.GONE); +// clUsedata.setVisibility(View.GONE); +// break; + default: + } + } + setButtonVisibility(); + + mViewModel.getStudyStat(); + mViewModel.getQrCode(); + } + }); + + mViewModel.mStudyStatBeanData.observe(this, new Observer() { + @Override + public void onChanged(StudyStatBean studyStatBean) { + if (studyStatBean != null) { +// tv_percent.setText(studyStat.getStudy_exceed() + "%"); + } + } + }); + mViewModel.mQrCodeData.observe(this, new Observer() { + @Override + public void onChanged(Bitmap bitmap) { + mViewDataBinding.ivDeviceQrcode.setImageBitmap(bitmap); + } + }); + mViewModel.mDesktopListIconData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList desktopIcons) { + Log.e(TAG, "setInstalledApp: " + desktopIcons); + if (desktopIcons == null || desktopIcons.size() == 0) { + mViewDataBinding.ivNodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvApp.setVisibility(View.INVISIBLE); + } else { + mViewDataBinding.ivNodata.setVisibility(View.GONE); + mViewDataBinding.rvApp.setVisibility(View.VISIBLE); + mAppAdapter.setDesktopIcons(desktopIcons); + } + mViewModel.getAppUsedStatistics(); + } + }); + mViewModel.mAppUsedData.observe(this, new Observer() { + @Override + public void onChanged(Long time) { + Log.e(TAG, "setAppUsedStatistics: " + time); + String useTime = TimeUtils.formatTime(time); +// tv_duration.setText(String.format(getString(R.string.today_study_time), useTime)); + } + }); + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); +// mPresenter.getInstalledApp(); +// mPresenter.getSnInfo(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); } private void showSingleDialog() { @@ -338,16 +368,16 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); Log.e(TAG, "setButtonVisibility: " + is_activation); if (is_activation != 1) { -// tv_exit.setVisibility(View.VISIBLE); - tv_activation.setVisibility(View.VISIBLE); +// tvExit.setVisibility(View.VISIBLE); + mViewDataBinding.ivActivation.setVisibility(View.VISIBLE); } else { int isReturnAndroid = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_RETURN_ANDROID_KEY, 1); if (isReturnAndroid == 0) { -// tv_exit.setVisibility(View.INVISIBLE); +// tvExit.setVisibility(View.INVISIBLE); } else { -// tv_exit.setVisibility(View.VISIBLE); +// tvExit.setVisibility(View.VISIBLE); } - tv_activation.setVisibility(View.GONE); + mViewDataBinding.ivActivation.setVisibility(View.GONE); } } @@ -356,18 +386,19 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { super.setUserVisibleHint(isVisibleToUser); Log.e(TAG, "setUserVisibleHint: " + isVisibleToUser); if (isVisibleToUser && isViewInitiated) { - mPresenter.getInstalledApp(); - mPresenter.getSnInfo(); + mViewModel.getInstalledApp(); + mViewModel.getSnInfo(); setButtonVisibility(); } } + @Override public void onResume() { super.onResume(); Log.e(TAG, "onResume: "); setButtonVisibility(); - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } @Override @@ -377,92 +408,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { unregisterOwnReceiver(); } - @Override - public void setSnInfo(BaseResponse response) { - if (response != null) { - //设备已经绑定 - switch (response.code) { - case 200://设备已经绑定 - SnInfo snInfo = response.data; - Glide.with(iv_avatar).load(snInfo.getAvatar()).error(R.drawable.default_avatar).into(iv_avatar); - String name = snInfo.getSn_name(); - String grade = snInfo.getGrade(); - if (TextUtils.isEmpty(name)) { - tv_name.setText(getString(R.string.default_nickname)); - } else { - tv_name.setText(name); - } - if (TextUtils.isEmpty(grade)) { - tv_grade.setText(getString(R.string.default_grade)); - } else { - tv_grade.setText(grade); - } - tv_percent.setText(snInfo.getStudy_time_ranking() + "%"); - tv_duration.setText(String.format(getString(R.string.today_study_time), TimeUtils.formatTime(snInfo.getStudy_time()))); - - cl_nodata.setVisibility(View.GONE); - cl_usedata.setVisibility(View.VISIBLE); - iv_bind.setImageDrawable(mContext.getDrawable(R.drawable.icon_device_bind)); - break; - case 300: //设备没有绑定 - case 400://没有授权的设备 - case 403://设备归属不存在 - case 402://sn不存在 - tv_name.setText(getString(R.string.unbind)); - tv_grade.setText(getString(R.string.notset)); - cl_nodata.setVisibility(View.VISIBLE); - cl_usedata.setVisibility(View.GONE); - iv_bind.setImageDrawable(mContext.getDrawable(R.drawable.icon_device_unbind)); - break; -// Toaster.show(getString(R.string.device_unauthorized)); -// Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized)); -// tv_name.setText(getString(R.string.device_unauthorized)); -// tv_grade.setText(getString(R.string.device_unauthorized)); -// cl_nodata.setVisibility(View.GONE); -// cl_usedata.setVisibility(View.GONE); -// break; - default: - } - } - setButtonVisibility(); - - mPresenter.getStudyStat(); - mPresenter.getQrCode(); - } - - @Override - public void setStudyStat(StudyStatBean studyStat) { - if (studyStat != null) { -// tv_percent.setText(studyStat.getStudy_exceed() + "%"); - } - } - - @Override - public void setQrCode(Bitmap bitmap) { - iv_device_qrcode.setImageBitmap(bitmap); - } - - @Override - public void setInstalledApp(ArrayList desktopIcons) { - Log.e(TAG, "setInstalledApp: " + desktopIcons); - if (desktopIcons == null || desktopIcons.size() == 0) { - iv_nodata.setVisibility(View.VISIBLE); - rv_app.setVisibility(View.INVISIBLE); - } else { - iv_nodata.setVisibility(View.GONE); - rv_app.setVisibility(View.VISIBLE); - mAppAdapter.setDesktopIcons(desktopIcons); - } - mPresenter.getAppUsedStatistics(); - } - - @Override - public void setAppUsedStatistics(long time) { - Log.e(TAG, "setAppUsedStatistics: " + time); - String useTime = TimeUtils.formatTime(time); -// tv_duration.setText(String.format(getString(R.string.today_study_time), useTime)); - } - private void registerOwnReceiver() { registerTimeReceiver(); registerRefreshReceiver(); @@ -513,8 +458,8 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { case Intent.ACTION_TIME_CHANGED: case Intent.ACTION_TIMEZONE_CHANGED: case Intent.ACTION_TIME_TICK: - tv_date1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); - tv_date2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); + mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); + mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis())); default: break; } @@ -540,7 +485,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { String action = intent.getAction(); Log.e("RefreshReceiver", "onReceive: " + action); if (ACTION_REFRESH_BINDING_STATUS.equals(action)) { - mPresenter.getSnInfo(); + mViewModel.getSnInfo(); setButtonVisibility(); } } @@ -570,7 +515,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { return; } if (UPDATE_DESKTOP_ICON_ACTION.equals(action)) { - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } } } @@ -600,7 +545,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { if (TextUtils.isEmpty(action)) { return; } - mPresenter.getInstalledApp(); + mViewModel.getInstalledApp(); } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserViewModel.java similarity index 74% rename from app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java rename to app/src/main/java/com/uiui/zyos/fragment/user/UserViewModel.java index 5ab1a10..08a8760 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserViewModel.java @@ -1,23 +1,26 @@ package com.uiui.zyos.fragment.user; -import android.content.Context; import android.graphics.Bitmap; import android.text.TextUtils; import android.util.Log; +import androidx.lifecycle.MutableLiveData; + import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.zyos.BuildConfig; import com.uiui.zyos.R; +import com.uiui.zyos.base.mvvm.BaseViewModel; import com.uiui.zyos.bean.AppUsed; import com.uiui.zyos.bean.BaseResponse; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.bean.SnInfo; import com.uiui.zyos.bean.StudyStatBean; import com.uiui.zyos.config.CommonConfig; -import com.uiui.zyos.disklrucache.CacheHelper; +import com.uiui.zyos.databinding.FragmentUserBinding; import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.network.NetInterfaceManager; @@ -35,40 +38,24 @@ import java.util.stream.Collectors; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; -public class UserPresenter implements UserContact.Presenter { - private static final String TAG = UserPresenter.class.getSimpleName(); - private UserContact.UserView mView; - private Context mContext; - private CacheHelper mCacheHelper; +public class UserViewModel extends BaseViewModel { + private static final String TAG = "UserViewModel"; - public UserPresenter(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - } + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; + @Override + public FragmentUserBinding getVDBinding() { + return binding; } @Override - public void attachView(@NonNull UserContact.UserView view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; - } + public MutableLiveData> mSnInfoData = new MutableLiveData<>(); - @Override public void getSnInfo() { NetInterfaceManager.getInstance().getSnInfo(getLifecycle(), new NetInterfaceManager.ObserverCallback() { @Override @@ -79,18 +66,18 @@ public class UserPresenter implements UserContact.Presenter { @Override public void onNext(BaseResponse response) { Log.e("getSnInfo", "onNext: " + response); - mView.setSnInfo(response); + mSnInfoData.setValue(response); } @Override public void onError(Throwable e) { Log.e("getSnInfo", "onError: " + e.getMessage()); - String jsonString = mCacheHelper.getAsString(UrlAddress.SNINFO); + String jsonString = mMMKV.decodeString(UrlAddress.SNINFO); Gson gson = new Gson(); Type type = new TypeToken>() { }.getType(); BaseResponse userInfoBaseResponse = gson.fromJson(jsonString, type); - mView.setSnInfo(userInfoBaseResponse); + mSnInfoData.setValue(userInfoBaseResponse); } @Override @@ -100,14 +87,15 @@ public class UserPresenter implements UserContact.Presenter { }); } - @Override + public MutableLiveData mStudyStatBeanData = new MutableLiveData<>(); + public void getStudyStat() { - boolean activation = ActivationUtil.isActivation(mContext); + boolean activation = ActivationUtil.isActivation(getCtx()); if (!activation) { return; } NetInterfaceManager.getInstance().getStudyStatObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) .subscribe(new Observer>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -117,11 +105,11 @@ public class UserPresenter implements UserContact.Presenter { @Override public void onNext(@NonNull BaseResponse studyStatBeanBaseResponse) { Log.e("getStudyStat", "onNext: " + studyStatBeanBaseResponse); - if (studyStatBeanBaseResponse.code==200){ + if (studyStatBeanBaseResponse.code == 200) { StudyStatBean studyStatBean = studyStatBeanBaseResponse.data; - mView.setStudyStat(studyStatBean); - }else { - mView.setStudyStat(null); + mStudyStatBeanData.setValue(studyStatBean); + } else { + mStudyStatBeanData.setValue(null); } } @@ -138,15 +126,17 @@ public class UserPresenter implements UserContact.Presenter { }); } - @Override + public MutableLiveData mQrCodeData = new MutableLiveData<>(); + public void getQrCode() { String encryptString = CXAESUtil.encrypt(CommonConfig.AES_KEY, RemoteManager.getInstance().getSerial()); Log.e("getQRCode", "setImageAndText: " + encryptString); Bitmap bitmap = Utils.createQRImage(encryptString, 400, 400); - mView.setQrCode(bitmap); + mQrCodeData.setValue(bitmap); } - @Override + public MutableLiveData> mDesktopListIconData = new MutableLiveData<>(); + public void getInstalledApp() { ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); @@ -154,29 +144,30 @@ public class UserPresenter implements UserContact.Presenter { appstoreDesktopIcon.setLable("应用市场"); appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_PACKAGE_NAME); appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_CLASS_NAME); - appstoreDesktopIcon.setIcon(mContext.getDrawable(R.drawable.com_android_appstore)); + appstoreDesktopIcon.setIcon(getCtx().getDrawable(R.drawable.com_android_appstore)); desktopIcons.add(desktopIcons.size(), appstoreDesktopIcon); DesktopIcon updateDesktopIcon = new DesktopIcon(); updateDesktopIcon.setLable("应用更新"); updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME); - updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update)); + updateDesktopIcon.setIcon(getCtx().getDrawable(R.drawable.icon_update)); desktopIcons.add(desktopIcons.size(), updateDesktopIcon); DesktopIcon desktopIcon = new DesktopIcon(); desktopIcon.setLable("添加应用"); desktopIcon.setPackageName(AppManager.ADD_NAME); - desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add)); + desktopIcon.setIcon(getCtx().getDrawable(R.drawable.icon_add)); desktopIcons.add(desktopIcons.size(), desktopIcon); - mView.setInstalledApp(desktopIcons); + mDesktopListIconData.setValue(desktopIcons); } - @Override + public MutableLiveData mAppUsedData = new MutableLiveData<>(); + public void getAppUsedStatistics() { String jsonString = RemoteManager.getInstance().getAppUsedStatistics(); if (TextUtils.isEmpty(jsonString)) { - mView.setAppUsedStatistics(0); + mAppUsedData.setValue((long) 0); } else { Gson gson = new Gson(); Type listType = new TypeToken>() { @@ -192,10 +183,10 @@ public class UserPresenter implements UserContact.Presenter { } }).collect(Collectors.toList()); long time = appUseTime.stream().mapToLong(AppUsed::getUseTime).sum(); - mView.setAppUsedStatistics(time); + mAppUsedData.setValue(time); } catch (Exception e) { Log.e(TAG, "getAppUsedStatistics: " + e.getMessage()); - mView.setAppUsedStatistics(0); + mAppUsedData.setValue((long) 0); } } } diff --git a/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java index 88934ad..5a8f5cf 100644 --- a/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java +++ b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java @@ -20,7 +20,7 @@ public class IconPositionManager { private IconPositionDBHelper mDBHelper; private static final String TABLE_NAME = "DesktopIcon"; - private static String TAG = IconPositionManager.class.getSimpleName(); + private static final String TAG = "IconPositionManager"; private IconPositionManager(Context context) { if (context == null) { diff --git a/app/src/main/java/com/uiui/zyos/manager/AmapManager.java b/app/src/main/java/com/uiui/zyos/manager/AmapManager.java index 1029afd..01caffb 100644 --- a/app/src/main/java/com/uiui/zyos/manager/AmapManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/AmapManager.java @@ -27,7 +27,7 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class AmapManager { - private static final String TAG = AmapManager.class.getSimpleName(); + private static final String TAG = "AmapManager"; MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); diff --git a/app/src/main/java/com/uiui/zyos/manager/AppManager.java b/app/src/main/java/com/uiui/zyos/manager/AppManager.java index 1c8bd86..808cd77 100644 --- a/app/src/main/java/com/uiui/zyos/manager/AppManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/AppManager.java @@ -27,7 +27,7 @@ import java.util.function.Function; import java.util.stream.Collectors; public class AppManager { - private static final String TAG = AppManager.class.getSimpleName(); + private static final String TAG = "AppManager"; public static final String ADD_NAME = "com.zyos.add"; public static final String APPSTORE_PACKAGE_NAME = "com.uiui.zyappstore"; diff --git a/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java b/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java index 4113ba8..7f16854 100644 --- a/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java @@ -9,7 +9,7 @@ import com.uiui.zyos.config.CommonConfig; import com.uiui.zyos.utils.TimeUtils; public class ConnectManager { - private static final String TAG = ConnectManager.class.getSimpleName(); + private static final String TAG = "ConnectManager"; public static final long ONE_MINUTES_TIME = 60 * 1000; diff --git a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java index cffdb49..6a354db 100644 --- a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java @@ -14,22 +14,18 @@ import android.util.Log; import com.alibaba.sdk.android.push.CloudPushService; import com.alibaba.sdk.android.push.CommonCallback; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; import com.uiui.zy.IGetInfoInterface; -import com.uiui.zyos.bean.MapBean; import com.uiui.zyos.config.CommonConfig; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class RemoteManager { - private static final String TAG = RemoteManager.class.getSimpleName(); + private static final String TAG = "RemoteManager"; @SuppressLint("StaticFieldLeak") private static RemoteManager sInstance; @@ -58,7 +54,7 @@ public class RemoteManager { mGetInfoInterface = IGetInfoInterface.Stub.asInterface(service); mServiceConnected = true; for (ConnectedListener listener : mListeners) { - listener.onConnected(); + listener.onRemoteConnected(); } try { String sn = mGetInfoInterface.getSerial(); @@ -118,7 +114,7 @@ public class RemoteManager { } public interface ConnectedListener { - void onConnected(); + void onRemoteConnected(); } private static Set mListeners = new HashSet<>(); @@ -126,7 +122,7 @@ public class RemoteManager { public static void setListener(ConnectedListener listener) { mListeners.add(listener); if (mServiceConnected) { - listener.onConnected(); + listener.onRemoteConnected(); } } diff --git a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java index f379a5c..1e1fff7 100644 --- a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java @@ -14,6 +14,7 @@ import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.zyos.alarm.AlarmUtils; import com.uiui.zyos.bean.AlarmClockData; import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.bean.GuideBean; import com.uiui.zyos.bean.LessonApp; import com.uiui.zyos.bean.LessonJson; import com.uiui.zyos.bean.LessonSetting; @@ -28,6 +29,7 @@ import com.uiui.zyos.network.api.AlarmClockApi; import com.uiui.zyos.network.api.AppUsageRecordApi; import com.uiui.zyos.network.api.CloudLessonApi; import com.uiui.zyos.network.api.CloudLessonAppApi; +import com.uiui.zyos.network.api.GetFilesApi; import com.uiui.zyos.network.api.RunNewApp; import com.uiui.zyos.network.api.SNInfoApi; import com.uiui.zyos.network.api.StudyStatApi; @@ -60,6 +62,8 @@ import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class NetInterfaceManager { + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @SuppressLint("StaticFieldLeak") private static NetInterfaceManager INSTANCE; private Context mContext; @@ -67,7 +71,6 @@ public class NetInterfaceManager { private Retrofit mRetrofit; private OkHttpClient okHttpClient; - private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); //超时时间 @@ -224,6 +227,12 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable> getFilesObservable(int type) { + return mRetrofit.create(GetFilesApi.class) + .getFiles(type) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } /* * @@ -300,7 +309,7 @@ public class NetInterfaceManager { if (callback != null) { callback.onNext(userInfoBaseResponse); } - mCacheHelper.put(UrlAddress.SNINFO, GsonUtils.toJSONString(userInfoBaseResponse)); + mMMKV.encode(UrlAddress.SNINFO, GsonUtils.toJSONString(userInfoBaseResponse)); int code = userInfoBaseResponse.code; if (userInfoBaseResponse.code == 200) { mMMKV.encode(CommonConfig.isLogined, 1); @@ -319,13 +328,13 @@ public class NetInterfaceManager { mMMKV.encode("USERINFO_AVATAR", snInfo.getGrade()); } } else if (code == 300) { - mCacheHelper.put(UrlAddress.SNINFO, ""); + mMMKV.encode(UrlAddress.SNINFO, ""); mMMKV.encode(CommonConfig.isLogined, 0); } else if (code == 400) { - mCacheHelper.put(UrlAddress.SNINFO, ""); + mMMKV.encode(UrlAddress.SNINFO, ""); mMMKV.encode(CommonConfig.isLogined, 2); } else { - mCacheHelper.put(UrlAddress.SNINFO, ""); + mMMKV.encode(UrlAddress.SNINFO, ""); mMMKV.encode(CommonConfig.isLogined, 0); } } diff --git a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java index 87e8092..9a4c0bc 100644 --- a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java +++ b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java @@ -21,6 +21,8 @@ public class UrlAddress { /*爱心提醒通知成功*/ public static final String UPDATE_ALARM_CLOCK = "updateAlarmClock"; + /*获取文件*/ + public static final String GET_FILES = "file/getFiles"; /*网课模式*/ public final static String GET_CLOUD_LESSON = "Control/getCloudLessonSetting"; diff --git a/app/src/main/java/com/uiui/zyos/network/api/GetFilesApi.java b/app/src/main/java/com/uiui/zyos/network/api/GetFilesApi.java new file mode 100644 index 0000000..e480520 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/api/GetFilesApi.java @@ -0,0 +1,16 @@ +package com.uiui.zyos.network.api; + +import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.bean.GuideBean; +import com.uiui.zyos.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface GetFilesApi { + @GET(UrlAddress.GET_FILES) + Observable> getFiles( + @Query("type") int type + ); +} diff --git a/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java b/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java index cd501ac..e7ca7c9 100644 --- a/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java +++ b/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java @@ -22,7 +22,7 @@ import okio.Buffer; * v1.0 2022-07-15 16:16:52 */ public class RepeatRequestInterceptor implements Interceptor { - private static final String TAG = RepeatRequestInterceptor.class.getSimpleName(); + private static final String TAG = "RepeatRequestInterceptor"; private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); public static final String REPEAT_REQUEST_PROTOCOL = "OKHTTP_REPEAT_REQUEST_PROTOCOL"; @@ -39,7 +39,7 @@ public class RepeatRequestInterceptor implements Interceptor { // Response copy = response.newBuilder().body(responseBody).build(); ResponseBody copy = ResponseBody.create(responseBody.contentType(), content); if (BuildConfig.DEBUG) { -// Log.e(TAG, "请求体返回:| Response: " + request.url().encodedPath() + "\t body: " + content); + Log.e(TAG, "请求体返回:| Response: " + request.url() + "\t body: " + content); } //相同的请求 String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + requestBodyToString(request.body())); diff --git a/app/src/main/java/com/uiui/zyos/push/PushManager.java b/app/src/main/java/com/uiui/zyos/push/PushManager.java index 4ce1821..0845048 100644 --- a/app/src/main/java/com/uiui/zyos/push/PushManager.java +++ b/app/src/main/java/com/uiui/zyos/push/PushManager.java @@ -10,7 +10,7 @@ import com.uiui.zyos.network.NetInterfaceManager; import com.hjq.toast.Toaster; public class PushManager { - private static final String TAG = PushManager.class.getSimpleName(); + private static final String TAG = "PushManager"; public static final String SET_ALARMCLOCK = "zuoyeos.action.change.alarmclaock"; diff --git a/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java b/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java index 892f198..58efb67 100644 --- a/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java +++ b/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java @@ -18,7 +18,7 @@ import java.util.Map; */ public class AliMessageIntentService extends AliyunMessageIntentService { - private static final String TAG = AliyunMessageIntentService.class.getSimpleName(); + private static final String TAG = "AliyunMessageIntentService"; /** * 推送通知的回调方法 diff --git a/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java b/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java index 9278c24..3375092 100644 --- a/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java +++ b/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java @@ -19,7 +19,7 @@ import java.util.Map; */ public class AliyunMessageReceiver extends MessageReceiver { // 消息接收部分的LOG_TAG - public static final String TAG = AliyunMessageReceiver.class.getSimpleName(); + public static final String TAG = "AliyunMessageReceiver"; /** * 推送通知的回调方法 diff --git a/app/src/main/java/com/uiui/zyos/receiver/APKinstallReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/APKinstallReceiver.java index 8be6ee1..0703c4c 100644 --- a/app/src/main/java/com/uiui/zyos/receiver/APKinstallReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/APKinstallReceiver.java @@ -9,7 +9,7 @@ import com.uiui.zyos.fragment.user.UserFragment; public class APKinstallReceiver extends BroadcastReceiver { - private static final String TAG = APKinstallReceiver.class.getSimpleName(); + private static final String TAG = "APKinstallReceiver"; @Override public void onReceive(final Context context, Intent intent) { diff --git a/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java index a20534b..a43c30e 100644 --- a/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java @@ -15,7 +15,7 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class BootReceiver extends BroadcastReceiver { - private static final String TAG = BootReceiver.class.getSimpleName(); + private static final String TAG = "BootReceiver"; public static final String BOOT_COMPLETED = "zuoyeos.action.BOOT_COMPLETED"; public static final String SOS = "zyos.action.SOS"; diff --git a/app/src/main/java/com/uiui/zyos/service/DownloadService.java b/app/src/main/java/com/uiui/zyos/service/DownloadService.java index 9b001f0..cc70e8e 100644 --- a/app/src/main/java/com/uiui/zyos/service/DownloadService.java +++ b/app/src/main/java/com/uiui/zyos/service/DownloadService.java @@ -10,7 +10,7 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; public class DownloadService extends Service { - private static final String TAG = DownloadService.class.getSimpleName(); + private static final String TAG = "DownloadService"; public DownloadService() { } diff --git a/app/src/main/java/com/uiui/zyos/service/NotificationService.java b/app/src/main/java/com/uiui/zyos/service/NotificationService.java index cd90e17..b6c6204 100644 --- a/app/src/main/java/com/uiui/zyos/service/NotificationService.java +++ b/app/src/main/java/com/uiui/zyos/service/NotificationService.java @@ -14,7 +14,7 @@ import java.util.Set; * @author TT */ public class NotificationService extends NotificationListenerService { - private static final String TAG = NotificationService.class.getSimpleName(); + private static final String TAG = "NotificationService"; private static HashMap> notificationMap = new HashMap>(); private static Set mListener = new HashSet(); diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java index b748941..f6d99c3 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java @@ -10,12 +10,9 @@ public class MainSContact { public interface Presenter extends BasePresenter { /*获取网课模式*/ void getCloudLessonSettings(); - /*获取闹钟*/ - void getAlarmClock(); } public interface MainSView extends BaseView { void setCloudLessonSettings(); - void setAlarmClock(List dataList); } } diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java b/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java index a419579..56bf0a1 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java @@ -20,7 +20,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; * @author jgy02 */ public class MainSPresenter implements MainSContact.Presenter { - private static final String TAG = MainSPresenter.class.getSimpleName(); + private static final String TAG = "MainSPresenter"; private static final int OK = 200; private MainSContact.MainSView mView; private Context mContext; @@ -61,7 +61,6 @@ public class MainSPresenter implements MainSContact.Presenter { }); } - @Override public void getAlarmClock() { NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { @Override diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainService.java b/app/src/main/java/com/uiui/zyos/service/main/MainService.java index ea63180..10a75aa 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainService.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainService.java @@ -20,7 +20,7 @@ import java.util.HashMap; import java.util.List; public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { - private static final String TAG = MainService.class.getSimpleName(); + private static final String TAG = "MainService"; public MainSPresenter mPresenter; @@ -154,11 +154,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView @Override public void setCloudLessonSettings() { -// mPresenter.getAlarmClock(); - } - - @Override - public void setAlarmClock(List dataList) { } + } diff --git a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java index 48975f1..39a9ebe 100644 --- a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java @@ -100,7 +100,7 @@ public class ApkUtils { // this.add("com.android.settings"); this.add("com.android.messaging"); this.add("com.android.camera2"); - this.add("com.android.mms"); +// this.add("com.android.mms"); // this.add("com.uiui.city"); // this.add("com.android.fmradio"); // this.add("com.android.documentsui"); @@ -126,7 +126,7 @@ public class ApkUtils { public static final String ANDROID_LAUNCHER3_CLASS_NAME = "com.android.launcher3.Launcher"; public static final String ANDROID_LAUNCHER3_Quickstep_CLASS_NAME = "com.android.launcher3.uioverrides.QuickstepLauncher"; - private static String TAG = ApkUtils.class.getSimpleName(); + private static final String TAG = "ApkUtils"; public static ArrayList getSystemApp(Context context) { PackageManager pm = context.getPackageManager(); diff --git a/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java b/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java index 7047ce0..03e108c 100644 --- a/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java @@ -27,7 +27,7 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class AppUsedTimeUtils { - private static final String TAG = AppUsedTimeUtils.class.getSimpleName(); + private static final String TAG = "AppUsedTimeUtils"; @SuppressLint("StaticFieldLeak") private static AppUsedTimeUtils sInstance; diff --git a/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java b/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java index 133533d..6f22f30 100644 --- a/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java @@ -18,7 +18,7 @@ public class ForegroundAppUtil { private static final long START_TIME = END_TIME - TIME_INTERVAL; public static final String TOPAPP_KEY = "TOP_ALWAYS_SHOW_APP_NAME"; - private static String TAG = ForegroundAppUtil.class.getSimpleName(); + private static final String TAG = "ForegroundAppUtil"; public static String getForegroundPackageName(Context context) { //系统应用可以直接获取 diff --git a/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java b/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java index e504544..cb2c64f 100644 --- a/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java @@ -16,7 +16,7 @@ import com.bumptech.glide.Glide; * Created by Li_Xavier on 2017/6/20 0020. */ public class GlideLoadUtils { - private String TAG = "ImageLoader"; + private static final String TAG = "ImageLoader"; /** * 借助内部类 实现线程安全的单例模式 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 58d99b5..bb7e54b 100644 --- a/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java @@ -27,7 +27,7 @@ import java.util.Set; import java.util.function.BiConsumer; public class OpenApkUtils { - private static final String TAG = OpenApkUtils.class.getSimpleName(); + private static final String TAG = "OpenApkUtils"; @SuppressLint("StaticFieldLeak") private static OpenApkUtils sInstance; diff --git a/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java index d6f43be..ea39365 100644 --- a/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java @@ -19,7 +19,7 @@ import java.util.Date; import java.util.Locale; public class TimeUtils { - private static final String TAG = TimeUtils.class.getSimpleName(); + private static final String TAG = "TimeUtils"; private static DateFormat df = new SimpleDateFormat("HH:mm", Locale.getDefault()); diff --git a/app/src/main/java/com/uiui/zyos/utils/Utils.java b/app/src/main/java/com/uiui/zyos/utils/Utils.java index 2a44c4a..b7ad482 100644 --- a/app/src/main/java/com/uiui/zyos/utils/Utils.java +++ b/app/src/main/java/com/uiui/zyos/utils/Utils.java @@ -37,7 +37,7 @@ import java.util.HashMap; import java.util.Map; public class Utils { - private static final String TAG = Utils.class.getSimpleName(); + private static final String TAG = "Utils"; /** * 获取设备序列号 diff --git a/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java b/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java index 9b2fdc4..b8c22b9 100644 --- a/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java +++ b/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java @@ -21,8 +21,7 @@ import androidx.recyclerview.widget.RecyclerView; * 创建时间 : 2020/3/19 4:54 PM */ public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration { - - private final String TAG = "GridSpaceItemDecoration"; + private static final String TAG = "GridSpaceItemDecoration"; private int mSpanCount;//横条目数量 private int mRowSpacing;//行间距 diff --git a/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java b/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java index 3589b38..163f9f0 100644 --- a/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java +++ b/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java @@ -27,7 +27,7 @@ public class MyGridLayout extends ViewGroup { int count = 0; private GridAdatper adapter; - private String TAG = MyGridLayout.class.getSimpleName(); + private static final String TAG = "MyGridLayout"; @SuppressLint("Recycle") public MyGridLayout(Context context, AttributeSet attrs, int defStyle) { diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png index 681459c633382f8e549bde0956b8e9f937a069f7..37ccb6f7f5919d5097819b2571049050b157d4b6 100644 GIT binary patch delta 7188 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 TiAMh``cTxAwUwF`Y@+`U$D*JH delta 6946 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 bpcjWKS1yKz)J^-}+6zZZO;5E(*#`N4no|1U diff --git a/app/src/main/res/drawable-hdpi/icon_activition_bind.png b/app/src/main/res/drawable-hdpi/icon_activition_bind.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ccd7dbdc6687b50b70c633a5f2973eebce5742 GIT binary patch literal 7715 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 J4fJW`{{gU6GLHZN literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/user_app_box.png b/app/src/main/res/drawable-xhdpi/user_app_box.png index 996da07dc3c8d60a3f9b5c1b14a03d789738353f..ca69e2e4e57dc5de7f9c3ea3a9194029f3761cab 100644 GIT binary patch literal 6809 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 literal 6902 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 X+|nn^{~4-X0kAgTZkA`d|L8vfHWW0S diff --git a/app/src/main/res/drawable-xhdpi/user_more.png b/app/src/main/res/drawable-xhdpi/user_more.png index 5c9d654e0ef223a4a88fb34603610c88f6b3aaf0..9afa7665d5be978811029e9dff9db11e3c0d4c99 100644 GIT binary patch delta 1085 zcmeC+-Nmce8Q|y6%O%Cdz`(%k>ERLtq>VwCgAGVpEi};DsHn;mW8q|EU~FV;Vd83H zU})&-W?^Y=>0)f?YH4Whb1nB zck&`81DFM7xD+WV6qf|0rdg%nw!j>h-pP8*PW3iBqhc8tnDsne978H@-I;YhTi8+L zxO%RyO$PTe%?weWz1yO?<4jgqM(A_|`F~xIesI70hc)cBFE=*IRBhCXFbP_}?NnIH zHLhiHJ@!)j*YD%KTxxD_^*PPF@`LII9qad#e|~+o*YoP@Qq>g63;{3a-wWk0_^;r) zsv;$`;mh25krE!M=1&(mnq4Fr*E+Ah!1cuO*#E3k8`Ak4(-)o;JGb4aX|==p1?$%( z76k~-YWStoHzhYiGOEFBNn*yI_$ID^{gaHFsyL@s&WmifD1g@r~U=!%@UU_ zcr7O0O+rsP% zo{0;XeoJ!(Z`rWTftt{wMb6@P&g}Cz6=66&-?{^CtYwKhVQz;^e?D%Q*K! z;wLBP1KkXpY}-Fso#}Yc_1JQTv!%RRaz&m0p$W?WjaiBh1ads$WS0F>?e>-7g5UWa zeSLo|w}>)GnfET^d=}0VsDF0h^Tzb&zQwF8!QG6{G)nY7d`l z#l4sG&$#EpyY{-+?G>B;^GbNthwaMA_!*Y?zg%|m^eg*=nsg`J=5yF~^ZoxKh7h}m zZ5Iw?aCmq!xO}{~MUu_gO?0(=8}Av;^Ywyz!^N6z_CBcEo3Zg=)ek9Yi3KzI)4xK$TZM;>8@`VD3+3Rj6|2xbVroUC1 ze|`6_fVQ?g+ro0SjL3Tmxp%XoE+y+;H~1ywKhY@lasTRX?`PLOXudkDx5HMoM!2A( o{<6(C&B{-{oJ+U=<1%1q^1ox0`tIBsV2Qxs>FVdQ&MBb@02$@YfdBvi delta 1035 zcmdnR+rg{Y8Q|y6%O%Cdz`(%k>ERLtq!mG!gAGWAKRJ}YQBjpC#=z0d(#6o!+0o3! z%+S!)#lqFp&C%K1%+Som!qME-MM)F#Yj#aSW-rwPi-U$K^ng zm+^6l43D5u8^vN66*T1W?{_ymB^$pACo2%dN{66pgs%M|S zJ2by_F}<|8UMRF{)1tIM;}!fXuCGw6TD6Hubid)^sDQdF+eGVl!(VQhLtd86f9Dx1=ZMs=UARr?ob0`|>>lDz z&pK>bv9>AgJKu_xdd+_Mwl4xqk1r9Z+d8lI;ffz?Zauof{N#&~OYgMa43lrHdTh#) z6JD!J7dIwUW=pg@+i(2uC3_54Z^wI4>9+-krwe=7Hm`X4vBv(ZtQGsbj`vTc-xR!c zVb(vQ#};_>wXNAl-gRH>uEf6S%Axob>mt@)-P_`*^7TfgoxgfQVd2E%rRN;X7tP6u?Ua01Cc{)5 zsCeegx$M$@Jj13aa6-T)rY!E%HTQ7X0Kqalde(8e0 z=L~9kv*+EN&ZBgQIbr(@#Ri6>YRVih?F+=j(~|riaEc}hyfOH(;^^t1oF<3cc7?nf zx<0VWIWf669geuS!m()0s!hIr+IRAzr5c~S7x|HAcVMf+hjSU*zlg{tgf2U_`f*3J z3@6)#d)7y+Ssi}9hEE?n}<{@4nX_u(oL4 zclTpoZrpa7qW{|UdVAHp=f9tFU(wuo`y10L&aWo^3_9=PLZVjw^bE3>ydtUKQ8+p4 zwu4)hOsPZeRgI8?j$PBAWp> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_exit.xml b/app/src/main/res/layout-land/activity_exit.xml index 41756d9..660539a 100644 --- a/app/src/main/res/layout-land/activity_exit.xml +++ b/app/src/main/res/layout-land/activity_exit.xml @@ -1,236 +1,243 @@ - - + + + + android:layout_height="match_parent" + android:background="@drawable/control_background"> - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.03" /> - - - + + + + + + + + + + app:layout_constraintStart_toStartOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout-land/fragment_app.xml b/app/src/main/res/layout-land/fragment_app.xml index e5486c8..1d422b2 100644 --- a/app/src/main/res/layout-land/fragment_app.xml +++ b/app/src/main/res/layout-land/fragment_app.xml @@ -1,45 +1,52 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> - - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_ar_study.xml b/app/src/main/res/layout-land/fragment_ar_study.xml index a62d91a..2360286 100644 --- a/app/src/main/res/layout-land/fragment_ar_study.xml +++ b/app/src/main/res/layout-land/fragment_ar_study.xml @@ -1,86 +1,93 @@ - - + + + + - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> + android:id="@+id/constraintLayout3" + android:layout_width="@dimen/dp_359" + android:layout_height="@dimen/dp_210" + android:background="@drawable/ar_box" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_biology.xml b/app/src/main/res/layout-land/fragment_biology.xml index b13d959..7935c7a 100644 --- a/app/src/main/res/layout-land/fragment_biology.xml +++ b/app/src/main/res/layout-land/fragment_biology.xml @@ -1,137 +1,144 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_chemical.xml b/app/src/main/res/layout-land/fragment_chemical.xml index d361a3d..5108986 100644 --- a/app/src/main/res/layout-land/fragment_chemical.xml +++ b/app/src/main/res/layout-land/fragment_chemical.xml @@ -1,137 +1,144 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_chinese.xml b/app/src/main/res/layout-land/fragment_chinese.xml index 99b5e94..efcf6e3 100644 --- a/app/src/main/res/layout-land/fragment_chinese.xml +++ b/app/src/main/res/layout-land/fragment_chinese.xml @@ -1,465 +1,472 @@ - - + + + + + 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"> + android:id="@+id/constraintLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent"> - + + - + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - - - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_complex.xml b/app/src/main/res/layout-land/fragment_complex.xml index 71a0340..ab157b3 100644 --- a/app/src/main/res/layout-land/fragment_complex.xml +++ b/app/src/main/res/layout-land/fragment_complex.xml @@ -1,442 +1,449 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_english.xml b/app/src/main/res/layout-land/fragment_english.xml index 3efc02a..186403a 100644 --- a/app/src/main/res/layout-land/fragment_english.xml +++ b/app/src/main/res/layout-land/fragment_english.xml @@ -1,159 +1,166 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + - + + + + + + + + - - - + android:layout_width="wrap_content" + android:layout_height="0dp" + android:layout_marginStart="@dimen/dp_9" + app:layout_constraintBottom_toBottomOf="@+id/constraintLayout3" + app:layout_constraintStart_toEndOf="@+id/constraintLayout3" + app:layout_constraintTop_toTopOf="@+id/constraintLayout3"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_main.xml b/app/src/main/res/layout-land/fragment_main.xml index 337781a..eb71b5e 100644 --- a/app/src/main/res/layout-land/fragment_main.xml +++ b/app/src/main/res/layout-land/fragment_main.xml @@ -1,297 +1,304 @@ - - + + + + - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent" /> - + - + - + + - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - + android:layout_height="match_parent"> - + - + + - - - + android:layout_height="match_parent"> + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_math.xml b/app/src/main/res/layout-land/fragment_math.xml index b1706b8..8e0d595 100644 --- a/app/src/main/res/layout-land/fragment_math.xml +++ b/app/src/main/res/layout-land/fragment_math.xml @@ -1,418 +1,425 @@ - - + + + + + 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"> + android:id="@+id/constraintLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent"> - - + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + + + + + - + + android:id="@+id/cl_tutoring" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + - - - + android:id="@+id/cl_near_antonyms" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + - - - + android:id="@+id/cl_composition" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - - - + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_physics.xml b/app/src/main/res/layout-land/fragment_physics.xml index 8a2b22d..007090c 100644 --- a/app/src/main/res/layout-land/fragment_physics.xml +++ b/app/src/main/res/layout-land/fragment_physics.xml @@ -1,136 +1,143 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_subject.xml b/app/src/main/res/layout-land/fragment_subject.xml index a480125..7e1cf5d 100644 --- a/app/src/main/res/layout-land/fragment_subject.xml +++ b/app/src/main/res/layout-land/fragment_subject.xml @@ -1,38 +1,45 @@ - - + + + + - + android:layout_height="match_parent"> - - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_user.xml b/app/src/main/res/layout-land/fragment_user.xml index bedc29f..090f723 100644 --- a/app/src/main/res/layout-land/fragment_user.xml +++ b/app/src/main/res/layout-land/fragment_user.xml @@ -1,535 +1,538 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + - - - - - - - - - - - + android:textSize="@dimen/sp_10" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/constraintLayout5" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.476" /> - + android:ellipsize="marquee" + android:focusable="true" + android:focusableInTouchMode="true" + android:marqueeRepeatLimit="marquee_forever" + android:singleLine="true" + android:text="@string/tips" + android:textColor="@color/lightGray" + android:textSize="@dimen/sp_8" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_speaker" + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:id="@+id/constraintLayout" + android:layout_width="@dimen/dp_205" + android:layout_height="@dimen/dp_211" + android:background="@drawable/user_center_box" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:id="@+id/cl_nodata" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_date1" /> + + + + + + + + + + + + + - + android:layout_height="match_parent" + android:visibility="gone"> - + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/activity_exit.xml b/app/src/main/res/layout-sw800dp/activity_exit.xml index 41756d9..660539a 100644 --- a/app/src/main/res/layout-sw800dp/activity_exit.xml +++ b/app/src/main/res/layout-sw800dp/activity_exit.xml @@ -1,236 +1,243 @@ - - + + + + android:layout_height="match_parent" + android:background="@drawable/control_background"> - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.03" /> - - - + + + + + + + + + + app:layout_constraintStart_toStartOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout-sw800dp/activity_main.xml b/app/src/main/res/layout-sw800dp/activity_main.xml index 0256130..b67d172 100644 --- a/app/src/main/res/layout-sw800dp/activity_main.xml +++ b/app/src/main/res/layout-sw800dp/activity_main.xml @@ -1,356 +1,372 @@ - - + + + + + - - - - - - + android:layout_height="match_parent" + android:background="@drawable/main_background"> + android:layout_width="match_parent" + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + android:layout_marginBottom="@dimen/dp_2" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + android:onClick="@{click::openAppStore}"> - + + + + + - + android:layout_height="match_parent" + android:visibility="gone"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_biology.xml b/app/src/main/res/layout-sw800dp/fragment_biology.xml index 61ed1d8..0c62ada 100644 --- a/app/src/main/res/layout-sw800dp/fragment_biology.xml +++ b/app/src/main/res/layout-sw800dp/fragment_biology.xml @@ -1,137 +1,144 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_chemical.xml b/app/src/main/res/layout-sw800dp/fragment_chemical.xml index de08a92..ac7246f 100644 --- a/app/src/main/res/layout-sw800dp/fragment_chemical.xml +++ b/app/src/main/res/layout-sw800dp/fragment_chemical.xml @@ -1,137 +1,144 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_chinese.xml b/app/src/main/res/layout-sw800dp/fragment_chinese.xml index be2d9ef..cb40018 100644 --- a/app/src/main/res/layout-sw800dp/fragment_chinese.xml +++ b/app/src/main/res/layout-sw800dp/fragment_chinese.xml @@ -1,465 +1,472 @@ - - + + + + + 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"> + android:id="@+id/constraintLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent"> - + + - + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - - - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_complex.xml b/app/src/main/res/layout-sw800dp/fragment_complex.xml index e6bf6a5..3dac0e3 100644 --- a/app/src/main/res/layout-sw800dp/fragment_complex.xml +++ b/app/src/main/res/layout-sw800dp/fragment_complex.xml @@ -1,442 +1,449 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_english.xml b/app/src/main/res/layout-sw800dp/fragment_english.xml index 8190bc9..8db11dc 100644 --- a/app/src/main/res/layout-sw800dp/fragment_english.xml +++ b/app/src/main/res/layout-sw800dp/fragment_english.xml @@ -1,159 +1,166 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + - + + + + + + + + - - - + android:layout_width="wrap_content" + android:layout_height="0dp" + android:layout_marginStart="@dimen/dp_8" + app:layout_constraintBottom_toBottomOf="@+id/constraintLayout3" + app:layout_constraintStart_toEndOf="@+id/constraintLayout3" + app:layout_constraintTop_toTopOf="@+id/constraintLayout3"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_math.xml b/app/src/main/res/layout-sw800dp/fragment_math.xml index f6b3f2c..bff6825 100644 --- a/app/src/main/res/layout-sw800dp/fragment_math.xml +++ b/app/src/main/res/layout-sw800dp/fragment_math.xml @@ -1,417 +1,424 @@ - - + + + + + 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"> + android:id="@+id/constraintLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent"> - - + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + + + + + - + + android:id="@+id/cl_tutoring" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + - - - + android:id="@+id/cl_near_antonyms" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + - - - + android:id="@+id/cl_composition" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - - - + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_physics.xml b/app/src/main/res/layout-sw800dp/fragment_physics.xml index d575c96..ea9de86 100644 --- a/app/src/main/res/layout-sw800dp/fragment_physics.xml +++ b/app/src/main/res/layout-sw800dp/fragment_physics.xml @@ -1,136 +1,143 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.35"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_subject.xml b/app/src/main/res/layout-sw800dp/fragment_subject.xml index d922469..dfc1b27 100644 --- a/app/src/main/res/layout-sw800dp/fragment_subject.xml +++ b/app/src/main/res/layout-sw800dp/fragment_subject.xml @@ -1,38 +1,45 @@ - - + + + + - + android:layout_height="match_parent"> - - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_user.xml b/app/src/main/res/layout-sw800dp/fragment_user.xml index 30aed0f..45f6f89 100644 --- a/app/src/main/res/layout-sw800dp/fragment_user.xml +++ b/app/src/main/res/layout-sw800dp/fragment_user.xml @@ -1,536 +1,540 @@ - - + + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + - - - - - - - - - - - + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/constraintLayout5" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.476" /> - + android:ellipsize="marquee" + android:focusable="true" + android:focusableInTouchMode="true" + android:marqueeRepeatLimit="marquee_forever" + android:singleLine="true" + android:text="@string/tips" + android:textColor="@color/lightGray" + android:textSize="@dimen/sp_8" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_speaker" + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:id="@+id/constraintLayout" + android:layout_width="@dimen/dp_164" + android:layout_height="@dimen/dp_168" + android:background="@drawable/user_center_box" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:id="@+id/cl_nodata" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="visible"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + android:textSize="@dimen/sp_7" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_date1" /> + + + + + + + + + + + + + - + android:layout_height="match_parent" + android:visibility="visible"> - + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_icon.xml b/app/src/main/res/layout/activity_add_icon.xml index bca8947..ee1bb21 100644 --- a/app/src/main/res/layout/activity_add_icon.xml +++ b/app/src/main/res/layout/activity_add_icon.xml @@ -1,66 +1,73 @@ - + + + + + android:layout_height="match_parent"> - + + + + + + + + + - - - - + app:layout_constraintStart_toStartOf="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/activity_exit.xml b/app/src/main/res/layout/activity_exit.xml index 284396d..c939614 100644 --- a/app/src/main/res/layout/activity_exit.xml +++ b/app/src/main/res/layout/activity_exit.xml @@ -1,239 +1,246 @@ - - + + + + android:layout_height="match_parent" + android:background="@drawable/control_background"> - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.11" /> - - - + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/imageView5" + app:layout_constraintVertical_bias="0.796"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7c51c96..085c222 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,422 +1,443 @@ - - + + + + + - - - - - - + android:layout_height="match_parent" + android:background="@drawable/main_background"> + android:layout_width="match_parent" + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent" /> - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginBottom="@dimen/dp_2" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:onClick="@{click::open2}"> - + + + + + - + android:layout_height="match_parent" + android:onClick="@{click::open3}" + android:visibility="gone"> - + - + + + + android:onClick="@{click::open4}" + android:visibility="visible"> - + + + + + - - - - - + android:onClick="@{click::open6}"> - + + + + + - - - - - + android:onClick="@{click::open7}"> - + + + + + - - - - - + android:onClick="@{click::open8}"> - + + + + + - - - - - + android:onClick="@{click::open5}" + android:visibility="visible"> - + + + + + - + android:layout_height="match_parent" + android:layout_marginStart="@dimen/dp_4" + android:layout_marginEnd="@dimen/dp_4" + android:onClick="@{click::open9}" + android:visibility="visible"> - + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_moreapp.xml b/app/src/main/res/layout/activity_moreapp.xml index 3b4ff7c..0756f2f 100644 --- a/app/src/main/res/layout/activity_moreapp.xml +++ b/app/src/main/res/layout/activity_moreapp.xml @@ -1,66 +1,77 @@ - + + + + + + android:layout_height="match_parent"> - + + + + + + + + + - - - - + app:layout_constraintStart_toStartOf="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/activity_notice.xml b/app/src/main/res/layout/activity_notice.xml index cdb7d11..ef3b12a 100644 --- a/app/src/main/res/layout/activity_notice.xml +++ b/app/src/main/res/layout/activity_notice.xml @@ -1,84 +1,91 @@ - - + + + + android:layout_width="match_parent" + android:layout_height="match_parent"> - + + + + + + + + + + + + + +