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 a00c8dc..38cd7fb 100644 Binary files a/app/src/main/res/drawable-hdpi/default_avatar.png and b/app/src/main/res/drawable-hdpi/default_avatar.png differ