mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 01:17:41 +08:00
整理:code review
This commit is contained in:
parent
b97f075171
commit
18d2c6cd1e
@ -15,7 +15,7 @@ if (versionPropsFile.exists()) {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
buildToolsVersion '30.0.3'
|
buildToolsVersion '30.0.3'
|
||||||
compileSdkVersion 30
|
compileSdkVersion 31
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility 11
|
sourceCompatibility 11
|
||||||
targetCompatibility 11
|
targetCompatibility 11
|
||||||
@ -23,7 +23,7 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.idormy.sms.forwarder"
|
applicationId "com.idormy.sms.forwarder"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 31
|
||||||
versionCode versionProps['versionCode'].toInteger()
|
versionCode versionProps['versionCode'].toInteger()
|
||||||
versionName versionProps['versionName']
|
versionName versionProps['versionName']
|
||||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||||
@ -127,24 +127,29 @@ void cmdExecute(String cmd) {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
|
//noinspection GradleDependency
|
||||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
|
||||||
|
//noinspection GradleDependency
|
||||||
implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.5.2'
|
implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.5.2'
|
||||||
|
//noinspection GradleDynamicVersion
|
||||||
testImplementation 'junit:junit:4.+'
|
testImplementation 'junit:junit:4.+'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||||
|
|
||||||
//okhttp
|
//okhttp
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.okio:okio:2.10.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
|
||||||
|
implementation 'com.squareup.okio:okio:3.0.0'
|
||||||
|
|
||||||
//fastjson
|
//fastjson
|
||||||
implementation "com.alibaba:fastjson:1.2.78"
|
implementation "com.alibaba:fastjson:1.2.79"
|
||||||
|
|
||||||
//友盟统计SDK
|
//友盟统计SDK
|
||||||
implementation 'com.umeng.umsdk:common:9.4.4'// 必选
|
implementation 'com.umeng.umsdk:common:9.4.5'// 必选
|
||||||
implementation 'com.umeng.umsdk:asms:1.4.1'// 必选
|
implementation 'com.umeng.umsdk:asms:1.5.0'// asms包依赖必选
|
||||||
//implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,可选
|
//implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选
|
||||||
|
implementation 'com.umeng.umsdk:apm:1.5.2'// U-APM产品包依赖(必选)
|
||||||
|
|
||||||
//XUpdate
|
//XUpdate
|
||||||
implementation 'com.github.xuexiangjys:XUpdate:2.1.1'
|
implementation 'com.github.xuexiangjys:XUpdate:2.1.1'
|
||||||
@ -156,18 +161,19 @@ dependencies {
|
|||||||
|
|
||||||
//Lombok
|
//Lombok
|
||||||
//noinspection AnnotationProcessorOnCompilePath
|
//noinspection AnnotationProcessorOnCompilePath
|
||||||
compileOnly 'org.projectlombok:lombok:1.18.20'
|
compileOnly 'org.projectlombok:lombok:1.18.22'
|
||||||
annotationProcessor 'org.projectlombok:lombok:1.18.20'
|
annotationProcessor 'org.projectlombok:lombok:1.18.22'
|
||||||
|
|
||||||
//RxJava
|
//RxJava
|
||||||
implementation 'io.reactivex.rxjava3:rxjava:3.1.1'
|
implementation 'io.reactivex.rxjava3:rxjava:3.1.3'
|
||||||
|
|
||||||
//AndroidAsync
|
//AndroidAsync
|
||||||
implementation 'com.koushikdutta.async:androidasync:3.1.0'
|
implementation 'com.koushikdutta.async:androidasync:3.1.0'
|
||||||
|
|
||||||
// 权限请求框架:https://github.com/getActivity/XXPermissions
|
// 权限请求框架:https://github.com/getActivity/XXPermissions
|
||||||
implementation 'com.github.getActivity:XXPermissions:13.2'
|
implementation 'com.github.getActivity:XXPermissions:13.2'
|
||||||
|
|
||||||
//jetty
|
//jetty
|
||||||
implementation "org.eclipse.jetty:jetty-server:$jetty_version"
|
implementation "org.eclipse.jetty:jetty-server:9.2.30.v20200428"
|
||||||
implementation "org.eclipse.jetty:jetty-servlet:$jetty_version"
|
implementation "org.eclipse.jetty:jetty-servlet:9.2.30.v20200428"
|
||||||
}
|
}
|
@ -4,14 +4,21 @@ import androidx.annotation.NonNull;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.idormy.sms.forwarder.sender.SmsHubApiTask;
|
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.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 java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Data
|
@Data
|
||||||
public class SmsHubVo implements Serializable {
|
public class SmsHubVo implements Serializable {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -84,7 +91,7 @@ public class SmsHubVo implements Serializable {
|
|||||||
cache.put(key, deviInfoMap);
|
cache.put(key, deviInfoMap);
|
||||||
return deviInfoMap;
|
return deviInfoMap;
|
||||||
}
|
}
|
||||||
return (HashMap<String, String>) cache.get(key);
|
return (HashMap<String, String>) Objects.requireNonNull(cache.get(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Action {
|
public enum Action {
|
||||||
|
@ -8,7 +8,9 @@ import android.widget.Toast;
|
|||||||
import com.idormy.sms.forwarder.R;
|
import com.idormy.sms.forwarder.R;
|
||||||
import com.idormy.sms.forwarder.model.vo.SmsHubVo;
|
import com.idormy.sms.forwarder.model.vo.SmsHubVo;
|
||||||
import com.idormy.sms.forwarder.receiver.BaseServlet;
|
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;
|
import org.eclipse.jetty.server.Server;
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ import org.eclipse.jetty.server.Server;
|
|||||||
public class HttpServer {
|
public class HttpServer {
|
||||||
private static Boolean hasInit = false;
|
private static Boolean hasInit = false;
|
||||||
private static Server jettyServer;
|
private static Server jettyServer;
|
||||||
private static int port = 5000;
|
private static final int port = 5000;
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private static Context context;
|
private static Context context;
|
||||||
private static long ts = 0L;
|
private static long ts = 0L;
|
||||||
|
@ -2,7 +2,6 @@ package com.idormy.sms.forwarder.utils;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.*;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -16,19 +15,23 @@ import java.net.URLEncoder;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
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 {
|
public class HttpUtil {
|
||||||
private static final OkHttpClient client = new OkHttpClient();
|
private static final OkHttpClient client = new OkHttpClient();
|
||||||
private static final String TAG = "HttpUtil";
|
private static final String TAG = "HttpUtil";
|
||||||
private static Boolean hasInit = false;
|
private static Boolean hasInit = false;
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private static Context context;
|
private static Context context;
|
||||||
// @SuppressLint("StaticFieldLeak")
|
|
||||||
// private static Handler handError;
|
|
||||||
private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");
|
private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("HandlerLeak")
|
@SuppressLint("HandlerLeak")
|
||||||
public static void init(Context context) {
|
public static void init(Context context) {
|
||||||
//noinspection SynchronizeOnNonFinalField
|
//noinspection SynchronizeOnNonFinalField
|
||||||
@ -95,6 +98,7 @@ public class HttpUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@NonNull
|
@NonNull
|
||||||
public static StringBuilder appendQueryStr(String tag, String url, Object param) {
|
public static StringBuilder appendQueryStr(String tag, String url, Object param) {
|
||||||
StringBuilder resUrl = new StringBuilder(url);
|
StringBuilder resUrl = new StringBuilder(url);
|
||||||
|
@ -12,6 +12,7 @@ public class Lamda {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
public interface Func<T, R> {
|
public interface Func<T, R> {
|
||||||
R execute(T t) throws Exception;
|
R execute(T t) throws Exception;
|
||||||
|
|
||||||
|
@ -7,7 +7,10 @@ import android.util.Log;
|
|||||||
import com.idormy.sms.forwarder.model.LogModel;
|
import com.idormy.sms.forwarder.model.LogModel;
|
||||||
import com.idormy.sms.forwarder.model.vo.SmsHubVo;
|
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;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class SmsHubActionHandler {
|
public class SmsHubActionHandler {
|
||||||
@ -44,6 +47,7 @@ public class SmsHubActionHandler {
|
|||||||
|
|
||||||
public static synchronized List<SmsHubVo> getData(SmsHubMode smsHubMode) {
|
public static synchronized List<SmsHubVo> getData(SmsHubMode smsHubMode) {
|
||||||
List<SmsHubVo> smsHubVoList = cache.get(smsHubMode);
|
List<SmsHubVo> smsHubVoList = cache.get(smsHubMode);
|
||||||
|
assert smsHubVoList != null;
|
||||||
if (smsHubVoList.size() > 0) {
|
if (smsHubVoList.size() > 0) {
|
||||||
cache.put(smsHubMode, new ArrayList<>());
|
cache.put(smsHubMode, new ArrayList<>());
|
||||||
return smsHubVoList;
|
return smsHubVoList;
|
||||||
|
@ -2,12 +2,14 @@
|
|||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
tools:ignore="TooManyViews">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -250,56 +252,100 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/layout_cancel_app_notify"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_marginTop="2dp"
|
android:layout_height="wrap_content"
|
||||||
android:background="@android:color/white"
|
android:layout_marginTop="2dp"
|
||||||
android:gravity="center_vertical"
|
android:background="@android:color/white"
|
||||||
android:orientation="horizontal"
|
android:gravity="center_vertical"
|
||||||
android:padding="15dp">
|
android:orientation="horizontal"
|
||||||
|
android:padding="15dp"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="4"
|
android:text="@string/cancel_app_notify"
|
||||||
android:orientation="vertical">
|
android:textStyle="bold"
|
||||||
|
tools:ignore="RelativeOverlap" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/send_sms_config_title"
|
android:gravity="end"
|
||||||
android:textStyle="bold"
|
android:text="@string/cancel_app_notify_tips"
|
||||||
tools:ignore="RelativeOverlap" />
|
android:textSize="9sp"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="end"
|
|
||||||
android:text="@string/send_sms_config_title2"
|
|
||||||
android:textSize="9sp"
|
|
||||||
tools:ignore="SmallSp" />
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/editText_text_sms_hub_url"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="5dp"
|
|
||||||
android:autofillHints=""
|
|
||||||
android:ems="16"
|
|
||||||
android:inputType="text"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:text=""
|
|
||||||
tools:ignore="LabelFor" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_enable_sms_hub"
|
android:id="@+id/switch_cancel_app_notify"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:textSize="18sp"
|
||||||
|
tools:ignore="UseSwitchCompatOrMaterialXml" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
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">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/send_sms_config_title"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:ignore="RelativeOverlap" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="end"
|
android:gravity="end"
|
||||||
android:textSize="18sp"
|
android:text="@string/send_sms_config_title2"
|
||||||
tools:ignore="UseSwitchCompatOrMaterialXml" />
|
android:textSize="9sp"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/editText_text_sms_hub_url"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:autofillHints=""
|
||||||
|
android:ems="16"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text=""
|
||||||
|
tools:ignore="LabelFor" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/switch_enable_sms_hub"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:textSize="18sp"
|
||||||
|
tools:ignore="UseSwitchCompatOrMaterialXml" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -710,7 +756,7 @@
|
|||||||
android:gravity="end"
|
android:gravity="end"
|
||||||
android:text="@string/enable_exclude_from_recents_tips"
|
android:text="@string/enable_exclude_from_recents_tips"
|
||||||
android:textSize="9sp"
|
android:textSize="9sp"
|
||||||
tools:ignore="SmallSp,TooManyViews" />
|
tools:ignore="SmallSp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<Switch
|
<Switch
|
||||||
@ -760,7 +806,7 @@
|
|||||||
android:background="@color/colorBlueGreyDark"
|
android:background="@color/colorBlueGreyDark"
|
||||||
android:onClick="initSetting"
|
android:onClick="initSetting"
|
||||||
android:text="@string/init_setting"
|
android:text="@string/init_setting"
|
||||||
tools:ignore="ButtonStyle,NestedWeights,TooManyViews,UsingOnClickInXml" />
|
tools:ignore="ButtonStyle,NestedWeights,UsingOnClickInXml" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -166,7 +166,7 @@
|
|||||||
<string name="retry_interval_tips">Retry five times after it fails</string>
|
<string name="retry_interval_tips">Retry five times after it fails</string>
|
||||||
<string name="forward_sms">Forward sms</string>
|
<string name="forward_sms">Forward sms</string>
|
||||||
<string name="forward_sms_tips">Main switch, requires permissions to read and sned SMS messages, especially verification SMS texts.</string>
|
<string name="forward_sms_tips">Main switch, requires permissions to read and sned SMS messages, especially verification SMS texts.</string>
|
||||||
<string name="forward_missed_calls">Forward missed calls</string>
|
<string name="forward_missed_calls">Forward calls log</string>
|
||||||
<string name="forward_missed_calls_tips">Main switch, requires permissions to read call log and contacts.</string>
|
<string name="forward_missed_calls_tips">Main switch, requires permissions to read call log and contacts.</string>
|
||||||
<string name="forward_app_notify">Forward app Ntf.</string>
|
<string name="forward_app_notify">Forward app Ntf.</string>
|
||||||
<string name="forward_app_notify_tips">Main switch, requires permission to read notification.</string>
|
<string name="forward_app_notify_tips">Main switch, requires permission to read notification.</string>
|
||||||
@ -211,7 +211,7 @@
|
|||||||
<string name="local_ip">Local IP:</string>
|
<string name="local_ip">Local IP:</string>
|
||||||
<string name="operating_instruction">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!</string> <!-- 原文是“新旧手机”,英文翻译中处理为“源”手机和“目标”手机,因为担心“新旧”的表述引起混淆(有没一种可能就是用户就是用从新手机的设备复制到旧手机上去呢?)。 -->
|
<string name="operating_instruction">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!</string> <!-- 原文是“新旧手机”,英文翻译中处理为“源”手机和“目标”手机,因为担心“新旧”的表述引起混淆(有没一种可能就是用户就是用从新手机的设备复制到旧手机上去呢?)。 -->
|
||||||
<string name="send">Start Server</string>
|
<string name="send">Start Server</string>
|
||||||
<string name="stop">Stop</string>
|
<string name="stop">Stop Server</string>
|
||||||
<string name="old_mobile_phone">I\'m the SCOURCE phone</string>
|
<string name="old_mobile_phone">I\'m the SCOURCE phone</string>
|
||||||
<string name="receive">Receive</string>
|
<string name="receive">Receive</string>
|
||||||
<string name="new_mobile_phone">I\'m the DESTINATION phone</string>
|
<string name="new_mobile_phone">I\'m the DESTINATION phone</string>
|
||||||
@ -271,5 +271,5 @@
|
|||||||
<string name="privacy_policy">Privacy Policy</string>
|
<string name="privacy_policy">Privacy Policy</string>
|
||||||
<string name="agree">Agree</string>
|
<string name="agree">Agree</string>
|
||||||
<string name="disagree">Disagree</string>
|
<string name="disagree">Disagree</string>
|
||||||
<string name="privacy_policy_text">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;</string>
|
<string name="privacy_policy_text">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;</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,7 +166,7 @@
|
|||||||
<string name="retry_interval_tips">接口请求失败后将重试5次</string>
|
<string name="retry_interval_tips">接口请求失败后将重试5次</string>
|
||||||
<string name="forward_sms">转发短信广播</string>
|
<string name="forward_sms">转发短信广播</string>
|
||||||
<string name="forward_sms_tips">总开关,请授予读取短信、通知类短信、发送短信等权限</string>
|
<string name="forward_sms_tips">总开关,请授予读取短信、通知类短信、发送短信等权限</string>
|
||||||
<string name="forward_missed_calls">转发未接来电</string>
|
<string name="forward_missed_calls">转发通话记录</string>
|
||||||
<string name="forward_missed_calls_tips">总开关,请授予读取通话记录、联系人等权限</string>
|
<string name="forward_missed_calls_tips">总开关,请授予读取通话记录、联系人等权限</string>
|
||||||
<string name="forward_app_notify">转发应用通知</string>
|
<string name="forward_app_notify">转发应用通知</string>
|
||||||
<string name="forward_app_notify_tips">总开关,请先授予通知使用权</string>
|
<string name="forward_app_notify_tips">总开关,请先授予通知使用权</string>
|
||||||
@ -210,7 +210,7 @@
|
|||||||
<string name="local_ip">本机IP:</string>
|
<string name="local_ip">本机IP:</string>
|
||||||
<string name="operating_instruction">操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离)\n2.旧手机直接点【发送】按钮,获取到【服务端IP】\n3.新手机填写【服务端IP】后,点【接收】按钮\n【注意】新手机接收后,发送通道、转发规则将完全被覆盖,清空历史记录!</string>
|
<string name="operating_instruction">操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离)\n2.旧手机直接点【发送】按钮,获取到【服务端IP】\n3.新手机填写【服务端IP】后,点【接收】按钮\n【注意】新手机接收后,发送通道、转发规则将完全被覆盖,清空历史记录!</string>
|
||||||
<string name="send">启动服务</string>
|
<string name="send">启动服务</string>
|
||||||
<string name="stop">停止</string>
|
<string name="stop">停止服务</string>
|
||||||
<string name="old_mobile_phone">我是旧手机</string>
|
<string name="old_mobile_phone">我是旧手机</string>
|
||||||
<string name="receive">接收</string>
|
<string name="receive">接收</string>
|
||||||
<string name="new_mobile_phone">我是新手机</string>
|
<string name="new_mobile_phone">我是新手机</string>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.jetty_version = '9.2.30.v20200428'
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://maven.aliyun.com/repository/google' }
|
maven { url 'https://maven.aliyun.com/repository/google' }
|
||||||
maven { url 'https://maven.aliyun.com/repository/central' }
|
maven { url 'https://maven.aliyun.com/repository/central' }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user