x1ongzhu преди 1 година
родител
ревизия
a78e1ad6bf

+ 1 - 1
app/build.gradle

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

+ 24 - 17
app/src/main/java/com/example/modifier/Global.kt

@@ -341,31 +341,38 @@ object Global {
     }
 
     @JvmStatic
-    suspend fun killPhoneProcess(force: Boolean = false) {
+    suspend fun killPhoneProcess(force: Boolean = false): Boolean {
         try {
             if (!force) {
                 if (shellRun("getprop phonekilled")["output"]!!.contains("yes")) {
-                    return
+                    return true
                 }
             }
-            val pid = shellRun("pidof com.android.phone")["output"]!!.trim()
-            if (!Regex("[0-9]+").matches(pid)) {
-                Log.e(TAG, "killPhoneProcess: pid not found")
-                return
-            }
-            Log.i(TAG, "killPhoneProcess: pid=$pid")
-            shellRun("kill -9 $pid", "setprop phonekilled yes")
-            delay(1000)
-
-            val pidNew = shellRun("pidof com.android.phone")["output"]!!.trim()
-            if (pidNew == pid) {
-                Log.e(TAG, "killPhoneProcess: failed to kill phone process")
-            } else {
-                Log.i(TAG, "killPhoneProcess: success, new pid: $pidNew")
+            run kill@{
+                repeat(3) {
+                    val pid = shellRun("pidof com.android.phone")["output"]!!.trim()
+                    if (!Regex("[0-9]+").matches(pid)) {
+                        Log.e(TAG, "killPhoneProcess: pid not found")
+                        return true
+                    }
+                    Log.i(TAG, "killPhoneProcess: pid=$pid")
+                    shellRun("kill -9 $pid")
+                    delay(1000)
+
+                    val pidNew = shellRun("pidof com.android.phone")["output"]!!.trim()
+                    if (pidNew == pid) {
+                        Log.e(TAG, "killPhoneProcess: failed to kill phone process")
+                    } else {
+                        Log.i(TAG, "killPhoneProcess: success, new pid: $pidNew")
+                        shellRun("kill -9 $pid", "setprop phonekilled yes")
+                        return true
+                    }
+                }
             }
         } catch (e: Exception) {
-            e.printStackTrace()
+            Log.e(TAG, "Error Kill Phone", e)
         }
+        return false
     }
 
     @JvmStatic

+ 8 - 3
app/src/main/java/com/example/modifier/ui/utils/UtilsFragment.kt

@@ -198,10 +198,15 @@ class UtilsFragment : Fragment() {
             binding.btnKillPhone.isEnabled = false
             Utils.makeLoadingButton(context, binding.btnKillPhone)
             CoroutineScope(Dispatchers.IO).launch {
-                Global.killPhoneProcess(force = true)
+                val success = Global.killPhoneProcess(force = true)
                 withContext(Dispatchers.Main) {
-                    binding.btnKillPhone.setIconResource(R.drawable.ic_done)
-                    binding.btnKillPhone.text = "OK"
+                    if (success) {
+                        binding.btnKillPhone.setIconResource(R.drawable.ic_done)
+                        binding.btnKillPhone.text = "OK"
+                    } else {
+                        binding.btnKillPhone.setIconResource(R.drawable.ic_error)
+                        binding.btnKillPhone.text = "Fail"
+                    }
                     delay(1500L)
                     binding.btnKillPhone.isEnabled = true
                     binding.btnKillPhone.icon = null

+ 10 - 0
app/src/main/res/drawable/ic_error.xml

@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="960"
+    android:viewportHeight="960"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
+</vector>