From 132000b4e15ea59d6bb92d2c51a632a9961fb70a Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Mon, 13 Jul 2026 16:19:59 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=20=E4=BF=AE=E6=94=B9=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=95=8C=E9=9D=A2=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 2 +- .../aoleyun/sn/disklrucache/CacheHelper.java | 101 +++-- .../sn/network/NetInterfaceManager.java | 364 +++++++++--------- .../java/com/aoleyun/sn/utils/JgyUtils.java | 10 +- .../res/drawable-hdpi/com_aoleyun_update.png | Bin 24845 -> 9375 bytes app/src/main/res/layout/activity_update.xml | 2 +- build.gradle | 2 +- 8 files changed, 243 insertions(+), 243 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 228b948..b890c74 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 228 - versionName "1.6.0629-2" + versionCode 229 + versionName "1.6.0711" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 24 @@ -776,6 +776,7 @@ dependencies { //Google implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.zxing:core:3.5.0' +// implementation 'com.google.mlkit:face-detection:16.1.7' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.13.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d859b29..baee31b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -214,7 +214,7 @@ android:name=".activity.update.UpdateActivity" android:exported="true" android:icon="@drawable/com_aoleyun_update" - android:label="检查更新" + android:label="策略更新" android:launchMode="singleInstance"> diff --git a/app/src/main/java/com/aoleyun/sn/disklrucache/CacheHelper.java b/app/src/main/java/com/aoleyun/sn/disklrucache/CacheHelper.java index d07d112..e264bcd 100644 --- a/app/src/main/java/com/aoleyun/sn/disklrucache/CacheHelper.java +++ b/app/src/main/java/com/aoleyun/sn/disklrucache/CacheHelper.java @@ -6,10 +6,7 @@ import android.graphics.drawable.Drawable; import android.os.Environment; import android.util.Log; -import com.aoleyun.sn.comm.CommonConfig; import com.jakewharton.disklrucache.DiskLruCache; -import com.tencent.mmkv.BuildConfig; -import com.tencent.mmkv.MMKV; import org.json.JSONArray; import org.json.JSONException; @@ -20,29 +17,28 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Serializable; +import java.nio.charset.StandardCharsets; /** * 磁盘缓存帮助类 + * https://www.cnblogs.com/aademeng/articles/6817058.html */ public class CacheHelper { - private static final String TAG = "CacheHelper"; - - private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private static final String TAG = "DiskLruCacheHelper"; private static final String DIR_NAME = "diskCache"; private static final int MAX_COUNT = 1024 * 1024 * 1024; private static final int DEFAULT_APP_VERSION = 1; private DiskLruCache mDiskLruCache; - private Context mContext; public CacheHelper(Context context) { - this.mContext = context; mDiskLruCache = generateCache(context, DIR_NAME, MAX_COUNT); } @@ -75,9 +71,8 @@ public class CacheHelper { int appVersion = context == null ? DEFAULT_APP_VERSION : Utils.getAppVersion(context); - DiskLruCache diskLruCache = null; try { - diskLruCache = DiskLruCache.open( + return DiskLruCache.open( dir, appVersion, DEFAULT_APP_VERSION, @@ -85,13 +80,12 @@ public class CacheHelper { } catch (IOException e) { e.printStackTrace(); } - return diskLruCache; + return null; } private DiskLruCache generateCache(Context context, String dirName, int maxCount) { - DiskLruCache diskLruCache = null; try { - diskLruCache = DiskLruCache.open( + return DiskLruCache.open( getDiskCacheDir(context, dirName), Utils.getAppVersion(context), DEFAULT_APP_VERSION, @@ -99,7 +93,7 @@ public class CacheHelper { } catch (IOException e) { e.printStackTrace(); } - return diskLruCache; + return null; } // ======================================= @@ -107,9 +101,7 @@ public class CacheHelper { // ======================================= public void put(String key, String value) { - Log.e(TAG, "put: " + key); - mMMKV.encode(key + "_time", System.currentTimeMillis()); - mMMKV.encode(key + "_mmkv", value); + Log.e(TAG, "put: key = " + key + " value = " + value); DiskLruCache.Editor edit = null; BufferedWriter bw = null; @@ -119,15 +111,16 @@ public class CacheHelper { return; } OutputStream os = edit.newOutputStream(0); - bw = new BufferedWriter(new OutputStreamWriter(os)); + bw = new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8)); bw.write(value); edit.commit();//write CLEAN } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "put: " + e.getMessage()); try { - //s - edit.abort();//write REMOVE + if (edit != null) { + edit.abort();//write REMOVE + } } catch (IOException e1) { e1.printStackTrace(); Log.e(TAG, "put: " + e1.getMessage()); @@ -148,30 +141,27 @@ public class CacheHelper { Log.e(TAG, "getAsString: " + key); InputStream inputStream = null; try { - //write READ inputStream = get(key); if (inputStream == null) { - return mMMKV.decodeString(key + "_mmkv", null); + return null; } StringBuilder sb = new StringBuilder(); - int len = 0; - byte[] buf = new byte[128]; - while ((len = inputStream.read(buf)) != -1) { - sb.append(new String(buf, 0, len)); - } - if (BuildConfig.DEBUG) { - Log.e(TAG, "getAsString: " + sb.toString()); + InputStreamReader isr = new InputStreamReader(inputStream, StandardCharsets.UTF_8); + char[] buf = new char[1024]; + int len; + while ((len = isr.read(buf)) != -1) { + sb.append(buf, 0, len); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "getAsString: " + e.getMessage()); + } finally { if (inputStream != null) { try { inputStream.close(); - } catch (IOException e1) { - e1.printStackTrace(); - Log.e(TAG, "getAsString: " + e1.getMessage()); + } catch (IOException e) { + e.printStackTrace(); } } } @@ -205,9 +195,9 @@ public class CacheHelper { public JSONArray getAsJSONArray(String key) { String JSONString = getAsString(key); + if (JSONString == null) return null; try { - JSONArray obj = new JSONArray(JSONString); - return obj; + return new JSONArray(JSONString); } catch (Exception e) { e.printStackTrace(); return null; @@ -239,7 +229,9 @@ public class CacheHelper { } catch (Exception e) { e.printStackTrace(); try { - editor.abort();//write REMOVE + if (editor != null) { + editor.abort();//write REMOVE + } } catch (IOException e1) { e1.printStackTrace(); } @@ -262,8 +254,8 @@ public class CacheHelper { if (is == null) { return null; } - ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[256]; int len = 0; while ((len = is.read(buf)) != -1) { @@ -272,6 +264,12 @@ public class CacheHelper { res = baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } } return res; } @@ -295,7 +293,9 @@ public class CacheHelper { } catch (IOException e) { e.printStackTrace(); try { - editor.abort(); + if (editor != null) { + editor.abort(); + } } catch (IOException e1) { e1.printStackTrace(); } @@ -371,8 +371,8 @@ public class CacheHelper { // ======================================= public boolean remove(String key) { try { - key = Utils.hashKeyForDisk(key); - return mDiskLruCache.remove(key); + String hashKey = Utils.hashKeyForDisk(key); + return mDiskLruCache.remove(hashKey); } catch (IOException e) { e.printStackTrace(); } @@ -385,7 +385,6 @@ public class CacheHelper { public void delete() throws IOException { mDiskLruCache.delete(); - mMMKV.clearAll(); } public void flush() throws IOException { @@ -419,12 +418,12 @@ public class CacheHelper { //basic editor public DiskLruCache.Editor editor(String key) { try { - key = Utils.hashKeyForDisk(key); + String hashKey = Utils.hashKeyForDisk(key); //wirte DIRTY - DiskLruCache.Editor edit = mDiskLruCache.edit(key); + DiskLruCache.Editor edit = mDiskLruCache.edit(hashKey); //edit maybe null :the entry is editing if (edit == null) { - Log.w(TAG, "the entry spcified key:" + key + " is editing by other . "); + Log.w(TAG, "the entry spcified key:" + hashKey + " is editing by other . "); } return edit; } catch (IOException e) { @@ -461,19 +460,17 @@ public class CacheHelper { // ======================================= private File getDiskCacheDir(Context context, String uniqueName) { - String cachePath; + File cacheDir; if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) { - if (context.getExternalCacheDir() != null) { - cachePath = context.getExternalCacheDir().getPath(); - } else if (context.getExternalFilesDir("cache") != null) { - cachePath = context.getExternalFilesDir("cache").getPath(); - } else { - cachePath = context.getCacheDir().getPath(); + cacheDir = context.getExternalCacheDir(); + if (cacheDir == null) { + cacheDir = context.getCacheDir(); } } else { - cachePath = context.getCacheDir().getPath(); + cacheDir = context.getCacheDir(); } - return new File(cachePath + File.separator + uniqueName); + return new File(cacheDir, uniqueName); } + } 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 aa42641..4b509bf 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -407,19 +407,19 @@ public class NetInterfaceManager { public static Observable withCache(Observable networkObservable, String cacheKey, long expireTimeMillis) { return Observable.defer(() -> { // Log.e(TAG, "withCache: cacheKey = " + cacheKey); - // 1. 读取缓存 - T cacheData = CACHE_MANAGER.getCache(cacheKey); - if (cacheData != null) { - Log.e(TAG, "withCache: getCache " + cacheKey); - return Observable.just(cacheData); - } + // 1. 读取缓存 + T cacheData = CACHE_MANAGER.getCache(cacheKey); + if (cacheData != null) { + Log.e(TAG, "withCache: getCache " + cacheKey); + return Observable.just(cacheData); + } - Log.e(TAG, "withCache: request " + cacheKey); - // 2. 无缓存则发起网络请求,成功后缓存 - return networkObservable - .subscribeOn(Schedulers.io()) - .doOnNext(data -> CACHE_MANAGER.saveCache(cacheKey, data, expireTimeMillis)); - }) + Log.e(TAG, "withCache: request " + cacheKey); + // 2. 无缓存则发起网络请求,成功后缓存 + return networkObservable + .subscribeOn(Schedulers.io()) + .doOnNext(data -> CACHE_MANAGER.saveCache(cacheKey, data, expireTimeMillis)); + }) .subscribeOn(Schedulers.io()) // 缓存IO切到子线程 .observeOn(AndroidSchedulers.mainThread()); } @@ -644,13 +644,13 @@ public class NetInterfaceManager { public Observable> getSnTagObservable() { return withCache(schedule(getDevicesStatusApi().getSnTag(Utils.getSerial(mContext))), UrlAddress.GET_DEVICES_TAGS, - 10 * CACHE_EXPIRE_ONE_MINUTE); + CACHE_EXPIRE_ONE_MINUTE); } public Observable> getPushTagObservable() { return withCache(schedule(getDevicesStatusApi().getPushTag(Utils.getSerial(mContext), 1)), UrlAddress.GET_PUSH_TAG, - 10 * CACHE_EXPIRE_ONE_MINUTE); + CACHE_EXPIRE_ONE_MINUTE); } public Observable> getScreenLockObservable() { @@ -881,36 +881,36 @@ public class NetInterfaceManager { Observable> ailogUpdateObservable = getUpdateObservable(PackageNames.AILOG); Observable.zip(infoUpdateObservable, storeUpdateObservable, desktopUpdateObservable, - notifyUpdateObservable, browserUpdateObservable, ailogUpdateObservable, - new Function6, BaseResponse, BaseResponse, - BaseResponse, BaseResponse, BaseResponse, - List>() { - @Override - public List apply - (BaseResponse appUpdateInfoBaseResponse, BaseResponse appUpdateInfoBaseResponse2, BaseResponse appUpdateInfoBaseResponse3, - BaseResponse appUpdateInfoBaseResponse4, BaseResponse appUpdateInfoBaseResponse5, BaseResponse appUpdateInfoBaseResponse6) throws Throwable { - List appUpdateInfos = new ArrayList<>(); - if (appUpdateInfoBaseResponse.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse.data); - } - if (appUpdateInfoBaseResponse2.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse2.data); - } - if (appUpdateInfoBaseResponse3.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse3.data); - } - if (appUpdateInfoBaseResponse4.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse4.data); - } - if (appUpdateInfoBaseResponse5.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse5.data); - } - if (appUpdateInfoBaseResponse6.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse6.data); - } - return appUpdateInfos; - } - }) + notifyUpdateObservable, browserUpdateObservable, ailogUpdateObservable, + new Function6, BaseResponse, BaseResponse, + BaseResponse, BaseResponse, BaseResponse, + List>() { + @Override + public List apply + (BaseResponse appUpdateInfoBaseResponse, BaseResponse appUpdateInfoBaseResponse2, BaseResponse appUpdateInfoBaseResponse3, + BaseResponse appUpdateInfoBaseResponse4, BaseResponse appUpdateInfoBaseResponse5, BaseResponse appUpdateInfoBaseResponse6) throws Throwable { + List appUpdateInfos = new ArrayList<>(); + if (appUpdateInfoBaseResponse.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse.data); + } + if (appUpdateInfoBaseResponse2.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse2.data); + } + if (appUpdateInfoBaseResponse3.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse3.data); + } + if (appUpdateInfoBaseResponse4.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse4.data); + } + if (appUpdateInfoBaseResponse5.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse5.data); + } + if (appUpdateInfoBaseResponse6.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse6.data); + } + return appUpdateInfos; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) @@ -1031,40 +1031,40 @@ public class NetInterfaceManager { Observable> learningDesktopObservable = getUpdateObservable(desktop, useCache); Observable.zip(infoUpdateObservable, storeUpdateObservable, desktopUpdateObservable, - notifyUpdateObservable, browserUpdateObservable, learningDesktopObservable, ailogUpdateObservable, - new Function7, BaseResponse, BaseResponse, BaseResponse, - BaseResponse, BaseResponse, BaseResponse, List>() { - @Override - public List apply - (BaseResponse appUpdateInfoBaseResponse, BaseResponse appUpdateInfoBaseResponse2, BaseResponse appUpdateInfoBaseResponse3, - BaseResponse appUpdateInfoBaseResponse4, BaseResponse appUpdateInfoBaseResponse5, BaseResponse appUpdateInfoBaseResponse6, - BaseResponse appUpdateInfoBaseResponse7 - ) throws Throwable { - List appUpdateInfos = new ArrayList<>(); - if (appUpdateInfoBaseResponse.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse.data); - } - if (appUpdateInfoBaseResponse2.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse2.data); - } - if (appUpdateInfoBaseResponse3.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse3.data); - } - if (appUpdateInfoBaseResponse4.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse4.data); - } - if (appUpdateInfoBaseResponse5.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse5.data); - } - if (appUpdateInfoBaseResponse6.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse6.data); - } - if (appUpdateInfoBaseResponse7.isSuccess()) { - appUpdateInfos.add(appUpdateInfoBaseResponse7.data); - } - return appUpdateInfos; - } - }) + notifyUpdateObservable, browserUpdateObservable, learningDesktopObservable, ailogUpdateObservable, + new Function7, BaseResponse, BaseResponse, BaseResponse, + BaseResponse, BaseResponse, BaseResponse, List>() { + @Override + public List apply + (BaseResponse appUpdateInfoBaseResponse, BaseResponse appUpdateInfoBaseResponse2, BaseResponse appUpdateInfoBaseResponse3, + BaseResponse appUpdateInfoBaseResponse4, BaseResponse appUpdateInfoBaseResponse5, BaseResponse appUpdateInfoBaseResponse6, + BaseResponse appUpdateInfoBaseResponse7 + ) throws Throwable { + List appUpdateInfos = new ArrayList<>(); + if (appUpdateInfoBaseResponse.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse.data); + } + if (appUpdateInfoBaseResponse2.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse2.data); + } + if (appUpdateInfoBaseResponse3.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse3.data); + } + if (appUpdateInfoBaseResponse4.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse4.data); + } + if (appUpdateInfoBaseResponse5.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse5.data); + } + if (appUpdateInfoBaseResponse6.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse6.data); + } + if (appUpdateInfoBaseResponse7.isSuccess()) { + appUpdateInfos.add(appUpdateInfoBaseResponse7.data); + } + return appUpdateInfos; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) @@ -1186,53 +1186,53 @@ public class NetInterfaceManager { public void getDefaultDesktop(BehaviorSubject lifecycle, onCompleteCallback callback) { Observable.zip(getDesktopObservable(), getDesktopsDiyUpdate(), new BiFunction, BaseResponse, List>() { - @Override - public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { - List forceDownloadDataList = new ArrayList<>(); - if (forceDownloadDataBaseResponse.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse.data); - } - if (forceDownloadDataBaseResponse2.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); - } - return forceDownloadDataList; - } - }) + @Override + public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { + List forceDownloadDataList = new ArrayList<>(); + if (forceDownloadDataBaseResponse.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse.data); + } + if (forceDownloadDataBaseResponse2.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); + } + return forceDownloadDataList; + } + }) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) .subscribe(getDefaultDesktopObserver(callback)); } public void getDefaultDesktop(onCompleteCallback callback) { Observable.zip(getDesktopObservable(), getDesktopsDiyUpdate(), new BiFunction, BaseResponse, List>() { - @Override - public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { - List forceDownloadDataList = new ArrayList<>(); - if (forceDownloadDataBaseResponse.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse.data); - } - if (forceDownloadDataBaseResponse2.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); - } - return forceDownloadDataList; - } - }) + @Override + public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { + List forceDownloadDataList = new ArrayList<>(); + if (forceDownloadDataBaseResponse.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse.data); + } + if (forceDownloadDataBaseResponse2.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); + } + return forceDownloadDataList; + } + }) .subscribe(getDefaultDesktopObserver(callback)); } public void getDefaultDesktop() { Observable.zip(getDesktopObservable(), getDesktopsDiyUpdate(), new BiFunction, BaseResponse, List>() { - @Override - public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { - List forceDownloadDataList = new ArrayList<>(); - if (forceDownloadDataBaseResponse.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse.data); - } - if (forceDownloadDataBaseResponse2.isSuccess()) { - forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); - } - return forceDownloadDataList; - } - }) + @Override + public List apply(BaseResponse forceDownloadDataBaseResponse, BaseResponse forceDownloadDataBaseResponse2) throws Throwable { + List forceDownloadDataList = new ArrayList<>(); + if (forceDownloadDataBaseResponse.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse.data); + } + if (forceDownloadDataBaseResponse2.isSuccess()) { + forceDownloadDataList.add(forceDownloadDataBaseResponse2.data); + } + return forceDownloadDataList; + } + }) .subscribe(getDefaultDesktopObserver(null)); } @@ -2555,18 +2555,18 @@ public class NetInterfaceManager { public void getBookMarkBlackWhiteList(BehaviorSubject lifecycle, onCompleteCallback callback) { Observable.zip(getBrowserBookmarksObservable(), getBrowserListSettingObservable(), new BiFunction, BaseResponse, String>() { - @Override - public String apply(BaseResponse browserBookmarksBaseResponse, BaseResponse browserDataBaseResponse) throws Throwable { - String homePage = ""; - if (browserBookmarksBaseResponse.isSuccess()) { - homePage = browserBookmarksBaseResponse.data.getHomepage(); - } + @Override + public String apply(BaseResponse browserBookmarksBaseResponse, BaseResponse browserDataBaseResponse) throws Throwable { + String homePage = ""; + if (browserBookmarksBaseResponse.isSuccess()) { + homePage = browserBookmarksBaseResponse.data.getHomepage(); + } - setBrowserBookmarks(browserBookmarksBaseResponse); - setBlackWhiteList(browserDataBaseResponse, homePage); - return homePage; - } - }) + setBrowserBookmarks(browserBookmarksBaseResponse); + setBlackWhiteList(browserDataBaseResponse, homePage); + return homePage; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) @@ -2599,18 +2599,18 @@ public class NetInterfaceManager { public void getBookMarkBlackWhiteList() { Observable.zip(getBrowserBookmarksObservable(), getBrowserListSettingObservable(), new BiFunction, BaseResponse, String>() { - @Override - public String apply(BaseResponse browserBookmarksBaseResponse, BaseResponse browserDataBaseResponse) throws Throwable { - String homePage = ""; - if (browserBookmarksBaseResponse.isSuccess()) { - homePage = browserBookmarksBaseResponse.data.getHomepage(); - } + @Override + public String apply(BaseResponse browserBookmarksBaseResponse, BaseResponse browserDataBaseResponse) throws Throwable { + String homePage = ""; + if (browserBookmarksBaseResponse.isSuccess()) { + homePage = browserBookmarksBaseResponse.data.getHomepage(); + } - setBrowserBookmarks(browserBookmarksBaseResponse); - setBlackWhiteList(browserDataBaseResponse, homePage); - return homePage; - } - }) + setBrowserBookmarks(browserBookmarksBaseResponse); + setBlackWhiteList(browserDataBaseResponse, homePage); + return homePage; + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -3164,31 +3164,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)) @@ -3218,31 +3218,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>() { 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 88a471c..aa39d97 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java @@ -1,5 +1,7 @@ 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; @@ -125,8 +127,6 @@ 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"; @@ -1804,8 +1804,10 @@ public class JgyUtils { if (ApkUtils.canremove_systemapp.contains(packageName)) { continue; } - if (ApkUtils.aihuaApp.contains(packageName)) { - continue; + if ("K101".equals(Build.MODEL) || "AS001".equals(Build.MODEL)) { + if (ApkUtils.aihuaApp.contains(packageName)) { + continue; + } } if (ApkUtils.mJxwApp.contains(packageName)) { continue; diff --git a/app/src/main/res/drawable-hdpi/com_aoleyun_update.png b/app/src/main/res/drawable-hdpi/com_aoleyun_update.png index d0c9e8db9ddf7f29e2794ab4bbcbe736b0825728..3083cc82b3e1a72e39b26e2a7b4f65154206480c 100644 GIT binary patch delta 8799 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 UGq2A7J&piWm9(JM3fAHO5BX=LD*ylh delta 24391 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