xiongzhu преди 1 година
родител
ревизия
eb1d107011

+ 15 - 5
app/build.gradle

@@ -48,10 +48,17 @@ android {
     viewBinding {
         enabled = true
     }
+    kotlinOptions {
+        jvmTarget = '17'
+    }
 }
 
 dependencies {
 
+    testImplementation libs.junit
+    androidTestImplementation libs.ext.junit
+    androidTestImplementation libs.espresso.core
+
     implementation libs.appcompat
     implementation libs.material
     implementation libs.activity
@@ -59,11 +66,14 @@ dependencies {
     implementation libs.navigation.fragment
     implementation libs.navigation.ui
     implementation libs.annotation
+
+    implementation libs.core.ktx
     implementation libs.lifecycle.livedata.ktx
     implementation libs.lifecycle.viewmodel.ktx
-    testImplementation libs.junit
-    androidTestImplementation libs.ext.junit
-    androidTestImplementation libs.espresso.core
+    implementation libs.lifecycle.runtime.ktx
+    implementation libs.coroutines.core.ktx
+    implementation libs.coroutines.android.ktx
+
     implementation libs.gson
     implementation libs.commons.lang3
     implementation libs.commons.collections4
@@ -71,10 +81,10 @@ dependencies {
     implementation(libs.socket.io.client) {
         exclude group: 'org.json', module: 'json'
     }
+
     implementation 'com.android.volley:volley:1.2.1'
     implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01"
     implementation "androidx.work:work-runtime:2.9.0"
     implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
-    implementation libs.coroutines.core
-    implementation libs.coroutines.android
+
 }

+ 32 - 31
app/src/main/java/com/example/modifier/MainActivity.kt

@@ -12,49 +12,50 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.ui.NavigationUI.setupWithNavController
 import com.example.modifier.databinding.ActivityMainBinding
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
 
 class MainActivity : AppCompatActivity() {
-    var mBinding: ActivityMainBinding? = null
-    var executor: ExecutorService = Executors.newFixedThreadPool(32)
-    var handler: Handler = Handler(Looper.getMainLooper())
+    private lateinit var mBinding: ActivityMainBinding
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         this.enableEdgeToEdge()
         mBinding = ActivityMainBinding.inflate(layoutInflater)
-        setContentView(mBinding!!.root)
+        setContentView(mBinding.root)
 
-        handler.postDelayed({
-            executor.execute {
-                if (Utils.hasRootAccess()) {
-                    if (!Utils.isAccessibilityEnabled()) {
-                        if (!Utils.enableAccessibility()) {
-                            val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
-                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                            startActivity(intent)
-                            handler.postDelayed({ this.finish() }, 1000)
-                        }
-                    }
-                } else {
-                    handler.post {
-                        AlertDialog.Builder(this)
-                            .setTitle("No Root Access")
-                            .setMessage("Root access is required to run this app")
-                            .setCancelable(false)
-                            .setPositiveButton("Exit") { dialog: DialogInterface?, which: Int ->
-                                finish()
-                            }
-                            .show()
+        val navHostFragment =
+            supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
+        val controller = navHostFragment.navController
+        setupWithNavController(mBinding.nav, controller)
+        CoroutineScope(Dispatchers.Main).launch {
+            if (Utils.hasRootAccess()) {
+                if (!Utils.isAccessibilityEnabled()) {
+                    if (!Utils.enableAccessibility()) {
+                        val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
+                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                        startActivity(intent)
+                        delay(1000);
+                        finish();
                     }
                 }
+            } else {
+                MaterialAlertDialogBuilder(this@MainActivity)
+                    .setTitle("No Root Access")
+                    .setMessage("Root access is required to run this app")
+                    .setCancelable(false)
+                    .setPositiveButton("Exit") { _: DialogInterface?, _: Int ->
+                        finish()
+                    }
+                    .show()
             }
-        }, 1000)
-
-        val navHostFragment =
-            supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment?
-        val controller = navHostFragment!!.navController
-        setupWithNavController(mBinding!!.nav, controller)
+        }
     }
 }

+ 3 - 0
app/src/main/java/com/example/modifier/ui/settings/SettingsUiState.kt

@@ -0,0 +1,3 @@
+package com.example.modifier.ui.settings
+
+data class SettingsUiState(val serverUrl: String? = null, val mcc: String? = null)

+ 12 - 0
app/src/main/java/com/example/modifier/ui/settings/SettingsViewModel.kt

@@ -0,0 +1,12 @@
+package com.example.modifier.ui.settings
+
+import androidx.lifecycle.ViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+class SettingsViewModel : ViewModel() {
+
+    private val _uiState = MutableStateFlow(SettingsUiState())
+    val uiState: StateFlow<SettingsUiState> = _uiState.asStateFlow()
+}

+ 12 - 10
gradle/libs.versions.toml

@@ -9,16 +9,16 @@ junitVersion = "1.1.5"
 espressoCore = "3.5.1"
 appcompat = "1.6.1"
 kotlinxCoroutines = "1.8.1"
-material = "1.11.0"
-activity = "1.8.0"
+material = "1.12.0"
+activity = "1.9.0"
 constraintlayout = "2.1.4"
 socketIoClient = "2.0.0"
 navigationFragment = "2.7.7"
 navigationUi = "2.7.7"
 kotlin = "1.9.0"
-annotation = "1.7.1"
-lifecycleLivedataKtx = "2.7.0"
-lifecycleViewmodelKtx = "2.7.0"
+annotation = "1.8.0"
+lifecycle = "2.8.0"
+coreKtx = "1.13.1"
 
 [libraries]
 commons-collections4 = { module = "org.apache.commons:commons-collections4", version.ref = "commonsCollections4" }
@@ -29,8 +29,8 @@ junit = { group = "junit", name = "junit", version.ref = "junit" }
 ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
 espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
 appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
+coroutines-android-ktx = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
+coroutines-core-ktx = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
 material = { group = "com.google.android.material", name = "material", version.ref = "material" }
 activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
 constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
@@ -38,10 +38,12 @@ socket-io-client = { module = "io.socket:socket.io-client", version.ref = "socke
 navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "navigationFragment" }
 navigation-ui = { group = "androidx.navigation", name = "navigation-ui", version.ref = "navigationUi" }
 annotation = { group = "androidx.annotation", name = "annotation", version.ref = "annotation" }
-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycleLivedataKtx" }
-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" }
+lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycle" }
+lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" }
+lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" }
+core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
 
 [plugins]
 androidApplication = { id = "com.android.application", version.ref = "agp" }
-jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version = "1.9.24" }