From 58c36173fd443531bd118b4ef6faa5400683adb0 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Fri, 10 May 2024 09:21:20 +0800 Subject: [PATCH] =?UTF-8?q?1.4.0509=20=E5=A2=9E=E5=8A=A0mvvm=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 8 +- .../aoleyun/sn/activity/CleanupActivity.java | 14 +- .../sn/activity/EyeProtectionActivity.java | 13 +- .../activity/checknet/CheckNetActivity.java | 16 +- .../sn/activity/checknet/CheckNetContact.java | 4 +- .../sn/activity/main/MainAContact.java | 8 +- .../sn/activity/main/MainAPresenter.java | 10 - .../sn/activity/main/MainActivity.java | 185 ++- .../sn/activity/main/MainViewModel.java | 38 + .../requestlog/RequestLogActivity.java | 16 +- .../requestlog/RequestLogContact.java | 4 +- .../sn/activity/update/UpdateActivity.java | 16 +- .../sn/activity/update/UpdateContact.java | 4 +- .../com/aoleyun/sn/base/BaseActivity.java | 114 +- .../aoleyun/sn/base/BaseActivityLight.java | 38 + .../sn/base/BaseDataBindingActivity.java | 45 + .../com/aoleyun/sn/base/BaseRxActivity.java | 94 ++ .../sn/base/BaseTransparentActivity.java | 50 + .../java/com/aoleyun/sn/base/BaseView.java | 4 - .../aoleyun/sn/base/mvp/BaseMvpActivity.java | 34 + .../sn/base/{ => mvp}/BasePresenter.java | 4 +- .../com/aoleyun/sn/base/mvp/BaseView.java | 4 + .../sn/base/mvvm/BaseMvvmActivity.java | 54 + .../aoleyun/sn/base/mvvm/BaseViewModel.java | 71 + .../sn/base/mvvm/ViewDataBindingCallback.java | 22 + .../com/aoleyun/sn/comm/PackageNames.java | 3 + .../sn/network/NetInterfaceManager.java | 29 +- .../aoleyun/sn/service/main/MainSContact.java | 4 +- .../java/com/aoleyun/sn/utils/JGYUtils.java | 31 +- .../main/res/drawable-hdpi/default_avatar.png | Bin 37914 -> 7979 bytes .../main/res/drawable-hdpi/icon_nodata.png | Bin 8579 -> 17681 bytes app/src/main/res/drawable/bg_log.xml | 18 + .../main/res/layout-land/activity_main.xml | 1255 ++++++++--------- .../main/res/layout-port/activity_main.xml | 1255 ++++++++--------- app/src/main/res/layout/activity_update.xml | 36 +- 35 files changed, 1947 insertions(+), 1554 deletions(-) create mode 100644 app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/BaseActivityLight.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/BaseDataBindingActivity.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/BaseRxActivity.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/BaseTransparentActivity.java delete mode 100644 app/src/main/java/com/aoleyun/sn/base/BaseView.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/mvp/BaseMvpActivity.java rename app/src/main/java/com/aoleyun/sn/base/{ => mvp}/BasePresenter.java (81%) create mode 100644 app/src/main/java/com/aoleyun/sn/base/mvp/BaseView.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/mvvm/BaseMvvmActivity.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/mvvm/BaseViewModel.java create mode 100644 app/src/main/java/com/aoleyun/sn/base/mvvm/ViewDataBindingCallback.java create mode 100644 app/src/main/res/drawable/bg_log.xml diff --git a/app/build.gradle b/app/build.gradle index 30cd6f8..86654a2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 128 - versionName "1.4.0429" + versionCode 129 + versionName "1.4.0509" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 24 @@ -58,6 +58,10 @@ android { abortOnError false } + dataBinding { + enabled true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 diff --git a/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java b/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java index df8d076..254d6e3 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvp.BaseMvpActivity; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.AppUtil; import com.hjq.toast.Toaster; @@ -21,7 +21,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class CleanupActivity extends BaseActivity { +public class CleanupActivity extends BaseMvpActivity { private static final String TAG = CleanupActivity.class.getSimpleName(); @BindView(R.id.tv_clean) @@ -38,6 +38,16 @@ public class CleanupActivity extends BaseActivity { return R.layout.activity_cleanup; } + @Override + protected boolean setNightMode() { + return true; + } + + @Override + protected boolean setfitWindow() { + return false; + } + /** * 初始化视图 */ diff --git a/app/src/main/java/com/aoleyun/sn/activity/EyeProtectionActivity.java b/app/src/main/java/com/aoleyun/sn/activity/EyeProtectionActivity.java index 91cbf7f..d1ca569 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/EyeProtectionActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/EyeProtectionActivity.java @@ -6,14 +6,14 @@ import android.view.View; import androidx.constraintlayout.widget.ConstraintLayout; import com.aoleyun.sn.R; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvp.BaseMvpActivity; import com.aoleyun.sn.view.ToggleButton; import com.hjq.toast.Toaster; import butterknife.BindView; import butterknife.ButterKnife; -public class EyeProtectionActivity extends BaseActivity { +public class EyeProtectionActivity extends BaseMvpActivity { @BindView(R.id.cl_exit) ConstraintLayout cl_exit; @@ -33,6 +33,15 @@ public class EyeProtectionActivity extends BaseActivity { return R.layout.activity_eye_protection; } + @Override + protected boolean setNightMode() { + return true; + } + + @Override + protected boolean setfitWindow() { + return false; + } @Override public void initView() { diff --git a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java index 8a80138..1269b5e 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java @@ -6,7 +6,7 @@ import android.widget.Button; import android.widget.TextView; import com.aoleyun.sn.R; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvp.BaseMvpActivity; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SysSettingUtils; @@ -26,7 +26,7 @@ import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; import pl.droidsonroids.gif.GifImageView; -public class CheckNetActivity extends BaseActivity implements CheckNetContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { +public class CheckNetActivity extends BaseMvpActivity implements CheckNetContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = CheckNetActivity.class.getSimpleName(); @BindView(R.id.giv_1) @@ -65,13 +65,23 @@ public class CheckNetActivity extends BaseActivity implements CheckNetContact.Ma return R.layout.activity_checknet; } + @Override + protected boolean setNightMode() { + return true; + } + + @Override + protected boolean setfitWindow() { + return false; + } + @Override public void initView() { ButterKnife.bind(this); mCheckNetPresenter = new CheckNetPresenter(this); mCheckNetPresenter.attachView(this); mCheckNetPresenter.setProvider(this); - mCheckNetPresenter.setLifecycle(lifecycleSubject); + mCheckNetPresenter.setLifecycle(getLifecycleSubject()); JGYUtils.startServices(CheckNetActivity.this); Log.e(TAG, "initView: " + "start request"); NetworkUtils.registerNetworkStatusChangedListener(this); diff --git a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java index 27a4d5d..f5e3ea9 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java @@ -1,7 +1,7 @@ package com.aoleyun.sn.activity.checknet; -import com.aoleyun.sn.base.BasePresenter; -import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.base.mvp.BasePresenter; +import com.aoleyun.sn.base.mvp.BaseView; public class CheckNetContact { public interface Presenter extends BasePresenter { diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java index 45d616a..29e1026 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java @@ -3,8 +3,8 @@ package com.aoleyun.sn.activity.main; import android.graphics.Bitmap; import android.view.View; -import com.aoleyun.sn.base.BasePresenter; -import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.base.mvp.BasePresenter; +import com.aoleyun.sn.base.mvp.BaseView; import com.aoleyun.sn.bean.StudentsInfo; import com.google.gson.JsonObject; @@ -12,8 +12,6 @@ public class MainAContact { public interface Presenter extends BasePresenter { /*获取设备锁定状态*/ void getLockedState(); - /*获取设备二维码*/ - void getQrCode(boolean loocked); /*获取学生信息*/ void getStudesInfo(); /*获取电子书包激活码*/ @@ -37,8 +35,6 @@ public class MainAContact { public interface MainView extends BaseView { /*获取设备锁定状态*/ void setLockedState(boolean loocked); - /*获取设备二维码*/ - void setQrCode(Bitmap qrcode); /*获取学生信息*/ void setStudesInfo(StudentsInfo studesInfo); /*获取电子书包激活码*/ diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java index c6d0554..d30f353 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java @@ -86,14 +86,6 @@ public class MainAPresenter implements MainAContact.Presenter { }); } - @Override - public void getQrCode(boolean loocked) { - String encryptString = CXAESUtil.encrypt(CommonConfig.AES_KEY, Utils.getSerial(mContext)); - Log.e("getQRCode", "setImageAndText: " + encryptString); - Bitmap bitmap = Utils.createQRImage(encryptString, 400, 400); - mView.setQrCode(bitmap); - } - /** * 通过sn获取用户信息 */ @@ -122,7 +114,6 @@ public class MainAPresenter implements MainAContact.Presenter { }); } - @Override public void getExclusiveAdminApp() { NetInterfaceManager.getInstance().getExclusiveAdminAppObservable() @@ -163,7 +154,6 @@ public class MainAPresenter implements MainAContact.Presenter { NetInterfaceManager.getInstance().getPublicIp(lifecycle, ip -> mView.setPublicIp(ip)); } - @Override public void buttonCheckUpdate(View view) { checkUpdateInfo(); diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java index 3165f65..c5ffdc3 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java @@ -23,21 +23,20 @@ import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; import com.aoleyun.sn.activity.requestlog.RequestLogActivity; import com.aoleyun.sn.activity.update.UpdateActivity; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvvm.BaseMvvmActivity; import com.aoleyun.sn.bean.StudentsInfo; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; +import com.aoleyun.sn.comm.PackageNames; +import com.aoleyun.sn.databinding.ActivityMainBinding; import com.aoleyun.sn.dialog.UpdateDialog; import com.aoleyun.sn.service.main.MainService; +import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.SysSettingUtils; @@ -51,8 +50,6 @@ import com.tencent.mmkv.MMKV; import java.util.concurrent.TimeUnit; -import butterknife.BindView; -import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.annotations.NonNull; @@ -65,7 +62,7 @@ import io.reactivex.rxjava3.disposables.Disposable; import static android.os.BatteryManager.EXTRA_LEVEL; import static android.os.BatteryManager.EXTRA_VOLTAGE; -public class MainActivity extends BaseActivity implements MainAContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { +public class MainActivity extends BaseMvvmActivity implements MainAContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainActivity.class.getSimpleName(); private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -73,67 +70,31 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, public static final String UPDATE_LOCKED_STATUS = "UPDATE_LOCKED_STATUS"; public static final String REFRESHACTION = BuildConfig.APPLICATION_ID + ".REFRESH"; + public class BtnClick { + public void exit(View view) { + lazyExit(); + } - @BindView(R.id.iv_back) - ImageView back; - @BindView(R.id.tv_version) - TextView tv_version; - @BindView(R.id.tv_activation_time) - TextView tv_activation_time; - @BindView(R.id.iv_update) - ImageView iv_update; - @BindView(R.id.iv_active_state) - ImageView iv_active_state; - @BindView(R.id.iv_head) - ImageView iv_head; - @BindView(R.id.tv_name) - TextView tv_name; - @BindView(R.id.tv_batch) - TextView tv_batch; - @BindView(R.id.tv_number) - TextView tv_number; - @BindView(R.id.tv_class) - TextView tv_class; - @BindView(R.id.tv_model) - TextView tv_model; - @BindView(R.id.cl_ota) - ConstraintLayout cl_ota; - @BindView(R.id.tv_system_version) - TextView tv_system_version; + public void log(View view) { + continuousClick(COUNTS, DURATION); + } - @BindView(R.id.tv_serial) - TextView tv_serial; - @BindView(R.id.tv_imei) - TextView tv_imei; - @BindView(R.id.tv_mac) - TextView tv_mac; + public void logcat(View view) { + if (ApkUtils.isAvailable(MainActivity.this, PackageNames.AI_LOGGER_PACKAGE)) { + if (!ApkUtils.openPackage(MainActivity.this, PackageNames.AI_LOGGER_PACKAGE, PackageNames.AI_LOGGER_MAIN_CLASS)) { + Toaster.showShort("打开失败"); + } + } else { + Toaster.showShort("应用未安装"); + } + } - @BindView(R.id.tv_bind_statu) - TextView tv_bind_statu; - @BindView(R.id.tv_bind_status) - TextView tv_bind_status; - @BindView(R.id.cl_bind) - ConstraintLayout cl_bind; - @BindView(R.id.cl_qrcode) - ConstraintLayout cl_qrcode; - @BindView(R.id.iv_qrcode) - ImageView iv_qrcode; - @BindView(R.id.iv_qrcode2) - ImageView iv_qrcode2; - @BindView(R.id.tv_bind_time) - TextView tv_bind_time; + public void update(View view) { + startActivity(new Intent(MainActivity.this, UpdateActivity.class)); + } - @OnClick({R.id.iv_back, R.id.tv_title}) - public void onClick(View view) { - switch (view.getId()) { - case R.id.iv_back: - lazyExit(); - break; - case R.id.tv_title: - continuousClick(COUNTS, DURATION); - break; - default: - break; + public void openOta(View view) { + JGYUtils.getInstance().openRomOta(); } } @@ -172,9 +133,25 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, } @Override - public void initView() { - ButterKnife.bind(this); + protected boolean setNightMode() { + return true; + } + @Override + protected boolean setfitWindow() { + return false; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + public void initView() { String defaultDesktop = mMMKV.decodeString(CommonConfig.DEFAULT_DESKTOP_PACKAGE_NAME, ""); Log.e(TAG, "initView: defaultDesktop = " + defaultDesktop); String defaultLauncher = mMMKV.decodeString(CommonConfig.DEFAULT_LAUNCHER_PACKAGE_NAME, ""); @@ -186,14 +163,14 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, mMainAPresenter = new MainAPresenter(this); mMainAPresenter.attachView(this); - mMainAPresenter.setLifecycle(lifecycleSubject); + mMainAPresenter.setLifecycle(getLifecycleSubject()); Log.e(TAG, "initView: " + Build.MODEL); if ("YX-T01".equalsIgnoreCase(Build.MODEL)) { - cl_bind.setVisibility(View.GONE); - cl_qrcode.setVisibility(View.VISIBLE); + mViewDataBinding.clBind.setVisibility(View.GONE); + mViewDataBinding.clQrcode.setVisibility(View.VISIBLE); } else { - cl_bind.setVisibility(View.VISIBLE); - cl_qrcode.setVisibility(View.GONE); + mViewDataBinding.clBind.setVisibility(View.VISIBLE); + mViewDataBinding.clQrcode.setVisibility(View.GONE); } JGYUtils.startServices(MainActivity.this); getDevicesInfo(); @@ -209,12 +186,6 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, } else { } - iv_update.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(MainActivity.this, UpdateActivity.class)); - } - }); // setStoreUpdateListener(bt_checkupdate); registerReceiver(); @@ -274,31 +245,31 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, } private void getDevicesInfo() { - tv_model.setText(Build.MODEL); + mViewDataBinding.tvModel.setText(Build.MODEL); String sn = Utils.getSerial(this); Log.e(TAG, "getDevicesInfo: " + sn); Log.e(TAG, "getDevicesInfo: " + Utils.getMac()); if (TextUtils.isEmpty(sn)) { - tv_serial.setText(getString(R.string.no_data)); + mViewDataBinding.tvSerial.setText(getString(R.string.no_data)); } else { - tv_serial.setText(sn); + mViewDataBinding.tvSerial.setText(sn); } getIMEI(); setMac(); checkSnError(sn); - tv_version.setText(BuildConfig.VERSION_NAME); + mViewDataBinding.tvVersion.setText(BuildConfig.VERSION_NAME); //获取自定义版本号 Log.e(TAG, "getDevicesInfo: CustomVersion: " + Utils.getCustomVersion()); Log.e(TAG, "getDevicesInfo: RomVersion: " + Utils.getRomVersion()); - tv_system_version.setText(Utils.getCustomVersion()); + mViewDataBinding.tvSystemVersion.setText(Utils.getCustomVersion()); } private void getIMEI() { if (!Utils.NOSN.equalsIgnoreCase(Utils.getSerial(this))) { - tv_imei.setText(Utils.getIMEI(this, 1)); + mViewDataBinding.tvImei.setText(Utils.getIMEI(this, 1)); } else { if (!TextUtils.isEmpty(Utils.getIMEI(this, 1))) { - tv_imei.setText(Utils.getIMEI(this, 1)); + mViewDataBinding.tvImei.setText(Utils.getIMEI(this, 1)); } } } @@ -306,9 +277,9 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, private void setMac() { String macaddr = Utils.getAndroid10MAC(this); if (TextUtils.isEmpty(macaddr)) { - tv_mac.setText("获取失败"); + mViewDataBinding.tvMac.setText("获取失败"); } else { - tv_mac.setText(macaddr); + mViewDataBinding.tvMac.setText(macaddr); } } @@ -346,6 +317,14 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, bindService(intent, serviceConnect, BIND_AUTO_CREATE); startService(intent); mMainAPresenter.getLockedState(); + mViewModel.getQrCodeData().observe(this, new androidx.lifecycle.Observer() { + @Override + public void onChanged(Bitmap bitmap) { + mViewDataBinding.ivQrcode.setImageBitmap(bitmap); + mViewDataBinding.ivQrcode2.setImageBitmap(bitmap); + } + }); + mViewModel.getQrCode(); } MainService.MainBinder mMainBinder; @@ -380,24 +359,16 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, SysSettingUtils.setEnableSetting(this); } mMainAPresenter.getEBagCode(); - mMainAPresenter.getQrCode(loocked); - } - - @Override - public void setQrCode(Bitmap qrcode) { - iv_qrcode.setImageBitmap(qrcode); - iv_qrcode2.setImageBitmap(qrcode); } @Override public void setStudesInfo(StudentsInfo studesInfo) { if (studesInfo == null) { - iv_active_state.setImageDrawable(getDrawable(R.drawable.icon_inactivated)); + mViewDataBinding.tvActivationTime.setText("未激活"); return; } - iv_active_state.setImageDrawable(getDrawable(R.drawable.icon_activated)); long activation_time = studesInfo.getActivation_time(); - tv_activation_time.setText("激活时间:" + TimeUtils.getActivationTime(activation_time)); + mViewDataBinding.tvActivationTime.setText("激活时间:" + TimeUtils.getActivationTime(activation_time)); int trade_type = studesInfo.getTrade_type(); String sno = studesInfo.getSno(); String realname = studesInfo.getRealname(); @@ -407,9 +378,9 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, int bind_statu = studesInfo.getBind_status(); if (bind_statu == 1) { String phone = studesInfo.getBind_mobile(); - tv_bind_status.setText("绑定号码:" + phone); + mViewDataBinding.tvBindStatus.setText("绑定号码:" + phone); } else { - tv_bind_status.setText("未绑定"); + mViewDataBinding.tvBindStatus.setText("未绑定"); } settradeType(trade_type); @@ -473,30 +444,30 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, } public void setBatchText(String text, int visibility) { - tv_batch.setText(text); + mViewDataBinding.tvBatch.setText(text); // tv_batch.setVisibility(visibility); } public void setClassText(String text, int visibility) { - tv_class.setText(text); + mViewDataBinding.tvClass.setText(text); // layout_class.setVisibility(visibility); } public void setNumberText(String text, int visibility) { - tv_number.setText(text); + mViewDataBinding.tvNumber.setText(text); // layout_number.setVisibility(visibility); } public void setNameText(String text, int visibility) { - tv_name.setText(text); + mViewDataBinding.tvName.setText(text); // layout_name.setVisibility(visibility); } public void setIv_head(String url) { if (TextUtils.isEmpty(url)) { - Glide.with(iv_head).load(getDrawable(R.drawable.default_avatar)).into(iv_head); + Glide.with(mViewDataBinding.ivHead).load(getDrawable(R.drawable.default_avatar)).into(mViewDataBinding.ivHead); } else { - Glide.with(iv_head).load(url).error(R.drawable.default_avatar).into(iv_head); + Glide.with(mViewDataBinding.ivHead).load(url).error(R.drawable.default_avatar).into(mViewDataBinding.ivHead); } } @@ -676,7 +647,7 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, setNameText("", View.GONE); setClassText("", View.GONE); setBatchText("", View.GONE); - Glide.with(iv_head).load(getDrawable(R.drawable.default_avatar)).error(R.drawable.default_avatar).into(iv_head); + Glide.with(mViewDataBinding.ivHead).load(getDrawable(R.drawable.default_avatar)).error(R.drawable.default_avatar).into(mViewDataBinding.ivHead); SysSettingUtils.setEnableSetting(MainActivity.this); } } @@ -787,4 +758,6 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, private String getBatteryVolt(int batteryVolt) { return String.format("%.3f V", batteryVolt / 1000.0); } + + } diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java new file mode 100644 index 0000000..03372d2 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java @@ -0,0 +1,38 @@ +package com.aoleyun.sn.activity.main; + +import android.graphics.Bitmap; +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; + +import com.aoleyun.sn.base.mvvm.BaseViewModel; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.databinding.ActivityMainBinding; +import com.aoleyun.sn.utils.AES.CXAESUtil; +import com.aoleyun.sn.utils.Utils; +import com.trello.rxlifecycle4.android.ActivityEvent; + +public class MainViewModel extends BaseViewModel { + @Override + public ActivityMainBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + private MutableLiveData mQrCodeData =new MutableLiveData<>(); + + public MutableLiveData getQrCodeData() { + return mQrCodeData; + } + + public void getQrCode(){ + String encryptString = CXAESUtil.encrypt(CommonConfig.AES_KEY, Utils.getSerial(getCtx())); + Log.e("getQRCode", "setImageAndText: " + encryptString); + Bitmap bitmap = Utils.createQRImage(encryptString, 400, 400); + mQrCodeData.setValue(bitmap); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java index e0801ce..d658ecc 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java @@ -7,7 +7,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.aoleyun.sn.R; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvp.BaseMvpActivity; import com.aoleyun.sn.rlog.LogBean; import com.aoleyun.sn.rlog.LogDBManager; @@ -17,7 +17,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; -public class RequestLogActivity extends BaseActivity implements RequestLogContact.MainView { +public class RequestLogActivity extends BaseMvpActivity implements RequestLogContact.MainView { private static final String TAG = RequestLogActivity.class.getSimpleName(); private RequestLogAdapter mAdapter; @@ -53,12 +53,22 @@ public class RequestLogActivity extends BaseActivity implements RequestLogContac return R.layout.activity_request_log; } + @Override + protected boolean setNightMode() { + return true; + } + + @Override + protected boolean setfitWindow() { + return false; + } + @Override public void initView() { ButterKnife.bind(this); mPresenter = new RequestLogPresenter(this); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new RequestLogAdapter(); mRecyclerView.setAdapter(mAdapter); diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java index 76b9477..e1d6e2f 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java @@ -1,7 +1,7 @@ package com.aoleyun.sn.activity.requestlog; -import com.aoleyun.sn.base.BasePresenter; -import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.base.mvp.BasePresenter; +import com.aoleyun.sn.base.mvp.BaseView; import com.aoleyun.sn.rlog.LogBean; import java.util.List; diff --git a/app/src/main/java/com/aoleyun/sn/activity/update/UpdateActivity.java b/app/src/main/java/com/aoleyun/sn/activity/update/UpdateActivity.java index 883bf32..b30f6ea 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/update/UpdateActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/update/UpdateActivity.java @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.aoleyun.sn.R; import com.aoleyun.sn.adapter.AppUpdateAdapter; -import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.base.mvp.BaseMvpActivity; import com.aoleyun.sn.bean.AppUpdateInfo; import java.util.List; @@ -22,7 +22,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class UpdateActivity extends BaseActivity implements UpdateContact.UpdateView { +public class UpdateActivity extends BaseMvpActivity implements UpdateContact.UpdateView { private static final String TAG = UpdateActivity.class.getSimpleName(); @BindView(R.id.root) @@ -44,12 +44,22 @@ public class UpdateActivity extends BaseActivity implements UpdateContact.Update return R.layout.activity_update; } + @Override + protected boolean setNightMode() { + return true; + } + + @Override + protected boolean setfitWindow() { + return false; + } + @Override public void initView() { ButterKnife.bind(this); mPresenter = new UpdatePresenter(this); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); mAppUpdateAdapter = new AppUpdateAdapter(); recyclerView.setLayoutManager(new LinearLayoutManager(UpdateActivity.this)); diff --git a/app/src/main/java/com/aoleyun/sn/activity/update/UpdateContact.java b/app/src/main/java/com/aoleyun/sn/activity/update/UpdateContact.java index 3ae651c..9d185bb 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/update/UpdateContact.java +++ b/app/src/main/java/com/aoleyun/sn/activity/update/UpdateContact.java @@ -1,7 +1,7 @@ package com.aoleyun.sn.activity.update; -import com.aoleyun.sn.base.BasePresenter; -import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.base.mvp.BasePresenter; +import com.aoleyun.sn.base.mvp.BaseView; import com.aoleyun.sn.bean.AppUpdateInfo; import java.util.List; diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseActivity.java b/app/src/main/java/com/aoleyun/sn/base/BaseActivity.java index a5e66d4..56dfff8 100644 --- a/app/src/main/java/com/aoleyun/sn/base/BaseActivity.java +++ b/app/src/main/java/com/aoleyun/sn/base/BaseActivity.java @@ -3,39 +3,22 @@ package com.aoleyun.sn.base; import android.os.Bundle; import androidx.annotation.CallSuper; -import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import com.aoleyun.sn.R; -import com.trello.rxlifecycle4.LifecycleProvider; -import com.trello.rxlifecycle4.LifecycleTransformer; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.RxLifecycleAndroid; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; +public abstract class BaseActivity extends BaseRxActivity { -public abstract class BaseActivity extends AppCompatActivity implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - lifecycleSubject.onNext(ActivityEvent.CREATE); - setBar(); - //状态栏改变放在setContentView前后有所不同 - setContentView(this.getLayoutId()); - initView(); - initData(); + public BaseActivity() { + super(); } - private void setBar() { + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); UltimateBarX.statusBar(this) .transparent() .colorRes(R.color.colorPrimaryDark) @@ -51,82 +34,5 @@ public abstract class BaseActivity extends AppCompatActivity implements Lifecycl /** * 设置布局 */ - public abstract int getLayoutId(); - - /** - * 初始化视图 - */ - public abstract void initView(); - - - /** - * 初始化数据 - */ - public abstract void initData(); - - - public BaseActivity() { - super(); - } - - @ContentView - public BaseActivity(@LayoutRes int contentLayoutId) { - super(contentLayoutId); - } - - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindActivity(lifecycleSubject); - } - - @Override - @CallSuper - protected void onStart() { - super.onStart(); - lifecycleSubject.onNext(ActivityEvent.START); - } - - @Override - @CallSuper - protected void onResume() { - super.onResume(); - lifecycleSubject.onNext(ActivityEvent.RESUME); - } - - @Override - @CallSuper - protected void onPause() { - lifecycleSubject.onNext(ActivityEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - protected void onStop() { - lifecycleSubject.onNext(ActivityEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - protected void onDestroy() { - lifecycleSubject.onNext(ActivityEvent.DESTROY); - super.onDestroy(); - } -} + protected abstract int getLayoutId(); +} \ No newline at end of file diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseActivityLight.java b/app/src/main/java/com/aoleyun/sn/base/BaseActivityLight.java new file mode 100644 index 0000000..4ee6e06 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/BaseActivityLight.java @@ -0,0 +1,38 @@ +package com.aoleyun.sn.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.aoleyun.sn.R; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseActivityLight extends BaseRxActivity { + + public BaseActivityLight() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(true) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(true) + .apply(); + } + + /** + * 设置布局 + */ + protected abstract int getLayoutId(); +} \ No newline at end of file diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseDataBindingActivity.java b/app/src/main/java/com/aoleyun/sn/base/BaseDataBindingActivity.java new file mode 100644 index 0000000..61ae04e --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/BaseDataBindingActivity.java @@ -0,0 +1,45 @@ +package com.aoleyun.sn.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.aoleyun.sn.R; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseDataBindingActivity extends BaseRxActivity { + + public BaseDataBindingActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(true) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(true) + .apply(); + initView(); + initData(); + } + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseRxActivity.java b/app/src/main/java/com/aoleyun/sn/base/BaseRxActivity.java new file mode 100644 index 0000000..63dd987 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/BaseRxActivity.java @@ -0,0 +1,94 @@ +package com.aoleyun.sn.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.CheckResult; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.trello.rxlifecycle4.LifecycleProvider; +import com.trello.rxlifecycle4.LifecycleTransformer; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.trello.rxlifecycle4.android.RxLifecycleAndroid; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * {@link com.trello.rxlifecycle4.components.RxActivity} + * copied form RxActivity} + */ +public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; + } + + @Override + @NonNull + @CheckResult + public final Observable lifecycle() { + return lifecycleSubject.hide(); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { + return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindToLifecycle() { + return RxLifecycleAndroid.bindActivity(lifecycleSubject); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + lifecycleSubject.onNext(ActivityEvent.CREATE); + } + + @Override + @CallSuper + protected void onStart() { + super.onStart(); + lifecycleSubject.onNext(ActivityEvent.START); + } + + @Override + @CallSuper + protected void onResume() { + super.onResume(); + lifecycleSubject.onNext(ActivityEvent.RESUME); + } + + @Override + @CallSuper + protected void onPause() { + lifecycleSubject.onNext(ActivityEvent.PAUSE); + super.onPause(); + } + + @Override + @CallSuper + protected void onStop() { + lifecycleSubject.onNext(ActivityEvent.STOP); + super.onStop(); + } + + @Override + @CallSuper + protected void onDestroy() { + lifecycleSubject.onNext(ActivityEvent.DESTROY); + super.onDestroy(); + } +} + diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseTransparentActivity.java b/app/src/main/java/com/aoleyun/sn/base/BaseTransparentActivity.java new file mode 100644 index 0000000..e9ba487 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/BaseTransparentActivity.java @@ -0,0 +1,50 @@ +package com.aoleyun.sn.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.aoleyun.sn.R; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseTransparentActivity extends BaseRxActivity { + + public BaseTransparentActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + } + + /** + * 设置布局 + */ + protected abstract int getLayoutId(); + + /** + * @return 是否是黑色状态栏 + */ + protected abstract boolean setNightMode(); + + /** + * @return 是否是入侵 + */ + protected abstract boolean setfitWindow(); +} \ No newline at end of file diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseView.java b/app/src/main/java/com/aoleyun/sn/base/BaseView.java deleted file mode 100644 index d34c489..0000000 --- a/app/src/main/java/com/aoleyun/sn/base/BaseView.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.aoleyun.sn.base; - -public interface BaseView { -} diff --git a/app/src/main/java/com/aoleyun/sn/base/mvp/BaseMvpActivity.java b/app/src/main/java/com/aoleyun/sn/base/mvp/BaseMvpActivity.java new file mode 100644 index 0000000..aec8570 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/mvp/BaseMvpActivity.java @@ -0,0 +1,34 @@ +package com.aoleyun.sn.base.mvp; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.aoleyun.sn.base.BaseTransparentActivity; + +public abstract class BaseMvpActivity extends BaseTransparentActivity { + + public BaseMvpActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + initView(); + initData(); + } + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/aoleyun/sn/base/BasePresenter.java b/app/src/main/java/com/aoleyun/sn/base/mvp/BasePresenter.java similarity index 81% rename from app/src/main/java/com/aoleyun/sn/base/BasePresenter.java rename to app/src/main/java/com/aoleyun/sn/base/mvp/BasePresenter.java index 5f07cfe..63feed6 100644 --- a/app/src/main/java/com/aoleyun/sn/base/BasePresenter.java +++ b/app/src/main/java/com/aoleyun/sn/base/mvp/BasePresenter.java @@ -1,4 +1,4 @@ -package com.aoleyun.sn.base; +package com.aoleyun.sn.base.mvp; import androidx.annotation.NonNull; @@ -7,4 +7,4 @@ public interface BasePresenter { void attachView(@NonNull V view); void detachView(); -} +} \ No newline at end of file diff --git a/app/src/main/java/com/aoleyun/sn/base/mvp/BaseView.java b/app/src/main/java/com/aoleyun/sn/base/mvp/BaseView.java new file mode 100644 index 0000000..30a8031 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/mvp/BaseView.java @@ -0,0 +1,4 @@ +package com.aoleyun.sn.base.mvp; + +public interface BaseView { +} \ No newline at end of file diff --git a/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseMvvmActivity.java new file mode 100644 index 0000000..77c2b33 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseMvvmActivity.java @@ -0,0 +1,54 @@ +package com.aoleyun.sn.base.mvvm; + +import android.os.Bundle; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.aoleyun.sn.base.BaseTransparentActivity; + +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; + +public abstract class BaseMvvmActivity extends BaseTransparentActivity { + + private static final String TAG = BaseMvvmActivity.class.getSimpleName(); + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //ViewDataBinding + mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId()); + mViewDataBinding.setLifecycleOwner(this); + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + boolean isAbstract = Modifier.isAbstract(vmClass.getModifiers()); + Log.e(TAG, "isLocalClass:" + vmClass.getSimpleName().equals(ViewModel.class.getSimpleName()) + " isAbstract:" + isAbstract); + if (!isAbstract) {//不是一个抽象类 + mViewModel = new ViewModelProvider(this).get(vmClass); + } + initDataBinding(); + initView(); + initData(); + } + + protected abstract void initDataBinding(); + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseViewModel.java b/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseViewModel.java new file mode 100644 index 0000000..2002d22 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/mvvm/BaseViewModel.java @@ -0,0 +1,71 @@ +package com.aoleyun.sn.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; + +import java.lang.ref.WeakReference; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * 所有viewmodel的基类 + */ +public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback { + + /** + * 当前viewmodel对应的页面binding + */ + protected VDB binding; + + @Override + public void setVDBinding(ViewDataBinding vdBinding) { + + binding = (VDB) vdBinding; + } + + @Override + public VDB getVDBinding() { + if (binding == null) { + throw new NullPointerException("BaseViewModel >> getVDBinding >> null!!!"); + } + return binding; + } + + + /** + * 上下文 + */ + private WeakReference ctx; + + @Override + public void setCtx(Context context) { + if (ctx == null) { + ctx = new WeakReference<>(context); + } + } + + @Override + public Context getCtx() { + if (ctx == null) { + throw new NullPointerException("BaseViewModel >> getCtx >> null!!!"); + } + return ctx.get(); + } + + + public abstract void onDestroy(); + + private BehaviorSubject mBehaviorSubject; + + @Override + public void setLifecycle(BehaviorSubject subject) { + this.mBehaviorSubject = (BehaviorSubject) subject; + } + + @Override + public BehaviorSubject getLifecycle() { + return mBehaviorSubject; + } +} diff --git a/app/src/main/java/com/aoleyun/sn/base/mvvm/ViewDataBindingCallback.java b/app/src/main/java/com/aoleyun/sn/base/mvvm/ViewDataBindingCallback.java new file mode 100644 index 0000000..e373bd7 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/base/mvvm/ViewDataBindingCallback.java @@ -0,0 +1,22 @@ +package com.aoleyun.sn.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public interface ViewDataBindingCallback { + + void setVDBinding(VDB binding); + + VDB getVDBinding() throws NullPointerException; + + void setCtx(Context context); + + Context getCtx() throws NullPointerException; + + void setLifecycle(BehaviorSubject subject); + + BehaviorSubject getLifecycle(); +} diff --git a/app/src/main/java/com/aoleyun/sn/comm/PackageNames.java b/app/src/main/java/com/aoleyun/sn/comm/PackageNames.java index f9d8839..2f52980 100644 --- a/app/src/main/java/com/aoleyun/sn/comm/PackageNames.java +++ b/app/src/main/java/com/aoleyun/sn/comm/PackageNames.java @@ -19,4 +19,7 @@ public class PackageNames { public static final String LEARNING_DESKTOP = "com.aoleyunos.dop2"; public static final String YIXUEPAI_DESKTOP = "com.ygyb.yischool"; + public static final String AI_LOGGER_PACKAGE = "com.aoleyun.ailog"; + public static final String AI_LOGGER_MAIN_CLASS = "com.aoleyun.ailog.activity.main.MainActivity"; + } diff --git a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java index b2c1045..dffe963 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -889,9 +889,9 @@ public class NetInterfaceManager { .getUpdateApi().getUpdate(PackageNames.AILOG, JGYUtils.getInstance().checkAppPlatform()); Observable.zip(infoUpdateObservable, storeUpdateObservable, desktopUpdateObservable, - notifyUpdateObservable, browserUpdateObservable,ailogUpdateObservable, + notifyUpdateObservable, browserUpdateObservable, ailogUpdateObservable, new Function6, BaseResponse, BaseResponse, - BaseResponse, BaseResponse,BaseResponse, + BaseResponse, BaseResponse, BaseResponse, List>() { @Override public List apply @@ -979,7 +979,7 @@ public class NetInterfaceManager { .getUpdateApi().getUpdate(desktop, JGYUtils.getInstance().checkAppPlatform()); Observable.zip(infoUpdateObservable, storeUpdateObservable, desktopUpdateObservable, - notifyUpdateObservable, browserUpdateObservable, learningDesktopObservable,ailogUpdateObservable, + notifyUpdateObservable, browserUpdateObservable, learningDesktopObservable, ailogUpdateObservable, new Function7, BaseResponse, BaseResponse, BaseResponse, BaseResponse, BaseResponse, BaseResponse, List>() { @Override @@ -1343,6 +1343,12 @@ public class NetInterfaceManager { } mMMKV.encode(CommonConfig.DEFAULT_DESKTOP_PACKAGE_NAME, "com.aoleyunos.dop3"); setDefaultDesktop("com.aoleyunos.dop3"); + } else if ( + // TODO: 2024/5/9 YXPC2的问题,默认启动桌面就是他们,这个需要修改,去根据型号进行判断,默认桌面要是易学派 + JGYUtils.getInstance().checkAppPlatform() == JGYUtils.C2Platform + ) { + JGYUtils.getInstance().showApp(PackageNames.YIXUEPAI_DESKTOP); + JGYUtils.getInstance().setYxpDefaultDesktop(); } } } @@ -1442,13 +1448,13 @@ public class NetInterfaceManager { connectMode = ConnectMode.ONE_MINUTE; } if (ConnectManager.getInstance().isNeedConnect(UrlAddress.GET_DEVELOPER, connectMode)) { - Log.e(TAG, "getDeveloper: cache2" ); + Log.e(TAG, "getDeveloper: cache2"); getDeveloper(lifecycle, callback); } else { String jsonString = cacheHelper.getAsString(UrlAddress.GET_DEVELOPER); //为 "" 是已经请求成功的 if (jsonString == null) { - Log.e(TAG, "getDeveloper: cache2" ); + Log.e(TAG, "getDeveloper: cache2"); getDeveloper(lifecycle, callback); } else { // Gson gson = new Gson(); @@ -2282,11 +2288,12 @@ public class NetInterfaceManager { // Log.e( "getLockedState", "onNext: " + "state changed , reset devices"); // Utils.doMasterClear(mContext); // } - if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.TeclastP20sPlatform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.C2Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.YXPD1Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.G11Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MT8768Platform + // TODO: 2024/5/9 C2 默认易学派 + if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.C2Platform +// || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.TeclastP20sPlatform +// || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.YXPD1Platform +// || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.G11Platform +// || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MT8768Platform ) { JGYUtils.getInstance().showApp(PackageNames.YIXUEPAI_DESKTOP); JGYUtils.getInstance().setYxpDefaultDesktop(); @@ -2534,7 +2541,7 @@ public class NetInterfaceManager { tagSets.add(JGYUtils.YXPD1TAG); } else if (platform == JGYUtils.G11Platform) { tagSets.add(JGYUtils.G11TAG); - } else if (platform == JGYUtils.MT8768Platform) { + } else if (platform == JGYUtils.MT8768Platform) { tagSets.add(JGYUtils.MT8768Tag); } }); diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java b/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java index b285897..cfa866a 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java @@ -1,7 +1,7 @@ package com.aoleyun.sn.service.main; -import com.aoleyun.sn.base.BasePresenter; -import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.base.mvp.BasePresenter; +import com.aoleyun.sn.base.mvp.BaseView; import java.util.List; diff --git a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java index d8107e2..43b5101 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java @@ -2022,10 +2022,36 @@ public class JGYUtils { public void openOTA() { Intent intent = new Intent(Intent.ACTION_MAIN); - /**知道要跳转应用的包命与目标Activity*/ + /*知道要跳转应用的包命与目标Activity*/ ComponentName componentName = new ComponentName("com.adups.fota", "com.adups.fota.GoogleOtaClient"); intent.setComponent(componentName); - mContext.startActivity(intent); + try { + mContext.startActivity(intent); + } catch (Exception e) { + Log.e(TAG, "openOTA: " + e.getMessage()); + Toaster.show("打开失败"); + } + } + + public void openRomOta() { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + /*知道要跳转应用的包命与目标Activity*/ + switch (JGYUtils.getInstance().checkAppPlatform()) { + case JGYUtils.C2Platform: + intent.setComponent(new ComponentName("com.jintaiyi.update", "com.jintaiyi.update.activity.NoVersionActivity")); + break; + case JGYUtils.YXPD1Platform: + default: + intent.setComponent(new ComponentName("com.adups.fota", "com.adups.fota.GoogleOtaClient")); + break; + } + try { + mContext.startActivity(intent); + } catch (Exception e) { + Log.e(TAG, "openOTA: " + e.getMessage()); + Toaster.show("打开失败"); + } } public void openLauncher() { @@ -2416,6 +2442,7 @@ public class JGYUtils { openLauncher3(); } else { String className = getStartClassName(pkg); + Log.e(TAG, "setDefaultDesktop: " + className); if (TextUtils.isEmpty(className)) { openLauncher3(); } else { diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png index b1cb20279bb64cd2c581fad37587e851d3ce41cc..a00c8dcf706cccc7af2668754dddc29a5aa93b8f 100644 GIT binary patch literal 7979 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 diff --git a/app/src/main/res/drawable-hdpi/icon_nodata.png b/app/src/main/res/drawable-hdpi/icon_nodata.png index a2f45fd9dac5332f0a6d9826756ce132bc63abb9..e29e3af6557c85cbbc87fb19bc462332ab6ab427 100644 GIT binary patch literal 17681 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

sRfYMqOabGoM;Jw95lttxedEKeoRcPibgcStIy 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%0AR7XCe~l6?6C| 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 diff --git a/app/src/main/res/drawable/bg_log.xml b/app/src/main/res/drawable/bg_log.xml new file mode 100644 index 0000000..36f3af7 --- /dev/null +++ b/app/src/main/res/drawable/bg_log.xml @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 1d49ae0..d9da97b 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -1,685 +1,672 @@ - - + - - - - - + + + android:layout_height="match_parent"> - + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:onClick="@{click::exit}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + android:layout_marginStart="@dimen/dp_4" + android:gravity="center_horizontal" + android:onClick="@{click::log}" + android:text="@string/my_device" + android:textColor="@color/black" + android:textSize="@dimen/sp_14" + android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_back" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv_bind_statu"> - + - + + + + + - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv_bind_statu"> + + + + - - - + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index 1d49ae0..d9da97b 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -1,685 +1,672 @@ - - + - - - - - + + + android:layout_height="match_parent"> - + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:onClick="@{click::exit}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + android:layout_marginStart="@dimen/dp_4" + android:gravity="center_horizontal" + android:onClick="@{click::log}" + android:text="@string/my_device" + android:textColor="@color/black" + android:textSize="@dimen/sp_14" + android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_back" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv_bind_statu"> - + - + + + + + - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv_bind_statu"> + + + + - - - + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_update.xml b/app/src/main/res/layout/activity_update.xml index 6ebe72c..3177b58 100644 --- a/app/src/main/res/layout/activity_update.xml +++ b/app/src/main/res/layout/activity_update.xml @@ -59,37 +59,37 @@ + + - - + app:layout_constraintStart_toStartOf="@+id/imageView2" + app:layout_constraintTop_toBottomOf="@+id/imageView2" />