xiongzhu hai 11 meses
pai
achega
e8c9e08450

+ 21 - 7
app/src/main/AndroidManifest.xml

@@ -6,6 +6,7 @@
         android:name="android.hardware.telephony"
         android:required="false" />
 
+    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission
         android:name="android.permission.QUERY_ALL_PACKAGES"
@@ -23,7 +24,6 @@
     <uses-permission android:name="android.permission.RECEIVE_MMS" />
     <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
     <uses-permission android:name="android.permission.SEND_SMS" />
-    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.READ_SMS" />
     <uses-permission android:name="android.permission.WRITE_SMS" />
@@ -31,9 +31,11 @@
         android:name="android.permission.PACKAGE_USAGE_STATS"
         tools:ignore="ProtectedPermissions" />
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
     <queries>
         <package android:name="com.github.metacubex.clash" />
@@ -49,8 +51,15 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
-        android:usesCleartextTraffic="true"
-        tools:targetApi="31">
+        android:usesCleartextTraffic="true">
+
+        <provider
+            android:name=".repo.SimInfoProvider"
+            android:authorities="SimInfo"
+            android:enabled="true"
+            android:exported="true"
+            tools:ignore="ExportedContentProvider" />
+
         <activity
             android:name=".MainActivity2"
             android:exported="false" />
@@ -88,7 +97,9 @@
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.SENDTO" />
+
                 <category android:name="android.intent.category.DEFAULT" />
+
                 <data android:scheme="smsto" />
             </intent-filter>
         </activity>
@@ -128,7 +139,9 @@
             android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
             <intent-filter>
                 <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
+
                 <category android:name="android.intent.category.DEFAULT" />
+
                 <data android:scheme="smsto" />
             </intent-filter>
         </service>
@@ -144,15 +157,16 @@
                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
             </intent-filter>
         </receiver>
-
         <receiver
             android:name=".sms.MmsReceiver"
             android:exported="true"
             android:permission="android.permission.BROADCAST_WAP_PUSH">
             <intent-filter>
                 <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
+
                 <data android:mimeType="application/vnd.wap.mms-message" />
             </intent-filter>
         </receiver>
     </application>
+
 </manifest>

+ 82 - 0
app/src/main/java/com/example/modifier/repo/SimInfoProvider.kt

@@ -0,0 +1,82 @@
+package com.example.modifier.repo
+
+import android.content.ContentProvider
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import android.database.MatrixCursor
+import android.net.Uri
+import androidx.datastore.preferences.core.stringPreferencesKey
+import androidx.datastore.preferences.preferencesDataStore
+import com.example.modifier.BuildConfig
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.firstOrNull
+import kotlinx.coroutines.runBlocking
+
+class SimInfoProvider : ContentProvider() {
+    val Context.simInfoDataStore by preferencesDataStore(name = "${BuildConfig.APPLICATION_ID}.simInfo")
+
+    override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
+        return 0
+    }
+
+    override fun getType(uri: Uri): String? {
+        return null
+    }
+
+    override fun insert(uri: Uri, values: ContentValues?): Uri? {
+        return null
+    }
+
+    override fun onCreate(): Boolean {
+        return true
+    }
+
+    override fun query(
+        uri: Uri, projection: Array<String>?, selection: String?,
+        selectionArgs: Array<String>?, sortOrder: String?
+    ): Cursor? {
+        val matrixCursor = MatrixCursor(
+            arrayOf(
+                "mcc",
+                "mnc",
+                "iccid",
+                "imsi",
+                "imei",
+                "number",
+                "country",
+                "carrier_id",
+                "carrier_name",
+                "upi_policy"
+            )
+        );
+        runBlocking {
+            val simInfo = SpoofedSimInfoRepo.instance.spoofedSimInfo.value
+            if (simInfo != null) {
+                matrixCursor.addRow(
+                    arrayOf(
+                        simInfo.mcc,
+                        simInfo.mnc,
+                        simInfo.iccid,
+                        simInfo.imsi,
+                        simInfo.imei,
+                        simInfo.number,
+                        simInfo.country,
+                        simInfo.carrierId,
+                        simInfo.carrierName,
+                        "upi-carrier-id-with-mo-sms-relax"
+                    )
+                )
+            }
+
+        }
+        return matrixCursor
+    }
+
+    override fun update(
+        uri: Uri, values: ContentValues?, selection: String?,
+        selectionArgs: Array<String>?
+    ): Int {
+        return 0
+    }
+}

+ 35 - 22
app/src/main/java/com/example/modifier/repo/SpoofedSimInfoRepo.kt

@@ -2,10 +2,16 @@ package com.example.modifier.repo
 
 import android.Manifest
 import android.annotation.SuppressLint
+import android.content.ContentProvider
+import android.content.ContentValues
 import android.content.Context
+import android.database.Cursor
+import android.database.MatrixCursor
+import android.net.Uri
 import android.os.Build
 import android.telephony.SubscriptionManager
 import android.telephony.TelephonyManager
+import android.util.Base64
 import android.util.Log
 import androidx.datastore.preferences.core.booleanPreferencesKey
 import androidx.datastore.preferences.core.edit
@@ -35,6 +41,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
+import org.json.JSONObject
 
 val Context.simInfoDataStore by preferencesDataStore(name = "${BuildConfig.APPLICATION_ID}.simInfo")
 
@@ -45,7 +52,7 @@ class SpoofedSimInfoRepo private constructor(private val context: Context) {
         val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { SpoofedSimInfoRepo(getContext()) }
     }
 
-    private object PreferencesKeys {
+    public object PreferencesKeys {
         val NUMBER_ID = intPreferencesKey("number_id")
         val NUMBER = stringPreferencesKey("number")
         val MCC = stringPreferencesKey("mcc")
@@ -116,6 +123,10 @@ class SpoofedSimInfoRepo private constructor(private val context: Context) {
 
     @SuppressLint("MissingPermission")
     suspend fun updateSpoofedSimInfo(spoofedSimInfo: SpoofedSimInfo, suspend: Boolean? = true) {
+        context.getSharedPreferences("share_sim_info", Context.MODE_PRIVATE)
+            ?.edit()
+            ?.putString("imei", spoofedSimInfo.imei)
+            ?.apply()
         context.simInfoDataStore.edit {
             it[PreferencesKeys.NUMBER_ID] = spoofedSimInfo.numberId
             it[PreferencesKeys.NUMBER] = spoofedSimInfo.number
@@ -132,27 +143,12 @@ class SpoofedSimInfoRepo private constructor(private val context: Context) {
         }
         try {
             if (ROOT_ACCESS) {
-                shellRun(
-                    *(when {
-                        suspend == true -> arrayOf(
-                            PACKAGE_GMS.kill(),
-                            PACKAGE_MESSAGING.kill(),
-                        )
-
-                        else -> emptyArray()
-                    } + arrayOf(
-                        "setprop persist.spoof.number ${spoofedSimInfo.number}",
-                        "setprop persist.spoof.mcc ${spoofedSimInfo.mcc}",
-                        "setprop persist.spoof.mnc ${spoofedSimInfo.mnc}",
-                        "setprop persist.spoof.iccid ${spoofedSimInfo.iccid}",
-                        "setprop persist.spoof.imsi ${spoofedSimInfo.imsi}",
-                        "setprop persist.spoof.imei ${spoofedSimInfo.imei}",
-                        "setprop persist.spoof.country ${spoofedSimInfo.country}",
-                        "setprop persist.spoof.carrier.id ${spoofedSimInfo.carrierId}",
-                        "setprop persist.spoof.carrier.name '${spoofedSimInfo.carrierName}'",
-                    ))
-                )
-
+                if (suspend == true) {
+                    shellRun(
+                        PACKAGE_GMS.kill(),
+                        PACKAGE_MESSAGING.kill(),
+                    )
+                }
                 val context = getContext()
                 val subscriptionManager: SubscriptionManager =
                     context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
@@ -279,6 +275,22 @@ class SpoofedSimInfoRepo private constructor(private val context: Context) {
                     )
                 }
             }
+
+            val jsonObject = JSONObject().apply {
+                put("mcc", spoofedSimInfo.mcc)
+                put("mnc", spoofedSimInfo.mnc)
+                put("iccid", spoofedSimInfo.iccid)
+                put("imsi", spoofedSimInfo.imsi)
+                put("imei", spoofedSimInfo.imei)
+                put("number", spoofedSimInfo.number)
+                put("country", spoofedSimInfo.country)
+                put("carrier_id", spoofedSimInfo.carrierId)
+                put("carrier_name", spoofedSimInfo.carrierName)
+            }
+            val base64 = Base64.encode(jsonObject.toString().toByteArray(), Base64.DEFAULT)
+                .toString(Charsets.UTF_8)
+            shellRun("echo '$base64' > /sdcard/Android/data/com.android.phone/files/config/config.json")
+
         } catch (e: Exception) {
             Log.e(TAG, "Error updateSpoofedSimInfo: ${e.message}", e)
         }
@@ -347,4 +359,5 @@ class SpoofedSimInfoRepo private constructor(private val context: Context) {
                 }
         }
     }
+
 }

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

@@ -45,7 +45,6 @@ import com.example.modifier.utils.checkPif
 import com.example.modifier.utils.clearConv
 import com.example.modifier.utils.findFirstByDesc
 import com.example.modifier.utils.hasRootAccess
-import com.example.modifier.utils.isRebooted
 import com.example.modifier.utils.killPhoneProcess
 import com.example.modifier.utils.optimize
 import com.example.modifier.utils.restartSelf
@@ -236,11 +235,7 @@ class ModifierService : AccessibilityService() {
             launch {
                 gmsgStateRepo.startLogging()
             }
-            if (ROOT_ACCESS && isRebooted()) {
-                delay(15.seconds)
-            } else {
-                delay(5000)
-            }
+            delay(15.seconds)
             appPrefsRepo.updateId()
             optimize()
             syncTime()

+ 56 - 20
app/src/main/java/com/example/modifier/ui/settings/SettingsFragment.kt

@@ -5,6 +5,13 @@ import android.annotation.SuppressLint
 import android.content.Context
 import android.content.DialogInterface
 import android.content.pm.PackageManager
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.wifi.WifiInfo
+import android.net.wifi.WifiManager
+import android.net.wifi.WifiManager.ScanResultsCallback
 import android.os.Bundle
 import android.telephony.SmsManager
 import android.telephony.SubscriptionManager
@@ -19,20 +26,21 @@ import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
+import androidx.core.content.ContextCompat.getSystemService
 import androidx.core.widget.addTextChangedListener
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.lifecycleScope
 import com.example.modifier.R
-import com.example.modifier.baseTag
 import com.example.modifier.Utils
+import com.example.modifier.baseTag
 import com.example.modifier.constants.servers
-import com.example.modifier.repo.AppPrefsRepo
 import com.example.modifier.databinding.FragmentSettingsBinding
-import com.example.modifier.http.ktorClient
 import com.example.modifier.http.api.RcsNumberApi
+import com.example.modifier.http.ktorClient
 import com.example.modifier.http.request.RcsNumberRequest
 import com.example.modifier.http.response.RcsNumberResponse
 import com.example.modifier.model.SpoofedSimInfo
+import com.example.modifier.repo.AppPrefsRepo
 import com.example.modifier.repo.SpoofedSimInfoRepo
 import com.example.modifier.utils.genICCID
 import com.example.modifier.utils.genIMEI
@@ -47,7 +55,6 @@ import io.ktor.http.contentType
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import org.apache.commons.lang3.RandomStringUtils
@@ -56,6 +63,7 @@ import org.apache.commons.validator.routines.UrlValidator
 import java.util.Objects
 import java.util.Optional
 
+
 @SuppressLint("SetTextI18n", "MissingPermission", "HardwareIds", "NewApi")
 class SettingsFragment : Fragment() {
     companion object {
@@ -63,7 +71,7 @@ class SettingsFragment : Fragment() {
     }
 
     private lateinit var binding: FragmentSettingsBinding
-    private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>
+    private lateinit var requestPermissionLauncher: ActivityResultLauncher<Array<String>>
     private val appPrefsRepo = AppPrefsRepo.instance
     private val spoofedSimInfoRepo = SpoofedSimInfoRepo.instance
 
@@ -75,15 +83,10 @@ class SettingsFragment : Fragment() {
         super.onCreate(savedInstanceState)
         requestPermissionLauncher =
             registerForActivityResult(
-                ActivityResultContracts.RequestPermission()
-            ) { isGranted: Boolean ->
-                if (isGranted) {
-                } else {
-                    // Explain to the user that the feature is unavailable because the
-                    // feature requires a permission that the user has denied. At the
-                    // same time, respect the user's decision. Don't link to system
-                    // settings in an effort to convince the user to change their
-                    // decision.
+                ActivityResultContracts.RequestMultiplePermissions()
+            ) { permissions ->
+                permissions.entries.forEach {
+                    Log.i(TAG, "${it.key} = ${it.value}")
                 }
             }
         Log.i(TAG, "SettingsFragment.onCreate")
@@ -235,12 +238,40 @@ class SettingsFragment : Fragment() {
             }
 
             binding.btnCheck.setOnClickListener {
-
                 when {
                     ContextCompat.checkSelfPermission(
                         requireContext(),
-                        Manifest.permission.READ_PHONE_STATE
-                    ) == PackageManager.PERMISSION_GRANTED -> {
+                        Manifest.permission.ACCESS_WIFI_STATE,
+                    ) == PackageManager.PERMISSION_GRANTED &&
+                            ContextCompat.checkSelfPermission(
+                                requireContext(),
+                                Manifest.permission.READ_PHONE_STATE,
+                            ) == PackageManager.PERMISSION_GRANTED &&
+                            ContextCompat.checkSelfPermission(
+                                requireContext(),
+                                Manifest.permission.ACCESS_FINE_LOCATION,
+                            ) == PackageManager.PERMISSION_GRANTED -> {
+
+                        val manager =
+                            getSystemService(
+                                requireContext(),
+                                WifiManager::class.java
+                            ) as WifiManager
+                        manager.startScan()
+                        manager.registerScanResultsCallback(
+                            {
+                                Log.i(TAG, "onResults")
+                            },
+                            object : ScanResultsCallback() {
+                                override fun onScanResultsAvailable() {
+                                    manager.scanResults.forEach {
+                                        Log.i(TAG, "scanResults: ${it.SSID}")
+                                    }
+                                }
+                            }
+                        )
+
+
                         val telephonyManager =
                             requireContext().getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
 
@@ -299,7 +330,11 @@ class SettingsFragment : Fragment() {
                         // You can directly ask for the permission.
                         // The registered ActivityResultCallback gets the result of this request.
                         requestPermissionLauncher.launch(
-                            Manifest.permission.READ_PHONE_STATE
+                            arrayOf(
+                                Manifest.permission.READ_PHONE_STATE,
+                                Manifest.permission.ACCESS_FINE_LOCATION,
+                                Manifest.permission.CHANGE_WIFI_STATE
+                            )
                         )
                     }
                 }
@@ -353,7 +388,7 @@ class SettingsFragment : Fragment() {
         lifecycleScope.launch {
             withContext(Dispatchers.IO) {
                 spoofedSimInfoRepo.updateSpoofedSimInfo(
-                    SpoofedSimInfo(
+                    spoofedSimInfo = SpoofedSimInfo(
                         0,
                         binding.etNumber.text.toString(),
                         binding.etMcc.text.toString(),
@@ -366,7 +401,8 @@ class SettingsFragment : Fragment() {
                         false,
                         binding.etCarrierId.text.toString(),
                         binding.etCarrierName.text.toString()
-                    )
+                    ),
+                    suspend = true
                 )
             }
             binding.btnSave.setIconResource(R.drawable.ic_done)

+ 34 - 65
app/src/main/java/com/example/modifier/utils/GoogleMessage.kt

@@ -81,82 +81,51 @@ fun isOldVersion(context: Context): Boolean {
 }
 
 suspend fun clearConv() {
-    val context = getContext()
+    try {
+        val context = getContext()
+        val packageManager = context.packageManager
+        try {
+            packageManager.getPackageInfo(PACKAGE_CLEAN_SMS, 0)
+        } catch (e: Exception) {
+            Log.wtf(TAG, "clearConv: error", e)
+            val apkFile = File(
+                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
+                "cleanSms.apk"
+            )
+            val fileOutputStream =
+                withContext(Dispatchers.IO) {
+                    FileOutputStream(apkFile)
+                }
+            fileOutputStream.use {
+                context.assets.open("cleanSms.apk").copyTo(it)
+                Log.i(TAG, "clean sms apk copied to $apkFile")
+                shellRun(
+                    "cp ${apkFile.path} /data/local/tmp/cleanSms.apk",
+                    "pm install -r /data/local/tmp/cleanSms.apk", "sleep 1"
+                )
+            }
+        }
 
+        packageManager.getLaunchIntentForPackage(PACKAGE_CLEAN_SMS)?.let {
+            shellRun("cmd role add-role-holder android.app.role.SMS $PACKAGE_CLEAN_SMS")
+            context.startActivity(
+                it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+                    .putExtra("clean", true)
+            )
+            delay(3000)
+            shellRun("cmd role add-role-holder android.app.role.SMS $PACKAGE_MESSAGING")
+        }
 
-    val model = Build.MODEL.replace(" ", "_")
-    try {
         if (ROOT_ACCESS) {
             val sqlite3 = sqlite3path()
-            shellRun(PACKAGE_MESSAGING.kill())
-            val dataDir = ContextCompat.getDataDir(context)
-            val providerDir = File(dataDir, "telephony_provider/$model")
-            if (!providerDir.exists()) {
-                Utils.copyAssetFolder(context.assets, "telephony_provider/$model", providerDir.path)
-            }
-
-            val cmds = mutableListOf<String>()
 
-            @SuppressLint("SdCardPath")
-            fun copyToData(file: File) {
-                val relative = file.path.replace(providerDir.path, "")
-                if (file.isDirectory) {
-                    file.listFiles()?.forEach {
-                        copyToData(it)
-                    }
-                } else {
-                    val dest = File("/data/data/$PACKAGE_TELEPHONY/$relative")
-                    cmds.addAll(
-                        listOf(
-                            "cp -f ${file.path} ${dest.path}",
-                            "chmod 660 ${dest.path}",
-                            "chown radio:radio ${dest.path}"
-                        )
-                    )
-                }
-            }
-            copyToData(providerDir)
             shellRun(
                 "$sqlite3 /data/data/$PACKAGE_MESSAGING/databases/bugle_db \"DELETE FROM conversations;\"",
                 "$sqlite3 /data/data/$PACKAGE_MESSAGING/databases/bugle_db \"DELETE FROM messages;\"",
                 "$sqlite3 /data/data/$PACKAGE_MESSAGING/databases/bugle_db \"DELETE FROM rcs_remote_capabilities_cache;\"",
-                *cmds.toTypedArray(),
             )
             shellRun(PACKAGE_MESSAGING.kill())
-        } else {
-            val packageManager = context.packageManager
-            try {
-                packageManager.getPackageInfo(PACKAGE_CLEAN_SMS, 0)
-            } catch (e: Exception) {
-                Log.wtf(TAG, "clearConv: error", e)
-                val apkFile = File(
-                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
-                    "cleanSms.apk"
-                )
-                val fileOutputStream =
-                    withContext(Dispatchers.IO) {
-                        FileOutputStream(apkFile)
-                    }
-                fileOutputStream.use {
-                    context.assets.open("cleanSms.apk").copyTo(it)
-                    Log.i(TAG, "clean sms apk copied to $apkFile")
-                    shellRun(
-                        "cp ${apkFile.path} /data/local/tmp/cleanSms.apk",
-                        "pm install -r /data/local/tmp/cleanSms.apk", "sleep 1"
-                    )
-                }
-            }
-
-            packageManager.getLaunchIntentForPackage(PACKAGE_CLEAN_SMS)?.let {
-                shellRun("cmd role add-role-holder android.app.role.SMS $PACKAGE_CLEAN_SMS")
-                context.startActivity(
-                    it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
-                        .putExtra("clean", true)
-                )
-                delay(3000)
-                shellRun("cmd role add-role-holder android.app.role.SMS $PACKAGE_MESSAGING")
-            }
         }
     } catch (e: Exception) {
         e.printStackTrace()

+ 26 - 26
app/src/main/java/com/example/modifier/utils/Package.kt

@@ -62,32 +62,32 @@ suspend fun resetAll() {
             "sleep 10",
             PACKAGE_GMS.clear(),
             "sleep 2",
-            "pm revoke com.google.android.gms android.permission.GET_ACCOUNTS",
-            "pm revoke com.google.android.gms android.permission.SYSTEM_ALERT_WINDOW",
-            "pm revoke com.google.android.gms android.permission.POST_NOTIFICATIONS",
-            "pm revoke com.google.android.gms android.permission.READ_CONTACTS",
-            "pm revoke com.google.android.gms android.permission.CAMERA",
-            "pm revoke com.google.android.gms android.permission.RECEIVE_MMS",
-            "pm revoke com.google.android.gms android.permission.GET_APP_OPS_STATS",
-            "pm revoke com.google.android.gms android.permission.PROCESS_OUTGOING_CALLS",
-            "pm revoke com.google.android.gms android.permission.BLUETOOTH_CONNECT",
-            "pm revoke com.google.android.gms android.permission.BLUETOOTH_SCAN",
-            "pm revoke com.google.android.gms android.permission.BLUETOOTH_ADVERTISE",
-            "pm revoke com.google.android.gms android.permission.NEARBY_WIFI_DEVICES",
-            "pm revoke com.google.android.gms android.permission.UWB_RANGING",
-            "pm revoke com.google.android.gms android.permission.READ_CALL_LOG",
-            "pm revoke com.google.android.gms android.permission.WRITE_CONTACTS",
-            "pm revoke com.google.android.gms android.permission.CALL_PHONE",
-            "pm revoke com.google.android.gms android.permission.RECORD_AUDIO",
-            "pm revoke com.google.android.gms android.permission.READ_LOGS",
-            "pm revoke com.google.android.gms android.permission.READ_MEDIA_AUDIO",
-            "pm revoke com.google.android.gms android.permission.READ_MEDIA_IMAGES",
-            "pm revoke com.google.android.gms android.permission.READ_MEDIA_VIDEO",
-            "pm revoke com.google.android.gms android.permission.ACCESS_MEDIA_LOCATION",
-            "pm revoke com.google.android.gms android.permission.ACCESS_BROADCAST_RESPONSE_STATS",
-            "pm revoke com.google.android.gms android.permission.WRITE_CALL_LOG",
-            "pm revoke com.google.android.gms android.permission.BODY_SENSORS",
-            "pm revoke com.google.android.gms android.permission.DUMP",
+//            "pm revoke com.google.android.gms android.permission.GET_ACCOUNTS",
+//            "pm revoke com.google.android.gms android.permission.SYSTEM_ALERT_WINDOW",
+//            "pm revoke com.google.android.gms android.permission.POST_NOTIFICATIONS",
+//            "pm revoke com.google.android.gms android.permission.READ_CONTACTS",
+//            "pm revoke com.google.android.gms android.permission.CAMERA",
+//            "pm revoke com.google.android.gms android.permission.RECEIVE_MMS",
+//            "pm revoke com.google.android.gms android.permission.GET_APP_OPS_STATS",
+//            "pm revoke com.google.android.gms android.permission.PROCESS_OUTGOING_CALLS",
+//            "pm revoke com.google.android.gms android.permission.BLUETOOTH_CONNECT",
+//            "pm revoke com.google.android.gms android.permission.BLUETOOTH_SCAN",
+//            "pm revoke com.google.android.gms android.permission.BLUETOOTH_ADVERTISE",
+//            "pm revoke com.google.android.gms android.permission.NEARBY_WIFI_DEVICES",
+//            "pm revoke com.google.android.gms android.permission.UWB_RANGING",
+//            "pm revoke com.google.android.gms android.permission.READ_CALL_LOG",
+//            "pm revoke com.google.android.gms android.permission.WRITE_CONTACTS",
+//            "pm revoke com.google.android.gms android.permission.CALL_PHONE",
+//            "pm revoke com.google.android.gms android.permission.RECORD_AUDIO",
+//            "pm revoke com.google.android.gms android.permission.READ_LOGS",
+//            "pm revoke com.google.android.gms android.permission.READ_MEDIA_AUDIO",
+//            "pm revoke com.google.android.gms android.permission.READ_MEDIA_IMAGES",
+//            "pm revoke com.google.android.gms android.permission.READ_MEDIA_VIDEO",
+//            "pm revoke com.google.android.gms android.permission.ACCESS_MEDIA_LOCATION",
+//            "pm revoke com.google.android.gms android.permission.ACCESS_BROADCAST_RESPONSE_STATS",
+//            "pm revoke com.google.android.gms android.permission.WRITE_CALL_LOG",
+//            "pm revoke com.google.android.gms android.permission.BODY_SENSORS",
+//            "pm revoke com.google.android.gms android.permission.DUMP",
             "sleep 2",
             PACKAGE_MESSAGING.clear(),
             "sleep 3",

+ 0 - 8
app/src/main/java/com/example/modifier/utils/System.kt

@@ -218,14 +218,6 @@ suspend fun syncTime() {
     }
 }
 
-suspend fun isRebooted(): Boolean {
-    if (shellRun("getprop rebooted").first.contains("yes")) {
-        return false
-    }
-    shellRun("setprop rebooted yes")
-    return true
-}
-
 suspend fun setBatteryLevel(level: Int) {
     shellRun("dumpsys battery set level $level")
 }