From 2db37bdfa47ff3a82a4818012e5d81cf705a5bd0 Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Wed, 26 Oct 2022 09:20:21 +0800 Subject: [PATCH] =?UTF-8?q?version:2.2.10.25=20fix:=20update:=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=A6=81=E7=94=A8app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../com/aoleyun/sn/SystemInfoInterface.aidl | 1 + .../activity/checknet/CheckNetActivity.java | 5 + .../sn/activity/checknet/CheckNetContact.java | 4 + .../activity/checknet/CheckNetPresenter.java | 10 ++ .../java/com/aoleyun/sn/bean/AppAttr.java | 27 ++++ .../com/aoleyun/sn/comm/CommonConfig.java | 1 + .../java/com/aoleyun/sn/gson/GsonUtils.java | 144 ++++++++++++++++++ .../sn/gson/IntegerDefault0Adapter.java | 35 +++++ .../sn/network/NetInterfaceManager.java | 114 +++++++++++--- .../com/aoleyun/sn/network/UrlAddress.java | 2 + .../sn/network/api/get/SnAppAttrApi.java | 18 +++ .../com/aoleyun/sn/service/RemoteService.java | 15 ++ .../aoleyun/sn/service/main/MainSContact.java | 4 + .../sn/service/main/MainSPresenter.java | 10 ++ .../aoleyun/sn/service/main/MainService.java | 5 + .../com/aoleyun/sn/tpush/MessageReceiver.java | 28 +++- .../java/com/aoleyun/sn/utils/ApkUtils.java | 24 +++ .../java/com/aoleyun/sn/utils/GsonUtils.java | 28 ---- .../java/com/aoleyun/sn/utils/JGYUtils.java | 33 ++-- 20 files changed, 442 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/aoleyun/sn/bean/AppAttr.java create mode 100644 app/src/main/java/com/aoleyun/sn/gson/GsonUtils.java create mode 100644 app/src/main/java/com/aoleyun/sn/gson/IntegerDefault0Adapter.java create mode 100644 app/src/main/java/com/aoleyun/sn/network/api/get/SnAppAttrApi.java delete mode 100644 app/src/main/java/com/aoleyun/sn/utils/GsonUtils.java diff --git a/app/build.gradle b/app/build.gradle index ac9a589..a096b4e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,7 +91,7 @@ android { MTKnewly { flavorDimensions "default" versionCode 31 - versionName "2.2.8.19" + versionName "2.2.10.25" buildConfigField "String", "platform", '"MTK"' } } diff --git a/app/src/main/aidl/com/aoleyun/sn/SystemInfoInterface.aidl b/app/src/main/aidl/com/aoleyun/sn/SystemInfoInterface.aidl index 24bef78..422184a 100644 --- a/app/src/main/aidl/com/aoleyun/sn/SystemInfoInterface.aidl +++ b/app/src/main/aidl/com/aoleyun/sn/SystemInfoInterface.aidl @@ -17,4 +17,5 @@ interface SystemInfoInterface { String getTopAppPackage(); boolean SystemPutInt(String name, int value); void setDefaultDesktop(String pkg); + List getDisableApp(); } 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 01ff889..898eba2 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 @@ -284,6 +284,11 @@ public class CheckNetActivity extends BaseActivity implements CheckNetContact.Ma @Override public void getAppAutoStartUpdateAndNetFinish() { + mCheckNetPresenter.getSnAppAttr(); + } + + @Override + public void getSnAppAttrFinish() { mCheckNetPresenter.getAppIDControl(); } 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 4dfae1b..27a4d5d 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 @@ -54,6 +54,8 @@ public class CheckNetContact { void getDesktopIcon(); //获取应用自启升级和网络权限管理 void getAppAutoStartUpdateAndNet(); + /*获取禁用app*/ + void getSnAppAttr(); //获取第三方应用子页面ID连网限制 void getAppIDControl(); //获取第三方应用内部网页跳转屏蔽 @@ -126,6 +128,8 @@ public class CheckNetContact { void getDesktopIconFinish(); //获取应用自启升级和网络权限管理结束 void getAppAutoStartUpdateAndNetFinish(); + /*获取禁用app*/ + void getSnAppAttrFinish(); //获取第三方应用子页面ID连网限制结束 void getAppIDControlFinish(); //获取第三方应用内部网页跳转屏蔽结束 diff --git a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java index 44f740f..c7e010e 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java @@ -293,6 +293,16 @@ public class CheckNetPresenter implements CheckNetContact.Presenter { }); } + @Override + public void getSnAppAttr() { + mNetInterfaceManager.getSnAppAttr(new NetInterfaceManager.onCompleteCallback() { + @Override + public void onComplete() { + mView.getSnAppAttrFinish(); + } + }); + } + @Override public void getAppIDControl() { mNetInterfaceManager.getAppIDControl(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() { diff --git a/app/src/main/java/com/aoleyun/sn/bean/AppAttr.java b/app/src/main/java/com/aoleyun/sn/bean/AppAttr.java new file mode 100644 index 0000000..d10a8ac --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/bean/AppAttr.java @@ -0,0 +1,27 @@ +package com.aoleyun.sn.bean; + +import java.io.Serializable; + +public class AppAttr implements Serializable { + private static final long serialVersionUID = -4530860765778383316L; + + String app_package; + /*应用是否允许打开 0不允许 1允许*/ + int is_open; + + public String getApp_package() { + return app_package; + } + + public void setApp_package(String app_package) { + this.app_package = app_package; + } + + public int getIs_open() { + return is_open; + } + + public void setIs_open(int is_open) { + this.is_open = is_open; + } +} 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 6e465f0..2dbddca 100644 --- a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java +++ b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java @@ -112,5 +112,6 @@ public class CommonConfig { /*恢复出厂设置开关*/ public final static String AOLE_ACTION_RESTORE_FORBID_ON = "aole_restore_forbid_on"; + public final static String AOLE_ACTION_DISABLE_APP = "aole_disable_app_list"; } diff --git a/app/src/main/java/com/aoleyun/sn/gson/GsonUtils.java b/app/src/main/java/com/aoleyun/sn/gson/GsonUtils.java new file mode 100644 index 0000000..19443fe --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/gson/GsonUtils.java @@ -0,0 +1,144 @@ +package com.aoleyun.sn.gson; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; +import java.util.Objects; + + +public class GsonUtils { + //https://blog.csdn.net/zte1055889498/article/details/122400299 + + public static JsonObject getJsonObject(String jsonString) { + JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); + return jsonObject; + } + + private static final Gson gson; + + static { + GsonBuilder builder = new GsonBuilder(); + builder.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()); + builder.registerTypeAdapter(Integer.class, new IntegerDefault0Adapter()); + builder.registerTypeAdapter(int.class, new IntegerDefault0Adapter()); + builder.disableHtmlEscaping(); + builder.enableComplexMapKeySerialization(); + // builder.excludeFieldsWithoutExposeAnnotation(); + builder.setDateFormat("yyyy-MM-dd HH:mm:ss"); + gson = builder.create(); + } + + public static Type makeJavaType(Type rawType, Type... typeArguments) { + return TypeToken.getParameterized(rawType, typeArguments).getType(); + } + + public static String toString(Object value) { + if (Objects.isNull(value)) { + return null; + } + if (value instanceof String) { + return (String) value; + } + return toJSONString(value); + } + + public static String toJSONString(Object value) { + return gson.toJson(value); + } + + public static String toPrettyString(Object value) { + return gson.newBuilder().setPrettyPrinting().create().toJson(value); + } + + public static JsonElement fromJavaObject(Object value) { + JsonElement result = null; + if (Objects.nonNull(value) && (value instanceof String)) { + result = parseObject((String) value); + } else { + result = gson.toJsonTree(value); + } + return result; + } + + public static JsonElement parseObject(String content) { + return JsonParser.parseString(content); + } + + public static JsonElement getJsonElement(JsonObject node, String name) { + return node.get(name); + } + + public static JsonElement getJsonElement(JsonArray node, int index) { + return node.get(index); + } + + public static T toJavaObject(JsonElement node, Class clazz) { + return gson.fromJson(node, clazz); + } + + public static T toJavaObject(JsonElement node, Type type) { + return gson.fromJson(node, type); + } + + public static T toJavaObject(JsonElement node, TypeToken typeToken) { + return toJavaObject(node, typeToken.getType()); + } + + public static List toJavaList(JsonElement node, Class clazz) { + return toJavaObject(node, makeJavaType(List.class, clazz)); + } + + public static List toJavaList(JsonElement node) { + return toJavaObject(node, new TypeToken>() { + }.getType()); + } + + public static Map toJavaMap(JsonElement node, Class clazz) { + return toJavaObject(node, makeJavaType(Map.class, String.class, clazz)); + } + + public static Map toJavaMap(JsonElement node) { + return toJavaObject(node, new TypeToken>() { + }.getType()); + } + + public static T toJavaObject(String content, Class clazz) { + JsonObject jsonObject = getJsonObject(content); + String jsonString = jsonObject.toString(); + return gson.fromJson(jsonString, clazz); + } + + public static T toJavaObject(String content, Type type) { + return gson.fromJson(content, type); + } + + public static T toJavaObject(String content, TypeToken typeToken) { + return toJavaObject(content, typeToken.getType()); + } + + public static List toJavaList(String content, Class clazz) { + return toJavaObject(content, makeJavaType(List.class, clazz)); + } + + public static List toJavaList(String content) { + return toJavaObject(content, new TypeToken>() { + }.getType()); + } + + public static Map toJavaMap(String content, Class clazz) { + return toJavaObject(content, makeJavaType(Map.class, String.class, clazz)); + } + + public static Map toJavaMap(String content) { + return toJavaObject(content, new TypeToken>() { + }.getType()); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/gson/IntegerDefault0Adapter.java b/app/src/main/java/com/aoleyun/sn/gson/IntegerDefault0Adapter.java new file mode 100644 index 0000000..8bfb39d --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/gson/IntegerDefault0Adapter.java @@ -0,0 +1,35 @@ +package com.aoleyun.sn.gson; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.JsonSyntaxException; + +import java.lang.reflect.Type; + +public class IntegerDefault0Adapter implements JsonSerializer, JsonDeserializer { + @Override + public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (json.getAsString().equals("")) { + return 0; + } + } catch (Exception ignore) { + } + try { + return json.getAsInt(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } +} \ No newline at end of file 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 cfd7bf2..7dda209 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -15,6 +15,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.BuildConfig; +import com.aoleyun.sn.bean.AppAttr; import com.aoleyun.sn.bean.AppID; import com.aoleyun.sn.bean.AppLimit; import com.aoleyun.sn.bean.AppListInfo; @@ -44,20 +45,22 @@ import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.disklrucache.CacheHelper; +import com.aoleyun.sn.gson.GsonUtils; import com.aoleyun.sn.gson.NullStringToEmptyAdapterFactory; import com.aoleyun.sn.manager.ConnectManager; import com.aoleyun.sn.manager.ConnectMode; +import com.aoleyun.sn.network.api.GetPublicIPApi; import com.aoleyun.sn.network.api.GetWhoisApi; import com.aoleyun.sn.network.api.get.CheckTestUpdateApi; import com.aoleyun.sn.network.api.get.DefaultAppApi; import com.aoleyun.sn.network.api.get.GetDesktopApi; import com.aoleyun.sn.network.api.get.GetDeveloperApi; import com.aoleyun.sn.network.api.get.GetPushTagsApi; -import com.aoleyun.sn.network.api.GetPublicIPApi; import com.aoleyun.sn.network.api.get.GetSnRunLogApi; import com.aoleyun.sn.network.api.get.GetWiFiAliasApi; import com.aoleyun.sn.network.api.get.LogoImgApi; import com.aoleyun.sn.network.api.get.ScreenLockStateApi; +import com.aoleyun.sn.network.api.get.SnAppAttrApi; import com.aoleyun.sn.network.api.get.SnTimeControlApi; import com.aoleyun.sn.network.api.get.TopAppControlApi; import com.aoleyun.sn.network.api.post.AppLimitApi; @@ -100,7 +103,6 @@ import com.aoleyun.sn.statistics.StatisticsInfo; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.ForegroundAppUtil; -import com.aoleyun.sn.utils.GsonUtils; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.MD5Util; import com.aoleyun.sn.utils.NetworkUtils; @@ -426,6 +428,13 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable>> getSnAppAttrObservable() { + return mRetrofit.create(SnAppAttrApi.class) + .getSnAppAttr(Utils.getSerial(mContext)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public Observable> getAppIDControlObservable() { return mRetrofit.create(DeselectIDApi.class) .getDeselectIDApi(NetInterfaceManager.HTTP_KEY, Utils.getSerial(mContext)) @@ -767,7 +776,7 @@ public class NetInterfaceManager { @Override public void onNext(@NonNull List appUpdateInfos) { - String jsonString = GsonUtils.toJsonString(appUpdateInfos); + String jsonString = GsonUtils.toJSONString(appUpdateInfos); cacheHelper.put(UrlAddress.CHECK_UPDATE, jsonString); Log.e("checkAoleyunUpdate", "onNext: " + jsonString); for (AppUpdateInfo info : appUpdateInfos) { @@ -844,7 +853,7 @@ public class NetInterfaceManager { public void onNext(BaseResponse> listBaseResponse) { Log.e("checkTestUpdate", "onNext: " + listBaseResponse.data); if (listBaseResponse.code == OK) { - cacheHelper.put(UrlAddress.GET_SN_APP_TEST, GsonUtils.toJsonString(listBaseResponse.data)); + cacheHelper.put(UrlAddress.GET_SN_APP_TEST, GsonUtils.toJSONString(listBaseResponse.data)); List APPlist = listBaseResponse.data; JGYUtils.getInstance().installTestAPK(APPlist); } else { @@ -925,7 +934,7 @@ public class NetInterfaceManager { if (forceDownloadBean.code == OK) { cacheHelper.getAsString(UrlAddress.GET_FORCE_INSTALL_LIST); List forceDownloadData = forceDownloadBean.data; - cacheHelper.put(UrlAddress.GET_FORCE_INSTALL_LIST, GsonUtils.toJsonString(forceDownloadData)); + cacheHelper.put(UrlAddress.GET_FORCE_INSTALL_LIST, GsonUtils.toJSONString(forceDownloadData)); Aria.download(this).resumeAllTask(); JGYUtils.getInstance().forceDownload(forceDownloadData); List forceApp = forceDownloadData.stream().map(ForceDownloadData::getApp_package).collect(Collectors.toList()); @@ -1008,7 +1017,7 @@ public class NetInterfaceManager { Log.e("getDefaultDesktop", "onNext: " + baseResponse); if (baseResponse.code == OK) { ForceDownloadData desktopInfo = baseResponse.data; - String jsonString = GsonUtils.toJsonString(desktopInfo); + String jsonString = GsonUtils.toJSONString(desktopInfo); JSONObject data = JSON.parseObject(jsonString); cacheHelper.put(UrlAddress.GET_DESKTOP, jsonString); JGYUtils.getInstance().installDesktop(data); @@ -1099,7 +1108,7 @@ public class NetInterfaceManager { Log.e("setLogoImg", "onNext: " + logoImgBaseResponse.data); if (logoImgBaseResponse.code == OK) { LogoImg logoImg = logoImgBaseResponse.data; - cacheHelper.put(UrlAddress.GET_LOGO_IMG, GsonUtils.toJsonString(logoImg)); + cacheHelper.put(UrlAddress.GET_LOGO_IMG, GsonUtils.toJSONString(logoImg)); String file_url = logoImg.getFile_url(); String file_md5 = logoImg.getFile_md5(); String batch = logoImg.getBatch(); @@ -1165,7 +1174,7 @@ public class NetInterfaceManager { Log.e("getDeveloper", "onNext: " + baseResponse); if (baseResponse.code == OK) { DeveloperBean developerBean = baseResponse.data; - cacheHelper.put(UrlAddress.GET_DEVELOPER, GsonUtils.toJsonString(developerBean)); + cacheHelper.put(UrlAddress.GET_DEVELOPER, GsonUtils.toJSONString(developerBean)); int is_developer = developerBean.getIs_developer(); Log.e("getDeveloper", "onNext: " + is_developer); //后台1是0否 底层0是1否 @@ -1231,7 +1240,7 @@ public class NetInterfaceManager { Log.e("getROMApp", "onNext: " + baseResponse); if (baseResponse.code == OK) { CustomROMApp customROMApp = baseResponse.data; - cacheHelper.put(UrlAddress.GET_ROM_APP, GsonUtils.toJsonString(customROMApp)); + cacheHelper.put(UrlAddress.GET_ROM_APP, GsonUtils.toJSONString(customROMApp)); String packageName = customROMApp.getPackage_name(); Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", packageName); } else { @@ -1329,7 +1338,7 @@ public class NetInterfaceManager { String data = response.data.toString(); if (!TextUtils.isEmpty(data)) { List newList = Arrays.asList(data.split(","));//新的list - cacheHelper.put(UrlAddress.GET_HIDE_DESKTOPICON, GsonUtils.toJsonString(newList)); + cacheHelper.put(UrlAddress.GET_HIDE_DESKTOPICON, GsonUtils.toJSONString(newList)); PackageManager pm = mContext.getPackageManager(); for (String pack : newList) { try { @@ -1408,7 +1417,7 @@ public class NetInterfaceManager { public void onNext(@NonNull NetAndLaunchBean netAndLaunchBean) { Log.e("getAppAutoStart", "onNext: " + netAndLaunchBean.toString()); if (netAndLaunchBean.getCode() == OK) { - cacheHelper.put(UrlAddress.NET_AND_LAUNCH_API, GsonUtils.toJsonString(netAndLaunchBean)); + cacheHelper.put(UrlAddress.NET_AND_LAUNCH_API, GsonUtils.toJSONString(netAndLaunchBean)); JGYUtils.getInstance().setNetAndlaunch(netAndLaunchBean); } else { cacheHelper.put(UrlAddress.NET_AND_LAUNCH_API, ""); @@ -1488,7 +1497,7 @@ public class NetInterfaceManager { Log.e("getAppIDControl", "onNext: " + baseResponse); if (baseResponse.code == OK) { AppID appID = baseResponse.data; - cacheHelper.put(UrlAddress.GET_APPID, GsonUtils.toJsonString(appID)); + cacheHelper.put(UrlAddress.GET_APPID, GsonUtils.toJSONString(appID)); String ids = appID.getIds(); String packages = appID.getPackages(); if (appID == null) { @@ -1518,6 +1527,63 @@ public class NetInterfaceManager { }; } + public void getSnAppAttr(BehaviorSubject lifecycle, onCompleteCallback callback) { + getSnAppAttrObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) + .subscribe(getSnAppAttrObserver(callback)); + } + + public void getSnAppAttr(onCompleteCallback callback) { + getSnAppAttrObservable() + .subscribe(getSnAppAttrObserver(callback)); + } + + public void getSnAppAttr() { + getSnAppAttrObservable() + .subscribe(getSnAppAttrObserver(null)); + } + + public Observer>> getSnAppAttrObserver(onCompleteCallback onCompleteCallback) { + return new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getSnAppAttr", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> baseResponse) { + Log.e("getSnAppAttr", "onNext: " + baseResponse); + if (baseResponse.code == 200) { + List appAttrList = baseResponse.data; + if (appAttrList == null || appAttrList.size() == 0) { + Log.e("getSnAppAttr", "onNext: appAttrList is empty"); + Settings.Global.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_DISABLE_APP, "null"); + } else { + String disableApp = appAttrList.stream() + .filter(appAttr -> appAttr.getIs_open() == 0) + .map(AppAttr::getApp_package) + .collect(Collectors.joining(",")); + Log.e("getSnAppAttr", "onNext: disableApp = " + disableApp); + Settings.Global.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_DISABLE_APP, disableApp); + } + } else { + Settings.Global.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_DISABLE_APP, "null"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getSnAppAttr", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getSnAppAttr", "onComplete: "); + } + }; + } + public void setSystemSetting(boolean refresh, BehaviorSubject lifecycle, onCompleteCallback callback) { ConnectMode connectMode = ConnectMode.ONE_HOUR; @@ -1556,7 +1622,7 @@ public class NetInterfaceManager { Log.e("setSystemSetting", "onNext: " + baseResponse); SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); if (baseResponse.code == OK) { - String data = GsonUtils.toJsonString(baseResponse.data); + String data = GsonUtils.toJSONString(baseResponse.data); Log.e("setSystemSetting", "onNext: " + data); cacheHelper.put(UrlAddress.GET_FIRMWARE, data); //结果保存到本地 @@ -1627,7 +1693,7 @@ public class NetInterfaceManager { Log.e("getEBagCode", "onNext: " + baseResponse); if (baseResponse.code == OK) { EBagCode eBagCode = baseResponse.data; - cacheHelper.put(UrlAddress.GET_EBAG_CODE, GsonUtils.toJsonString(eBagCode)); + cacheHelper.put(UrlAddress.GET_EBAG_CODE, GsonUtils.toJSONString(eBagCode)); String ebagCode = eBagCode.getEbagCode(); SPUtils.put(mContext, "ebagCode", ebagCode); } else { @@ -1787,7 +1853,7 @@ public class NetInterfaceManager { Log.e("getStudesInfo", "onNext: " + studentsInfoBaseResponse.data); if (studentsInfoBaseResponse.code == OK) { studesInfoListener.setStudentsInfo(studentsInfoBaseResponse.data); - cacheHelper.put(UrlAddress.GET_STUDENTS_INFO, GsonUtils.toJsonString(studentsInfoBaseResponse.data)); + cacheHelper.put(UrlAddress.GET_STUDENTS_INFO, GsonUtils.toJSONString(studentsInfoBaseResponse.data)); } else { cacheHelper.put(UrlAddress.GET_STUDENTS_INFO, ""); Log.e("getStudesInfo", "onNext: " + studentsInfoBaseResponse.toString()); @@ -1991,7 +2057,7 @@ public class NetInterfaceManager { public void onNext(@NonNull BaseResponse response) { if (response.code == OK) { String batch = response.data.getBatch(); - cacheHelper.put(CommonConfig.DEVICES_TAG, GsonUtils.toJsonString(response.data)); + cacheHelper.put(CommonConfig.DEVICES_TAG, GsonUtils.toJSONString(response.data)); Log.e(TAG + ":" + "setPushTags", "onNext: " + batch); if (!TextUtils.isEmpty(batch)) { set.add(batch); @@ -2359,7 +2425,7 @@ public class NetInterfaceManager { private void setBrowserBookmarks(BaseResponse browserBookmarksBaseResponse) { if (browserBookmarksBaseResponse.code == 200) { BrowserBookmarks browserBookmarks = browserBookmarksBaseResponse.data; - cacheHelper.put(UrlAddress.SET_HOMEPAG_TAG, GsonUtils.toJsonString(browserBookmarks)); + cacheHelper.put(UrlAddress.SET_HOMEPAG_TAG, GsonUtils.toJSONString(browserBookmarks)); //主页不包含白名单添加进去 String homepagURL = browserBookmarks.getHomepage(); @@ -2453,7 +2519,7 @@ public class NetInterfaceManager { //黑白名单 if (browserDataBaseResponse.code == 200) { BrowserData browserData = browserDataBaseResponse.data; - cacheHelper.put(UrlAddress.SET_BROWSER_LIST, GsonUtils.toJsonString(browserData)); + cacheHelper.put(UrlAddress.SET_BROWSER_LIST, GsonUtils.toJSONString(browserData)); String white = browserData.getWhite(); if (!TextUtils.isEmpty(white)) { if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) { @@ -2540,7 +2606,7 @@ public class NetInterfaceManager { Log.e("getScreenLockState", "onNext: " + response); if (response.code == OK) { ScreenLockState screenLockState = response.data; - cacheHelper.put(UrlAddress.GET_LOCK_SCREEN_STATE, GsonUtils.toJsonString(screenLockState)); + cacheHelper.put(UrlAddress.GET_LOCK_SCREEN_STATE, GsonUtils.toJSONString(screenLockState)); int is_screen_lock = screenLockState.getIs_screen_lock(); String name = screenLockState.getName(); listener.setScreenLockState(is_screen_lock == 1, name); @@ -2617,7 +2683,7 @@ public class NetInterfaceManager { Log.e("getAppLimit", "onNext: " + baseResponse); if (baseResponse.code == 200) { AppLimit appLimit = baseResponse.data; - cacheHelper.put(UrlAddress.SET_WHITE_PACKAGE_LIST, GsonUtils.toJsonString(appLimit)); + cacheHelper.put(UrlAddress.SET_WHITE_PACKAGE_LIST, GsonUtils.toJSONString(appLimit)); String result = appLimit.getResult(); //开机图标 只记录后台传的包名 boolean write = Settings.System.putString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST, result); @@ -2701,7 +2767,7 @@ public class NetInterfaceManager { Log.e("getAllAppList", "onNext: " + listBaseResponse); if (listBaseResponse.code == 200) { List appListInfos = listBaseResponse.data; - cacheHelper.put(UrlAddress.GET_ALL_APP, GsonUtils.toJsonString(appListInfos)); + cacheHelper.put(UrlAddress.GET_ALL_APP, GsonUtils.toJSONString(appListInfos)); getAppAutoStartUpdateAndNet(appListInfos); } else { cacheHelper.put(UrlAddress.GET_ALL_APP, ""); @@ -2922,7 +2988,7 @@ public class NetInterfaceManager { Log.e("getTopApp", "onNext: " + response.data); if (response.code == OK) { String app_package = response.data.getApp_package(); - cacheHelper.put(UrlAddress.GET_TOP_APP_CONTROL, GsonUtils.toJsonString(response.data)); + cacheHelper.put(UrlAddress.GET_TOP_APP_CONTROL, GsonUtils.toJSONString(response.data)); ForegroundAppUtil.setTopAppClass(mContext, app_package); Settings.Global.putString(mContext.getContentResolver(), ForegroundAppUtil.TOPAPP_KEY, app_package); ForegroundAppUtil.openTopApp(mContext); @@ -3069,7 +3135,7 @@ public class NetInterfaceManager { Log.e("getPoweroffTime", "onNext: " + listBaseResponse); if (listBaseResponse.code == 200) { List poweroffBeanList = listBaseResponse.data; - String poweroffTime = GsonUtils.toJsonString(poweroffBeanList); + String poweroffTime = GsonUtils.toJSONString(poweroffBeanList); cacheHelper.put(UrlAddress.GET_POWEROFF_TIME, poweroffTime); mMMKV.encode("poweroffTime", poweroffTime); } else { @@ -3146,7 +3212,7 @@ public class NetInterfaceManager { public void onNext(BaseResponse> listBaseResponse) { Log.e("getWiFiPasswd", "onNext: " + listBaseResponse); if (listBaseResponse.code == OK) { - cacheHelper.put(UrlAddress.GET_WIFI_ALIAS_PW, GsonUtils.toJsonString(listBaseResponse.data)); + cacheHelper.put(UrlAddress.GET_WIFI_ALIAS_PW, GsonUtils.toJSONString(listBaseResponse.data)); WiFiUtils.saveWiFiPasswd(listBaseResponse.data); mMMKV.encode("WiFiPassword", parseString(new Gson().toJson(listBaseResponse.data)).toString()); } else { diff --git a/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java b/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java index 534f638..586aa4d 100644 --- a/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java +++ b/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java @@ -22,6 +22,8 @@ public class UrlAddress { public static final String GET_ROM_APP = "And/getFirmwareApp"; /*获取应用升级自启*/ public static final String NET_AND_LAUNCH_API = "automatic/get"; + /*获取禁用的app包名*/ + public static final String GET_SN_APP_ATTR = "automatic/getSnAppAttr"; /*获取顶部app管控*/ public static final String GET_TOP_APP_CONTROL = "Sn/getSnAppControl"; /*APPID管控*/ diff --git a/app/src/main/java/com/aoleyun/sn/network/api/get/SnAppAttrApi.java b/app/src/main/java/com/aoleyun/sn/network/api/get/SnAppAttrApi.java new file mode 100644 index 0000000..4cb9ec8 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/network/api/get/SnAppAttrApi.java @@ -0,0 +1,18 @@ +package com.aoleyun.sn.network.api.get; + +import com.aoleyun.sn.bean.AppAttr; +import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.network.UrlAddress; + +import java.util.List; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface SnAppAttrApi { + @GET(UrlAddress.GET_SN_APP_ATTR) + Observable>> getSnAppAttr( + @Query("sn") String sn + ); +} diff --git a/app/src/main/java/com/aoleyun/sn/service/RemoteService.java b/app/src/main/java/com/aoleyun/sn/service/RemoteService.java index eab02e5..c94ca3f 100644 --- a/app/src/main/java/com/aoleyun/sn/service/RemoteService.java +++ b/app/src/main/java/com/aoleyun/sn/service/RemoteService.java @@ -5,9 +5,11 @@ import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import android.provider.Settings; +import android.text.TextUtils; import android.util.Log; import com.aoleyun.sn.SystemInfoInterface; +import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.ForegroundAppUtil; @@ -15,6 +17,8 @@ import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.Utils; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class RemoteService extends Service { @@ -89,5 +93,16 @@ public class RemoteService extends Service { } } + + @Override + public List getDisableApp() throws RemoteException { + String disable_app_list = Settings.Global.getString(getContentResolver(), CommonConfig.AOLE_ACTION_DISABLE_APP); + Log.e(TAG, "getDisableApp: " + disable_app_list); + if (TextUtils.isEmpty(disable_app_list)) { + return new ArrayList<>(); + } else { + return new ArrayList<>(Arrays.asList(disable_app_list.split(","))); + } + } }; } 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 63d1008..abb9f5d 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 @@ -60,6 +60,8 @@ public class MainSContact { void getDesktopIcon(); /*获取应用自启升级和网络权限管理*/ void getAppAutoStartUpdateAndNet(); + /*获取禁用app*/ + void getSnAppAttr(); /*获取第三方应用子页面ID连网限制*/ void getAppIDControl(); /*获取第三方应用内部网页跳转屏蔽*/ @@ -134,6 +136,8 @@ public class MainSContact { void getDesktopIconFinish(); /*获取应用自启升级和网络权限管理结束*/ void getAppAutoStartUpdateAndNetFinish(); + /*获取禁用app*/ + void getSnAppAttrFinish(); /*获取第三方应用子页面ID连网限制结束*/ void getAppIDControlFinish(); /*获取第三方应用内部网页跳转屏蔽结束*/ 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 30e7632..ff9fa07 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 @@ -374,6 +374,16 @@ public class MainSPresenter implements MainSContact.Presenter { }); } + @Override + public void getSnAppAttr() { + NetInterfaceManager.getInstance().getSnAppAttr(new NetInterfaceManager.onCompleteCallback() { + @Override + public void onComplete() { + mView.getSnAppAttrFinish(); + } + }); + } + @Override public void getAppIDControl() { NetInterfaceManager.getInstance() 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 ea7c441..bbcb408 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 @@ -1022,6 +1022,11 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void getAppAutoStartUpdateAndNetFinish() { + mPresenter.getSnAppAttr(); + } + + @Override + public void getSnAppAttrFinish() { mPresenter.getAppIDControl(); } diff --git a/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java b/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java index 1653660..e74189b 100644 --- a/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java @@ -30,6 +30,7 @@ import com.aoleyun.sn.bean.ScreenLockState; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.disklrucache.CacheHelper; +import com.aoleyun.sn.gson.GsonUtils; import com.aoleyun.sn.gson.NullStringToEmptyAdapterFactory; import com.aoleyun.sn.manager.MapManager; import com.aoleyun.sn.network.NetInterfaceManager; @@ -43,7 +44,6 @@ import com.aoleyun.sn.utils.BatteryUtils; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.CmdUtil; import com.aoleyun.sn.utils.ForegroundAppUtil; -import com.aoleyun.sn.utils.GsonUtils; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.MySQLData; import com.aoleyun.sn.utils.SPUtils; @@ -182,8 +182,12 @@ public class MessageReceiver extends XGPushBaseReceiver { private final String CLEAN_MEMORY = "47"; /*运行日志设置*/ private final String SN_LOG_SETTING = "48"; + /*禁止应用打开*/ + private final String DISABLE_APP_USAGE = "51"; /*上传电池信息*/ private final String INFO_BATTERY_INFO = "53"; + /*判断是否更新桌面*/ + private final String UPDATE_DESKTOP = "56"; private Context mContext; @@ -802,13 +806,33 @@ public class MessageReceiver extends XGPushBaseReceiver { case SN_LOG_SETTING: senSNLogFile(extras); break; + case DISABLE_APP_USAGE: + disableApp(content, extras); + break; case INFO_BATTERY_INFO: getBatteryInfo(context); + break; + case UPDATE_DESKTOP: + break; default: } } + private void disableApp(String content, String extras) { + JsonObject jsonObject = GsonUtils.getJsonObject(extras); + try { + String packages = jsonObject.get("package").getAsString(); + int is_open = jsonObject.get("is_open").getAsInt(); + if (is_open == 0) { + JGYUtils.getInstance().killBackgroundProcesses(packages); + } + } catch (Exception e) { + Log.e(TAG, "disableApp: " + e.getMessage()); + } + Handler.getMain().postDelayed(() -> NetInterfaceManager.getInstance().getSnAppAttr(), 1234); + } + private void setLock_screen(int state, String name) { if (ServiceAliveUtils.isServiceAlive(mContext)) { mContext.startService(new Intent(mContext, MainService.class)); @@ -816,7 +840,7 @@ public class MessageReceiver extends XGPushBaseReceiver { ScreenLockState screenLockState = new ScreenLockState(); screenLockState.setIs_screen_lock(state); screenLockState.setName(name); - cacheHelper.put(UrlAddress.GET_LOCK_SCREEN_STATE, GsonUtils.toJsonString(screenLockState)); + cacheHelper.put(UrlAddress.GET_LOCK_SCREEN_STATE, GsonUtils.toJSONString(screenLockState)); Intent intent = new Intent(); intent.putExtra("name", name); if (state == 1) { diff --git a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java index e70a7ee..0de09fe 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java @@ -944,6 +944,30 @@ public class ApkUtils { this.add("com.android.calculator2"); this.add("com.qi.TFSystem"); this.add("com.qi.appstore"); + + this.add("com.wyt.evaluating"); + this.add("com.wyt.picturebook"); + this.add("com.hhdd.kadahd"); + this.add("com.wyt.onlinedic"); + this.add("com.ximalaya.ting.kid"); + this.add("com.baidu.duershow.child"); + this.add("com.gl.souti"); + this.add("com.ihuman.pinyin"); + this.add("com.hongen.app.word"); + this.add("com.wyt.parents_assistant"); + this.add("com.wyt.forbitpoint"); + this.add("com.wyt.lessonhelper"); + this.add("com.wyt.wangkexueximvvm"); + this.add("com.wyt.clicktoread"); + this.add("com.robot.app_ai"); + this.add("com.wyt.appstore"); + this.add("air.com.wyt.GLLearnMain"); + this.add("com.wyt.examcenter"); + + this.add("com.gl.compositioncorrection"); + this.add("com.gl.compositioncorrectionen"); + this.add("cn.wps.moffice_eng"); + this.add("com.ckl.launcher"); }}; public static void showAllAPP(Context context) { diff --git a/app/src/main/java/com/aoleyun/sn/utils/GsonUtils.java b/app/src/main/java/com/aoleyun/sn/utils/GsonUtils.java deleted file mode 100644 index 5783ef5..0000000 --- a/app/src/main/java/com/aoleyun/sn/utils/GsonUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.aoleyun.sn.utils; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.io.Serializable; -import java.lang.reflect.Type; - - -public class GsonUtils { - public static JsonObject getJsonObject(String jsonString) { - JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); - return jsonObject; - } - - // TODO: 2022/3/31 暂时没有实现 - public static T getJsonFromType(String jsonString, Class clazz) { - Gson gson = new Gson(); - T t = (T) gson.fromJson(jsonString, clazz); - return t; - } - - public static String toJsonString(Object o) { - return new Gson().toJson(o); - } -} 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 ecf35cf..e617247 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java @@ -1120,10 +1120,12 @@ public class JGYUtils { this.add("com.calendar.uiui"); this.add("com.alarmclock.uiui"); this.add("com.uiui.videoplayer"); - }}; HashSet pkgSet = new HashSet<>(Arrays.asList(packageList.split(","))); pkgSet.addAll(packages); + pkgSet.addAll(ApkUtils.desktopAPP); + pkgSet.addAll(ApkUtils.aoleyunAPP); + pkgSet.addAll(ApkUtils.aihuaApp); pkgSet.removeIf(TextUtils::isEmpty); String aole_app_forbid = String.join(",", pkgSet); Log.e(TAG, "writeAppPackageList: " + aole_app_forbid); @@ -1799,18 +1801,23 @@ public class JGYUtils { } public void removeTask(String packageName) { - List list = getRecentTasks(ActivityManager.getMaxRecentTasksStatic(), getCurrentUserId()); - HashMap taskMap = new HashMap<>(); - for (ActivityManager.RecentTaskInfo info : list) { - taskMap.put(info.realActivity.getPackageName(), info.id); - } - try { - ActivityManagerNative.getDefault().removeTask(taskMap.get(packageName)); - } catch (RemoteException e) { - e.printStackTrace(); - Log.e(TAG, "removeTask: " + e.getMessage()); - } catch (NullPointerException e) { - Log.e(TAG, "removeTask: " + e.getMessage()); + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { + List list = getRecentTasks(ActivityManager.getMaxRecentTasksStatic(), getCurrentUserId()); + HashMap taskMap = new HashMap<>(); + for (ActivityManager.RecentTaskInfo info : list) { + taskMap.put(info.realActivity.getPackageName(), info.id); + } + try { + ActivityManagerNative.getDefault().removeTask(taskMap.get(packageName)); + } catch (RemoteException e) { + e.printStackTrace(); + Log.e(TAG, "removeTask: " + e.getMessage()); + } catch (NullPointerException e) { + Log.e(TAG, "removeTask: " + e.getMessage()); + } + } else { + ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); + // TODO: 2022/10/25 } }