From d01ab9838da1c63fe7a83ebd1aa1d2f50ddecc84 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 21 Jan 2022 00:23:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80&=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../idormy/sms/forwarder/AboutActivity.java | 231 +-- .../idormy/sms/forwarder/MainActivity.java | 160 +- .../idormy/sms/forwarder/RuleActivity.java | 48 +- .../idormy/sms/forwarder/SenderActivity.java | 186 +- .../idormy/sms/forwarder/SettingActivity.java | 728 +++++--- .../forwarder/model/vo/QYWXAppSettingVo.java | 4 +- .../receiver/PhoneStateReceiver.java | 13 +- .../forwarder/receiver/SimStateReceiver.java | 3 - .../sms/forwarder/sender/HttpServer.java | 7 +- .../idormy/sms/forwarder/sender/SendUtil.java | 3 +- .../sms/forwarder/sender/SenderFeishuMsg.java | 7 +- .../sms/forwarder/sender/SenderGotifyMsg.java | 4 +- .../sms/forwarder/utils/AnimationUtils.java | 14 +- .../sms/forwarder/utils/CommonUtil.java | 42 +- .../idormy/sms/forwarder/utils/Define.java | 4 + .../sms/forwarder/utils/SettingUtil.java | 125 +- .../idormy/sms/forwarder/utils/TimeUtil.java | 3 +- .../idormy/sms/forwarder/view/StepBar.java | 85 + app/src/main/res/drawable/ic_settings.xml | 10 - .../drawable/line_bg_white_only_bottom_d8.xml | 4 +- app/src/main/res/layout/activity_about.xml | 54 - app/src/main/res/layout/activity_applist.xml | 8 +- app/src/main/res/layout/activity_clone.xml | 12 +- app/src/main/res/layout/activity_main.xml | 259 +-- app/src/main/res/layout/activity_rule.xml | 86 +- app/src/main/res/layout/activity_sender.xml | 45 +- app/src/main/res/layout/activity_setting.xml | 1502 ++++++++++------- app/src/main/res/layout/alert_dialog_menu.xml | 6 +- .../layout/alert_dialog_setview_dingding.xml | 14 +- .../res/layout/alert_dialog_setview_email.xml | 26 +- .../layout/alert_dialog_setview_feishu.xml | 6 +- .../layout/alert_dialog_setview_qywxapp.xml | 6 +- .../alert_dialog_setview_qywxgrouprobot.xml | 2 +- .../res/layout/alert_dialog_setview_rule.xml | 24 +- .../layout/alert_dialog_setview_rule_app.xml | 28 +- .../layout/alert_dialog_setview_rule_call.xml | 29 +- .../alert_dialog_setview_serverchan.xml | 2 +- .../res/layout/alert_dialog_setview_sms.xml | 2 +- .../layout/alert_dialog_setview_telegram.xml | 9 +- .../res/layout/diaolog_privacy_policy.xml | 45 +- app/src/main/res/layout/edit_text_clear.xml | 19 +- app/src/main/res/layout/edit_text_ip.xml | 40 +- app/src/main/res/layout/item_menu.xml | 7 +- app/src/main/res/layout/item_rule.xml | 4 +- app/src/main/res/layout/item_sender.xml | 4 +- app/src/main/res/layout/step_bar.xml | 196 +++ app/src/main/res/menu/menu_main.xml | 22 +- app/src/main/res/values-en/colors.xml | 5 +- app/src/main/res/values-en/strings.xml | 15 +- app/src/main/res/values/colors.xml | 5 +- app/src/main/res/values/strings.xml | 36 +- app/src/main/res/xml/backup_descriptor.xml | 2 +- build.gradle | 2 - 54 files changed, 2229 insertions(+), 1976 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/view/StepBar.java delete mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/layout/step_bar.xml diff --git a/app/build.gradle b/app/build.gradle index 233f0b10..44c6c9e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -132,7 +132,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //noinspection GradleDependency implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.5.2' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.5.0' //noinspection GradleDynamicVersion testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java b/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java index ff6a5b90..940c343b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java @@ -1,18 +1,10 @@ package com.idormy.sms.forwarder; -import android.annotation.SuppressLint; -import android.content.ComponentName; -import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; import android.net.Uri; -import android.os.Build; import android.os.Bundle; -import android.provider.Settings; import android.util.Log; import android.widget.Button; -import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; @@ -21,37 +13,23 @@ import androidx.appcompat.app.AppCompatActivity; import com.idormy.sms.forwarder.receiver.RebootBroadcastReceiver; import com.idormy.sms.forwarder.utils.CacheUtil; import com.idormy.sms.forwarder.utils.CommonUtil; -import com.idormy.sms.forwarder.utils.Define; import com.xuexiang.xupdate.easy.EasyUpdate; import com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - public class AboutActivity extends AppCompatActivity { + + @SuppressWarnings("FieldCanBeLocal") private final String TAG = "AboutActivity"; - private Context context; @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); - context = AboutActivity.this; - setContentView(R.layout.activity_about); Log.d(TAG, "onCreate: " + RebootBroadcastReceiver.class.getName()); - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch check_with_reboot = findViewById(R.id.switch_with_reboot); - checkWithReboot(check_with_reboot); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_help_tip = findViewById(R.id.switch_help_tip); - SwitchHelpTip(switch_help_tip); - final TextView version_now = findViewById(R.id.version_now); Button check_version_now = findViewById(R.id.check_version_now); try { @@ -118,37 +96,6 @@ public class AboutActivity extends AppCompatActivity { } - //检查重启广播接受器状态并设置 - private void checkWithReboot(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch withrebootSwitch) { - //获取组件 - final ComponentName cm = new ComponentName(this.getPackageName(), RebootBroadcastReceiver.class.getName()); - - final PackageManager pm = getPackageManager(); - int state = pm.getComponentEnabledSetting(cm); - withrebootSwitch.setChecked(state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED - && state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER); - withrebootSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - int newState = isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED - : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - pm.setComponentEnabledSetting(cm, newState, PackageManager.DONT_KILL_APP); - Log.d(TAG, "onCheckedChanged:" + isChecked); - - if (isChecked) startToAutoStartSetting(this); - }); - } - - //页面帮助提示 - private void SwitchHelpTip(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchHelpTip) { - switchHelpTip.setChecked(MyApplication.showHelpTip); - - switchHelpTip.setOnCheckedChangeListener((buttonView, isChecked) -> { - MyApplication.showHelpTip = isChecked; - SharedPreferences sp = context.getSharedPreferences(Define.SP_CONFIG, Context.MODE_PRIVATE); - sp.edit().putBoolean(Define.SP_CONFIG_SWITCH_HELP_TIP, isChecked).apply(); - Log.d(TAG, "onCheckedChanged:" + isChecked); - }); - } - //发起添加群流程 public void joinQQGroup(String key) { Intent intent = new Intent(); @@ -163,178 +110,4 @@ public class AboutActivity extends AppCompatActivity { } } - - //Intent跳转到[自启动]页面全网最全适配机型解决方案 - private static final HashMap> hashMap = new HashMap<>() { - { - put("Xiaomi", Arrays.asList( - "com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity",//MIUI10_9.8.1(9.0) - "com.miui.securitycenter" - )); - - put("samsung", Arrays.asList( - "com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity", - "com.samsung.android.sm_cn/com.samsung.android.sm.ui.appmanagement.AppManagementActivity", - "com.samsung.android.sm_cn/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity", - "com.samsung.android.sm_cn/.ui.ram.RamActivity", - "com.samsung.android.sm_cn/.app.dashboard.SmartManagerDashBoardActivity", - - "com.samsung.android.sm/com.samsung.android.sm.ui.ram.AutoRunActivity", - "com.samsung.android.sm/com.samsung.android.sm.ui.appmanagement.AppManagementActivity", - "com.samsung.android.sm/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity", - "com.samsung.android.sm/.ui.ram.RamActivity", - "com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity", - - "com.samsung.android.lool/com.samsung.android.sm.ui.battery.BatteryActivity", - "com.samsung.android.sm_cn", - "com.samsung.android.sm" - )); - - put("HUAWEI", Arrays.asList( - "com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",//EMUI9.1.0(方舟,9.0) - "com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity", - "com.huawei.systemmanager/.optimize.process.ProtectActivity", - "com.huawei.systemmanager/.optimize.bootstart.BootStartActivity", - "com.huawei.systemmanager"//最后一行可以写包名, 这样如果签名的类路径在某些新版本的ROM中没找到 就直接跳转到对应的安全中心/手机管家 首页. - )); - - put("vivo", Arrays.asList( - "com.iqoo.secure/.ui.phoneoptimize.BgStartUpManager", - "com.iqoo.secure/.safeguard.PurviewTabActivity", - "com.vivo.permissionmanager/.activity.BgStartUpManagerActivity", - //"com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity", //这是白名单, 不是自启动 - "com.iqoo.secure", - "com.vivo.permissionmanager" - )); - - put("Meizu", Arrays.asList( - "com.meizu.safe/.permission.SmartBGActivity",//Flyme7.3.0(7.1.2) - "com.meizu.safe/.permission.PermissionMainActivity",//网上的 - "com.meizu.safe" - )); - - put("OPPO", Arrays.asList( - "com.coloros.safecenter/.startupapp.StartupAppListActivity", - "com.coloros.safecenter/.permission.startup.StartupAppListActivity", - "com.oppo.safe/.permission.startup.StartupAppListActivity", - "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity", - "com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity", - "com.coloros.safecenter", - "com.oppo.safe", - "com.coloros.oppoguardelf" - )); - - put("oneplus", Arrays.asList( - "com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity", - "com.oneplus.security" - )); - - put("letv", Arrays.asList( - "com.letv.android.letvsafe/.AutobootManageActivity", - "com.letv.android.letvsafe/.BackgroundAppManageActivity",//应用保护 - "com.letv.android.letvsafe" - )); - - put("zte", Arrays.asList( - "com.zte.heartyservice/.autorun.AppAutoRunManager", - "com.zte.heartyservice" - )); - - //金立 - put("F", Arrays.asList( - "com.gionee.softmanager/.MainActivity", - "com.gionee.softmanager" - )); - - //以下为未确定(厂商名也不确定) - put("smartisanos", Arrays.asList( - "com.smartisanos.security/.invokeHistory.InvokeHistoryActivity", - "com.smartisanos.security" - )); - - //360 - put("360", Arrays.asList( - "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity", - "com.yulong.android.coolsafe" - )); - - //360 - put("ulong", Arrays.asList( - "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity", - "com.yulong.android.coolsafe" - )); - - //酷派 - put("coolpad"/*厂商名称不确定是否正确*/, Arrays.asList( - "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain", - "com.yulong.android.security" - )); - - //联想 - put("lenovo"/*厂商名称不确定是否正确*/, Arrays.asList( - "com.lenovo.security/.purebackground.PureBackgroundActivity", - "com.lenovo.security" - )); - - put("htc"/*厂商名称不确定是否正确*/, Arrays.asList( - "com.htc.pitroad/.landingpage.activity.LandingPageActivity", - "com.htc.pitroad" - )); - - //华硕 - put("asus"/*厂商名称不确定是否正确*/, Arrays.asList( - "com.asus.mobilemanager/.MainActivity", - "com.asus.mobilemanager" - )); - - } - }; - - public static void startToAutoStartSetting(Context context) { - Log.e("Util", "******************当前手机型号为:" + Build.MANUFACTURER); - - Set>> entries = hashMap.entrySet(); - boolean has = false; - for (Map.Entry> entry : entries) { - String manufacturer = entry.getKey(); - List actCompatList = entry.getValue(); - if (Build.MANUFACTURER.equalsIgnoreCase(manufacturer)) { - for (String act : actCompatList) { - try { - Intent intent; - if (act.contains("/")) { - intent = new Intent(); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - ComponentName componentName = ComponentName.unflattenFromString(act); - intent.setComponent(componentName); - } else { - //找不到? 网上的做法都是跳转到设置... 这基本上是没意义的 基本上自启动这个功能是第三方厂商自己写的安全管家类app - //所以我是直接跳转到对应的安全管家/安全中心 - intent = context.getPackageManager().getLaunchIntentForPackage(act); - } - context.startActivity(intent); - has = true; - break; - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - if (!has) { - Toast.makeText(context, "兼容方案", Toast.LENGTH_SHORT).show(); - try { - Intent intent = new Intent(); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); - intent.setData(Uri.fromParts("package", context.getPackageName(), null)); - context.startActivity(intent); - } catch (Exception e) { - e.printStackTrace(); - Intent intent = new Intent(Settings.ACTION_SETTINGS); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - } - } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java index 4fd6b3f1..9bed0314 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -18,7 +18,6 @@ import android.view.View; import android.view.Window; import android.widget.RadioButton; import android.widget.RadioGroup; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; @@ -74,10 +73,6 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - //检查权限是否获取 - PackageManager pm = getPackageManager(); - CommonUtil.CheckPermission(pm, this); - //获取SIM信息 PhoneUtils.init(this); @@ -85,10 +80,6 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I SmsUtil.init(this); NetUtil.init(this); - HttpUtil.init(this); - SmsHubApiTask.init(this); - HttpServer.init(this); - //前台服务 try { serviceIntent = new Intent(MainActivity.this, FrontService.class); @@ -106,26 +97,29 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I } catch (Exception e) { Log.e(TAG, "BatteryService:", e); } - try { - SmsHubApiTask.updateTimer(); - HttpServer.update(); - } catch (Exception e) { - Log.e(TAG, "SmsHubApiTask:", e); + + + HttpUtil.init(this); + //启用HttpServer + if (SettingUtil.getSwitchEnableHttpServer()) { + HttpServer.init(this); + try { + HttpServer.update(); + } catch (Exception e) { + Log.e(TAG, "启用HttpServer:", e); + } } - /*final StepView stepView = findViewById(R.id.step_view); - stepView.setOnStepClickListener(new StepView.OnStepClickListener() { - @Override - public void onStepClick(int step) { - Toast.makeText(MainActivity.this, "Step " + step, Toast.LENGTH_SHORT).show(); + //启用SmsHubApiTask + if (SettingUtil.getSwitchEnableSmsHubApi()) { + SmsHubApiTask.init(this); + try { + SmsHubApiTask.updateTimer(); + } catch (Exception e) { + Log.e(TAG, "SmsHubApiTask:", e); } - }); - List steps = new ArrayList<>(); - for (int i = 0; i < 4; i++) { - steps.add("Step " + (i + 1)); } - //steps.set(steps.size() - 1, steps.get(steps.size() - 1) + " last one"); - stepView.setSteps(steps);*/ + } @Override @@ -141,19 +135,28 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I return; } - //是否关闭页面提示 + //检查权限是否获取 + PackageManager pm = getPackageManager(); + CommonUtil.CheckPermission(pm, this); + + //是否关闭页面提示 & 计算浮动按钮位置 TextView help_tip = findViewById(R.id.help_tip); - FloatingActionButton btnCleanLog = findViewById(R.id.btnCleanLog); - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) btnCleanLog.getLayoutParams(); - if (MyApplication.showHelpTip) { - layoutParams.bottomMargin = CommonUtil.dp2px(this, 120);//距离底部120dp - btnCleanLog.setLayoutParams(layoutParams); - help_tip.setVisibility(View.VISIBLE); - } else { - layoutParams.bottomMargin = CommonUtil.dp2px(this, 80); - btnCleanLog.setLayoutParams(layoutParams); - help_tip.setVisibility(View.GONE); - } + FloatingActionButton btnFloat = findViewById(R.id.btnCleanLog); + RefreshListView viewList = findViewById(R.id.list_view_log); + CommonUtil.calcMarginBottom(this, help_tip, btnFloat, viewList, null); + + //清空日志 + btnFloat.setOnClickListener(v -> { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle(R.string.clear_logs_tips) + .setPositiveButton(R.string.confirm, (dialog, which) -> { + // TODO Auto-generated method stub + LogUtil.delLog(null, null); + initTLogs(); + adapter.add(logVos); + }); + builder.show(); + }); // 先拿到数据并放在适配器上 initTLogs(); //初始化数据 @@ -362,54 +365,6 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I builder.show(); } - public void toAppList() { - Intent intent = new Intent(this, AppListActivity.class); - startActivity(intent); - } - - public void toClone() { - Intent intent = new Intent(this, CloneActivity.class); - startActivity(intent); - } - - public void toSetting() { - Intent intent = new Intent(this, SettingActivity.class); - startActivity(intent); - } - - public void toAbout() { - Intent intent = new Intent(this, AboutActivity.class); - startActivity(intent); - } - - public void toHelp() { - Uri uri = Uri.parse("https://gitee.com/pp/SmsForwarder/wikis/pages"); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - startActivity(intent); - } - - public void toRuleSetting(View view) { - Intent intent = new Intent(this, RuleActivity.class); - startActivity(intent); - } - - public void toSendSetting(View view) { - Intent intent = new Intent(this, SenderActivity.class); - startActivity(intent); - } - - public void cleanLog(View view) { - AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); - builder.setTitle(R.string.clear_logs_tips) - .setPositiveButton(R.string.confirm, (dialog, which) -> { - // TODO Auto-generated method stub - LogUtil.delLog(null, null); - initTLogs(); - adapter.add(logVos); - }); - builder.show(); - } - //按返回键不退出回到桌面 @Override public void onBackPressed() { @@ -427,29 +382,34 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I } //menu点击事件 + @SuppressWarnings("CommentedOutCode") @SuppressLint("NonConstantResourceId") @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle item selection + Intent intent; switch (item.getItemId()) { + //case R.id.to_setting: + // intent = new Intent(this, SettingActivity.class); + // break; case R.id.to_app_list: - toAppList(); - return true; + intent = new Intent(this, AppListActivity.class); + break; case R.id.to_clone: - toClone(); - return true; - case R.id.to_setting: - toSetting(); - return true; + intent = new Intent(this, CloneActivity.class); + break; case R.id.to_about: - toAbout(); - return true; + intent = new Intent(this, AboutActivity.class); + break; case R.id.to_help: - toHelp(); - return true; + Uri uri = Uri.parse("https://gitee.com/pp/SmsForwarder/wikis/pages"); + intent = new Intent(Intent.ACTION_VIEW, uri); + break; default: return super.onOptionsItemSelected(item); } + + startActivity(intent); + return true; } //设置menu图标显示 @@ -476,8 +436,8 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I public void dialog() { dialog = new Dialog(this, R.style.dialog); inflate = LayoutInflater.from(MainActivity.this).inflate(R.layout.diaolog_privacy_policy, null); - TextView succsebtn = (TextView) inflate.findViewById(R.id.succsebtn); - TextView canclebtn = (TextView) inflate.findViewById(R.id.caclebtn); + TextView succsebtn = inflate.findViewById(R.id.succsebtn); + TextView canclebtn = inflate.findViewById(R.id.caclebtn); succsebtn.setOnClickListener(v -> { /* uminit为1时代表已经同意隐私协议,sp记录当前状态*/ @@ -496,7 +456,6 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I //杀掉以前进程 android.os.Process.killProcess(android.os.Process.myPid()); - finish(); }); @@ -506,7 +465,6 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I UMConfigure.submitPolicyGrantResult(getApplicationContext(), false); //不同意隐私协议,退出app android.os.Process.killProcess(android.os.Process.myPid()); - }); dialog.setContentView(inflate); diff --git a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java index d1f0120c..7ca29a7d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java @@ -74,10 +74,6 @@ public class RuleActivity extends AppCompatActivity { super.onStart(); Log.d(TAG, "onStart"); - //是否关闭页面提示 - TextView help_tip = findViewById(R.id.help_tip); - help_tip.setVisibility(MyApplication.showHelpTip ? View.VISIBLE : View.GONE); - // 先拿到数据并放在适配器上 initRules(); //初始化数据 adapter = new RuleAdapter(RuleActivity.this, R.layout.item_rule, ruleModels); @@ -100,7 +96,6 @@ public class RuleActivity extends AppCompatActivity { builder.setTitle(R.string.delete_rule_title); builder.setMessage(R.string.delete_rule_tips); - //添加AlertDialog.Builder对象的setPositiveButton()方法 builder.setPositiveButton(R.string.confirm, (dialog, which) -> { RuleUtil.delRule(ruleModels.get(position).getId()); initRules(); @@ -108,18 +103,11 @@ public class RuleActivity extends AppCompatActivity { Toast.makeText(getBaseContext(), R.string.delete_rule_toast, Toast.LENGTH_SHORT).show(); }); - //添加AlertDialog.Builder对象的setNegativeButton()方法 builder.setNeutralButton(R.string.clone, (dialog, which) -> { RuleModel ruleModel = ruleModels.get(position); - //TODO:直接复制 - //RuleUtil.addRule(ruleModel); - //initRules(); - //adapter.add(ruleModels); - //TODO:只复制到编辑对话框 setRule(ruleModel, true); }); - //添加AlertDialog.Builder对象的setNegativeButton()方法 builder.setNegativeButton(R.string.cancel, (dialog, which) -> { }); @@ -131,9 +119,6 @@ public class RuleActivity extends AppCompatActivity { //切换日志类别 int typeCheckId = getTypeCheckId(currentType); final RadioGroup radioGroupTypeCheck = findViewById(R.id.radioGroupTypeCheck); - final FloatingActionButton addSmsRule = findViewById(R.id.addSmsRule); - final FloatingActionButton addCallRule = findViewById(R.id.addCallRule); - final FloatingActionButton addAppRule = findViewById(R.id.addAppRule); radioGroupTypeCheck.check(typeCheckId); radioGroupTypeCheck.setOnCheckedChangeListener((group, checkedId) -> { RadioButton rb = findViewById(checkedId); @@ -141,15 +126,19 @@ public class RuleActivity extends AppCompatActivity { initRules(); //初始化数据 adapter = new RuleAdapter(RuleActivity.this, R.layout.item_rule, ruleModels); listView.setAdapter(adapter); - - addSmsRule.setVisibility("sms".equals(currentType) ? View.VISIBLE : View.GONE); - addCallRule.setVisibility("call".equals(currentType) ? View.VISIBLE : View.GONE); - addAppRule.setVisibility("app".equals(currentType) ? View.VISIBLE : View.GONE); }); + + + //是否关闭页面提示 + TextView help_tip = findViewById(R.id.help_tip); + FloatingActionButton btnFloat = findViewById(R.id.btnFloat); + CommonUtil.calcMarginBottom(this, help_tip, btnFloat, listView, null); + //添加规则 + btnFloat.setOnClickListener(v -> setRule(null, false)); } - private int getTypeCheckId(String currentType) { - switch (currentType) { + private int getTypeCheckId(String curType) { + switch (curType) { case "call": return R.id.btnTypeCall; case "app": @@ -159,8 +148,8 @@ public class RuleActivity extends AppCompatActivity { } } - private int getDialogView(String currentType) { - switch (currentType) { + private int getDialogView(String curType) { + switch (curType) { case "call": return R.layout.alert_dialog_setview_rule_call; case "app": @@ -170,8 +159,8 @@ public class RuleActivity extends AppCompatActivity { } } - private int getDialogTitle(String currentType) { - switch (currentType) { + private int getDialogTitle(String curType) { + switch (curType) { case "call": return R.string.setrule_call; case "app": @@ -186,15 +175,6 @@ public class RuleActivity extends AppCompatActivity { ruleModels = RuleUtil.getRule(null, null, currentType); } - public void addRule(View view) { - currentType = (String) view.getTag(); - int typeCheckId = getTypeCheckId(currentType); - final RadioGroup radioGroupTypeCheck = findViewById(R.id.radioGroupTypeCheck); - radioGroupTypeCheck.check(typeCheckId); - - setRule(null, false); - } - private void setRule(final RuleModel ruleModel, final boolean isClone) { final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(RuleActivity.this); final View view1 = View.inflate(RuleActivity.this, getDialogView(currentType), null); diff --git a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java index 5e833fae..97cde9eb 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -39,6 +39,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import com.alibaba.fastjson.JSON; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.idormy.sms.forwarder.adapter.SenderAdapter; import com.idormy.sms.forwarder.model.SenderModel; import com.idormy.sms.forwarder.model.vo.BarkSettingVo; @@ -109,10 +110,6 @@ public class SenderActivity extends AppCompatActivity { super.onStart(); Log.d(TAG, "onStart"); - //是否关闭页面提示 - TextView help_tip = findViewById(R.id.help_tip); - help_tip.setVisibility(MyApplication.showHelpTip ? View.VISIBLE : View.GONE); - // 先拿到数据并放在适配器上 initSenders(); //初始化数据 adapter = new SenderAdapter(SenderActivity.this, R.layout.item_sender, senderModels); @@ -244,6 +241,74 @@ public class SenderActivity extends AppCompatActivity { builder.create().show(); return true; }); + + + //是否关闭页面提示 + TextView help_tip = findViewById(R.id.help_tip); + FloatingActionButton btnFloat = findViewById(R.id.btnAddSender); + CommonUtil.calcMarginBottom(this, help_tip, btnFloat, listView, null); + //添加发送通道 + btnFloat.setOnClickListener(v -> { + + @SuppressLint("InflateParams") View dialog_menu = LayoutInflater.from(SenderActivity.this).inflate(R.layout.alert_dialog_menu, null); + // 设置style 控制默认dialog带来的边距问题 + final Dialog dialog = new Dialog(this, R.style.dialog_menu); + dialog.setContentView(dialog_menu); + dialog.show(); + + GridView gridview = dialog.findViewById(R.id.MemuGridView); + final List> item = getMenuData(); + SimpleAdapter simpleAdapter = new SimpleAdapter(this, item, R.layout.item_menu, new String[]{"ItemImageView", "ItemTextView"}, new int[]{R.id.ItemImageView, R.id.ItemTextView}); + gridview.setAdapter(simpleAdapter); + + // 添加点击事件 + gridview.setOnItemClickListener((arg0, arg1, position, arg3) -> { + dialog.dismiss(); + + switch (position) { + case TYPE_DINGDING: + setDingDing(null, false); + break; + case TYPE_EMAIL: + setEmail(null, false); + break; + case TYPE_BARK: + setBark(null, false); + break; + case TYPE_WEB_NOTIFY: + setWebNotify(null, false); + break; + case TYPE_QYWX_GROUP_ROBOT: + setQYWXGroupRobot(null, false); + break; + case TYPE_QYWX_APP: + setQYWXApp(null, false); + break; + case TYPE_SERVER_CHAN: + setServerChan(null, false); + break; + case TYPE_TELEGRAM: + setTelegram(null, false); + break; + case TYPE_SMS: + setSms(null, false); + break; + case TYPE_FEISHU: + setFeiShu(null, false); + break; + case TYPE_PUSHPLUS: + setPushPlus(null, false); + break; + case TYPE_GOTIFY: + setGotify(null, false); + break; + default: + Toast.makeText(SenderActivity.this, R.string.not_supported, Toast.LENGTH_LONG).show(); + break; + } + }); + }); + } @Override @@ -314,67 +379,6 @@ public class SenderActivity extends AppCompatActivity { return data; } - // 添加发送通道 - public void addSender(View view) { - @SuppressLint("InflateParams") View dialog_menu = LayoutInflater.from(SenderActivity.this).inflate(R.layout.alert_dialog_menu, null); - // 设置style 控制默认dialog带来的边距问题 - final Dialog dialog = new Dialog(this, R.style.dialog_menu); - dialog.setContentView(dialog_menu); - dialog.show(); - - GridView gridview = dialog.findViewById(R.id.MemuGridView); - final List> item = getMenuData(); - SimpleAdapter simpleAdapter = new SimpleAdapter(this, item, R.layout.item_menu, new String[]{"ItemImageView", "ItemTextView"}, new int[]{R.id.ItemImageView, R.id.ItemTextView}); - gridview.setAdapter(simpleAdapter); - - // 添加点击事件 - gridview.setOnItemClickListener((arg0, arg1, position, arg3) -> { - dialog.dismiss(); - - switch (position) { - case TYPE_DINGDING: - setDingDing(null, false); - break; - case TYPE_EMAIL: - setEmail(null, false); - break; - case TYPE_BARK: - setBark(null, false); - break; - case TYPE_WEB_NOTIFY: - setWebNotify(null, false); - break; - case TYPE_QYWX_GROUP_ROBOT: - setQYWXGroupRobot(null, false); - break; - case TYPE_QYWX_APP: - setQYWXApp(null, false); - break; - case TYPE_SERVER_CHAN: - setServerChan(null, false); - break; - case TYPE_TELEGRAM: - setTelegram(null, false); - break; - case TYPE_SMS: - setSms(null, false); - break; - case TYPE_FEISHU: - setFeiShu(null, false); - break; - case TYPE_PUSHPLUS: - setPushPlus(null, false); - break; - case TYPE_GOTIFY: - setGotify(null, false); - break; - default: - Toast.makeText(SenderActivity.this, R.string.not_supported, Toast.LENGTH_LONG).show(); - break; - } - }); - } - //钉钉机器人 @SuppressLint({"SimpleDateFormat", "SetTextI18n"}) private void setDingDing(final SenderModel senderModel, final boolean isClone) { @@ -433,8 +437,8 @@ public class SenderActivity extends AppCompatActivity { buttonDingdingOk.setOnClickListener(view -> { String senderName = editTextDingdingName.getText().toString().trim(); int senderStatus = switchDingdingEnable.isChecked() ? STATUS_ON : STATUS_OFF; - String token = editTextDingdingToken.getText().toString().trim(); - String secret = editTextDingdingSecret.getText().toString().trim(); + String token = editTextDingdingToken.getText().trim(); + String secret = editTextDingdingSecret.getText().trim(); String atMobiles = editTextDingdingAtMobiles.getText().toString().trim(); Boolean atAll = switchDingdingAtAll.isChecked(); @@ -479,13 +483,13 @@ public class SenderActivity extends AppCompatActivity { }); buttonDingdingTest.setOnClickListener(view -> { - String token = editTextDingdingToken.getText().toString().trim(); + String token = editTextDingdingToken.getText().trim(); if (CommonUtil.checkUrl(token, true)) { Toast.makeText(SenderActivity.this, R.string.invalid_token, Toast.LENGTH_LONG).show(); return; } - String secret = editTextDingdingSecret.getText().toString().trim(); + String secret = editTextDingdingSecret.getText().trim(); String atMobiles = editTextDingdingAtMobiles.getText().toString().trim(); Boolean atAll = switchDingdingAtAll.isChecked(); try { @@ -563,7 +567,7 @@ public class SenderActivity extends AppCompatActivity { String port = editTextEmailPort.getText().toString().trim(); boolean ssl = switchEmailSSl.isChecked(); String fromEmail = editTextEmailFromAdd.getText().toString().trim(); - String pwd = editTextEmailPsw.getText().toString().trim(); + String pwd = editTextEmailPsw.getText().trim(); String toEmail = editTextEmailToAdd.getText().toString().trim(); String title = editTextEmailTitle.getText().toString().trim(); @@ -613,7 +617,7 @@ public class SenderActivity extends AppCompatActivity { String port = editTextEmailPort.getText().toString().trim(); boolean ssl = switchEmailSSl.isChecked(); String fromEmail = editTextEmailFromAdd.getText().toString().trim(); - String pwd = editTextEmailPsw.getText().toString().trim(); + String pwd = editTextEmailPsw.getText().trim(); String toEmail = editTextEmailToAdd.getText().toString().trim(); String title = editTextEmailTitle.getText().toString().trim(); @@ -710,7 +714,7 @@ public class SenderActivity extends AppCompatActivity { return; } - String barkServer = editTextBarkServer.getText().toString().trim(); + String barkServer = editTextBarkServer.getText().trim(); if (!CommonUtil.checkUrl(barkServer, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_bark_server, Toast.LENGTH_LONG).show(); return; @@ -749,7 +753,7 @@ public class SenderActivity extends AppCompatActivity { }); buttonBarkTest.setOnClickListener(view -> { - String barkServer = editTextBarkServer.getText().toString().trim(); + String barkServer = editTextBarkServer.getText().trim(); String barkIcon = editTextBarkIcon.getText().toString().trim(); if (CommonUtil.checkUrl(barkServer, false)) { try { @@ -816,7 +820,7 @@ public class SenderActivity extends AppCompatActivity { } String webServer = editTextWebNotifyWebServer.getText().toString().trim(); - String secret = editTextWebNotifySecret.getText().toString().trim(); + String secret = editTextWebNotifySecret.getText().trim(); String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"; String webParams = editTextWebNotifyWebParams.getText().toString().trim(); @@ -856,7 +860,7 @@ public class SenderActivity extends AppCompatActivity { buttonWebNotifyTest.setOnClickListener(view -> { String webServer = editTextWebNotifyWebServer.getText().toString().trim(); - String secret = editTextWebNotifySecret.getText().toString().trim(); + String secret = editTextWebNotifySecret.getText().trim(); String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"; String webParams = editTextWebNotifyWebParams.getText().toString().trim(); @@ -919,7 +923,7 @@ public class SenderActivity extends AppCompatActivity { return; } - String webHook = editTextQYWXGroupRobotWebHook.getText().toString().trim(); + String webHook = editTextQYWXGroupRobotWebHook.getText().trim(); if (!CommonUtil.checkUrl(webHook, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show(); return; @@ -957,7 +961,7 @@ public class SenderActivity extends AppCompatActivity { }); buttonQyWxGroupRobotTest.setOnClickListener(view -> { - String webHook = editTextQYWXGroupRobotWebHook.getText().toString().trim(); + String webHook = editTextQYWXGroupRobotWebHook.getText().trim(); if (!CommonUtil.checkUrl(webHook, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show(); return; @@ -1046,7 +1050,7 @@ public class SenderActivity extends AppCompatActivity { QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo( editTextQYWXAppCorpID.getText().toString().trim(), editTextQYWXAppAgentID.getText().toString().trim(), - editTextQYWXAppSecret.getText().toString().trim(), + editTextQYWXAppSecret.getText().trim(), editTextQYWXAppToUser.getText().toString().trim(), switchQYWXAppAtAll.isChecked()); if (!QYWXAppSettingVoNew.checkParms()) { @@ -1088,7 +1092,7 @@ public class SenderActivity extends AppCompatActivity { QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo( editTextQYWXAppCorpID.getText().toString().trim(), editTextQYWXAppAgentID.getText().toString().trim(), - editTextQYWXAppSecret.getText().toString().trim(), + editTextQYWXAppSecret.getText().trim(), editTextQYWXAppToUser.getText().toString().trim(), switchQYWXAppAtAll.isChecked()); if (!QYWXAppSettingVoNew.checkParms()) { @@ -1152,7 +1156,7 @@ public class SenderActivity extends AppCompatActivity { return; } - String serverChanServer = editTextServerChanSendKey.getText().toString().trim(); + String serverChanServer = editTextServerChanSendKey.getText().trim(); if (TextUtils.isEmpty(serverChanServer)) { Toast.makeText(SenderActivity.this, R.string.invalid_sendkey, Toast.LENGTH_LONG).show(); return; @@ -1190,7 +1194,7 @@ public class SenderActivity extends AppCompatActivity { }); buttonServerChanTest.setOnClickListener(view -> { - String serverChanServer = editTextServerChanSendKey.getText().toString().trim(); + String serverChanServer = editTextServerChanSendKey.getText().trim(); if (TextUtils.isEmpty(serverChanServer)) { Toast.makeText(SenderActivity.this, R.string.invalid_sendkey, Toast.LENGTH_LONG).show(); return; @@ -1303,7 +1307,7 @@ public class SenderActivity extends AppCompatActivity { return; } - String apiToken = editTextTelegramApiToken.getText().toString().trim(); + String apiToken = editTextTelegramApiToken.getText().trim(); String chatId = editTextTelegramChatId.getText().toString().trim(); if (apiToken.isEmpty() || chatId.isEmpty()) { Toast.makeText(SenderActivity.this, R.string.invalid_apiToken_or_chatId, Toast.LENGTH_LONG).show(); @@ -1320,7 +1324,7 @@ public class SenderActivity extends AppCompatActivity { boolean proxyAuthenticator = switchProxyAuthenticator.isChecked(); String proxyUsername = editTextProxyUsername.getText().toString().trim(); - String proxyPassword = editTextProxyPassword.getText().toString().trim(); + String proxyPassword = editTextProxyPassword.getText().trim(); if (proxyAuthenticator && TextUtils.isEmpty(proxyUsername) && TextUtils.isEmpty(proxyPassword)) { Toast.makeText(SenderActivity.this, R.string.invalid_username_or_password, Toast.LENGTH_LONG).show(); return; @@ -1360,7 +1364,7 @@ public class SenderActivity extends AppCompatActivity { }); buttonTelegramTest.setOnClickListener(view -> { - String apiToken = editTextTelegramApiToken.getText().toString().trim(); + String apiToken = editTextTelegramApiToken.getText().trim(); String chatId = editTextTelegramChatId.getText().toString().trim(); if (apiToken.isEmpty() || chatId.isEmpty()) { Toast.makeText(SenderActivity.this, R.string.invalid_apiToken_or_chatId, Toast.LENGTH_LONG).show(); @@ -1377,7 +1381,7 @@ public class SenderActivity extends AppCompatActivity { boolean proxyAuthenticator = switchProxyAuthenticator.isChecked(); String proxyUsername = editTextProxyUsername.getText().toString().trim(); - String proxyPassword = editTextProxyPassword.getText().toString().trim(); + String proxyPassword = editTextProxyPassword.getText().trim(); if (proxyAuthenticator && TextUtils.isEmpty(proxyUsername) && TextUtils.isEmpty(proxyPassword)) { Toast.makeText(SenderActivity.this, R.string.invalid_username_or_password, Toast.LENGTH_LONG).show(); return; @@ -1555,7 +1559,7 @@ public class SenderActivity extends AppCompatActivity { } String webHook = editTextFeishuWebhook.getText().toString().trim(); - String secret = editTextFeishuSecret.getText().toString().trim(); + String secret = editTextFeishuSecret.getText().trim(); if (!CommonUtil.checkUrl(webHook, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show(); return; @@ -1594,7 +1598,7 @@ public class SenderActivity extends AppCompatActivity { buttonFeishuTest.setOnClickListener(view -> { String webHook = editTextFeishuWebhook.getText().toString().trim(); - String secret = editTextFeishuSecret.getText().toString().trim(); + String secret = editTextFeishuSecret.getText().trim(); if (!CommonUtil.checkUrl(webHook, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webhook, Toast.LENGTH_LONG).show(); return; @@ -1666,7 +1670,7 @@ public class SenderActivity extends AppCompatActivity { } PushPlusSettingVo pushPlusSettingVoNew = new PushPlusSettingVo( - editTextPushPlusToken.getText().toString().trim(), + editTextPushPlusToken.getText().trim(), editTextPushPlusTopic.getText().toString().trim(), editTextPushPlusTemplate.getText().toString().trim(), editTextPushPlusChannel.getText().toString().trim(), @@ -1712,7 +1716,7 @@ public class SenderActivity extends AppCompatActivity { buttonPushPlusTest.setOnClickListener(view -> { PushPlusSettingVo pushPlusSettingVoNew = new PushPlusSettingVo( - editTextPushPlusToken.getText().toString().trim(), + editTextPushPlusToken.getText().trim(), editTextPushPlusTopic.getText().toString().trim(), editTextPushPlusTemplate.getText().toString().trim(), editTextPushPlusChannel.getText().toString().trim(), @@ -1784,7 +1788,7 @@ public class SenderActivity extends AppCompatActivity { return; } - String webServer = editTextGotifyWebServer.getText().toString().trim(); + String webServer = editTextGotifyWebServer.getText().trim(); if (!CommonUtil.checkUrl(webServer, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webserver, Toast.LENGTH_LONG).show(); return; @@ -1828,7 +1832,7 @@ public class SenderActivity extends AppCompatActivity { }); buttonGotifyTest.setOnClickListener(view -> { - String webServer = editTextGotifyWebServer.getText().toString().trim(); + String webServer = editTextGotifyWebServer.getText().trim(); if (!CommonUtil.checkUrl(webServer, false)) { Toast.makeText(SenderActivity.this, R.string.invalid_webserver, Toast.LENGTH_LONG).show(); return; diff --git a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java index 9bb8c0fe..e5e31baf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -2,19 +2,25 @@ package com.idormy.sms.forwarder; import android.annotation.SuppressLint; import android.app.ActivityManager; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.provider.Settings; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; @@ -23,103 +29,99 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import com.idormy.sms.forwarder.receiver.RebootBroadcastReceiver; +import com.idormy.sms.forwarder.sender.HttpServer; import com.idormy.sms.forwarder.sender.SmsHubApiTask; -import com.idormy.sms.forwarder.utils.*; - +import com.idormy.sms.forwarder.utils.CommonUtil; +import com.idormy.sms.forwarder.utils.DbHelper; +import com.idormy.sms.forwarder.utils.Define; +import com.idormy.sms.forwarder.utils.HttpUtil; +import com.idormy.sms.forwarder.utils.KeepAliveUtils; +import com.idormy.sms.forwarder.utils.SettingUtil; +import com.idormy.sms.forwarder.view.ClearEditText; + +import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; public class SettingActivity extends AppCompatActivity { private final String TAG = "SettingActivity"; - private TextView textView; + private Context context; + private boolean isIgnoreBatteryOptimization; @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); + context = SettingActivity.this; setContentView(R.layout.activity_setting); - - EditText et_add_extra_device_mark = findViewById(R.id.et_add_extra_device_mark); - editAddExtraDeviceMark(et_add_extra_device_mark); - - EditText et_add_extra_sim1 = findViewById(R.id.et_add_extra_sim1); - editAddExtraSim1(et_add_extra_sim1); - - EditText et_add_extra_sim2 = findViewById(R.id.et_add_extra_sim2); - editAddExtraSim2(et_add_extra_sim2); - - EditText et_battery_level_alarm_min = findViewById(R.id.et_battery_level_alarm_min); - editBatteryLevelAlarmMin(et_battery_level_alarm_min); - EditText et_battery_level_alarm_max = findViewById(R.id.et_battery_level_alarm_max); - editBatteryLevelAlarmMax(et_battery_level_alarm_max); - - EditText et_retry_delay_time1 = findViewById(R.id.et_retry_delay_time1); - editRetryDelayTime(et_retry_delay_time1, 1); - EditText et_retry_delay_time2 = findViewById(R.id.et_retry_delay_time2); - editRetryDelayTime(et_retry_delay_time2, 2); - EditText et_retry_delay_time3 = findViewById(R.id.et_retry_delay_time3); - editRetryDelayTime(et_retry_delay_time3, 3); - EditText et_retry_delay_time4 = findViewById(R.id.et_retry_delay_time4); - editRetryDelayTime(et_retry_delay_time4, 4); - EditText et_retry_delay_time5 = findViewById(R.id.et_retry_delay_time5); - editRetryDelayTime(et_retry_delay_time5, 5); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_sms_template = findViewById(R.id.switch_sms_template); - switchSmsTemplate(switch_sms_template); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_sms = findViewById(R.id.switch_enable_sms); - switchEnableSms(switch_enable_sms); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_phone = findViewById(R.id.switch_enable_phone); - switchEnablePhone(switch_enable_phone); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_app_notify = findViewById(R.id.switch_enable_app_notify); - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_cancel_app_notify = findViewById(R.id.switch_cancel_app_notify); - switchEnableAppNotify(switch_enable_app_notify, switch_cancel_app_notify); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_exclude_from_recents = findViewById(R.id.switch_exclude_from_recents); - switchExcludeFromRecents(switch_exclude_from_recents); - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_battery_receiver = findViewById(R.id.switch_battery_receiver); - switchBatteryReceiver(switch_battery_receiver); - - EditText textSmsTemplate = findViewById(R.id.text_sms_template); - editSmsTemplate(textSmsTemplate); - - editSmsHubConfig(findViewById(R.id.switch_enable_sms_hub),findViewById(R.id.editText_text_sms_hub_url)); } - @SuppressLint("UseSwitchCompatOrMaterialCode") - private void editSmsHubConfig(Switch switch_enable_send_sms, EditText editText_text_send_sms) { - switch_enable_send_sms.setChecked(SettingUtil.getSwitchEnableSmsHubApi()); - switch_enable_send_sms.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (isChecked && editText_text_send_sms.getText() != null && editText_text_send_sms.getText().length() < 1) { - HttpUtil.Toast(TAG, "url为空无法启用"); - switch_enable_send_sms.setChecked(false); - return; - } - SettingUtil.switchEnableSmsHubApi(isChecked); - Log.d(TAG, "switchEnableSendApi:" + isChecked); - SmsHubApiTask.updateTimer(); - }); - editText_text_send_sms.setText(SettingUtil.getSmsHubApiUrl()); - editText_text_send_sms.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - SettingUtil.smsHubApiUrl(editText_text_send_sms.getText().toString().trim()); - } - }); + @SuppressLint("NewApi") + @Override + protected void onStart() { + super.onStart(); + Log.d(TAG, "onStart"); + + //是否关闭页面提示 + TextView help_tip = findViewById(R.id.help_tip); + ScrollView scrollView = findViewById(R.id.scrollView); + CommonUtil.calcMarginBottom(this, help_tip, null, null, scrollView); + + //转发短信广播 + switchEnableSms(findViewById(R.id.switch_enable_sms)); + //转发通话记录 + switchEnablePhone(findViewById(R.id.switch_enable_phone), findViewById(R.id.cbCallType1), findViewById(R.id.cbCallType2), findViewById(R.id.cbCallType3)); + //转发应用通知 & 自动关闭通知 + switchEnableAppNotify(findViewById(R.id.switch_enable_app_notify), findViewById(R.id.checkbox_cancel_app_notify)); + + //HttpServer + switchEnableHttpServer(findViewById(R.id.switch_enable_http_server)); + //SmsHubApiTask + editSmsHubConfig(findViewById(R.id.switch_enable_sms_hub), findViewById(R.id.editText_text_sms_hub_url)); + + //监听电池状态变化 + switchBatteryReceiver(findViewById(R.id.switch_battery_receiver)); + //电量预警 + editBatteryLevelAlarmMin(findViewById(R.id.et_battery_level_alarm_min)); + editBatteryLevelAlarmMax(findViewById(R.id.et_battery_level_alarm_max)); + + //开机启动 + checkWithReboot(findViewById(R.id.switch_with_reboot)); + //电池优化设置 + batterySetting(findViewById(R.id.switch_battery_setting)); + //不在最近任务列表中显示 + switchExcludeFromRecents(findViewById(R.id.switch_exclude_from_recents)); + + //是否开启失败重试 + switchRetryDelay(findViewById(R.id.switch_retry_delay)); + //接口请求失败重试时间间隔 + editRetryDelayTime(findViewById(R.id.et_retry_delay_time1), 1); + editRetryDelayTime(findViewById(R.id.et_retry_delay_time2), 2); + editRetryDelayTime(findViewById(R.id.et_retry_delay_time3), 3); + editRetryDelayTime(findViewById(R.id.et_retry_delay_time4), 4); + editRetryDelayTime(findViewById(R.id.et_retry_delay_time5), 5); + + //设备备注 + editAddExtraDeviceMark(findViewById(R.id.et_add_extra_device_mark)); + //SIM1备注 + editAddExtraSim1(findViewById(R.id.et_add_extra_sim1)); + //SIM2备注 + editAddExtraSim2(findViewById(R.id.et_add_extra_sim2)); + //启用自定义模版 + switchSmsTemplate(findViewById(R.id.switch_sms_template)); + //自定义模板 + editSmsTemplate(findViewById(R.id.text_sms_template)); + + //帮助提示 + SwitchHelpTip(findViewById(R.id.switch_help_tip)); } //设置转发短信 - private void switchEnableSms(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_sms) { + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchEnableSms(Switch switch_enable_sms) { switch_enable_sms.setChecked(SettingUtil.getSwitchEnableSms()); switch_enable_sms.setOnCheckedChangeListener((buttonView, isChecked) -> { @@ -129,30 +131,54 @@ public class SettingActivity extends AppCompatActivity { }); } - //设置转发来电 - private void switchEnablePhone(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_phone) { + //转发通话记录 + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchEnablePhone(Switch switch_enable_phone, CheckBox check_box_call_type_1, CheckBox check_box_call_type_2, CheckBox check_box_call_type_3) { switch_enable_phone.setChecked(SettingUtil.getSwitchEnablePhone()); + check_box_call_type_1.setChecked(SettingUtil.getSwitchCallType1()); + check_box_call_type_2.setChecked(SettingUtil.getSwitchCallType2()); + check_box_call_type_3.setChecked(SettingUtil.getSwitchCallType3()); switch_enable_phone.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { + Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + SettingUtil.switchEnablePhone(false); + return; + } + //TODO:校验使用来电转发必备的权限 SettingUtil.switchEnablePhone(isChecked); Log.d(TAG, "switchEnablePhone:" + isChecked); }); - } - //监听电池状态变化 - private void switchBatteryReceiver(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_battery_receiver) { - switch_battery_receiver.setChecked(SettingUtil.getSwitchEnableBatteryReceiver()); + check_box_call_type_1.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchCallType1(isChecked); + if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { + Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + SettingUtil.switchEnablePhone(false); + } + }); - switch_battery_receiver.setOnCheckedChangeListener((buttonView, isChecked) -> { - //TODO:校验使用来电转发必备的权限 - SettingUtil.switchEnableBatteryReceiver(isChecked); - Log.d(TAG, "switchEnablePhone:" + isChecked); + check_box_call_type_2.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchCallType2(isChecked); + if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { + Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + SettingUtil.switchEnablePhone(false); + } + }); + + check_box_call_type_3.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchCallType3(isChecked); + if (!isChecked && !SettingUtil.getSwitchCallType1() && !SettingUtil.getSwitchCallType2() && !SettingUtil.getSwitchCallType3()) { + Toast.makeText(context, "必选选择一个通话类型,才能开启通话记录转发!", Toast.LENGTH_SHORT).show(); + SettingUtil.switchEnablePhone(false); + } }); } - //设置转发APP通知 - private void switchEnableAppNotify(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_app_notify, @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_cancel_app_notify) { + //转发应用通知 & 自动关闭通知 + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchEnableAppNotify(Switch switch_enable_app_notify, CheckBox checkbox_cancel_app_notify) { final LinearLayout layout_cancel_app_notify = findViewById(R.id.layout_cancel_app_notify); boolean isEnable = SettingUtil.getSwitchEnableAppNotify(); switch_enable_app_notify.setChecked(isEnable); @@ -175,38 +201,93 @@ public class SettingActivity extends AppCompatActivity { Log.d(TAG, "switchEnableAppNotify:" + isChecked); }); - switch_cancel_app_notify.setChecked(SettingUtil.getSwitchCancelAppNotify()); - switch_cancel_app_notify.setOnCheckedChangeListener((buttonView, isChecked) -> { + checkbox_cancel_app_notify.setChecked(SettingUtil.getSwitchCancelAppNotify()); + checkbox_cancel_app_notify.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchCancelAppNotify(isChecked); Log.d(TAG, "switchCancelAppNotify:" + isChecked); }); } - //不在最近任务列表中显示 - @SuppressLint("ObsoleteSdkInt") - private void switchExcludeFromRecents(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_exclude_from_recents) { - switch_exclude_from_recents.setChecked(SettingUtil.getExcludeFromRecents()); + //请求通知使用权限 + public void requestNotificationPermission(View view) { + if (!CommonUtil.isNotificationListenerServiceEnabled(this)) { + CommonUtil.openNotificationAccess(this); + } else { + Toast.makeText(this, R.string.notification_listener_service_enabled, Toast.LENGTH_SHORT).show(); + CommonUtil.toggleNotificationListenerService(this); + } + } - switch_exclude_from_recents.setOnCheckedChangeListener((buttonView, isChecked) -> { - SettingUtil.switchExcludeFromRecents(isChecked); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); - if (am != null) { - List appTasks = am.getAppTasks(); - if (appTasks != null && !appTasks.isEmpty()) { - appTasks.get(0).setExcludeFromRecents(isChecked); - } - } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == CommonUtil.NOTIFICATION_REQUEST_CODE) { + if (CommonUtil.isNotificationListenerServiceEnabled(this)) { + Toast.makeText(this, R.string.notification_listener_service_enabled, Toast.LENGTH_SHORT).show(); + CommonUtil.toggleNotificationListenerService(this); + SettingUtil.switchEnableAppNotify(true); + } else { + Toast.makeText(this, R.string.notification_listener_service_disabled, Toast.LENGTH_SHORT).show(); + SettingUtil.switchEnableAppNotify(false); } - Log.d(TAG, "onCheckedChanged:" + isChecked); + + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_app_notify = findViewById(R.id.switch_enable_app_notify); + switch_enable_app_notify.setChecked(SettingUtil.getSwitchEnableAppNotify()); + } + } + + //SmsHubApiTask + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void editSmsHubConfig(Switch switch_enable_send_sms, ClearEditText editText_text_send_sms) { + switch_enable_send_sms.setChecked(SettingUtil.getSwitchEnableSmsHubApi()); + switch_enable_send_sms.setOnCheckedChangeListener((buttonView, isChecked) -> { + String webServer = editText_text_send_sms.getText().trim(); + if (isChecked && !CommonUtil.checkUrl(webServer, false)) { + HttpUtil.Toast(TAG, "url为空或不正确无法启用"); + switch_enable_send_sms.setChecked(false); + return; + } + SettingUtil.switchEnableSmsHubApi(isChecked); + Log.d(TAG, "switchEnableSendApi:" + isChecked); + SmsHubApiTask.updateTimer(); }); + + editText_text_send_sms.setText(SettingUtil.getSmsHubApiUrl()); + editText_text_send_sms.setOnEditInputListener(content -> SettingUtil.smsHubApiUrl(content.trim())); } - //设置设备名称 - private void editAddExtraDeviceMark(final EditText et_add_extra_device_mark) { - et_add_extra_device_mark.setText(SettingUtil.getAddExtraDeviceMark()); + //HttpServer + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchEnableHttpServer(Switch switch_enable_http_server) { + switch_enable_http_server.setChecked(SettingUtil.getSwitchEnableHttpServer()); - et_add_extra_device_mark.addTextChangedListener(new TextWatcher() { + switch_enable_http_server.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchEnableHttpServer(isChecked); + Log.d(TAG, "switchEnableHttpServer:" + isChecked); + + HttpUtil.init(this); + HttpServer.init(this); + HttpServer.update(); + }); + } + + //监听电池状态变化 + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchBatteryReceiver(Switch switch_battery_receiver) { + switch_battery_receiver.setChecked(SettingUtil.getSwitchEnableBatteryReceiver()); + + switch_battery_receiver.setOnCheckedChangeListener((buttonView, isChecked) -> { + //TODO:校验使用来电转发必备的权限 + SettingUtil.switchEnableBatteryReceiver(isChecked); + Log.d(TAG, "switchEnablePhone:" + isChecked); + }); + } + + //设置低电量报警值下限 + private void editBatteryLevelAlarmMin(final EditText et_battery_level_alarm) { + et_battery_level_alarm.setText(String.valueOf(SettingUtil.getBatteryLevelAlarmMin())); + + et_battery_level_alarm.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -217,16 +298,21 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - SettingUtil.setAddExtraDeviceMark(et_add_extra_device_mark.getText().toString().trim()); + String batteryLevel = et_battery_level_alarm.getText().toString().trim(); + if (!batteryLevel.isEmpty()) { + SettingUtil.setBatteryLevelAlarmMin(Integer.parseInt(batteryLevel)); + } else { + SettingUtil.setBatteryLevelAlarmMin(0); + } } }); } - //设置SIM1备注 - private void editAddExtraSim1(final EditText et_add_extra_sim1) { - et_add_extra_sim1.setText(SettingUtil.getAddExtraSim1()); + //设置低电量报警值上限 + private void editBatteryLevelAlarmMax(final EditText et_battery_level_alarm) { + et_battery_level_alarm.setText(String.valueOf(SettingUtil.getBatteryLevelAlarmMax())); - et_add_extra_sim1.addTextChangedListener(new TextWatcher() { + et_battery_level_alarm.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -237,16 +323,276 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - SettingUtil.setAddExtraSim1(et_add_extra_sim1.getText().toString().trim()); + String batteryLevel = et_battery_level_alarm.getText().toString().trim(); + if (!batteryLevel.isEmpty()) { + SettingUtil.setBatteryLevelAlarmMax(Integer.parseInt(batteryLevel)); + } else { + SettingUtil.setBatteryLevelAlarmMax(0); + } } }); } - //设置SIM2备注 - private void editAddExtraSim2(final EditText et_add_extra_sim2) { - et_add_extra_sim2.setText(SettingUtil.getAddExtraSim2()); + //开机启动 + private void checkWithReboot(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch withrebootSwitch) { + //获取组件 + final ComponentName cm = new ComponentName(this.getPackageName(), RebootBroadcastReceiver.class.getName()); + + final PackageManager pm = getPackageManager(); + int state = pm.getComponentEnabledSetting(cm); + withrebootSwitch.setChecked(state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED + && state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER); + withrebootSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + int newState = isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + pm.setComponentEnabledSetting(cm, newState, PackageManager.DONT_KILL_APP); + Log.d(TAG, "onCheckedChanged:" + isChecked); - et_add_extra_sim2.addTextChangedListener(new TextWatcher() { + if (isChecked) startToAutoStartSetting(this); + }); + } + + //Intent跳转到[自启动]页面全网最全适配机型解决方案 + private static final HashMap> hashMap = new HashMap<>() { + { + put("Xiaomi", Arrays.asList( + "com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity",//MIUI10_9.8.1(9.0) + "com.miui.securitycenter" + )); + + put("samsung", Arrays.asList( + "com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity", + "com.samsung.android.sm_cn/com.samsung.android.sm.ui.appmanagement.AppManagementActivity", + "com.samsung.android.sm_cn/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity", + "com.samsung.android.sm_cn/.ui.ram.RamActivity", + "com.samsung.android.sm_cn/.app.dashboard.SmartManagerDashBoardActivity", + + "com.samsung.android.sm/com.samsung.android.sm.ui.ram.AutoRunActivity", + "com.samsung.android.sm/com.samsung.android.sm.ui.appmanagement.AppManagementActivity", + "com.samsung.android.sm/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity", + "com.samsung.android.sm/.ui.ram.RamActivity", + "com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity", + + "com.samsung.android.lool/com.samsung.android.sm.ui.battery.BatteryActivity", + "com.samsung.android.sm_cn", + "com.samsung.android.sm" + )); + + put("HUAWEI", Arrays.asList( + "com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",//EMUI9.1.0(方舟,9.0) + "com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity", + "com.huawei.systemmanager/.optimize.process.ProtectActivity", + "com.huawei.systemmanager/.optimize.bootstart.BootStartActivity", + "com.huawei.systemmanager"//最后一行可以写包名, 这样如果签名的类路径在某些新版本的ROM中没找到 就直接跳转到对应的安全中心/手机管家 首页. + )); + + put("vivo", Arrays.asList( + "com.iqoo.secure/.ui.phoneoptimize.BgStartUpManager", + "com.iqoo.secure/.safeguard.PurviewTabActivity", + "com.vivo.permissionmanager/.activity.BgStartUpManagerActivity", + //"com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity", //这是白名单, 不是自启动 + "com.iqoo.secure", + "com.vivo.permissionmanager" + )); + + put("Meizu", Arrays.asList( + "com.meizu.safe/.permission.SmartBGActivity",//Flyme7.3.0(7.1.2) + "com.meizu.safe/.permission.PermissionMainActivity",//网上的 + "com.meizu.safe" + )); + + put("OPPO", Arrays.asList( + "com.coloros.safecenter/.startupapp.StartupAppListActivity", + "com.coloros.safecenter/.permission.startup.StartupAppListActivity", + "com.oppo.safe/.permission.startup.StartupAppListActivity", + "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity", + "com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity", + "com.coloros.safecenter", + "com.oppo.safe", + "com.coloros.oppoguardelf" + )); + + put("oneplus", Arrays.asList( + "com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity", + "com.oneplus.security" + )); + + put("letv", Arrays.asList( + "com.letv.android.letvsafe/.AutobootManageActivity", + "com.letv.android.letvsafe/.BackgroundAppManageActivity",//应用保护 + "com.letv.android.letvsafe" + )); + + put("zte", Arrays.asList( + "com.zte.heartyservice/.autorun.AppAutoRunManager", + "com.zte.heartyservice" + )); + + //金立 + put("F", Arrays.asList( + "com.gionee.softmanager/.MainActivity", + "com.gionee.softmanager" + )); + + //以下为未确定(厂商名也不确定) + put("smartisanos", Arrays.asList( + "com.smartisanos.security/.invokeHistory.InvokeHistoryActivity", + "com.smartisanos.security" + )); + + //360 + put("360", Arrays.asList( + "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity", + "com.yulong.android.coolsafe" + )); + + //360 + put("ulong", Arrays.asList( + "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity", + "com.yulong.android.coolsafe" + )); + + //酷派 + put("coolpad"/*厂商名称不确定是否正确*/, Arrays.asList( + "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain", + "com.yulong.android.security" + )); + + //联想 + put("lenovo"/*厂商名称不确定是否正确*/, Arrays.asList( + "com.lenovo.security/.purebackground.PureBackgroundActivity", + "com.lenovo.security" + )); + + put("htc"/*厂商名称不确定是否正确*/, Arrays.asList( + "com.htc.pitroad/.landingpage.activity.LandingPageActivity", + "com.htc.pitroad" + )); + + //华硕 + put("asus"/*厂商名称不确定是否正确*/, Arrays.asList( + "com.asus.mobilemanager/.MainActivity", + "com.asus.mobilemanager" + )); + + } + }; + + //跳转自启动页面 + public static void startToAutoStartSetting(Context context) { + Log.e("Util", "******************当前手机型号为:" + Build.MANUFACTURER); + + Set>> entries = hashMap.entrySet(); + boolean has = false; + for (Map.Entry> entry : entries) { + String manufacturer = entry.getKey(); + List actCompatList = entry.getValue(); + if (Build.MANUFACTURER.equalsIgnoreCase(manufacturer)) { + for (String act : actCompatList) { + try { + Intent intent; + if (act.contains("/")) { + intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + ComponentName componentName = ComponentName.unflattenFromString(act); + intent.setComponent(componentName); + } else { + //找不到? 网上的做法都是跳转到设置... 这基本上是没意义的 基本上自启动这个功能是第三方厂商自己写的安全管家类app + //所以我是直接跳转到对应的安全管家/安全中心 + intent = context.getPackageManager().getLaunchIntentForPackage(act); + } + context.startActivity(intent); + has = true; + break; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + if (!has) { + Toast.makeText(context, "兼容方案", Toast.LENGTH_SHORT).show(); + try { + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.setData(Uri.fromParts("package", context.getPackageName(), null)); + context.startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + Intent intent = new Intent(Settings.ACTION_SETTINGS); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + } + } + + //电池优化设置 + @RequiresApi(api = Build.VERSION_CODES.M) + @SuppressLint("UseSwitchCompatOrMaterialCode") + public void batterySetting(Switch switch_battery_setting) { + isIgnoreBatteryOptimization = KeepAliveUtils.isIgnoreBatteryOptimization(this); + switch_battery_setting.setChecked(isIgnoreBatteryOptimization); + + switch_battery_setting.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (isChecked && !isIgnoreBatteryOptimization) { + KeepAliveUtils.ignoreBatteryOptimization(this); + } else if (isChecked) { + Toast.makeText(this, R.string.isIgnored, Toast.LENGTH_SHORT).show(); + switch_battery_setting.setChecked(isIgnoreBatteryOptimization); + } else { + Toast.makeText(this, R.string.isIgnored2, Toast.LENGTH_SHORT).show(); + switch_battery_setting.setChecked(isIgnoreBatteryOptimization); + } + }); + } + + //不在最近任务列表中显示 + @SuppressLint("ObsoleteSdkInt,UseSwitchCompatOrMaterialCode") + private void switchExcludeFromRecents(Switch switch_exclude_from_recents) { + switch_exclude_from_recents.setChecked(SettingUtil.getExcludeFromRecents()); + + switch_exclude_from_recents.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchExcludeFromRecents(isChecked); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); + if (am != null) { + List appTasks = am.getAppTasks(); + if (appTasks != null && !appTasks.isEmpty()) { + appTasks.get(0).setExcludeFromRecents(isChecked); + } + } + } + Log.d(TAG, "onCheckedChanged:" + isChecked); + }); + } + + //是否开启失败重试 + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchRetryDelay(Switch switch_retry_delay) { + switch_retry_delay.setChecked(SettingUtil.getSwitchRetryDelay()); + + switch_retry_delay.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (isChecked + && SettingUtil.getRetryDelayTime(1) == 0 + && SettingUtil.getRetryDelayTime(2) == 0 + && SettingUtil.getRetryDelayTime(3) == 0 + && SettingUtil.getRetryDelayTime(4) == 0 + && SettingUtil.getRetryDelayTime(5) == 0) { + Toast.makeText(context, "所有间隔时间都为0,无法启用", Toast.LENGTH_SHORT).show(); + SettingUtil.switchRetryDelay(false); + return; + } + SettingUtil.switchRetryDelay(isChecked); + Log.d(TAG, "switchRetryDelay:" + isChecked); + }); + } + + //接口请求失败重试时间间隔 + private void editRetryDelayTime(final EditText et_retry_delay_time, final int index) { + et_retry_delay_time.setText(String.valueOf(SettingUtil.getRetryDelayTime(index))); + + et_retry_delay_time.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -257,16 +603,30 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - SettingUtil.setAddExtraSim2(et_add_extra_sim2.getText().toString().trim()); + String delayTime = et_retry_delay_time.getText().toString().trim(); + if (!delayTime.isEmpty()) { + SettingUtil.setRetryDelayTime(index, Integer.parseInt(delayTime)); + } else { + SettingUtil.setRetryDelayTime(index, 0); + } + + if (SettingUtil.getRetryDelayTime(1) == 0 + && SettingUtil.getRetryDelayTime(2) == 0 + && SettingUtil.getRetryDelayTime(3) == 0 + && SettingUtil.getRetryDelayTime(4) == 0 + && SettingUtil.getRetryDelayTime(5) == 0) { + Toast.makeText(context, "所有间隔时间都为0,自动禁用失败重试", Toast.LENGTH_SHORT).show(); + SettingUtil.switchRetryDelay(false); + } } }); } - //设置低电量报警值下限 - private void editBatteryLevelAlarmMin(final EditText et_battery_level_alarm) { - et_battery_level_alarm.setText(String.valueOf(SettingUtil.getBatteryLevelAlarmMin())); + //设置设备名称 + private void editAddExtraDeviceMark(final EditText et_add_extra_device_mark) { + et_add_extra_device_mark.setText(SettingUtil.getAddExtraDeviceMark()); - et_battery_level_alarm.addTextChangedListener(new TextWatcher() { + et_add_extra_device_mark.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -277,21 +637,16 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - String batteryLevel = et_battery_level_alarm.getText().toString().trim(); - if (!batteryLevel.isEmpty()) { - SettingUtil.setBatteryLevelAlarmMin(Integer.parseInt(batteryLevel)); - } else { - SettingUtil.setBatteryLevelAlarmMin(0); - } + SettingUtil.setAddExtraDeviceMark(et_add_extra_device_mark.getText().toString().trim()); } }); } - //设置低电量报警值上限 - private void editBatteryLevelAlarmMax(final EditText et_battery_level_alarm) { - et_battery_level_alarm.setText(String.valueOf(SettingUtil.getBatteryLevelAlarmMax())); + //设置SIM1备注 + private void editAddExtraSim1(final EditText et_add_extra_sim1) { + et_add_extra_sim1.setText(SettingUtil.getAddExtraSim1()); - et_battery_level_alarm.addTextChangedListener(new TextWatcher() { + et_add_extra_sim1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -302,21 +657,16 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - String batteryLevel = et_battery_level_alarm.getText().toString().trim(); - if (!batteryLevel.isEmpty()) { - SettingUtil.setBatteryLevelAlarmMax(Integer.parseInt(batteryLevel)); - } else { - SettingUtil.setBatteryLevelAlarmMax(0); - } + SettingUtil.setAddExtraSim1(et_add_extra_sim1.getText().toString().trim()); } }); } - //接口请求失败重试 - private void editRetryDelayTime(final EditText et_retry_delay_time, final int index) { - et_retry_delay_time.setText(String.valueOf(SettingUtil.getRetryDelayTime(index))); + //设置SIM2备注 + private void editAddExtraSim2(final EditText et_add_extra_sim2) { + et_add_extra_sim2.setText(SettingUtil.getAddExtraSim2()); - et_retry_delay_time.addTextChangedListener(new TextWatcher() { + et_add_extra_sim2.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -327,18 +677,14 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - String delayTime = et_retry_delay_time.getText().toString().trim(); - if (!delayTime.isEmpty()) { - SettingUtil.setRetryDelayTime(index, Integer.parseInt(delayTime)); - } else { - SettingUtil.setRetryDelayTime(index, 0); - } + SettingUtil.setAddExtraSim2(et_add_extra_sim2.getText().toString().trim()); } }); } //设置转发时启用自定义模版 - private void switchSmsTemplate(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_sms_template) { + @SuppressLint("UseSwitchCompatOrMaterialCode") + private void switchSmsTemplate(Switch switch_sms_template) { boolean isOn = SettingUtil.getSwitchSmsTemplate(); switch_sms_template.setChecked(isOn); @@ -386,28 +732,38 @@ public class SettingActivity extends AppCompatActivity { textSmsTemplate.requestFocus(); switch (v.getId()) { case R.id.bt_insert_sender: - insertOrReplaceText2Cursor(textSmsTemplate, "{{来源号码}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{来源号码}}"); return; case R.id.bt_insert_content: - insertOrReplaceText2Cursor(textSmsTemplate, "{{短信内容}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{短信内容}}"); return; case R.id.bt_insert_extra: - insertOrReplaceText2Cursor(textSmsTemplate, "{{卡槽信息}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{卡槽信息}}"); return; case R.id.bt_insert_time: - insertOrReplaceText2Cursor(textSmsTemplate, "{{接收时间}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{接收时间}}"); return; case R.id.bt_insert_device_name: - insertOrReplaceText2Cursor(textSmsTemplate, "{{设备名称}}"); + CommonUtil.insertOrReplaceText2Cursor(textSmsTemplate, "{{设备名称}}"); return; default: } } - private void insertOrReplaceText2Cursor(EditText editText, String str) { - int start = Math.max(editText.getSelectionStart(), 0); - int end = Math.max(editText.getSelectionEnd(), 0); - editText.getText().replace(Math.min(start, end), Math.max(start, end), str, 0, str.length()); + //页面帮助提示 + private void SwitchHelpTip(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchHelpTip) { + switchHelpTip.setChecked(MyApplication.showHelpTip); + + switchHelpTip.setOnCheckedChangeListener((buttonView, isChecked) -> { + MyApplication.showHelpTip = isChecked; + SharedPreferences sp = context.getSharedPreferences(Define.SP_CONFIG, Context.MODE_PRIVATE); + sp.edit().putBoolean(Define.SP_CONFIG_SWITCH_HELP_TIP, isChecked).apply(); + Log.d(TAG, "onCheckedChanged:" + isChecked); + + TextView help_tip = findViewById(R.id.help_tip); + ScrollView scrollView = findViewById(R.id.scrollView); + CommonUtil.calcMarginBottom(this, help_tip, null, null, scrollView); + }); } //恢复初始化配置 @@ -443,46 +799,4 @@ public class SettingActivity extends AppCompatActivity { builder.create().show(); } - //电池优化设置 - @RequiresApi(api = Build.VERSION_CODES.M) - public void batterySetting(View view) { - if (KeepAliveUtils.isIgnoreBatteryOptimization(this)) { - Toast.makeText(this, R.string.isIgnored, Toast.LENGTH_SHORT).show(); - } else { - KeepAliveUtils.ignoreBatteryOptimization(this); - } - } - - /** - * 请求通知使用权限 - * - * @param view 控件 - */ - public void requestNotificationPermission(View view) { - if (!CommonUtil.isNotificationListenerServiceEnabled(this)) { - CommonUtil.openNotificationAccess(this); - } else { - Toast.makeText(this, R.string.notification_listener_service_enabled, Toast.LENGTH_SHORT).show(); - CommonUtil.toggleNotificationListenerService(this); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == CommonUtil.NOTIFICATION_REQUEST_CODE) { - if (CommonUtil.isNotificationListenerServiceEnabled(this)) { - Toast.makeText(this, R.string.notification_listener_service_enabled, Toast.LENGTH_SHORT).show(); - CommonUtil.toggleNotificationListenerService(this); - SettingUtil.switchEnableAppNotify(true); - } else { - Toast.makeText(this, R.string.notification_listener_service_disabled, Toast.LENGTH_SHORT).show(); - SettingUtil.switchEnableAppNotify(false); - } - - @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_enable_app_notify = findViewById(R.id.switch_enable_app_notify); - switch_enable_app_notify.setChecked(SettingUtil.getSwitchEnableAppNotify()); - } - } - } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXAppSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXAppSettingVo.java index d5dbea2c..db12f3cc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXAppSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXAppSettingVo.java @@ -37,9 +37,7 @@ public class QYWXAppSettingVo implements Serializable { public boolean checkParms() { if (TextUtils.isEmpty(corpID)) return false; if (TextUtils.isEmpty(agentID)) return false; - if (TextUtils.isEmpty(secret)) return false; - - return true; + return !TextUtils.isEmpty(secret); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java index e9f14f3b..c57e6bc5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java @@ -13,7 +13,12 @@ import com.idormy.sms.forwarder.model.PhoneBookEntity; import com.idormy.sms.forwarder.model.vo.SmsHubVo; import com.idormy.sms.forwarder.model.vo.SmsVo; import com.idormy.sms.forwarder.sender.SendUtil; -import com.idormy.sms.forwarder.utils.*; +import com.idormy.sms.forwarder.utils.CommonUtil; +import com.idormy.sms.forwarder.utils.ContactHelper; +import com.idormy.sms.forwarder.utils.PhoneUtils; +import com.idormy.sms.forwarder.utils.SettingUtil; +import com.idormy.sms.forwarder.utils.SimUtil; +import com.idormy.sms.forwarder.utils.SmsHubActionHandler; import java.text.SimpleDateFormat; import java.util.Date; @@ -72,8 +77,10 @@ public class PhoneStateReceiver extends BroadcastReceiver { CallInfo callInfo = PhoneUtils.getLastCallInfo(phoneNumber); if (callInfo == null) return; - if (callInfo.getType() != 3) { - Log.d(TAG, "非未接来电不处理!"); + if ((callInfo.getType() == 1 && !SettingUtil.getSwitchCallType1()) + || (callInfo.getType() == 2 && !SettingUtil.getSwitchCallType2()) + || (callInfo.getType() == 3 && !SettingUtil.getSwitchCallType3())) { + Log.d(TAG, "未启用该类型的通话记录转发,不做处理!"); return; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.java index cee0d37c..6252c7b1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.java @@ -18,9 +18,6 @@ public class SimStateReceiver extends BroadcastReceiver { /** * 更换SIM卡,如果不杀后台并重启,则发送出的「卡槽信息」仍然是刚启动应用时读取的SIM卡 * 增加这个Receiver,接收SIM卡插拔状态广播,自动更新缓存 - * - * @param context - * @param intent */ @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java index e9790a62..f2d0b576 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java @@ -50,8 +50,10 @@ public class HttpServer { } public synchronized static boolean update() { - if (!asRunning() && NetUtil.NETWORK_WIFI != NetUtil.getNetWorkStatus()) { + //非WiFi网络下不可启用 + if (NetUtil.NETWORK_WIFI != NetUtil.getNetWorkStatus()) { Toast.makeText(context, R.string.no_wifi_network, Toast.LENGTH_SHORT).show(); + if (asRunning()) stop(); return false; } long l = System.currentTimeMillis(); @@ -67,12 +69,11 @@ public class HttpServer { start(); ts = System.currentTimeMillis(); Toast.makeText(context, R.string.server_has_started, Toast.LENGTH_SHORT).show(); - return true; } else { stop(); Toast.makeText(context, R.string.server_has_stopped, Toast.LENGTH_SHORT).show(); - return true; } + return true; } /** diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java index 9fafbde9..1b612985 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java @@ -43,6 +43,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Locale; public class SendUtil { private static final String TAG = "SendUtil"; @@ -93,7 +94,7 @@ public class SendUtil { */ public static void resendMsgByLog(Context context, Handler handler, LogVo logVo) { Log.d(TAG, logVo.toString()); - @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); Date date = new Date(); try { date = sdf.parse(logVo.getTime()); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java index 80b220fd..08e341e6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java @@ -15,6 +15,7 @@ import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -32,7 +33,6 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings("ALL") public class SenderFeishuMsg extends SenderBaseMsg { static final String TAG = "SenderFeishuMsg"; @@ -90,6 +90,7 @@ public class SenderFeishuMsg extends SenderBaseMsg { " }\n" + "}"; + @SuppressWarnings("rawtypes") public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String from, Date date, String content) throws Exception { Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " content:" + content); @@ -130,7 +131,7 @@ public class SenderFeishuMsg extends SenderBaseMsg { Toast(handError, TAG, "开始请求接口..."); OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + @SuppressWarnings("deprecation") RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); final Request request = new Request.Builder() .url(requestUrl) @@ -178,7 +179,7 @@ public class SenderFeishuMsg extends SenderBaseMsg { private static String buildMsg(String from, Date date, String content) { String msgTitle = jsonInnerStr("【" + SettingUtil.getAddExtraDeviceMark().trim() + "】来自" + from + "的通知"); - String msgTime = jsonInnerStr(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); + String msgTime = jsonInnerStr(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(date)); String msgFrom = jsonInnerStr(from); String msgContent = jsonInnerStr(content); return MSG_TEMPLATE.replace("${MSG_TITLE}", msgTitle) diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java index 6ba251e8..89d723f6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java @@ -23,7 +23,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"ResultOfMethodCallIgnored", "rawtypes", "unchecked", "deprecation"}) +@SuppressWarnings({"ResultOfMethodCallIgnored"}) public class SenderGotifyMsg extends SenderBaseMsg { static final String TAG = "SenderGotifyMsg"; @@ -68,7 +68,7 @@ public class SenderGotifyMsg extends SenderBaseMsg { Toast(handError, TAG, "发送状态:" + responseStr); //TODO:粗略解析是否发送成功 - if ("200".equals(response.code())) { + if (response.code() == 200) { LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java index 99207d43..851a36cf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/AnimationUtils.java @@ -113,7 +113,7 @@ public class AnimationUtils { } viewGroup.setVisibility(View.GONE); } - Animation translateAnimation = null; + Animation translateAnimation; translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, start, Animation.RELATIVE_TO_SELF, end); @@ -150,7 +150,7 @@ public class AnimationUtils { end = -1.0f; viewGroup.setVisibility(View.GONE); } - Animation translateAnimation = null; + Animation translateAnimation; translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, start, Animation.RELATIVE_TO_SELF, end, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); @@ -177,13 +177,7 @@ public class AnimationUtils { translateAnimation.start(); } - /** - * 礼物通知滚动 - * - * @param viewGroup - * @param state - * @param duration - */ + //通知滚动 public static void liveLotteryAnimation(final TextView viewGroup, AnimationState state, long duration) { float start = 0.0f; @@ -196,7 +190,7 @@ public class AnimationUtils { end = -1.0f; viewGroup.setVisibility(View.GONE); } - Animation translateAnimation = null; + Animation translateAnimation; translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, start, Animation.RELATIVE_TO_PARENT, end, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java index c1ca7b52..a65a41a5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtil.java @@ -9,11 +9,18 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.text.TextUtils; +import android.view.View; import android.widget.EditText; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationManagerCompat; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.idormy.sms.forwarder.MyApplication; import com.idormy.sms.forwarder.service.NotifyService; import java.security.MessageDigest; @@ -136,10 +143,7 @@ public class CommonUtil { return null; } - /** - * @date 2020/12/28 9:52 - * @description 屏幕像素转换 - */ + //屏幕像素转换 public static int dp2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); @@ -152,8 +156,7 @@ public class CommonUtil { String regex = "(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\&%\\+\\$#_=]*)?"; Pattern pat = Pattern.compile(regex); Matcher mat = pat.matcher(urls.trim()); - boolean result = mat.matches(); - return result; + return mat.matches(); } //焦点位置插入文本 @@ -162,4 +165,31 @@ public class CommonUtil { int end = Math.max(editText.getSelectionEnd(), 0); editText.getText().replace(Math.min(start, end), Math.max(start, end), str, 0, str.length()); } + + //计算浮动按钮位置 + public static void calcMarginBottom(Context context, TextView help_tip, FloatingActionButton btnFloat, ListView viewList, ScrollView scrollView) { + + if (help_tip != null) { + help_tip.setVisibility(MyApplication.showHelpTip ? View.VISIBLE : View.GONE); + } + + int marginBottom = MyApplication.showHelpTip ? 85 : 65; + if (btnFloat != null) { + RelativeLayout.LayoutParams btnLayoutParams = (RelativeLayout.LayoutParams) btnFloat.getLayoutParams(); + btnLayoutParams.bottomMargin = dp2px(context, marginBottom + 10); + btnFloat.setLayoutParams(btnLayoutParams); + } + + if (viewList != null) { + RelativeLayout.LayoutParams listLayoutParams = (RelativeLayout.LayoutParams) viewList.getLayoutParams(); + listLayoutParams.bottomMargin = dp2px(context, marginBottom); + viewList.setLayoutParams(listLayoutParams); + } + + if (scrollView != null) { + RelativeLayout.LayoutParams listLayoutParams = (RelativeLayout.LayoutParams) scrollView.getLayoutParams(); + listLayoutParams.bottomMargin = dp2px(context, marginBottom); + scrollView.setLayoutParams(listLayoutParams); + } + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java index 339385e3..c114301a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java @@ -21,6 +21,7 @@ public class Define { public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_CURRENT = "tsms_msg_key_string_battery_level_current"; public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM = "tsms_msg_key_string_battery_level_alarm"; public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_MAX = "tsms_msg_key_string_battery_level_max"; + public static final String SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY = "tsms_msg_key_switch_retry_delay"; public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME1 = "tsms_msg_key_string_retry_delay_time1"; public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME2 = "tsms_msg_key_string_retry_delay_time2"; public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME3 = "tsms_msg_key_string_retry_delay_time3"; @@ -29,6 +30,9 @@ public class Define { public static final String SP_MSG_KEY_STRING_ENABLE_SMSHUB_API = "tsms_msg_key_string_enable_smshub_api"; public static final String SP_MSG_KEY_STRING_SMSHUB_API_URL = "tsms_msg_key_string_smshub_api_url"; public static final String SP_MSG_KEY_STRING_ENABLE_HTTP_SERVER = "tsms_msg_key_string_enable_http_server"; + public static final String SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_1 = "tsms_msg_key_string_enable_call_type_1"; + public static final String SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_2 = "tsms_msg_key_string_enable_call_type_2"; + public static final String SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_3 = "tsms_msg_key_string_enable_call_type_3"; public static final String SP_MSG = "forwarder_msg"; public static final String SP_MSG_SET_KEY = "forwarder_msg_set_key"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 5458198a..1de9c049 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -21,16 +21,13 @@ public class SettingUtil { if (hasInit) return; hasInit = true; context = context1; - Log.d(TAG, "init "); + Log.d(TAG, "SettingUtil init "); sp_setting = PreferenceManager.getDefaultSharedPreferences(context1); } } public static void switchAddExtra(Boolean switchAddExtra) { - Log.d(TAG, "switchAddExtra :" + switchAddExtra); - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_SWITCH_ADD_EXTRA, switchAddExtra) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_SWITCH_ADD_EXTRA, switchAddExtra).apply(); } public static boolean getSwitchAddExtra() { @@ -38,10 +35,7 @@ public class SettingUtil { } public static void switchAddDeviceName(Boolean switchAddDeviceName) { - Log.d(TAG, "switchAddDeviceName :" + switchAddDeviceName); - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_NAME, switchAddDeviceName) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_NAME, switchAddDeviceName).apply(); } public static boolean getSwitchAddDeviceName() { @@ -49,9 +43,7 @@ public class SettingUtil { } public static void switchEnableSms(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_SMS, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_SMS, enable).apply(); } public static boolean getSwitchEnableSms() { @@ -59,9 +51,7 @@ public class SettingUtil { } public static void switchEnablePhone(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PHONE, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PHONE, enable).apply(); } public static boolean getSwitchEnablePhone() { @@ -69,9 +59,7 @@ public class SettingUtil { } public static void switchEnableAppNotify(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_APP_NOTIFY, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_APP_NOTIFY, enable).apply(); } public static boolean getSwitchEnableAppNotify() { @@ -79,9 +67,7 @@ public class SettingUtil { } public static void switchCancelAppNotify(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_CANCEL_APP_NOTIFY, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_CANCEL_APP_NOTIFY, enable).apply(); } public static boolean getSwitchCancelAppNotify() { @@ -89,9 +75,7 @@ public class SettingUtil { } public static void switchEnableBatteryReceiver(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_BATTERY_RECEIVER, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_BATTERY_RECEIVER, enable).apply(); } public static boolean getSwitchEnableBatteryReceiver() { @@ -99,9 +83,7 @@ public class SettingUtil { } public static void switchExcludeFromRecents(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_EXCLUDE_FROM_RECENTS, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_EXCLUDE_FROM_RECENTS, enable).apply(); } public static boolean getExcludeFromRecents() { @@ -109,10 +91,7 @@ public class SettingUtil { } public static void switchSmsTemplate(Boolean switchSmsTemplate) { - Log.d(TAG, "switchSmsTemplate :" + switchSmsTemplate); - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_SWITCH_SMS_TEMPLATE, switchSmsTemplate) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_SWITCH_SMS_TEMPLATE, switchSmsTemplate).apply(); } public static boolean getSwitchSmsTemplate() { @@ -128,10 +107,7 @@ public class SettingUtil { } public static void setAddExtraDeviceMark(String addExtraDeviceMark) { - Log.d(TAG, "addExtraDeviceMark :" + addExtraDeviceMark); - sp_setting.edit() - .putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_MARK, addExtraDeviceMark) - .apply(); + sp_setting.edit().putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_MARK, addExtraDeviceMark).apply(); } public static String getSmsTemplate() { @@ -139,10 +115,7 @@ public class SettingUtil { } public static void setSmsTemplate(String textSmsTemplate) { - Log.d(TAG, "textSmsTemplate :" + textSmsTemplate); - sp_setting.edit() - .putString(Define.SP_MSG_KEY_STRING_SMS_TEMPLATE, textSmsTemplate) - .apply(); + sp_setting.edit().putString(Define.SP_MSG_KEY_STRING_SMS_TEMPLATE, textSmsTemplate).apply(); } public static String getAddExtraSim1() { @@ -154,10 +127,7 @@ public class SettingUtil { } public static void setAddExtraSim1(String sim1) { - Log.d(TAG, "sim1 :" + sim1); - sp_setting.edit() - .putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_SIM1, sim1) - .apply(); + sp_setting.edit().putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_SIM1, sim1).apply(); } public static String getAddExtraSim2() { @@ -169,10 +139,7 @@ public class SettingUtil { } public static void setAddExtraSim2(String sim2) { - Log.d(TAG, "sim2 :" + sim2); - sp_setting.edit() - .putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_SIM2, sim2) - .apply(); + sp_setting.edit().putString(Define.SP_MSG_KEY_STRING_ADD_EXTRA_SIM2, sim2).apply(); } public static int getBatteryLevelAlarmMin() { @@ -180,10 +147,7 @@ public class SettingUtil { } public static void setBatteryLevelAlarmMin(int battery_level) { - Log.d(TAG, "battery_level :" + battery_level); - sp_setting.edit() - .putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, battery_level) - .apply(); + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, battery_level).apply(); } public static int getBatteryLevelAlarmMax() { @@ -191,10 +155,7 @@ public class SettingUtil { } public static void setBatteryLevelAlarmMax(int battery_level) { - Log.d(TAG, "battery_level :" + battery_level); - sp_setting.edit() - .putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_MAX, battery_level) - .apply(); + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_MAX, battery_level).apply(); } public static int getBatteryLevelCurrent() { @@ -202,10 +163,7 @@ public class SettingUtil { } public static void setBatteryLevelCurrent(int battery_level) { - Log.d(TAG, "battery_level :" + battery_level); - sp_setting.edit() - .putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_CURRENT, battery_level) - .apply(); + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_CURRENT, battery_level).apply(); } public static int getBatteryStatus() { @@ -213,10 +171,7 @@ public class SettingUtil { } public static void setBatteryStatus(int battery_status) { - Log.d(TAG, "battery_status :" + battery_status); - sp_setting.edit() - .putInt(Define.SP_MSG_KEY_STRING_BATTERY_STATUS, battery_status) - .apply(); + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_BATTERY_STATUS, battery_status).apply(); } public static boolean saveMsgHistory() { @@ -260,9 +215,7 @@ public class SettingUtil { } public static void switchEnableSmsHubApi(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_SMSHUB_API, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_SMSHUB_API, enable).apply(); } public static boolean getSwitchEnableSmsHubApi() { @@ -270,9 +223,7 @@ public class SettingUtil { } public static void switchEnableHttpServer(Boolean enable) { - sp_setting.edit() - .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_HTTP_SERVER, enable) - .apply(); + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_HTTP_SERVER, enable).apply(); } public static boolean getSwitchEnableHttpServer() { @@ -280,15 +231,45 @@ public class SettingUtil { } public static void smsHubApiUrl(String url) { - sp_setting.edit() - .putString(Define.SP_MSG_KEY_STRING_SMSHUB_API_URL, url) - .apply(); + sp_setting.edit().putString(Define.SP_MSG_KEY_STRING_SMSHUB_API_URL, url).apply(); } public static String getSmsHubApiUrl() { return sp_setting.getString(Define.SP_MSG_KEY_STRING_SMSHUB_API_URL, "http://xxx.com/send_api"); } + public static void switchRetryDelay(Boolean switchSmsTemplate) { + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY, switchSmsTemplate).apply(); + } + + public static boolean getSwitchRetryDelay() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY, false); + } + + public static void switchCallType1(Boolean switchCallType) { + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_1, switchCallType).apply(); + } + + public static boolean getSwitchCallType1() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_1, false); + } + + public static void switchCallType2(Boolean switchCallType) { + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_2, switchCallType).apply(); + } + + public static boolean getSwitchCallType2() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_2, false); + } + + public static void switchCallType3(Boolean switchCallType) { + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_3, switchCallType).apply(); + } + + public static boolean getSwitchCallType3() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_3, true); + } + //获取当前版本名称 public static String getVersionName() { // 获取PackageManager的实例 diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/TimeUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/TimeUtil.java index 8e31e427..373b803c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/TimeUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/TimeUtil.java @@ -5,13 +5,14 @@ import android.annotation.SuppressLint; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import java.util.TimeZone; public class TimeUtil { //友好时间显示 public static String friendlyTime(String utcTime) { - @SuppressLint("SimpleDateFormat") SimpleDateFormat utcFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @SuppressLint("SimpleDateFormat") SimpleDateFormat utcFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));//时区定义并进行时间获取 Date utcDate; try { diff --git a/app/src/main/java/com/idormy/sms/forwarder/view/StepBar.java b/app/src/main/java/com/idormy/sms/forwarder/view/StepBar.java new file mode 100644 index 00000000..98cac7ce --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/view/StepBar.java @@ -0,0 +1,85 @@ +package com.idormy.sms.forwarder.view; + +import android.content.Context; +import android.content.Intent; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.idormy.sms.forwarder.MainActivity; +import com.idormy.sms.forwarder.R; +import com.idormy.sms.forwarder.RuleActivity; +import com.idormy.sms.forwarder.SenderActivity; +import com.idormy.sms.forwarder.SettingActivity; + +public class StepBar extends LinearLayout { + //控件 + private final TextView txStep1; + private final TextView txStep2; + private final TextView txStep3; + private final TextView txStep4; + private final TextView tvStep1; + private final TextView tvStep2; + private final TextView tvStep3; + private final TextView tvStep4; + + public StepBar(final Context context, AttributeSet attrs) { + super(context, attrs); + //初始化界面 + View view = LayoutInflater.from(context).inflate(R.layout.step_bar, this); + //绑定 + txStep1 = findViewById(R.id.txStep1); + txStep2 = findViewById(R.id.txStep2); + txStep3 = findViewById(R.id.txStep3); + txStep4 = findViewById(R.id.txStep4); + tvStep1 = findViewById(R.id.tvStep1); + tvStep2 = findViewById(R.id.tvStep2); + tvStep3 = findViewById(R.id.tvStep3); + tvStep4 = findViewById(R.id.tvStep4); + //初始化函数 + init(context); + } + + private void init(final Context context) { + + tvStep1.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), SettingActivity.class); + v.getContext().startActivity(intent); + }); + txStep1.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), SettingActivity.class); + v.getContext().startActivity(intent); + }); + + tvStep2.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), SenderActivity.class); + v.getContext().startActivity(intent); + }); + txStep2.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), SenderActivity.class); + v.getContext().startActivity(intent); + }); + + tvStep3.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), RuleActivity.class); + v.getContext().startActivity(intent); + }); + txStep3.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), RuleActivity.class); + v.getContext().startActivity(intent); + }); + + tvStep4.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), MainActivity.class); + v.getContext().startActivity(intent); + }); + txStep4.setOnClickListener(v -> { + Intent intent = new Intent(v.getContext(), MainActivity.class); + v.getContext().startActivity(intent); + }); + + } + +} diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml deleted file mode 100644 index 41a82ede..00000000 --- a/app/src/main/res/drawable/ic_settings.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml b/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml index d6763b81..3c569302 100644 --- a/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml +++ b/app/src/main/res/drawable/line_bg_white_only_bottom_d8.xml @@ -3,7 +3,7 @@ - + @@ -14,7 +14,7 @@ android:right="0dp" android:top="0dp"> - + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 9a8bed94..7b7e8a6a 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,6 +1,5 @@ @@ -46,59 +45,6 @@ - - - - - - - - - - - - - - - - + android:text="@string/user_app" /> @@ -46,8 +46,8 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="5dp" - android:layout_marginEnd="5dp" android:layout_marginTop="0dp" + android:layout_marginEnd="5dp" android:layout_weight="1" /> + android:text="@string/server_ip" + android:textStyle="bold" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3035b9d2..622e1726 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,6 @@ @@ -15,11 +14,11 @@ android:layout_marginBottom="90dp" android:background="@color/colorPrimary" android:contentDescription="@string/clean_log" - android:onClick="cleanLog" android:scaleType="centerCrop" android:src="@drawable/ic_delete" - app:elevation="8dp" - tools:ignore="UsingOnClickInXml" /> + app:borderWidth="0dp" + app:elevation="5dp" + app:fabSize="mini" /> + android:layout_marginBottom="85dp" /> + android:textColor="@color/colorPrimary" + android:textSize="12sp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="wrap_content" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_rule.xml b/app/src/main/res/layout/activity_rule.xml index 8a03d1ea..ea5334ec 100644 --- a/app/src/main/res/layout/activity_rule.xml +++ b/app/src/main/res/layout/activity_rule.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent"> - - - - + app:borderWidth="0dp" + app:elevation="5dp" + app:fabSize="mini" /> + android:layout_width="match_parent" + android:gravity="center" + android:orientation="horizontal"> + android:layout_marginBottom="85dp" /> - + android:orientation="vertical"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sender.xml b/app/src/main/res/layout/activity_sender.xml index 7549c386..406ec9e7 100644 --- a/app/src/main/res/layout/activity_sender.xml +++ b/app/src/main/res/layout/activity_sender.xml @@ -5,6 +5,7 @@ android:layout_height="match_parent"> - - + app:borderWidth="0dp" + app:elevation="5dp" + app:fabSize="mini" /> + android:layout_marginBottom="85dp" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index fb92f290..4b57a987 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -1,857 +1,1099 @@ - - + android:layout_height="match_parent" + android:layout_marginBottom="85dp" + android:background="@color/colorBackground"> - - - - - + android:layout_marginStart="5dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="5dp" + android:gravity="bottom" + android:orientation="horizontal"> + android:text="转发功能" + android:textStyle="bold" /> - - - - - - - - + + + android:layout_weight="4" + android:orientation="vertical"> - + + + + + + android:textSize="16sp" + tools:ignore="UseSwitchCompatOrMaterialXml" /> - + - + + + + + android:text="@string/forward_missed_calls" + android:textStyle="bold" /> - + android:text="@string/forward_missed_calls_tips" + android:textSize="9sp" + tools:ignore="SmallSp" /> - + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + - - + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> + + - + - + + + + + + + + + + + + + + + android:layout_marginStart="5dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="5dp" + android:gravity="bottom" + android:orientation="horizontal"> + android:text="主动请求" + android:textStyle="bold" /> - + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> + + - + - + + + + + + + + + + + + + + + + + + + + + android:layout_marginStart="5dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="5dp" + android:gravity="bottom" + android:orientation="horizontal"> + android:text="电池监控" + android:textStyle="bold" /> - + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> + + - + - + + + + + + + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> - + android:orientation="vertical"> + + + + + + android:layout_marginStart="20dp" + android:text="@string/below" + android:textStyle="bold" /> - - - - - - - - + android:text="@string/percent" + android:textStyle="bold" /> - + android:layout_marginStart="20dp" + android:text="@string/above" + android:textStyle="bold" /> - + - + - + + android:layout_marginStart="10dp" + android:text="建议开启每一项授权或设置,不要禁用通知栏,避免APP服务被杀" + android:textSize="10sp" + tools:ignore="SmallSp" /> - + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> + + + + + + + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp"> + + -