diff --git a/app/build.gradle b/app/build.gradle index 1c6f019..1fee744 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 192 - versionName "1.5.0821" + versionCode 197 + versionName "1.5.1018" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 24 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 503c162..6af249d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ - + @@ -222,9 +222,18 @@ + + + { + + private AppUpdateInfo mAppInfoData; + + + @Override + protected int getLayoutId() { + return R.layout.activity_app_update; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + Intent intent = getIntent(); + mAppInfoData = (AppUpdateInfo) intent.getSerializableExtra("appUpdateInfo"); + if (mAppInfoData != null) { + mViewDataBinding.setAppInfo(mAppInfoData); + mViewDataBinding.setMsg("检测到新版本,是否更新"); + String pkg = mAppInfoData.getPackages(); + switch (pkg) { + case "com.aoleyun.os": + mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_os)); + break; + case "com.aoleyun.appstore": + mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_appstore)); + break; + case "com.aoleyun.browser": + mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_browser)); + break; + case "com.aoleyun.ailog": + mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_ailog)); + break; + default: + case BuildConfig.APPLICATION_ID: + mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.mipmap.ic_launcher)); + break; + } + } else { + finish(); + } + } + + + public class BtnClick { + public void empty(View view) { + + } + + public void exit(View view) { + finish(); + } + + public void upgrade(View view) { + startService(new Intent(AppUpdateActivity.this, MainService.class)); + + if (mAppInfoData != null) { + DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(mAppInfoData.getUrl()); + if (null != entity) { + if (entity.isComplete()) { + JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData)); + Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject); + } else { + if (entity.getState() == STATE_RUNNING) { + Toaster.show("文件正在下载中"); + finish(); + } else { + Aria.download(this).resumeAllTask(); + Toaster.show("正在下载"); + finish(); + } + } + } else { + JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData)); + Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject); + Toaster.show("正在下载更新"); + finish(); + } + } + + } + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/update/AppUpdateViewModel.java b/app/src/main/java/com/aoleyun/sn/activity/update/AppUpdateViewModel.java new file mode 100644 index 0000000..01adf5d --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/update/AppUpdateViewModel.java @@ -0,0 +1,18 @@ +package com.aoleyun.sn.activity.update; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.aoleyun.sn.base.mvvm.BaseViewModel; +import com.aoleyun.sn.databinding.ActivityAppUpdateBinding; + +public class AppUpdateViewModel extends BaseViewModel { + + @Override + public ActivityAppUpdateBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/aoleyun/sn/bean/AppUpdateInfo.java b/app/src/main/java/com/aoleyun/sn/bean/AppUpdateInfo.java index 4bfbd7e..2e05910 100644 --- a/app/src/main/java/com/aoleyun/sn/bean/AppUpdateInfo.java +++ b/app/src/main/java/com/aoleyun/sn/bean/AppUpdateInfo.java @@ -17,6 +17,7 @@ public class AppUpdateInfo implements Serializable { @SerializedName("package") String packages; String app_md5; + int is_forcedown; public int getId() { return id; @@ -74,6 +75,14 @@ public class AppUpdateInfo implements Serializable { this.app_md5 = app_md5; } + public int getIs_forcedown() { + return is_forcedown; + } + + public void setIs_forcedown(int is_forcedown) { + this.is_forcedown = is_forcedown; + } + @Override public String toString() { return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString(); diff --git a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java index e02f6c7..fe9029d 100644 --- a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java +++ b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java @@ -8,6 +8,10 @@ public class CommonConfig { public static final String DEFAULT_DESKTOP_PACKAGE = "default_desktop_package_key"; + /** + * 设备重启标志 重启后请求接口,Service重启不请求 + */ + public final static String DEVICES_REBOOT = "device_reboot_mark"; /*爱华解锁标识*/ public final static String AIHUA_UNLOCK = "Aihua_unlock_state"; 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 aee2dbf..9cdc0fd 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -22,6 +22,7 @@ import com.alibaba.sdk.android.push.CloudPushService; import com.alibaba.sdk.android.push.CommonCallback; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.aoleyun.sn.BuildConfig; +import com.aoleyun.sn.activity.update.AppUpdateActivity; import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.AdminAppInfo; import com.aoleyun.sn.bean.AppAttr; @@ -1004,10 +1005,11 @@ public class NetInterfaceManager { Log.e("checkAoleyunUpdate", "onNext: " + jsonString); if (appUpdateInfos != null && appUpdateInfos.size() != 0) { cacheHelper.put(UrlAddress.CHECK_UPDATE, jsonString); - for (AppUpdateInfo info : appUpdateInfos) { - JsonObject jsonObject = parseString(new Gson().toJson(info)).getAsJsonObject(); - JgyUtils.getInstance().installAPK(jsonObject); - } +// for (AppUpdateInfo info : appUpdateInfos) { +// JsonObject jsonObject = parseString(new Gson().toJson(info)).getAsJsonObject(); +// JgyUtils.getInstance().installAPK(jsonObject); +// } + getAllAppUpdate(appUpdateInfos); } else { cacheHelper.put(UrlAddress.CHECK_UPDATE, ""); } @@ -1027,6 +1029,59 @@ public class NetInterfaceManager { }); } + /** + * @param appInfos 获取所有app直接更新 + */ + public void getAllAppUpdate(List appInfos) { + if (appInfos == null || appInfos.size() == 0) { + return; + } + HashMap appInfoHashMap = new HashMap<>(); + for (AppUpdateInfo appInfo : appInfos) { + if (appInfo == null) continue; + appInfoHashMap.put(appInfo.getPackages(), appInfo); + } + PackageManager pm = mContext.getPackageManager(); + for (Map.Entry entry : appInfoHashMap.entrySet()) { + PackageInfo packageInfo = null; + try { + packageInfo = pm.getPackageInfo(entry.getKey(), 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (entry.getValue() != null) { + if (packageInfo == null) { + //未安装 + String s = new Gson().toJson(entry.getValue()); + Log.e(TAG, "getAllAppUpdate: " + s); + JsonObject jsonObject = GsonUtils.getJsonObject(s); + Utils.ariaDownload(mContext, entry.getValue().getUrl(), jsonObject); + } else { + long appVersionCode; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + appVersionCode = packageInfo.getLongVersionCode(); + } else { + appVersionCode = packageInfo.versionCode; + } + long versionCode = entry.getValue().getVersion_code(); + //版本升级 + if (appVersionCode < versionCode) { + int is_forcedown = entry.getValue().getIs_forcedown(); + if (is_forcedown == 1) { + JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(entry.getValue())); + Utils.ariaDownload(mContext, entry.getValue().getUrl(), jsonObject); + } else { + Intent intent = new Intent(mContext, AppUpdateActivity.class); + intent.putExtra("appUpdateInfo", entry.getValue()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + } + } + } + } + } + } + public interface UpdateCallback { void onUpdate(List appUpdateInfos); } @@ -2582,10 +2637,10 @@ public class NetInterfaceManager { public void onNext(@NonNull BaseResponse response) { if (response.code == OK) { cacheHelper.put(UrlAddress.SEND_DEVICES, macJson); - Log.e("sendMACAddress", response.msg); + Log.e("sendMACAddress", "onNext: " + response.msg); SPUtils.put(mContext, "macJson", macJson); } else { - Log.e("sendMACAddress", response.toString()); + Log.e("sendMACAddress", "onNext: " + response.toString()); } } diff --git a/app/src/main/java/com/aoleyun/sn/push/PushManager.java b/app/src/main/java/com/aoleyun/sn/push/PushManager.java index 245f26e..2a60e0b 100644 --- a/app/src/main/java/com/aoleyun/sn/push/PushManager.java +++ b/app/src/main/java/com/aoleyun/sn/push/PushManager.java @@ -24,6 +24,7 @@ import android.view.Gravity; import android.view.WindowManager; import com.aoleyun.sn.R; +import com.aoleyun.sn.activity.AudioActivity; import com.aoleyun.sn.activity.main.MainActivity; import com.aoleyun.sn.bean.ApkInfoPush; import com.aoleyun.sn.bean.BaseResponse; @@ -1171,8 +1172,10 @@ public class PushManager { } private void playSound(String extras) { - JsonObject jsonObject = GsonUtils.getJsonObject(extras); - defaultCallMediaPlayer(mContext); +// defaultCallMediaPlayer(mContext); + Intent intent = new Intent(mContext, AudioActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); } /** diff --git a/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java b/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java index abe9b71..8b60bf1 100644 --- a/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java @@ -24,6 +24,7 @@ import io.reactivex.rxjava3.disposables.Disposable; public class BootReceiver extends BroadcastReceiver { private static String TAG = "BootReceiver" + ":aoleyunsn"; public static final String BOOT_COMPLETED = "aoleyun.intent.action.BOOT_COMPLETED"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); static { getLockedState(); @@ -74,7 +75,8 @@ public class BootReceiver extends BroadcastReceiver { default: break; case Intent.ACTION_BOOT_COMPLETED: - MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).encode(ConnectManager.REBOOT_LAST_ONNECT_TIME, System.currentTimeMillis()); + mMMKV.encode(CommonConfig.DEVICES_REBOOT, true); + mMMKV.encode(ConnectManager.REBOOT_LAST_ONNECT_TIME, System.currentTimeMillis()); if ((int) SPUtils.get(context, CommonConfig.FIRST_STARTUP, 0) == 0) { LogDBManager.getInstance().creatRebootLog("首次启动", TimeUtils.transferLongToDate(System.currentTimeMillis())); SPUtils.put(context, CommonConfig.FIRST_STARTUP, 1); 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 aecbf3c..627a5c0 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 @@ -22,7 +22,7 @@ public class MainSContact { /*分支3 上传信息*/ /*上传联网时间*/ - void sendNetwork(List time); + void sendNetwork(List time); /*发送mac地址*/ void sendMacAddress(); /*更新设备信息*/ diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java b/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java index 16d2fe9..e720dc3 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java @@ -86,7 +86,7 @@ public class MainSPresenter implements MainSContact.Presenter { @Override public void getLockedState() { Log.e(TAG, "getLockedState: "); - if (JgyUtils.getInstance().isAihuaFramwwork()) { + if (JgyUtils.getInstance().isAihuaFramework()) { int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0); if (aihuaUnlock == 1) { return; @@ -235,14 +235,14 @@ public class MainSPresenter implements MainSContact.Presenter { if (JgyUtils.isOfficialVersion()) { mView.updateDeviceInfoFinish(); } - if (!JgyUtils.getInstance().tagEmpty()) { +// if (!JgyUtils.getInstance().tagEmpty()) { NetInterfaceManager.getInstance().updateDeviceInfo(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() { @Override public void onComplete() { mView.updateDeviceInfoFinish(); } }); - } +// } } /** @@ -250,14 +250,14 @@ public class MainSPresenter implements MainSContact.Presenter { */ @Override public void sendInstalled() { - if (!JgyUtils.getInstance().tagEmpty()) { +// if (!JgyUtils.getInstance().tagEmpty()) { NetInterfaceManager.getInstance().sendInstalledAppInfo(new NetInterfaceManager.onCompleteCallback() { @Override public void onComplete() { mView.sendInstalledFinish(); } }); - } +// } } /** @@ -375,7 +375,7 @@ public class MainSPresenter implements MainSContact.Presenter { mView.getDefaultDesktopFinish(); } else { int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0); - if (JgyUtils.getInstance().isAihuaFramwwork() && aihuaUnlock == 1) { + if (JgyUtils.getInstance().isAihuaFramework() && aihuaUnlock == 1) { Log.e(TAG, "getDefaultDesktop: " + "Device aihua"); mView.getDefaultDesktopFinish(); } else { diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java index 3c24f37..18a9fab 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java @@ -108,14 +108,14 @@ public class MainService extends Service implements MainSContact.MainView, Netwo String WiFiAlias = Utils.getWifiAlias(this); Log.e("OnNetworkStatusChanged", "onConnected: " + WiFiAlias); JgyUtils.getInstance().addNetworkConnectedTime(System.currentTimeMillis() / 1000); + mPresenter.sendNetwork(JgyUtils.getInstance().getNetworkConnectedTime()); if (JgyUtils.getInstance().isScreenOn()) { TimeTask task = new TimeTask(); task.execute("ntp.aliyun.com"); if (!checkAoleyunApp()) { mPresenter.checkAoleyunUpdate(); } - mPresenter.sendNetwork(JgyUtils.getInstance().getNetworkConnectedTime()); - mPresenter.getLockedState(); + mInternetConnected.onConnected(WiFiAlias); } } @@ -186,7 +186,49 @@ public class MainService extends Service implements MainSContact.MainView, Netwo }); } - private static KillAppListener killAppListener; + private InternetConnected mInternetConnected; + + public interface InternetConnected { + void onConnected(String alias); + } + + private final ObservableOnSubscribe networkSubscribe = new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + mInternetConnected = new InternetConnected() { + @Override + public void onConnected(String alias) { + Log.e(TAG, "networkSubscribe: onConnected " + alias); + emitter.onNext(alias); + } + }; + } + }; + + private Observer networkObserver = new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("networkObserver", "onSubscribe: "); + } + + @Override + public void onNext(String action) { + Log.e("networkObserver", "onNext: " + action); + mPresenter.getLockedState(); + } + + @Override + public void onError(Throwable e) { + Log.e("networkObserver", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("networkObserver", "onComplete: "); + } + }; + + private KillAppListener killAppListener; public interface KillAppListener { void killApp(String action); @@ -217,6 +259,10 @@ public class MainService extends Service implements MainSContact.MainView, Netwo JgyUtils.getInstance().killPackage(PackageNames.NOTIFICATIONS); JgyUtils.getInstance().killPackage(PackageNames.BROWSER); JgyUtils.getInstance().killPackage(PackageNames.AILOG); + JgyUtils.getInstance().killPackage("com.jxw.launcher"); + JgyUtils.getInstance().killPackage("com.jxw.newyouer.video"); + JgyUtils.getInstance().killPackage("com.jxw.mskt.video"); + // JgyUtils.getInstance().killPackage("com.ygyb.yischool"); } @@ -446,7 +492,14 @@ public class MainService extends Service implements MainSContact.MainView, Netwo TimeTask task = new TimeTask(); task.execute("ntp.aliyun.com"); - mPresenter.getLockedState(); + boolean reboot = mMMKV.decodeBool(CommonConfig.DEVICES_REBOOT, false); + if (reboot) { + mPresenter.getLockedState(); + mMMKV.encode(CommonConfig.DEVICES_REBOOT, false); + Log.e(TAG, "onCreate: device rebooted"); + } else { + Log.e(TAG, "onCreate: device not reboot"); + } Settings.Global.putString(getContentResolver(), "AOLE_SERIAL", Utils.getSerial(MainService.this)); @@ -561,6 +614,11 @@ public class MainService extends Service implements MainSContact.MainView, Netwo .throttleLast(30, TimeUnit.SECONDS) // .throttleLast(3, TimeUnit.SECONDS) .subscribe(killObserver); + + Observable.create(networkSubscribe) + .throttleLast(1, TimeUnit.HOURS) + .subscribe(networkObserver); + JgyUtils.getInstance().checkAoleyunApp(); } @@ -1133,9 +1191,43 @@ public class MainService extends Service implements MainSContact.MainView, Netwo } else { mPresenter.getFirstConnect(); mPresenter.getStudesInfo(); + + mPresenter.getSystemSettingBegin(); + mPresenter.getAppLimit(); + mPresenter.getForceDownload(); + mPresenter.getDefaultDesktop(); + mPresenter.setLogoImg(); + mPresenter.getWallpaper(); + mPresenter.getAllAppList(); + mPresenter.getBrowserBookmarks(); + mPresenter.getBrowserWhiteList(); + mPresenter.getDesktopIcon(); + mPresenter.getAppAutoStartUpdateAndNet(); + mPresenter.getSnAppAttr(); + mPresenter.getAppIdControl(); + mPresenter.setAppinsideWeb(); + mPresenter.getSystemSetting(); + mPresenter.getDefaultApp(); + mPresenter.setTopApp(); + mPresenter.getPoweroffTime(); + mPresenter.getSnTimeControl(); + mPresenter.getSnSetting(); + mPresenter.getCloudLessonSettings(); + mPresenter.getEbagCode(); + mPresenter.getBlackList(); + mPresenter.getWhiteList(); + mPresenter.getWiFiPasswd(); } - mPresenter.getDeveloper(); mPresenter.sendMacAddress(); + mPresenter.updateDeviceInfo(); + mPresenter.sendInstalled(); + mPresenter.checkAoleyunUpdate(); + mPresenter.checkTestUpdate(); + + mPresenter.getDeveloper(); + mPresenter.getRomApp(); + mPresenter.getScreenLockState(); + mPresenter.geteFence(); } /** @@ -1152,7 +1244,6 @@ public class MainService extends Service implements MainSContact.MainView, Netwo SysSettingUtils.setDisableSetting(this); JgyUtils.getInstance().writeAppPackageList(); } - mPresenter.getSystemSettingBegin(); } @Override @@ -1167,23 +1258,22 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void sendMacFinish() { - mPresenter.updateDeviceInfo(); + } @Override public void updateDeviceInfoFinish() { - mPresenter.sendInstalled(); + } @Override public void sendInstalledFinish() { Log.e(TAG, "sendInstalledFinish: "); - mPresenter.checkAoleyunUpdate(); + } @Override public void checkAoleyunUpdateFinish() { - mPresenter.checkTestUpdate(); } @Override @@ -1193,12 +1283,11 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void getDeveloperFinish() { - mPresenter.getRomApp(); + } @Override public void getRomAppFinish() { - mPresenter.getScreenLockState(); } @Override @@ -1218,7 +1307,6 @@ public class MainService extends Service implements MainSContact.MainView, Netwo SPUtils.put(this, "is_screen_lock", false); SPUtils.put(this, "screen_tips", ""); } - mPresenter.geteFence(); } @Override @@ -1228,107 +1316,107 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void setSystemSetting() { - mPresenter.getAppLimit(); + } @Override public void getAppLimitFinish() { - mPresenter.getForceDownload(); + } @Override public void getForceDownloadFinish() { - mPresenter.getDefaultDesktop(); + } @Override public void getDefaultDesktopFinish() { - mPresenter.setLogoImg(); + } @Override public void setLogoImgFinish() { - mPresenter.getWallpaper(); + } @Override public void getWallpaperFinish() { - mPresenter.getAllAppList(); + } @Override public void getAllAppListFinish() { - mPresenter.getBrowserBookmarks(); + } @Override public void getBrowserBookmarksFinish() { - mPresenter.getBrowserWhiteList(); + } @Override public void setBrowserWhiteList() { - mPresenter.getDesktopIcon(); + } @Override public void getDesktopIconFinish() { - mPresenter.getAppAutoStartUpdateAndNet(); + } @Override public void getAppAutoStartUpdateAndNetFinish() { - mPresenter.getSnAppAttr(); + } @Override public void getSnAppAttrFinish() { - mPresenter.getAppIdControl(); + } @Override public void getAppIdControlFinish() { - mPresenter.setAppinsideWeb(); + } @Override public void setAppinsideWebFinish() { - mPresenter.getSystemSetting(); + } @Override public void getSystemSettingFinish() { - mPresenter.getDefaultApp(); + } @Override public void setDefaultAppFinish() { - mPresenter.setTopApp(); + } @Override public void setTopAppFinish() { - mPresenter.getPoweroffTime(); + } @Override public void setPoweroffTime() { - mPresenter.getSnTimeControl(); + } @Override public void getSnTimeControlFinish() { - mPresenter.getSnSetting(); + } @Override public void getSnSettingFinish() { - mPresenter.getCloudLessonSettings(); + } @Override public void setCloudLessonSettings() { - mPresenter.getEbagCode(); + } @Override @@ -1340,7 +1428,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo // mPresenter.getBlackList(); Log.e(TAG, "getEBagCodeFinish: " + "未激活"); } - mPresenter.getBlackList(); + } @Deprecated @@ -1352,13 +1440,12 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void getBlackListFinish() { Log.e(TAG, "getBlackListFinish: "); - mPresenter.getWhiteList(); + } @Override public void getWhiteListFinish() { Log.e(TAG, "getWhiteListFinish: "); - mPresenter.getWiFiPasswd(); } @Override 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 4a985ad..067fc67 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java @@ -2106,8 +2106,13 @@ public class JgyUtils { if (oldStatu == (state ^ 1)) { Log.e(TAG, "setDeveloperOptions: oldStatu = " + oldStatu + " no changed"); } - //这个需要反着来 - Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state ^ 1); + + if (MT8768Tag.equalsIgnoreCase(BuildConfig.platform)) { + Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state); + } else { + //这个需要反着来 + Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state ^ 1); + } Log.e(TAG, "setDeveloperOptions: DEVELOPMENT_SETTINGS_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0)); Log.e(TAG, "setDeveloperOptions: ADB_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.ADB_ENABLED, 0)); @@ -3152,7 +3157,7 @@ public class JgyUtils { return Build.HARDWARE; } - public boolean isAihuaFramwwork() { + public boolean isAihuaFramework() { return (Utils.getProperty("ro.build.display.id", "获取失败").contains("_aihua")); } @@ -3171,8 +3176,17 @@ public class JgyUtils { public boolean isScreenOn() { PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + boolean isScreenOn; + // 使用新版本的 API,更准确 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { + isScreenOn = powerManager.isInteractive(); + } else { + // 旧版本 API(已过时,但用于兼容低版本系统) + isScreenOn = powerManager.isScreenOn(); + } + Log.e(TAG, "isScreenOn: " + isScreenOn); + return isScreenOn; //true为打开,false为关闭 - return powerManager.isInteractive(); } private static final String CONNECTED_TIME_KEY = "connectedTimeKey"; diff --git a/app/src/main/java/com/aoleyun/sn/utils/WakeUpUtils.java b/app/src/main/java/com/aoleyun/sn/utils/WakeUpUtils.java new file mode 100644 index 0000000..d38eb43 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/utils/WakeUpUtils.java @@ -0,0 +1,119 @@ +package com.aoleyun.sn.utils; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.KeyguardManager; +import android.content.Context; +import android.os.Build; +import android.os.PowerManager; +import android.util.Log; +import android.view.Window; +import android.view.WindowManager; + +import androidx.annotation.RequiresApi; + +public class WakeUpUtils { + + /** + * 唤醒手机屏幕并解锁 + */ + public static void wakeUpAndUnlock(Activity activity) { + // 获取电源管理器对象 + PowerManager pm = (PowerManager) activity.getApplicationContext() + .getSystemService(Context.POWER_SERVICE); + boolean screenOn = pm.isScreenOn(); + Log.d("WakeScreen0", "screenOn: " + screenOn); + if (!screenOn) { + // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag + @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock( + PowerManager.ACQUIRE_CAUSES_WAKEUP | + PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); + wl.acquire(10000); // 点亮屏幕 + wl.release(); // 释放 + } + // 屏幕解锁 + KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext() + .getSystemService(Context.KEYGUARD_SERVICE); + KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("unLock"); + // 屏幕锁定 +// keyguardLock.reenableKeyguard(); + keyguardLock.disableKeyguard(); // 解锁 + unLockScreen(activity); + } + + private static void unLockScreen(Activity activity) { + final Window win = activity.getWindow(); + win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); + + win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); + } + + /** + * 唤醒手机屏幕并解锁 + */ + @RequiresApi(api = Build.VERSION_CODES.O) + public static void wakeUpAndUnlockScreen(Activity activity) { + + Window win = activity.getWindow(); + win.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + + PowerManager pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE); + @SuppressLint("InvalidWakeLockTag") + PowerManager.WakeLock wakelock = pm.newWakeLock( + PowerManager.FULL_WAKE_LOCK + | PowerManager.ACQUIRE_CAUSES_WAKEUP, "xx"); + wakelock.acquire(); + wakelock.release(); + + KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext() + .getSystemService(Context.KEYGUARD_SERVICE); + + if (activity == null) return; + keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() { + @Override + public void onDismissError() { + super.onDismissError(); + Log.d("xxx-->", "1 onDismissError"); + } + + @Override + public void onDismissSucceeded() { + super.onDismissSucceeded(); + Log.d("xxx-->", "1 onDismissSucceeded"); + } + + @Override + public void onDismissCancelled() { + super.onDismissCancelled(); + Log.d("xxx-->", "1 onDismissCancelled"); + } + }); + + if (activity == null) return; + keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() { + @Override + public void onDismissError() { + super.onDismissError(); + Log.d("xxx-->", "2 onDismissError"); + } + + @Override + public void onDismissSucceeded() { + super.onDismissSucceeded(); + Log.d("xxx-->", "2 onDismissSucceeded"); + } + + @Override + public void onDismissCancelled() { + super.onDismissCancelled(); + Log.d("xxx-->", "2 onDismissCancelled"); + } + }); + + } +} diff --git a/app/src/main/res/drawable-hdpi/icon_close.png b/app/src/main/res/drawable-hdpi/icon_close.png new file mode 100644 index 0000000..9ebcb0b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_close.png differ diff --git a/app/src/main/res/drawable/mask.png b/app/src/main/res/drawable-hdpi/mask.png similarity index 100% rename from app/src/main/res/drawable/mask.png rename to app/src/main/res/drawable-hdpi/mask.png diff --git a/app/src/main/res/drawable/bt_emergency_normnl.xml b/app/src/main/res/drawable/bt_emergency_normnl.xml new file mode 100644 index 0000000..01efb7f --- /dev/null +++ b/app/src/main/res/drawable/bt_emergency_normnl.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_background.xml b/app/src/main/res/drawable/dialog_background.xml new file mode 100644 index 0000000..eaf60cf --- /dev/null +++ b/app/src/main/res/drawable/dialog_background.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_shake.xml b/app/src/main/res/drawable/ic_shake.xml new file mode 100644 index 0000000..4888a56 --- /dev/null +++ b/app/src/main/res/drawable/ic_shake.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/update_background.xml b/app/src/main/res/drawable/update_background.xml new file mode 100644 index 0000000..b904dbe --- /dev/null +++ b/app/src/main/res/drawable/update_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/update_cancel_background.xml b/app/src/main/res/drawable/update_cancel_background.xml new file mode 100644 index 0000000..58247be --- /dev/null +++ b/app/src/main/res/drawable/update_cancel_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_app_update.xml b/app/src/main/res/layout/activity_app_update.xml new file mode 100644 index 0000000..649612f --- /dev/null +++ b/app/src/main/res/layout/activity_app_update.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_audio.xml b/app/src/main/res/layout/activity_audio.xml new file mode 100644 index 0000000..c35a2b3 --- /dev/null +++ b/app/src/main/res/layout/activity_audio.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 86f4829..5b8a94a 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 86f4829..5b8a94a 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 86f4829..5b8a94a 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 86f4829..5b8a94a 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 86f4829..5b8a94a 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 8e660ce..af658a0 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -62,4 +62,7 @@ #1f1f1f #989898 + #98999a + #FFD3D3D3 + #0166ff \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a3c5cbe..ad1b249 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - 我的设备 + 设备管理 卸载失败! 系统应用无法卸载! 清理垃圾 (%1$s) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index db1596e..c0cd961 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -74,4 +74,25 @@ + +