|
@@ -2,51 +2,29 @@ package xn.update;
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
import android.os.Bundle;
|
|
|
-import android.text.TextUtils;
|
|
|
-import android.util.Log;
|
|
|
import android.widget.EditText;
|
|
|
|
|
|
import androidx.activity.EdgeToEdge;
|
|
|
-import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
import androidx.core.graphics.Insets;
|
|
|
-import androidx.core.util.Pair;
|
|
|
import androidx.core.view.ViewCompat;
|
|
|
import androidx.core.view.WindowInsetsCompat;
|
|
|
-import androidx.work.ExistingPeriodicWorkPolicy;
|
|
|
-import androidx.work.PeriodicWorkRequest;
|
|
|
-import androidx.work.WorkManager;
|
|
|
|
|
|
import com.blankj.utilcode.util.ActivityUtils;
|
|
|
import com.blankj.utilcode.util.AppUtils;
|
|
|
-import com.blankj.utilcode.util.LogUtils;
|
|
|
-import com.blankj.utilcode.util.NetworkUtils;
|
|
|
import com.blankj.utilcode.util.SPUtils;
|
|
|
-import com.blankj.utilcode.util.ThreadUtils;
|
|
|
import com.blankj.utilcode.util.ToastUtils;
|
|
|
-import com.hikvision.dmb.display.InfoDisplayApi;
|
|
|
-import com.hikvision.dmb.network.InfoNetworkApi;
|
|
|
-import com.hikvision.dmb.system.InfoSystemApi;
|
|
|
-import com.hikvision.dmb.util.InfoUtilApi;
|
|
|
-import com.hjq.permissions.OnPermissionCallback;
|
|
|
-import com.hjq.permissions.Permission;
|
|
|
-import com.hjq.permissions.XXPermissions;
|
|
|
import com.lxj.xpopup.XPopup;
|
|
|
import com.lxj.xpopup.impl.InputConfirmPopupView;
|
|
|
|
|
|
-import org.json.JSONObject;
|
|
|
+import org.greenrobot.eventbus.EventBus;
|
|
|
+import org.greenrobot.eventbus.Subscribe;
|
|
|
+import org.greenrobot.eventbus.ThreadMode;
|
|
|
|
|
|
-import java.util.List;
|
|
|
-import java.util.concurrent.ThreadLocalRandom;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
-
|
|
|
-import okhttp3.Response;
|
|
|
import xn.update.constant.AppConstant;
|
|
|
import xn.update.databinding.ActivityMainBinding;
|
|
|
import xn.update.evnet.UpdateUiEvent;
|
|
|
-import xn.update.http.HttpTool;
|
|
|
-import xn.update.works.TaskWork;
|
|
|
|
|
|
public class MainActivity extends AppCompatActivity {
|
|
|
private ActivityMainBinding binding;
|
|
@@ -55,24 +33,13 @@ public class MainActivity extends AppCompatActivity {
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
+ if (!EventBus.getDefault().isRegistered(this)) {
|
|
|
+ EventBus.getDefault().register(this);
|
|
|
+ }
|
|
|
// 启动后台任务
|
|
|
Tool.INSTANCE.startTaskService();
|
|
|
// 先启动主应用
|
|
|
Tool.INSTANCE.startMasterApp();
|
|
|
- // 启动保活worker
|
|
|
- PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
|
|
|
- WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
|
|
|
- // 自动更新应用
|
|
|
- SPUtils.getInstance().put(AppConstant.AUTO_UPDATE, true);
|
|
|
- // 自动拉起主应用
|
|
|
- SPUtils.getInstance().put(AppConstant.AUTO_MASTER, true);
|
|
|
-
|
|
|
- InfoSystemApi.openAdb();
|
|
|
- InfoDisplayApi.setStatusBarEnable(false);
|
|
|
- InfoDisplayApi.setNavigationBarEnable(false);
|
|
|
- InfoUtilApi.setUsbSwitch(false);
|
|
|
- SPUtils.getInstance().put("isRoot", 0 == InfoUtilApi.getRoot());
|
|
|
- SPUtils.getInstance().put("IP", InfoNetworkApi.getEthernetConfig().ipAddress);
|
|
|
|
|
|
EdgeToEdge.enable(this);
|
|
|
binding = ActivityMainBinding.inflate(getLayoutInflater());
|
|
@@ -109,106 +76,20 @@ public class MainActivity extends AppCompatActivity {
|
|
|
}
|
|
|
return true;
|
|
|
});
|
|
|
- InfoUtilApi.enableProtection(AppUtils.getAppPackageName(), false);
|
|
|
- InfoSystemApi.setLauncherForced(AppUtils.getAppPackageName());
|
|
|
- requestPermission();
|
|
|
- }
|
|
|
|
|
|
- private void requestPermission() {
|
|
|
- // 全量权限申请
|
|
|
- XXPermissions.with(this)
|
|
|
- .permission(Permission.READ_EXTERNAL_STORAGE)
|
|
|
- .permission(Permission.WRITE_EXTERNAL_STORAGE)
|
|
|
- .permission(Permission.NOTIFICATION_SERVICE)
|
|
|
- .request(new OnPermissionCallback() {
|
|
|
- @Override
|
|
|
- public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
|
|
|
- if (allGranted) {
|
|
|
- terminalAuth();
|
|
|
- } else {
|
|
|
- new XPopup.Builder(MainActivity.this)
|
|
|
- .dismissOnBackPressed(false)
|
|
|
- .dismissOnTouchOutside(false)
|
|
|
- .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
|
|
|
- -> requestPermission())
|
|
|
- .show();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
|
|
|
- OnPermissionCallback.super.onDenied(permissions, doNotAskAgain);
|
|
|
- if (doNotAskAgain) {
|
|
|
- new XPopup.Builder(MainActivity.this)
|
|
|
- .dismissOnBackPressed(false)
|
|
|
- .dismissOnTouchOutside(false)
|
|
|
- .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
|
|
|
- -> XXPermissions.startPermissionActivity(MainActivity.this, permissions))
|
|
|
- .show();
|
|
|
- } else {
|
|
|
- new XPopup.Builder(MainActivity.this)
|
|
|
- .dismissOnBackPressed(false)
|
|
|
- .dismissOnTouchOutside(false)
|
|
|
- .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
|
|
|
- -> requestPermission())
|
|
|
- .show();
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
- ThreadUtils.SimpleTask<Boolean> simpleTask = new ThreadUtils.SimpleTask<Boolean>() {
|
|
|
- @Override
|
|
|
- public Boolean doInBackground() throws Throwable {
|
|
|
- return NetworkUtils.isAvailableByPing(Tool.INSTANCE.getBaseUrl().host());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onSuccess(Boolean result) {
|
|
|
- if (result) {
|
|
|
- binding.tipsTV.setText("鉴权中...");
|
|
|
- ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Pair<Boolean, String>>() {
|
|
|
- @Override
|
|
|
- public Pair<Boolean, String> doInBackground() throws Throwable {
|
|
|
- try {
|
|
|
- SPUtils.getInstance().put("TerminalAuth", "");
|
|
|
- Response response = HttpTool.INSTANCE.terminalAuth();
|
|
|
- if (response.isSuccessful()) {
|
|
|
- String json = response.body().string();
|
|
|
- JSONObject jsonObject = new JSONObject(json);
|
|
|
- int code = jsonObject.getInt("code");
|
|
|
- if (200 == code) {
|
|
|
- String data = jsonObject.getString("data");
|
|
|
- SPUtils.getInstance().put("TerminalAuth", TextUtils.isEmpty(data) ? "" : data);
|
|
|
- return Pair.create(true, "");
|
|
|
- } else {
|
|
|
- return Pair.create(false, jsonObject.getString("message"));
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- LogUtils.e(Log.getStackTraceString(e));
|
|
|
- }
|
|
|
- return Pair.create(false, "鉴权异常,请联系管理员!");
|
|
|
- }
|
|
|
+ @Subscribe(threadMode = ThreadMode.MAIN)
|
|
|
+ public void onMessageEvent(UpdateUiEvent event) {
|
|
|
+ binding.tipsTV.setText(event.getMsg());
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public void onSuccess(Pair<Boolean, String> result) {
|
|
|
- if (result.first) {
|
|
|
- binding.tipsTV.setText(result.second);
|
|
|
- ThreadUtils.cancel(simpleTask);
|
|
|
- } else {
|
|
|
- binding.tipsTV.setText(result.second);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- binding.tipsTV.setText("无法连接到服务器,请联系管理员!");
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ protected void onDestroy() {
|
|
|
+ super.onDestroy();
|
|
|
+ if (!EventBus.getDefault().isRegistered(this)) {
|
|
|
+ EventBus.getDefault().register(this);
|
|
|
}
|
|
|
- };
|
|
|
-
|
|
|
- private void terminalAuth() {
|
|
|
- ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
|
|
|
}
|
|
|
|
|
|
@SuppressLint("MissingSuperCall")
|