diff --git a/app/build.gradle b/app/build.gradle index 84e7b0cb..b458f358 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ if (versionPropsFile.exists()) { android { buildToolsVersion '30.0.3' - compileSdkVersion 30 + compileSdkVersion 31 compileOptions { sourceCompatibility 11 targetCompatibility 11 @@ -23,7 +23,7 @@ android { defaultConfig { applicationId "com.idormy.sms.forwarder" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode versionProps['versionCode'].toInteger() versionName versionProps['versionName'] testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -127,24 +127,29 @@ void cmdExecute(String cmd) { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') + //noinspection GradleDependency implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' + //noinspection GradleDependency implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.5.2' + //noinspection GradleDynamicVersion testImplementation 'junit:junit:4.+' 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.1' - implementation 'com.squareup.okio:okio:2.10.0' + //noinspection GradleDependency + implementation 'com.squareup.okhttp3:okhttp:4.9.3' + implementation 'com.squareup.okio:okio:3.0.0' //fastjson - implementation "com.alibaba:fastjson:1.2.78" + implementation "com.alibaba:fastjson:1.2.79" //友盟统计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:common:9.4.5'// 必选 + implementation 'com.umeng.umsdk:asms:1.5.0'// asms包依赖必选 + //implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选 + implementation 'com.umeng.umsdk:apm:1.5.2'// U-APM产品包依赖(必选) //XUpdate implementation 'com.github.xuexiangjys:XUpdate:2.1.1' @@ -156,18 +161,19 @@ dependencies { //Lombok //noinspection AnnotationProcessorOnCompilePath - compileOnly 'org.projectlombok:lombok:1.18.20' - annotationProcessor 'org.projectlombok:lombok:1.18.20' + compileOnly 'org.projectlombok:lombok:1.18.22' + annotationProcessor 'org.projectlombok:lombok:1.18.22' //RxJava - implementation 'io.reactivex.rxjava3:rxjava:3.1.1' + implementation 'io.reactivex.rxjava3:rxjava:3.1.3' //AndroidAsync implementation 'com.koushikdutta.async:androidasync:3.1.0' // 权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.github.getActivity:XXPermissions:13.2' + //jetty - implementation "org.eclipse.jetty:jetty-server:$jetty_version" - implementation "org.eclipse.jetty:jetty-servlet:$jetty_version" + implementation "org.eclipse.jetty:jetty-server:9.2.30.v20200428" + implementation "org.eclipse.jetty:jetty-servlet:9.2.30.v20200428" } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsHubVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsHubVo.java index c6dda739..0bea966a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsHubVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsHubVo.java @@ -4,14 +4,21 @@ import androidx.annotation.NonNull; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.sender.SmsHubApiTask; -import com.idormy.sms.forwarder.utils.*; +import com.idormy.sms.forwarder.utils.PhoneUtils; +import com.idormy.sms.forwarder.utils.SettingUtil; +import com.idormy.sms.forwarder.utils.SimUtil; import java.io.Serializable; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import lombok.Data; +@SuppressWarnings("unchecked") @Data public class SmsHubVo implements Serializable { private static final long serialVersionUID = 1L; @@ -84,7 +91,7 @@ public class SmsHubVo implements Serializable { cache.put(key, deviInfoMap); return deviInfoMap; } - return (HashMap) cache.get(key); + return (HashMap) Objects.requireNonNull(cache.get(key)); } public enum Action { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java index e90d804b..e9790a62 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java @@ -8,7 +8,9 @@ import android.widget.Toast; import com.idormy.sms.forwarder.R; import com.idormy.sms.forwarder.model.vo.SmsHubVo; import com.idormy.sms.forwarder.receiver.BaseServlet; -import com.idormy.sms.forwarder.utils.*; +import com.idormy.sms.forwarder.utils.NetUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; +import com.idormy.sms.forwarder.utils.SmsHubActionHandler; import org.eclipse.jetty.server.Server; @@ -16,7 +18,7 @@ import org.eclipse.jetty.server.Server; public class HttpServer { private static Boolean hasInit = false; private static Server jettyServer; - private static int port = 5000; + private static final int port = 5000; @SuppressLint("StaticFieldLeak") private static Context context; private static long ts = 0L; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpUtil.java index c9eeb125..f0fa0c2d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpUtil.java @@ -2,7 +2,6 @@ package com.idormy.sms.forwarder.utils; import android.annotation.SuppressLint; import android.content.Context; -import android.os.*; import android.util.Log; import android.widget.Toast; @@ -16,19 +15,23 @@ import java.net.URLEncoder; import java.util.Map; import java.util.Objects; -import okhttp3.*; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +@SuppressWarnings("unchecked") public class HttpUtil { private static final OkHttpClient client = new OkHttpClient(); private static final String TAG = "HttpUtil"; private static Boolean hasInit = false; @SuppressLint("StaticFieldLeak") private static Context context; - // @SuppressLint("StaticFieldLeak") -// private static Handler handError; private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8"); - @SuppressLint("HandlerLeak") public static void init(Context context) { //noinspection SynchronizeOnNonFinalField @@ -95,6 +98,7 @@ public class HttpUtil { } } + @SuppressWarnings("deprecation") @NonNull public static StringBuilder appendQueryStr(String tag, String url, Object param) { StringBuilder resUrl = new StringBuilder(url); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Lamda.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Lamda.java index 39d1f016..71c1f47f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Lamda.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Lamda.java @@ -12,6 +12,7 @@ public class Lamda { } } + @SuppressWarnings("UnusedReturnValue") public interface Func { R execute(T t) throws Exception; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsHubActionHandler.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsHubActionHandler.java index 9a4fd37f..4a59658a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsHubActionHandler.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsHubActionHandler.java @@ -7,7 +7,10 @@ import android.util.Log; import com.idormy.sms.forwarder.model.LogModel; import com.idormy.sms.forwarder.model.vo.SmsHubVo; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; public class SmsHubActionHandler { @@ -44,6 +47,7 @@ public class SmsHubActionHandler { public static synchronized List getData(SmsHubMode smsHubMode) { List smsHubVoList = cache.get(smsHubMode); + assert smsHubVoList != null; if (smsHubVoList.size() > 0) { cache.put(smsHubMode, new ArrayList<>()); return smsHubVoList; diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index f2b17c31..d23463ff 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -2,12 +2,14 @@ + android:layout_height="match_parent" + tools:ignore="TooManyViews"> + + android:id="@+id/layout_cancel_app_notify" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="2dp" + android:background="@android:color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:padding="15dp" + android:visibility="gone"> + + + android:text="@string/cancel_app_notify" + android:textStyle="bold" + tools:ignore="RelativeOverlap" /> - - - - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="end" + android:text="@string/cancel_app_notify_tips" + android:textSize="9sp" + tools:ignore="SmallSp" /> + + + + + + + + + + + android:text="@string/send_sms_config_title2" + android:textSize="9sp" + tools:ignore="SmallSp" /> + + + + + + tools:ignore="SmallSp" /> + tools:ignore="ButtonStyle,NestedWeights,UsingOnClickInXml" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 2f706a0a..78a3dc38 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -166,7 +166,7 @@ Retry five times after it fails Forward sms Main switch, requires permissions to read and sned SMS messages, especially verification SMS texts. - Forward missed calls + Forward calls log Main switch, requires permissions to read call log and contacts. Forward app Ntf. Main switch, requires permission to read notification. @@ -211,7 +211,7 @@ Local IP: Instructions: \n1. Please keep the SOURCE and DESTINATION phones in the same Wi-Fi network, and do not turn on isolation. \n2. Tap "Send" on SOURCE mobile phone, and get "server IP" \n3. After filling in "Server IP" on DESTINATION phone, tap "Receive". \n [NOTE:] sender(s), forwarding rule(s) and log(s) will be overwritten after cloning! Start Server - Stop + Stop Server I\'m the SCOURCE phone Receive I\'m the DESTINATION phone @@ -271,5 +271,5 @@ Privacy Policy Agree Disagree - SmsForwarder (the "Application/App"), is 100% free and open source, and is compliled and released basing on repository hosted on GitHub. The App will not collect any of your privacy data!\n\n Version information of the App will be sent in the following situations: \n 1. As startup, version information will be sent to "Umeng +· U-APP Mobile Statistics" for user retention analyze and crash stats;\n 2. Manual update check triggered by user;\n The App collects no any other data!!\n\n The App collects and uses version information only in accordance with the Privacy Policy, and will not collect any other information as an abuse of users\' consent to the Privacy Policy; + SmsForwarder (the "Application/App"), is 100\% free and open source, and is compliled and released basing on repository hosted on GitHub. The App will not collect any of your privacy data!\n\n Version information of the App will be sent in the following situations: \n 1. As startup, version information will be sent to "Umeng +· U-APP Mobile Statistics" for user retention analyze and crash stats;\n 2. Manual update check triggered by user;\n The App collects no any other data!!\n\n The App collects and uses version information only in accordance with the Privacy Policy, and will not collect any other information as an abuse of users\' consent to the Privacy Policy; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b8ba7ac0..be2fa008 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -166,7 +166,7 @@ 接口请求失败后将重试5次 转发短信广播 总开关,请授予读取短信、通知类短信、发送短信等权限 - 转发未接来电 + 转发通话记录 总开关,请授予读取通话记录、联系人等权限 转发应用通知 总开关,请先授予通知使用权 @@ -210,7 +210,7 @@ 本机IP: 操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离)\n2.旧手机直接点【发送】按钮,获取到【服务端IP】\n3.新手机填写【服务端IP】后,点【接收】按钮\n【注意】新手机接收后,发送通道、转发规则将完全被覆盖,清空历史记录! 启动服务 - 停止 + 停止服务 我是旧手机 接收 我是新手机 diff --git a/build.gradle b/build.gradle index 5d92f52f..ce1afdd9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.jetty_version = '9.2.30.v20200428' repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/central' }