x1ongzhu 1 vuosi sitten
vanhempi
commit
793120d3fc

+ 1 - 1
app/build.gradle

@@ -20,7 +20,7 @@ android {
         applicationId "com.example.modifier"
         minSdk 26
         targetSdk 34
-        versionCode 106
+        versionCode 107
         versionName "1.0.1"
         archivesBaseName = "modifier-${versionCode}"
 

+ 20 - 1
app/src/main/java/com/example/modifier/Global.kt

@@ -1,5 +1,6 @@
 package com.example.modifier
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.content.Intent
 import android.os.Build
@@ -18,6 +19,7 @@ import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import org.apache.commons.io.FileUtils
 import org.apache.commons.io.IOUtils
+import org.apache.commons.lang3.RandomStringUtils
 import org.apache.commons.lang3.StringUtils
 import java.io.File
 import java.io.FileWriter
@@ -35,7 +37,7 @@ object Global {
     var name: String? = ""
 
     @JvmField
-    var telephonyConfig: TelephonyConfig = TelephonyConfig("", "", "", "", "", "", "")
+    var telephonyConfig: TelephonyConfig = TelephonyConfig("", "", "", "", "", "", "", "")
 
     private const val TAG = "Modifier"
 
@@ -91,6 +93,7 @@ object Global {
         Global.telephonyConfig.mnc = telephonyConfig.mnc
         Global.telephonyConfig.number = telephonyConfig.number
         Global.telephonyConfig.country = telephonyConfig.country
+        Global.telephonyConfig.areaCode = telephonyConfig.areaCode
         Global.telephonyConfig.iccid = telephonyConfig.iccid
         Global.telephonyConfig.imei = telephonyConfig.imei
         Global.telephonyConfig.imsi = telephonyConfig.imsi
@@ -498,4 +501,20 @@ object Global {
         }
         return hasRoot
     }
+
+    @SuppressLint("DefaultLocale")
+    @JvmStatic
+    fun genICCID(mnc: String, areaCode: String): String {
+        val prefix = String.format("89%02d%s", areaCode.toInt(), mnc)
+        return prefix + RandomStringUtils.randomNumeric(20 - prefix.length)
+    }
+
+    @JvmStatic
+    suspend fun rebooted(): Boolean {
+        if (shellRun("getprop rebooted").contains("yes")) {
+            return false
+        }
+        shellRun("setprop rebooted yes")
+        return true
+    }
 }

+ 1 - 0
app/src/main/java/com/example/modifier/http/response/RcsNumberResponse.kt

@@ -15,6 +15,7 @@ data class RcsNumberResponse(
     val from: String,
     val mcc: String,
     val mnc: String,
+    val areaCode: String,
     val country: String,
     val number: String,
     val message: String?,

+ 2 - 1
app/src/main/java/com/example/modifier/model/TelephonyConfig.kt

@@ -7,5 +7,6 @@ data class TelephonyConfig(
     var iccid: String,
     var imsi: String,
     var imei: String,
-    var country: String
+    var country: String,
+    var areaCode: String,
 )

+ 6 - 3
app/src/main/java/com/example/modifier/service/ModifierService.kt

@@ -288,7 +288,9 @@ class ModifierService : AccessibilityService(), Emitter.Listener {
         Log.i(TAG, "Starting ModifierService")
         CoroutineScope(Dispatchers.IO).launch {
             preparing.postValue(true)
-            delay(2.minutes)
+            if (Global.rebooted()) {
+                delay(2.minutes)
+            }
             if (Global.hasRoot()) {
                 Global.syncTime()
                 if (Build.MODEL.startsWith("SM-F707") || Build.MODEL.startsWith("SM-F711")) {
@@ -813,12 +815,13 @@ class ModifierService : AccessibilityService(), Emitter.Listener {
                             rcsNumber.number,
                             rcsNumber.mcc,
                             rcsNumber.mnc,
-                            RandomStringUtils.randomNumeric(20),
+                            Global.genICCID(rcsNumber.mnc, rcsNumber.areaCode),
                             rcsNumber.mcc + rcsNumber.mnc + RandomStringUtils.randomNumeric(
                                 15 - rcsNumber.mcc.length - rcsNumber.mnc.length
                             ),
                             Utils.generateIMEI(),
-                            rcsNumber.country
+                            rcsNumber.country,
+                            rcsNumber.areaCode
                         )
                     )
 

+ 17 - 4
app/src/main/java/com/example/modifier/ui/settings/SettingsFragment.kt

@@ -102,7 +102,16 @@ class SettingsFragment : Fragment() {
         }
         binding = FragmentSettingsBinding.inflate(inflater, container, false)
         binding.tlIccid.setEndIconOnClickListener {
-            binding.etIccid.setText(RandomStringUtils.randomNumeric(20))
+            if (binding.etMcc.text.isNullOrEmpty() || binding.etMnc.text.isNullOrEmpty() || binding.etAreaCode.text.isNullOrEmpty()) {
+                Toast.makeText(context, "MNC and Code required", Toast.LENGTH_SHORT).show()
+                return@setEndIconOnClickListener
+            }
+            binding.etIccid.setText(
+                Global.genICCID(
+                    binding.etMnc.text.toString(),
+                    binding.etAreaCode.text.toString()
+                )
+            )
         }
         binding.tlImsi.setEndIconOnClickListener {
             val mcc = Optional.ofNullable(
@@ -192,11 +201,12 @@ class SettingsFragment : Fragment() {
                 val mcc = res.mcc
                 val mnc = res.mnc
                 val country = res.country
-                val iccid = RandomStringUtils.randomNumeric(20)
+                val areaCode = res.areaCode
+                val iccid = Global.genICCID(mnc, areaCode)
                 val imsi =
                     mcc + mnc + RandomStringUtils.randomNumeric(15 - mcc.length - mnc.length)
                 val imei = Utils.generateIMEI()
-                save(TelephonyConfig(number, mcc, mnc, iccid, imsi, imei, country))
+                save(TelephonyConfig(number, mcc, mnc, iccid, imsi, imei, country, areaCode))
 
                 val telephonyConfig = Global.telephonyConfig
                 binding.etNumber.setText(telephonyConfig.number)
@@ -206,6 +216,7 @@ class SettingsFragment : Fragment() {
                 binding.etImsi.setText(telephonyConfig.imsi)
                 binding.etImei.setText(telephonyConfig.imei)
                 binding.etCountry.setText(telephonyConfig.country)
+                binding.etAreaCode.setText(telephonyConfig.areaCode)
 
                 binding.btnRequest.icon = null
                 binding.btnRequest.isEnabled = true
@@ -303,6 +314,7 @@ class SettingsFragment : Fragment() {
                 binding.etImsi.setText(telephonyConfig.imsi)
                 binding.etImei.setText(telephonyConfig.imei)
                 binding.etCountry.setText(telephonyConfig.country)
+                binding.etAreaCode.setText(telephonyConfig.areaCode)
             }
         }
 
@@ -350,7 +362,8 @@ class SettingsFragment : Fragment() {
                     binding.etIccid.text.toString(),
                     binding.etImsi.text.toString(),
                     binding.etImei.text.toString(),
-                    binding.etCountry.text.toString()
+                    binding.etCountry.text.toString(),
+                    binding.etAreaCode.text.toString()
                 )
             )
             handler.post {

+ 3 - 2
app/src/main/java/com/example/modifier/ui/settings/SettingsViewModel.kt

@@ -32,12 +32,13 @@ class SettingsViewModel : ViewModel() {
                 rcsRes.number,
                 rcsRes.mcc,
                 rcsRes.mnc,
-                RandomStringUtils.randomNumeric(20),
+                Global.genICCID(rcsRes.mnc, rcsRes.areaCode),
                 rcsRes.mcc + rcsRes.mnc + RandomStringUtils.randomNumeric(
                     15 - rcsRes.mcc.length - rcsRes.mnc.length
                 ),
                 Utils.generateIMEI(),
-                rcsRes.country
+                rcsRes.country,
+                rcsRes.areaCode
             )
         )
 

+ 15 - 0
app/src/main/res/layout/fragment_settings.xml

@@ -162,6 +162,21 @@
                                     android:layout_height="wrap_content"
                                     android:lines="1" />
                             </com.google.android.material.textfield.TextInputLayout>
+
+                            <com.google.android.material.textfield.TextInputLayout
+                                android:layout_width="0dp"
+                                android:layout_height="wrap_content"
+                                android:layout_marginLeft="16dp"
+                                android:layout_weight="1"
+                                android:hint="Code">
+
+                                <com.google.android.material.textfield.TextInputEditText
+                                    android:id="@+id/et_area_code"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:inputType="number"
+                                    android:lines="1" />
+                            </com.google.android.material.textfield.TextInputLayout>
                         </LinearLayout>
 
                         <com.google.android.material.textfield.TextInputLayout

+ 1 - 8
app/src/test/java/com/example/modifier/ExampleUnitTest.kt

@@ -23,14 +23,7 @@ import java.time.format.DateTimeFormatter
 class ExampleUnitTest {
     @Test
     fun test1() {
-        val time = ZonedDateTime.parse(
-            "2024-07-03T10:07:17.000Z",
-            DateTimeFormatter.ISO_ZONED_DATE_TIME
-        ).withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime()
-        val now = LocalDateTime.now()
-
-        println("=====> $time")
-        println("=====> $now")
+        println(String.format("%02d", "1".toInt()))
     }