version:3.4.5

fix:
update:优化全局网络黑名单和第二天提示整机时间已用完
This commit is contained in:
2025-09-29 18:30:31 +08:00
parent 6f605bb263
commit 42a38cc6d9
9 changed files with 170 additions and 53 deletions

View File

@@ -74,8 +74,8 @@ android {
official {
flavorDimensions "default"
versionCode 80
versionName "3.4.0"
versionCode 85
versionName "3.4.5"
}
}

View File

@@ -31,6 +31,8 @@ public class CommonConfig {
public static final String KEY_IS_CONTROL = "is_control_key";
public static final String DEVICES_IS_BIND_KEY = "is_bind_state";
/*内置应用名单*/
public static final String BUILT_IN_APPS = "built_in_apps_key";
/**
* 设备重启标志 重启后请求接口Service重启不请求
@@ -113,4 +115,8 @@ public class CommonConfig {
/*WiFi白名单*/
public static final String AOLE_ACTION_AOLE_SSID_WHITE_LIST = "aole_ssid_whiteList";
/*应用动态权限*/
public static final String AOLE_APP_PRIVILEGE = "aole_app_privilege";
}

View File

@@ -56,6 +56,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
@@ -63,6 +64,8 @@ import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
@@ -332,18 +335,52 @@ public class RunningAppManager {
Log.i(TAG, "TimeChangedReceiver:" + action);
long time = System.currentTimeMillis();
String finaWayDate = sdf.format(time);
Log.e(TAG, "onReceive: finaWayDate = " + finaWayDate);
if ("00:00:00".equals(finaWayDate)) {
//清除数据保证及时性
mMMKV.encode(RemainingTimeMap, "");
mMMKV.encode(GlobalUsageTimeMap, "");
mMMKV.encode(AllApplUsageTimeMap, "");
mRemainingTimeMap.clear();
mGlobalUsageTime.clear();
mAllAppUsageTime.clear();
getConfig();
}
}
}
private void getConfig() {
int min = 300;
int max = 1800;
Random random = new Random();
int randomNumber = random.nextInt(max - min + 1) + min; // 公式nextInt(范围跨度) + 最小值
Observable.timer(randomNumber, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
}
@Override
public void onNext(@io.reactivex.rxjava3.annotations.NonNull Long aLong) {
//清除数据保证及时性
mMMKV.encode(RemainingTimeMap, "");
mMMKV.encode(GlobalUsageTimeMap, "");
mMMKV.encode(AllApplUsageTimeMap, "");
mRemainingTimeMap.clear();
mGlobalUsageTime.clear();
mAllAppUsageTime.clear();
NetInterfaceManager.getInstance().getAppTimeControl();
NetInterfaceManager.getInstance().getSnTimeControl();
}
@Override
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void killBackgroundProcesses(String processName) {
// gotoLauncher();
// mIsScanning = true;
@@ -730,6 +767,7 @@ public class RunningAppManager {
* @param pkg
* @return
*/
@Deprecated
public boolean inControlTime2(String pkg) {
Log.i(TAG, "inControlTime: pkg = " + pkg);
if (allowPackage.contains(pkg)) {
@@ -975,6 +1013,11 @@ public class RunningAppManager {
}
}
} else {//app额度打开 app使用时段关闭
if (globalRemainingTime <= 0) {
Log.e(TAG, "inControlTime: appTimeControl globalRemainingTime = 0");
ToastUtil.show("整机可用时间已用完");
return true;
}
Log.e(TAG, "inControlTime: appTimeControl is_quota = 1 is_part = 0");
if (appTimeControl.getRest_time() == 0 && appTimeControl.getWork_time() == 0) {//自由配置且没有设置额度
return false;
@@ -1009,6 +1052,11 @@ public class RunningAppManager {
} else {
Log.e(TAG, "inControlTime: appTimeControl " + "不在管控时间内");
if (appTimeControl.getRest_time() == 0 && appTimeControl.getWork_time() == 0) {//自由配置且没有设置额度
if (globalRemainingTime <= 0) {
Log.e(TAG, "inControlTime: appTimeControl globalRemainingTime = 0");
ToastUtil.show("整机可用时间已用完");
return true;
}
Log.e(TAG, "inControlTime: appTimeControl " + "自由配置且没有设置额度");
return false;
} else {
@@ -1126,11 +1174,13 @@ public class RunningAppManager {
private int getTodayTime(AppTimeControl appTimeControl) {
if (inWeekDay()) {
Log.e(TAG, "getTodayTime: Work");
return (int) appTimeControl.getWork_time();
int workTime = (int) appTimeControl.getWork_time();
Log.e(TAG, "getTodayTime: Work = " + workTime);
return workTime;
} else {
Log.e(TAG, "getTodayTime: Rest");
return (int) appTimeControl.getRest_time();
int restTime = (int) appTimeControl.getRest_time();
Log.e(TAG, "getTodayTime: Rest = " + restTime);
return restTime;
}
}

View File

@@ -2070,6 +2070,7 @@ public class NetInterfaceManager {
}
}
@Deprecated
public void getSystemSettings(boolean refresh, BehaviorSubject<ActivityEvent> lifecycle, CompleteCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_MINUTE;
if (refresh) {
@@ -2117,20 +2118,23 @@ public class NetInterfaceManager {
public void onNext(BaseResponse<SystemSettingsSet> systemSettingsBaseResponse) {
Log.e("getSystemSettings", "onNext: " + systemSettingsBaseResponse);
SPUtils.put(mContext, "is_first_connection", 0);
//imei是否绑定
int is_bind = mMMKV.decodeInt(CommonConfig.DEVICES_IS_BIND_KEY, 0);
int code = systemSettingsBaseResponse.code;
if (is_bind == 1) {
if (code == 200) {
String data = new Gson().toJson(systemSettingsBaseResponse.data.getUser());
ControlManager.getInstance().setSystemSetting(data);
} else {
Settings.System.putInt(mContext.getContentResolver(), CommonConfig.KEY_IS_CONTROL, 0);
ControlManager.getInstance().setDisableSetting();
}
if (code == 200) {
String data = new Gson().toJson(systemSettingsBaseResponse.data.getUser());
ControlManager.getInstance().setSystemSetting(data);
} else {
Settings.System.putInt(mContext.getContentResolver(), CommonConfig.KEY_IS_CONTROL, 0);
ControlManager.getInstance().setDisableSetting();
}
//imei是否绑定
// int is_bind = mMMKV.decodeInt(CommonConfig.DEVICES_IS_BIND_KEY, 0);
// if (is_bind == 1) {
//
// } else {
// ControlManager.getInstance().setDisableSetting();
// }
}
@Override
@@ -2783,28 +2787,31 @@ public class NetInterfaceManager {
// .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
// .subscribe(getAppJumpObserver(callback));
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction()).subscribeOn(Schedulers.io())
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
.subscribe(getBlacklistObserver());
.subscribe(getBlacklistObserver(callback));
}
public void getAppJump(CompleteCallback callback) {
// getAppJumpObservable()
// .subscribe(getAppJumpObserver(callback));
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction()).subscribeOn(Schedulers.io())
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getBlacklistObserver());
.subscribe(getBlacklistObserver(callback));
}
public void getAppJump() {
// getAppJumpObservable()
// .subscribe(getAppJumpObserver(null));
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction()).subscribeOn(Schedulers.io())
Observable.zip(getAppJumpObservable(), getBlacklistObservable(), getBlacklistBiFunction())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getBlacklistObserver());
.subscribe(getBlacklistObserver(null));
}
private BiFunction<BaseResponse<List<AppJump>>, BaseResponse<BlacklistBean>, List<String>> getBlacklistBiFunction() {
@@ -2813,7 +2820,7 @@ public class NetInterfaceManager {
public List<String> apply(BaseResponse<List<AppJump>> listBaseResponse, BaseResponse<BlacklistBean> blacklistBeanBaseResponse) throws Throwable {
Log.e("getBlacklistBiFunction", "apply: listBaseResponse = " + listBaseResponse);
Log.e("getBlacklistBiFunction", "apply: blacklistBeanBaseResponse = " + blacklistBeanBaseResponse);
List<String> blackListUrls = new ArrayList<>();
Set<String> blackListUrls = new HashSet<>();
if (listBaseResponse.code == 200) {
List<AppJump> appJumpList = listBaseResponse.data;
if (appJumpList != null && !appJumpList.isEmpty()) {
@@ -2833,12 +2840,17 @@ public class NetInterfaceManager {
blackListUrls.addAll(stringList);
}
}
return blackListUrls;
// if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.G12NLPlatform) {
blackListUrls.add("com.tencent.wemeet.app.com.tencent.wemeet.sdk.view.OnlyPrivacyBrowserActivity");
blackListUrls.add("com.tencent.wemeet.app.com.tencent.wemeet.components.webcore.activity.GestureBrowserActivity");
blackListUrls.add("com.tencent.wemeet.components.webcore.activity.GestureBrowserActivity");
// }
return new ArrayList<>(blackListUrls);
}
};
}
private Observer<List<String>> getBlacklistObserver() {
private Observer<List<String>> getBlacklistObserver(CompleteCallback callback) {
return new Observer<List<String>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -2865,6 +2877,7 @@ public class NetInterfaceManager {
@Override
public void onComplete() {
Log.e("getBlacklistObserver", "onComplete: ");
if (callback != null) callback.onComplete();
}
};
}
@@ -3086,6 +3099,7 @@ public class NetInterfaceManager {
};
}
@Deprecated
public void getAppAndWhite(boolean refresh, BehaviorSubject<ActivityEvent> lifecycle, CompleteCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_MINUTE;
if (refresh) {
@@ -3140,9 +3154,11 @@ public class NetInterfaceManager {
if (appAndWhiteList != null) {
List<String> pkgList = appAndWhiteList.stream().map(AppAndWhiteBean::getApp_package).collect(Collectors.toList());
String pkgString = StringUtils.join(",", pkgList);
mMMKV.encode(UrlAddress.GET_APP_AND_WHITE, pkgString);
mMMKV.encode(CommonConfig.BUILT_IN_APPS, pkgString);
Log.e("getAppAndWhite", "onNext: " + pkgString);
}
} else {
mMMKV.remove(CommonConfig.BUILT_IN_APPS);
}
}
@@ -3155,6 +3171,7 @@ public class NetInterfaceManager {
@Override
public void onComplete() {
Log.e("getAppAndWhite", "onComplete: ");
JGYUtils.getInstance().putBuiltInApps();
if (callback != null) {
callback.onComplete();
}

View File

@@ -10,8 +10,6 @@ import android.util.Log;
import com.fuying.sn.config.CommonConfig;
import com.fuying.sn.manager.ControlManager;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.service.main.MainService;
import com.fuying.sn.utils.ApkUtils;
import com.fuying.sn.utils.CacheUtils;
import com.fuying.sn.utils.JGYUtils;
import com.fuying.sn.utils.SPUtils;
@@ -53,6 +51,7 @@ public class APKinstallReceiver extends BroadcastReceiver {
case Intent.ACTION_PACKAGE_ADDED:
state = "安装了:";
JGYUtils.RemoveTask(context, packageName);
JGYUtils.getInstance().putBuiltInApps();
break;
case Intent.ACTION_PACKAGE_REPLACED:
cleanLauncher3Cache();
@@ -91,7 +90,7 @@ public class APKinstallReceiver extends BroadcastReceiver {
private static void sendAppInfo() {
Observable.create((ObservableEmitter<String> emitter) -> newAppListener = emitter::onNext)
.throttleLast(5, TimeUnit.MINUTES)
.throttleLast(1, TimeUnit.MINUTES)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {

View File

@@ -71,7 +71,7 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override
public void getAppAndWhite() {
NetInterfaceManager.getInstance().getAppAndWhite(true, getLifecycle(), new NetInterfaceManager.CompleteCallback() {
NetInterfaceManager.getInstance().getAppAndWhite(getLifecycle(), new NetInterfaceManager.CompleteCallback() {
@Override
public void onComplete() {
mView.getAppAndWhiteFinish();
@@ -249,7 +249,7 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override
public void getSystemSettings() {
NetInterfaceManager.getInstance()
.getSystemSettings(true, getLifecycle(), new NetInterfaceManager.CompleteCallback() {
.getSystemSettings(getLifecycle(), new NetInterfaceManager.CompleteCallback() {
@Override
public void onComplete() {
mView.setSystemSettings();
@@ -319,7 +319,7 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override
public void getAppTimeControl() {
NetInterfaceManager.getInstance().getAppTimeControl(true, getLifecycle(), new NetInterfaceManager.CompleteCallback() {
NetInterfaceManager.getInstance().getAppTimeControl(getLifecycle(), new NetInterfaceManager.CompleteCallback() {
@Override
public void onComplete() {
mView.setAppTimeControl();

View File

@@ -31,6 +31,7 @@ import com.fuying.sn.config.CommonConfig;
import com.fuying.sn.manager.AmapManager;
import com.fuying.sn.manager.ControlManager;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.network.UrlAddress;
import com.fuying.sn.rlog.LogDBManager;
import com.fuying.sn.service.DownloadService;
import com.fuying.sn.service.GuardService;
@@ -201,6 +202,8 @@ public class MainService extends BaseRxService implements MainSContact.MainView,
registerReceivers();
startService();
Settings.System.putString(getContentResolver(), CommonConfig.APP_SOURCE_WHITE_LIST, DEFAULT_SOURCE);
JGYUtils.getInstance().putBuiltInApps();
}
private static final String DEFAULT_SOURCE = "com.fuying.sn,com.fuying.appstore,com.fuying.fuxiaoying";
@@ -466,7 +469,7 @@ public class MainService extends BaseRxService implements MainSContact.MainView,
// mPresenter.getAppTimeControl();
break;
case Intent.ACTION_SCREEN_ON:
getAppControl();
break;
case Intent.ACTION_SCREEN_OFF:
@@ -480,6 +483,19 @@ public class MainService extends BaseRxService implements MainSContact.MainView,
}
}
private void getAppControl() {
Log.e(TAG, "getAppControl: ");
long lastTime = mMMKV.decodeLong(UrlAddress.GET_APP_TIME_CONTROL + "_time", System.currentTimeMillis());
Log.e(TAG, "getAppControl: lastTime = " + lastTime);
Log.e(TAG, "getAppControl: lastTime = " + TimeUtils.getDate(lastTime));
if (TimeUtils.isTodayWithJavaTime(lastTime)) {
Log.e(TAG, "getAppControl: requests have been made today");
} else {
Log.e(TAG, "getAppControl: getAppTimeControl");
mPresenter.getAppTimeControl();
}
}
@Override
public void getAppAndWhiteFinish() {
mPresenter.checkUpdate();

View File

@@ -47,7 +47,6 @@ import com.fuying.sn.R;
import com.fuying.sn.config.CommonConfig;
import com.fuying.sn.gson.GsonUtils;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.network.UrlAddress;
import com.fuying.sn.receiver.BootReceiver;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -113,7 +112,7 @@ public class JGYUtils {
public static final String iPlay50SETag = "ipaly50SE";
public static final String G6Tag = "G6";
public static final String G11JTag = "G10J";
public static final String G12NLTag = " G12NL";
public static final String G12NLTag = "G12NL";
private HashSet<String> ownApp = new HashSet<String>() {{
@@ -207,7 +206,7 @@ public class JGYUtils {
}
public HashSet<String> getAppAndWhite() {
String pkgString = mMMKV.decodeString(UrlAddress.GET_APP_AND_WHITE, "");
String pkgString = mMMKV.decodeString(CommonConfig.BUILT_IN_APPS, "");
if (TextUtils.isEmpty(pkgString)) {
return new HashSet<>();
} else {
@@ -215,6 +214,24 @@ public class JGYUtils {
}
}
public void putBuiltInApps() {
String pkgString = mMMKV.decodeString(CommonConfig.BUILT_IN_APPS, "");
Set<String> stringSet = new HashSet<>(Arrays.asList(pkgString.split(",")));
Set<String> filter = stringSet.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return ApkUtils.isAvailable(mContext, s);
}
}).collect(Collectors.toSet());
if (filter.size() != 0) {
String pkg = String.join(",", filter);
Log.e(TAG, "putBuiltInApps: pkg = " + pkg);
Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_APP_PRIVILEGE, pkg);
} else {
Log.e(TAG, "putBuiltInApps: filter is empty");
}
}
private JGYUtils(Context context) {
if (context == null) {
throw new RuntimeException("Context is NULL");

View File

@@ -18,8 +18,10 @@ import java.net.InetAddress;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Calendar;
@@ -275,11 +277,7 @@ public class TimeUtils {
*/
public static boolean inWeekDay(long time) {
int weekDay = getWeekDay(time);
if (weekDay > 5) {
return true;
} else {
return false;
}
return weekDay > 5;
}
public static void setSystemTime(long time) {
@@ -356,11 +354,7 @@ public class TimeUtils {
}
Log.e(TAG, "inControlTime: " + (startDate.getTime() - minuteTime));
assert nowDate != null;
if (nowDate.getTime() <= startDate.getTime() - minuteTime || nowDate.getTime() >= endDate.getTime()) {
return true;
} else {
return false;
}
return nowDate.getTime() <= startDate.getTime() - minuteTime || nowDate.getTime() >= endDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
@@ -589,4 +583,22 @@ public class TimeUtils {
buffer[offset++] = (byte) (Math.random() * 255.0);
}
}
/**
* 使用 Java 8 现代API判断时间戳是否为今天
*
* @param timestamp 毫秒级时间戳
* @return 如果是今天返回 true否则返回 false
*/
public static boolean isTodayWithJavaTime(long timestamp) {
// 1. 获取系统默认时区下的当前日期
LocalDate today = LocalDate.now();
// 2. 将时间戳转换为Instant对象然后结合时区转换为LocalDateTime再提取日期部分
LocalDate dateToCheck = LocalDateTime.ofInstant(
Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()
).toLocalDate();
// 3. 比较两个日期是否相等
return today.equals(dateToCheck);
}
}