x1ongzhu 1 ano atrás
pai
commit
9af2d1a086

+ 32 - 0
app/src/main/java/com/example/modifier/ui/Helpers.kt

@@ -0,0 +1,32 @@
+package com.example.modifier.ui
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+suspend fun runAsRoot(vararg commands: String) {
+    withContext(Dispatchers.IO) {
+        val p = ProcessBuilder("su", "-M").start()
+        p.inputStream.bufferedReader().useLines {
+            it.forEach {
+
+            }
+        }
+
+        p.errorStream.bufferedReader().useLines {
+            it.forEach {
+
+            }
+        }
+
+        p.outputStream.bufferedWriter().use { writer ->
+            commands.forEach { command ->
+                writer.write(command)
+                writer.newLine()
+                writer.flush()
+            }
+        }
+
+        p.waitFor()
+
+    }
+}

+ 1 - 1
app/src/main/java/com/example/modifier/ui/login/LoginActivity.kt

@@ -57,7 +57,7 @@ class LoginActivity : AppCompatActivity() {
 
                         is LoginUiState.Success -> {}
                         is LoginUiState.Error -> {}
-
+                        is LoginUiState.NoRootAccess -> {}
                     }
                 }
             }

+ 1 - 0
app/src/main/java/com/example/modifier/ui/login/LoginUiState.kt

@@ -4,6 +4,7 @@ sealed class LoginUiState {
     data object Normal : LoginUiState()
     data object Loading : LoginUiState()
     data object Success : LoginUiState()
+    data object NoRootAccess : LoginUiState()
     data class Error(
         val serverError: String?,
         val usernameError: String?,

+ 12 - 0
app/src/main/java/com/example/modifier/ui/login/LoginViewModel.kt

@@ -1,6 +1,9 @@
 package com.example.modifier.ui.login
 
 import android.content.Context
+import android.content.DialogInterface
+import android.content.Intent
+import android.provider.Settings
 import android.util.Log
 import androidx.datastore.core.DataStore
 import androidx.datastore.preferences.core.Preferences
@@ -9,10 +12,12 @@ import androidx.datastore.preferences.core.stringPreferencesKey
 import androidx.datastore.preferences.preferencesDataStore
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
+import com.example.modifier.Utils
 import com.example.modifier.http.request.LoginRequest
 import com.example.modifier.http.response.ErrorResponse
 import com.example.modifier.http.response.LoginResponse
 import com.example.modifier.model.ServerConfig
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import dagger.hilt.android.lifecycle.HiltViewModel
 import dagger.hilt.android.qualifiers.ApplicationContext
 import io.ktor.client.HttpClient
@@ -26,10 +31,13 @@ import io.ktor.http.ContentType
 import io.ktor.http.HttpStatusCode
 import io.ktor.http.contentType
 import io.ktor.serialization.kotlinx.json.json
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
 import kotlinx.serialization.json.Json
 import javax.inject.Inject
 
@@ -111,4 +119,8 @@ class LoginViewModel @Inject constructor() : ViewModel() {
             }
         }
     }
+
+    suspend fun checkRootAccess() {
+
+    }
 }