diff --git a/app/build.gradle b/app/build.gradle
index c305569..f0c1944 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -29,8 +29,8 @@ android {
defaultConfig {
applicationId "com.aoleyun.sn"
- versionCode 186
- versionName "1.5.0714"
+ versionCode 187
+ versionName "1.5.0719"
//There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature.
minSdkVersion 24
@@ -47,7 +47,7 @@ android {
buildConfigField "String", "ROOT_URL", '"https://led.aoleyun.cn/api/"'
buildConfigField "String", "SCREEN_BASE_URL", '"https://led.aoleyun.cn:2018/"'
buildConfigField "String", "SCREEN_URL", '"https://led.aoleyun.cn:2018/wm/is_online"'
- buildConfigField "String", "WebsocketURL", '"wss://led.aoleyun.cn:2018"'
+ buildConfigField "String", "WEBSOCKET_URL", '"wss://led.aoleyun.cn/wss/"'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea689ba..503c162 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -397,7 +397,7 @@
());
JgyUtils.getInstance().setAppRestriction(0);
+ JgyUtils.getInstance().setDeveloperOptions(1);
}
} else if (response.code == NOTFOUND) {
Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
@@ -3040,7 +3041,7 @@ public class NetInterfaceManager {
public void onNext(BaseResponse browserDataBaseResponse) {
Log.e("setBrowserBlackList", "onNext: ");
String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL");
- setBlackWhiteLis(browserDataBaseResponse, homePage);
+ setBlackWhiteList(browserDataBaseResponse, homePage);
}
@Override
@@ -3091,7 +3092,7 @@ public class NetInterfaceManager {
}
setBrowserBookmarks(browserBookmarksBaseResponse);
- setBlackWhiteLis(browserDataBaseResponse, homePage);
+ setBlackWhiteList(browserDataBaseResponse, homePage);
return homePage;
}
})
@@ -3135,7 +3136,7 @@ public class NetInterfaceManager {
}
setBrowserBookmarks(browserBookmarksBaseResponse);
- setBlackWhiteLis(browserDataBaseResponse, homePage);
+ setBlackWhiteList(browserDataBaseResponse, homePage);
return homePage;
}
})
@@ -3261,7 +3262,7 @@ public class NetInterfaceManager {
}
}
- private void setBlackWhiteLis(BaseResponse browserDataBaseResponse, String homePage) {
+ private void setBlackWhiteList(BaseResponse browserDataBaseResponse, String homePage) {
//黑白名单
if (browserDataBaseResponse.code == 200) {
BrowserData browserData = browserDataBaseResponse.data;
@@ -3280,6 +3281,10 @@ public class NetInterfaceManager {
if (!TextUtils.isEmpty(black)) {
boolean qch_webblack_url = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black);
Log.e("setBrowserBlackList", "setBrowserList black = " + black + ":" + qch_webblack_url);
+ if (JgyUtils.isAllWinnerDevice()) {
+ List componentNames = new ArrayList<>(Arrays.asList(black.split(",")));
+ AllwinnerCubeMdmManager.getInstance().setComponentDisable(componentNames, true);
+ }
} else {
Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " ");
}
diff --git a/app/src/main/java/com/aoleyun/sn/push/PushManager.java b/app/src/main/java/com/aoleyun/sn/push/PushManager.java
index a26961a..245f26e 100644
--- a/app/src/main/java/com/aoleyun/sn/push/PushManager.java
+++ b/app/src/main/java/com/aoleyun/sn/push/PushManager.java
@@ -549,6 +549,8 @@ public class PushManager {
NetInterfaceManager.getInstance().getAppLimit();
break;
case UPDATE_BATCH:
+ Utils.doMasterClear(mContext);
+ break;
case UPDATE_CHILD_BATCH:
Toaster.debugShow("收到管控:更换批次不恢复出厂设置");
NetInterfaceManager.getInstance().setPushTags();
diff --git a/app/src/main/java/com/aoleyun/sn/service/StepService.java b/app/src/main/java/com/aoleyun/sn/service/StepService.java
index 79ab427..38c7bfd 100644
--- a/app/src/main/java/com/aoleyun/sn/service/StepService.java
+++ b/app/src/main/java/com/aoleyun/sn/service/StepService.java
@@ -10,18 +10,17 @@ import android.content.ServiceConnection;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
-import android.os.PowerManager;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.Nullable;
import com.aoleyun.sn.BuildConfig;
-import com.aoleyun.sn.utils.JgyUtils;
-import com.blankj.utilcode.util.NetworkUtils;
import com.aoleyun.sn.KeepAliveConnection;
+import com.aoleyun.sn.utils.JgyUtils;
import com.aoleyun.sn.utils.ServiceAliveUtils;
import com.aoleyun.sn.utils.Utils;
+import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.JsonObject;
import org.java_websocket.handshake.ServerHandshake;
@@ -40,6 +39,11 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
public JWebSocketClient client;
private JWebSocketClientBinder mBinder = new JWebSocketClientBinder();
+ // 新增防抖控制变量
+ private static final long MIN_MESSAGE_INTERVAL = 15 * 1000; // 15秒最小消息间隔
+ private volatile long lastMessageTime = 0;
+ private final Object sendLock = new Object();
+
@Override
public void onDisconnected() {
@@ -135,15 +139,17 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
case Intent.ACTION_BOOT_COMPLETED:
case Intent.ACTION_USER_PRESENT:
case Intent.ACTION_SCREEN_ON:
+ mHandler.removeCallbacks(heartBeatRunnable);
mHandler.post(heartBeatRunnable);//开启心跳检测
- sendMsg(1);
+ sendMsg();
break;
case Intent.ACTION_SCREEN_OFF:
case Intent.ACTION_SHUTDOWN:
case Intent.ACTION_REBOOT:
case Intent.ACTION_FACTORY_RESET:
case Intent.ACTION_MASTER_CLEAR:
- sendMsg(2);
+ mHandler.removeCallbacks(heartBeatRunnable);
+ closeConnect();
break;
default:
break;
@@ -165,9 +171,7 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
* 初始化websocket连接
*/
private void initSocketClient() {
- URI uri = URI.create(BuildConfig.WebsocketURL);
-// URI uri = URI.create("ws://echo.websocket.org");
-// URI uri = URI.create("ws://123.207.136.134:9010/ajaxchattest");
+ URI uri = URI.create(BuildConfig.WEBSOCKET_URL + "device?sn=" + Utils.getSerial(StepService.this));
client = new JWebSocketClient(uri) {
@Override
public void onMessage(String message) {
@@ -178,7 +182,9 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
public void onOpen(ServerHandshake handshakedata) {
super.onOpen(handshakedata);
Log.i("JWebSocketClientService", "websocket连接成功");
- sendMsg(1);
+ mHandler.postDelayed(() -> {
+ if (isOpen()) sendMsg();
+ }, 1000);
}
@Override
@@ -231,19 +237,26 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
* 发送消息
*/
public void sendMsg() {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("sn", Utils.getSerial(this));
- PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
- if (!pm.isScreenOn()) {
- jsonObject.addProperty("online", 2);
- //熄屏状态
- } else {
- jsonObject.addProperty("online", 1);
- }
- if (null != client) {
+ synchronized (sendLock) {
+ long currentTime = System.currentTimeMillis();
+ // 检查时间间隔和连接状态
+ if (currentTime - lastMessageTime < MIN_MESSAGE_INTERVAL) {
+ Log.w("JWebSocketClientService", "消息发送过于频繁,已忽略");
+ return;
+ }
+ if (client == null || !client.isOpen()) {
+ Log.w("JWebSocketClientService", "连接未建立,取消发送");
+ return;
+ }
+
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("type", "ping");
+ jsonObject.addProperty("sn", Utils.getSerial(this));
+
Log.i("JWebSocketClientService", "发送的消息:" + jsonObject.toString());
try {
client.send(jsonObject.toString());
+ lastMessageTime = currentTime; // 更新最后发送时间
} catch (Exception e) {
Log.e(TAG, "sendMsg: " + e.getMessage());
}
@@ -251,22 +264,6 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
}
}
- public void sendMsg(int state) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("sn", Utils.getSerial(this));
- jsonObject.addProperty("online", state);
- try {
- if (null != client) {
- Log.i("JWebSocketClientService", "发送的消息:" + jsonObject.toString());
- client.send(jsonObject.toString());
- } else {
- Log.i("JWebSocketClientService", "未连接");
- }
- } catch (Exception e) {
- Log.e(TAG, "sendMsg: " + e.getMessage());
- }
- }
-
/**
* 断开连接
*/
@@ -289,23 +286,23 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
@Override
public void run() {
Log.i("JWebSocketClientService", "心跳包检测websocket连接状态");
- if (client != null) {
- if (client.isOpen()) {
- Log.i("JWebSocketClientService", "websocket已连接");
- sendMsg();
- } else if (client.isClosed()) {
- Log.i("JWebSocketClientService", "websocket重连中");
- if (JgyUtils.getInstance().isScreenOn()) {
- reconnectWs();
- } else {
- Log.i("JWebSocketClientService", "reconnectWs off");
- }
- }
- } else {
- //如果client已为空,重新初始化连接
- client = null;
+ if (client == null) {
initSocketClient();
+ return;
}
+
+ if (client.isOpen()) {
+ Log.i("JWebSocketClientService", "websocket已连接");
+ sendMsg();
+ } else if (client.isClosed()) {
+ Log.i("JWebSocketClientService", "websocket重连中");
+ if (JgyUtils.getInstance().isScreenOn()) {
+ reconnectWs();
+ } else {
+ Log.i("JWebSocketClientService", "reconnectWs off");
+ }
+ }
+
//每隔一定的时间,对长连接进行一次心跳检测
if (JgyUtils.getInstance().isScreenOn()) {
mHandler.postDelayed(this, HEART_BEAT_RATE);
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 3068a88..45f2050 100644
--- a/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java
+++ b/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java
@@ -804,6 +804,9 @@ public class JgyUtils {
} else {
Settings.System.putString(context.getContentResolver(), "aole_app_info", String.join(",", pkgSet));
}
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setDisallowNotification(new ArrayList<>(pkgSet));
+ }
}
public void setAllowPermissionsPackage() {
@@ -816,6 +819,9 @@ public class JgyUtils {
} else {
Settings.System.putString(crv, "aole_app_privilege", String.join(",", pkgSet));
}
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setDefaultPermissions(new ArrayList<>(pkgSet));
+ }
}
public static final Set DEFAULT_ALLOW_NETWORK_APP_SET = new HashSet() {{
@@ -1384,7 +1390,10 @@ public class JgyUtils {
public void SettingSysData(String data) {
if (TextUtils.isEmpty(data)) {
Log.e(TAG, "SettingSysData: " + "data is empty");
- SysSettingUtils.setDisableSetting(mContext);
+ int locked = Settings.System.getInt(crv, JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
+ if (locked==JGYActions.FRAME_CODE_LOCKED) {
+ SysSettingUtils.setDisableSetting(mContext);
+ }
SPUtils.put(mContext, JGYActions.ACTION_STATUSBAR_STATUS, "");
} else {
if (JgyUtils.getInstance().getAppPlatform().equals(JgyUtils.ZR6016Tag)) {
@@ -3705,7 +3714,7 @@ public class JgyUtils {
}
Log.e(TAG, "setAllwinnerDefaulBrowser: " + pkg);
if (JgyUtils.isAllWinnerDevice()) {
- AllwinnerCubeMdmManager.getInstance().setDefaultInputMethod(pkg);
+ AllwinnerCubeMdmManager.getInstance().setDefaultBrowser(pkg);
}
}
}
diff --git a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java
index 1d0154e..0ffde6e 100644
--- a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java
+++ b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java
@@ -115,11 +115,12 @@ public class SysSettingUtils {
*/
public static void setEnableSetting(Context context) {
Toaster.debugShow("打开所有功能");
+ Log.e(TAG, "setEnableSetting: ");
setPhoneList(context, 0);
if (JgyUtils.C2Tag.equalsIgnoreCase(JgyUtils.getInstance().getAppPlatform())) {
openMtp(context);
}
- // setUSBstate(context, 0);
+ setUsbStatus(context, 0);
setBluetooth(context, 0);
setHotspot(context, 0);
setBar(context, 0);
@@ -191,19 +192,21 @@ public class SysSettingUtils {
}
private static void setUsbStatus(Context context, int state) {
+ Log.e(TAG, "setUsbStatus: " + state);
//USB数据功能管控
//仅充电:usb_charge
//MTP模式:usb_mtp
//Midi模式:usb_midi
- if (!BuildConfig.DEBUG) {
- if (JgyUtils.isCubeDevice()) {
- if (JgyUtils.isAllWinnerDevice()) {
- AllwinnerCubeMdmManager.getInstance().setUsbStatus(state);
- } else {
- SuperPower mService = (SuperPower) context.getSystemService("mdm");
- mService.setUsbDataDisabled(true);
- }
+// if (!BuildConfig.DEBUG) {
+ if (JgyUtils.isCubeDevice()) {
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setUsbStatus(state);
} else {
+ SuperPower mService = (SuperPower) context.getSystemService("mdm");
+ mService.setUsbDataDisabled(true);
+ }
+ } else {
+ if (state == 0) {
String oldUsb = Settings.System.getString(context.getContentResolver(), "aole_usb_choose");
if ("usb_charge".equals(oldUsb)) {
Log.e(TAG, "setUsbStatus: oldUsb = " + oldUsb + " no changed , skip");
@@ -211,30 +214,35 @@ public class SysSettingUtils {
}
boolean aole_usb_choose = Settings.System.putString(context.getContentResolver(), "aole_usb_choose", "usb_charge");
Log.e("setUsbStatus", "aole_usb_choose: " + aole_usb_choose);
- String usbStatus;
- switch (state) {
- default:
- case 0:
- usbStatus = CommonConfig.AOLE_ACTION_USB_USB_CHARGE;
- JgyUtils.getInstance().setMtpEnable(false);
- break;
- case 1:
- usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MTP;
- JgyUtils.getInstance().setMtpEnable(true);
- break;
- }
- if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform) {
- usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MTP;
- }
- Intent usbIntent = new Intent(usbStatus);
- if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.TeclastP20sPlatform
- || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform
- ) {
- usbIntent.setPackage("com.android.settings");
- }
- context.sendBroadcast(usbIntent);
+ } else {
+ boolean aole_usb_choose = Settings.System.putString(context.getContentResolver(), "aole_usb_choose", "usb_mtp");
+ Log.e("setUsbStatus", "aole_usb_choose: " + aole_usb_choose);
}
+ String usbStatus;
+ switch (state) {
+ default:
+ case 0:
+ usbStatus = CommonConfig.AOLE_ACTION_USB_USB_CHARGE;
+ JgyUtils.getInstance().setMtpEnable(false);
+ break;
+ case 1:
+ usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MTP;
+ JgyUtils.getInstance().setMtpEnable(true);
+ break;
+ }
+ if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform) {
+ usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MTP;
+ }
+ Intent usbIntent = new Intent(usbStatus);
+ if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.TeclastP20sPlatform
+ || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform
+ || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.seewoPlatform
+ ) {
+ usbIntent.setPackage("com.android.settings");
+ }
+ context.sendBroadcast(usbIntent);
}
+// }
}
private static void setUsbStatus(Context context, JsonObject jsonObject) {
@@ -867,6 +875,10 @@ public class SysSettingUtils {
}
what |= integer;
}
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setHomeEnable(home == 1);
+ AllwinnerCubeMdmManager.getInstance().setRecentsEnable(taskbar == 1);
+ }
StatusBarManager mStatusBarManager = (StatusBarManager) context.getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.disable(what);
}
@@ -879,6 +891,10 @@ public class SysSettingUtils {
StatusBarManager mStatusBarManager = (StatusBarManager) context.getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.disable(StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME);
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);//显示隐藏的虚拟按键
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setHomeEnable(true);
+ AllwinnerCubeMdmManager.getInstance().setRecentsEnable(true);
+ }
}
@@ -888,33 +904,19 @@ public class SysSettingUtils {
* @param context
* @param jsonObject
*/
- // TODO: 2025/7/14 待优化,逻辑太差了
private static void setBrowserInput(Context context, JsonObject jsonObject) {
- int state = 1;
- try {
- state = jsonObject.get("setting_browserInput").getAsInt();
- Log.e(TAG, "setBrowserInput: setting_browserInput = " + state);
- String json = jsonObject.get("setting_browserInput").getAsString();
- if (TextUtils.isEmpty(json)) {
- state = 1;
- }
- } catch (Exception e) {
- Log.e(TAG, "setBrowserInput: e: " + e.getMessage());
- }
- Log.e(TAG, "setBrowserInput: " + state);
- //后台没有这个选项默认打开
- if (state == 0) {
- Settings.System.putInt(context.getContentResolver(), "qch_Browser_input", 1);
- } else {
- Settings.System.putInt(context.getContentResolver(), "qch_Browser_input", 0);
- }
-
if (jsonObject.get("is_browser_network") != null) {
int is_browser_network = jsonObject.get("is_browser_network").getAsInt();
Log.e(TAG, "setBrowserInput: is_browser_network = " + is_browser_network);
Settings.Global.putInt(context.getContentResolver(), "is_browser_network", is_browser_network);
}
+ if (jsonObject.get("setting_browserInput") != null) {
+ int qch_Browser_input = jsonObject.get("setting_browserInput").getAsInt();
+ Log.e(TAG, "setBrowserInput: qch_Browser_input = " + qch_Browser_input);
+ Settings.System.putInt(context.getContentResolver(), "qch_Browser_input", qch_Browser_input);
+ }
+
if (jsonObject.get("browser_down") != null) {
int browser_down = jsonObject.get("browser_down").getAsInt();
Settings.System.putInt(context.getContentResolver(), "aoleyun_browser_down", browser_down);
@@ -928,8 +930,8 @@ public class SysSettingUtils {
* @param state
*/
private static void setBrowserInput(Context context, int state) {
- Settings.System.putInt(context.getContentResolver(), "qch_Browser_input", 0);
- Settings.Global.putInt(context.getContentResolver(), "is_browser_network", changeNum(state));
+ Settings.System.putInt(context.getContentResolver(), "qch_Browser_input", state);
+ Settings.Global.putInt(context.getContentResolver(), "is_browser_network", state);
Settings.System.putInt(context.getContentResolver(), "aoleyun_browser_down", state);
}
@@ -1225,6 +1227,9 @@ public class SysSettingUtils {
break;
}
context.sendBroadcast(intent);
+ if (JgyUtils.isAllWinnerDevice()) {
+ AllwinnerCubeMdmManager.getInstance().setNotificationEnable(status == 1);
+ }
}
private static void setPanelShow(Context context, JsonObject jsonObject) {
diff --git a/app/src/main/res/drawable/ic_device_lock.xml b/app/src/main/res/drawable/ic_device_lock.xml
new file mode 100644
index 0000000..e210686
--- /dev/null
+++ b/app/src/main/res/drawable/ic_device_lock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
index 471ccb5..edc88c6 100644
--- a/app/src/main/res/layout-land/activity_main.xml
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -117,6 +117,19 @@
android:layout_weight="2"
android:background="@drawable/card_background">
+
+
+
+