diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt index d07deab7..47338846 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt @@ -196,8 +196,8 @@ class SendSmsFragment : BaseFragment(), View @SuppressLint("SetTextI18n") private fun checkSetting(): SmsSetting { phoneNumbers = binding!!.etPhoneNumbers.text.toString().trim() - if (!getString(R.string.phone_numbers_regex).toRegex().matches(phoneNumbers)) { - throw Exception(getString(R.string.phone_numbers_error)) + if (!getString(R.string.phone_numbers_with_tag_regex).toRegex().matches(phoneNumbers)) { + throw Exception(getString(R.string.phone_numbers_with_tag_error)) } msgContent = binding!!.etMsgContent.text.toString().trim() diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt index 1977a50e..1ed81b9c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt @@ -29,7 +29,7 @@ import com.xuexiang.xutil.app.IntentUtils import com.xuexiang.xutil.data.DateUtils import com.xuexiang.xutil.resource.ResUtils.getString import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale @Suppress("DEPRECATION") class PhoneUtils private constructor() { @@ -43,7 +43,7 @@ class PhoneUtils private constructor() { val infoList = HashMap() try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { - println("1.版本超过5.1,调用系统方法") + Log.d(TAG, "1.版本超过5.1,调用系统方法") val mSubscriptionManager = XUtil.getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager ActivityCompat.checkSelfPermission( XUtil.getContext(), permission.READ_PHONE_STATE @@ -53,18 +53,18 @@ class PhoneUtils private constructor() { //1.1.1 有使用的卡,就遍历所有卡 for (subscriptionInfo in activeSubscriptionInfoList) { val simInfo = SimInfo() - simInfo.mCarrierName = subscriptionInfo.carrierName.toString() - simInfo.mIccId = subscriptionInfo.iccId.toString() + simInfo.mCarrierName = subscriptionInfo.carrierName?.toString() + simInfo.mIccId = subscriptionInfo.iccId?.toString() simInfo.mSimSlotIndex = subscriptionInfo.simSlotIndex - simInfo.mNumber = subscriptionInfo.number.toString() - simInfo.mCountryIso = subscriptionInfo.countryIso.toString() + simInfo.mNumber = subscriptionInfo.number?.toString() + simInfo.mCountryIso = subscriptionInfo.countryIso?.toString() simInfo.mSubscriptionId = subscriptionInfo.subscriptionId - println(simInfo.toString()) + Log.d(TAG, simInfo.toString()) infoList[simInfo.mSimSlotIndex] = simInfo } } } else { - println("2.版本低于5.1的系统,首先调用数据库,看能不能访问到") + Log.d(TAG, "2.版本低于5.1的系统,首先调用数据库,看能不能访问到") val uri = Uri.parse("content://telephony/siminfo") //访问raw_contacts表 val resolver: ContentResolver = XUtil.getContext().contentResolver val cursor = resolver.query( @@ -81,7 +81,7 @@ class PhoneUtils private constructor() { simInfo.mNumber = cursor.getString(cursor.getColumnIndex("number")) simInfo.mCountryIso = cursor.getString(cursor.getColumnIndex("mcc")) //val id = cursor.getString(cursor.getColumnIndex("_id")) - println(simInfo.toString()) + Log.d(TAG, simInfo.toString()) infoList[simInfo.mSimSlotIndex] = simInfo } while (cursor.moveToNext()) cursor.close() @@ -93,7 +93,7 @@ class PhoneUtils private constructor() { } //仍然获取不到/只获取到一个->取出备注 /*if (infoList.isEmpty() || infoList.size == 1) { - println("3.直接取出备注框的数据作为信息") + Log.d(TAG, "3.直接取出备注框的数据作为信息") //为空,两个卡都没有获取到信息 if (infoList.isEmpty()) { //卡1备注信息不为空 @@ -142,7 +142,7 @@ class PhoneUtils private constructor() { } } }*/ - Log.e(TAG, infoList.toString()) + Log.i(TAG, infoList.toString()) return infoList } @@ -169,10 +169,21 @@ class PhoneUtils private constructor() { @SuppressLint("SoonBlockedPrivateApi", "DiscouragedPrivateApi") @RequiresPermission(permission.SEND_SMS) fun sendSms(subId: Int, mobileList: String, message: String): String? { + if (TextUtils.isEmpty(mobileList) || TextUtils.isEmpty(message)) { + Log.e(TAG, "mobileList or message is empty!") + return "mobileList or message is empty!" + } + val mobiles = mobileList.replace(";", ";").replace(",", ";").replace(",", ";") Log.d(TAG, "subId = $subId, mobiles = $mobiles, message = $message") val mobileArray = mobiles.split(";".toRegex()).toTypedArray() for (mobile in mobileArray) { + Log.d(TAG, "mobile = $mobile") + if (!isValidPhoneNumber(mobile)) { + Log.e(TAG, "mobile ($mobile) is invalid!") + continue + } + try { val sendFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) PendingIntent.FLAG_IMMUTABLE else PendingIntent.FLAG_ONE_SHOT val sendPI = PendingIntent.getBroadcast(XUtil.getContext(), 0, Intent(), sendFlags) @@ -559,6 +570,12 @@ class PhoneUtils private constructor() { } } + //判断是否是手机号码(宽松判断) + private fun isValidPhoneNumber(phoneNumber: String): Boolean { + val regex = Regex("^\\+?\\d{3,20}$") + return regex.matches(phoneNumber) + } + } init { diff --git a/app/src/main/res/layout/fragment_tasks_action_send_sms.xml b/app/src/main/res/layout/fragment_tasks_action_send_sms.xml index 9e5d06cc..007436ce 100644 --- a/app/src/main/res/layout/fragment_tasks_action_send_sms.xml +++ b/app/src/main/res/layout/fragment_tasks_action_send_sms.xml @@ -93,11 +93,11 @@ android:id="@+id/et_phone_numbers" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/phone_numbers_hint" + android:hint="@string/phone_numbers_with_tag_hint" android:singleLine="true" app:met_clearButton="true" - app:met_errorMessage="@string/phone_numbers_error" - app:met_regexp="@string/phone_numbers_regex" + app:met_errorMessage="@string/phone_numbers_with_tag_error" + app:met_regexp="@string/phone_numbers_with_tag_regex" app:met_validateOnFocusLost="true" tools:ignore="TouchTargetSizeCheck,TextContrastCheck" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 21c1ef31..dd9145dc 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -705,7 +705,10 @@ Phone Numbers Required, separate multiple phone numbers with semicolons Invalid Phone Numbers, eg. 15888888888;19999999999 - ^\\d+(;\\d+)*$ + ^(\\+?\\d{3,20})(;\\+?\\d{3,20})*$ + Required, separate multiple phone numbers or tag with semicolons + Invalid Phone Numbers, eg. 15888888888;{{FROM}};{{SMS###\s*SMS,{([^}]+)},{([^}]+)}\s*===$1}} + ^((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\})(;((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\}))*$ Msg Content Required, one entry within 70 characters, more than 70 characters, one entry for every additional 64 characters Msg Content cannot be empty, up to 390 characters (6 SMS) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4f927822..87766514 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -706,7 +706,10 @@ 手机号码 必填,多个手机号用半角分号分隔 手机号码格式错误,例:15888888888;19999999999 - ^([+]?\\d+)(;[+]?\\d+)*$ + ^(\\+?\\d{3,20})(;\\+?\\d{3,20})*$ + 必填,多个手机号或标签用半角分号分隔 + 手机号码格式错误,例:15888888888;{{FROM}};{{SMS###\s*SMS,{([^}]+)},{([^}]+)}\s*===$1}} + ^((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\})(;((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\}))*$ 短信内容 必填,70个字符内算一条,超过70个字符,每增加64字符累加1条 短信内容不能为空,最多390字符(6条短信) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a5bfdf00..32d2749c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -706,7 +706,10 @@ 手機號碼 必填,多個手機號用半角分號分隔 手機號碼格式錯誤,例:15888888888;19999999999 - ^([+]?\\d+)(;[+]?\\d+)*$ + ^(\\+?\\d{3,20})(;\\+?\\d{3,20})*$ + 必填,多個手機號或標籤用半角分號分隔 + 手機號碼格式錯誤,例:15888888888;{{FROM}};{{SMS###\s*SMS,{([^}]+)},{([^}]+)}\s*===$1}} + ^((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\})(;((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\}))*$ 簡訊內容 必填,70個字符內算一條,超過70個字符,每增加64字符累加1條 簡訊內容不能為空,最多390字符(6條簡訊) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f85c3f63..ef601db0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -732,7 +732,10 @@ 手机号码 必填,多个手机号用半角分号分隔 手机号码格式错误,例:15888888888;19999999999 - ^([+]?\\d+)(;[+]?\\d+)*$ + ^(\\+?\\d{3,20})(;\\+?\\d{3,20})*$ + 必填,多个手机号或标签用半角分号分隔 + 手机号码格式错误,例:15888888888;{{FROM}};{{SMS###\s*SMS,{([^}]+)},{([^}]+)}\s*===$1}} + ^((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\})(;((\\+?\\d{3,20})|\\{\\{([^#]+)(?:###([^=]+)===(.*?))?\\}\\}))*$ 短信内容 必填,70个字符内算一条,超过70个字符,每增加64字符累加1条 短信内容不能为空,最多390字符(6条短信)