From 6c10b094ce94a5f2aa78cb76e6599e880f49d854 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Wed, 27 May 2026 10:16:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E5=A3=81=E7=BA=B8?= =?UTF-8?q?=EF=BC=8C=E5=BA=94=E7=94=A8=E9=94=81=E5=AF=86=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E4=B9=A6=E7=AD=BE=E5=A4=B1=E6=95=88?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=8A=A4=E7=9C=BC=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E7=AE=A1=E6=8E=A7=EF=BC=8C=E5=AF=B9=E6=8E=A5=E4=B8=93=E6=B3=A8?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 2 +- .../sn/activity/main/MainViewModel.java | 2 + .../com/aoleyun/sn/bean/TimeControlData.java | 21 + .../com/aoleyun/sn/comm/CommonConfig.java | 8 +- .../sn/network/NetInterfaceManager.java | 518 ++++++++++-------- .../network/api/aoleyun/SystemSettingApi.java | 1 + .../java/com/aoleyun/sn/push/PushManager.java | 38 +- .../sn/service/main/MainServiceModel.java | 36 +- .../java/com/aoleyun/sn/utils/JgyUtils.java | 25 +- .../com/aoleyun/sn/utils/SysSettingUtils.java | 47 +- .../main/res/drawable-hdpi/default_avatar.png | Bin 7979 -> 41357 bytes 12 files changed, 448 insertions(+), 254 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0f57d7e..c20cca9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 221 - versionName "1.6.0522" + versionCode 226 + versionName "1.6.05263" //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 6af249d..ff6f07d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ - + 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 index 54fea3a..05e82e5 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainViewModel.java @@ -21,6 +21,7 @@ import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.databinding.ActivityMainBinding; import com.aoleyun.sn.gson.GsonUtils; import com.aoleyun.sn.network.NetInterfaceManager; +import com.aoleyun.sn.network.UrlAddress; import com.aoleyun.sn.utils.AES.CXAESUtil; import com.aoleyun.sn.utils.JgyUtils; import com.aoleyun.sn.utils.Utils; @@ -82,6 +83,7 @@ public class MainViewModel extends BaseViewModel periods; + public int getUse_ctrl() { + return use_ctrl; + } + + public void setUse_ctrl(int use_ctrl) { + this.use_ctrl = use_ctrl; + } + public List getPeriods() { return periods; } @@ -15,4 +30,10 @@ public class TimeControlData implements Serializable { public void setPeriods(List periods) { this.periods = periods; } + + @NonNull + @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 085f0cd..98232cf 100644 --- a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java +++ b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java @@ -117,8 +117,6 @@ public class CommonConfig { public final static String AOLE_APP_ALLOW_INSTALL = "aole_app_allow_install"; /*应用安装白名单*/ public final static String AOLE_ACTION_APP_FORBID = "aole_app_forbid"; - /*公共应用白名单*/ - public final static String AOLE_PUBLIC_APP_INSTALL_WHITELIST = "aole_public_app_install_whitelist_set"; /*强制安装应用,禁止卸载*/ public final static String AOLE_ACTION_FORCE_APP = "aole_force_app"; /*指定应用安装源 非指定包名不能安装apk*/ @@ -189,7 +187,11 @@ 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"; - + /*公共应用白名单*/ + public final static String AOLE_PUBLIC_APP_INSTALL_WHITELIST = "aole_public_app_install_whitelist_set"; + /*分组应用白名单*/ + public final static String AOLE_GROUP_APP_INSTALL_WHITELIST = "aole_group_app_install_whitelist_set"; + /*所有白名单应用*/ public final static String AOLE_ALL_APP_WHITE_LIST_KEY = "aole_all_app_white_list"; /*系统设置菜单选项*/ public final static String AOLE_SETTINGS_DISALLOW = "aole_settings_disallow"; 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 f2ef54e..fc0f2aa 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -1,11 +1,10 @@ package com.aoleyun.sn.network; -import static com.google.gson.JsonParser.parseString; - import android.annotation.SuppressLint; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.StatusBarManager; +import android.app.WallpaperManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -59,7 +58,6 @@ import com.aoleyun.sn.bean.SnSetting; import com.aoleyun.sn.bean.SnTimeControl; import com.aoleyun.sn.bean.StudentsInfo; import com.aoleyun.sn.bean.TimeControlData; -import com.aoleyun.sn.bean.TimeControlInfo; import com.aoleyun.sn.bean.TopApp; import com.aoleyun.sn.bean.Wallpaper; import com.aoleyun.sn.bean.WhitelistBean; @@ -138,7 +136,7 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.functions.BiFunction; -import io.reactivex.rxjava3.functions.Function3; +import io.reactivex.rxjava3.functions.Function4; import io.reactivex.rxjava3.functions.Function6; import io.reactivex.rxjava3.functions.Function7; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -159,6 +157,8 @@ import retrofit2.Retrofit; import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; +import static com.google.gson.JsonParser.parseString; + public class NetInterfaceManager { private static final String TAG = "NetInterfaceManager"; private static final RxCacheManager CACHE_MANAGER = RxCacheManager.getInstance(); @@ -614,7 +614,7 @@ public class NetInterfaceManager { public Observable> getStudesInfoObservable() { return withCache(schedule(getDevicesStatusApi().getStudentsInfo(Utils.getSerial(mContext))), UrlAddress.GET_STUDENTS_INFO, - 720 * CACHE_EXPIRE_ONE_MINUTE); + 15 * CACHE_EXPIRE_ONE_MINUTE); } /** @@ -713,6 +713,7 @@ public class NetInterfaceManager { 10 * CACHE_EXPIRE_ONE_MINUTE); } + @Deprecated public Observable> getSnTimeObservable() { return schedule(getSystemSettingApi().getSnTimeControl(Utils.getSerial(mContext))); } @@ -1171,156 +1172,6 @@ public class NetInterfaceManager { }); } - public void getForceDownload(BehaviorSubject lifecycle, onCompleteCallback callback) { -// getForceDownloadObservable() -// .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) -// .subscribe(getForceDownloadObserver(callback)); - - Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), new BiFunction>, - BaseResponse>, List>() { - @Override - public List apply(BaseResponse> listBaseResponse, BaseResponse> listBaseResponse2) throws Throwable { - List forceDownloadData = new ArrayList<>(); - if (listBaseResponse.isSuccess()) forceDownloadData.addAll(listBaseResponse.data); - if (listBaseResponse2.isSuccess()) forceDownloadData.addAll(listBaseResponse2.data); - return forceDownloadData; - } - }) - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getForceDownloadListObserver(callback)); - - } - - public void getForceDownload(onCompleteCallback callback) { -// getForceDownloadObservable() -// .subscribe(getForceDownloadObserver(callback)); - Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), new BiFunction>, - BaseResponse>, List>() { - @Override - public List apply(BaseResponse> listBaseResponse, BaseResponse> listBaseResponse2) throws Throwable { - List forceDownloadData = new ArrayList<>(); - if (listBaseResponse.isSuccess()) forceDownloadData.addAll(listBaseResponse.data); - if (listBaseResponse2.isSuccess()) forceDownloadData.addAll(listBaseResponse2.data); - return forceDownloadData; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getForceDownloadListObserver(callback)); - } - - public void getForceDownload() { - removeCache(UrlAddress.GET_FORCE_INSTALL_LIST); - removeCache(UrlAddress.GROUP_APP_INSTALL_LIST); -// getForceDownloadObservable() -// .subscribe(getForceDownloadObserver(null)); - Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), new BiFunction>, - BaseResponse>, List>() { - @Override - public List apply(BaseResponse> listBaseResponse, BaseResponse> listBaseResponse2) throws Throwable { - List forceDownloadData = new ArrayList<>(); - if (listBaseResponse.isSuccess()) forceDownloadData.addAll(listBaseResponse.data); - if (listBaseResponse2.isSuccess()) forceDownloadData.addAll(listBaseResponse2.data); - return forceDownloadData; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getForceDownloadListObserver(null)); - } - - @Deprecated - private Observer>> getForceDownloadObserver(onCompleteCallback callback) { - return new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getForceDownload", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> forceDownloadBean) { - Log.e("getForceDownload", "onNext: " + forceDownloadBean); - if (forceDownloadBean.isSuccess()) { - List forceDownloadData = forceDownloadBean.data; - Aria.download(this).resumeAllTask(); - JgyUtils.getInstance().forceDownload(forceDownloadData); - List forceApp = forceDownloadData.stream().map(ForceDownloadData::getApp_package).collect(Collectors.toList()); - Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, String.join(",", forceApp)); - if (JgyUtils.isAllWinnerDevice()) { - AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(forceApp); - } - } else if (forceDownloadBean.code == -200) { - Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, "invalid"); - if (JgyUtils.isAllWinnerDevice()) { - AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(new ArrayList<>()); - } - } else { - Log.e("getForceDownload", forceDownloadBean.msg); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getForceDownload", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getForceDownload", "onComplete: "); - if (callback != null) { - callback.onComplete(); - } - } - }; - } - - private Observer> getForceDownloadListObserver(onCompleteCallback callback) { - return new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getForceDownload", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull List forceDownloadBean) { - Log.e("getForceDownload", "onNext: " + forceDownloadBean); - if (forceDownloadBean != null && !forceDownloadBean.isEmpty()) { - Aria.download(this).resumeAllTask(); - JgyUtils.getInstance().forceDownload(forceDownloadBean); - List forceApp = forceDownloadBean.stream().map(ForceDownloadData::getApp_package).collect(Collectors.toList()); - boolean aole_force_app = Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, String.join(",", forceApp)); - Log.e("getForceDownload", "aole_force_app:" + aole_force_app); - if (JgyUtils.isAllWinnerDevice()) { - AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(forceApp); - } - } else { - boolean aole_force_app = Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, "invalid"); - Log.e("getForceDownload", "aole_force_app:" + aole_force_app); - if (JgyUtils.isAllWinnerDevice()) { - AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(new ArrayList<>()); - } - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getForceDownload", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getForceDownload", "onComplete: "); - if (callback != null) { - callback.onComplete(); - } - } - }; - } - public void getDefaultDesktop(BehaviorSubject lifecycle, onCompleteCallback callback) { Observable.zip(getDesktopObservable(), getDesktopsDiyUpdate(), new BiFunction, BaseResponse, List>() { @Override @@ -2951,9 +2802,218 @@ public class NetInterfaceManager { }); } - public void getAppLimit(BehaviorSubject lifecycle, onCompleteCallback callback) { - Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getBiFunction()) + // TODO: 2026/5/25 白名单应用统一由这里完成 + public void getAllApp() { + Observable.zip(getAllForceDownloadObservable(), getAllAppObservable(), getAllAppBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getAllAppObserver()); + } + + private BiFunction, List, Set> getAllAppBiFunction() { + return new BiFunction, List, Set>() { + @Override + public Set apply(List forceDownloadData, List strings) throws Throwable { + return null; + } + }; + } + + private Observer> getAllAppObserver() { + return new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull Set strings) { + + } + + @Override + public void onError(@NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }; + } + + private Observable> getAllForceDownloadObservable() { + return Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), getForceDownloadBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public void getForceDownload(BehaviorSubject lifecycle, onCompleteCallback callback) { +// getForceDownloadObservable() +// .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) +// .subscribe(getForceDownloadObserver(callback)); + + Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), getForceDownloadBiFunction()) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getForceDownloadListObserver(callback)); + + } + + public void getForceDownload(onCompleteCallback callback) { +// getForceDownloadObservable() +// .subscribe(getForceDownloadObserver(callback)); + Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), getForceDownloadBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getForceDownloadListObserver(callback)); + } + + public void getForceDownload() { + removeCache(UrlAddress.GET_FORCE_INSTALL_LIST); + removeCache(UrlAddress.GROUP_APP_INSTALL_LIST); +// getForceDownloadObservable() +// .subscribe(getForceDownloadObserver(null)); + Observable.zip(getForceDownloadObservable(), getGroupForceDownloadObservable(), getForceDownloadBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getForceDownloadListObserver(null)); + } + + private BiFunction>, BaseResponse>, List> getForceDownloadBiFunction() { + return new BiFunction>, BaseResponse>, List>() { + @Override + public List apply(BaseResponse> listBaseResponse, BaseResponse> listBaseResponse2) throws Throwable { + List forceDownloadData = new ArrayList<>(); + if (listBaseResponse.isSuccess()) { + forceDownloadData.addAll(listBaseResponse.data); + } else { + + } + if (listBaseResponse2.isSuccess()) { + List forceDownloadData2 = listBaseResponse2.data; + forceDownloadData.addAll(forceDownloadData2); + Set whitePackages2 = forceDownloadData2.stream().map(new Function() { + @Override + public String apply(ForceDownloadData forceDownloadData) { + return forceDownloadData.getApp_package(); + } + }).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.AOLE_GROUP_APP_INSTALL_WHITELIST, whitePackages2); + } else { + mMMKV.remove(CommonConfig.AOLE_GROUP_APP_INSTALL_WHITELIST); + } + + return forceDownloadData; + } + }; + } + + private Observer> getForceDownloadListObserver(onCompleteCallback callback) { + return new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getForceDownload", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull List forceDownloadBean) { + Log.e("getForceDownload", "onNext: " + forceDownloadBean); + if (forceDownloadBean != null && !forceDownloadBean.isEmpty()) { + Aria.download(this).resumeAllTask(); + JgyUtils.getInstance().forceDownload(forceDownloadBean); + List forceApp = forceDownloadBean.stream().map(ForceDownloadData::getApp_package).collect(Collectors.toList()); + boolean aole_force_app = Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, String.join(",", forceApp)); + Log.e("getForceDownload", "aole_force_app:" + aole_force_app); + if (JgyUtils.isAllWinnerDevice()) { + AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(forceApp); + } + } else { + boolean aole_force_app = Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, "invalid"); + Log.e("getForceDownload", "aole_force_app:" + aole_force_app); + if (JgyUtils.isAllWinnerDevice()) { + AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(new ArrayList<>()); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getForceDownload", "onError: " + e.getMessage()); + if (callback != null) { + callback.onComplete(); + } + } + + @Override + public void onComplete() { + Log.e("getForceDownload", "onComplete: "); + if (callback != null) { + callback.onComplete(); + } + } + }; + } + + @Deprecated + private Observer>> getForceDownloadObserver(onCompleteCallback callback) { + return new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getForceDownload", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> forceDownloadBean) { + Log.e("getForceDownload", "onNext: " + forceDownloadBean); + if (forceDownloadBean.isSuccess()) { + List forceDownloadData = forceDownloadBean.data; + Aria.download(this).resumeAllTask(); + JgyUtils.getInstance().forceDownload(forceDownloadData); + List forceApp = forceDownloadData.stream().map(ForceDownloadData::getApp_package).collect(Collectors.toList()); + Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, String.join(",", forceApp)); + if (JgyUtils.isAllWinnerDevice()) { + AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(forceApp); + } + } else if (forceDownloadBean.code == -200) { + Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_FORCE_APP, "invalid"); + if (JgyUtils.isAllWinnerDevice()) { + AllwinnerCubeMdmManager.getInstance().setForbidUnInstallPackageList(new ArrayList<>()); + } + } else { + Log.e("getForceDownload", forceDownloadBean.msg); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getForceDownload", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getForceDownload", "onComplete: "); + if (callback != null) { + callback.onComplete(); + } + } + }; + } + + private Observable> getAllAppObservable() { + return Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getGroupForceDownloadObservable(), getBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public void getAppLimit(BehaviorSubject lifecycle, onCompleteCallback callback) { + Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getGroupForceDownloadObservable(), getBiFunction()) + .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(getAppLimitListObserver(callback)); // getAppLimitObservable() // .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) @@ -2961,7 +3021,9 @@ public class NetInterfaceManager { } public void getAppLimit(onCompleteCallback callback) { - Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getBiFunction()) + Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getGroupForceDownloadObservable(), getBiFunction()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(getAppLimitListObserver(callback)); // getAppLimitObservable() // .subscribe(getAppLimitObserver(callback)); @@ -2971,21 +3033,23 @@ public class NetInterfaceManager { removeCache(UrlAddress.SET_WHITE_PACKAGE_LIST); removeCache(UrlAddress.GET_ADMIN_APP); removeCache(UrlAddress.HTTP_TAG_COMMOAPP); - Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getBiFunction()) + removeCache(UrlAddress.GROUP_APP_INSTALL_LIST); + Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getGroupForceDownloadObservable(), getBiFunction()) .subscribe(getAppLimitListObserver(null)); // getAppLimitObservable() // .subscribe(getAppLimitObserver(null)); } private void getAppLimitList() { - Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getBiFunction()) + Observable.zip(getAppLimitObservable(), getAdminAppObservable(), getRankCommonAppObservable(), getGroupForceDownloadObservable(), getBiFunction()) .subscribe(getAppLimitListObserver(null)); } - private Function3, BaseResponse>, BaseResponse>, List> getBiFunction() { - return new Function3, BaseResponse>, BaseResponse>, List>() { + private Function4, BaseResponse>, BaseResponse>, BaseResponse>, List> getBiFunction() { + return new Function4, BaseResponse>, BaseResponse>, BaseResponse>, List>() { @Override - public List apply(BaseResponse appLimitBaseResponse, BaseResponse> listBaseResponse, BaseResponse> appDateInfoResponse) throws Throwable { + public List apply(BaseResponse appLimitBaseResponse, BaseResponse> adminAppBaseResponse, + BaseResponse> rankAppResponse, BaseResponse> groupForcebaseResponse) throws Throwable { List appNames = new ArrayList<>(); if (appLimitBaseResponse.isSuccess()) { AppLimit appLimit = appLimitBaseResponse.data; @@ -2993,8 +3057,8 @@ public class NetInterfaceManager { List pkgs = new ArrayList<>(Arrays.asList(result.split(","))); appNames.addAll(pkgs); } - if (listBaseResponse.isSuccess()) { - List appDateInfos = listBaseResponse.data; + if (adminAppBaseResponse.isSuccess()) { + List appDateInfos = adminAppBaseResponse.data; Set pkgs = appDateInfos.stream().map(new Function() { @Override public String apply(AppDateInfo appDateInfo) { @@ -3003,8 +3067,8 @@ public class NetInterfaceManager { }).collect(Collectors.toSet()); appNames.addAll(pkgs); } - if (appDateInfoResponse.isSuccess()) { - List appDateInfos = appDateInfoResponse.data; + if (rankAppResponse.isSuccess()) { + List appDateInfos = rankAppResponse.data; Set pkgs = appDateInfos.stream().map(new Function() { @Override public String apply(AppDateInfo appDateInfo) { @@ -3016,6 +3080,20 @@ public class NetInterfaceManager { } else { mMMKV.remove(CommonConfig.AOLE_PUBLIC_APP_INSTALL_WHITELIST); } + + if (groupForcebaseResponse.isSuccess()) { + List groupAppInfoList = groupForcebaseResponse.data; + Set whitePackages2 = groupAppInfoList.stream().map(new Function() { + @Override + public String apply(ForceDownloadData forceDownloadData) { + return forceDownloadData.getApp_package(); + } + }).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.AOLE_GROUP_APP_INSTALL_WHITELIST, whitePackages2); + appNames.addAll(whitePackages2); + } else { + mMMKV.remove(CommonConfig.AOLE_GROUP_APP_INSTALL_WHITELIST); + } return appNames; } }; @@ -3074,31 +3152,31 @@ public class NetInterfaceManager { public void getAllInfoAndSetting(BehaviorSubject lifecycle) { Observable.zip(getAllAppControl(), getAppAutoStartUpdateAndNetObservable(), new BiFunction>, BaseResponse>, List>() { - @Override - public List apply(BaseResponse> appListInfoResponse, BaseResponse> netAndLaunchDataResponse) throws Throwable { - Log.e("getAllInfoAndSetting", "apply: appListInfoResponse code = " + appListInfoResponse.code); - Log.e("getAllInfoAndSetting", "apply: netAndLaunchDataResponse code = " + netAndLaunchDataResponse.code); + @Override + public List apply(BaseResponse> appListInfoResponse, BaseResponse> netAndLaunchDataResponse) throws Throwable { + Log.e("getAllInfoAndSetting", "apply: appListInfoResponse code = " + appListInfoResponse.code); + Log.e("getAllInfoAndSetting", "apply: netAndLaunchDataResponse code = " + netAndLaunchDataResponse.code); - if (appListInfoResponse.isSuccess() && netAndLaunchDataResponse.isSuccess()) { - List appListInfos = appListInfoResponse.data; - Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); - mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); + if (appListInfoResponse.isSuccess() && netAndLaunchDataResponse.isSuccess()) { + List appListInfos = appListInfoResponse.data; + Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); - List netAndLaunchDataList = netAndLaunchDataResponse.data; - JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList, appListInfos); - return appListInfos; - } else if (appListInfoResponse.isSuccess()) { - List appListInfos = appListInfoResponse.data; - Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); - mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); - return appListInfos; - } else if (netAndLaunchDataResponse.isSuccess()) { - List netAndLaunchDataList = netAndLaunchDataResponse.data; - JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList); - } - return null; - } - }) + List netAndLaunchDataList = netAndLaunchDataResponse.data; + JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList, appListInfos); + return appListInfos; + } else if (appListInfoResponse.isSuccess()) { + List appListInfos = appListInfoResponse.data; + Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); + return appListInfos; + } else if (netAndLaunchDataResponse.isSuccess()) { + List netAndLaunchDataList = netAndLaunchDataResponse.data; + JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList); + } + return null; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) @@ -3128,31 +3206,31 @@ public class NetInterfaceManager { @Deprecated public void getAllInfoAndSetting() { Observable.zip(getAllAppControl(), getAppAutoStartUpdateAndNetObservable(), new BiFunction>, BaseResponse>, List>() { - @Override - public List apply(BaseResponse> appListInfoResponse, BaseResponse> netAndLaunchDataResponse) throws Throwable { - Log.e("getAllInfoAndSetting", "apply: appListInfoResponse code = " + appListInfoResponse.code); - Log.e("getAllInfoAndSetting", "apply: netAndLaunchDataResponse code = " + netAndLaunchDataResponse.code); + @Override + public List apply(BaseResponse> appListInfoResponse, BaseResponse> netAndLaunchDataResponse) throws Throwable { + Log.e("getAllInfoAndSetting", "apply: appListInfoResponse code = " + appListInfoResponse.code); + Log.e("getAllInfoAndSetting", "apply: netAndLaunchDataResponse code = " + netAndLaunchDataResponse.code); - if (appListInfoResponse.isSuccess() && netAndLaunchDataResponse.isSuccess()) { - List appListInfos = appListInfoResponse.data; - Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); - mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); + if (appListInfoResponse.isSuccess() && netAndLaunchDataResponse.isSuccess()) { + List appListInfos = appListInfoResponse.data; + Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); - List netAndLaunchDataList = netAndLaunchDataResponse.data; - JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList, appListInfos); - return appListInfos; - } else if (appListInfoResponse.isSuccess()) { - List appListInfos = appListInfoResponse.data; - Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); - mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); - return appListInfos; - } else if (netAndLaunchDataResponse.isSuccess()) { - List netAndLaunchDataList = netAndLaunchDataResponse.data; - JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList); - } - return null; - } - }) + List netAndLaunchDataList = netAndLaunchDataResponse.data; + JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList, appListInfos); + return appListInfos; + } else if (appListInfoResponse.isSuccess()) { + List appListInfos = appListInfoResponse.data; + Set pkgList = appListInfos.stream().map(AppListInfo::getApp_package).collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ALL_APP_PKG_SET, pkgList); + return appListInfos; + } else if (netAndLaunchDataResponse.isSuccess()) { + List netAndLaunchDataList = netAndLaunchDataResponse.data; + JgyUtils.getInstance().setNetAndlaunch(netAndLaunchDataList); + } + return null; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>() { @@ -3303,8 +3381,7 @@ public class NetInterfaceManager { @Deprecated public void getSnTimeControl() { - getSnTimeObservable() - .subscribe(getSnTimeObserver(null)); + getSnTimeObservable().subscribe(getSnTimeObserver(null)); } @Deprecated @@ -3377,8 +3454,7 @@ public class NetInterfaceManager { Log.e("getTimeObserver", "onNext: " + response); if (response.isSuccess()) { TimeControlData timeControlData = response.data; - List periods = timeControlData.getPeriods(); - mMMKV.encode(CommonConfig.TIME_CONTROL_DATA_KEY, GsonUtils.toJSONString(periods)); + mMMKV.encode(CommonConfig.TIME_CONTROL_DATA_KEY, GsonUtils.toJSONString(timeControlData)); } else { mMMKV.remove(CommonConfig.TIME_CONTROL_DATA_KEY); } @@ -4208,6 +4284,7 @@ public class NetInterfaceManager { } public void getWallpaper() { + removeCache(UrlAddress.GET_WALLPAPER); getWallpaperObservable() .subscribe(getWallpaperObserver(null)); } @@ -4233,6 +4310,13 @@ public class NetInterfaceManager { String url = wallpaper.getFile_url(); JgyUtils.getInstance().setWallpaper(url); } else { + WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext); + try { + wallpaperManager.clear(); + wallpaperManager.clear(WallpaperManager.FLAG_LOCK); + } catch (IOException e) { + e.printStackTrace(); + } mMMKV.encode(CommonConfig.WALLPAPER_URL_KEY, ""); } } diff --git a/app/src/main/java/com/aoleyun/sn/network/api/aoleyun/SystemSettingApi.java b/app/src/main/java/com/aoleyun/sn/network/api/aoleyun/SystemSettingApi.java index 6f50d9b..f186fac 100644 --- a/app/src/main/java/com/aoleyun/sn/network/api/aoleyun/SystemSettingApi.java +++ b/app/src/main/java/com/aoleyun/sn/network/api/aoleyun/SystemSettingApi.java @@ -48,6 +48,7 @@ public interface SystemSettingApi { ); @GET(UrlAddress.GET_SN_TIME_CONTROL) + @Deprecated Observable> getSnTimeControl( @Query("sn") String sn ); 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 5125646..e17d301 100644 --- a/app/src/main/java/com/aoleyun/sn/push/PushManager.java +++ b/app/src/main/java/com/aoleyun/sn/push/PushManager.java @@ -203,6 +203,8 @@ public class PushManager { private static final String UPDATE_BATCH = "37"; /*添加wifi*/ private static final String UPDATE_WIFI_PW = "38"; + /*应用密码锁*/ + private static final String APP_LOCK_PASSWD = "39"; /*远程关机*/ private static final String DEVICES_SHUTDOWN_NOW = "40"; /*远程定时关机*/ @@ -325,15 +327,22 @@ public class PushManager { Toaster.debugShow("收到管控:应用安装"); NetInterfaceManager.removeCache(UrlAddress.GET_FORCE_INSTALL_LIST); NetInterfaceManager.removeCache(UrlAddress.GROUP_APP_INSTALL_LIST); - doDownloadAndInstall(extras); new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { + NetInterfaceManager.getInstance().getAppLimit(); NetInterfaceManager.getInstance().getDesktopIcon(); NetInterfaceManager.getInstance().getDefaultDesktop(); NetInterfaceManager.getInstance().getAppAutoStartUpdateAndNet(); } - }, 5234); + }, 2345); + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + doDownloadAndInstall(extras); + } + }, 4321); + mContext.sendBroadcast(new Intent(AOLEYUN_REFRESH_DESKTOP)); break; case MSG_LOCK: @@ -358,7 +367,25 @@ public class PushManager { case GET_FORCEDOWNLOADURL: case GROUP_APP_INSTALL: Toaster.debugShow("收到管控:应用强制安装"); - downloadForceInstallApk(extras); + NetInterfaceManager.removeCache(UrlAddress.GET_FORCE_INSTALL_LIST); + NetInterfaceManager.removeCache(UrlAddress.GROUP_APP_INSTALL_LIST); + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + NetInterfaceManager.getInstance().getAppLimit(); + NetInterfaceManager.getInstance().getDesktopIcon(); + NetInterfaceManager.getInstance().getDefaultDesktop(); + NetInterfaceManager.getInstance().getAppAutoStartUpdateAndNet(); + } + }, 2345); + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + downloadForceInstallApk(extras); + } + }, 4321); + + mContext.sendBroadcast(new Intent(AOLEYUN_REFRESH_DESKTOP)); break; case SET_HOMEPAG_TAG: new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @@ -575,6 +602,9 @@ public class PushManager { case UPDATE_WIFI_PW: NetInterfaceManager.getInstance().getWiFiPasswd(); break; + case APP_LOCK_PASSWD: + mContext.sendBroadcast(new Intent(AOLEYUN_REFRESH_DESKTOP)); + break; case DEVICES_SHUTDOWN_NOW: JgyUtils.getInstance().shutdown(); break; @@ -1124,7 +1154,7 @@ public class PushManager { } private void getTimeControl(String extras) { - NetInterfaceManager.getInstance().getSnTimeControl(); +// NetInterfaceManager.getInstance().getSnTimeControl(); NetInterfaceManager.getInstance().getTimeControl(); } diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainServiceModel.java b/app/src/main/java/com/aoleyun/sn/service/main/MainServiceModel.java index b911ce1..5a1927b 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainServiceModel.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainServiceModel.java @@ -299,23 +299,21 @@ public class MainServiceModel extends ViewModel { } public void getAppLimit() { - NetInterfaceManager.getInstance() - .getAppLimit(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { - @Override - public void onComplete() { + NetInterfaceManager.getInstance().getAppLimit(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { + @Override + public void onComplete() { - } - }); + } + }); } public void getForceDownload() { - NetInterfaceManager.getInstance() - .getForceDownload(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { - @Override - public void onComplete() { + NetInterfaceManager.getInstance().getForceDownload(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { + @Override + public void onComplete() { - } - }); + } + }); } public void getDefaultDesktop() { @@ -477,13 +475,13 @@ public class MainServiceModel extends ViewModel { } public void getSnTimeControl() { - NetInterfaceManager.getInstance() - .getSnTimeControl(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { - @Override - public void onComplete() { - - } - }); +// NetInterfaceManager.getInstance() +// .getSnTimeControl(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { +// @Override +// public void onComplete() { +// +// } +// }); NetInterfaceManager.getInstance() .getTimeControl(getLifecycle(), new NetInterfaceManager.onCompleteCallback() { @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 fef3110..88a471c 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java @@ -1,7 +1,5 @@ package com.aoleyun.sn.utils; -import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE; - import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.ActivityManagerNative; @@ -57,6 +55,7 @@ import com.aoleyun.sn.bean.LessonJson; import com.aoleyun.sn.bean.NetAndLaunchData; import com.aoleyun.sn.bean.TTAppground; import com.aoleyun.sn.bean.TimeControlApp; +import com.aoleyun.sn.bean.TimeControlData; import com.aoleyun.sn.bean.TimeControlInfo; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; @@ -126,6 +125,8 @@ import io.reactivex.rxjava3.core.ObservableOnSubscribe; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; +import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE; + public class JgyUtils { private static final String TAG = "JgyUtils"; @@ -146,6 +147,9 @@ public class JgyUtils { private LessonJson mLessonJson; private TimeUtils.ContralTime mContralTime; + //1不能使用,0可用 + private int mUseCtrl = 1; + private List mAppPeriods; public static final int UnknowPlatform = 0; @@ -3913,14 +3917,17 @@ public class JgyUtils { return; } Gson gson = new Gson(); - Type type = new TypeToken>() { + Type type = new TypeToken() { }.getType(); try { - mAppPeriods = gson.fromJson(jsonString, type); + TimeControlData timeControlData = gson.fromJson(jsonString, type); + mAppPeriods = timeControlData.getPeriods(); + mUseCtrl = timeControlData.getUse_ctrl(); Log.e(TAG, "checkTimePeriod: periods = " + mAppPeriods); checkTimePeriod(); } catch (Exception e) { Log.e(TAG, "checkTimePeriod: Exception = " + e.getMessage()); + mMMKV.remove(CommonConfig.TIME_CONTROL_DATA_KEY); } } @@ -3958,7 +3965,12 @@ public class JgyUtils { if (packageNames.contains(foregroundPackage)) { Log.e(TAG, "checkTimePeriod: " + foregroundPackage + " skip"); } else { - gotoLauncher(); + Log.e(TAG, "checkTimePeriod: " + mUseCtrl); + if (mUseCtrl != 0) { + gotoLauncher(); + } else { + Log.d(TAG, "checkTimePeriod: allowed app start"); + } } } @@ -3999,7 +4011,8 @@ public class JgyUtils { if (packageNames.contains(pkgName)) { return true; } else { - return false; + Log.e(TAG, "checkTimePeriod: " + mUseCtrl); + return mUseCtrl == 0; } } diff --git a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java index 4e14d38..a941ee0 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java @@ -3,13 +3,16 @@ package com.aoleyun.sn.utils; import android.annotation.SuppressLint; import android.app.StatusBarManager; import android.bluetooth.BluetoothAdapter; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import com.aoleyun.sn.BuildConfig; +import com.aoleyun.sn.activity.EyeProtectionActivity; import com.aoleyun.sn.activity.main.MainActivity; import com.aoleyun.sn.bean.BluetoothType; import com.aoleyun.sn.bean.SnSetting; @@ -73,7 +76,7 @@ public class SysSettingUtils { setPanelShow(context, jsonObject); setDisAllowCamera(context, jsonObject); setSettingsMenuShow(context, jsonObject); - + setEyeProtectionModeEntrance(context, jsonObject); } /** @@ -109,7 +112,7 @@ public class SysSettingUtils { setSystemAppDisable(context, 0); setNotification(context, 0); setSettingsMenuShow(context); - + setEyeProtectionModeEntrance(context, 0); } /** @@ -138,6 +141,7 @@ public class SysSettingUtils { setAdminApp(context, 0); setSystemAppDisable(context, 0); setNotification(context, 1); + setEyeProtectionModeEntrance(context, 1); } public static void openMtp(Context context) { @@ -1365,4 +1369,43 @@ public class SysSettingUtils { private static void setSettingsMenuShow(Context context) { Settings.System.putString(context.getContentResolver(), CommonConfig.AOLE_SETTINGS_DISALLOW, ""); } + + private static void setEyeProtectionModeEntrance(Context context, JsonObject jsonObject) { + Log.e(TAG, "setEyeProtectionModeEntrance: " + jsonObject); + if (jsonObject.has("eye_protection_mode_entrance")) { + int app_management_general = jsonObject.get("eye_protection_mode_entrance").getAsInt(); + if (app_management_general == 0) { + // 禁用 Launcher 入口 + setComponentEnabledSetting(context, PackageManager.COMPONENT_ENABLED_STATE_DISABLED); + } else { + // 启用 Launcher 入口 + setComponentEnabledSetting(context, PackageManager.COMPONENT_ENABLED_STATE_ENABLED); + } + } else { + setComponentEnabledSetting(context, PackageManager.COMPONENT_ENABLED_STATE_DISABLED); + } + } + + private static void setEyeProtectionModeEntrance(Context context, int status) { + Log.e(TAG, "setEyeProtectionModeEntrance: status = " + status); + if (status == 0) { + setComponentEnabledSetting(context, PackageManager.COMPONENT_ENABLED_STATE_DISABLED); + } else { + setComponentEnabledSetting(context, PackageManager.COMPONENT_ENABLED_STATE_ENABLED); + } + } + + private static boolean setComponentEnabledSetting(Context context, int componentState) { + Log.e(TAG, "setComponentEnabledSetting: componentState = " + componentState); + + PackageManager pm = context.getPackageManager(); + ComponentName componentName = new ComponentName(context, EyeProtectionActivity.class); + try { + pm.setComponentEnabledSetting(componentName, componentState, PackageManager.DONT_KILL_APP); + return true; + } catch (Exception e) { + Log.e(TAG, "setComponentEnabledSetting: " + e.getMessage()); + } + return false; + } } diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png index a00c8dcf706cccc7af2668754dddc29a5aa93b8f..38cd7fb6dbafc56a043d951b2dbc55849b628b1e 100644 GIT binary patch literal 41357 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 literal 7979 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