From 99634fa71f8917a777b24dfd8a9a5eb3cb167d6b Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Wed, 10 Aug 2022 18:12:34 +0800 Subject: [PATCH] =?UTF-8?q?version:MTK=202.3=20fix:=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=A3=E9=94=81=E5=90=8E=E4=B8=8D=E8=83=BD=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=AE=A1=E6=8E=A7app=20update:=E8=A7=A3=E9=94=81=E5=90=8E?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=BA=94=E7=94=A8=E5=B8=82=E5=9C=BA=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 29 ++--- src/com/aoleyun/os/Launcher.java | 7 +- src/com/aoleyun/os/base/BaseApplication.java | 12 +- .../aoleyun/os/manager/ConnectManager.java | 16 ++- src/com/aoleyun/os/manager/ConnectMode.java | 4 + src/com/aoleyun/os/model/LoaderTask.java | 2 +- src/com/aoleyun/os/network/HTTPInterface.java | 6 +- ...kManager.java => NetInterfaceManager.java} | 102 ++++++++-------- .../network/{URLPath.java => UrlAddress.java} | 2 +- src/com/aoleyun/os/network/api/AddAppLog.java | 4 +- .../os/network/api/AppUsageRecordApi.java | 4 +- .../aoleyun/os/network/api/CheckUpdate.java | 4 +- .../os/network/api/GetAppPassword.java | 4 +- .../os/network/api/GetJpushTagsApi.java | 4 +- .../aoleyun/os/network/api/RunningApp.java | 4 +- .../os/network/api/SendScreenshotApi.java | 4 +- .../interceptor/RepeatRequestInterceptor.java | 107 +++++++++++++++++ src/com/aoleyun/os/service/MainService.java | 4 +- .../aoleyun/os/touch/ItemClickHandler.java | 6 +- src/com/aoleyun/os/uiuiutils/JGYUtils.java | 6 + src/com/aoleyun/os/uiuiutils/MD5Util.java | 112 ++++++++++++++++++ 21 files changed, 344 insertions(+), 99 deletions(-) rename src/com/aoleyun/os/network/{NetworkManager.java => NetInterfaceManager.java} (72%) rename src/com/aoleyun/os/network/{URLPath.java => UrlAddress.java} (97%) create mode 100644 src/com/aoleyun/os/network/interceptor/RepeatRequestInterceptor.java create mode 100644 src/com/aoleyun/os/uiuiutils/MD5Util.java diff --git a/build.gradle b/build.gradle index dbf9378..6e792aa 100644 --- a/build.gradle +++ b/build.gradle @@ -66,12 +66,12 @@ android { minSdkVersion 26 targetSdkVersion 28 -// //MTK -// versionCode 13 -// versionName "2.2" - //cube - versionCode 37 - versionName "4.6" + //MTK + versionCode 14 + versionName "2.3" +// //cube +// versionCode 54 +// versionName "6.2" ndk { //选择要添加的对应 cpu 类型的 .so 库。 @@ -133,17 +133,12 @@ android { signingConfig signingConfigs.zhanRui } - alldocubeDebug.initWith(debug) - alldocubeDebug { - buildConfigField "String", "platform", '"ZhanRuiCube"' - debuggable true + //userdebug rom使用这个版本 + zhanRuiUserdebug.initWith(zhanRuiDebug) + zhanRuiUserdebug { versionNameSuffix "-debug" - signingConfig signingConfigs.zhanRuiUserdebug - } - - alldocubeDebugReleas.initWith(release) - alldocubeDebugReleas { - buildConfigField "String", "platform", '"ZhanRuiCube"' + buildConfigField "String", "platform", '"ZhanRui"' + debuggable true signingConfig signingConfigs.zhanRuiUserdebug } @@ -334,7 +329,7 @@ dependencies { androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' androidTestImplementation "androidx.annotation:annotation:${ANDROID_X_VERSION}" //OkHttp - implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:okhttp:4.9.2' //RxJava和Retrofit implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' diff --git a/src/com/aoleyun/os/Launcher.java b/src/com/aoleyun/os/Launcher.java index 99b7771..0274aab 100644 --- a/src/com/aoleyun/os/Launcher.java +++ b/src/com/aoleyun/os/Launcher.java @@ -105,7 +105,7 @@ import com.aoleyun.os.model.ModelWriter; import com.aoleyun.os.network.bean.AppPasswdBean; import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.HTTPInterface; -import com.aoleyun.os.network.NetworkManager; +import com.aoleyun.os.network.NetInterfaceManager; import com.aoleyun.os.network.bean.NewestAppUpdateResult; import com.aoleyun.os.notification.NotificationListener; import com.aoleyun.os.pageindicators.PageIndicatorDots; @@ -167,7 +167,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Random; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -1157,7 +1156,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, String app_name = APKUtils.getAppNameByPackage(Launcher.this, packageName); long openTime = TimeUtils.getInstance().getStartTime() / 1000; long closeTime = TimeUtils.getInstance().getEndTime() / 1000; - NetworkManager.getInstance() + NetInterfaceManager.getInstance() .getAppUsageRecordControl() .sendAppUsageRecord(Utils.getSerial(), packageName, app_name, openTime, closeTime) .subscribeOn(Schedulers.io()) @@ -1371,7 +1370,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, }; private void checkUpdate() { - NetworkManager.getInstance() + NetInterfaceManager.getInstance() .getCheckUpdateObservable() .getCheckUpdate(BuildConfig.APPLICATION_ID, BuildConfig.VERSION_CODE, diff --git a/src/com/aoleyun/os/base/BaseApplication.java b/src/com/aoleyun/os/base/BaseApplication.java index 4539d8e..7b185d2 100644 --- a/src/com/aoleyun/os/base/BaseApplication.java +++ b/src/com/aoleyun/os/base/BaseApplication.java @@ -8,8 +8,8 @@ import android.util.Log; import com.aoleyun.os.manager.ConnectManager; import com.aoleyun.os.uiuiutils.ToastUtil; import com.aoleyun.os.uiuiutils.Utils; -import com.aoleyun.os.network.NetworkManager; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.NetInterfaceManager; +import com.aoleyun.os.network.UrlAddress; import com.aoleyun.os.uiuiutils.JGYUtils; import com.aoleyun.os.uiuiutils.TimeUtils; import com.arialyy.aria.core.Aria; @@ -59,7 +59,7 @@ public class BaseApplication extends Application { JGYUtils.init(this); TimeUtils.init(this); Aria.init(this); - NetworkManager.init(this); + NetInterfaceManager.init(this); ToastUtil.init(this); ConnectManager.init(this); @@ -82,7 +82,7 @@ public class BaseApplication extends Application { Log.e("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg); } }); - NetworkManager.getInstance().setPushTag(true, new NetworkManager.onCompleteCallback() { + NetInterfaceManager.getInstance().setPushTag(true, new NetInterfaceManager.onCompleteCallback() { @Override public void onComplete() { @@ -317,7 +317,7 @@ public class BaseApplication extends Application { //https://docs.jiguang.cn/jpush/server/push/rest_api_v3_device/#_5 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() - .url(URLPath.DELETE_JPUSH_ALIAS + Utils.getSerial()) + .url(UrlAddress.DELETE_JPUSH_ALIAS + Utils.getSerial()) .header("Authorization", key) .delete() .build(); @@ -339,7 +339,7 @@ public class BaseApplication extends Application { synchronized public void cleanJpushTag() { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() - .url(URLPath.DELETE_JPUSH_TAG + Utils.getSerial()) + .url(UrlAddress.DELETE_JPUSH_TAG + Utils.getSerial()) .header("Authorization", key) .delete() .build(); diff --git a/src/com/aoleyun/os/manager/ConnectManager.java b/src/com/aoleyun/os/manager/ConnectManager.java index 2a33897..38c6a3d 100644 --- a/src/com/aoleyun/os/manager/ConnectManager.java +++ b/src/com/aoleyun/os/manager/ConnectManager.java @@ -18,6 +18,9 @@ public class ConnectManager { public static final long SIX_HOUR_TIME = ONE_HOUR_TIME * 6; public static final long HALF_DAY_TIME = SIX_HOUR_TIME * 2; public static final long ONE_DAY_TIME = HALF_DAY_TIME * 2; + public static final long TWO_DAY_TIME = ONE_DAY_TIME * 2; + public static final long FOUR_DAY_TIME = TWO_DAY_TIME * 2; + public static final long A_WEEK_TIME = ONE_DAY_TIME * 7; /*重启后连接成功的时间*/ public static final String REBOOT_LAST_ONNECT_TIME = "reboot_last_connect_time"; @@ -37,7 +40,6 @@ public class ConnectManager { throw new RuntimeException("Context is NULL"); } this.mContext = context; - } public static void init(Context context) { @@ -81,12 +83,24 @@ public class ConnectManager { case ONE_DAY: time = ONE_DAY_TIME; break; + case TWO_DAY: + time = TWO_DAY_TIME; + break; + case FOUR_DAY: + time = FOUR_DAY_TIME; + break; + case A_WEEK: + time = A_WEEK_TIME; + break; default: } return time; } public boolean isNeedConnect(String key, ConnectMode connectMode) { + if (connectMode == ConnectMode.ONCE) { + return false; + } long nowTime = System.currentTimeMillis(); long lastTime = mMMKV.decodeLong(key, 0); long intervalTime = getConnectModeTime(connectMode); diff --git a/src/com/aoleyun/os/manager/ConnectMode.java b/src/com/aoleyun/os/manager/ConnectMode.java index 731e298..2f85a94 100644 --- a/src/com/aoleyun/os/manager/ConnectMode.java +++ b/src/com/aoleyun/os/manager/ConnectMode.java @@ -9,4 +9,8 @@ public enum ConnectMode { SIX_HOUR, HALF_DAY, ONE_DAY, + TWO_DAY, + FOUR_DAY, + A_WEEK, + ONCE } \ No newline at end of file diff --git a/src/com/aoleyun/os/model/LoaderTask.java b/src/com/aoleyun/os/model/LoaderTask.java index a0995c7..20fe387 100644 --- a/src/com/aoleyun/os/model/LoaderTask.java +++ b/src/com/aoleyun/os/model/LoaderTask.java @@ -319,7 +319,7 @@ public class LoaderTask implements Runnable { final List profiles = mUserManager.getUserProfiles(); String whiteList = Settings.System.getString(crv, JGYActions.ACTION_JGY_SHORTCUTLIST); Log.e("verifyApplications", "whiteList: " + whiteList); - int aihuaUnlock = Settings.Global.getInt(context.getContentResolver(), "Aihua_unlock_state", 0); + int aihuaUnlock = Settings.System.getInt(context.getContentResolver(), "Aihua_unlock_state", 0); Log.e(TAG, "verifyApplications: aihuaUnlock = " + aihuaUnlock); for (UserHandle user : profiles) { final List apps = mLauncherApps.getActivityList(null, user); diff --git a/src/com/aoleyun/os/network/HTTPInterface.java b/src/com/aoleyun/os/network/HTTPInterface.java index e246824..98a8208 100644 --- a/src/com/aoleyun/os/network/HTTPInterface.java +++ b/src/com/aoleyun/os/network/HTTPInterface.java @@ -34,7 +34,7 @@ public class HTTPInterface { private static final String TAG = HTTPInterface.class.getSimpleName(); public static void getAppPasswd() { - NetworkManager.getInstance().getAppPasswordObservable() + NetInterfaceManager.getInstance().getAppPasswordObservable() .subscribe(new Observer>>() { @Override public void onSubscribe(Disposable d) { @@ -67,7 +67,7 @@ public class HTTPInterface { } synchronized public static void setJpushTags(final Context context) { - NetworkManager.getInstance() + NetInterfaceManager.getInstance() .getJpushTagsObservable() .subscribe(new Observer() { @Override @@ -132,7 +132,7 @@ public class HTTPInterface { jsonObject.addProperty("app_name", APKUtils.getAppNameByPackage(context, packageName)); jsonObject.addProperty("status", 1); String jsonString = jsonObject.toString(); - NetworkManager.getInstance().getRunningAppObservable(jsonString) + NetInterfaceManager.getInstance().getRunningAppObservable(jsonString) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { diff --git a/src/com/aoleyun/os/network/NetworkManager.java b/src/com/aoleyun/os/network/NetInterfaceManager.java similarity index 72% rename from src/com/aoleyun/os/network/NetworkManager.java rename to src/com/aoleyun/os/network/NetInterfaceManager.java index af413db..f38b7d9 100644 --- a/src/com/aoleyun/os/network/NetworkManager.java +++ b/src/com/aoleyun/os/network/NetInterfaceManager.java @@ -1,18 +1,13 @@ package com.aoleyun.os.network; +import android.annotation.SuppressLint; import android.content.Context; -import android.os.Environment; import android.text.TextUtils; import android.util.Log; import com.aoleyun.os.disklrucache.CacheHelper; import com.aoleyun.os.manager.ConnectManager; import com.aoleyun.os.manager.ConnectMode; -import com.aoleyun.os.network.bean.AppPasswdBean; -import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.bean.Batch; -import com.aoleyun.os.uiuiutils.JGYUtils; -import com.aoleyun.os.uiuiutils.Utils; import com.aoleyun.os.network.api.AddAppLog; import com.aoleyun.os.network.api.AppUsageRecordApi; import com.aoleyun.os.network.api.CheckUpdate; @@ -20,9 +15,12 @@ import com.aoleyun.os.network.api.GetAppPassword; import com.aoleyun.os.network.api.GetJpushTagsApi; import com.aoleyun.os.network.api.RunningApp; import com.aoleyun.os.network.api.SendScreenshotApi; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; +import com.aoleyun.os.network.bean.AppPasswdBean; +import com.aoleyun.os.network.bean.BaseResponse; +import com.aoleyun.os.network.bean.Batch; +import com.aoleyun.os.network.interceptor.RepeatRequestInterceptor; +import com.aoleyun.os.uiuiutils.JGYUtils; +import com.aoleyun.os.uiuiutils.Utils; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; @@ -41,69 +39,75 @@ import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.Cache; import okhttp3.OkHttpClient; -import retrofit2.CallAdapter; -import retrofit2.Converter; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; -public class NetworkManager { - private static NetworkManager sInstance; +public class NetInterfaceManager { + private static final String TAG = NetInterfaceManager.class.getSimpleName(); + + @SuppressLint("StaticFieldLeak") + private static NetInterfaceManager sInstance; private Context mContext; + private Retrofit mRetrofit; + private OkHttpClient okHttpClient; private MMKV mMMKV = MMKV.defaultMMKV(); private CacheHelper cacheHelper; - private static Retrofit mRetrofit; + //超时时间 + private static int timeOut = 5; + // 缓存大小 + private static long cacheSize = 1024 * 1024 * 64; - private NetworkManager(Context context) { + private static final String ROOT_URL = UrlAddress.ROOT_URL; + + private NetInterfaceManager(Context context) { this.mContext = context; this.cacheHelper = new CacheHelper(mContext); + if (okHttpClient == null) { + //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间 + builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间 + builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间 + builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 + builder.addInterceptor(new RepeatRequestInterceptor()); + + // 设置缓存文件路径 + String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; + Cache cache = new Cache(new File(cacheDirectory), cacheSize); + builder.cache(cache);// 设置缓存 + okHttpClient = builder.build(); + } + if (null == mRetrofit) { mRetrofit = new Retrofit.Builder() .client(okHttpClient) .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } } public static void init(Context context) { - if (sInstance == null) { - sInstance = new NetworkManager(context); + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + if (sInstance == null) { + sInstance = new NetInterfaceManager(context); } - } - public static NetworkManager getInstance() { + public static NetInterfaceManager getInstance() { if (sInstance == null) { throw new IllegalStateException("You must be init NetworkManager first"); } return sInstance; } - private static final String ROOT_URL = URLPath.ROOT_URL; - private static final long CACHE_SIZE = 1024 * 1024 * 32;// 缓存文件最大限制大小20M - private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径 - private static Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE); // - private static final OkHttpClient okHttpClient; - private static final int TIME_OUT = 5; - - static { - //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 - OkHttpClient.Builder builder = new OkHttpClient.Builder(); - builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间 - builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间 - builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间 - builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 - builder.cache(cache);// 设置缓存 - okHttpClient = builder.build(); - } - - private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create(); - private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create(); public Observable getRunningAppObservable(String json) { return mRetrofit.create(RunningApp.class) @@ -154,19 +158,19 @@ public class NetworkManager { } public void setPushTag(boolean refresh, onCompleteCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_DAY; + ConnectMode connectMode = ConnectMode.TWO_DAY; if (refresh) { - connectMode = ConnectMode.FIFTEEN_MINUTES; + connectMode = ConnectMode.ONE_DAY; } - if (ConnectManager.getInstance().isNeedConnect(URLPath.GET_DEVICES_TAGS, connectMode)) { + if (ConnectManager.getInstance().isNeedConnect(UrlAddress.GET_DEVICES_TAGS, connectMode)) { setPushTag(callback); } else { - String jsonString = cacheHelper.getAsString(URLPath.GET_DEVICES_TAGS); + String jsonString = cacheHelper.getAsString(UrlAddress.GET_DEVICES_TAGS); //为 "" 是已经请求成功的 if (jsonString == null) { setPushTag(callback); } else { - Set tagSets = mMMKV.decodeStringSet(URLPath.GET_DEVICES_TAGS); + Set tagSets = mMMKV.decodeStringSet(UrlAddress.GET_DEVICES_TAGS); Log.e("setPushTags", "tagSets: " + tagSets); clearAndAppendTags(tagSets); callback.onComplete(); @@ -199,14 +203,14 @@ public class NetworkManager { Log.e("setPushTag", "onNext: " + response); if (response.code == 200) { String batch = response.data.getBatch(); - cacheHelper.put(URLPath.GET_DEVICES_TAGS, batch); + cacheHelper.put(UrlAddress.GET_DEVICES_TAGS, batch); if (!TextUtils.isEmpty(batch)) { set.add(batch); } else { Log.e("setPushTag", "onNext: " + "batch empty"); } } else { - cacheHelper.put(URLPath.GET_DEVICES_TAGS, ""); + cacheHelper.put(UrlAddress.GET_DEVICES_TAGS, ""); } } @@ -219,7 +223,7 @@ public class NetworkManager { @Override public void onComplete() { Log.e("setPushTag", "onComplete: "); - mMMKV.encode(URLPath.GET_DEVICES_TAGS, set); + mMMKV.encode(UrlAddress.GET_DEVICES_TAGS, set); clearAndAppendTags(set); callback.onComplete(); } diff --git a/src/com/aoleyun/os/network/URLPath.java b/src/com/aoleyun/os/network/UrlAddress.java similarity index 97% rename from src/com/aoleyun/os/network/URLPath.java rename to src/com/aoleyun/os/network/UrlAddress.java index 08e13c6..d86e008 100644 --- a/src/com/aoleyun/os/network/URLPath.java +++ b/src/com/aoleyun/os/network/UrlAddress.java @@ -1,6 +1,6 @@ package com.aoleyun.os.network; -public class URLPath { +public class UrlAddress { public static final String ROOT_URL = "https://led.aoleyun.cn/api/"; public static final String APP_LOG = "app/addAppLog"; //获取正在运行的app diff --git a/src/com/aoleyun/os/network/api/AddAppLog.java b/src/com/aoleyun/os/network/api/AddAppLog.java index d7124ad..b91f590 100644 --- a/src/com/aoleyun/os/network/api/AddAppLog.java +++ b/src/com/aoleyun/os/network/api/AddAppLog.java @@ -1,7 +1,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; @@ -10,7 +10,7 @@ import retrofit2.http.POST; public interface AddAppLog { @FormUrlEncoded - @POST(URLPath.APP_LOG) + @POST(UrlAddress.APP_LOG) Observable addLog( @Field("sn") String sn, @Field("packageName") String packageName, diff --git a/src/com/aoleyun/os/network/api/AppUsageRecordApi.java b/src/com/aoleyun/os/network/api/AppUsageRecordApi.java index 194589c..e2c9f39 100644 --- a/src/com/aoleyun/os/network/api/AppUsageRecordApi.java +++ b/src/com/aoleyun/os/network/api/AppUsageRecordApi.java @@ -1,7 +1,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import io.reactivex.Observable; @@ -11,7 +11,7 @@ import retrofit2.http.POST; public interface AppUsageRecordApi { @FormUrlEncoded - @POST(URLPath.SEND_APP_RECORD) + @POST(UrlAddress.SEND_APP_RECORD) Observable sendAppUsageRecord( @Field("sn") String sn, @Field("app_package") String app_package, diff --git a/src/com/aoleyun/os/network/api/CheckUpdate.java b/src/com/aoleyun/os/network/api/CheckUpdate.java index 34a3fdb..727398a 100644 --- a/src/com/aoleyun/os/network/api/CheckUpdate.java +++ b/src/com/aoleyun/os/network/api/CheckUpdate.java @@ -2,7 +2,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.NewestAppUpdateResult; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; @@ -11,7 +11,7 @@ import retrofit2.http.POST; public interface CheckUpdate { @FormUrlEncoded - @POST(URLPath.GET_NEWESTAPPUPDATE) + @POST(UrlAddress.GET_NEWESTAPPUPDATE) Observable> getCheckUpdate( @Field("package")String packageName, @Field("versionCode")int versionCode, diff --git a/src/com/aoleyun/os/network/api/GetAppPassword.java b/src/com/aoleyun/os/network/api/GetAppPassword.java index 6deca93..79efb83 100644 --- a/src/com/aoleyun/os/network/api/GetAppPassword.java +++ b/src/com/aoleyun/os/network/api/GetAppPassword.java @@ -2,7 +2,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.AppPasswdBean; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import java.util.List; @@ -18,7 +18,7 @@ import retrofit2.http.Query; * version: 1.0 */ public interface GetAppPassword { - @GET(URLPath.GET_APP_PASSWD) + @GET(UrlAddress.GET_APP_PASSWD) Observable>> getAppPasswd( @Query("sn") String sn ); diff --git a/src/com/aoleyun/os/network/api/GetJpushTagsApi.java b/src/com/aoleyun/os/network/api/GetJpushTagsApi.java index 3aa9507..c2dcc40 100644 --- a/src/com/aoleyun/os/network/api/GetJpushTagsApi.java +++ b/src/com/aoleyun/os/network/api/GetJpushTagsApi.java @@ -2,7 +2,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import com.aoleyun.os.network.bean.Batch; import io.reactivex.Observable; @@ -10,7 +10,7 @@ import retrofit2.http.GET; import retrofit2.http.Query; public interface GetJpushTagsApi { - @GET(URLPath.GET_DEVICES_TAGS) + @GET(UrlAddress.GET_DEVICES_TAGS) Observable> getJpushTags( @Query("sn") String sn ); diff --git a/src/com/aoleyun/os/network/api/RunningApp.java b/src/com/aoleyun/os/network/api/RunningApp.java index b482dc4..d49041a 100644 --- a/src/com/aoleyun/os/network/api/RunningApp.java +++ b/src/com/aoleyun/os/network/api/RunningApp.java @@ -1,7 +1,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; @@ -10,7 +10,7 @@ import retrofit2.http.POST; public interface RunningApp { @FormUrlEncoded - @POST(URLPath.RUN_NEW_APP) + @POST(UrlAddress.RUN_NEW_APP) Observable sendRunningInfo( @Field("sn") String sn, @Field("app") String app diff --git a/src/com/aoleyun/os/network/api/SendScreenshotApi.java b/src/com/aoleyun/os/network/api/SendScreenshotApi.java index a26f600..55ab26f 100644 --- a/src/com/aoleyun/os/network/api/SendScreenshotApi.java +++ b/src/com/aoleyun/os/network/api/SendScreenshotApi.java @@ -1,7 +1,7 @@ package com.aoleyun.os.network.api; import com.aoleyun.os.network.bean.BaseResponse; -import com.aoleyun.os.network.URLPath; +import com.aoleyun.os.network.UrlAddress; import java.util.Map; @@ -14,7 +14,7 @@ import retrofit2.http.QueryMap; public interface SendScreenshotApi { @Multipart - @POST(URLPath.SEND_SCREENSHOT) + @POST(UrlAddress.SEND_SCREENSHOT) Observable sendScreenshot( @QueryMap Map params, @Part MultipartBody.Part body diff --git a/src/com/aoleyun/os/network/interceptor/RepeatRequestInterceptor.java b/src/com/aoleyun/os/network/interceptor/RepeatRequestInterceptor.java new file mode 100644 index 0000000..1949303 --- /dev/null +++ b/src/com/aoleyun/os/network/interceptor/RepeatRequestInterceptor.java @@ -0,0 +1,107 @@ +package com.aoleyun.os.network.interceptor; + +import android.util.Log; + +import com.aoleyun.os.BuildConfig; +import com.aoleyun.os.uiuiutils.MD5Util; + +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.util.concurrent.ConcurrentHashMap; + +import okhttp3.Interceptor; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; + +/** + * v1.0 2022-07-15 16:16:52 + */ +public class RepeatRequestInterceptor implements Interceptor { + private static final String TAG = RepeatRequestInterceptor.class.getSimpleName(); + + private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); + public static final String REPEAT_REQUEST_PROTOCOL = "OKHTTP_REPEAT_REQUEST_PROTOCOL"; + + @NotNull + @Override + public Response intercept(@NotNull Chain chain) throws IOException { + Request request = chain.request(); + Response response = chain.proceed(request); + ResponseBody responseBody = response.body(); + + //会消费请求,导致请求多次 + String content = responseBody.string(); +// Response copy = response.newBuilder().body(responseBody).build(); + ResponseBody copy = ResponseBody.create(responseBody.contentType(), content); + if (BuildConfig.DEBUG) { + Log.e(TAG, "请求体返回:| Response: " + request.url().encodedPath() + "\t body: " + content); + } + //相同的请求 + String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + requestBodyToString(request.body())); + long time = System.currentTimeMillis();//请求时间 + try { + if (requestIdsMap.size() > 0 && requestIdsMap.containsKey(requestKey)) { + log("重复请求:", requestKey, request); + //下面这行写了不会抛出onerror +// chain.call().cancel(); + return new Response.Builder() + .protocol(Protocol.get(REPEAT_REQUEST_PROTOCOL)) + .request(request) //multi thread + .build(); + } + requestIdsMap.put(requestKey, time); + log("注册请求:", requestKey, request); +// RepeatRequestInterceptor.Builder builder = request.newBuilder(); +// builder.addHeader("header", jsonObject.toString()); + return response.newBuilder().body(copy).build(); + } catch (IOException e) { + Log.e(TAG, "intercept: " + e.getMessage()); + throw e; + } finally { + if (requestIdsMap.containsKey(requestKey) && requestIdsMap.containsValue(time)) {//请求任务完成删除map中的数据 + requestIdsMap.remove(requestKey); + log("移除请求:", requestKey, request); + } + } + } + + private void log(String action, String requestKey, Request request) { + if (BuildConfig.DEBUG) { + Log.e("REPEAT-REQUEST", action + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url().encodedPath() + "\t" + bodyToString(request)); + } else { + Log.e("REPEAT-REQUEST", action + requestKey + " Method @" + request.method()); + } + } + + private static String bodyToString(final Request request) { + try { + final Request copy = request.newBuilder().build(); + final Buffer buffer = new Buffer(); + copy.body().writeTo(buffer); + if (buffer.size() > 4096) { + return "-too long"; + } + return buffer.readUtf8(); + } catch (Exception e) { + return "-"; + } + } + + private static String requestBodyToString(RequestBody body) { + try { + final Buffer buffer = new Buffer(); + body.writeTo(buffer); + if (buffer.size() > 4096) { + return "-too long"; + } + return buffer.readUtf8(); + } catch (Exception e) { + return "-"; + } + } +} diff --git a/src/com/aoleyun/os/service/MainService.java b/src/com/aoleyun/os/service/MainService.java index d136541..35695d7 100644 --- a/src/com/aoleyun/os/service/MainService.java +++ b/src/com/aoleyun/os/service/MainService.java @@ -11,7 +11,7 @@ import android.text.TextUtils; import android.util.Log; import com.aoleyun.os.BuildConfig; -import com.aoleyun.os.network.NetworkManager; +import com.aoleyun.os.network.NetInterfaceManager; import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.uiuiutils.APKUtils; import com.aoleyun.os.uiuiutils.CmdUtil; @@ -185,7 +185,7 @@ public class MainService extends Service { Map params = new HashMap<>(); params.put("sn", Utils.getSerial()); params.put("createtime", String.valueOf(time)); - NetworkManager.getInstance().getScreenshotApi() + NetInterfaceManager.getInstance().getScreenshotApi() .sendScreenshot(params, body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/src/com/aoleyun/os/touch/ItemClickHandler.java b/src/com/aoleyun/os/touch/ItemClickHandler.java index c5173dd..329cc09 100644 --- a/src/com/aoleyun/os/touch/ItemClickHandler.java +++ b/src/com/aoleyun/os/touch/ItemClickHandler.java @@ -45,6 +45,7 @@ import com.aoleyun.os.Launcher; import com.aoleyun.os.LauncherAppWidgetInfo; import com.aoleyun.os.LauncherAppWidgetProviderInfo; import com.aoleyun.os.uiuiutils.CustomDialog; +import com.aoleyun.os.uiuiutils.JGYUtils; import com.aoleyun.os.uiuiutils.ToastUtil; import com.aoleyun.os.base.BaseApplication; import com.aoleyun.os.PromiseAppInfo; @@ -162,7 +163,7 @@ public class ItemClickHandler { //写入正在运行的app的包名和时间 TimeUtils.getInstance().setAppPackageName(packageName); TimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - HTTPInterface.sendRunningApp(BaseApplication.getContext()); +// HTTPInterface.sendRunningApp(BaseApplication.getContext()); } else if (tag instanceof FolderInfo) { if (v instanceof FolderIcon) { onClickFolderIcon(v); @@ -182,6 +183,9 @@ public class ItemClickHandler { } private static boolean is_forbid(Context context, String pkg) { + if (JGYUtils.isUnlocked(context)) { + return false; + } switch (pkg) { case "com.mediatek.camera": case "com.android.camera2": diff --git a/src/com/aoleyun/os/uiuiutils/JGYUtils.java b/src/com/aoleyun/os/uiuiutils/JGYUtils.java index 18b3cc0..3a09444 100644 --- a/src/com/aoleyun/os/uiuiutils/JGYUtils.java +++ b/src/com/aoleyun/os/uiuiutils/JGYUtils.java @@ -257,5 +257,11 @@ public class JGYUtils { e.printStackTrace(); } } + + public static boolean isUnlocked(Context context) { + int locked = Settings.System.getInt(context.getContentResolver(), "qch_unlock_ipad", 0); + int aihuaUnlock = Settings.System.getInt(context.getContentResolver(), "Aihua_unlock_state", 0); + return locked == 1 || aihuaUnlock == 1; + } } diff --git a/src/com/aoleyun/os/uiuiutils/MD5Util.java b/src/com/aoleyun/os/uiuiutils/MD5Util.java new file mode 100644 index 0000000..55c0131 --- /dev/null +++ b/src/com/aoleyun/os/uiuiutils/MD5Util.java @@ -0,0 +1,112 @@ +package com.aoleyun.os.uiuiutils; + +import android.annotation.SuppressLint; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5Util { + + public static String packetMD5(String str) { + MessageDigest messageDigest = null; + try { + messageDigest = MessageDigest.getInstance("MD5"); + + messageDigest.reset(); + + messageDigest.update(str.getBytes("UTF-8")); + } catch (NoSuchAlgorithmException e) { + System.out.println("NoSuchAlgorithmException caught!"); + System.exit(-1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + byte[] byteArray = messageDigest.digest(); + + StringBuffer md5StrBuff = new StringBuffer(); + + for (int i = 0; i < byteArray.length; i++) { + if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) + md5StrBuff.append("0").append( + Integer.toHexString(0xFF & byteArray[i])); + else + md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])); + } + + return md5StrBuff.toString(); + } + + @SuppressLint("DefaultLocale") + public static String getUpperMD5Str(String str) { + MessageDigest messageDigest = null; + + try { + messageDigest = MessageDigest.getInstance("MD5"); + + messageDigest.reset(); + + messageDigest.update(str.getBytes("UTF-8")); + } catch (NoSuchAlgorithmException e) { + System.out.println("NoSuchAlgorithmException caught!"); + System.exit(-1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + byte[] byteArray = messageDigest.digest(); + + StringBuffer md5StrBuff = new StringBuffer(); + + for (int i = 0; i < byteArray.length; i++) { + if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) + md5StrBuff.append("0").append( + Integer.toHexString(0xFF & byteArray[i])); + else + md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])); + } + + return md5StrBuff.toString().toUpperCase(); + } + + + /** + * 获取16位的MD5 值得 + * + * @param str + * @return + */ + @SuppressLint("DefaultLocale") + public static String getUpperMD5Str16(String str) { + MessageDigest messageDigest = null; + + try { + messageDigest = MessageDigest.getInstance("MD5"); + + messageDigest.reset(); + + messageDigest.update(str.getBytes("UTF-8")); + } catch (NoSuchAlgorithmException e) { + System.out.println("NoSuchAlgorithmException caught!"); + System.exit(-1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + byte[] byteArray = messageDigest.digest(); + + StringBuffer md5StrBuff = new StringBuffer(); + + for (int i = 0; i < byteArray.length; i++) { + if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) + md5StrBuff.append("0").append( + Integer.toHexString(0xFF & byteArray[i])); + else + md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])); + } + + return md5StrBuff.toString().toUpperCase().substring(8, 24); + } + +}