|
@@ -0,0 +1,205 @@
|
|
|
|
+package xn.huaxue.update;
|
|
|
|
+
|
|
|
|
+import android.annotation.SuppressLint;
|
|
|
|
+import android.os.Bundle;
|
|
|
|
+import android.text.TextUtils;
|
|
|
|
+import android.util.Log;
|
|
|
|
+import android.view.View;
|
|
|
|
+import android.widget.EditText;
|
|
|
|
+
|
|
|
|
+import androidx.activity.EdgeToEdge;
|
|
|
|
+import androidx.annotation.NonNull;
|
|
|
|
+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.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 java.util.List;
|
|
|
|
+import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
+
|
|
|
|
+import okhttp3.Response;
|
|
|
|
+import xn.huaxue.update.constant.AppConstant;
|
|
|
|
+import xn.huaxue.update.databinding.ActivityMainBinding;
|
|
|
|
+import xn.huaxue.update.http.HttpTool;
|
|
|
|
+import xn.huaxue.update.works.TaskWork;
|
|
|
|
+
|
|
|
|
+public class MainActivity extends AppCompatActivity {
|
|
|
|
+ private ActivityMainBinding binding;
|
|
|
|
+ private InputConfirmPopupView inputConfirmPopupView;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
|
+ initDev();
|
|
|
|
+ PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
|
|
|
|
+ WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
|
|
|
|
+
|
|
|
|
+ EdgeToEdge.enable(this);
|
|
|
|
+ binding = ActivityMainBinding.inflate(getLayoutInflater());
|
|
|
|
+ setContentView(binding.getRoot());
|
|
|
|
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
|
|
|
|
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
|
|
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
|
|
|
+ return insets;
|
|
|
|
+ });
|
|
|
|
+ binding.versionNameTV.setText(AppUtils.getAppVersionName());
|
|
|
|
+ inputConfirmPopupView = new XPopup.Builder(this).autoDismiss(false).asInputConfirm("Tips", "请输入管理员密码",
|
|
|
|
+ text -> {
|
|
|
|
+ if (text.equals(SPUtils.getInstance().getString(AppConstant.ADMIN_PASSWORD, "admin@098&"))) {
|
|
|
|
+ ActivityUtils.startActivity(SettingActivity.class);
|
|
|
|
+ inputConfirmPopupView.dismiss();
|
|
|
|
+ } else {
|
|
|
|
+ ToastUtils.showLong("密码不正确,请重新输入!");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ binding.logoIV.setOnLongClickListener(new View.OnLongClickListener() {
|
|
|
|
+ @Override
|
|
|
|
+ public boolean onLongClick(View v) {
|
|
|
|
+ if (AppUtils.isAppDebug()) {
|
|
|
|
+ ActivityUtils.startActivity(SettingActivity.class);
|
|
|
|
+ } else {
|
|
|
|
+ EditText editText = inputConfirmPopupView.getEditText();
|
|
|
|
+ if (null != editText) {
|
|
|
|
+ editText.setText("");
|
|
|
|
+ }
|
|
|
|
+ inputConfirmPopupView.show();
|
|
|
|
+ }
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ requestPermission();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void initDev() {
|
|
|
|
+ Tool.INSTANCE.startMasterApp();
|
|
|
|
+ Tool.INSTANCE.openAdb();
|
|
|
|
+ Tool.INSTANCE.setLauncher();
|
|
|
|
+ SPUtils.getInstance().put("IP", NetworkUtils.getIPAddress(true));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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, "鉴权异常,请联系管理员!");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onSuccess(Pair<Boolean, String> result) {
|
|
|
|
+ Tool.INSTANCE.startTaskService();
|
|
|
|
+ if (result.first) {
|
|
|
|
+ binding.tipsTV.setText(result.second);
|
|
|
|
+ ThreadUtils.cancel(simpleTask);
|
|
|
|
+ } else {
|
|
|
|
+ binding.tipsTV.setText(result.second);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ binding.tipsTV.setText("无法连接到服务器,请联系管理员!");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ private void terminalAuth() {
|
|
|
|
+ ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @SuppressLint("MissingSuperCall")
|
|
|
|
+ @Override
|
|
|
|
+ public void onBackPressed() {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|