version:MTK 2.3

fix:优化解锁后不能打开管控app
update:解锁后显示应用市场等
This commit is contained in:
2022-08-10 18:12:34 +08:00
parent de3cff39ae
commit 99634fa71f
21 changed files with 344 additions and 99 deletions

View File

@@ -66,12 +66,12 @@ android {
minSdkVersion 26 minSdkVersion 26
targetSdkVersion 28 targetSdkVersion 28
// //MTK //MTK
// versionCode 13 versionCode 14
// versionName "2.2" versionName "2.3"
//cube // //cube
versionCode 37 // versionCode 54
versionName "4.6" // versionName "6.2"
ndk { ndk {
//选择要添加的对应 cpu 类型的 .so 库。 //选择要添加的对应 cpu 类型的 .so 库。
@@ -133,17 +133,12 @@ android {
signingConfig signingConfigs.zhanRui signingConfig signingConfigs.zhanRui
} }
alldocubeDebug.initWith(debug) //userdebug rom使用这个版本
alldocubeDebug { zhanRuiUserdebug.initWith(zhanRuiDebug)
buildConfigField "String", "platform", '"ZhanRuiCube"' zhanRuiUserdebug {
debuggable true
versionNameSuffix "-debug" versionNameSuffix "-debug"
signingConfig signingConfigs.zhanRuiUserdebug buildConfigField "String", "platform", '"ZhanRui"'
} debuggable true
alldocubeDebugReleas.initWith(release)
alldocubeDebugReleas {
buildConfigField "String", "platform", '"ZhanRuiCube"'
signingConfig signingConfigs.zhanRuiUserdebug signingConfig signingConfigs.zhanRuiUserdebug
} }
@@ -334,7 +329,7 @@ dependencies {
androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
androidTestImplementation "androidx.annotation:annotation:${ANDROID_X_VERSION}" androidTestImplementation "androidx.annotation:annotation:${ANDROID_X_VERSION}"
//OkHttp //OkHttp
implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.okhttp3:okhttp:4.9.2'
//RxJava和Retrofit //RxJava和Retrofit
implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

View File

@@ -105,7 +105,7 @@ import com.aoleyun.os.model.ModelWriter;
import com.aoleyun.os.network.bean.AppPasswdBean; import com.aoleyun.os.network.bean.AppPasswdBean;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.HTTPInterface; 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.network.bean.NewestAppUpdateResult;
import com.aoleyun.os.notification.NotificationListener; import com.aoleyun.os.notification.NotificationListener;
import com.aoleyun.os.pageindicators.PageIndicatorDots; import com.aoleyun.os.pageindicators.PageIndicatorDots;
@@ -167,7 +167,6 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Random;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -1157,7 +1156,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
String app_name = APKUtils.getAppNameByPackage(Launcher.this, packageName); String app_name = APKUtils.getAppNameByPackage(Launcher.this, packageName);
long openTime = TimeUtils.getInstance().getStartTime() / 1000; long openTime = TimeUtils.getInstance().getStartTime() / 1000;
long closeTime = TimeUtils.getInstance().getEndTime() / 1000; long closeTime = TimeUtils.getInstance().getEndTime() / 1000;
NetworkManager.getInstance() NetInterfaceManager.getInstance()
.getAppUsageRecordControl() .getAppUsageRecordControl()
.sendAppUsageRecord(Utils.getSerial(), packageName, app_name, openTime, closeTime) .sendAppUsageRecord(Utils.getSerial(), packageName, app_name, openTime, closeTime)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@@ -1371,7 +1370,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
}; };
private void checkUpdate() { private void checkUpdate() {
NetworkManager.getInstance() NetInterfaceManager.getInstance()
.getCheckUpdateObservable() .getCheckUpdateObservable()
.getCheckUpdate(BuildConfig.APPLICATION_ID, .getCheckUpdate(BuildConfig.APPLICATION_ID,
BuildConfig.VERSION_CODE, BuildConfig.VERSION_CODE,

View File

@@ -8,8 +8,8 @@ import android.util.Log;
import com.aoleyun.os.manager.ConnectManager; import com.aoleyun.os.manager.ConnectManager;
import com.aoleyun.os.uiuiutils.ToastUtil; import com.aoleyun.os.uiuiutils.ToastUtil;
import com.aoleyun.os.uiuiutils.Utils; import com.aoleyun.os.uiuiutils.Utils;
import com.aoleyun.os.network.NetworkManager; import com.aoleyun.os.network.NetInterfaceManager;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import com.aoleyun.os.uiuiutils.JGYUtils; import com.aoleyun.os.uiuiutils.JGYUtils;
import com.aoleyun.os.uiuiutils.TimeUtils; import com.aoleyun.os.uiuiutils.TimeUtils;
import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.Aria;
@@ -59,7 +59,7 @@ public class BaseApplication extends Application {
JGYUtils.init(this); JGYUtils.init(this);
TimeUtils.init(this); TimeUtils.init(this);
Aria.init(this); Aria.init(this);
NetworkManager.init(this); NetInterfaceManager.init(this);
ToastUtil.init(this); ToastUtil.init(this);
ConnectManager.init(this); ConnectManager.init(this);
@@ -82,7 +82,7 @@ public class BaseApplication extends Application {
Log.e("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg); Log.e("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg);
} }
}); });
NetworkManager.getInstance().setPushTag(true, new NetworkManager.onCompleteCallback() { NetInterfaceManager.getInstance().setPushTag(true, new NetInterfaceManager.onCompleteCallback() {
@Override @Override
public void onComplete() { public void onComplete() {
@@ -317,7 +317,7 @@ public class BaseApplication extends Application {
//https://docs.jiguang.cn/jpush/server/push/rest_api_v3_device/#_5 //https://docs.jiguang.cn/jpush/server/push/rest_api_v3_device/#_5
OkHttpClient client = new OkHttpClient(); OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() Request request = new Request.Builder()
.url(URLPath.DELETE_JPUSH_ALIAS + Utils.getSerial()) .url(UrlAddress.DELETE_JPUSH_ALIAS + Utils.getSerial())
.header("Authorization", key) .header("Authorization", key)
.delete() .delete()
.build(); .build();
@@ -339,7 +339,7 @@ public class BaseApplication extends Application {
synchronized public void cleanJpushTag() { synchronized public void cleanJpushTag() {
OkHttpClient client = new OkHttpClient(); OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() Request request = new Request.Builder()
.url(URLPath.DELETE_JPUSH_TAG + Utils.getSerial()) .url(UrlAddress.DELETE_JPUSH_TAG + Utils.getSerial())
.header("Authorization", key) .header("Authorization", key)
.delete() .delete()
.build(); .build();

View File

@@ -18,6 +18,9 @@ public class ConnectManager {
public static final long SIX_HOUR_TIME = ONE_HOUR_TIME * 6; 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 HALF_DAY_TIME = SIX_HOUR_TIME * 2;
public static final long ONE_DAY_TIME = HALF_DAY_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"; 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"); throw new RuntimeException("Context is NULL");
} }
this.mContext = context; this.mContext = context;
} }
public static void init(Context context) { public static void init(Context context) {
@@ -81,12 +83,24 @@ public class ConnectManager {
case ONE_DAY: case ONE_DAY:
time = ONE_DAY_TIME; time = ONE_DAY_TIME;
break; 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: default:
} }
return time; return time;
} }
public boolean isNeedConnect(String key, ConnectMode connectMode) { public boolean isNeedConnect(String key, ConnectMode connectMode) {
if (connectMode == ConnectMode.ONCE) {
return false;
}
long nowTime = System.currentTimeMillis(); long nowTime = System.currentTimeMillis();
long lastTime = mMMKV.decodeLong(key, 0); long lastTime = mMMKV.decodeLong(key, 0);
long intervalTime = getConnectModeTime(connectMode); long intervalTime = getConnectModeTime(connectMode);

View File

@@ -9,4 +9,8 @@ public enum ConnectMode {
SIX_HOUR, SIX_HOUR,
HALF_DAY, HALF_DAY,
ONE_DAY, ONE_DAY,
TWO_DAY,
FOUR_DAY,
A_WEEK,
ONCE
} }

View File

@@ -319,7 +319,7 @@ public class LoaderTask implements Runnable {
final List<UserHandle> profiles = mUserManager.getUserProfiles(); final List<UserHandle> profiles = mUserManager.getUserProfiles();
String whiteList = Settings.System.getString(crv, JGYActions.ACTION_JGY_SHORTCUTLIST); String whiteList = Settings.System.getString(crv, JGYActions.ACTION_JGY_SHORTCUTLIST);
Log.e("verifyApplications", "whiteList: " + whiteList); 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); Log.e(TAG, "verifyApplications: aihuaUnlock = " + aihuaUnlock);
for (UserHandle user : profiles) { for (UserHandle user : profiles) {
final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null, user); final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null, user);

View File

@@ -34,7 +34,7 @@ public class HTTPInterface {
private static final String TAG = HTTPInterface.class.getSimpleName(); private static final String TAG = HTTPInterface.class.getSimpleName();
public static void getAppPasswd() { public static void getAppPasswd() {
NetworkManager.getInstance().getAppPasswordObservable() NetInterfaceManager.getInstance().getAppPasswordObservable()
.subscribe(new Observer<BaseResponse<List<AppPasswdBean>>>() { .subscribe(new Observer<BaseResponse<List<AppPasswdBean>>>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
@@ -67,7 +67,7 @@ public class HTTPInterface {
} }
synchronized public static void setJpushTags(final Context context) { synchronized public static void setJpushTags(final Context context) {
NetworkManager.getInstance() NetInterfaceManager.getInstance()
.getJpushTagsObservable() .getJpushTagsObservable()
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {
@Override @Override
@@ -132,7 +132,7 @@ public class HTTPInterface {
jsonObject.addProperty("app_name", APKUtils.getAppNameByPackage(context, packageName)); jsonObject.addProperty("app_name", APKUtils.getAppNameByPackage(context, packageName));
jsonObject.addProperty("status", 1); jsonObject.addProperty("status", 1);
String jsonString = jsonObject.toString(); String jsonString = jsonObject.toString();
NetworkManager.getInstance().getRunningAppObservable(jsonString) NetInterfaceManager.getInstance().getRunningAppObservable(jsonString)
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {

View File

@@ -1,18 +1,13 @@
package com.aoleyun.os.network; package com.aoleyun.os.network;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.os.Environment;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.aoleyun.os.disklrucache.CacheHelper; import com.aoleyun.os.disklrucache.CacheHelper;
import com.aoleyun.os.manager.ConnectManager; import com.aoleyun.os.manager.ConnectManager;
import com.aoleyun.os.manager.ConnectMode; 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.AddAppLog;
import com.aoleyun.os.network.api.AppUsageRecordApi; import com.aoleyun.os.network.api.AppUsageRecordApi;
import com.aoleyun.os.network.api.CheckUpdate; 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.GetJpushTagsApi;
import com.aoleyun.os.network.api.RunningApp; import com.aoleyun.os.network.api.RunningApp;
import com.aoleyun.os.network.api.SendScreenshotApi; import com.aoleyun.os.network.api.SendScreenshotApi;
import com.google.gson.Gson; import com.aoleyun.os.network.bean.AppPasswdBean;
import com.google.gson.JsonObject; import com.aoleyun.os.network.bean.BaseResponse;
import com.google.gson.JsonParser; 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.XGIOperateCallback;
import com.tencent.android.tpush.XGPushManager; import com.tencent.android.tpush.XGPushManager;
import com.tencent.mmkv.MMKV; import com.tencent.mmkv.MMKV;
@@ -41,69 +39,75 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import okhttp3.Cache; import okhttp3.Cache;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import retrofit2.CallAdapter;
import retrofit2.Converter;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.gson.GsonConverterFactory;
public class NetworkManager { public class NetInterfaceManager {
private static NetworkManager sInstance; private static final String TAG = NetInterfaceManager.class.getSimpleName();
@SuppressLint("StaticFieldLeak")
private static NetInterfaceManager sInstance;
private Context mContext; private Context mContext;
private Retrofit mRetrofit;
private OkHttpClient okHttpClient;
private MMKV mMMKV = MMKV.defaultMMKV(); private MMKV mMMKV = MMKV.defaultMMKV();
private CacheHelper cacheHelper; 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.mContext = context;
this.cacheHelper = new CacheHelper(mContext); 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) { if (null == mRetrofit) {
mRetrofit = new Retrofit.Builder() mRetrofit = new Retrofit.Builder()
.client(okHttpClient) .client(okHttpClient)
.baseUrl(ROOT_URL) .baseUrl(ROOT_URL)
.addConverterFactory(gsonConverterFactory) .addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(rxJavaCallAdapterFactory) .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build(); .build();
} }
} }
public static void init(Context context) { public static void init(Context context) {
if (context == null) {
throw new RuntimeException("Context is NULL");
}
if (sInstance == null) { if (sInstance == null) {
sInstance = new NetworkManager(context); sInstance = new NetInterfaceManager(context);
}
} }
} public static NetInterfaceManager getInstance() {
public static NetworkManager getInstance() {
if (sInstance == null) { if (sInstance == null) {
throw new IllegalStateException("You must be init NetworkManager first"); throw new IllegalStateException("You must be init NetworkManager first");
} }
return sInstance; 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<BaseResponse> getRunningAppObservable(String json) { public Observable<BaseResponse> getRunningAppObservable(String json) {
return mRetrofit.create(RunningApp.class) return mRetrofit.create(RunningApp.class)
@@ -154,19 +158,19 @@ public class NetworkManager {
} }
public void setPushTag(boolean refresh, onCompleteCallback callback) { public void setPushTag(boolean refresh, onCompleteCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_DAY; ConnectMode connectMode = ConnectMode.TWO_DAY;
if (refresh) { 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); setPushTag(callback);
} else { } else {
String jsonString = cacheHelper.getAsString(URLPath.GET_DEVICES_TAGS); String jsonString = cacheHelper.getAsString(UrlAddress.GET_DEVICES_TAGS);
// "" 是已经请求成功的 // "" 是已经请求成功的
if (jsonString == null) { if (jsonString == null) {
setPushTag(callback); setPushTag(callback);
} else { } else {
Set tagSets = mMMKV.decodeStringSet(URLPath.GET_DEVICES_TAGS); Set tagSets = mMMKV.decodeStringSet(UrlAddress.GET_DEVICES_TAGS);
Log.e("setPushTags", "tagSets: " + tagSets); Log.e("setPushTags", "tagSets: " + tagSets);
clearAndAppendTags(tagSets); clearAndAppendTags(tagSets);
callback.onComplete(); callback.onComplete();
@@ -199,14 +203,14 @@ public class NetworkManager {
Log.e("setPushTag", "onNext: " + response); Log.e("setPushTag", "onNext: " + response);
if (response.code == 200) { if (response.code == 200) {
String batch = response.data.getBatch(); String batch = response.data.getBatch();
cacheHelper.put(URLPath.GET_DEVICES_TAGS, batch); cacheHelper.put(UrlAddress.GET_DEVICES_TAGS, batch);
if (!TextUtils.isEmpty(batch)) { if (!TextUtils.isEmpty(batch)) {
set.add(batch); set.add(batch);
} else { } else {
Log.e("setPushTag", "onNext: " + "batch empty"); Log.e("setPushTag", "onNext: " + "batch empty");
} }
} else { } else {
cacheHelper.put(URLPath.GET_DEVICES_TAGS, ""); cacheHelper.put(UrlAddress.GET_DEVICES_TAGS, "");
} }
} }
@@ -219,7 +223,7 @@ public class NetworkManager {
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("setPushTag", "onComplete: "); Log.e("setPushTag", "onComplete: ");
mMMKV.encode(URLPath.GET_DEVICES_TAGS, set); mMMKV.encode(UrlAddress.GET_DEVICES_TAGS, set);
clearAndAppendTags(set); clearAndAppendTags(set);
callback.onComplete(); callback.onComplete();
} }

View File

@@ -1,6 +1,6 @@
package com.aoleyun.os.network; 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 ROOT_URL = "https://led.aoleyun.cn/api/";
public static final String APP_LOG = "app/addAppLog"; public static final String APP_LOG = "app/addAppLog";
//获取正在运行的app //获取正在运行的app

View File

@@ -1,7 +1,7 @@
package com.aoleyun.os.network.api; package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Field; import retrofit2.http.Field;
@@ -10,7 +10,7 @@ import retrofit2.http.POST;
public interface AddAppLog { public interface AddAppLog {
@FormUrlEncoded @FormUrlEncoded
@POST(URLPath.APP_LOG) @POST(UrlAddress.APP_LOG)
Observable<BaseResponse> addLog( Observable<BaseResponse> addLog(
@Field("sn") String sn, @Field("sn") String sn,
@Field("packageName") String packageName, @Field("packageName") String packageName,

View File

@@ -1,7 +1,7 @@
package com.aoleyun.os.network.api; package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
@@ -11,7 +11,7 @@ import retrofit2.http.POST;
public interface AppUsageRecordApi { public interface AppUsageRecordApi {
@FormUrlEncoded @FormUrlEncoded
@POST(URLPath.SEND_APP_RECORD) @POST(UrlAddress.SEND_APP_RECORD)
Observable<BaseResponse> sendAppUsageRecord( Observable<BaseResponse> sendAppUsageRecord(
@Field("sn") String sn, @Field("sn") String sn,
@Field("app_package") String app_package, @Field("app_package") String app_package,

View File

@@ -2,7 +2,7 @@ package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.bean.NewestAppUpdateResult; import com.aoleyun.os.network.bean.NewestAppUpdateResult;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Field; import retrofit2.http.Field;
@@ -11,7 +11,7 @@ import retrofit2.http.POST;
public interface CheckUpdate { public interface CheckUpdate {
@FormUrlEncoded @FormUrlEncoded
@POST(URLPath.GET_NEWESTAPPUPDATE) @POST(UrlAddress.GET_NEWESTAPPUPDATE)
Observable<BaseResponse<NewestAppUpdateResult>> getCheckUpdate( Observable<BaseResponse<NewestAppUpdateResult>> getCheckUpdate(
@Field("package")String packageName, @Field("package")String packageName,
@Field("versionCode")int versionCode, @Field("versionCode")int versionCode,

View File

@@ -2,7 +2,7 @@ package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.AppPasswdBean; import com.aoleyun.os.network.bean.AppPasswdBean;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import java.util.List; import java.util.List;
@@ -18,7 +18,7 @@ import retrofit2.http.Query;
* version: 1.0 * version: 1.0
*/ */
public interface GetAppPassword { public interface GetAppPassword {
@GET(URLPath.GET_APP_PASSWD) @GET(UrlAddress.GET_APP_PASSWD)
Observable<BaseResponse<List<AppPasswdBean>>> getAppPasswd( Observable<BaseResponse<List<AppPasswdBean>>> getAppPasswd(
@Query("sn") String sn @Query("sn") String sn
); );

View File

@@ -2,7 +2,7 @@ package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; 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 com.aoleyun.os.network.bean.Batch;
import io.reactivex.Observable; import io.reactivex.Observable;
@@ -10,7 +10,7 @@ import retrofit2.http.GET;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface GetJpushTagsApi { public interface GetJpushTagsApi {
@GET(URLPath.GET_DEVICES_TAGS) @GET(UrlAddress.GET_DEVICES_TAGS)
Observable<BaseResponse<Batch>> getJpushTags( Observable<BaseResponse<Batch>> getJpushTags(
@Query("sn") String sn @Query("sn") String sn
); );

View File

@@ -1,7 +1,7 @@
package com.aoleyun.os.network.api; package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Field; import retrofit2.http.Field;
@@ -10,7 +10,7 @@ import retrofit2.http.POST;
public interface RunningApp { public interface RunningApp {
@FormUrlEncoded @FormUrlEncoded
@POST(URLPath.RUN_NEW_APP) @POST(UrlAddress.RUN_NEW_APP)
Observable<BaseResponse> sendRunningInfo( Observable<BaseResponse> sendRunningInfo(
@Field("sn") String sn, @Field("sn") String sn,
@Field("app") String app @Field("app") String app

View File

@@ -1,7 +1,7 @@
package com.aoleyun.os.network.api; package com.aoleyun.os.network.api;
import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.network.bean.BaseResponse;
import com.aoleyun.os.network.URLPath; import com.aoleyun.os.network.UrlAddress;
import java.util.Map; import java.util.Map;
@@ -14,7 +14,7 @@ import retrofit2.http.QueryMap;
public interface SendScreenshotApi { public interface SendScreenshotApi {
@Multipart @Multipart
@POST(URLPath.SEND_SCREENSHOT) @POST(UrlAddress.SEND_SCREENSHOT)
Observable<BaseResponse> sendScreenshot( Observable<BaseResponse> sendScreenshot(
@QueryMap Map<String, String> params, @QueryMap Map<String, String> params,
@Part MultipartBody.Part body @Part MultipartBody.Part body

View File

@@ -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<String, Long> 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 "-";
}
}
}

View File

@@ -11,7 +11,7 @@ import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.aoleyun.os.BuildConfig; 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.network.bean.BaseResponse;
import com.aoleyun.os.uiuiutils.APKUtils; import com.aoleyun.os.uiuiutils.APKUtils;
import com.aoleyun.os.uiuiutils.CmdUtil; import com.aoleyun.os.uiuiutils.CmdUtil;
@@ -185,7 +185,7 @@ public class MainService extends Service {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("sn", Utils.getSerial()); params.put("sn", Utils.getSerial());
params.put("createtime", String.valueOf(time)); params.put("createtime", String.valueOf(time));
NetworkManager.getInstance().getScreenshotApi() NetInterfaceManager.getInstance().getScreenshotApi()
.sendScreenshot(params, body) .sendScreenshot(params, body)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())

View File

@@ -45,6 +45,7 @@ import com.aoleyun.os.Launcher;
import com.aoleyun.os.LauncherAppWidgetInfo; import com.aoleyun.os.LauncherAppWidgetInfo;
import com.aoleyun.os.LauncherAppWidgetProviderInfo; import com.aoleyun.os.LauncherAppWidgetProviderInfo;
import com.aoleyun.os.uiuiutils.CustomDialog; import com.aoleyun.os.uiuiutils.CustomDialog;
import com.aoleyun.os.uiuiutils.JGYUtils;
import com.aoleyun.os.uiuiutils.ToastUtil; import com.aoleyun.os.uiuiutils.ToastUtil;
import com.aoleyun.os.base.BaseApplication; import com.aoleyun.os.base.BaseApplication;
import com.aoleyun.os.PromiseAppInfo; import com.aoleyun.os.PromiseAppInfo;
@@ -162,7 +163,7 @@ public class ItemClickHandler {
//写入正在运行的app的包名和时间 //写入正在运行的app的包名和时间
TimeUtils.getInstance().setAppPackageName(packageName); TimeUtils.getInstance().setAppPackageName(packageName);
TimeUtils.getInstance().setStartTime(System.currentTimeMillis()); TimeUtils.getInstance().setStartTime(System.currentTimeMillis());
HTTPInterface.sendRunningApp(BaseApplication.getContext()); // HTTPInterface.sendRunningApp(BaseApplication.getContext());
} else if (tag instanceof FolderInfo) { } else if (tag instanceof FolderInfo) {
if (v instanceof FolderIcon) { if (v instanceof FolderIcon) {
onClickFolderIcon(v); onClickFolderIcon(v);
@@ -182,6 +183,9 @@ public class ItemClickHandler {
} }
private static boolean is_forbid(Context context, String pkg) { private static boolean is_forbid(Context context, String pkg) {
if (JGYUtils.isUnlocked(context)) {
return false;
}
switch (pkg) { switch (pkg) {
case "com.mediatek.camera": case "com.mediatek.camera":
case "com.android.camera2": case "com.android.camera2":

View File

@@ -257,5 +257,11 @@ public class JGYUtils {
e.printStackTrace(); 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;
}
} }

View File

@@ -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);
}
}