diff --git a/.gitignore b/.gitignore index 075cec65..03130465 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .git build local.properties +gradle.properties *.iml *.project */*.project @@ -11,4 +12,6 @@ local.properties .settings/* */.settings/* /app/pppscn.jks +/app/release/* +/app/build/* /psd diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..f074c9fa --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "keystore"] + path = keystore + url = https://github.com/pppscn/keystore.git diff --git a/app/build.gradle b/app/build.gradle index 86161eac..6f6a63da 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,10 +1,21 @@ apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -//apply plugin: 'kotlin-android-extensions' -apply from: 'version.gradle' + +def keyProps = new Properties() +def keyPropsFile = rootProject.file('keystore/keystore.properties') +if (keyPropsFile.exists()) { + keyProps.load(new FileInputStream(keyPropsFile)) +} + +// 读取version.properties +def versionProps = new Properties() +def versionPropsFile = rootProject.file('version.properties') +if (versionPropsFile.exists()) { + versionProps.load(new FileInputStream(versionPropsFile)) +} android { - compileSdkVersion 29 + buildToolsVersion '30.0.3' + compileSdkVersion 30 compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 @@ -12,74 +23,115 @@ android { defaultConfig { applicationId "com.idormy.sms.forwarder" minSdkVersion 23 - targetSdkVersion 29 - versionCode appVersionCode - versionName appVersionName + targetSdkVersion 30 + versionCode versionProps['versionCode'].toInteger() + versionName versionProps['versionName'] testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } lintOptions { checkReleaseBuilds false } signingConfigs { - //签名信息保存在 C:\Users\\.gradle\gradle.properties release { - storeFile file(RELEASE_STORE_FILE) - keyAlias RELEASE_KEY_ALIAS - storePassword RELEASE_KEY_PASSWORD - keyPassword RELEASE_STORE_PASSWORD + keyAlias keyProps['keyAlias'] + keyPassword keyProps['keyPassword'] + storeFile keyProps['storeFile'] ? file(keyProps['storeFile']) : null + storePassword keyProps['storePassword'] + } + debug { + keyAlias keyProps['keyAlias'] + keyPassword keyProps['keyPassword'] + storeFile keyProps['storeFile'] ? file(keyProps['storeFile']) : null + storePassword keyProps['storePassword'] } } buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } - debug { - signingConfig signingConfigs.release + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.debug } } //apk file name - android.applicationVariants.all { variant -> +/* android.applicationVariants.all { variant -> variant.outputs.all { //def date = new Date().format("yyyyMMdd" , TimeZone.getTimeZone("Asia/Shanghai")) def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08")) - if (variant.buildType.name.equals('debug')) { + if (variant.buildType.name == 'debug') { outputFileName = "SmsForwarder_debug_${date}_${versionName}.apk" } - if (variant.buildType.name.equals('release')) { + if (variant.buildType.name == 'release') { outputFileName = "SmsForwarder_release_${date}_${versionName}.apk" } } + }*/ +} + + +task upgradeVersion { + group 'help' + description '构建新版本' + doLast { + println("---自动升级版本号---\n") + String oldVersionCode = versionProps['versionCode'] + String oldVersionName = versionProps['versionName'] + if (oldVersionCode == null || oldVersionName == null || + oldVersionCode.isEmpty() || oldVersionName.isEmpty()) { + println("error:版本号不能为空") + return + } + versionProps['versionCode'] = String.valueOf(versionProps['versionCode'].toInteger() + 1) + String str = versionProps['versionName'].toString() + versionProps['versionName'] = str.substring(0, str.lastIndexOf('.') + 1) + + (str.substring(str.lastIndexOf('.') + 1).toInteger() + 1) + String tip = + "版本号从$oldVersionName($oldVersionCode)升级到${versionProps['versionName']}(${versionProps['versionCode']})" + println(tip) + + def writer = new FileWriter(versionPropsFile) + versionProps.store(writer, null) + writer.flush() + writer.close() + def tag = "v${versionProps['versionName']}" + cmdExecute("git pull") + cmdExecute("git add version.properties") + cmdExecute("git commit -m \"版本号升级为:$tag\"") + cmdExecute("git push origin") + cmdExecute("git tag $tag") + cmdExecute("git push origin $tag") } } +void cmdExecute(String cmd) { + println "\n执行$cmd" + println cmd.execute().text +} + + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - //testImplementation 'junit:junit:4.12' - //androidTestImplementation 'androidx.test.ext:junit:1.1.1' - //androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.0' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' //okhttp - implementation 'com.squareup.okhttp3:okhttp:4.9.0' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.okio:okio:2.10.0' //fastjson - implementation "com.alibaba:fastjson:1.2.75" - - //android8.0以上需要使用到反射获取隐藏的系统api和动态代理隐藏的抽象类回调 - //其中动态代理抽象类回调需要使用ProxyBuilder类,故依赖一个库 - //implementation 'com.linkedin.dexmaker:dexmaker-mockito:2.12.1' + implementation "com.alibaba:fastjson:1.2.78" // 友盟统计SDK implementation 'com.umeng.umsdk:common:9.4.4'// 必选 implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,可选 - implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选 //XUpdate implementation 'com.github.xuexiangjys:XUpdate:2.1.0' @@ -88,8 +140,6 @@ dependencies { //EmailKit implementation 'com.github.mailhu:emailkit:4.2.2' - implementation 'androidx.test.ext:junit-ktx:1.1.2' - testImplementation 'junit:junit:4.12' //Lombok compileOnly 'org.projectlombok:lombok:1.18.20' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index f1b42451..ba3c9548 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -19,3 +19,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile +-keep class com.idormy.sms.forwarder.model.**{*;} diff --git a/app/src/androidTest/java/com/idormy/sms/forwarder/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/idormy/sms/forwarder/ExampleInstrumentedTest.kt index 65663ed2..f6b7d657 100644 --- a/app/src/androidTest/java/com/idormy/sms/forwarder/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/idormy/sms/forwarder/ExampleInstrumentedTest.kt @@ -16,7 +16,7 @@ class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. - val appContext = InstrumentationRegistry.getTargetContext() + val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("com.idormy.sms.forwarder", appContext.packageName) } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6cd218d8..c5328a67 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + @@ -10,16 +11,21 @@ tools:ignore="ProtectedPermissions" /> - + + + - + android:usesCleartextTraffic="true" + android:fullBackupContent="@xml/backup_descriptor"> - + - + - - - + + + - + + android:name=".receiver.SmsForwarderBroadcastReceiver" + android:permission="android.permission.BROADCAST_SMS" + tools:ignore="IntentFilterExportedReceiver"> + + + + + + + + \ No newline at end of file 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 c9b6c416..4cdf6aa3 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/AboutActivity.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder; +import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -8,16 +9,14 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; -import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; -import com.idormy.sms.forwarder.BroadCastReceiver.RebootBroadcastReceiver; +import com.idormy.sms.forwarder.receiver.RebootBroadcastReceiver; import com.idormy.sms.forwarder.utils.CacheUtil; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.aUtil; @@ -25,13 +24,14 @@ import com.xuexiang.xupdate.easy.EasyUpdate; import com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker; +@SuppressWarnings("SpellCheckingInspection") public class AboutActivity extends AppCompatActivity { - private String TAG = "com.idormy.sms.forwarder.AboutActivity"; + private final String TAG = "com.idormy.sms.forwarder.AboutActivity"; private Context context; @Override public void onCreate(Bundle savedInstanceState) { - Log.d(TAG, "oncreate"); + Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); context = AboutActivity.this; @@ -39,138 +39,112 @@ public class AboutActivity extends AppCompatActivity { setContentView(R.layout.activity_about); Log.d(TAG, "onCreate: " + RebootBroadcastReceiver.class.getName()); - Switch check_with_reboot = (Switch) findViewById(R.id.switch_with_reboot); + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch check_with_reboot = findViewById(R.id.switch_with_reboot); checkWithReboot(check_with_reboot); - Switch switch_help_tip = (Switch) findViewById(R.id.switch_help_tip); + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_help_tip = findViewById(R.id.switch_help_tip); SwitchHelpTip(switch_help_tip); - final TextView version_now = (TextView) findViewById(R.id.version_now); - Button check_version_now = (Button) findViewById(R.id.check_version_now); + final TextView version_now = findViewById(R.id.version_now); + Button check_version_now = findViewById(R.id.check_version_now); try { version_now.setText(aUtil.getVersionName(AboutActivity.this)); } catch (Exception e) { e.printStackTrace(); } - check_version_now.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //checkNewVersion(); - try { - String updateUrl = "https://xupdate.bms.ink/update/checkVersion?appKey=com.idormy.sms.forwarder&versionCode="; - updateUrl += aUtil.getVersionCode(AboutActivity.this); + check_version_now.setOnClickListener(v -> { + try { + String updateUrl = "https://xupdate.bms.ink/update/checkVersion?appKey=com.idormy.sms.forwarder&versionCode="; + updateUrl += aUtil.getVersionCode(AboutActivity.this); - EasyUpdate.create(AboutActivity.this, updateUrl) - .updateChecker(new DefaultUpdateChecker() { - @Override - public void onBeforeCheck() { - super.onBeforeCheck(); - Toast.makeText(AboutActivity.this, "查询中...", Toast.LENGTH_LONG).show(); - } + EasyUpdate.create(AboutActivity.this, updateUrl) + .updateChecker(new DefaultUpdateChecker() { + @Override + public void onBeforeCheck() { + super.onBeforeCheck(); + Toast.makeText(AboutActivity.this, "查询中...", Toast.LENGTH_LONG).show(); + } - @Override - public void onAfterCheck() { - super.onAfterCheck(); - } - - @Override - public void noNewVersion(Throwable throwable) { - super.noNewVersion(throwable); - // 没有最新版本的处理 - Toast.makeText(AboutActivity.this, "已是最新版本!", Toast.LENGTH_LONG).show(); - } - }) - .update(); - } catch (Exception e) { - e.printStackTrace(); - } + @Override + public void noNewVersion(Throwable throwable) { + super.noNewVersion(throwable); + // 没有最新版本的处理 + Toast.makeText(AboutActivity.this, "已是最新版本!", Toast.LENGTH_LONG).show(); + } + }) + .update(); + } catch (Exception e) { + e.printStackTrace(); } + }); - final TextView cache_size = (TextView) findViewById(R.id.cache_size); + final TextView cache_size = findViewById(R.id.cache_size); try { cache_size.setText(CacheUtil.getTotalCacheSize(AboutActivity.this)); } catch (Exception e) { e.printStackTrace(); } - Button clear_all_cache = (Button) findViewById(R.id.clear_all_cache); - clear_all_cache.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - CacheUtil.clearAllCache(AboutActivity.this); - try { - cache_size.setText(CacheUtil.getTotalCacheSize(AboutActivity.this)); - } catch (Exception e) { - e.printStackTrace(); - } - Toast.makeText(AboutActivity.this, "缓存清理完成", Toast.LENGTH_LONG).show(); + Button clear_all_cache = findViewById(R.id.clear_all_cache); + clear_all_cache.setOnClickListener(v -> { + CacheUtil.clearAllCache(AboutActivity.this); + try { + cache_size.setText(CacheUtil.getTotalCacheSize(AboutActivity.this)); + } catch (Exception e) { + e.printStackTrace(); } + Toast.makeText(AboutActivity.this, "缓存清理完成", Toast.LENGTH_LONG).show(); }); - Button join_qq_group = (Button) findViewById(R.id.join_qq_group); - join_qq_group.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String key = "HvroJRfvK7GGfnQgaIQ4Rh1un9O83N7M"; - joinQQGroup(key); - } + Button join_qq_group = findViewById(R.id.join_qq_group); + join_qq_group.setOnClickListener(v -> { + String key = "HvroJRfvK7GGfnQgaIQ4Rh1un9O83N7M"; + joinQQGroup(key); }); } //检查重启广播接受器状态并设置 - private void checkWithReboot(Switch withrebootSwitch) { + 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); - if (state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED - && state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) { - withrebootSwitch.setChecked(true); - } else { - withrebootSwitch.setChecked(false); - } - withrebootSwitch.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - int newState = (Boolean) isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED - : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - pm.setComponentEnabledSetting(cm, newState, PackageManager.DONT_KILL_APP); - Log.d(TAG, "onCheckedChanged:" + isChecked); - } + 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); }); } //页面帮助提示 - private void SwitchHelpTip(Switch switchHelpTip) { + private void SwitchHelpTip(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switchHelpTip) { switchHelpTip.setChecked(MyApplication.showHelpTip); - switchHelpTip.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean 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); - } + 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 boolean joinQQGroup(String key) { + public void joinQQGroup(String key) { Intent intent = new Intent(); intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D" + key)); // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) try { startActivity(intent); - return true; } catch (Exception e) { // 未安装手Q或安装的版本不支持 Toast.makeText(AboutActivity.this, "未安装手Q或安装的版本不支持!", Toast.LENGTH_LONG).show(); - return false; } } 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 dfd015dd..896f64e4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -1,27 +1,21 @@ package com.idormy.sms.forwarder; -import android.content.ComponentName; -import android.content.DialogInterface; +import android.annotation.SuppressLint; import android.content.Intent; -import android.content.IntentFilter; -import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; -import android.os.IBinder; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.widget.AdapterView; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; -import com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver; import com.idormy.sms.forwarder.adapter.LogAdapter; import com.idormy.sms.forwarder.model.vo.LogVo; import com.idormy.sms.forwarder.utils.LogUtil; @@ -29,30 +23,13 @@ import com.idormy.sms.forwarder.utils.NetUtil; import com.idormy.sms.forwarder.utils.PhoneUtils; import com.idormy.sms.forwarder.utils.SmsUtil; import com.idormy.sms.forwarder.utils.aUtil; -import com.umeng.analytics.MobclickAgent; import java.util.ArrayList; import java.util.List; -public class MainActivity extends AppCompatActivity implements ReFlashListView.IReflashListener { +public class MainActivity extends AppCompatActivity implements ReFlashListView.IRefreshListener { - ServiceConnection conn = new ServiceConnection() { - - @Override - public void onServiceDisconnected(ComponentName name) { - // TODO Auto-generated method stub - } - - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - // 当service绑定成功时,会调用次方法,可以在此申请权限 - PackageManager pm = getPackageManager(); - PhoneUtils.CheckPermission(pm, MainActivity.this); - } - }; - private IntentFilter intentFilter; - private SmsForwarderBroadcastReceiver smsBroadcastReceiver; - private String TAG = "MainActivity"; + private final String TAG = "MainActivity"; // logVoList用于存储数据 private List logVos = new ArrayList<>(); private LogAdapter adapter; @@ -62,7 +39,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I protected void onCreate(Bundle savedInstanceState) { LogUtil.init(this); - Log.d(TAG, "oncreate"); + Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -94,52 +71,50 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I // 为ListView注册一个监听器,当用户点击了ListView中的任何一个子项时,就会回调onItemClick()方法 // 在这个方法中可以通过position参数判断出用户点击的是那一个子项 - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (position <= 0) return; + listView.setOnItemClickListener((parent, view, position, id) -> { + if (position <= 0) return; - LogVo logVo = logVos.get(position - 1); - logDetail(logVo); - } + LogVo logVo = logVos.get(position - 1); + logDetail(logVo); }); - listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { - if (position <= 0) return false; + listView.setOnItemLongClickListener((parent, view, position, id) -> { + if (position <= 0) return false; - //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 - AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); - builder.setMessage("确定删除?"); - builder.setTitle("提示"); + //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setMessage("确定删除?"); + builder.setTitle("提示"); - //添加AlertDialog.Builder对象的setPositiveButton()方法 - builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Long id = logVos.get(position - 1).getId(); - Log.d(TAG, "id = " + id); - LogUtil.delLog(id, null); - initTLogs(); //初始化数据 - showList(logVos); - Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); - } - }); + //添加AlertDialog.Builder对象的setPositiveButton()方法 + builder.setPositiveButton("确定", (dialog, which) -> { + Long id1 = logVos.get(position - 1).getId(); + Log.d(TAG, "id = " + id1); + LogUtil.delLog(id1, null); + initTLogs(); //初始化数据 + showList(logVos); + Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); + }); - //添加AlertDialog.Builder对象的setNegativeButton()方法 - builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - } - }); + //添加AlertDialog.Builder对象的setNegativeButton()方法 + builder.setNegativeButton("取消", (dialog, which) -> { + }); - builder.create().show(); - return true; - } + builder.create().show(); + return true; }); } + @Override + protected void onResume() { + super.onResume(); + //第一次打开,未授权无法获取SIM信息,尝试在此重新获取 + if (MyApplication.SimInfoList.isEmpty()) { + MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo(); + } + Log.d(TAG, "SimInfoList = " + MyApplication.SimInfoList.size()); + } + // 初始化数据 private void initTLogs() { logVos = LogUtil.getLog(null, null); @@ -160,35 +135,19 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I } @Override - public void onReflash() { + public void onRefresh() { Handler handler = new Handler(); - handler.postDelayed(new Runnable() { - - @Override - public void run() { - // TODO Auto-generated method stub - //获取最新数据 - initTLogs(); - //通知界面显示 - showList(logVos); - //通知listview 刷新数据完毕; - listView.reflashComplete(); - } + handler.postDelayed(() -> { + // TODO Auto-generated method stub + //获取最新数据 + initTLogs(); + //通知界面显示 + showList(logVos); + //通知listview 刷新数据完毕; + listView.refreshComplete(); }, 2000); } - @Override - protected void onDestroy() { - Log.d(TAG, "onDestroy"); - super.onDestroy(); - //取消注册广播 - try { - if (smsBroadcastReceiver != null) - unregisterReceiver(smsBroadcastReceiver); - } catch (Exception e) { - Log.e(TAG, "unregisterReceiver fail:" + e.getMessage()); - } - } public void logDetail(LogVo logVo) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); @@ -200,29 +159,22 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I builder.setMessage(logVo.getFrom() + "\n\n" + logVo.getContent() + "\n\n" + logVo.getRule() + "\n\n" + aUtil.utc2Local(logVo.getTime()) + "\n\nResponse:" + logVo.getForwardResponse()); } //重发 - builder.setPositiveButton("重发", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - System.out.println(logVo.toString()); - Long id = logVo.getId(); - Log.d(TAG, "id = " + id); - Log.d(TAG, logVo.toString()); - Toast.makeText(MainActivity.this, "你确定要重发吗?", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } + builder.setPositiveButton("重发", (dialog, which) -> { + Long id = logVo.getId(); + Log.d(TAG, "id = " + id); + Log.d(TAG, logVo.toString()); + Toast.makeText(MainActivity.this, "你确定要重发吗?", Toast.LENGTH_SHORT).show(); + dialog.dismiss(); }); //删除 - builder.setNegativeButton("删除", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Long id = logVo.getId(); - Log.d(TAG, "id = " + id); - LogUtil.delLog(id, null); - initTLogs(); //初始化数据 - showList(logVos); - Toast.makeText(MainActivity.this, "已删除该条记录", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } + builder.setNegativeButton("删除", (dialog, which) -> { + Long id = logVo.getId(); + Log.d(TAG, "id = " + id); + LogUtil.delLog(id, null); + initTLogs(); //初始化数据 + showList(logVos); + Toast.makeText(MainActivity.this, "已删除该条记录", Toast.LENGTH_SHORT).show(); + dialog.dismiss(); }); builder.show(); } @@ -250,16 +202,11 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I public void cleanLog(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("确定要清空转发记录吗?") - .setPositiveButton("清空", new DialogInterface.OnClickListener() {// 积极 - - @Override - public void onClick(DialogInterface dialog, - int which) { - // TODO Auto-generated method stub - LogUtil.delLog(null, null); - initTLogs(); - adapter.add(logVos); - } + .setPositiveButton("清空", (dialog, which) -> { + // TODO Auto-generated method stub + LogUtil.delLog(null, null); + initTLogs(); + adapter.add(logVos); }); builder.show(); } @@ -273,6 +220,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I startActivity(intent); } + @SuppressLint("NonConstantResourceId") @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection @@ -296,21 +244,4 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I } - @Override - protected void onResume() { - super.onResume(); - MobclickAgent.onResume(this); - //第一次打开,申请权限前无法获取SIM信息,尝试在此重新获取 - if (MyApplication.SimInfoList.isEmpty()) { - MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo(); - } - Log.d(TAG, "SimInfoList = " + MyApplication.SimInfoList.size()); - } - - @Override - protected void onPause() { - super.onPause(); - MobclickAgent.onPause(this); - } - } diff --git a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java index 4495ac27..72b05bee 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java @@ -38,8 +38,8 @@ public class MyApplication extends Application { * android:value="Umeng"> * * - * @param ctx - * @return + * @param ctx 上下文 + * @return 渠道名称 */ // 获取渠道工具函数 public static String getChannelName(Context ctx) { @@ -52,10 +52,8 @@ public class MyApplication extends Application { if (packageManager != null) { //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是activity标签中,所以用ApplicationInfo ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA); - if (applicationInfo != null) { - if (applicationInfo.metaData != null) { - channelName = applicationInfo.metaData.get("UMENG_CHANNEL") + ""; - } + if (applicationInfo.metaData != null) { + channelName = applicationInfo.metaData.get("UMENG_CHANNEL") + ""; } } } catch (PackageManager.NameNotFoundException e) { @@ -84,7 +82,7 @@ public class MyApplication extends Application { MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.LEGACY_MANUAL); //pro close log UMConfigure.setLogEnabled(true); - Log.i(TAG, "uminit"); + Intent intent = new Intent(this, FrontService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(intent); diff --git a/app/src/main/java/com/idormy/sms/forwarder/ReFlashListView.java b/app/src/main/java/com/idormy/sms/forwarder/ReFlashListView.java index 13ed7f62..b1aeb302 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/ReFlashListView.java +++ b/app/src/main/java/com/idormy/sms/forwarder/ReFlashListView.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder; +import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; import android.util.Log; @@ -20,11 +21,12 @@ import java.util.Locale; /** * 自定义listview */ +@SuppressWarnings({"CommentedOutCode", "unused"}) public class ReFlashListView extends ListView implements AbsListView.OnScrollListener { - private static final String TAG = "ReFlashListView"; + //private static final String TAG = "ReFlashListView"; final int NONE = 0;// 正常状态; final int PULL = 1;// 提示下拉状态; - final int RELESE = 2;// 提示释放状态; + final int RELEASE = 2;// 提示释放状态; final int REFLASHING = 3;// 刷新状态; View header;// 顶部布局文件; int headerHeight;// 顶部布局文件的高度; @@ -33,7 +35,7 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis boolean isRemark;// 标记,当前是在listview最顶端摁下的; int startY;// 摁下时的Y值; int state;// 当前的状态; - IReflashListener iReflashListener;//刷新数据的接口 + IRefreshListener iRefreshListener;//刷新数据的接口 public ReFlashListView(Context context) { super(context); @@ -55,9 +57,8 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 初始化界面,添加顶部布局文件到 listview - * - * @param context */ + @SuppressLint("InflateParams") private void initView(Context context) { LayoutInflater inflater = LayoutInflater.from(context); header = inflater.inflate(R.layout.header, null); @@ -71,8 +72,6 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 通知父布局,占用的宽,高; - * - * @param view */ private void measureView(View view) { ViewGroup.LayoutParams p = view.getLayoutParams(); @@ -94,8 +93,6 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 设置header 布局 上边距; - * - * @param topPadding */ private void topPadding(int topPadding) { header.setPadding(header.getPaddingLeft(), topPadding, @@ -116,6 +113,7 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis this.scrollState = scrollState; } + @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub @@ -131,23 +129,23 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis onMove(ev); break; case MotionEvent.ACTION_UP: - if (state == RELESE || state == PULL) { + if (state == RELEASE || state == PULL) { state = REFLASHING; // 加载最新数据; - reflashViewByState(); - iReflashListener.onReflash(); + refreshViewByState(); + iRefreshListener.onRefresh(); } -// if (state == RELESE) { +// if (state == RELEASE) { // Log.d(TAG, "onTouchEvent: up release"); // state = REFLASHING; // // 加载最新数据; -// reflashViewByState(); -// iReflashListener.onReflash(); +// refreshViewByState(); +// iRefreshListener.onRefresh(); // } else if (state == PULL) { // Log.d(TAG, "onTouchEvent: up pull"); // state = NONE; // isRemark = false; -// reflashViewByState(); +// refreshViewByState(); // } break; } @@ -156,8 +154,6 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 判断移动过程操作; - * - * @param ev */ private void onMove(MotionEvent ev) { if (!isRemark) { @@ -170,26 +166,26 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis case NONE: if (space > 0) { state = PULL; - reflashViewByState(); + refreshViewByState(); } break; case PULL: topPadding(topPadding); if (space > headerHeight + 30 && scrollState == SCROLL_STATE_TOUCH_SCROLL) { - state = RELESE; - reflashViewByState(); + state = RELEASE; + refreshViewByState(); } break; - case RELESE: + case RELEASE: topPadding(topPadding); if (space < headerHeight + 30) { state = PULL; - reflashViewByState(); + refreshViewByState(); } else if (space <= 0) { state = NONE; isRemark = false; - reflashViewByState(); + refreshViewByState(); } break; } @@ -198,10 +194,10 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 根据当前状态,改变界面显示; */ - private void reflashViewByState() { - TextView tip = (TextView) header.findViewById(R.id.tip); - ImageView arrow = (ImageView) header.findViewById(R.id.arrow); - ProgressBar progress = (ProgressBar) header.findViewById(R.id.progress); + private void refreshViewByState() { + TextView tip = header.findViewById(R.id.tip); + ImageView arrow = header.findViewById(R.id.arrow); + ProgressBar progress = header.findViewById(R.id.progress); RotateAnimation anim = new RotateAnimation(0, 180, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); @@ -225,7 +221,7 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis arrow.clearAnimation(); arrow.setAnimation(anim1); break; - case RELESE: + case RELEASE: arrow.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); tip.setText("松开可以刷新!"); @@ -245,19 +241,19 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis /** * 获取完数据; */ - public void reflashComplete() { + public void refreshComplete() { state = NONE; isRemark = false; - reflashViewByState(); - TextView lastupdatetime = (TextView) header - .findViewById(R.id.lastupdate_time); + refreshViewByState(); + TextView lastUpdateTime = header + .findViewById(R.id.lastUpdateTime); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); String time = sdf.format(new java.util.Date()); - lastupdatetime.setText(time); + lastUpdateTime.setText(time); } - public void setInterface(IReflashListener iReflashListener) { - this.iReflashListener = iReflashListener; + public void setInterface(IRefreshListener iRefreshListener) { + this.iRefreshListener = iRefreshListener; } /** @@ -265,7 +261,7 @@ public class ReFlashListView extends ListView implements AbsListView.OnScrollLis * * @author Administrator */ - public interface IReflashListener { - public void onReflash(); + public interface IRefreshListener { + void onRefresh(); } } \ No newline at end of file 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 53319c82..d9357510 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/RuleActivity.java @@ -1,18 +1,17 @@ package com.idormy.sms.forwarder; +import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; + import android.annotation.SuppressLint; -import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; -import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; -import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -34,32 +33,28 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - +@SuppressWarnings("deprecation") public class RuleActivity extends AppCompatActivity { - private String TAG = "RuleActivity"; + private final String TAG = "RuleActivity"; // 用于存储数据 private List ruleModels = new ArrayList<>(); private RuleAdapter adapter; - private Long selectSenderId = 0l; - private String selectSenderName = ""; //消息处理者,创建一个Handler的子类对象,目的是重写Handler的处理消息的方法(handleMessage()) - private Handler handler = new Handler() { + @SuppressLint("HandlerLeak") + private final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { - switch (msg.what) { - case NOTIFY: - Toast.makeText(RuleActivity.this, msg.getData().getString("DATA"), Toast.LENGTH_LONG).show(); - break; + if (msg.what == NOTIFY) { + Toast.makeText(RuleActivity.this, msg.getData().getString("DATA"), Toast.LENGTH_LONG).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { - Log.d(TAG, "oncreate"); + Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_rule); RuleUtil.init(RuleActivity.this); @@ -85,46 +80,33 @@ public class RuleActivity extends AppCompatActivity { // 为ListView注册一个监听器,当用户点击了ListView中的任何一个子项时,就会回调onItemClick()方法 // 在这个方法中可以通过position参数判断出用户点击的是那一个子项 - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - RuleModel ruleModel = ruleModels.get(position); - Log.d(TAG, "onItemClick: " + ruleModel); - setRule(ruleModel); - } + listView.setOnItemClickListener((parent, view, position, id) -> { + RuleModel ruleModel = ruleModels.get(position); + Log.d(TAG, "onItemClick: " + ruleModel); + setRule(ruleModel); }); - listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { - //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 - AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this); + listView.setOnItemLongClickListener((parent, view, position, id) -> { + //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 + AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this); - builder.setMessage("确定删除?"); - builder.setTitle("提示"); + builder.setMessage("确定删除?"); + builder.setTitle("提示"); - //添加AlertDialog.Builder对象的setPositiveButton()方法 - builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - RuleUtil.delRule(ruleModels.get(position).getId()); - initRules(); - adapter.del(ruleModels); - Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); - } - }); + //添加AlertDialog.Builder对象的setPositiveButton()方法 + builder.setPositiveButton("确定", (dialog, which) -> { + RuleUtil.delRule(ruleModels.get(position).getId()); + initRules(); + adapter.del(ruleModels); + Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); + }); - //添加AlertDialog.Builder对象的setNegativeButton()方法 - builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + //添加AlertDialog.Builder对象的setNegativeButton()方法 + builder.setNegativeButton("取消", (dialog, which) -> { - @Override - public void onClick(DialogInterface dialog, int which) { + }); - } - }); - - builder.create().show(); - return true; - } + builder.create().show(); + return true; }); } @@ -141,11 +123,11 @@ public class RuleActivity extends AppCompatActivity { final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(RuleActivity.this); final View view1 = View.inflate(RuleActivity.this, R.layout.alert_dialog_setview_rule, null); - final RadioGroup radioGroupRuleFiled = (RadioGroup) view1.findViewById(R.id.radioGroupRuleFiled); + final RadioGroup radioGroupRuleFiled = view1.findViewById(R.id.radioGroupRuleFiled); if (ruleModel != null) radioGroupRuleFiled.check(ruleModel.getRuleFiledCheckId()); - final RadioGroup radioGroupRuleCheck = (RadioGroup) view1.findViewById(R.id.radioGroupRuleCheck); - final RadioGroup radioGroupRuleCheck2 = (RadioGroup) view1.findViewById(R.id.radioGroupRuleCheck2); + final RadioGroup radioGroupRuleCheck = view1.findViewById(R.id.radioGroupRuleCheck); + final RadioGroup radioGroupRuleCheck2 = view1.findViewById(R.id.radioGroupRuleCheck2); if (ruleModel != null) { int ruleCheckCheckId = ruleModel.getRuleCheckCheckId(); if (ruleCheckCheckId == R.id.btnIs || ruleCheckCheckId == R.id.btnNotContain || ruleCheckCheckId == R.id.btnContain) { @@ -157,25 +139,22 @@ public class RuleActivity extends AppCompatActivity { radioGroupRuleCheck.check(R.id.btnIs); } - final RadioGroup radioGroupSimSlot = (RadioGroup) view1.findViewById(R.id.radioGroupSimSlot); + final RadioGroup radioGroupSimSlot = view1.findViewById(R.id.radioGroupSimSlot); if (ruleModel != null) radioGroupSimSlot.check(ruleModel.getRuleSimSlotCheckId()); - final TextView tv_mu_rule_tips = (TextView) view1.findViewById(R.id.tv_mu_rule_tips); - final TextView ruleSenderTv = (TextView) view1.findViewById(R.id.ruleSenderTv); + final TextView tv_mu_rule_tips = view1.findViewById(R.id.tv_mu_rule_tips); + final TextView ruleSenderTv = view1.findViewById(R.id.ruleSenderTv); if (ruleModel != null && ruleModel.getSenderId() != null) { - List getSeners = SenderUtil.getSender(ruleModel.getSenderId(), null); - if (!getSeners.isEmpty()) { - ruleSenderTv.setText(getSeners.get(0).getName()); - ruleSenderTv.setTag(getSeners.get(0).getId()); + List getSenders = SenderUtil.getSender(ruleModel.getSenderId(), null); + if (!getSenders.isEmpty()) { + ruleSenderTv.setText(getSenders.get(0).getName()); + ruleSenderTv.setTag(getSenders.get(0).getId()); } } - final Button btSetRuleSender = (Button) view1.findViewById(R.id.btSetRuleSender); - btSetRuleSender.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - //Toast.makeText(RuleActivity.this, "selectSender", Toast.LENGTH_LONG).show(); - selectSender(ruleSenderTv); - } + final Button btSetRuleSender = view1.findViewById(R.id.btSetRuleSender); + btSetRuleSender.setOnClickListener(view -> { + //Toast.makeText(RuleActivity.this, "selectSender", Toast.LENGTH_LONG).show(); + selectSender(ruleSenderTv); }); final EditText editTextRuleValue = view1.findViewById(R.id.editTextRuleValue); @@ -183,92 +162,83 @@ public class RuleActivity extends AppCompatActivity { editTextRuleValue.setText(ruleModel.getValue()); //当更新选择的字段的时候,更新之下各个选项的状态 - final LinearLayout matchTypeLayout = (LinearLayout) view1.findViewById(R.id.matchTypeLayout); - final LinearLayout matchValueLayout = (LinearLayout) view1.findViewById(R.id.matchValueLayout); + final LinearLayout matchTypeLayout = view1.findViewById(R.id.matchTypeLayout); + final LinearLayout matchValueLayout = view1.findViewById(R.id.matchValueLayout); refreshSelectRadioGroupRuleFiled(radioGroupRuleFiled, radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout); - Button buttonruleok = view1.findViewById(R.id.buttonruleok); - Button buttonruledel = view1.findViewById(R.id.buttonruledel); - Button buttonruletest = view1.findViewById(R.id.buttonruletest); + Button buttonRuleOk = view1.findViewById(R.id.buttonRuleOk); + Button buttonRuleDel = view1.findViewById(R.id.buttonRuleDel); + Button buttonRuleTest = view1.findViewById(R.id.buttonRuleTest); alertDialog71 .setTitle(R.string.setrule) //.setIcon(R.drawable.ic_sms_forwarder) .setView(view1) .create(); final AlertDialog show = alertDialog71.show(); - buttonruleok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Object senderId = ruleSenderTv.getTag(); + buttonRuleOk.setOnClickListener(view -> { + Object senderId = ruleSenderTv.getTag(); + int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); + Log.d(TAG, radioGroupRuleCheck.getCheckedRadioButtonId() + " " + radioGroupRuleCheck2.getCheckedRadioButtonId() + " " + radioGroupRuleCheckId); + if (ruleModel == null) { + RuleModel newRuleModel = new RuleModel(); + newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); + newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); + newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); + newRuleModel.setValue(editTextRuleValue.getText().toString()); + if (senderId != null) { + newRuleModel.setSenderId(Long.valueOf(senderId.toString())); + } + RuleUtil.addRule(newRuleModel); + initRules(); + adapter.add(ruleModels); + } else { + ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); + ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); + ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); + ruleModel.setValue(editTextRuleValue.getText().toString()); + if (senderId != null) { + ruleModel.setSenderId(Long.valueOf(senderId.toString())); + } + RuleUtil.updateRule(ruleModel); + initRules(); + adapter.update(ruleModels); + } + + show.dismiss(); + }); + + buttonRuleDel.setOnClickListener(view -> { + if (ruleModel != null) { + RuleUtil.delRule(ruleModel.getId()); + initRules(); + adapter.del(ruleModels); + } + show.dismiss(); + }); + + buttonRuleTest.setOnClickListener(view -> { + Object senderId = ruleSenderTv.getTag(); + if (senderId == null) { + Toast.makeText(RuleActivity.this, "请先创建选择发送方", Toast.LENGTH_LONG).show(); + } else { int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); - Log.d(TAG, "XXXX " + radioGroupRuleCheck.getCheckedRadioButtonId() + " " + radioGroupRuleCheck2.getCheckedRadioButtonId() + " " + radioGroupRuleCheckId); if (ruleModel == null) { RuleModel newRuleModel = new RuleModel(); newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); newRuleModel.setValue(editTextRuleValue.getText().toString()); - if (senderId != null) { - newRuleModel.setSenderId(Long.valueOf(senderId.toString())); - } - RuleUtil.addRule(newRuleModel); - initRules(); - adapter.add(ruleModels); + newRuleModel.setSenderId(Long.valueOf(senderId.toString())); + + testRule(newRuleModel, Long.valueOf(senderId.toString())); } else { ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); ruleModel.setValue(editTextRuleValue.getText().toString()); - if (senderId != null) { - ruleModel.setSenderId(Long.valueOf(senderId.toString())); - } - RuleUtil.updateRule(ruleModel); - initRules(); - adapter.update(ruleModels); - } + ruleModel.setSenderId(Long.valueOf(senderId.toString())); - show.dismiss(); - } - }); - - buttonruledel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (ruleModel != null) { - RuleUtil.delRule(ruleModel.getId()); - initRules(); - adapter.del(ruleModels); - } - show.dismiss(); - } - }); - - buttonruletest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Object senderId = ruleSenderTv.getTag(); - if (senderId == null) { - Toast.makeText(RuleActivity.this, "请先创建选择发送方", Toast.LENGTH_LONG).show(); - } else { - int radioGroupRuleCheckId = Math.max(radioGroupRuleCheck.getCheckedRadioButtonId(), radioGroupRuleCheck2.getCheckedRadioButtonId()); - if (ruleModel == null) { - RuleModel newRuleModel = new RuleModel(); - newRuleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); - newRuleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); - newRuleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); - newRuleModel.setValue(editTextRuleValue.getText().toString()); - newRuleModel.setSenderId(Long.valueOf(senderId.toString())); - - testRule(newRuleModel, Long.valueOf(senderId.toString())); - } else { - ruleModel.setFiled(RuleModel.getRuleFiledFromCheckId(radioGroupRuleFiled.getCheckedRadioButtonId())); - ruleModel.setCheck(RuleModel.getRuleCheckFromCheckId(radioGroupRuleCheckId)); - ruleModel.setSimSlot(RuleModel.getRuleSimSlotFromCheckId(radioGroupSimSlot.getCheckedRadioButtonId())); - ruleModel.setValue(editTextRuleValue.getText().toString()); - ruleModel.setSenderId(Long.valueOf(senderId.toString())); - - testRule(ruleModel, Long.valueOf(senderId.toString())); - } + testRule(ruleModel, Long.valueOf(senderId.toString())); } } }); @@ -281,53 +251,43 @@ public class RuleActivity extends AppCompatActivity { private void refreshSelectRadioGroupRuleFiled(RadioGroup radioGroupRuleFiled, final RadioGroup radioGroupRuleCheck, final RadioGroup radioGroupRuleCheck2, final EditText editTextRuleValue, final TextView tv_mu_rule_tips, final LinearLayout matchTypeLayout, final LinearLayout matchValueLayout) { refreshSelectRadioGroupRuleFiledAction(radioGroupRuleFiled.getCheckedRadioButtonId(), radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout); - radioGroupRuleCheck.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @SuppressLint("ResourceType") - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - Log.d(TAG, String.valueOf(group)); - Log.d(TAG, String.valueOf(checkedId)); - if (group != null && checkedId > 0) { - if (group == radioGroupRuleCheck) { - radioGroupRuleCheck2.clearCheck(); - } else if (group == radioGroupRuleCheck2) { - radioGroupRuleCheck.clearCheck(); - } - group.check(checkedId); - } - } - }); - radioGroupRuleCheck2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @SuppressLint("ResourceType") - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - Log.d(TAG, String.valueOf(group)); - Log.d(TAG, String.valueOf(checkedId)); - if (group != null && checkedId > 0) { - if (group == radioGroupRuleCheck) { - radioGroupRuleCheck2.clearCheck(); - } else if (group == radioGroupRuleCheck2) { - radioGroupRuleCheck.clearCheck(); - } - group.check(checkedId); - } - } - }); - radioGroupRuleFiled.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - Log.d(TAG, String.valueOf(group)); - Log.d(TAG, String.valueOf(checkedId)); + radioGroupRuleCheck.setOnCheckedChangeListener((group, checkedId) -> { + Log.d(TAG, String.valueOf(group)); + Log.d(TAG, String.valueOf(checkedId)); + if (group != null && checkedId > 0) { if (group == radioGroupRuleCheck) { radioGroupRuleCheck2.clearCheck(); } else if (group == radioGroupRuleCheck2) { radioGroupRuleCheck.clearCheck(); } - refreshSelectRadioGroupRuleFiledAction(checkedId, radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout); + group.check(checkedId); } }); + radioGroupRuleCheck2.setOnCheckedChangeListener((group, checkedId) -> { + Log.d(TAG, String.valueOf(group)); + Log.d(TAG, String.valueOf(checkedId)); + if (group != null && checkedId > 0) { + if (group == radioGroupRuleCheck) { + radioGroupRuleCheck2.clearCheck(); + } else if (group == radioGroupRuleCheck2) { + radioGroupRuleCheck.clearCheck(); + } + group.check(checkedId); + } + }); + radioGroupRuleFiled.setOnCheckedChangeListener((group, checkedId) -> { + Log.d(TAG, String.valueOf(group)); + Log.d(TAG, String.valueOf(checkedId)); + if (group == radioGroupRuleCheck) { + radioGroupRuleCheck2.clearCheck(); + } else if (group == radioGroupRuleCheck2) { + radioGroupRuleCheck.clearCheck(); + } + refreshSelectRadioGroupRuleFiledAction(checkedId, radioGroupRuleCheck, radioGroupRuleCheck2, editTextRuleValue, tv_mu_rule_tips, matchTypeLayout, matchValueLayout); + }); } + @SuppressLint("NonConstantResourceId") private void refreshSelectRadioGroupRuleFiledAction(int checkedRuleFiledId, final RadioGroup radioGroupRuleCheck, final RadioGroup radioGroupRuleCheck2, final EditText editTextRuleValue, final TextView tv_mu_rule_tips, final LinearLayout matchTypeLayout, final LinearLayout matchValueLayout) { tv_mu_rule_tips.setVisibility(View.GONE); matchTypeLayout.setVisibility(View.VISIBLE); @@ -336,10 +296,10 @@ public class RuleActivity extends AppCompatActivity { switch (checkedRuleFiledId) { case R.id.btnTranspondAll: for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck.getChildAt(i)).setEnabled(false); + radioGroupRuleCheck.getChildAt(i).setEnabled(false); } for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck2.getChildAt(i)).setEnabled(false); + radioGroupRuleCheck2.getChildAt(i).setEnabled(false); } editTextRuleValue.setEnabled(false); matchTypeLayout.setVisibility(View.GONE); @@ -347,10 +307,10 @@ public class RuleActivity extends AppCompatActivity { break; case R.id.btnMultiMatch: for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck.getChildAt(i)).setEnabled(false); + radioGroupRuleCheck.getChildAt(i).setEnabled(false); } for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck2.getChildAt(i)).setEnabled(false); + radioGroupRuleCheck2.getChildAt(i).setEnabled(false); } editTextRuleValue.setEnabled(true); matchTypeLayout.setVisibility(View.GONE); @@ -358,10 +318,10 @@ public class RuleActivity extends AppCompatActivity { break; default: for (int i = 0; i < radioGroupRuleCheck.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck.getChildAt(i)).setEnabled(true); + radioGroupRuleCheck.getChildAt(i).setEnabled(true); } for (int i = 0; i < radioGroupRuleCheck2.getChildCount(); i++) { - ((RadioButton) radioGroupRuleCheck2.getChildAt(i)).setEnabled(true); + radioGroupRuleCheck2.getChildAt(i).setEnabled(true); } editTextRuleValue.setEnabled(true); break; @@ -380,47 +340,42 @@ public class RuleActivity extends AppCompatActivity { } AlertDialog.Builder builder = new AlertDialog.Builder(RuleActivity.this); builder.setTitle("选择发送方"); - builder.setItems(senderNames, new DialogInterface.OnClickListener() {//添加列表 - @Override - public void onClick(DialogInterface dialogInterface, int which) { - Toast.makeText(RuleActivity.this, senderNames[which], Toast.LENGTH_LONG).show(); - showTv.setText(senderNames[which]); - showTv.setTag(senderModels.get(which).getId()); - } + //添加列表 + builder.setItems(senderNames, (dialogInterface, which) -> { + Toast.makeText(RuleActivity.this, senderNames[which], Toast.LENGTH_LONG).show(); + showTv.setText(senderNames[which]); + showTv.setTag(senderModels.get(which).getId()); }); builder.show(); } public void testRule(final RuleModel ruleModel, final Long senderId) { final View view = View.inflate(RuleActivity.this, R.layout.alert_dialog_setview_rule_test, null); - final RadioGroup radioGroupTestSimSlot = (RadioGroup) view.findViewById(R.id.radioGroupTestSimSlot); - final EditText editTextTestPhone = (EditText) view.findViewById(R.id.editTextTestPhone); - final EditText editTextTestMsgContent = (EditText) view.findViewById(R.id.editTextTestMsgContent); - Button buttonruletest = view.findViewById(R.id.buttonruletest); + final RadioGroup radioGroupTestSimSlot = view.findViewById(R.id.radioGroupTestSimSlot); + final EditText editTextTestPhone = view.findViewById(R.id.editTextTestPhone); + final EditText editTextTestMsgContent = view.findViewById(R.id.editTextTestMsgContent); + Button buttonRuleTest = view.findViewById(R.id.buttonRuleTest); AlertDialog.Builder ad1 = new AlertDialog.Builder(RuleActivity.this); ad1.setTitle("测试规则"); ad1.setIcon(android.R.drawable.ic_dialog_email); ad1.setView(view); - buttonruletest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + buttonRuleTest.setOnClickListener(v -> { - Log.i("editTextTestPhone", editTextTestPhone.getText().toString()); - Log.i("editTextTestMsgContent", editTextTestMsgContent.getText().toString()); + Log.i("editTextTestPhone", editTextTestPhone.getText().toString()); + Log.i("editTextTestMsgContent", editTextTestMsgContent.getText().toString()); - try { - String simSlot = RuleModel.getRuleSimSlotFromCheckId(radioGroupTestSimSlot.getCheckedRadioButtonId()); - String simInfo = ""; - if (simSlot.equals("SIM2")) { - simInfo = simSlot + "_" + SettingUtil.getAddExtraSim2(); - } else { - simInfo = simSlot + "_" + SettingUtil.getAddExtraSim1(); - } - SmsVo testSmsVo = new SmsVo(editTextTestPhone.getText().toString(), editTextTestMsgContent.getText().toString(), new Date(), simInfo); - SendUtil.sendMsgByRuleModelSenderId(handler, ruleModel, testSmsVo, senderId); - } catch (Exception e) { - Toast.makeText(RuleActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); + try { + String simSlot = RuleModel.getRuleSimSlotFromCheckId(radioGroupTestSimSlot.getCheckedRadioButtonId()); + String simInfo; + if (simSlot.equals("SIM2")) { + simInfo = simSlot + "_" + SettingUtil.getAddExtraSim2(); + } else { + simInfo = simSlot + "_" + SettingUtil.getAddExtraSim1(); } + SmsVo testSmsVo = new SmsVo(editTextTestPhone.getText().toString(), editTextTestMsgContent.getText().toString(), new Date(), simInfo); + SendUtil.sendMsgByRuleModelSenderId(handler, ruleModel, testSmsVo, senderId); + } catch (Exception e) { + Toast.makeText(RuleActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } }); ad1.show();// 显示对话框 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 a53d201a..5a751973 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -12,15 +12,13 @@ import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY; -import android.content.DialogInterface; +import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; -import android.widget.AdapterView; import android.widget.Button; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; @@ -63,28 +61,28 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +@SuppressWarnings("deprecation") public class SenderActivity extends AppCompatActivity { public static final int NOTIFY = 0x9731993; - private String TAG = "SenderActivity"; + private final String TAG = "SenderActivity"; // 用于存储数据 private List senderModels = new ArrayList<>(); private SenderAdapter adapter; //消息处理者,创建一个Handler的子类对象,目的是重写Handler的处理消息的方法(handleMessage()) - private Handler handler = new Handler() { + @SuppressLint("HandlerLeak") + private final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { - switch (msg.what) { - case NOTIFY: - Toast.makeText(SenderActivity.this, msg.getData().getString("DATA"), Toast.LENGTH_LONG).show(); - break; + if (msg.what == NOTIFY) { + Toast.makeText(SenderActivity.this, msg.getData().getString("DATA"), Toast.LENGTH_LONG).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { - Log.d(TAG, "oncreate"); + Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_sender); SenderUtil.init(SenderActivity.this); @@ -109,87 +107,73 @@ public class SenderActivity extends AppCompatActivity { // 为ListView注册一个监听器,当用户点击了ListView中的任何一个子项时,就会回调onItemClick()方法 // 在这个方法中可以通过position参数判断出用户点击的是那一个子项 - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - SenderModel senderModel = senderModels.get(position); - Log.d(TAG, "onItemClick: " + senderModel); - - switch (senderModel.getType()) { - case TYPE_DINGDING: - setDingDing(senderModel); - break; - case TYPE_EMAIL: - setEmail(senderModel); - break; - case TYPE_BARK: - setBark(senderModel); - break; - case TYPE_WEB_NOTIFY: - setWebNotify(senderModel); - break; - case TYPE_QYWX_GROUP_ROBOT: - setQYWXGroupRobot(senderModel); - break; - case TYPE_QYWX_APP: - setQYWXApp(senderModel); - break; - case TYPE_SERVER_CHAN: - setServerChan(senderModel); - break; - case TYPE_TELEGRAM: - setTelegram(senderModel); - break; - case TYPE_SMS: - setSms(senderModel); - break; - case TYPE_FEISHU: - setFeiShu(senderModel); - break; - default: - Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show(); - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - break; - } + listView.setOnItemClickListener((parent, view, position, id) -> { + SenderModel senderModel = senderModels.get(position); + Log.d(TAG, "onItemClick: " + senderModel); + switch (senderModel.getType()) { + case TYPE_DINGDING: + setDingDing(senderModel); + break; + case TYPE_EMAIL: + setEmail(senderModel); + break; + case TYPE_BARK: + setBark(senderModel); + break; + case TYPE_WEB_NOTIFY: + setWebNotify(senderModel); + break; + case TYPE_QYWX_GROUP_ROBOT: + setQYWXGroupRobot(senderModel); + break; + case TYPE_QYWX_APP: + setQYWXApp(senderModel); + break; + case TYPE_SERVER_CHAN: + setServerChan(senderModel); + break; + case TYPE_TELEGRAM: + setTelegram(senderModel); + break; + case TYPE_SMS: + setSms(senderModel); + break; + case TYPE_FEISHU: + setFeiShu(senderModel); + break; + default: + Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show(); + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); + break; } + }); - listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { - //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 - AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this); + listView.setOnItemLongClickListener((parent, view, position, id) -> { + //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框 + AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this); - builder.setMessage("确定删除?"); - builder.setTitle("提示"); + builder.setMessage("确定删除?"); + builder.setTitle("提示"); - //添加AlertDialog.Builder对象的setPositiveButton()方法 - builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - SenderUtil.delSender(senderModels.get(position).getId()); - initSenders(); - adapter.del(senderModels); - Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); - } - }); + //添加AlertDialog.Builder对象的setPositiveButton()方法 + builder.setPositiveButton("确定", (dialog, which) -> { + SenderUtil.delSender(senderModels.get(position).getId()); + initSenders(); + adapter.del(senderModels); + Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show(); + }); - //添加AlertDialog.Builder对象的setNegativeButton()方法 - builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { + //添加AlertDialog.Builder对象的setNegativeButton()方法 + builder.setNegativeButton("取消", (dialog, which) -> { - } - }); + }); - builder.create().show(); - return true; - } + builder.create().show(); + return true; }); } @@ -201,44 +185,42 @@ public class SenderActivity extends AppCompatActivity { public void addSender(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(SenderActivity.this); builder.setTitle("选择发送方类型"); - builder.setItems(R.array.add_sender_menu, new DialogInterface.OnClickListener() {//添加列表 - @Override - public void onClick(DialogInterface dialogInterface, int which) { - switch (which) { - case TYPE_DINGDING: - setDingDing(null); - break; - case TYPE_EMAIL: - setEmail(null); - break; - case TYPE_BARK: - setBark(null); - break; - case TYPE_WEB_NOTIFY: - setWebNotify(null); - break; - case TYPE_QYWX_GROUP_ROBOT: - setQYWXGroupRobot(null); - break; - case TYPE_QYWX_APP: - setQYWXApp(null); - break; - case TYPE_SERVER_CHAN: - setServerChan(null); - break; - case TYPE_TELEGRAM: - setTelegram(null); - break; - case TYPE_SMS: - setSms(null); - break; - case TYPE_FEISHU: - setFeiShu(null); - break; - default: - Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show(); - break; - } + //添加列表 + builder.setItems(R.array.add_sender_menu, (dialogInterface, which) -> { + switch (which) { + case TYPE_DINGDING: + setDingDing(null); + break; + case TYPE_EMAIL: + setEmail(null); + break; + case TYPE_BARK: + setBark(null); + break; + case TYPE_WEB_NOTIFY: + setWebNotify(null); + break; + case TYPE_QYWX_GROUP_ROBOT: + setQYWXGroupRobot(null); + break; + case TYPE_QYWX_APP: + setQYWXApp(null); + break; + case TYPE_SERVER_CHAN: + setServerChan(null); + break; + case TYPE_TELEGRAM: + setTelegram(null); + break; + case TYPE_SMS: + setSms(null); + break; + case TYPE_FEISHU: + setFeiShu(null); + break; + default: + Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show(); + break; } }); builder.show(); @@ -246,6 +228,7 @@ public class SenderActivity extends AppCompatActivity { } //钉钉机器人 + @SuppressLint("SimpleDateFormat") private void setDingDing(final SenderModel senderModel) { DingDingSettingVo dingDingSettingVo = null; //try phrase json setting @@ -268,97 +251,89 @@ public class SenderActivity extends AppCompatActivity { if (dingDingSettingVo != null) editTextDingdingSecret.setText(dingDingSettingVo.getSecret()); final EditText editTextDingdingAtMobiles = view1.findViewById(R.id.editTextDingdingAtMobiles); - if (dingDingSettingVo != null && dingDingSettingVo.getAtMobils() != null) - editTextDingdingAtMobiles.setText(dingDingSettingVo.getAtMobils()); - final Switch switchDingdingAtAll = view1.findViewById(R.id.switchDingdingAtAll); + if (dingDingSettingVo != null && dingDingSettingVo.getAtMobiles() != null) + editTextDingdingAtMobiles.setText(dingDingSettingVo.getAtMobiles()); + @SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchDingdingAtAll = view1.findViewById(R.id.switchDingdingAtAll); if (dingDingSettingVo != null && dingDingSettingVo.getAtAll() != null) switchDingdingAtAll.setChecked(dingDingSettingVo.getAtAll()); - Button buttondingdingok = view1.findViewById(R.id.buttondingdingok); - Button buttondingdingdel = view1.findViewById(R.id.buttondingdingdel); - Button buttondingdingtest = view1.findViewById(R.id.buttondingdingtest); + Button buttonDingdingOk = view1.findViewById(R.id.buttonDingdingOk); + Button buttonDingdingDel = view1.findViewById(R.id.buttonDingdingDel); + Button buttonDingdingTest = view1.findViewById(R.id.buttonDingdingTest); alertDialog71 .setTitle(R.string.setdingdingtitle) .setIcon(R.mipmap.dingding) .setView(view1) .create(); final AlertDialog show = alertDialog71.show(); - buttondingdingok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { + buttonDingdingOk.setOnClickListener(view -> { - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextDingdingName.getText().toString()); - newSenderModel.setType(TYPE_DINGDING); - newSenderModel.setStatus(STATUS_ON); - DingDingSettingVo dingDingSettingVonew = new DingDingSettingVo( - editTextDingdingToken.getText().toString(), - editTextDingdingSecret.getText().toString(), - editTextDingdingAtMobiles.getText().toString(), - switchDingdingAtAll.isChecked()); - newSenderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVonew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextDingdingName.getText().toString()); + newSenderModel.setType(TYPE_DINGDING); + newSenderModel.setStatus(STATUS_ON); + DingDingSettingVo dingDingSettingVoNew = new DingDingSettingVo( + editTextDingdingToken.getText().toString(), + editTextDingdingSecret.getText().toString(), + editTextDingdingAtMobiles.getText().toString(), + switchDingdingAtAll.isChecked()); + newSenderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); // adapter.add(newSenderModel); - } else { - senderModel.setName(editTextDingdingName.getText().toString()); - senderModel.setType(TYPE_DINGDING); - senderModel.setStatus(STATUS_ON); - DingDingSettingVo dingDingSettingVonew = new DingDingSettingVo( - editTextDingdingToken.getText().toString(), - editTextDingdingSecret.getText().toString(), - editTextDingdingAtMobiles.getText().toString(), - switchDingdingAtAll.isChecked()); - senderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVonew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); + } else { + senderModel.setName(editTextDingdingName.getText().toString()); + senderModel.setType(TYPE_DINGDING); + senderModel.setStatus(STATUS_ON); + DingDingSettingVo dingDingSettingVoNew = new DingDingSettingVo( + editTextDingdingToken.getText().toString(), + editTextDingdingSecret.getText().toString(), + editTextDingdingAtMobiles.getText().toString(), + switchDingdingAtAll.isChecked()); + senderModel.setJsonSetting(JSON.toJSONString(dingDingSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); // adapter.update(senderModel,position); - } - - - show.dismiss(); - - } + + + show.dismiss(); + + }); - buttondingdingdel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); + buttonDingdingDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); // adapter.del(position); - } - show.dismiss(); } + show.dismiss(); }); - buttondingdingtest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String token = editTextDingdingToken.getText().toString(); - String secret = editTextDingdingSecret.getText().toString(); - String atMobiles = editTextDingdingAtMobiles.getText().toString(); - Boolean atAll = switchDingdingAtAll.isChecked(); - if (token != null && !token.isEmpty()) { - try { - SenderDingdingMsg.sendMsg(0, handler, token, secret, atMobiles, atAll, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show(); + buttonDingdingTest.setOnClickListener(view -> { + String token = editTextDingdingToken.getText().toString(); + String secret = editTextDingdingSecret.getText().toString(); + String atMobiles = editTextDingdingAtMobiles.getText().toString(); + Boolean atAll = switchDingdingAtAll.isChecked(); + if (!token.isEmpty()) { + try { + SenderDingdingMsg.sendMsg(0, handler, token, secret, atMobiles, atAll, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show(); } }); } //邮箱 + @SuppressLint("SimpleDateFormat") private void setEmail(final SenderModel senderModel) { EmailSettingVo emailSettingVo = null; //try phrase json setting @@ -379,7 +354,7 @@ public class SenderActivity extends AppCompatActivity { final EditText editTextEmailPort = view1.findViewById(R.id.editTextEmailPort); if (emailSettingVo != null) editTextEmailPort.setText(emailSettingVo.getPort()); - final Switch switchEmailSSl = view1.findViewById(R.id.switchEmailSSl); + @SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchEmailSSl = view1.findViewById(R.id.switchEmailSSl); if (emailSettingVo != null) switchEmailSSl.setChecked(emailSettingVo.getSsl()); final EditText editTextEmailFromAdd = view1.findViewById(R.id.editTextEmailFromAdd); if (emailSettingVo != null) editTextEmailFromAdd.setText(emailSettingVo.getFromEmail()); @@ -390,9 +365,9 @@ public class SenderActivity extends AppCompatActivity { final EditText editTextEmailToAdd = view1.findViewById(R.id.editTextEmailToAdd); if (emailSettingVo != null) editTextEmailToAdd.setText(emailSettingVo.getToEmail()); - Button buttonemailok = view1.findViewById(R.id.buttonemailok); - Button buttonemaildel = view1.findViewById(R.id.buttonemaildel); - Button buttonemailtest = view1.findViewById(R.id.buttonemailtest); + Button buttonEmailOk = view1.findViewById(R.id.buttonEmailOk); + Button buttonEmailDel = view1.findViewById(R.id.buttonEmailDel); + Button buttonEmailTest = view1.findViewById(R.id.buttonEmailTest); alertDialog71 .setTitle(R.string.setemailtitle) .setIcon(R.mipmap.email) @@ -400,88 +375,79 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonemailok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextEmailName.getText().toString()); - newSenderModel.setType(TYPE_EMAIL); - newSenderModel.setStatus(STATUS_ON); - EmailSettingVo emailSettingVonew = new EmailSettingVo( - editTextEmailHost.getText().toString(), - editTextEmailPort.getText().toString(), - switchEmailSSl.isChecked(), - editTextEmailFromAdd.getText().toString(), - editTextEmailNickname.getText().toString(), - editTextEmailPsw.getText().toString(), - editTextEmailToAdd.getText().toString() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(emailSettingVonew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextEmailName.getText().toString()); - senderModel.setType(TYPE_EMAIL); - senderModel.setStatus(STATUS_ON); - EmailSettingVo emailSettingVonew = new EmailSettingVo( - editTextEmailHost.getText().toString(), - editTextEmailPort.getText().toString(), - switchEmailSSl.isChecked(), - editTextEmailFromAdd.getText().toString(), - editTextEmailNickname.getText().toString(), - editTextEmailPsw.getText().toString(), - editTextEmailToAdd.getText().toString() - ); - senderModel.setJsonSetting(JSON.toJSONString(emailSettingVonew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); - + buttonEmailOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextEmailName.getText().toString()); + newSenderModel.setType(TYPE_EMAIL); + newSenderModel.setStatus(STATUS_ON); + EmailSettingVo emailSettingVoNew = new EmailSettingVo( + editTextEmailHost.getText().toString(), + editTextEmailPort.getText().toString(), + switchEmailSSl.isChecked(), + editTextEmailFromAdd.getText().toString(), + editTextEmailNickname.getText().toString(), + editTextEmailPsw.getText().toString(), + editTextEmailToAdd.getText().toString() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextEmailName.getText().toString()); + senderModel.setType(TYPE_EMAIL); + senderModel.setStatus(STATUS_ON); + EmailSettingVo emailSettingVoNew = new EmailSettingVo( + editTextEmailHost.getText().toString(), + editTextEmailPort.getText().toString(), + switchEmailSSl.isChecked(), + editTextEmailFromAdd.getText().toString(), + editTextEmailNickname.getText().toString(), + editTextEmailPsw.getText().toString(), + editTextEmailToAdd.getText().toString() + ); + senderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + + }); - buttonemaildel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonEmailDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonemailtest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String host = editTextEmailHost.getText().toString(); - String port = editTextEmailPort.getText().toString(); - Boolean ssl = switchEmailSSl.isChecked(); - String fromemail = editTextEmailFromAdd.getText().toString(); - String pwd = editTextEmailPsw.getText().toString(); - String toemail = editTextEmailToAdd.getText().toString(); + buttonEmailTest.setOnClickListener(view -> { + String host = editTextEmailHost.getText().toString(); + String port = editTextEmailPort.getText().toString(); + boolean ssl = switchEmailSSl.isChecked(); + String fromEmail = editTextEmailFromAdd.getText().toString(); + String pwd = editTextEmailPsw.getText().toString(); + String toEmail = editTextEmailToAdd.getText().toString(); - String nickname = editTextEmailNickname.getText().toString(); - if (nickname == null || nickname.equals("")) { - nickname = "SmsForwarder"; - } + String nickname = editTextEmailNickname.getText().toString(); + if (nickname.equals("")) { + nickname = "SmsForwarder"; + } - if (!host.isEmpty() && !port.isEmpty() && !fromemail.isEmpty() && !pwd.isEmpty() && !toemail.isEmpty()) { - try { - SenderMailMsg.sendEmail(0, handler, host, port, ssl, fromemail, nickname, pwd, toemail, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "邮箱参数不完整", Toast.LENGTH_LONG).show(); + if (!host.isEmpty() && !port.isEmpty() && !fromEmail.isEmpty() && !pwd.isEmpty() && !toEmail.isEmpty()) { + try { + SenderMailMsg.sendEmail(0, handler, host, port, ssl, fromEmail, nickname, pwd, toEmail, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "邮箱参数不完整", Toast.LENGTH_LONG).show(); } }); } @@ -515,64 +481,55 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonBarkOk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextBarkName.getText().toString()); - newSenderModel.setType(TYPE_BARK); - newSenderModel.setStatus(STATUS_ON); - BarkSettingVo barkSettingVoNew = new BarkSettingVo( - editTextBarkServer.getText().toString() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextBarkName.getText().toString()); - senderModel.setType(TYPE_BARK); - senderModel.setStatus(STATUS_ON); - BarkSettingVo barkSettingVoNew = new BarkSettingVo( - editTextBarkServer.getText().toString() - ); - senderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonBarkOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextBarkName.getText().toString()); + newSenderModel.setType(TYPE_BARK); + newSenderModel.setStatus(STATUS_ON); + BarkSettingVo barkSettingVoNew = new BarkSettingVo( + editTextBarkServer.getText().toString() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextBarkName.getText().toString()); + senderModel.setType(TYPE_BARK); + senderModel.setStatus(STATUS_ON); + BarkSettingVo barkSettingVoNew = new BarkSettingVo( + editTextBarkServer.getText().toString() + ); + senderModel.setJsonSetting(JSON.toJSONString(barkSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + }); - buttonBarkDel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonBarkDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonBarkTest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String barkServer = editTextBarkServer.getText().toString(); - if (!barkServer.isEmpty()) { - try { - SenderBarkMsg.sendMsg(0, handler, barkServer, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服", "测试分组"); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "bark-server 不能为空", Toast.LENGTH_LONG).show(); + buttonBarkTest.setOnClickListener(view -> { + String barkServer = editTextBarkServer.getText().toString(); + if (!barkServer.isEmpty()) { + try { + SenderBarkMsg.sendMsg(0, handler, barkServer, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服", "测试分组"); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "bark-server 不能为空", Toast.LENGTH_LONG).show(); } }); } @@ -607,69 +564,61 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonServerChanOk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextServerChanName.getText().toString()); - newSenderModel.setType(TYPE_SERVER_CHAN); - newSenderModel.setStatus(STATUS_ON); - ServerChanSettingVo serverchanSettingVoNew = new ServerChanSettingVo( - editTextServerChanSendKey.getText().toString() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(serverchanSettingVoNew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextServerChanName.getText().toString()); - senderModel.setType(TYPE_SERVER_CHAN); - senderModel.setStatus(STATUS_ON); - ServerChanSettingVo serverchanSettingVoNew = new ServerChanSettingVo( - editTextServerChanSendKey.getText().toString() - ); - senderModel.setJsonSetting(JSON.toJSONString(serverchanSettingVoNew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonServerChanOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextServerChanName.getText().toString()); + newSenderModel.setType(TYPE_SERVER_CHAN); + newSenderModel.setStatus(STATUS_ON); + ServerChanSettingVo serverChanSettingVoNew = new ServerChanSettingVo( + editTextServerChanSendKey.getText().toString() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(serverChanSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextServerChanName.getText().toString()); + senderModel.setType(TYPE_SERVER_CHAN); + senderModel.setStatus(STATUS_ON); + ServerChanSettingVo serverChanSettingVoNew = new ServerChanSettingVo( + editTextServerChanSendKey.getText().toString() + ); + senderModel.setJsonSetting(JSON.toJSONString(serverChanSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + }); - buttonServerChanDel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonServerChanDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonServerChanTest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String serverchanServer = editTextServerChanSendKey.getText().toString(); - if (!serverchanServer.isEmpty()) { - try { - SenderServerChanMsg.sendMsg(0, handler, serverchanServer, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "Server酱·Turbo版的 SendKey 不能为空", Toast.LENGTH_LONG).show(); + buttonServerChanTest.setOnClickListener(view -> { + String serverChanServer = editTextServerChanSendKey.getText().toString(); + if (!serverChanServer.isEmpty()) { + try { + SenderServerChanMsg.sendMsg(0, handler, serverChanServer, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "Server酱·Turbo版的 SendKey 不能为空", Toast.LENGTH_LONG).show(); } }); } //webhook + @SuppressLint("SimpleDateFormat") private void setWebNotify(final SenderModel senderModel) { WebNotifySettingVo webNotifySettingVo = null; //try phrase json setting @@ -691,12 +640,12 @@ public class SenderActivity extends AppCompatActivity { if (webNotifySettingVo != null) editTextWebNotifyWebParams.setText(webNotifySettingVo.getWebParams()); final EditText editTextWebNotifySecret = view1.findViewById(R.id.editTextWebNotifySecret); if (webNotifySettingVo != null) editTextWebNotifySecret.setText(webNotifySettingVo.getSecret()); - final RadioGroup radioGroupWebNotifyMethod = (RadioGroup) view1.findViewById(R.id.radioGroupWebNotifyMethod); + final RadioGroup radioGroupWebNotifyMethod = view1.findViewById(R.id.radioGroupWebNotifyMethod); if (webNotifySettingVo != null) radioGroupWebNotifyMethod.check(webNotifySettingVo.getWebNotifyMethodCheckId()); - Button buttonbebnotifyok = view1.findViewById(R.id.buttonbebnotifyok); - Button buttonbebnotifydel = view1.findViewById(R.id.buttonbebnotifydel); - Button buttonbebnotifytest = view1.findViewById(R.id.buttonbebnotifytest); + Button buttonWebNotifyOk = view1.findViewById(R.id.buttonWebNotifyOk); + Button buttonWebNotifyDel = view1.findViewById(R.id.buttonWebNotifyDel); + Button buttonWebNotifyTest = view1.findViewById(R.id.buttonWebNotifyTest); alertDialog71 .setTitle(R.string.setwebnotifytitle) .setIcon(R.mipmap.webhook) @@ -704,67 +653,59 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonbebnotifyok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - WebNotifySettingVo webNotifySettingVoNew = new WebNotifySettingVo( - editTextWebNotifyWebServer.getText().toString(), - editTextWebNotifySecret.getText().toString(), - (radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"), - editTextWebNotifyWebParams.getText().toString() - ); - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextWebNotifyName.getText().toString()); - newSenderModel.setType(TYPE_WEB_NOTIFY); - newSenderModel.setStatus(STATUS_ON); - newSenderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew)); - SenderUtil.addSender(newSenderModel); - } else { - senderModel.setName(editTextWebNotifyName.getText().toString()); - senderModel.setType(TYPE_WEB_NOTIFY); - senderModel.setStatus(STATUS_ON); - senderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew)); - SenderUtil.updateSender(senderModel); - } + buttonWebNotifyOk.setOnClickListener(view -> { + WebNotifySettingVo webNotifySettingVoNew = new WebNotifySettingVo( + editTextWebNotifyWebServer.getText().toString(), + editTextWebNotifySecret.getText().toString(), + (radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"), + editTextWebNotifyWebParams.getText().toString() + ); + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextWebNotifyName.getText().toString()); + newSenderModel.setType(TYPE_WEB_NOTIFY); + newSenderModel.setStatus(STATUS_ON); + newSenderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew)); + SenderUtil.addSender(newSenderModel); + } else { + senderModel.setName(editTextWebNotifyName.getText().toString()); + senderModel.setType(TYPE_WEB_NOTIFY); + senderModel.setStatus(STATUS_ON); + senderModel.setJsonSetting(JSON.toJSONString(webNotifySettingVoNew)); + SenderUtil.updateSender(senderModel); + } + initSenders(); + adapter.update(senderModels); + show.dismiss(); + }); + buttonWebNotifyDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); initSenders(); - adapter.update(senderModels); - show.dismiss(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonbebnotifydel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); - } - }); - buttonbebnotifytest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String webServer = editTextWebNotifyWebServer.getText().toString(); - String webParams = editTextWebNotifyWebParams.getText().toString(); - String secret = editTextWebNotifySecret.getText().toString(); - String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"; - if (!webServer.isEmpty()) { - try { - SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams, secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "WebServer 不能为空", Toast.LENGTH_LONG).show(); + buttonWebNotifyTest.setOnClickListener(view -> { + String webServer = editTextWebNotifyWebServer.getText().toString(); + String webParams = editTextWebNotifyWebParams.getText().toString(); + String secret = editTextWebNotifySecret.getText().toString(); + String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"; + if (!webServer.isEmpty()) { + try { + SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams, secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "WebServer 不能为空", Toast.LENGTH_LONG).show(); } }); } //企业微信群机器人 + @SuppressLint("SimpleDateFormat") private void setQYWXGroupRobot(final SenderModel senderModel) { QYWXGroupRobotSettingVo qywxGroupRobotSettingVo = null; //try phrase json setting @@ -794,69 +735,61 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonQyWxGroupRobotOk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextQYWXGroupRobotName.getText().toString()); - newSenderModel.setType(TYPE_QYWX_GROUP_ROBOT); - newSenderModel.setStatus(STATUS_ON); - QYWXGroupRobotSettingVo qywxGroupRobotSettingVoNew = new QYWXGroupRobotSettingVo( - editTextQYWXGroupRobotWebHook.getText().toString() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextQYWXGroupRobotName.getText().toString()); - senderModel.setType(TYPE_QYWX_GROUP_ROBOT); - senderModel.setStatus(STATUS_ON); - QYWXGroupRobotSettingVo qywxGroupRobotSettingVoNew = new QYWXGroupRobotSettingVo( - editTextQYWXGroupRobotWebHook.getText().toString() - ); - senderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonQyWxGroupRobotOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextQYWXGroupRobotName.getText().toString()); + newSenderModel.setType(TYPE_QYWX_GROUP_ROBOT); + newSenderModel.setStatus(STATUS_ON); + QYWXGroupRobotSettingVo qywxGroupRobotSettingVoNew = new QYWXGroupRobotSettingVo( + editTextQYWXGroupRobotWebHook.getText().toString() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextQYWXGroupRobotName.getText().toString()); + senderModel.setType(TYPE_QYWX_GROUP_ROBOT); + senderModel.setStatus(STATUS_ON); + QYWXGroupRobotSettingVo qywxGroupRobotSettingVoNew = new QYWXGroupRobotSettingVo( + editTextQYWXGroupRobotWebHook.getText().toString() + ); + senderModel.setJsonSetting(JSON.toJSONString(qywxGroupRobotSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + }); - buttonQyWxGroupRobotDel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonQyWxGroupRobotDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonQyWxGroupRobotTest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String webHook = editTextQYWXGroupRobotWebHook.getText().toString(); - if (!webHook.isEmpty()) { - try { - SenderQyWxGroupRobotMsg.sendMsg(0, handler, webHook, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "webHook 不能为空", Toast.LENGTH_LONG).show(); + buttonQyWxGroupRobotTest.setOnClickListener(view -> { + String webHook = editTextQYWXGroupRobotWebHook.getText().toString(); + if (!webHook.isEmpty()) { + try { + SenderQyWxGroupRobotMsg.sendMsg(0, handler, webHook, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "webHook 不能为空", Toast.LENGTH_LONG).show(); } }); } //企业微信应用 + @SuppressLint({"SimpleDateFormat", "SetTextI18n"}) private void setQYWXApp(final SenderModel senderModel) { QYWXAppSettingVo QYWXAppSettingVo = null; //try phrase json setting @@ -877,112 +810,100 @@ public class SenderActivity extends AppCompatActivity { final EditText editTextQYWXAppSecret = view1.findViewById(R.id.editTextQYWXAppSecret); final LinearLayout linearLayoutQYWXAppToUser = view1.findViewById(R.id.linearLayoutQYWXAppToUser); final EditText editTextQYWXAppToUser = view1.findViewById(R.id.editTextQYWXAppToUser); - final Switch switchQYWXAppAtAll = view1.findViewById(R.id.switchQYWXAppAtAll); + @SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchQYWXAppAtAll = view1.findViewById(R.id.switchQYWXAppAtAll); if (QYWXAppSettingVo != null) { editTextQYWXAppCorpID.setText(QYWXAppSettingVo.getCorpID()); editTextQYWXAppAgentID.setText(QYWXAppSettingVo.getAgentID()); editTextQYWXAppSecret.setText(QYWXAppSettingVo.getSecret()); editTextQYWXAppToUser.setText(QYWXAppSettingVo.getToUser()); switchQYWXAppAtAll.setChecked(QYWXAppSettingVo.getAtAll()); - linearLayoutQYWXAppToUser.setVisibility((Boolean) QYWXAppSettingVo.getAtAll() ? View.GONE : View.VISIBLE); + linearLayoutQYWXAppToUser.setVisibility(QYWXAppSettingVo.getAtAll() ? View.GONE : View.VISIBLE); } - switchQYWXAppAtAll.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - linearLayoutQYWXAppToUser.setVisibility(View.GONE); - editTextQYWXAppToUser.setText("@all"); - } else { - linearLayoutQYWXAppToUser.setVisibility(View.VISIBLE); - editTextQYWXAppToUser.setText(""); - } - Log.d(TAG, "onCheckedChanged:" + isChecked); + switchQYWXAppAtAll.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (isChecked) { + linearLayoutQYWXAppToUser.setVisibility(View.GONE); + editTextQYWXAppToUser.setText("@all"); + } else { + linearLayoutQYWXAppToUser.setVisibility(View.VISIBLE); + editTextQYWXAppToUser.setText(""); } + Log.d(TAG, "onCheckedChanged:" + isChecked); }); - Button buttonQYWXAppok = view1.findViewById(R.id.buttonQYWXAppOk); - Button buttonQYWXAppdel = view1.findViewById(R.id.buttonQYWXAppDel); - Button buttonQYWXApptest = view1.findViewById(R.id.buttonQYWXAppTest); + Button buttonQYWXAppOk = view1.findViewById(R.id.buttonQYWXAppOk); + Button buttonQYWXAppDel = view1.findViewById(R.id.buttonQYWXAppDel); + Button buttonQYWXAppTest = view1.findViewById(R.id.buttonQYWXAppTest); alertDialog71 .setTitle(R.string.setqywxapptitle) .setIcon(R.mipmap.qywxapp) .setView(view1) .create(); final AlertDialog show = alertDialog71.show(); - buttonQYWXAppok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String toUser = editTextQYWXAppToUser.getText().toString(); - if (toUser == null || toUser.isEmpty()) { - Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show(); - editTextQYWXAppToUser.setFocusable(true); - editTextQYWXAppToUser.requestFocus(); - return; - } - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextQYWXAppName.getText().toString()); - newSenderModel.setType(TYPE_QYWX_APP); - newSenderModel.setStatus(STATUS_ON); - QYWXAppSettingVo QYWXAppSettingVonew = new QYWXAppSettingVo( - editTextQYWXAppCorpID.getText().toString(), - editTextQYWXAppAgentID.getText().toString(), - editTextQYWXAppSecret.getText().toString(), - editTextQYWXAppToUser.getText().toString(), - switchQYWXAppAtAll.isChecked()); - newSenderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVonew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextQYWXAppName.getText().toString()); - senderModel.setType(TYPE_QYWX_APP); - senderModel.setStatus(STATUS_ON); - QYWXAppSettingVo QYWXAppSettingVonew = new QYWXAppSettingVo( - editTextQYWXAppCorpID.getText().toString(), - editTextQYWXAppAgentID.getText().toString(), - editTextQYWXAppSecret.getText().toString(), - editTextQYWXAppToUser.getText().toString(), - switchQYWXAppAtAll.isChecked()); - senderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVonew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonQYWXAppOk.setOnClickListener(view -> { + String toUser = editTextQYWXAppToUser.getText().toString(); + if (toUser.isEmpty()) { + Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show(); + editTextQYWXAppToUser.setFocusable(true); + editTextQYWXAppToUser.requestFocus(); + return; } - }); - buttonQYWXAppdel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextQYWXAppName.getText().toString()); + newSenderModel.setType(TYPE_QYWX_APP); + newSenderModel.setStatus(STATUS_ON); + QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo( + editTextQYWXAppCorpID.getText().toString(), + editTextQYWXAppAgentID.getText().toString(), + editTextQYWXAppSecret.getText().toString(), + editTextQYWXAppToUser.getText().toString(), + switchQYWXAppAtAll.isChecked()); + newSenderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextQYWXAppName.getText().toString()); + senderModel.setType(TYPE_QYWX_APP); + senderModel.setStatus(STATUS_ON); + QYWXAppSettingVo QYWXAppSettingVoNew = new QYWXAppSettingVo( + editTextQYWXAppCorpID.getText().toString(), + editTextQYWXAppAgentID.getText().toString(), + editTextQYWXAppSecret.getText().toString(), + editTextQYWXAppToUser.getText().toString(), + switchQYWXAppAtAll.isChecked()); + senderModel.setJsonSetting(JSON.toJSONString(QYWXAppSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); }); - buttonQYWXApptest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String cropID = editTextQYWXAppCorpID.getText().toString(); - String agentID = editTextQYWXAppAgentID.getText().toString(); - String secret = editTextQYWXAppSecret.getText().toString(); - String toUser = editTextQYWXAppToUser.getText().toString(); - //Boolean atAll = switchQYWXAppAtAll.isChecked(); - if (toUser != null && !toUser.isEmpty()) { - try { - SenderQyWxAppMsg.sendMsg(0, handler, cropID, agentID, secret, toUser, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())), true); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show(); + buttonQYWXAppDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); + } + show.dismiss(); + }); + buttonQYWXAppTest.setOnClickListener(view -> { + String cropID = editTextQYWXAppCorpID.getText().toString(); + String agentID = editTextQYWXAppAgentID.getText().toString(); + String secret = editTextQYWXAppSecret.getText().toString(); + String toUser = editTextQYWXAppToUser.getText().toString(); + //Boolean atAll = switchQYWXAppAtAll.isChecked(); + if (!toUser.isEmpty()) { + try { + SenderQyWxAppMsg.sendMsg(0, handler, cropID, agentID, secret, toUser, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())), true); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "指定成员 不能为空 或者 选择@all", Toast.LENGTH_LONG).show(); } }); } @@ -1020,67 +941,58 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonTelegramOk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextTelegramName.getText().toString()); - newSenderModel.setType(TYPE_TELEGRAM); - newSenderModel.setStatus(STATUS_ON); - TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo( - editTextTelegramApiToken.getText().toString(), - editTextTelegramChatId.getText().toString() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextTelegramName.getText().toString()); - senderModel.setType(TYPE_TELEGRAM); - senderModel.setStatus(STATUS_ON); - TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo( - editTextTelegramApiToken.getText().toString(), - editTextTelegramChatId.getText().toString() - ); - senderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonTelegramOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextTelegramName.getText().toString()); + newSenderModel.setType(TYPE_TELEGRAM); + newSenderModel.setStatus(STATUS_ON); + TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo( + editTextTelegramApiToken.getText().toString(), + editTextTelegramChatId.getText().toString() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextTelegramName.getText().toString()); + senderModel.setType(TYPE_TELEGRAM); + senderModel.setStatus(STATUS_ON); + TelegramSettingVo telegramSettingVoNew = new TelegramSettingVo( + editTextTelegramApiToken.getText().toString(), + editTextTelegramChatId.getText().toString() + ); + senderModel.setJsonSetting(JSON.toJSONString(telegramSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + }); - buttonTelegramDel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonTelegramDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonTelegramTest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String apiToken = editTextTelegramApiToken.getText().toString(); - String chatId = editTextTelegramChatId.getText().toString(); - if (!apiToken.isEmpty() && !chatId.isEmpty()) { - try { - SenderTelegramMsg.sendMsg(0, handler, apiToken, chatId, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "机器人的ApiToken 和 被通知人的ChatId 都不能为空", Toast.LENGTH_LONG).show(); + buttonTelegramTest.setOnClickListener(view -> { + String apiToken = editTextTelegramApiToken.getText().toString(); + String chatId = editTextTelegramChatId.getText().toString(); + if (!apiToken.isEmpty() && !chatId.isEmpty()) { + try { + SenderTelegramMsg.sendMsg(0, handler, apiToken, chatId, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "机器人的ApiToken 和 被通知人的ChatId 都不能为空", Toast.LENGTH_LONG).show(); } }); } @@ -1102,11 +1014,11 @@ public class SenderActivity extends AppCompatActivity { final EditText editTextSmsName = view1.findViewById(R.id.editTextSmsName); if (senderModel != null) editTextSmsName.setText(senderModel.getName()); - final RadioGroup radioGroupSmsSimSlot = (RadioGroup) view1.findViewById(R.id.radioGroupSmsSimSlot); + final RadioGroup radioGroupSmsSimSlot = view1.findViewById(R.id.radioGroupSmsSimSlot); if (smsSettingVo != null) radioGroupSmsSimSlot.check(smsSettingVo.getSmsSimSlotCheckId()); final EditText editTextSmsMobiles = view1.findViewById(R.id.editTextSmsMobiles); if (smsSettingVo != null) editTextSmsMobiles.setText(smsSettingVo.getMobiles()); - final Switch switchSmsOnlyNoNetwork = view1.findViewById(R.id.switchSmsOnlyNoNetwork); + @SuppressLint("UseSwitchCompatOrMaterialCode") final Switch switchSmsOnlyNoNetwork = view1.findViewById(R.id.switchSmsOnlyNoNetwork); if (smsSettingVo != null) switchSmsOnlyNoNetwork.setChecked(smsSettingVo.getOnlyNoNetwork()); Button buttonSmsOk = view1.findViewById(R.id.buttonSmsOk); @@ -1119,78 +1031,70 @@ public class SenderActivity extends AppCompatActivity { .create(); final AlertDialog show = alertDialog71.show(); - buttonSmsOk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextSmsName.getText().toString()); - newSenderModel.setType(TYPE_SMS); - newSenderModel.setStatus(STATUS_ON); - SmsSettingVo smsSettingVoNew = new SmsSettingVo( - newSenderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()), - editTextSmsMobiles.getText().toString(), - switchSmsOnlyNoNetwork.isChecked() - ); - newSenderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextSmsName.getText().toString()); - senderModel.setType(TYPE_SMS); - senderModel.setStatus(STATUS_ON); - SmsSettingVo smsSettingVoNew = new SmsSettingVo( - senderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()), - editTextSmsMobiles.getText().toString(), - switchSmsOnlyNoNetwork.isChecked() - ); - senderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - - show.dismiss(); + buttonSmsOk.setOnClickListener(view -> { + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextSmsName.getText().toString()); + newSenderModel.setType(TYPE_SMS); + newSenderModel.setStatus(STATUS_ON); + SmsSettingVo smsSettingVoNew = new SmsSettingVo( + newSenderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()), + editTextSmsMobiles.getText().toString(), + switchSmsOnlyNoNetwork.isChecked() + ); + newSenderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextSmsName.getText().toString()); + senderModel.setType(TYPE_SMS); + senderModel.setStatus(STATUS_ON); + SmsSettingVo smsSettingVoNew = new SmsSettingVo( + senderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()), + editTextSmsMobiles.getText().toString(), + switchSmsOnlyNoNetwork.isChecked() + ); + senderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + + show.dismiss(); + }); - buttonSmsDel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonSmsDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonSmsTest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - int simSlot = 0; - if (R.id.btnSmsSimSlot2 == radioGroupSmsSimSlot.getCheckedRadioButtonId()) { - simSlot = 1; - } - String mobiles = editTextSmsMobiles.getText().toString(); - Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked(); - if (!mobiles.isEmpty() && !mobiles.isEmpty()) { - try { - SenderSmsMsg.sendMsg(0, handler, simSlot, mobiles, onlyNoNetwork, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "接收手机号不能为空", Toast.LENGTH_LONG).show(); + buttonSmsTest.setOnClickListener(view -> { + int simSlot = 0; + if (R.id.btnSmsSimSlot2 == radioGroupSmsSimSlot.getCheckedRadioButtonId()) { + simSlot = 1; + } + String mobiles = editTextSmsMobiles.getText().toString(); + Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked(); + if (!mobiles.isEmpty()) { + try { + SenderSmsMsg.sendMsg(0, handler, simSlot, mobiles, onlyNoNetwork, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服"); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "接收手机号不能为空", Toast.LENGTH_LONG).show(); } }); } //飞书机器人 + @SuppressLint("SimpleDateFormat") private void setFeiShu(final SenderModel senderModel) { FeiShuSettingVo feiShuSettingVo = null; //try phrase json setting @@ -1213,74 +1117,65 @@ public class SenderActivity extends AppCompatActivity { if (feiShuSettingVo != null) editTextFeishuSecret.setText(feiShuSettingVo.getSecret()); - Button buttonfeishuok = view1.findViewById(R.id.buttonfeishuok); - Button buttonfeishudel = view1.findViewById(R.id.buttonfeishudel); - Button buttonfeishutest = view1.findViewById(R.id.buttonfeishutest); + Button buttonFeishuOk = view1.findViewById(R.id.buttonFeishuOk); + Button buttonFeishuDel = view1.findViewById(R.id.buttonFeishuDel); + Button buttonFeishuTest = view1.findViewById(R.id.buttonFeishuTest); alertDialog71 .setTitle(R.string.setfeishutitle) .setIcon(R.mipmap.feishu) .setView(view1) .create(); final AlertDialog show = alertDialog71.show(); - buttonfeishuok.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { + buttonFeishuOk.setOnClickListener(view -> { - if (senderModel == null) { - SenderModel newSenderModel = new SenderModel(); - newSenderModel.setName(editTextFeishuName.getText().toString()); - newSenderModel.setType(TYPE_FEISHU); - newSenderModel.setStatus(STATUS_ON); - FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo( - editTextFeishuWebhook.getText().toString(), - editTextFeishuSecret.getText().toString()); - newSenderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew)); - SenderUtil.addSender(newSenderModel); - initSenders(); - adapter.add(senderModels); - } else { - senderModel.setName(editTextFeishuName.getText().toString()); - senderModel.setType(TYPE_FEISHU); - senderModel.setStatus(STATUS_ON); - FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo( - editTextFeishuWebhook.getText().toString(), - editTextFeishuSecret.getText().toString()); - senderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew)); - SenderUtil.updateSender(senderModel); - initSenders(); - adapter.update(senderModels); - } - show.dismiss(); + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextFeishuName.getText().toString()); + newSenderModel.setType(TYPE_FEISHU); + newSenderModel.setStatus(STATUS_ON); + FeiShuSettingVo feiShuSettingVoNew = new FeiShuSettingVo( + editTextFeishuWebhook.getText().toString(), + editTextFeishuSecret.getText().toString()); + newSenderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVoNew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextFeishuName.getText().toString()); + senderModel.setType(TYPE_FEISHU); + senderModel.setStatus(STATUS_ON); + FeiShuSettingVo feiShuSettingVoNew = new FeiShuSettingVo( + editTextFeishuWebhook.getText().toString(), + editTextFeishuSecret.getText().toString()); + senderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVoNew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); } + show.dismiss(); }); - buttonfeishudel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (senderModel != null) { - SenderUtil.delSender(senderModel.getId()); - initSenders(); - adapter.del(senderModels); - } - show.dismiss(); + buttonFeishuDel.setOnClickListener(view -> { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); } + show.dismiss(); }); - buttonfeishutest.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String token = editTextFeishuWebhook.getText().toString(); - String secret = editTextFeishuSecret.getText().toString(); - if (token != null && !token.isEmpty()) { - try { - SenderFeishuMsg.sendMsg(0, handler, token, secret, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); - } catch (Exception e) { - Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } - } else { - Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show(); + buttonFeishuTest.setOnClickListener(view -> { + String token = editTextFeishuWebhook.getText().toString(); + String secret = editTextFeishuSecret.getText().toString(); + if (!token.isEmpty()) { + try { + SenderFeishuMsg.sendMsg(0, handler, token, secret, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); } + } else { + Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show(); } }); } 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 1a667bd0..711a03ab 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -1,11 +1,11 @@ package com.idormy.sms.forwarder; +import android.annotation.SuppressLint; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Switch; @@ -18,61 +18,58 @@ import com.idormy.sms.forwarder.utils.SettingUtil; public class SettingActivity extends AppCompatActivity { - private String TAG = "SettingActivity"; + private final String TAG = "SettingActivity"; @Override public void onCreate(Bundle savedInstanceState) { - Log.d(TAG, "oncreate"); + Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); - Switch switch_add_extra = (Switch) findViewById(R.id.switch_add_extra); + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_add_extra = findViewById(R.id.switch_add_extra); switchAddExtra(switch_add_extra); - EditText et_add_extra_device_mark = (EditText) findViewById(R.id.et_add_extra_device_mark); + 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 = (EditText) findViewById(R.id.et_add_extra_sim1); + EditText et_add_extra_sim1 = findViewById(R.id.et_add_extra_sim1); editAddExtraSim1(et_add_extra_sim1); - EditText et_add_extra_sim2 = (EditText) findViewById(R.id.et_add_extra_sim2); + EditText et_add_extra_sim2 = findViewById(R.id.et_add_extra_sim2); editAddExtraSim2(et_add_extra_sim2); - EditText et_battery_level_alarm = (EditText) findViewById(R.id.et_battery_level_alarm); + EditText et_battery_level_alarm = findViewById(R.id.et_battery_level_alarm); editBatteryLevelAlarm(et_battery_level_alarm); - EditText et_retry_delay_time1 = (EditText) findViewById(R.id.et_retry_delay_time1); + EditText et_retry_delay_time1 = findViewById(R.id.et_retry_delay_time1); editRetryDelayTime(et_retry_delay_time1, 1); - EditText et_retry_delay_time2 = (EditText) findViewById(R.id.et_retry_delay_time2); + EditText et_retry_delay_time2 = findViewById(R.id.et_retry_delay_time2); editRetryDelayTime(et_retry_delay_time2, 2); - EditText et_retry_delay_time3 = (EditText) findViewById(R.id.et_retry_delay_time3); + EditText et_retry_delay_time3 = findViewById(R.id.et_retry_delay_time3); editRetryDelayTime(et_retry_delay_time3, 3); - EditText et_retry_delay_time4 = (EditText) findViewById(R.id.et_retry_delay_time4); + EditText et_retry_delay_time4 = findViewById(R.id.et_retry_delay_time4); editRetryDelayTime(et_retry_delay_time4, 4); - EditText et_retry_delay_time5 = (EditText) findViewById(R.id.et_retry_delay_time5); + EditText et_retry_delay_time5 = findViewById(R.id.et_retry_delay_time5); editRetryDelayTime(et_retry_delay_time5, 5); - Switch switch_sms_template = (Switch) findViewById(R.id.switch_sms_template); + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_sms_template = findViewById(R.id.switch_sms_template); switchSmsTemplate(switch_sms_template); - EditText textSmsTemplate = (EditText) findViewById(R.id.text_sms_template); + EditText textSmsTemplate = findViewById(R.id.text_sms_template); editSmsTemplate(textSmsTemplate); } //设置转发附加信息 - private void switchAddExtra(Switch switch_add_extra) { + private void switchAddExtra(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_add_extra) { switch_add_extra.setChecked(SettingUtil.getSwitchAddExtra()); - switch_add_extra.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - SettingUtil.switchAddExtra(isChecked); - Log.d(TAG, "onCheckedChanged:" + isChecked); - } + switch_add_extra.setOnCheckedChangeListener((buttonView, isChecked) -> { + SettingUtil.switchAddExtra(isChecked); + Log.d(TAG, "onCheckedChanged:" + isChecked); }); } - //设置转发附加信息devicemark + //设置转发附加信息deviceMark private void editAddExtraDeviceMark(final EditText et_add_extra_device_mark) { et_add_extra_device_mark.setText(SettingUtil.getAddExtraDeviceMark()); @@ -94,7 +91,7 @@ public class SettingActivity extends AppCompatActivity { }); } - //设置转发附加信息devicemark + //设置转发附加信息deviceMark private void editAddExtraSim1(final EditText et_add_extra_sim1) { et_add_extra_sim1.setText(SettingUtil.getAddExtraSim1()); @@ -116,7 +113,7 @@ public class SettingActivity extends AppCompatActivity { }); } - //设置转发附加信息devicemark + //设置转发附加信息deviceMark private void editAddExtraSim2(final EditText et_add_extra_sim2) { et_add_extra_sim2.setText(SettingUtil.getAddExtraSim2()); @@ -180,28 +177,25 @@ public class SettingActivity extends AppCompatActivity { } //设置转发时启用自定义模版 - private void switchSmsTemplate(Switch switch_sms_template) { + private void switchSmsTemplate(@SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_sms_template) { boolean isOn = SettingUtil.getSwitchSmsTemplate(); switch_sms_template.setChecked(isOn); - final LinearLayout layout_sms_template = (LinearLayout) findViewById(R.id.layout_sms_template); + final LinearLayout layout_sms_template = findViewById(R.id.layout_sms_template); layout_sms_template.setVisibility(isOn ? View.VISIBLE : View.GONE); - final EditText textSmsTemplate = (EditText) findViewById(R.id.text_sms_template); + final EditText textSmsTemplate = findViewById(R.id.text_sms_template); - switch_sms_template.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - Log.d(TAG, "onCheckedChanged:" + isChecked); - layout_sms_template.setVisibility(isChecked ? View.VISIBLE : View.GONE); - SettingUtil.switchSmsTemplate(isChecked); - if (!isChecked) { - textSmsTemplate.setText("{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"); - } + switch_sms_template.setOnCheckedChangeListener((buttonView, isChecked) -> { + Log.d(TAG, "onCheckedChanged:" + isChecked); + layout_sms_template.setVisibility(isChecked ? View.VISIBLE : View.GONE); + SettingUtil.switchSmsTemplate(isChecked); + if (!isChecked) { + textSmsTemplate.setText("{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"); } }); } - //设置转发附加信息devicemark + //设置转发附加信息deviceMark private void editSmsTemplate(final EditText textSmsTemplate) { textSmsTemplate.setText(SettingUtil.getSmsTemplate()); @@ -224,17 +218,15 @@ public class SettingActivity extends AppCompatActivity { } //插入标签 + @SuppressLint("NonConstantResourceId") public void toInsertLabel(View v) { - EditText textSmsTemplate = (EditText) findViewById(R.id.text_sms_template); + EditText textSmsTemplate = findViewById(R.id.text_sms_template); textSmsTemplate.setFocusable(true); textSmsTemplate.requestFocus(); switch (v.getId()) { case R.id.bt_insert_sender: textSmsTemplate.append("{{来源号码}}"); return; - /*case R.id.bt_insert_receiver: - textSmsTemplate.append("{{接收号码}}"); - return;*/ case R.id.bt_insert_content: textSmsTemplate.append("{{短信内容}}"); return; @@ -248,33 +240,32 @@ public class SettingActivity extends AppCompatActivity { textSmsTemplate.append("{{设备名称}}"); return; default: - return; } } //恢复初始化配置 - public void initSetting(View v) { - Switch switch_add_extra = (Switch) findViewById(R.id.switch_add_extra); + public void initSetting(View view) { + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_add_extra = findViewById(R.id.switch_add_extra); switch_add_extra.setChecked(false); switchAddExtra(switch_add_extra); - EditText et_add_extra_device_mark = (EditText) findViewById(R.id.et_add_extra_device_mark); + EditText et_add_extra_device_mark = findViewById(R.id.et_add_extra_device_mark); et_add_extra_device_mark.setText(""); editAddExtraDeviceMark(et_add_extra_device_mark); - EditText et_add_extra_sim1 = (EditText) findViewById(R.id.et_add_extra_sim1); + EditText et_add_extra_sim1 = findViewById(R.id.et_add_extra_sim1); et_add_extra_sim1.setText(""); editAddExtraSim1(et_add_extra_sim1); - EditText et_add_extra_sim2 = (EditText) findViewById(R.id.et_add_extra_sim2); + EditText et_add_extra_sim2 = findViewById(R.id.et_add_extra_sim2); et_add_extra_sim2.setText(""); editAddExtraSim2(et_add_extra_sim2); - Switch switch_sms_template = (Switch) findViewById(R.id.switch_sms_template); + @SuppressLint("UseSwitchCompatOrMaterialCode") Switch switch_sms_template = findViewById(R.id.switch_sms_template); switch_sms_template.setChecked(false); switchSmsTemplate(switch_sms_template); - EditText textSmsTemplate = (EditText) findViewById(R.id.text_sms_template); + EditText textSmsTemplate = findViewById(R.id.text_sms_template); textSmsTemplate.setText("{{来源号码}}\n{{短信内容}}\n{{卡槽信息}}\n{{接收时间}}\n{{设备名称}}"); editSmsTemplate(textSmsTemplate); diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/LogAdapter.java b/app/src/main/java/com/idormy/sms/forwarder/adapter/LogAdapter.java index 66d14e38..f14bea3d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/LogAdapter.java +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/LogAdapter.java @@ -1,7 +1,6 @@ package com.idormy.sms.forwarder.adapter; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,8 +14,9 @@ import com.idormy.sms.forwarder.utils.aUtil; import java.util.List; +@SuppressWarnings("unused") public class LogAdapter extends ArrayAdapter { - private int resourceId; + private final int resourceId; private List list; // 适配器的构造函数,把要适配的数据传入这里 @@ -112,7 +112,7 @@ public class LogAdapter extends ArrayAdapter { } // 定义一个内部类,用于对控件的实例进行缓存 - class ViewHolder { + static class ViewHolder { TextView tLogFrom; TextView tLogContent; TextView tLogRule; diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/RuleAdapter.java b/app/src/main/java/com/idormy/sms/forwarder/adapter/RuleAdapter.java index 2cb022dd..07b24606 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/RuleAdapter.java +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/RuleAdapter.java @@ -16,7 +16,7 @@ import com.idormy.sms.forwarder.sender.SenderUtil; import java.util.List; public class RuleAdapter extends ArrayAdapter { - private int resourceId; + private final int resourceId; private List list; // 适配器的构造函数,把要适配的数据传入这里 @@ -108,7 +108,7 @@ public class RuleAdapter extends ArrayAdapter { } // 定义一个内部类,用于对控件的实例进行缓存 - class ViewHolder { + static class ViewHolder { TextView ruleMatch; TextView ruleSender; ImageView ruleSenderImage; diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderAdapter.java b/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderAdapter.java index abb25860..6cf1ecc8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderAdapter.java +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderAdapter.java @@ -13,8 +13,9 @@ import com.idormy.sms.forwarder.model.SenderModel; import java.util.List; +@SuppressWarnings("unused") public class SenderAdapter extends ArrayAdapter { - private int resourceId; + private final int resourceId; private List list; // 适配器的构造函数,把要适配的数据传入这里 @@ -120,7 +121,7 @@ public class SenderAdapter extends ArrayAdapter { } // 定义一个内部类,用于对控件的实例进行缓存 - class ViewHolder { + static class ViewHolder { ImageView senderImage; TextView senderName; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/LogModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/LogModel.java index 420098e2..0ecddf1d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/LogModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/LogModel.java @@ -1,5 +1,7 @@ package com.idormy.sms.forwarder.model; +import androidx.annotation.NonNull; + import lombok.Data; @Data @@ -17,6 +19,7 @@ public class LogModel { this.ruleId = ruleId; } + @NonNull @Override public String toString() { return "LogModel{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/PhoneBookEntity.java b/app/src/main/java/com/idormy/sms/forwarder/model/PhoneBookEntity.java new file mode 100644 index 00000000..a63163d4 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/model/PhoneBookEntity.java @@ -0,0 +1,14 @@ +package com.idormy.sms.forwarder.model; + +import lombok.Data; + +@Data +public class PhoneBookEntity { + private String name; + private String phoneNumber; + + public PhoneBookEntity(String name, String phoneNumber) { + this.name = name; + this.phoneNumber = phoneNumber; + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java index 5cb33c52..929cb507 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/RuleModel.java @@ -1,7 +1,10 @@ package com.idormy.sms.forwarder.model; +import android.annotation.SuppressLint; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.R; import com.idormy.sms.forwarder.model.vo.SmsVo; import com.idormy.sms.forwarder.utils.RuleLineUtils; @@ -14,13 +17,14 @@ import java.util.regex.PatternSyntaxException; import lombok.Data; +@SuppressWarnings({"unused", "LoopStatementThatDoesntLoop"}) @Data public class RuleModel { public static final String FILED_TRANSPOND_ALL = "transpond_all"; public static final String FILED_PHONE_NUM = "phone_num"; public static final String FILED_MSG_CONTENT = "msg_content"; public static final String FILED_MULTI_MATCH = "multi_match"; - public static final Map FILED_MAP = new HashMap(); + public static final Map FILED_MAP = new HashMap<>(); public static final String CHECK_IS = "is"; public static final String CHECK_CONTAIN = "contain"; public static final String CHECK_NOT_CONTAIN = "notcontain"; @@ -28,11 +32,11 @@ public class RuleModel { public static final String CHECK_END_WITH = "endwith"; public static final String CHECK_NOT_IS = "notis"; public static final String CHECK_REGEX = "regex"; - public static final Map CHECK_MAP = new HashMap(); + public static final Map CHECK_MAP = new HashMap<>(); public static final String CHECK_SIM_SLOT_ALL = "ALL"; public static final String CHECK_SIM_SLOT_1 = "SIM1"; public static final String CHECK_SIM_SLOT_2 = "SIM2"; - public static final Map SIM_SLOT_MAP = new HashMap(); + public static final Map SIM_SLOT_MAP = new HashMap<>(); static { FILED_MAP.put("transpond_all", "全部转发"); @@ -75,6 +79,7 @@ public class RuleModel { } } + @SuppressLint("NonConstantResourceId") public static String getRuleFiledFromCheckId(int id) { switch (id) { case R.id.btnContent: @@ -88,6 +93,7 @@ public class RuleModel { } } + @SuppressLint("NonConstantResourceId") public static String getRuleCheckFromCheckId(int id) { switch (id) { case R.id.btnContain: @@ -105,6 +111,7 @@ public class RuleModel { } } + @SuppressLint("NonConstantResourceId") public static String getRuleSimSlotFromCheckId(int id) { switch (id) { case R.id.btnSimSlot1: @@ -191,7 +198,6 @@ public class RuleModel { break; } } catch (PatternSyntaxException e) { - checked = false; Log.d(TAG, "PatternSyntaxException: "); Log.d(TAG, "Description: " + e.getDescription()); Log.d(TAG, "Index: " + e.getIndex()); @@ -265,6 +271,7 @@ public class RuleModel { } } + @NonNull @Override public String toString() { return "RuleModel{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java index 88238ff0..de2b8738 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java @@ -1,9 +1,12 @@ package com.idormy.sms.forwarder.model; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.R; import lombok.Data; +@SuppressWarnings("unused") @Data public class SenderModel { public static final int STATUS_ON = 1; @@ -98,6 +101,7 @@ public class SenderModel { } } + @NonNull @Override public String toString() { return "SenderModel{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/BarkSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/BarkSettingVo.java index 83e821bc..1430bafa 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/BarkSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/BarkSettingVo.java @@ -8,9 +8,6 @@ import lombok.Data; public class BarkSettingVo implements Serializable { private String server; - public BarkSettingVo() { - } - public BarkSettingVo(String server) { this.server = server; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/DingDingSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/DingDingSettingVo.java index bb58121b..16dac7e9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/DingDingSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/DingDingSettingVo.java @@ -8,16 +8,13 @@ import lombok.Data; public class DingDingSettingVo implements Serializable { private String token; private String secret; - private String atMobils; + private String atMobiles; private Boolean atAll; - public DingDingSettingVo() { - } - - public DingDingSettingVo(String token, String secret, String atMobils, Boolean atAll) { + public DingDingSettingVo(String token, String secret, String atMobiles, Boolean atAll) { this.token = token; this.secret = secret; - this.atMobils = atMobils; + this.atMobiles = atMobiles; this.atAll = atAll; } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/EmailSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/EmailSettingVo.java index ae0d80df..0f2b35e7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/EmailSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/EmailSettingVo.java @@ -8,15 +8,12 @@ import lombok.Data; public class EmailSettingVo implements Serializable { private String host; private String port; - private Boolean ssl = true; + private Boolean ssl; private String fromEmail; private String nickname; private String pwd; private String toEmail; - public EmailSettingVo() { - } - public EmailSettingVo(String host, String port, Boolean ssl, String fromEmail, String nickname, String pwd, String toEmail) { this.host = host; this.port = port; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java index 4ce58e87..0998c486 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java @@ -9,9 +9,6 @@ public class FeiShuSettingVo implements Serializable { private String webhook; private String secret; - public FeiShuSettingVo() { - } - public FeiShuSettingVo(String webhook, String secret) { this.webhook = webhook; this.secret = secret; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java index 9bc1a302..3ed636cd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java @@ -16,9 +16,6 @@ public class LogVo { private int forwardStatus; private String forwardResponse; - public LogVo() { - } - public LogVo(Long id, String from, String content, String simInfo, String time, String rule, int senderImageId, int forwardStatus, String forwardResponse) { this.id = id; this.from = from; @@ -33,7 +30,7 @@ public class LogVo { public int getSimImageId() { if (this.simInfo != null && !this.simInfo.isEmpty() - && this.simInfo.replace("-", "").substring(0, 4).equals("SIM2")) { + && this.simInfo.replace("-", "").startsWith("SIM2")) { return R.mipmap.sim2; } 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 155a1a89..28ba9441 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 @@ -12,9 +12,6 @@ public class QYWXAppSettingVo implements Serializable { private String toUser; private Boolean atAll; - public QYWXAppSettingVo() { - } - public QYWXAppSettingVo(String corpID, String agentID, String secret, String toUser, Boolean atAll) { this.corpID = corpID; this.agentID = agentID; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXGroupRobotSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXGroupRobotSettingVo.java index 7a00fffe..cf7e27ee 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXGroupRobotSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/QYWXGroupRobotSettingVo.java @@ -8,9 +8,6 @@ import lombok.Data; public class QYWXGroupRobotSettingVo implements Serializable { private String webHook; - public QYWXGroupRobotSettingVo() { - } - public QYWXGroupRobotSettingVo(String webHook) { this.webHook = webHook; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/RuleVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/RuleVo.java index 702844ad..d8115e3d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/RuleVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/RuleVo.java @@ -1,5 +1,8 @@ package com.idormy.sms.forwarder.model.vo; +import lombok.Data; + +@Data public class RuleVo { private String matchStr; private String senderStr; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/ServerChanSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/ServerChanSettingVo.java index b1f2eb72..43a353ff 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/ServerChanSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/ServerChanSettingVo.java @@ -8,9 +8,6 @@ import lombok.Data; public class ServerChanSettingVo implements Serializable { private String sendKey; - public ServerChanSettingVo() { - } - public ServerChanSettingVo(String sendKey) { this.sendKey = sendKey; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsSettingVo.java index 6824ee3f..ea65a2c1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsSettingVo.java @@ -12,9 +12,6 @@ public class SmsSettingVo implements Serializable { private String mobiles; private Boolean onlyNoNetwork; - public SmsSettingVo() { - } - public SmsSettingVo(int simSlot, String mobiles, Boolean onlyNoNetwork) { this.simSlot = simSlot; this.mobiles = mobiles; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java index 4f6d0c06..526d9167 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsVo.java @@ -1,5 +1,9 @@ package com.idormy.sms.forwarder.model.vo; +import android.annotation.SuppressLint; + +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.Serializable; @@ -13,10 +17,7 @@ public class SmsVo implements Serializable { String mobile; String content; Date date; - String simInfo = "SIM1_unknown_unknown"; - - public SmsVo() { - } + String simInfo; public SmsVo(String mobile, String content, Date date, String simInfo) { this.mobile = mobile; @@ -25,6 +26,7 @@ public class SmsVo implements Serializable { this.simInfo = simInfo; } + @SuppressLint("SimpleDateFormat") public String getSmsVoForSend() { boolean switchAddExtra = SettingUtil.getSwitchAddExtra(); boolean switchSmsTemplate = SettingUtil.getSwitchSmsTemplate(); @@ -46,6 +48,7 @@ public class SmsVo implements Serializable { .trim(); } + @NonNull @Override public String toString() { return "SmsVo{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/TelegramSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/TelegramSettingVo.java index 6c3a8c35..0d138af7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/TelegramSettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/TelegramSettingVo.java @@ -9,9 +9,6 @@ public class TelegramSettingVo implements Serializable { private String apiToken; private String chatId; - public TelegramSettingVo() { - } - public TelegramSettingVo(String apiToken, String chatId) { this.apiToken = apiToken; this.chatId = chatId; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/WebNotifySettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/WebNotifySettingVo.java index ef9cc0df..d7072072 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/WebNotifySettingVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/WebNotifySettingVo.java @@ -13,9 +13,6 @@ public class WebNotifySettingVo implements Serializable { private String method; private String webParams; - public WebNotifySettingVo() { - } - public WebNotifySettingVo(String webServer, String secret, String method, String webParams) { this.webServer = webServer; this.secret = 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 new file mode 100644 index 00000000..880b2dc0 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java @@ -0,0 +1,66 @@ +package com.idormy.sms.forwarder.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.util.Log; + +import com.idormy.sms.forwarder.R; +import com.idormy.sms.forwarder.model.PhoneBookEntity; +import com.idormy.sms.forwarder.model.vo.SmsVo; +import com.idormy.sms.forwarder.sender.SendUtil; +import com.idormy.sms.forwarder.utils.ContactHelper; +import com.idormy.sms.forwarder.utils.SettingUtil; + +import java.util.Date; +import java.util.List; + +public class PhoneStateReceiver extends BroadcastReceiver { + private TelephonyManager mTelephonyManager; + + @Override + public void onReceive(Context context, Intent intent) { + if (!SettingUtil.getSwitchEnablePhone()) { + return; + } + String action = intent.getAction(); + if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) { + String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); + if (mTelephonyManager == null) { + mTelephonyManager = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + } + int state = mTelephonyManager.getCallState(); + Log.d("PhoneStateReceiver", "onReceive state=" + state + " phoneNumber = " + phoneNumber); + switch (state) { + case TelephonyManager.CALL_STATE_RINGING: + if (!TextUtils.isEmpty(phoneNumber)) { + sendReceiveCallMsg(context, phoneNumber); + } + break; + case TelephonyManager.CALL_STATE_IDLE: + case TelephonyManager.CALL_STATE_OFFHOOK: + break; + } + + } + + } + + private void sendReceiveCallMsg(Context context, String phoneNumber) { + List contacts = ContactHelper.getInstance().getContactByNumber(context, phoneNumber); + String name = ""; + if (contacts != null && contacts.size() > 0) { + PhoneBookEntity phoneBookEntity = contacts.get(0); + name = phoneBookEntity.getName(); + } + if (TextUtils.isEmpty(name)) { + name = context.getString(R.string.unknown_number); + } + SmsVo smsVo = new SmsVo(phoneNumber, name + context.getString(R.string.calling), new Date(), name); + Log.d("PhoneStateReceiver", "send_msg" + smsVo.toString()); + SendUtil.send_msg(context, smsVo, 1); + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java similarity index 74% rename from app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java rename to app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java index 40969d2b..3814a8da 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java @@ -1,4 +1,4 @@ -package com.idormy.sms.forwarder.BroadCastReceiver; +package com.idormy.sms.forwarder.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -10,15 +10,13 @@ import com.idormy.sms.forwarder.service.FrontService; import com.idormy.sms.forwarder.utils.InitUtil; public class RebootBroadcastReceiver extends BroadcastReceiver { - private String TAG = "RebootBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { String receiveAction = intent.getAction(); + String TAG = "RebootBroadcastReceiver"; Log.d(TAG, "onReceive intent " + receiveAction); if (receiveAction.equals("android.intent.action.BOOT_COMPLETED")) { - Log.d(TAG, "BOOT_COMPLETED"); - InitUtil.init(context); Intent frontServiceIntent = new Intent(context, FrontService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -26,9 +24,6 @@ public class RebootBroadcastReceiver extends BroadcastReceiver { } else { context.startService(frontServiceIntent); } - //监控当前电量 - //Intent batteryServiceIntent = new Intent(context, BatteryService.class); - //context.startService(batteryServiceIntent); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java similarity index 95% rename from app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java rename to app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java index 63bbfe2d..af6e631c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsForwarderBroadcastReceiver.java @@ -1,4 +1,4 @@ -package com.idormy.sms.forwarder.BroadCastReceiver; +package com.idormy.sms.forwarder.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -20,14 +20,12 @@ import java.util.Map; import java.util.Objects; public class SmsForwarderBroadcastReceiver extends BroadcastReceiver { - private String TAG = "SmsForwarderBroadcastReceiver"; - private int intLevel; - private int intScale; @Override public void onReceive(Context context, Intent intent) { String receiveAction = intent.getAction(); + String TAG = "SmsForwarderBroadcastReceiver"; Log.d(TAG, "onReceive intent " + receiveAction); if ("android.provider.Telephony.SMS_RECEIVED".equals(receiveAction)) { try { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendHistory.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendHistory.java index 66af28ee..96530450 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendHistory.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendHistory.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.sender; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; @@ -19,10 +20,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +@SuppressWarnings({"SynchronizeOnNonFinalField", "unused", "MismatchedQueryAndUpdateOfCollection"}) public class SendHistory { - static String TAG = "SendHistory"; + static final String TAG = "SendHistory"; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; static DbHelper dbHelper; static SQLiteDatabase db; @@ -37,16 +40,17 @@ public class SendHistory { } } + @SuppressLint("MutatingSharedPrefs") public static void addHistory(String msg) { //不保存转发消息 - if (!SettingUtil.saveMsgHistory()) return; + if (SettingUtil.saveMsgHistory()) return; //保存 SharedPreferences sp = context.getSharedPreferences(Define.SP_MSG, Context.MODE_PRIVATE); Set msg_set_default = new HashSet<>(); Set msg_set; msg_set = sp.getStringSet(Define.SP_MSG_SET_KEY, msg_set_default); Log.d(TAG, "msg_set:" + msg_set.toString()); - Log.d(TAG, "msg_set:" + Integer.toString(msg_set.size())); + Log.d(TAG, "msg_set_size:" + msg_set.size()); msg_set.add(msg); sp.edit().putStringSet(Define.SP_MSG_SET_KEY, msg_set).apply(); } @@ -56,16 +60,16 @@ public class SendHistory { Set msg_set = new HashSet<>(); msg_set = sp.getStringSet(Define.SP_MSG_SET_KEY, msg_set); Log.d(TAG, "msg_set.toString()" + msg_set.toString()); - String getMsg = ""; + StringBuilder getMsg = new StringBuilder(); for (String str : msg_set) { - getMsg += str + "\n"; + getMsg.append(str).append("\n"); } - return getMsg; + return getMsg.toString(); } public static long addHistoryDb(LogModel logModel) { //不保存转发消息 - if (!SettingUtil.saveMsgHistory()) return 0; + if (SettingUtil.saveMsgHistory()) return 0; // Gets the data repository in write mode SQLiteDatabase db = dbHelper.getWritableDatabase(); @@ -101,7 +105,7 @@ public class SendHistory { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // Issue SQL statement. return db.delete(LogTable.LogEntry.TABLE_NAME, selection, selectionArgs); @@ -134,7 +138,7 @@ public class SendHistory { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // How you want the results sorted in the resulting Cursor String sortOrder = @@ -161,11 +165,11 @@ public class SendHistory { Set msg_set = new HashSet<>(); msg_set = sp.getStringSet(Define.SP_MSG_SET_KEY, msg_set); Log.d(TAG, "msg_set.toString()" + msg_set.toString()); - String getMsg = ""; + StringBuilder getMsg = new StringBuilder(); for (String str : msg_set) { - getMsg += str + "\n"; + getMsg.append(str).append("\n"); } - return getMsg; + return getMsg.toString(); } } 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 5a6c8561..97e3ea38 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 @@ -37,7 +37,7 @@ import com.idormy.sms.forwarder.utils.RuleUtil; import java.util.List; public class SendUtil { - private static String TAG = "SendUtil"; + private static final String TAG = "SendUtil"; public static void send_msg_list(Context context, List smsVoList, int simId) { Log.i(TAG, "send_msg_list size: " + smsVoList.size()); @@ -52,10 +52,10 @@ public class SendUtil { LogUtil.init(context); String key = "SIM" + simId; - List rulelist = RuleUtil.getRule(null, key); - if (!rulelist.isEmpty()) { + List ruleList = RuleUtil.getRule(null, key); + if (!ruleList.isEmpty()) { SenderUtil.init(context); - for (RuleModel ruleModel : rulelist) { + for (RuleModel ruleModel : ruleList) { //规则匹配发现需要发送 try { if (ruleModel.checkMsg(smsVo)) { @@ -114,7 +114,7 @@ public class SendUtil { DingDingSettingVo dingDingSettingVo = JSON.parseObject(senderModel.getJsonSetting(), DingDingSettingVo.class); if (dingDingSettingVo != null) { try { - SenderDingdingMsg.sendMsg(logId, handError, dingDingSettingVo.getToken(), dingDingSettingVo.getSecret(), dingDingSettingVo.getAtMobils(), dingDingSettingVo.getAtAll(), smsVo.getSmsVoForSend()); + SenderDingdingMsg.sendMsg(logId, handError, dingDingSettingVo.getToken(), dingDingSettingVo.getSecret(), dingDingSettingVo.getAtMobiles(), dingDingSettingVo.getAtAll(), smsVo.getSmsVoForSend()); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: dingding error " + e.getMessage()); @@ -235,7 +235,7 @@ public class SendUtil { SmsSettingVo smsSettingVo = JSON.parseObject(senderModel.getJsonSetting(), SmsSettingVo.class); if (smsSettingVo != null) { //仅当无网络时启用 - if (true == smsSettingVo.getOnlyNoNetwork() && 0 != NetUtil.getNetWorkStatus()) { + if (smsSettingVo.getOnlyNoNetwork() && 0 != NetUtil.getNetWorkStatus()) { String msg = "仅当无网络时启用,当前网络状态:" + NetUtil.getNetWorkStatus(); LogUtil.updateLog(logId, 0, msg); Log.d(TAG, msg); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java index 398cae38..e4d6a92e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java @@ -3,11 +3,14 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -20,9 +23,10 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderBarkMsg extends SenderBaseMsg { - static String TAG = "SenderBarkMsg"; + static final String TAG = "SenderBarkMsg"; public static void sendMsg(final long logId, final Handler handError, String barkServer, String from, String content, String groupName) throws Exception { Log.i(TAG, "sendMsg barkServer:" + barkServer + " from:" + from + " content:" + content); @@ -61,15 +65,15 @@ public class SenderBarkMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java index 0dfa8fd4..584272b1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java @@ -5,16 +5,20 @@ import android.text.TextUtils; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import javax.crypto.Mac; @@ -30,9 +34,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"ResultOfMethodCallIgnored", "rawtypes", "unchecked", "deprecation"}) public class SenderDingdingMsg extends SenderBaseMsg { - static String TAG = "SenderDingdingMsg"; + static final String TAG = "SenderDingdingMsg"; public static void sendMsg(final long logId, final Handler handError, String token, String secret, String atMobiles, Boolean atAll, String content) throws Exception { Log.i(TAG, "sendMsg token:" + token + " secret:" + secret + " atMobiles:" + atMobiles + " atAll:" + atAll + " content:" + content); @@ -45,8 +50,8 @@ public class SenderDingdingMsg extends SenderBaseMsg { Long timestamp = System.currentTimeMillis(); String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); - byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); token += "×tamp=" + timestamp + "&sign=" + sign; Log.i(TAG, "token:" + token); @@ -103,15 +108,15 @@ public class SenderDingdingMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); 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 a9af1f40..3039d82e 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 @@ -4,14 +4,18 @@ import android.os.Handler; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import javax.crypto.Mac; @@ -27,9 +31,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"ResultOfMethodCallIgnored", "rawtypes", "unchecked", "deprecation"}) public class SenderFeishuMsg extends SenderBaseMsg { - static String TAG = "SenderFeishuMsg"; + static final String TAG = "SenderFeishuMsg"; public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String content) throws Exception { Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " content:" + content); @@ -45,8 +50,8 @@ public class SenderFeishuMsg extends SenderBaseMsg { Long timestamp = System.currentTimeMillis(); String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); - byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); textMsgMap.put("timestamp", timestamp); textMsgMap.put("sign", sign); @@ -78,15 +83,15 @@ public class SenderFeishuMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java index fa37b2cf..15a66b6f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java @@ -14,12 +14,13 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; +@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderMailMsg extends SenderBaseMsg { - private static String TAG = "SenderMailMsg"; + private static final String TAG = "SenderMailMsg"; - public static void sendEmail(final long logId, final Handler handError, final String host, final String port, final boolean ssl, final String fromemail, final String nickname, final String pwd, final String toAdd, final String title, final String content) { + public static void sendEmail(final long logId, final Handler handError, final String host, final String port, final boolean ssl, final String fromEmail, final String nickname, final String pwd, final String toAdd, final String title, final String content) { - Log.d(TAG, "sendEmail: host:" + host + " port:" + port + " ssl:" + ssl + " fromemail:" + fromemail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd); + Log.d(TAG, "sendEmail: host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd); Observable .create((ObservableEmitter emitter) -> { @@ -31,7 +32,7 @@ public class SenderMailMsg extends SenderBaseMsg { //配置发件人邮件服务器参数 EmailKit.Config config = new EmailKit.Config() .setSMTP(host, Integer.parseInt(port), ssl) //设置SMTP服务器主机地址、端口和是否开启ssl - .setAccount(fromemail) //发件人邮箱 + .setAccount(fromEmail) //发件人邮箱 .setPassword(pwd); //密码或授权码 //设置一封草稿邮件 diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java index 32dbb3e3..ea845fb9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java @@ -7,6 +7,8 @@ import android.os.Handler; import android.os.Message; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.idormy.sms.forwarder.MyApplication; @@ -16,6 +18,7 @@ import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; @@ -28,9 +31,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) public class SenderQyWxAppMsg extends SenderBaseMsg { - static String TAG = "SenderQyWxAppMsg"; + static final String TAG = "SenderQyWxAppMsg"; public static void sendMsg(final long logId, final Handler handError, String corpID, String agentID, String secret, String toUser, String content, boolean forceRefresh) throws Exception { Log.i(TAG, "sendMsg corpID:" + corpID + " agentID:" + agentID + " secret:" + secret + " toUser:" + toUser + " content:" + content + " forceRefresh:" + forceRefresh); @@ -40,20 +44,20 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { } //TODO:判断access_token是否失效 - if (forceRefresh == true + if (forceRefresh || MyApplication.QyWxAccessToken == null || MyApplication.QyWxAccessToken.isEmpty() || System.currentTimeMillis() > MyApplication.QyWxAccessTokenExpiresIn) { - String gettokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"; - gettokenUrl += "corpid=" + corpID; - gettokenUrl += "&corpsecret=" + secret; - Log.d(TAG, "gettokenUrl:" + gettokenUrl); + String getTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"; + getTokenUrl += "corpid=" + corpID; + getTokenUrl += "&corpsecret=" + secret; + Log.d(TAG, "getTokenUrl:" + getTokenUrl); OkHttpClient client = new OkHttpClient(); - final Request request = new Request.Builder().url(gettokenUrl).get().build(); + final Request request = new Request.Builder().url(getTokenUrl).get().build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.d(TAG, "onFailure:" + e.getMessage()); if (handError != null) { @@ -67,14 +71,14 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { } @Override - public void onResponse(Call call, Response response) throws IOException { - final String json = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String json = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Code:" + response.code() + " Response: " + json); JSONObject jsonObject = JSON.parseObject(json); int errcode = jsonObject.getInteger("errcode"); if (errcode == 0) { MyApplication.QyWxAccessToken = jsonObject.getString("access_token"); - MyApplication.QyWxAccessTokenExpiresIn = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000; //提前2分钟过期 + MyApplication.QyWxAccessTokenExpiresIn = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000L; //提前2分钟过期 Log.d(TAG, "access_token:" + MyApplication.QyWxAccessToken); Log.d(TAG, "expires_in:" + MyApplication.QyWxAccessTokenExpiresIn); @@ -133,15 +137,15 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java index 3ad1497b..3722cb38 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; @@ -10,6 +12,7 @@ import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; @@ -22,9 +25,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { - static String TAG = "SenderQyWxGroupRobotMsg"; + static final String TAG = "SenderQyWxGroupRobotMsg"; public static void sendMsg(final long logId, final Handler handError, String webHook, String from, String content) throws Exception { Log.i(TAG, "sendMsg webHook:" + webHook + " from:" + from + " content:" + content); @@ -59,15 +63,15 @@ public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java index b5bf277a..debbe51c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java @@ -3,10 +3,13 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; +import java.util.Objects; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; @@ -19,9 +22,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderServerChanMsg extends SenderBaseMsg { - static String TAG = "SenderServerChanMsg"; + static final String TAG = "SenderServerChanMsg"; public static void sendMsg(final long logId, final Handler handError, final String sendKey, final String title, final String desp) throws Exception { Log.i(TAG, "sendMsg sendKey:" + sendKey + " title:" + title + " desp:" + desp); @@ -50,15 +54,15 @@ public class SenderServerChanMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java index ce3739c5..2976598d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java @@ -13,9 +13,10 @@ import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; +@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderSmsMsg extends SenderBaseMsg { - static String TAG = "SenderSmsMsg"; + static final String TAG = "SenderSmsMsg"; public static void sendMsg(final long logId, final Handler handError, int simSlot, String mobiles, Boolean onlyNoNetwork, String from, String text) throws Exception { Log.i(TAG, "sendMsg simSlot:" + simSlot + " mobiles:" + mobiles + " onlyNoNetwork:" + onlyNoNetwork + " from:" + from + " text:" + text); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java index 5d0848b8..07b88ef9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; @@ -10,6 +12,7 @@ import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; @@ -22,9 +25,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) public class SenderTelegramMsg extends SenderBaseMsg { - static String TAG = "SenderTelegramMsg"; + static final String TAG = "SenderTelegramMsg"; public static void sendMsg(final long logId, final Handler handError, String apiToken, String chatId, String from, String text) throws Exception { Log.i(TAG, "sendMsg apiToken:" + apiToken + " chatId:" + chatId + " text:" + text); @@ -62,15 +66,15 @@ public class SenderTelegramMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderUtil.java index b6017497..143b833c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.sender; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -14,10 +15,12 @@ import com.idormy.sms.forwarder.utils.DbHelper; import java.util.ArrayList; import java.util.List; +@SuppressWarnings({"SynchronizeOnNonFinalField", "UnusedReturnValue", "unused"}) public class SenderUtil { - static String TAG = "SenderUtil"; + static final String TAG = "SenderUtil"; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; static DbHelper dbHelper; static SQLiteDatabase db; @@ -76,7 +79,7 @@ public class SenderUtil { selectionArgList.add(String.valueOf(id)); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // Issue SQL statement. return db.delete(SenderTable.SenderEntry.TABLE_NAME, selection, selectionArgs); @@ -111,7 +114,7 @@ public class SenderUtil { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // How you want the results sorted in the resulting Cursor String sortOrder = @@ -174,7 +177,7 @@ public class SenderUtil { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // How you want the results sorted in the resulting Cursor diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java index b66466fc..337de4b5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java @@ -4,12 +4,16 @@ import android.os.Handler; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.CertUtils; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; import java.util.concurrent.TimeUnit; import javax.crypto.Mac; @@ -26,9 +30,10 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"deprecation", "ResultOfMethodCallIgnored"}) public class SenderWebNotifyMsg extends SenderBaseMsg { - static String TAG = "SenderWebNotifyMsg"; + static final String TAG = "SenderWebNotifyMsg"; public static void sendMsg(final long logId, final Handler handError, String webServer, String webParams, String secret, String method, String from, String content) throws Exception { Log.i(TAG, "sendMsg webServer:" + webServer + " webParams:" + webParams + " from:" + from + " content:" + content); @@ -42,8 +47,8 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { if (secret != null && !secret.isEmpty()) { String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); - byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); Log.i(TAG, "sign:" + sign); } @@ -102,15 +107,15 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { Call call = client.newCall(request); call.enqueue(new Callback() { @Override - public void onFailure(Call call, final IOException e) { + public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); emitter.onError(new RuntimeException("请求接口异常...")); } @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); Log.d(TAG, "Response:" + response.code() + "," + responseStr); Toast(handError, TAG, "发送状态:" + responseStr); diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java index 07ea34b6..6e790e23 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java +++ b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.service; +import android.annotation.SuppressLint; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; @@ -11,6 +12,7 @@ import android.util.Log; import java.text.SimpleDateFormat; +@SuppressWarnings("deprecation") public class BatteryService extends Service { private static final String TAG = "BatteryReceiver"; @@ -24,9 +26,9 @@ public class BatteryService extends Service { public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate--------------"); - IntentFilter batteryfilter = new IntentFilter(); - batteryfilter.addAction(Intent.ACTION_BATTERY_CHANGED); - registerReceiver(batteryReceiver, batteryfilter); + IntentFilter batteryFilter = new IntentFilter(); + batteryFilter.addAction(Intent.ACTION_BATTERY_CHANGED); + registerReceiver(batteryReceiver, batteryFilter); } @Override @@ -49,7 +51,8 @@ public class BatteryService extends Service { } // 接收电池信息更新的广播 - private BroadcastReceiver batteryReceiver = new BroadcastReceiver() { + private final BroadcastReceiver batteryReceiver = new BroadcastReceiver() { + @SuppressWarnings("unused") @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "BatteryReceiver--------------"); @@ -96,7 +99,7 @@ public class BatteryService extends Service { break; } - SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS "); + @SuppressLint("SimpleDateFormat") SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS "); String date = sDateFormat.format(new java.util.Date()); Log.i(TAG, "battery: date=" + date + ",status " + statusString diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java index 146b87ba..02aec0f0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java +++ b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.service; +import android.annotation.SuppressLint; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -39,6 +40,7 @@ public class FrontService extends Service { private static final String CHANNEL_ONE_ID = "com.idormy.sms.forwarder"; private static final String CHANNEL_ONE_NAME = "com.idormy.sms.forwarderName"; + @SuppressLint("IconColors") @Override public void onCreate() { super.onCreate(); @@ -48,11 +50,11 @@ public class FrontService extends Service { OSUtils.ROM_TYPE romType = OSUtils.getRomType(); //Log.d(TAG, "onCreate: " + romType); if (romType == OSUtils.ROM_TYPE.MIUI_ROM) { - builder.setContentTitle("短信转发器"); + builder.setContentTitle(getString(R.string.app_name)); } - builder.setContentText("根据规则转发到钉钉/微信/邮箱/bark/Server酱/Telegram/webhook等"); + builder.setContentText(getString(R.string.notification_content)); Intent intent = new Intent(this, MainActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity + @SuppressLint("UnspecifiedImmutableFlag") PendingIntent pendingIntent = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/BuildProperties.java b/app/src/main/java/com/idormy/sms/forwarder/utils/BuildProperties.java index 051458ad..c250cb33 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/BuildProperties.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/BuildProperties.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +@SuppressWarnings("rawtypes") public class BuildProperties { private static BuildProperties ourInstance; private final Properties properties; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CacheUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/CacheUtil.java index 88ce788a..7a1cfaaa 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CacheUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CacheUtil.java @@ -10,11 +10,10 @@ public class CacheUtil { /** * 获取缓存大小 * - * @param context - * @return - * @throws Exception + * @param context 上下文 + * @return 缓存大小 */ - public static String getTotalCacheSize(Context context) throws Exception { + public static String getTotalCacheSize(Context context) { long cacheSize = getFolderSize(context.getCacheDir()); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { cacheSize += getFolderSize(context.getExternalCacheDir()); @@ -24,7 +23,7 @@ public class CacheUtil { /*** * 清理所有缓存 - * @param context + * @param context 上下文 */ public static void clearAllCache(Context context) { deleteDir(context.getCacheDir()); @@ -36,29 +35,32 @@ public class CacheUtil { private static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); - for (int i = 0; i < children.length; i++) { - boolean success = deleteDir(new File(dir, children[i])); + assert children != null; + for (String child : children) { + boolean success = deleteDir(new File(dir, child)); if (!success) { return false; } } } + assert dir != null; return dir.delete(); } // 获取文件 //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据 //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据 - public static long getFolderSize(File file) throws Exception { + public static long getFolderSize(File file) { long size = 0; try { File[] fileList = file.listFiles(); - for (int i = 0; i < fileList.length; i++) { + assert fileList != null; + for (File value : fileList) { // 如果下面还有文件 - if (fileList[i].isDirectory()) { - size = size + getFolderSize(fileList[i]); + if (value.isDirectory()) { + size = size + getFolderSize(value); } else { - size = size + fileList[i].length(); + size = size + value.length(); } } } catch (Exception e) { @@ -70,8 +72,8 @@ public class CacheUtil { /** * 格式化单位 * - * @param size - * @return + * @param size 文件大小 + * @return 结果 */ public static String getFormatSize(double size) { double kiloByte = size / 1024; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java index 4e8c1284..283138bc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java @@ -1,5 +1,7 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; + import java.security.KeyStore; import java.security.SecureRandom; import java.security.cert.X509Certificate; @@ -29,10 +31,12 @@ public class CertUtils { private static TrustManager[] getTrustManager() { return new TrustManager[]{ new X509TrustManager() { + @SuppressLint("TrustAllX509TrustManager") @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } + @SuppressLint("TrustAllX509TrustManager") @Override public void checkServerTrusted(X509Certificate[] chain, String authType) { } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/ContactHelper.java b/app/src/main/java/com/idormy/sms/forwarder/utils/ContactHelper.java new file mode 100644 index 00000000..0c3a15f5 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/ContactHelper.java @@ -0,0 +1,191 @@ +package com.idormy.sms.forwarder.utils; + +import android.content.ContentResolver; +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract; + +import com.idormy.sms.forwarder.model.PhoneBookEntity; + +import java.util.ArrayList; +import java.util.List; + +/** + * 获取联系人工具类 + */ +@SuppressWarnings("unused") +public class ContactHelper { + + private static final String[] PROJECTION = new String[]{ + ContactsContract.Contacts.DISPLAY_NAME, + ContactsContract.CommonDataKinds.Phone.NUMBER + }; + + private final List contacts = new ArrayList<>(); + + private ContactHelper() { + + } + + public static ContactHelper getInstance() { + return InstanceHolder.INSTANCE; + } + + private static class InstanceHolder { + private static final ContactHelper INSTANCE = new ContactHelper(); + } + + /** + * 获取所有联系人 + * + * @param context 上下文 + * @return 联系人集合 + */ + public List getContacts(Context context) { + contacts.clear(); + ContentResolver cr = context.getContentResolver(); + try (Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, "sort_key")) { + if (cursor != null) { + final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); + final int mobileNoIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + String mobileNo, displayName; + while (cursor.moveToNext()) { + mobileNo = cursor.getString(mobileNoIndex); + displayName = cursor.getString(displayNameIndex); + contacts.add(new PhoneBookEntity(displayName, mobileNo)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 通过姓名获取联系人 + * + * @param context 上下文 + * @param contactName 联系人姓名 + * @return 联系人集合 + */ + public List getContactByName(Context context, String contactName) { + contacts.clear(); + + ContentResolver cr = context.getContentResolver(); + String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " like ? "; + String[] selectionArgs = new String[]{"%" + contactName + "%"}; + try (Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, selection, selectionArgs, "sort_key")) { + if (cursor != null) { + final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); + final int mobileNoIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + String mobileNo, displayName; + while (cursor.moveToNext()) { + mobileNo = cursor.getString(mobileNoIndex); + displayName = cursor.getString(displayNameIndex); + contacts.add(new PhoneBookEntity(displayName, mobileNo)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 通过手机号获取联系人 + * + * @param context 上下文 + * @param phoneNum 手机号码 + * @return 联系人集合 + */ + public List getContactByNumber(Context context, String phoneNum) { + contacts.clear(); + Cursor cursor = null; + if (phoneNum.length() < 11) { + return null; + } + try { + ContentResolver cr = context.getContentResolver(); + String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " in(?,?,?) "; + String phone1 = phoneNum.subSequence(0, 3) + " " + phoneNum.substring(3, 7) + + " " + phoneNum.substring(7, 11); + String phone2 = phoneNum.subSequence(0, 3) + "-" + phoneNum.substring(3, 7) + + "-" + phoneNum.substring(7, 11); + + String[] selectionArgs = new String[]{phoneNum, phone1, phone2}; + + cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, selection, selectionArgs, "sort_key"); + if (cursor != null) { + final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); + final int mobileNoIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + String mobileNo, displayName; + while (cursor.moveToNext()) { + mobileNo = cursor.getString(mobileNoIndex); + displayName = cursor.getString(displayNameIndex); + contacts.add(new PhoneBookEntity(displayName, mobileNo)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return contacts; + } + + /** + * 分页查询联系人 + * + * @param context 上下文 + * @param page 页数 + * @param pageSize 每页数据量 + * @return 联系人集合 + */ + public List getContactsByPage(Context context, int page, int pageSize) { + contacts.clear(); + + Cursor cursor = null; + ContentResolver cr = context.getContentResolver(); + try { + String sortOrder = "_id limit " + page + "," + pageSize; + cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, sortOrder); + if (cursor != null) { + final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); + final int mobileNoIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + String mobileNo, displayName; + while (cursor.moveToNext()) { + mobileNo = cursor.getString(mobileNoIndex); + displayName = cursor.getString(displayNameIndex); + contacts.add(new PhoneBookEntity(displayName, mobileNo)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return contacts; + } + + /** + * 获取联系人总数 + * + * @param context 上下文 + * @return 数量 + */ + public int getContactCount(Context context) { + ContentResolver cr = context.getContentResolver(); + try (Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, "sort_key")) { + if (cursor != null) { + return cursor.getCount(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java b/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java index d6db8ccb..3ed99028 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java @@ -12,6 +12,7 @@ import com.idormy.sms.forwarder.model.SenderTable; import java.util.Arrays; import java.util.List; +@SuppressWarnings("unused") public class DbHelper extends SQLiteOpenHelper { // If you change the database schema, you must increment the database version. public static final String TAG = "DbHelper"; 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 e04b3669..6548a78b 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 @@ -1,22 +1,24 @@ package com.idormy.sms.forwarder.utils; public class Define { - public static String SP_CONFIG = "forwarder_config"; - public static String SP_CONFIG_SWITCH_HELP_TIP = "forwarder_config_switch_help_tip"; + public static final String SP_CONFIG = "forwarder_config"; + public static final String SP_CONFIG_SWITCH_HELP_TIP = "forwarder_config_switch_help_tip"; - public static String SP_MSG_KEY_SWITCH_ADD_EXTRA = "tsms_msg_key_switch_add_extra"; - public static String SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_MARK = "tsms_msg_key_string_add_extra_device_mark"; - public static String SP_MSG_KEY_STRING_ADD_EXTRA_SIM1 = "tsms_msg_key_string_add_extra_sim1"; - public static String SP_MSG_KEY_STRING_ADD_EXTRA_SIM2 = "tsms_msg_key_string_add_extra_sim2"; - public static String SP_MSG_KEY_SWITCH_SMS_TEMPLATE = "tsms_msg_key_switch_sms_template"; - public static String SP_MSG_KEY_STRING_SMS_TEMPLATE = "tsms_msg_key_string_sms_template"; - public static String SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM = "tsms_msg_key_string_battery_level_alarm"; - public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME1 = "tsms_msg_key_string_retry_delay_time1"; - public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME2 = "tsms_msg_key_string_retry_delay_time2"; - public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME3 = "tsms_msg_key_string_retry_delay_time3"; - public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME4 = "tsms_msg_key_string_retry_delay_time4"; - public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME5 = "tsms_msg_key_string_retry_delay_time5"; + public static final String SP_MSG_KEY_SWITCH_ADD_EXTRA = "tsms_msg_key_switch_add_extra"; + public static final String SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_NAME = "tsms_msg_key_switch_add_extra_device_name"; + public static final String SP_MSG_KEY_STRING_ENABLE_PHONE = "tsms_msg_key_switch_enable_phone"; + public static final String SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_MARK = "tsms_msg_key_string_add_extra_device_mark"; + public static final String SP_MSG_KEY_STRING_ADD_EXTRA_SIM1 = "tsms_msg_key_string_add_extra_sim1"; + public static final String SP_MSG_KEY_STRING_ADD_EXTRA_SIM2 = "tsms_msg_key_string_add_extra_sim2"; + public static final String SP_MSG_KEY_SWITCH_SMS_TEMPLATE = "tsms_msg_key_switch_sms_template"; + public static final String SP_MSG_KEY_STRING_SMS_TEMPLATE = "tsms_msg_key_string_sms_template"; + 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_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"; + public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME4 = "tsms_msg_key_string_retry_delay_time4"; + public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME5 = "tsms_msg_key_string_retry_delay_time5"; - public static String SP_MSG = "forwarder_msg"; - public static String SP_MSG_SET_KEY = "forwarder_msg_set_key"; + 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/HttpI.java b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpI.java index 331d5966..ef0b0f29 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpI.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpI.java @@ -10,6 +10,7 @@ import java.util.Map; /** * app版本更新接口 */ +@SuppressWarnings("unused") public interface HttpI extends Serializable { /** * 异步get diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/InitUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/InitUtil.java index 9b33957e..15fc7553 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/InitUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/InitUtil.java @@ -1,15 +1,19 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.content.Context; import android.util.Log; +@SuppressWarnings("SynchronizeOnNonFinalField") public class InitUtil { static Boolean hasInit = false; - private static String TAG = "InitUtil"; + private static final String TAG = "InitUtil"; + @SuppressLint("StaticFieldLeak") private static Context context = null; public static void init(Context context1) { - Log.d(TAG, "TMSG init"); + Log.d(TAG, "SmsForwarder init"); + //noinspection SynchronizeOnNonFinalField synchronized (hasInit) { if (hasInit) return; hasInit = true; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/KeepAliveUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/KeepAliveUtils.java index 72616f9e..648eba60 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/KeepAliveUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/KeepAliveUtils.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -15,7 +16,7 @@ public class KeepAliveUtils { public static boolean isIgnoreBatteryOptimization(Activity activity) { PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M && powerManager != null) { + if (powerManager != null) { return powerManager.isIgnoringBatteryOptimizations(activity.getPackageName()); } else { return true; @@ -26,7 +27,7 @@ public class KeepAliveUtils { if (isIgnoreBatteryOptimization(activity)) { return; } - Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + @SuppressLint("BatteryLife") Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + activity.getPackageName())); ResolveInfo resolveInfo = activity.getPackageManager().resolveActivity(intent, 0); if (resolveInfo != null) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java index 9e9a8075..d2afd381 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -19,15 +20,18 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +@SuppressWarnings("UnusedReturnValue") public class LogUtil { - static String TAG = "LogUtil"; + static final String TAG = "LogUtil"; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; static DbHelper dbHelper; static SQLiteDatabase db; public static void init(Context context1) { + //noinspection SynchronizeOnNonFinalField synchronized (hasInit) { if (hasInit) return; hasInit = true; @@ -56,7 +60,7 @@ public class LogUtil { return db.insert(LogTable.LogEntry.TABLE_NAME, null, values); } - public static int delLog(Long id, String key) { + public static void delLog(Long id, String key) { // Define 'where' part of query. String selection = " 1 "; // Specify arguments in placeholder order. @@ -66,7 +70,6 @@ public class LogUtil { selection += " and " + LogTable.LogEntry._ID + " = ? "; // Specify arguments in placeholder order. selectionArgList.add(String.valueOf(id)); - } if (key != null) { @@ -76,9 +79,9 @@ public class LogUtil { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // Issue SQL statement. - return db.delete(LogTable.LogEntry.TABLE_NAME, selection, selectionArgs); + db.delete(LogTable.LogEntry.TABLE_NAME, selection, selectionArgs); } @@ -93,7 +96,7 @@ public class LogUtil { values.put(LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS, forward_status); values.put(LogTable.LogEntry.COLUMN_NAME_FORWARD_RESPONSE, forward_response); - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); return db.update(LogTable.LogEntry.TABLE_NAME, values, selection, selectionArgs); } @@ -134,7 +137,7 @@ public class LogUtil { selectionArgList.add(key); selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // How you want the results sorted in the resulting Cursor String sortOrder = @@ -160,9 +163,9 @@ public class LogUtil { Log.d(TAG, "getLog: itemId cursor" + Arrays.toString(cursor.getColumnNames())); while (cursor.moveToNext()) { try { - Long itemid = cursor.getLong( + Long itemId = cursor.getLong( cursor.getColumnIndexOrThrow(BaseColumns._ID)); - String itemfrom = cursor.getString( + String itemFrom = cursor.getString( cursor.getColumnIndexOrThrow(LogTable.LogEntry.COLUMN_NAME_FROM)); String content = cursor.getString( cursor.getColumnIndexOrThrow(LogTable.LogEntry.COLUMN_NAME_CONTENT)); @@ -184,14 +187,14 @@ public class LogUtil { cursor.getColumnIndexOrThrow(RuleTable.RuleEntry.COLUMN_NAME_SIM_SLOT)); String senderName = cursor.getString( cursor.getColumnIndexOrThrow(SenderTable.SenderEntry.COLUMN_NAME_NAME)); - Integer senderType = cursor.getInt( + int senderType = cursor.getInt( cursor.getColumnIndexOrThrow(SenderTable.SenderEntry.COLUMN_NAME_TYPE)); String rule = RuleModel.getRuleMatch(ruleFiled, ruleCheck, ruleValue, ruleSimSlot); if (senderName != null) rule += senderName.trim(); int senderImageId = SenderModel.getImageId(senderType); - LogVo logVo = new LogVo(itemid, itemfrom, content, simInfo, time, rule, senderImageId, forwardStatus, forwardResponse); + LogVo logVo = new LogVo(itemId, itemFrom, content, simInfo, time, rule, senderImageId, forwardStatus, forwardResponse); LogVos.add(logVo); } catch (Exception e) { Log.e(TAG, "getLog e:" + e.getMessage()); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java index 082a6663..ccce39d8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; @@ -11,13 +12,15 @@ public class NetUtil { //移动网络 private static final int NETWORK_MOBILE = 1; //无线网络 - private static final int NETWORW_WIFI = 2; + private static final int NETWORK_WIFI = 2; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; public static void init(Context context1) { + //noinspection SynchronizeOnNonFinalField synchronized (hasInit) { if (hasInit) return; hasInit = true; @@ -37,7 +40,7 @@ public class NetUtil { if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { //返回无线网络 Toast.makeText(context, "当前处于无线网络", Toast.LENGTH_SHORT).show(); - return NETWORW_WIFI; + return NETWORK_WIFI; //判断是否移动网络 } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { Toast.makeText(context, "当前处于移动网络", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/OSUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/OSUtils.java index f98dabfa..28ef3f68 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/OSUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/OSUtils.java @@ -53,18 +53,16 @@ public class OSUtils { //EMUI标识 private static final String KEY_EMUI_VERSION_CODE = "ro.build.version.emui"; //Flyme标识 - private static final String KEY_FLYME_ID_FALG_KEY = "ro.build.display.id"; - private static final String KEY_FLYME_ID_FALG_VALUE_KEYWORD = "Flyme"; - private static final String KEY_FLYME_ICON_FALG = "persist.sys.use.flyme.icon"; - private static final String KEY_FLYME_SETUP_FALG = "ro.meizu.setupwizard.flyme"; - private static final String KEY_FLYME_PUBLISH_FALG = "ro.flyme.published"; + private static final String KEY_FLYME_ID_FLAG_KEY = "ro.build.display.id"; + private static final String KEY_FLYME_ID_FLAG_VALUE_KEYWORD = "Flyme"; + private static final String KEY_FLYME_ICON_FLAG = "persist.sys.use.flyme.icon"; + private static final String KEY_FLYME_SETUP_FLAG = "ro.meizu.setupwizard.flyme"; + private static final String KEY_FLYME_PUBLISH_FLAG = "ro.flyme.published"; /** - * @param + * 获取ROM类型,MIUI_ROM, *FLYME_ROM, * EMUI_ROM, * OTHER_ROM + * * @return ROM_TYPE ROM类型的枚举 - * @datecreate at 2016/5/11 0011 9:46 - * @mehtodgetRomType - * @description获取ROM类型,MIUI_ROM, *FLYME_ROM, * EMUI_ROM, * OTHER_ROM */ public static ROM_TYPE getRomType() { ROM_TYPE rom_type = ROM_TYPE.OTHER_ROM; @@ -76,12 +74,12 @@ public class OSUtils { if (buildProperties.containsKey(KEY_MIUI_VERSION_CODE) || buildProperties.containsKey(KEY_MIUI_VERSION_NAME)) { return ROM_TYPE.MIUI_ROM; } - if (buildProperties.containsKey(KEY_FLYME_ICON_FALG) || buildProperties.containsKey(KEY_FLYME_SETUP_FALG) || buildProperties.containsKey(KEY_FLYME_PUBLISH_FALG)) { + if (buildProperties.containsKey(KEY_FLYME_ICON_FLAG) || buildProperties.containsKey(KEY_FLYME_SETUP_FLAG) || buildProperties.containsKey(KEY_FLYME_PUBLISH_FLAG)) { return ROM_TYPE.FLYME_ROM; } - if (buildProperties.containsKey(KEY_FLYME_ID_FALG_KEY)) { - String romName = buildProperties.getProperty(KEY_FLYME_ID_FALG_KEY); - if (!TextUtils.isEmpty(romName) && romName.contains(KEY_FLYME_ID_FALG_VALUE_KEYWORD)) { + if (buildProperties.containsKey(KEY_FLYME_ID_FLAG_KEY)) { + String romName = buildProperties.getProperty(KEY_FLYME_ID_FLAG_KEY); + if (!TextUtils.isEmpty(romName) && romName.contains(KEY_FLYME_ID_FLAG_VALUE_KEYWORD)) { return ROM_TYPE.FLYME_ROM; } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java index 6f2ad061..a89d50aa 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java @@ -24,15 +24,17 @@ import java.io.File; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.UUID; +@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "CommentedOutCode", "SynchronizeOnNonFinalField", "unused", "SameReturnValue"}) public class PhoneUtils { static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; - private static String TAG = "PhoneUtils"; + private static final String TAG = "PhoneUtils"; /** * 构造类 @@ -109,7 +111,7 @@ public class PhoneUtils { } catch (Exception ignored) { } - return getUniquePsuedoID(); + return getUniquePseudoID(); } /** @@ -118,7 +120,7 @@ public class PhoneUtils { * * @return 伪唯一ID */ - public static String getUniquePsuedoID() { + public static String getUniquePseudoID() { String m_szDevIDShort = "35" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + @@ -130,7 +132,7 @@ public class PhoneUtils { String serial; try { - serial = android.os.Build.class.getField("SERIAL").get(null).toString(); + serial = Objects.requireNonNull(Build.class.getField("SERIAL").get(null)).toString(); return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); } catch (Exception e) { //获取失败,使用AndroidId @@ -217,10 +219,10 @@ public class PhoneUtils { public static String getSimSerialNumber() { try { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - String serialNumber = tm != null ? tm.getSimSerialNumber() : null; + @SuppressLint("HardwareIds") String serialNumber = tm != null ? tm.getSimSerialNumber() : null; return serialNumber != null ? serialNumber : ""; - } catch (Exception e) { + } catch (Exception ignored) { } return ""; @@ -247,7 +249,7 @@ public class PhoneUtils { * * @return 电话号码 */ - @SuppressLint("MissingPermission") + @SuppressLint({"MissingPermission", "HardwareIds"}) public static String getPhoneNumber() { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { @@ -280,7 +282,7 @@ public class PhoneUtils { } } try { - count = Integer.parseInt(getReflexMethod(context, "getPhoneCount")); + count = Integer.parseInt(getReflexMethod(context)); } catch (MethodNotFoundException ignored) { } return count; @@ -334,9 +336,7 @@ public class PhoneUtils { List activeSubscriptionInfoList = null; if (mSubscriptionManager != null) { try { - if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { - //TODO - } + ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE); activeSubscriptionInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); } catch (Exception ignored) { } @@ -414,10 +414,10 @@ public class PhoneUtils { String imsi = null; try { imsi = getReflexMethodWithId(context, "getSubscriberId", String.valueOf(i)); - } catch (MethodNotFoundException ignored) { - Log.d(TAG, String.valueOf(ignored)); + } catch (MethodNotFoundException e) { + Log.d(TAG, String.valueOf(e)); } - if (!TextUtils.isEmpty(imsi) && !imsi.equals(getIMSI())) { + if (!TextUtils.isEmpty(imsi) && !Objects.equals(imsi, getIMSI())) { return imsi; } } @@ -456,23 +456,22 @@ public class PhoneUtils { /** * 通过反射调取@hide的方法 * - * @param predictedMethodName 方法名 * @return 返回方法调用的结果 * @throws MethodNotFoundException 方法没有找到 */ - private static String getReflexMethod(Context context, String predictedMethodName) throws MethodNotFoundException { + private static String getReflexMethod(Context context) throws MethodNotFoundException { String result = null; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Class telephonyClass = Class.forName(telephony.getClass().getName()); - Method getSimID = telephonyClass.getMethod(predictedMethodName); + Method getSimID = telephonyClass.getMethod("getPhoneCount"); Object ob_phone = getSimID.invoke(telephony); if (ob_phone != null) { result = ob_phone.toString(); } } catch (Exception e) { Log.d(TAG, String.valueOf(e.fillInStackTrace())); - throw new MethodNotFoundException(predictedMethodName); + throw new MethodNotFoundException("getPhoneCount"); } return result; } @@ -517,8 +516,7 @@ public class PhoneUtils { public static List removeDuplicateWithOrder(List list) { Set set = new HashSet(); List newList = new ArrayList(); - for (Iterator iter = list.iterator(); iter.hasNext(); ) { - Object element = iter.next(); + for (Object element : list) { if (set.add(element)) newList.add(element); } @@ -601,15 +599,13 @@ public class PhoneUtils { /** * 通过 IMEI 判断是否相等 - * - * @param obj - * @return */ @Override public boolean equals(Object obj) { - return obj != null && obj instanceof SimInfo && (TextUtils.isEmpty(((SimInfo) obj).mImei) || ((SimInfo) obj).mImei.equals(mImei)); + return obj instanceof SimInfo && (TextUtils.isEmpty(((SimInfo) obj).mImei) || ((SimInfo) obj).mImei.equals(mImei)); } + @NonNull @Override public String toString() { return "SimInfo{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java index 7eb42aa8..f777f3b2 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.utils; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.model.vo.SmsVo; import java.util.ArrayList; @@ -10,6 +12,7 @@ import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +@SuppressWarnings("unused") class RuleLine { public static final String CONJUNCTION_AND = "并且"; public static final String CONJUNCTION_OR = "或者"; @@ -23,11 +26,11 @@ class RuleLine { public static final String CHECK_START_WITH = "开头"; public static final String CHECK_END_WITH = "结尾"; public static final String CHECK_REGEX = "正则"; - public static List CONJUNCTION_LIST = new ArrayList(); - public static List FILED_LIST = new ArrayList(); - public static List SURE_LIST = new ArrayList(); - public static List CHECK_LIST = new ArrayList(); - static String TAG = "RuleLine"; + public static final List CONJUNCTION_LIST = new ArrayList<>(); + public static final List FILED_LIST = new ArrayList<>(); + public static final List SURE_LIST = new ArrayList<>(); + public static final List CHECK_LIST = new ArrayList<>(); + static final String TAG = "RuleLine"; static Boolean STARTLOG = true; static { @@ -71,8 +74,8 @@ class RuleLine { String check; String value; - public RuleLine(String line, int linenum, RuleLine beforeRuleLine) throws Exception { - logg("----------" + linenum + "-----------------"); + public RuleLine(String line, int lineNum, RuleLine beforeRuleLine) throws Exception { + logg("----------" + lineNum + "-----------------"); logg(line); //规则检验: //并且 是 手机号 相等 10086 @@ -85,7 +88,7 @@ class RuleLine { //标记3个阶段 boolean isCountHeading = false; - boolean isDealMiddel = false; + boolean isDealMiddle = false; boolean isDealValue = false; //用于保存4个中间体: 并且, 是, 内容, 包含 @@ -107,44 +110,41 @@ class RuleLine { isCountHeading = true; } else { //直接进入处理中间体阶段 - isCountHeading = false; - isDealMiddel = true; - logg("start to isDealMiddel:"); + isDealMiddle = true; + logg("start to isDealMiddle:"); } } //正在数空格头,但是遇到非空格,阶段变更:由处理空头阶段 变为 处理 中间体阶段 if (isCountHeading && (!" ".equals(w))) { - logg("isCountHeading to isDealMiddel:"); + logg("isCountHeading to isDealMiddle:"); isCountHeading = false; - isDealMiddel = true; + isDealMiddle = true; } //正在处理中间体,中间体数量够了,阶段变更:由处理中间体 变为 处理 value - if (isDealMiddel && middleList.size() == 4) { - logg("isDealMiddel done middleList:" + middleList); - logg("isDealMiddel to isDealValue:"); - isDealMiddel = false; + if (isDealMiddle && middleList.size() == 4) { + logg("isDealMiddle done middleList:" + middleList); + logg("isDealMiddle to isDealValue:"); + isDealMiddle = false; isDealValue = true; } logg("isCountHeading:" + isCountHeading); - logg("isDealMiddel:" + isDealMiddel); + logg("isDealMiddle:" + isDealMiddle); logg("isDealValue:" + isDealValue); if (isCountHeading) { - if (" ".equals(w)) { - logg("headSpaceNum++:" + headSpaceNum); - headSpaceNum++; - } + logg("headSpaceNum++:" + headSpaceNum); + headSpaceNum++; } - if (isDealMiddel) { + if (isDealMiddle) { //遇到空格 if (" ".equals(w)) { if (buildMiddleWord.length() == 0) { - throw new Exception(linenum + "行:语法错误不允许出现连续空格!"); + throw new Exception(lineNum + "行:语法错误不允许出现连续空格!"); } else { //生成了一个中间体 middleList.add(buildMiddleWord.toString()); @@ -170,7 +170,7 @@ class RuleLine { if (middleList.size() != 4) { - throw new Exception(linenum + "行配置错误:每行必须有4段组成,例如: 并且 手机号 是 相等 "); + throw new Exception(lineNum + "行配置错误:每行必须有4段组成,例如: 并且 手机号 是 相等 "); } @@ -232,19 +232,19 @@ class RuleLine { this.value = valueBuilder.toString(); if (!CONJUNCTION_LIST.contains(this.conjunction)) { - throw new Exception(linenum + "行配置错误:连接词只支持:" + CONJUNCTION_LIST + " 但提供了" + this.conjunction); + throw new Exception(lineNum + "行配置错误:连接词只支持:" + CONJUNCTION_LIST + " 但提供了" + this.conjunction); } if (!FILED_LIST.contains(this.field)) { - throw new Exception(linenum + "行配置错误:字段只支持:" + FILED_LIST + " 但提供了" + this.field); + throw new Exception(lineNum + "行配置错误:字段只支持:" + FILED_LIST + " 但提供了" + this.field); } if (!SURE_LIST.contains(this.sure)) { - throw new Exception(linenum + "行配置错误 " + this.sure + " 确认词只支持:" + SURE_LIST + " 但提供了" + this.sure); + throw new Exception(lineNum + "行配置错误 " + this.sure + " 确认词只支持:" + SURE_LIST + " 但提供了" + this.sure); } if (!CHECK_LIST.contains(this.check)) { - throw new Exception(linenum + "行配置错误:比较词只支持:" + CHECK_LIST + " 但提供了" + this.check); + throw new Exception(lineNum + "行配置错误:比较词只支持:" + CHECK_LIST + " 但提供了" + this.check); } - logg("----------" + linenum + "==" + this); + logg("----------" + lineNum + "==" + this); } @@ -282,7 +282,6 @@ class RuleLine { //整合肯定词 switch (this.sure) { case SURE_YES: - mixChecked = mixChecked; break; case SURE_NOT: mixChecked = !mixChecked; @@ -311,6 +310,11 @@ class RuleLine { checked = msgValue.contains(this.value); } break; + case CHECK_NOT_CONTAIN: + if (msgValue != null) { + checked = !msgValue.contains(this.value); + } + break; case CHECK_START_WITH: if (msgValue != null) { checked = msgValue.startsWith(this.value); @@ -326,7 +330,6 @@ class RuleLine { try { checked = Pattern.matches(this.value, msgValue); } catch (PatternSyntaxException e) { - checked = false; logg("PatternSyntaxException: "); logg("Description: " + e.getDescription()); logg("Index: " + e.getIndex()); @@ -344,6 +347,7 @@ class RuleLine { } + @NonNull @Override public String toString() { return "RuleLine{" + diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java index 63bb55e0..d972b8e1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.java @@ -1,5 +1,8 @@ package com.idormy.sms.forwarder.utils; +import static com.idormy.sms.forwarder.utils.RuleLine.CONJUNCTION_AND; +import static com.idormy.sms.forwarder.utils.RuleLine.CONJUNCTION_OR; + import android.util.Log; import com.idormy.sms.forwarder.model.vo.SmsVo; @@ -7,11 +10,9 @@ import com.idormy.sms.forwarder.model.vo.SmsVo; import java.util.Date; import java.util.Scanner; -import static com.idormy.sms.forwarder.utils.RuleLine.CONJUNCTION_AND; -import static com.idormy.sms.forwarder.utils.RuleLine.CONJUNCTION_OR; - +@SuppressWarnings("unused") public class RuleLineUtils { - static String TAG = "RuleLineUtils"; + static final String TAG = "RuleLineUtils"; static Boolean STARTLOG = false; public static void main(String[] args) throws Exception { @@ -41,16 +42,16 @@ public class RuleLineUtils { Scanner scanner = new Scanner(RuleLines); - int linenum = 0; + int lineNum = 0; RuleLine headRuleLine = null; RuleLine beforeRuleLine = null; while (scanner.hasNextLine()) { String line = scanner.nextLine(); - logg(linenum + " : " + line); + logg(lineNum + " : " + line); //第一行 - if (linenum == 0) { + if (lineNum == 0) { //第一行不允许缩进 if (line.startsWith(" ")) { throw new Exception("第一行不允许缩进"); @@ -60,14 +61,15 @@ public class RuleLineUtils { // process the line - beforeRuleLine = RuleLineUtils.generateRuleTree(line, linenum, beforeRuleLine); - if (linenum == 0) { + beforeRuleLine = RuleLineUtils.generateRuleTree(line, lineNum, beforeRuleLine); + if (lineNum == 0) { headRuleLine = beforeRuleLine; } - linenum++; + lineNum++; } + assert headRuleLine != null; return checkRuleTree(msg, headRuleLine); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleUtil.java index 7c8adeeb..ce99fc33 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -13,9 +14,11 @@ import com.idormy.sms.forwarder.model.RuleTable; import java.util.ArrayList; import java.util.List; +@SuppressWarnings({"UnusedReturnValue", "SynchronizeOnNonFinalField"}) public class RuleUtil { - static String TAG = "RuleUtil"; + static final String TAG = "RuleUtil"; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; static DbHelper dbHelper; static SQLiteDatabase db; @@ -75,7 +78,7 @@ public class RuleUtil { selectionArgList.add(String.valueOf(id)); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // Issue SQL statement. return db.delete(RuleTable.RuleEntry.TABLE_NAME, selection, selectionArgs); @@ -114,7 +117,7 @@ public class RuleUtil { // Specify arguments in placeholder order. selectionArgList.add(key); } - String[] selectionArgs = selectionArgList.toArray(new String[selectionArgList.size()]); + String[] selectionArgs = selectionArgList.toArray(new String[0]); // How you want the results sorted in the resulting Cursor String sortOrder = 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 7ce680f7..d09376d3 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 @@ -5,10 +5,12 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; +@SuppressWarnings({"SynchronizeOnNonFinalField", "unused"}) public class SettingUtil { static Boolean hasInit = false; - private static String TAG = "SettingUtil"; + private static final String TAG = "SettingUtil"; private static SharedPreferences sp_setting = null; + @SuppressWarnings("FieldCanBeLocal") private static Context context = null; public static void init(Context context1) { @@ -32,6 +34,27 @@ public class SettingUtil { return sp_setting.getBoolean(Define.SP_MSG_KEY_SWITCH_ADD_EXTRA, false); } + 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(); + } + + public static boolean getSwitchAddDeviceName() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_NAME, false); + } + + public static void switchEnablePhone(Boolean enable) { + sp_setting.edit() + .putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PHONE, enable) + .apply(); + } + + public static boolean getSwitchEnablePhone() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PHONE, true); + } + public static void switchSmsTemplate(Boolean switchSmsTemplate) { Log.d(TAG, "switchSmsTemplate :" + switchSmsTemplate); sp_setting.edit() @@ -100,8 +123,7 @@ public class SettingUtil { } public static String getBatteryLevelAlarm() { - String res = sp_setting.getString(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, ""); - return res; + return sp_setting.getString(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, ""); } public static void setBatteryLevelAlarm(String battery_level) { @@ -112,7 +134,7 @@ public class SettingUtil { } public static boolean saveMsgHistory() { - return sp_setting.getBoolean("option_save_history_on", false); + return !sp_setting.getBoolean("option_save_history_on", false); } //接口请求失败重试 diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SimUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SimUtil.java index 9bac953f..ef681dad 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SimUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SimUtil.java @@ -6,8 +6,9 @@ import android.util.Log; import com.idormy.sms.forwarder.MyApplication; +@SuppressWarnings("unused") public class SimUtil { - private static String TAG = "SimUtil"; + private static final String TAG = "SimUtil"; //获取卡槽信息ID public static int getSimId(Bundle bundle) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java index 2bd36a45..ebeb2fff 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -7,10 +8,13 @@ import android.telephony.SmsManager; import android.util.Log; import java.util.ArrayList; +import java.util.Objects; +@SuppressWarnings("SynchronizeOnNonFinalField") public class SmsUtil { - static String TAG = "SmsUtil"; + static final String TAG = "SmsUtil"; static Boolean hasInit = false; + @SuppressLint("StaticFieldLeak") static Context context; @@ -28,11 +32,11 @@ public class SmsUtil { try { SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(subId); - PendingIntent sendPI = PendingIntent.getBroadcast(context, 0, new Intent(Context.TELEPHONY_SUBSCRIPTION_SERVICE), PendingIntent.FLAG_ONE_SHOT); - PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, new Intent("DELIVERED_SMS_ACTION"), 0); + @SuppressLint("UnspecifiedImmutableFlag") PendingIntent sendPI = PendingIntent.getBroadcast(context, 0, new Intent(Context.TELEPHONY_SUBSCRIPTION_SERVICE), PendingIntent.FLAG_ONE_SHOT); + @SuppressLint("UnspecifiedImmutableFlag") PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, new Intent("DELIVERED_SMS_ACTION"), 0); - ArrayList sentPendingIntents = new ArrayList(); - ArrayList deliveredPendingIntents = new ArrayList(); + ArrayList sentPendingIntents = new ArrayList<>(); + ArrayList deliveredPendingIntents = new ArrayList<>(); ArrayList divideContents = smsManager.divideMessage(message); for (int i = 0; i < divideContents.size(); i++) { @@ -43,7 +47,7 @@ public class SmsUtil { return null; } catch (Exception e) { - Log.e(TAG, e.getMessage()); + Log.e(TAG, Objects.requireNonNull(e.getMessage())); return e.getMessage(); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/aUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/aUtil.java index 3a56cc29..52fc3c3f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/aUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/aUtil.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder.utils; +import android.annotation.SuppressLint; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -15,15 +16,13 @@ import java.util.Properties; import java.util.TimeZone; public class aUtil { - private static String TAG = "aUtil"; - - private static Context context = null; /** * 判断是否为MIUI系统,参考http://blog.csdn.net/xx326664162/article/details/52438706 * - * @return + * @return 返回结果 */ + @SuppressWarnings("unused") public static boolean isMIUI() { try { String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code"; @@ -45,8 +44,7 @@ public class aUtil { PackageManager packageManager = context.getPackageManager(); // getPackageName()是你当前类的包名,0代表是获取版本信息 PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0); - String version = packInfo.versionName; - return version; + return packInfo.versionName; } public static Integer getVersionCode(Context context) throws Exception { @@ -54,15 +52,14 @@ public class aUtil { PackageManager packageManager = context.getPackageManager(); // getPackageName()是你当前类的包名,0代表是获取版本信息 PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0); - Integer versionCode = packInfo.versionCode; - return versionCode; + return packInfo.versionCode; } //友好时间显示 public static String friendlyTime(String utcTime) { - SimpleDateFormat utcFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @SuppressLint("SimpleDateFormat") SimpleDateFormat utcFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));//时区定义并进行时间获取 - Date utcDate = null; + Date utcDate; try { utcDate = utcFormater.parse(utcTime); } catch (ParseException e) { @@ -71,6 +68,7 @@ public class aUtil { } //获取utcDate距离当前的秒数 + assert utcDate != null; int ct = (int) ((System.currentTimeMillis() - utcDate.getTime()) / 1000); if (ct == 0) { @@ -107,10 +105,10 @@ public class aUtil { public static String utc2Local(String utcTime) { String utcTimePatten = "yyyy-MM-dd HH:mm:ss"; String localTimePatten = "yyyy-MM-dd HH:mm:ss"; - SimpleDateFormat utcFormater = new SimpleDateFormat(utcTimePatten); + @SuppressLint("SimpleDateFormat") SimpleDateFormat utcFormater = new SimpleDateFormat(utcTimePatten); utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));//时区定义并进行时间获取 - Date utcDate = null; + Date utcDate; try { utcDate = utcFormater.parse(utcTime); } catch (ParseException e) { @@ -118,10 +116,10 @@ public class aUtil { return utcTime; } - SimpleDateFormat localFormater = new SimpleDateFormat(localTimePatten); + @SuppressLint("SimpleDateFormat") SimpleDateFormat localFormater = new SimpleDateFormat(localTimePatten); localFormater.setTimeZone(TimeZone.getDefault()); - String localTime = localFormater.format(utcDate.getTime()); - return localTime; + assert utcDate != null; + return localFormater.format(utcDate.getTime()); } } diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 7697de08..f839c855 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,5 +1,6 @@ @@ -18,7 +19,7 @@ android:padding="15dp"> @@ -67,7 +68,8 @@ android:layout_height="wrap_content" android:layout_weight="3" android:gravity="end" - android:textSize="18sp" /> + android:textSize="18sp" + tools:ignore="UseSwitchCompatOrMaterialXml" /> @@ -93,7 +95,8 @@ android:layout_height="wrap_content" android:layout_weight="3" android:gravity="end" - android:textSize="18sp" /> + android:textSize="18sp" + tools:ignore="UseSwitchCompatOrMaterialXml" /> @@ -119,7 +122,7 @@ android:layout_height="wrap_content" android:layout_weight="3" android:autoLink="web" - android:gravity="right" + android:gravity="end" android:text="https://github.com/pppscn/SmsForwarder/releases" android:textSize="14sp" /> @@ -135,7 +138,7 @@ android:padding="15dp"> @@ -171,7 +174,7 @@ android:padding="15dp"> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 62073f92..dec04aba 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -34,7 +34,7 @@ android:id="@+id/bt_refresh_log" android:layout_width="match_parent" android:layout_height="35dp" - android:layout_marginLeft="10dp" + android:layout_marginStart="10dp" android:layout_marginTop="5dp" android:layout_marginBottom="10dp" android:layout_weight="1" @@ -47,7 +47,7 @@ android:id="@+id/bt_rule_set" android:layout_width="match_parent" android:layout_height="35dp" - android:layout_marginLeft="10dp" + android:layout_marginStart="10dp" android:layout_marginTop="5dp" android:layout_marginBottom="10dp" android:layout_weight="1" diff --git a/app/src/main/res/layout/activity_rule.xml b/app/src/main/res/layout/activity_rule.xml index b192ded3..2bf219b0 100644 --- a/app/src/main/res/layout/activity_rule.xml +++ b/app/src/main/res/layout/activity_rule.xml @@ -25,7 +25,7 @@ android:textColor="@color/colorPrimary" />