From d36aa0cbd6efa2aa8399e46a9f5f556a935fcda8 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Tue, 31 Oct 2023 18:14:03 +0800 Subject: [PATCH] =?UTF-8?q?1.1.0=20=E4=BC=98=E5=8C=96=E6=8E=A8=E9=80=81,?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../find/activity/main/MainAContact.java | 2 + .../find/activity/main/MainAPresenter.java | 9 +- .../find/activity/main/MainActivity.java | 31 ++++++- .../find/network/NetInterfaceManager.java | 73 ++++++++-------- .../network/api/kuxin/sn/UpdateSnInfoApi.java | 3 +- .../com/uiuipad/find/push/PushManager.java | 79 +++++++++++++++++- .../find/service/main/MainService.java | 35 +++++++- .../com/uiuipad/find/util/ControlUtils.java | 74 +++++++++++++--- .../com/uiuipad/find/util/FileSizeUtil.java | 7 ++ .../java/com/uiuipad/find/util/Utils.java | 20 ++++- .../main/res/drawable-hdpi/icon_activated.png | Bin 0 -> 7281 bytes .../res/drawable-hdpi/icon_inactivated.png | Bin 0 -> 6702 bytes .../main/res/drawable-hdpi/icon_update.png | Bin 0 -> 712 bytes .../main/res/drawable-hdpi/icon_upgrade.png | Bin 0 -> 712 bytes .../main/res/layout-land/activity_main.xml | 55 +++++++++++- .../main/res/layout-port/activity_main.xml | 55 +++++++++++- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 19 files changed, 380 insertions(+), 70 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/icon_activated.png create mode 100644 app/src/main/res/drawable-hdpi/icon_inactivated.png create mode 100644 app/src/main/res/drawable-hdpi/icon_update.png create mode 100644 app/src/main/res/drawable-hdpi/icon_upgrade.png diff --git a/app/build.gradle b/app/build.gradle index ed2e5f8..761bf8c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiuipad.find" minSdkVersion 24 targetSdkVersion 29 - versionCode 10 - versionName "1.0.9" + versionCode 11 + versionName "1.1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/uiuipad/find/activity/main/MainAContact.java b/app/src/main/java/com/uiuipad/find/activity/main/MainAContact.java index 0834f9c..c208b40 100644 --- a/app/src/main/java/com/uiuipad/find/activity/main/MainAContact.java +++ b/app/src/main/java/com/uiuipad/find/activity/main/MainAContact.java @@ -16,5 +16,7 @@ public class MainAContact { public interface MainView extends BaseView { void setQrCode(Bitmap bitmap); void setSnInfo(SnInfo snInfo); + void setSnInfoNoBind(); + void setSnInfoNotFound(); } } diff --git a/app/src/main/java/com/uiuipad/find/activity/main/MainAPresenter.java b/app/src/main/java/com/uiuipad/find/activity/main/MainAPresenter.java index fba0514..889053b 100644 --- a/app/src/main/java/com/uiuipad/find/activity/main/MainAPresenter.java +++ b/app/src/main/java/com/uiuipad/find/activity/main/MainAPresenter.java @@ -73,11 +73,14 @@ public class MainAPresenter implements MainAContact.Presenter { @Override public void onNext(@NonNull BaseResponse snInfoBaseResponse) { Log.e("getSnInfo", "onNext: " + snInfoBaseResponse); - if (snInfoBaseResponse.code == 200) { + int code = snInfoBaseResponse.code; + if (code == 200) { SnInfo snInfo = snInfoBaseResponse.data; mView.setSnInfo(snInfo); - }else { - mView.setSnInfo(null); + } else if (code == 402) { + mView.setSnInfoNotFound(); + } else if (code == 403) { + mView.setSnInfoNoBind(); } } diff --git a/app/src/main/java/com/uiuipad/find/activity/main/MainActivity.java b/app/src/main/java/com/uiuipad/find/activity/main/MainActivity.java index 85caa49..4010d3d 100644 --- a/app/src/main/java/com/uiuipad/find/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiuipad/find/activity/main/MainActivity.java @@ -8,7 +8,6 @@ import android.os.IBinder; import android.util.Log; import android.view.KeyEvent; import android.view.View; -import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -62,6 +61,15 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, ConstraintLayout cl_ota; @BindView(R.id.cl_app) ConstraintLayout cl_app; + @BindView(R.id.iv_activation) + ImageView iv_activation; + @BindView(R.id.tv_bindtime) + TextView tv_bindtime; + @BindView(R.id.iv_ota) + ImageView iv_ota; + @BindView(R.id.iv_app) + ImageView iv_app; + private MainAPresenter mPresenter; @@ -112,7 +120,8 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, tv_serial.setText(Utils.getSerial()); tv_system_version.setText(Utils.getCustomVersion()); - RxView.clicks(cl_app) + + RxView.clicks(iv_app) .throttleFirst(60, TimeUnit.SECONDS) //两秒钟之内只取一个点击事件,防抖操作 .subscribe(new Consumer() { /** @@ -138,7 +147,7 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, // } // } // }); - cl_ota.setOnClickListener(new View.OnClickListener() { + iv_ota.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(MainActivity.this, "com.yhk.qeota", "com.yhk.qeota.activity.ScrollingActivity"); @@ -187,16 +196,32 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, public void setSnInfo(SnInfo snInfo) { if (snInfo == null) { tv_phone.setText("未绑定"); + iv_activation.setImageDrawable(getDrawable(R.drawable.icon_inactivated)); } else { String phone = snInfo.getMobile(); if (StringUtils.isEmpty(phone)) { tv_phone.setText("未绑定"); tv_bind_time.setText(getString(R.string.login_bind)); + iv_activation.setImageDrawable(getDrawable(R.drawable.icon_inactivated)); } else { tv_phone.setText(phone); + iv_activation.setImageDrawable(getDrawable(R.drawable.icon_activated)); long bindTime = snInfo.getBind_time(); tv_bind_time.setText(String.format(getString(R.string.binding_time), TimeUtils.transferSecondToDate(bindTime))); + tv_bindtime.setText(String.format(getString(R.string.activation_time), TimeUtils.transferSecondToDate(bindTime))); } } } + + @Override + public void setSnInfoNoBind() { + tv_phone.setText("未绑定"); + iv_activation.setImageDrawable(getDrawable(R.drawable.icon_activated)); + } + + @Override + public void setSnInfoNotFound() { + tv_phone.setText("未激活"); + iv_activation.setImageDrawable(getDrawable(R.drawable.icon_inactivated)); + } } diff --git a/app/src/main/java/com/uiuipad/find/network/NetInterfaceManager.java b/app/src/main/java/com/uiuipad/find/network/NetInterfaceManager.java index 95c3d3f..65d5139 100644 --- a/app/src/main/java/com/uiuipad/find/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiuipad/find/network/NetInterfaceManager.java @@ -268,16 +268,16 @@ public class NetInterfaceManager { } public Observable getUpdateSnInfoControl() { - Map params = new HashMap<>(); - params.put("wifi_name", Utils.getWifiSsid(mContext)); - params.put("wifi_signal", Utils.getWifiRssi(mContext)); - params.put("battery", String.valueOf(Utils.getBattery(mContext))); - params.put("bluetooth", Utils.getBluetoothList()); - params.put("memory", Formatter.formatFileSize(mContext, Utils.getUsedMemory(mContext))); - params.put("storage", Utils.getDataTotalSize(mContext)); - params.put("memory_use", Formatter.formatFileSize(mContext, Utils.getUsedMemory(mContext))); - params.put("storage_use", Utils.getUsedSize(mContext)); - params.put("sn", Utils.getSerial()); + Map params = new HashMap<>(); + params.put("wifi_name", NetInterfaceManager.convertToRequestBody(Utils.getWifiSsid(mContext))); + params.put("wifi_signal", NetInterfaceManager.convertToRequestBody(Utils.getWifiRssi(mContext))); + params.put("battery", NetInterfaceManager.convertToRequestBody(Utils.getBattery(mContext))); + params.put("bluetooth", NetInterfaceManager.convertToRequestBody(Utils.getBluetoothList())); + params.put("memory", NetInterfaceManager.convertToRequestBody(Utils.getUsedMemoryString(mContext))); + params.put("storage", NetInterfaceManager.convertToRequestBody(Utils.getDataTotalSize(mContext))); + params.put("memory_use", NetInterfaceManager.convertToRequestBody(Utils.getUsedMemoryString(mContext))); + params.put("storage_use", NetInterfaceManager.convertToRequestBody(Utils.getUsedSize(mContext))); + params.put("sn", NetInterfaceManager.convertToRequestBody(Utils.getSerial())); return mRetrofit.create(UpdateSnInfoApi.class) .updateSnInfo(params) .subscribeOn(Schedulers.io()) @@ -396,40 +396,43 @@ public class NetInterfaceManager { int old = Settings.Global.getInt(mCrv, "is_control", 0); if (is_control != old) { try { - new CacheUtils().clearApplicationUserData(mContext, "com.uiuipad.os"); - new CacheUtils().clearApplicationUserData(mContext, "com.android.launcher3"); +// new CacheUtils().clearApplicationUserData(mContext, "com.uiuipad.os"); +// new CacheUtils().clearApplicationUserData(mContext, "com.android.launcher3"); } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "clearCache: " + e.getMessage()); } } Settings.Global.putInt(mCrv, "is_control", is_control); - int is_loss = snSetting.getIs_loss(); - String loss_str = snSetting.getLoss_str(); - mMMKV.encode(CommonConfig.LOST_STATUS_KEY, is_loss); - mMMKV.encode(CommonConfig.FIND_STRING_KEY, loss_str); - int is_lockscreen = snSetting.getIs_lockscreen(); - mMMKV.encode(ManagerService.LOCK_STATE, is_lockscreen); - String lockscreen_pwd = snSetting.getLockscreen_pwd(); - Settings.Global.putString(mCrv, ManagerService.LOCK_SCREEN_PASSWORD, lockscreen_pwd); - int is_timecontrol = snSetting.getIs_timecontrol(); - String timecontrol_start = snSetting.getTimecontrol_start(); - String timecontrol_end = snSetting.getTimecontrol_end(); - if (is_timecontrol == 0) { - TimeUtils.setEmpty(mContext); - TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(mContext); - if (null != c) { - Log.e("getTimeControl", c.toString()); + if (is_control == 1) { + int is_loss = snSetting.getIs_loss(); + String loss_str = snSetting.getLoss_str(); + mMMKV.encode(CommonConfig.LOST_STATUS_KEY, is_loss); + mMMKV.encode(CommonConfig.FIND_STRING_KEY, loss_str); + int is_lockscreen = snSetting.getIs_lockscreen(); + mMMKV.encode(ManagerService.LOCK_STATE, is_lockscreen); + String lockscreen_pwd = snSetting.getLockscreen_pwd(); + Settings.Global.putString(mCrv, ManagerService.LOCK_SCREEN_PASSWORD, lockscreen_pwd); + int is_timecontrol = snSetting.getIs_timecontrol(); + String timecontrol_start = snSetting.getTimecontrol_start(); + String timecontrol_end = snSetting.getTimecontrol_end(); + if (is_timecontrol == 0) { + TimeUtils.setEmpty(mContext); + TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(mContext); + if (null != c) { + Log.e("getTimeControl", c.toString()); + } + } else { + TimeUtils.ContralTime c = TimeUtils.String2ContralTime(mContext, timecontrol_start + "-" + timecontrol_end); + if (null != c) { + Log.e("getTimeControl", "OK:" + c.toString()); + } } + ControlUtils.setSystemControl(mContext, snSetting); + ControlUtils.setRoleHolderAsUser(mContext, "com.uiuipad.os"); } else { - TimeUtils.ContralTime c = TimeUtils.String2ContralTime(mContext, timecontrol_start + "-" + timecontrol_end); - if (null != c) { - Log.e("getTimeControl", "OK:" + c.toString()); - } + ControlUtils.disableSystemControl(mContext); } - - ControlUtils.setSystemControl(mContext, snSetting); - } else { TimeUtils.setEmpty(mContext); TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(mContext); diff --git a/app/src/main/java/com/uiuipad/find/network/api/kuxin/sn/UpdateSnInfoApi.java b/app/src/main/java/com/uiuipad/find/network/api/kuxin/sn/UpdateSnInfoApi.java index 4ea33ae..f8ac3b4 100644 --- a/app/src/main/java/com/uiuipad/find/network/api/kuxin/sn/UpdateSnInfoApi.java +++ b/app/src/main/java/com/uiuipad/find/network/api/kuxin/sn/UpdateSnInfoApi.java @@ -6,6 +6,7 @@ import com.uiuipad.find.network.UrlAddress; import java.util.Map; import io.reactivex.rxjava3.core.Observable; +import okhttp3.RequestBody; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.PartMap; @@ -14,7 +15,7 @@ public interface UpdateSnInfoApi { @Multipart @POST(UrlAddress.UPDATE_SN_INFO) Observable updateSnInfo( - @PartMap Map params + @PartMap Map params // @Field("wifi_name") String wifi_name, // @Field("wifi_signal") String wifi_signal, // @Field("battery") String battery, diff --git a/app/src/main/java/com/uiuipad/find/push/PushManager.java b/app/src/main/java/com/uiuipad/find/push/PushManager.java index 71ca7a7..0aac305 100644 --- a/app/src/main/java/com/uiuipad/find/push/PushManager.java +++ b/app/src/main/java/com/uiuipad/find/push/PushManager.java @@ -28,6 +28,7 @@ import com.uiuipad.find.manager.MapManager; import com.uiuipad.find.network.NetInterfaceManager; import com.uiuipad.find.network.RetryCallback; import com.uiuipad.find.service.ManagerService; +import com.uiuipad.find.service.main.MainService; import com.uiuipad.find.util.ApkUtils; import com.uiuipad.find.util.CmdUtil; import com.uiuipad.find.util.ControlUtils; @@ -118,12 +119,19 @@ public class PushManager { private static final String APP_UNINSTALL = "26"; /*清除应用缓存*/ private static final String CLEAR_APP_CACHE = "27"; + /*时间管控*/ + private static final String TIME_MANAGEMENT = "28"; /*应用管控开关*/ private static final String SYSTEM_CONTROL = "29"; /*摄像头拍照*/ private static final String FRONT_CAMERA = "30"; /*设备解绑*/ private static final String UNBIND_DEVICES = "31"; + /*强制停用应用*/ + private static final String FORCE_STOP_APP = "32"; + /*恢复出厂*/ + private static final String RESTORE_FACTORY = "33"; + private PushManager(Context context) { if (context == null) { @@ -201,8 +209,9 @@ public class PushManager { case ACTIONBAR_CONTROL: case NAVIGATIONBAR_CONTROL: case TF_CONTROL: + case TIME_MANAGEMENT: case SYSTEM_CONTROL: - NetInterfaceManager.getInstance().getSnSetting(); + setControl(mContext, title, extras); break; case FOCUS_MODE: break; @@ -218,11 +227,78 @@ public class PushManager { break; case CLEAR_APP_CACHE: + break; + case FRONT_CAMERA: + break; + case UNBIND_DEVICES: + ToastUtil.debugShow("收到管控:解除绑定"); + mMMKV.clearAll(); + ControlUtils.disableSystemControl(mContext); + break; + case RESTORE_FACTORY: + ToastUtil.debugShow("收到管控:恢复出厂"); + ControlUtils.doMasterClear(mContext); break; default: } } + private void setControl(Context context, String type, String extras) { + JsonObject jsonObject = GsonUtils.getJsonObject(extras); + switch (type) { + case APPSTORE_INSTALL: + + case USB_CONTROL: + if (jsonObject.get("is_usb") != null) { + int is_usb = jsonObject.get("is_usb").getAsInt(); + ControlUtils.setUsbState(mContext, is_usb); + } + break; + case BLUETOOTH_CONTROL: + if (jsonObject.get("is_bluetooth_file") != null) { + int is_bluetooth_file = jsonObject.get("is_bluetooth_file").getAsInt(); + ControlUtils.setBluetooth(mContext, is_bluetooth_file); + } + break; + case DEVELOPER_MODE: + if (jsonObject.get("is_developer") != null) { + int is_developer = jsonObject.get("is_developer").getAsInt(); + ControlUtils.setDeveloperOptions(mContext, is_developer); + } + break; + case DEVICE_RESET: + if (jsonObject.get("is_restore") != null) { + int is_restore = jsonObject.get("is_restore").getAsInt(); + ControlUtils.setCanReset(mContext, is_restore); + } + break; + case ACTIONBAR_CONTROL: + if (jsonObject.get("is_topbar") != null) { + int is_topbar = jsonObject.get("is_topbar").getAsInt(); + ControlUtils.setActionBar(mContext, is_topbar); + } + break; + case NAVIGATIONBAR_CONTROL: + if (jsonObject.get("is_bottombar") != null) { + int is_bottombar = jsonObject.get("is_bottombar").getAsInt(); + ControlUtils.setNavigationBar(mContext, is_bottombar); + } + break; + case TF_CONTROL: + if (jsonObject.get("is_memory_card") != null) { + int is_memory_card = jsonObject.get("is_memory_card").getAsInt(); + ControlUtils.setTF(mContext, is_memory_card); + } + break; + case TIME_MANAGEMENT: + case SYSTEM_CONTROL: + mContext.sendBroadcast(new Intent(MainService.OS_REFRESH_ACTION)); + break; + default: + } + NetInterfaceManager.getInstance().getSnSetting(); + } + private void globalUpdate(Context context, String extras) { Gson gson = new Gson(); Type type = new TypeToken() { @@ -353,6 +429,7 @@ public class PushManager { String msg = baseResponse.msg; if (code == 200) { ToastUtil.show("绑定成功"); + mContext.sendBroadcast(new Intent(MainService.REFRESH_ACTION)); } else if (code == 301) { ToastUtil.show(msg); } diff --git a/app/src/main/java/com/uiuipad/find/service/main/MainService.java b/app/src/main/java/com/uiuipad/find/service/main/MainService.java index d9b19b9..807badd 100644 --- a/app/src/main/java/com/uiuipad/find/service/main/MainService.java +++ b/app/src/main/java/com/uiuipad/find/service/main/MainService.java @@ -36,7 +36,6 @@ import com.uiuipad.find.bean.jxw.JxwResponse; import com.uiuipad.find.comm.CommonConfig; import com.uiuipad.find.gson.GsonUtils; import com.uiuipad.find.network.NetInterfaceManager; -import com.uiuipad.find.push.PushManager; import com.uiuipad.find.util.ApkUtils; import org.jetbrains.annotations.NotNull; @@ -82,7 +81,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void onConnected(NetworkUtils.NetworkType networkType) { - + mPresenter.updateSnInfo(); } @Override @@ -149,7 +148,38 @@ public class MainService extends Service implements MainSContact.MainView, Netwo } private void registerReceivers() { + registerRefreshReceiver(); + } + private void unregisterReceivers() { + if (mRefreshReceiver != null) { + unregisterReceiver(mRefreshReceiver); + } + } + + public static final String REFRESH_ACTION = "uiui.find.main.action.refresh"; + public static final String OS_REFRESH_ACTION = "uiui.find.os.action.refresh"; + private RefreshReceiver mRefreshReceiver; + + private void registerRefreshReceiver() { + if (null == mRefreshReceiver) { + mRefreshReceiver = new RefreshReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + filter.addAction(REFRESH_ACTION); + registerReceiver(mRefreshReceiver, filter); + } + + class RefreshReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + Log.e("RefreshReceiver", "onReceive: " + action); + if (REFRESH_ACTION.equals(action)) { + mPresenter.updateSnInfo(); + } + } } private static final String CHANNEL_ID = "CHANNEL_ID"; @@ -204,6 +234,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo lifecycleSubject.onNext(ActivityEvent.DESTROY); NetworkUtils.unregisterNetworkStatusChangedListener(this); mPresenter.detachView(); + unregisterReceivers(); } @Override diff --git a/app/src/main/java/com/uiuipad/find/util/ControlUtils.java b/app/src/main/java/com/uiuipad/find/util/ControlUtils.java index 97ad205..da2357a 100644 --- a/app/src/main/java/com/uiuipad/find/util/ControlUtils.java +++ b/app/src/main/java/com/uiuipad/find/util/ControlUtils.java @@ -3,10 +3,13 @@ package com.uiuipad.find.util; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.StatusBarManager; +import android.app.role.RoleManager; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.PowerManager; +import android.os.Process; +import android.os.UserHandle; import android.provider.Settings; import android.util.Log; @@ -20,6 +23,8 @@ import com.uiuipad.find.comm.CommonConfig; import java.lang.reflect.Method; import java.util.List; +import java.util.concurrent.Executor; +import java.util.function.Consumer; /** * @author TT @@ -169,19 +174,19 @@ public class ControlUtils { public static void disableSystemControl(Context context) { setUsbState(context, 0); - setBluetooth(context, 0); + setBluetooth(context, 1); setDeveloperOptions(context, 0); - setCanReset(context, 0); - setActionBar(context, 0); + setCanReset(context, 1); + setActionBar(context, 1); // setNavigationBar(context, 0); setStatusBar(context); - setTF(context, 0); + setTF(context, 1); } /** * usb连接模式管控 */ - private static void setUsbState(Context context, int status) { + public static void setUsbState(Context context, int status) { Log.e(TAG, "setUsbState: " + status); String usbStatus; switch (status) { @@ -198,7 +203,7 @@ public class ControlUtils { context.sendBroadcast(usbIntent); } - private static void setBluetooth(Context context, int status) { + public static void setBluetooth(Context context, int status) { int code = status == 1 ? 0 : 1; boolean aole_bht_forbid_on = Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_BHT_FORBID_ON, code); } @@ -229,7 +234,7 @@ public class ControlUtils { } } - private static void setCanReset(Context context, int status) { + public static void setCanReset(Context context, int status) { if (status == 1) { Settings.Global.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_RESTORE_FORBID_ON, 0); } else { @@ -242,7 +247,7 @@ public class ControlUtils { * @param context * @param status 系统导航条显示开关 */ - private static void setNavigationBar(Context context, int status) { + public static void setNavigationBar(Context context, int status) { // boolean aole_hide_NavigationBar = Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_NAVIGATION_BAR, status); // Log.e("SystemSetting", "aole_hide_NavigationBar:" + aole_hide_NavigationBar); // String navigationStatus = ""; @@ -284,7 +289,7 @@ public class ControlUtils { * @param context * @param status 状态栏显示开关 */ - private static void setActionBar(Context context, int status) { + public static void setActionBar(Context context, int status) { Log.e(TAG, "setActionBar: " + status); Settings.Global.putInt(context.getContentResolver(), "pulldown_menu_enabled", status); // int oldNum = Settings.System.getInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR, 0); @@ -306,8 +311,57 @@ public class ControlUtils { // } } - private static void setTF(Context context, int state) { + public static void setTF(Context context, int state) { Log.e(TAG, "setTF: " + state); Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_SDCARD_FORBID_ON, state == 1 ? 0 : 1); } + + + /** + * 重置,恢复出厂设置 + */ + public static void doMasterClear(Context context) { + if (BuildConfig.DEBUG) { + ToastUtil.show("收到重置设备推送消息"); + return; + } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) { + Intent intent = new Intent("android.intent.action.FACTORY_RESET"); + intent.setPackage("android"); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + intent.putExtra("android.intent.extra.REASON", "MasterClearConfirm"); + intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", false); + intent.putExtra("com.android.internal.intent.extra.WIPE_ESIMS", false); + context.sendBroadcast(intent); + } else { + Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); +// intent.setPackage("com.android.settings"); + context.sendBroadcast(intent); + } + } + + public static void setRoleHolderAsUser(Context context, String packageName) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + String roleName = "android.app.role.HOME"; + boolean add = true; + int flags = 0; + UserHandle user = Process.myUserHandle(); + Log.i("settingssssssstemf", (add ? "Adding" : "Removing") + " package as role holder, role: " + + roleName + ", package: " + packageName); + RoleManager roleManager = context.getSystemService(RoleManager.class); + Executor executor = context.getMainExecutor(); + Consumer callback = successful -> { + if (successful) { + Log.d("settingssssssstemf", "Package " + (add ? "added" : "removed") + + " as role holder, role: " + roleName + ", package: " + packageName); + } else { + Log.d("settingssssssstemf", "Failed to " + (add ? "add" : "remove") + + " package as role holder, role: " + roleName + ", package: " + + packageName); + } + }; + roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback); + Log.i("settingssssssstemf", "addRoleHolderAsUser done"); + } + } } diff --git a/app/src/main/java/com/uiuipad/find/util/FileSizeUtil.java b/app/src/main/java/com/uiuipad/find/util/FileSizeUtil.java index c26eaa9..f50b4a4 100644 --- a/app/src/main/java/com/uiuipad/find/util/FileSizeUtil.java +++ b/app/src/main/java/com/uiuipad/find/util/FileSizeUtil.java @@ -133,4 +133,11 @@ public class FileSizeUtil { } return fileSizeLong; } + + public static String FormetFileSize(long fileS) { + DecimalFormat df = new DecimalFormat("#.00"); + double fileSizeLong; + fileSizeLong = Double.parseDouble(df.format((double) fileS / 1073741824)); + return String.valueOf(fileSizeLong); + } } diff --git a/app/src/main/java/com/uiuipad/find/util/Utils.java b/app/src/main/java/com/uiuipad/find/util/Utils.java index 2f12942..60e9f54 100644 --- a/app/src/main/java/com/uiuipad/find/util/Utils.java +++ b/app/src/main/java/com/uiuipad/find/util/Utils.java @@ -58,7 +58,7 @@ public class Utils { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo != null) { - return wifiInfo.getSSID(); + return wifiInfo.getSSID().replaceAll("\"", ""); } else { return ""; } @@ -71,7 +71,7 @@ public class Utils { public static String getWifiRssi(Context context) { WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE); WifiInfo info = wifiManager.getConnectionInfo(); - return String.valueOf(info.getRssi()); + return info.getRssi() + "dBm"; } /** @@ -126,6 +126,16 @@ public class Utils { return freeMem; } + public static String getUsedMemoryString(Context context) { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); + activityManager.getMemoryInfo(memoryInfo); + long freeMem = memoryInfo.totalMem - memoryInfo.availMem; +// Log.e("getHardware", "getFreeMemory: " + freeMem); +// return freeMem; + return FileSizeUtil.FormetFileSize(freeMem); + } + /** * 描述:获取可用内存. * @@ -198,7 +208,8 @@ public class Utils { long availableSize = sf.getAvailableBytes(); long blockSize = sf.getBlockSize(); long totalBlocks = sf.getBlockCount(); - return Formatter.formatFileSize(context, blockSize * totalBlocks - availableSize); +// return Formatter.formatFileSize(context, blockSize * totalBlocks - availableSize); + return FileSizeUtil.FormetFileSize(blockSize * totalBlocks - availableSize); } /** @@ -209,7 +220,8 @@ public class Utils { StatFs sf = new StatFs(context.getCacheDir().getAbsolutePath()); long blockSize = sf.getBlockSize(); long totalBlocks = sf.getBlockCount(); - return Formatter.formatFileSize(context, blockSize * totalBlocks); +// return Formatter.formatFileSize(context, blockSize * totalBlocks); + return FileSizeUtil.FormetFileSize(blockSize * totalBlocks); } diff --git a/app/src/main/res/drawable-hdpi/icon_activated.png b/app/src/main/res/drawable-hdpi/icon_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..6deade96f81203c06201e17686f8d4220fb4316e GIT binary patch literal 7281 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 T*$L_2pMYx0+Ddf_wo(5FaKNCP literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_inactivated.png b/app/src/main/res/drawable-hdpi/icon_inactivated.png new file mode 100644 index 0000000000000000000000000000000000000000..6687390f9108d5774f729c61f3d7bc266258eb7e GIT binary patch literal 6702 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%0DTDIE?S&# zOsCNOyh9meQY2UXT6!L~jv7CfLyOnUfdM_0uM$;4?j$||nL7s;+aQRXu3qfB_IdV(OF!~1 z)CzkpGTDyrJH-QGx8P55NogQSe^45ZaDavk-hkeZ@I(^Wz@tOf63RqlAPhp^-3hXzvl~0Rl(#eR|;YS0MoieS! zKz?vhhuXdrx`2jxJ%#a%i#$xz5MEbN>SI2mDXO#jBv>8&Q6KRv(y1w;(t>r|^W@IA zoY-_wI{=1#@hXE_yY}PEWH>!*WbXrw+~%CV>HOAa?!Eir#SUFz?j_D*A88x3o_}{y z&t`YjaquRN8FOA(stZo!RNbfK1FBcIi9(C2H5jU2l_saiqGiGfe(Ts3oA#P$shN;q zI9aDHRi5tBBz&FMKJu2q##CIdu`nx?y*{n6g%BFbbG@eZy}61C9ZY*(vGKT91iuPe zH;1;vP9nluoMOtDgekI7f1ChP!O|!6V?sJdT?*S-QT6UA+&nuGL?uu=r6d~~!?(QU zbW<4i=J4ee!!M`@o$rjFRn%@JA_#wFTiImbw&CgZx^))orpT5|e#})99C81Fo6kH+ zoY3=zOOH`xd98=mXwvv9?LE^|!-fQVz+PJN2N)W17^IpUK**(N;7D6+sa7{`P08i^ zUWfawgKQc`{av_gAEw|n1$mR*Gn4wOS-19c&i2vOz7e{7MT*pt)A+&ddqWn;l5Flc z>gd#fx80h_^f8L}jPx%f=NU{RA@u(ne9;nArOX_N;H*tsU%4WSAkl=m0+wyti)K!IWGf95(po=oKEJL zar}{k+lP0*;1u1-P-> zq#^XEQ0&OA+X7Rh${C1oeLy`h5NlK6m43Q5~6XmaP6Eh=dv;1ZvJskIDr5FwJOb-d*rA+$;)XK!nt|gg{`UJr6;UwR|RG z!uYkp;6PC9IGrq7aOXB*^^bwzy&(+86a0G}2xl=EW>RFNg-L;U7^XM)^`$^k)%zBR z%R=1N$GEfu>D89!K(ZCP-~r=a4g?vcwtXmgM>N<==G8o7n#+4o#Hj8-T5myeJGX>u zp>5eXkX{F-B|uCnm#QNvWtIgAS_tWY4?*UfA2$B}n|>`wFZV+G{nYEItVdavaR zm4+KPJ3Gy{I$ti3=^+c^_Q#&)pb}E)5(Agn-}Z(+`yr?pWC_bT u?^r=NyVqmxsz{Gr<*d0X!r8qZbAJFB??^)268kp*0000Px%f=NU{RA@u(ne9;nArOX_N;H*tsU%4WSAkl=m0+wyti)K!IWGf95(po=oKEJL zar}{k+lP0*;1u1-P-> zq#^XEQ0&OA+X7Rh${C1oeLy`h5NlK6m43Q5~6XmaP6Eh=dv;1ZvJskIDr5FwJOb-d*rA+$;)XK!nt|gg{`UJr6;UwR|RG z!uYkp;6PC9IGrq7aOXB*^^bwzy&(+86a0G}2xl=EW>RFNg-L;U7^XM)^`$^k)%zBR z%R=1N$GEfu>D89!K(ZCP-~r=a4g?vcwtXmgM>N<==G8o7n#+4o#Hj8-T5myeJGX>u zp>5eXkX{F-B|uCnm#QNvWtIgAS_tWY4?*UfA2$B}n|>`wFZV+G{nYEItVdavaR zm4+KPJ3Gy{I$ti3=^+c^_Q#&)pb}E)5(Agn-}Z(+`yr?pWC_bT u?^r=NyVqmxsz{Gr<*d0X!r8qZbAJFB??^)268kp*0000 + + + + + + @@ -279,12 +315,22 @@ android:id="@+id/tv_version" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_8" android:text="@string/unknown" android:textColor="@color/text_gray" android:textSize="@dimen/sp_9" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/cl_app" - app:layout_constraintStart_toEndOf="@+id/tv_app_version2" + app:layout_constraintEnd_toStartOf="@+id/iv_app" + app:layout_constraintTop_toTopOf="parent" /> + + diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index 0b0f12b..75aa9c7 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -111,6 +111,31 @@ app:layout_constraintTop_toBottomOf="@+id/tv_name" /> + + + + + + @@ -279,12 +315,22 @@ android:id="@+id/tv_version" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_8" android:text="@string/unknown" android:textColor="@color/text_gray" android:textSize="@dimen/sp_9" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/cl_app" - app:layout_constraintStart_toEndOf="@+id/tv_app_version2" + app:layout_constraintEnd_toStartOf="@+id/iv_app" + app:layout_constraintTop_toTopOf="parent" /> + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 80315c9..489ce24 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,7 +9,7 @@ #0480FF - #9a9a9a + #a0a0a0 #CD000000 #4880ff diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b992747..876b146 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,5 +6,6 @@ 绑定时间:%s 请登录后扫码绑定\n管控平板 + 激活时间:%s