diff --git a/V2rayNG/app/src/fdroid/res/xml/shortcuts.xml b/V2rayNG/app/src/fdroid/res/xml/shortcuts.xml
index c8deac08..2dbf0f1d 100644
--- a/V2rayNG/app/src/fdroid/res/xml/shortcuts.xml
+++ b/V2rayNG/app/src/fdroid/res/xml/shortcuts.xml
@@ -11,7 +11,7 @@
@@ -26,7 +26,7 @@
@@ -41,7 +41,7 @@
@@ -56,7 +56,7 @@
diff --git a/V2rayNG/app/src/main/AndroidManifest.xml b/V2rayNG/app/src/main/AndroidManifest.xml
index a6610978..75fddd43 100644
--- a/V2rayNG/app/src/main/AndroidManifest.xml
+++ b/V2rayNG/app/src/main/AndroidManifest.xml
@@ -115,58 +115,58 @@
android:exported="false"
android:windowSoftInputMode="stateUnchanged|adjustResize" />
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AboutActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AboutActivity.kt
index 0efc6ba2..5049e48e 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AboutActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AboutActivity.kt
@@ -33,6 +33,7 @@ import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.compose.SettingsMenuItem
import com.v2ray.ang.compose.VersionInfoBlock
import com.v2ray.ang.core.CoreNativeManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
class AboutActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScannerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScannerActivity.kt
index f50dfb34..53759d19 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScannerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScannerActivity.kt
@@ -1,7 +1,6 @@
package com.v2ray.ang.ui
import android.content.Intent
-import android.content.pm.PackageManager
import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Size as TargetSize
@@ -68,7 +67,7 @@ import com.v2ray.ang.R
import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.enums.PermissionType
import com.v2ray.ang.extension.toast
-import com.v2ray.ang.handler.MmkvManager
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.QRCodeDecoder
import java.util.concurrent.Executors
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UrlSchemeActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UrlSchemeActivity.kt
index df0be729..eb8c9fac 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UrlSchemeActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UrlSchemeActivity.kt
@@ -10,6 +10,7 @@ import com.v2ray.ang.R
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastError
import com.v2ray.ang.handler.AngConfigManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.ui.main.MainActivity
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.Dispatchers
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AppPickerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/AppPickerActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt
index c44f20e6..1d423eb4 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/AppPickerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.apppicker
import android.content.Context
import android.content.Intent
@@ -36,7 +36,7 @@ import com.v2ray.ang.compose.AppListItem
import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.dto.AppInfo
-import com.v2ray.ang.viewmodel.AppPickerViewModel
+import com.v2ray.ang.ui.base.BaseComponentActivity
class AppPickerActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/AppPickerViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerViewModel.kt
similarity index 94%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/AppPickerViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerViewModel.kt
index b1d82ae8..3adc52d5 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/AppPickerViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerViewModel.kt
@@ -1,9 +1,11 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.apppicker
import android.app.Application
import android.content.Context
import com.v2ray.ang.AppConfig
+import com.v2ray.ang.R
import com.v2ray.ang.dto.AppInfo
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.AppManagerUtil
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.Dispatchers
@@ -12,6 +14,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.withContext
import java.text.Collator
+import kotlin.collections.plus
/**
* ViewModel for AppPicker screen.
@@ -45,7 +48,7 @@ class AppPickerViewModel(application: Application) : BaseViewModel(application)
_displayedApps.value = applyFilter(currentQuery)
} catch (e: Exception) {
LogUtil.e("AppPickerViewModel", "Failed to load app list", e)
- toastError(com.v2ray.ang.R.string.toast_failure)
+ toastError(R.string.toast_failure)
}
}
}
@@ -107,11 +110,11 @@ class AppPickerViewModel(application: Application) : BaseViewModel(application)
?: context.getDrawable(android.R.drawable.sym_def_app_icon)
?: error("No fallback drawable available")
return AppInfo(
- appName = context.getString(com.v2ray.ang.R.string.app_picker_unknown_app),
+ appName = context.getString(R.string.app_picker_unknown_app),
packageName = AppConfig.UNIDENTIFIED_PACKAGE,
appIcon = icon,
isSystemApp = false,
isSelected = 0
)
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/BackupActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/BackupActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt
index b23aee07..deee006c 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/BackupActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.backup
import android.content.Intent
import android.net.Uri
@@ -40,8 +40,8 @@ import com.v2ray.ang.dto.entities.WebDavConfig
import com.v2ray.ang.extension.toastError
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
import com.v2ray.ang.util.LogUtil
-import com.v2ray.ang.viewmodel.BackupViewModel
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import java.io.File
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BackupViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupViewModel.kt
similarity index 95%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BackupViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupViewModel.kt
index 7d61d779..ef2f869c 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BackupViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupViewModel.kt
@@ -1,18 +1,18 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.backup
import android.app.Application
import android.net.Uri
import com.tencent.mmkv.MMKV
import com.v2ray.ang.AppConfig
-import com.v2ray.ang.AppConfig.WEBDAV_BACKUP_FILE_NAME
import com.v2ray.ang.R
import com.v2ray.ang.dto.entities.WebDavConfig
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.handler.WebDavManager
+import com.v2ray.ang.ui.base.BaseViewModel
+import com.v2ray.ang.ui.base.ViewModelEvent
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.ZipUtil
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -91,7 +91,7 @@ class BackupViewModel(application: Application) : BaseViewModel(application) {
WebDavManager.init(config)
val ok = try {
- WebDavManager.uploadFile(tempFile, WEBDAV_BACKUP_FILE_NAME)
+ WebDavManager.uploadFile(tempFile, AppConfig.WEBDAV_BACKUP_FILE_NAME)
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "WebDAV upload error", e)
false
@@ -123,7 +123,7 @@ class BackupViewModel(application: Application) : BaseViewModel(application) {
try {
target = File(cacheDir, "download_${System.currentTimeMillis()}.zip")
WebDavManager.init(config)
- val ok = WebDavManager.downloadFile(WEBDAV_BACKUP_FILE_NAME, target)
+ val ok = WebDavManager.downloadFile(AppConfig.WEBDAV_BACKUP_FILE_NAME, target)
if (!ok) {
toastError(R.string.toast_failure)
return@launchLoading
@@ -178,4 +178,4 @@ class BackupViewModel(application: Application) : BaseViewModel(application) {
return count > 0
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/BaseComponentActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt
similarity index 96%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/BaseComponentActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt
index dba8fe20..d836553a 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/BaseComponentActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.base
import android.content.Context
import android.os.Bundle
@@ -28,4 +28,4 @@ abstract class BaseComponentActivity : ComponentActivity() {
@Composable
protected abstract fun ScreenContent()
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BaseViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseViewModel.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BaseViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseViewModel.kt
index 71c7cedf..d4c9952a 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/BaseViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseViewModel.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.base
import android.app.Application
import androidx.lifecycle.AndroidViewModel
@@ -7,8 +7,8 @@ import com.v2ray.ang.AngApplication
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastError
import com.v2ray.ang.extension.toastSuccess
-import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -113,4 +113,4 @@ abstract class BaseViewModel(application: Application) : AndroidViewModel(applic
}
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/HelperBaseComponentActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/HelperBaseComponentActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/HelperBaseComponentActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/HelperBaseComponentActivity.kt
index 885eadc5..19a30894 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/HelperBaseComponentActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/HelperBaseComponentActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.base
import android.net.Uri
import android.os.Bundle
@@ -86,4 +86,4 @@ abstract class HelperBaseComponentActivity : BaseComponentActivity() {
) {
qrCodeScanner.launch(onResult)
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/ViewModelEvent.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/ViewModelEvent.kt
similarity index 55%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/ViewModelEvent.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/ViewModelEvent.kt
index bbfb2ff9..c00a4c10 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/ViewModelEvent.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/ViewModelEvent.kt
@@ -1,13 +1,13 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.base
/**
* Base interface for ViewModel UI events.
*/
-sealed interface ViewModelEvent
+interface ViewModelEvent
/**
* Common UI events for all ViewModels.
*/
-sealed interface BaseViewModelEvent : ViewModelEvent {
+interface BaseViewModelEvent : ViewModelEvent {
object FinishActivity : BaseViewModelEvent
}
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt
index a97becba..e663a98f 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.checkupdate
import android.os.Bundle
import androidx.activity.viewModels
@@ -28,8 +28,8 @@ import com.v2ray.ang.compose.SettingsMenuItem
import com.v2ray.ang.compose.SettingsSwitchItem
import com.v2ray.ang.compose.VersionInfoBlock
import com.v2ray.ang.core.CoreNativeManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.CheckUpdateViewModel
class CheckUpdateActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/CheckUpdateViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateViewModel.kt
similarity index 96%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/CheckUpdateViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateViewModel.kt
index 6b3339d3..8d598ed4 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/CheckUpdateViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateViewModel.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.checkupdate
import android.app.Application
import com.v2ray.ang.AppConfig
@@ -6,6 +6,7 @@ import com.v2ray.ang.R
import com.v2ray.ang.dto.CheckUpdateResult
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.UpdateCheckerManager
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -54,4 +55,4 @@ class CheckUpdateViewModel(application: Application) : BaseViewModel(application
fun dismissUpdateDialog() {
_showUpdateDialog.value = false
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt
index bdd3cd40..8c525fe4 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.logcat
import android.content.ClipData
import android.content.Intent
@@ -43,11 +43,9 @@ import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.compose.LocalAppSnackbar
import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.extension.toast
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.LogcatViewModel
-import kotlinx.coroutines.Delay
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/LogcatViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatViewModel.kt
similarity index 92%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/LogcatViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatViewModel.kt
index e6797f5d..9c90c951 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/LogcatViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatViewModel.kt
@@ -1,8 +1,8 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.logcat
import android.app.Application
import com.v2ray.ang.AppConfig
-import com.v2ray.ang.AppConfig.ANG_PACKAGE
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -25,7 +25,7 @@ class LogcatViewModel(application: Application) : BaseViewModel(application) {
lst.add("-v")
lst.add("time")
lst.add("-s")
- lst.add("GoLog,${ANG_PACKAGE},AndroidRuntime,System.err")
+ lst.add("GoLog,${AppConfig.ANG_PACKAGE},AndroidRuntime,System.err")
val process = Runtime.getRuntime().exec(lst.toTypedArray())
val allText = process.inputStream.bufferedReader().use { it.readLines() }.reversed()
@@ -65,4 +65,4 @@ class LogcatViewModel(application: Application) : BaseViewModel(application) {
logsetsAll.filter { it.contains(currentFilter) }
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainActivity.kt
index 056a396f..72131f9a 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainActivity.kt
@@ -25,15 +25,15 @@ import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.handler.SettingsManager
import com.v2ray.ang.ui.AboutActivity
-import com.v2ray.ang.ui.BackupActivity
-import com.v2ray.ang.ui.CheckUpdateActivity
-import com.v2ray.ang.ui.HelperBaseComponentActivity
-import com.v2ray.ang.ui.LogcatActivity
-import com.v2ray.ang.ui.PerAppProxyActivity
-import com.v2ray.ang.ui.RoutingSettingActivity
-import com.v2ray.ang.ui.SettingsActivity
-import com.v2ray.ang.ui.SubSettingActivity
-import com.v2ray.ang.ui.UserAssetActivity
+import com.v2ray.ang.ui.backup.BackupActivity
+import com.v2ray.ang.ui.checkupdate.CheckUpdateActivity
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
+import com.v2ray.ang.ui.logcat.LogcatActivity
+import com.v2ray.ang.ui.perappproxy.PerAppProxyActivity
+import com.v2ray.ang.ui.routing.RoutingSettingActivity
+import com.v2ray.ang.ui.settings.SettingsActivity
+import com.v2ray.ang.ui.subscription.SubSettingActivity
+import com.v2ray.ang.ui.userasset.UserAssetActivity
import com.v2ray.ang.ui.server.ProfileEditorResult
import com.v2ray.ang.ui.server.ServerCustomConfigActivity
import com.v2ray.ang.ui.server.ServerGroupActivity
@@ -48,7 +48,6 @@ import com.v2ray.ang.ui.server.ServerVmessActivity
import com.v2ray.ang.ui.server.ServerWireguardActivity
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.MainViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainGroupTab.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainGroupTab.kt
index 0d686176..e85dd4a9 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainGroupTab.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainGroupTab.kt
@@ -19,7 +19,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.v2ray.ang.compose.colorFabActive
import com.v2ray.ang.dto.GroupMapItem
import com.v2ray.ang.dto.entities.ServersCache
-import com.v2ray.ang.viewmodel.MainViewModel
import kotlinx.coroutines.flow.StateFlow
@Composable
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainScreen.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainScreen.kt
index 1f6d2228..f7ad15c0 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainScreen.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainScreen.kt
@@ -31,7 +31,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.v2ray.ang.compose.LocalDarkTheme
import com.v2ray.ang.compose.QRCodeDialog
import com.v2ray.ang.dto.entities.ProfileItem
-import com.v2ray.ang.viewmodel.MainViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServerPager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServerPager.kt
index ff211a34..4b8e7378 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServerPager.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServerPager.kt
@@ -56,7 +56,6 @@ import com.v2ray.ang.extension.isComplexType
import com.v2ray.ang.extension.nullIfBlank
import com.v2ray.ang.handler.AngConfigManager
import com.v2ray.ang.handler.MmkvManager
-import com.v2ray.ang.viewmodel.MainViewModel
import sh.calvin.reorderable.ReorderableItem
import sh.calvin.reorderable.rememberReorderableLazyGridState
import sh.calvin.reorderable.rememberReorderableLazyListState
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt
index f9baa2b8..1331afed 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.main
import android.app.Application
import androidx.lifecycle.ViewModel
@@ -14,10 +14,7 @@ import com.v2ray.ang.dto.entities.ServersCache
import com.v2ray.ang.dto.entities.SubscriptionCache
import com.v2ray.ang.extension.isComplexType
import com.v2ray.ang.extension.matchesPattern
-import com.v2ray.ang.ui.main.MainAction
-import com.v2ray.ang.ui.main.MainDataSource
-import com.v2ray.ang.ui.main.MainUiState
-import com.v2ray.ang.ui.main.MainServiceEvent
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableDeferred
@@ -785,4 +782,4 @@ class MainViewModel(
throw IllegalArgumentException("Unknown ViewModel class")
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt
index e8beec92..43e7de21 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.perappproxy
import android.os.Bundle
import androidx.activity.viewModels
@@ -49,8 +49,8 @@ import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.dto.AppInfo
import com.v2ray.ang.extension.toastInfo
import com.v2ray.ang.extension.toastSuccess
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.PerAppProxyViewModel
class PerAppProxyActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/PerAppProxyViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyViewModel.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/PerAppProxyViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyViewModel.kt
index da2faf75..7c0f37ef 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/PerAppProxyViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyViewModel.kt
@@ -1,14 +1,14 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.perappproxy
import android.app.Application
import android.content.Context
import com.v2ray.ang.AppConfig
-import com.v2ray.ang.AppConfig.ANG_PACKAGE
import com.v2ray.ang.dto.AppInfo
import com.v2ray.ang.dto.UrlContentRequest
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.AppManagerUtil
import com.v2ray.ang.util.HttpUtil
import com.v2ray.ang.util.LogUtil
@@ -132,7 +132,7 @@ class PerAppProxyViewModel(application: Application) : BaseViewModel(application
appsAll = apps
_displayedApps.value = apps
} catch (e: Exception) {
- LogUtil.e(ANG_PACKAGE, "Error loading apps", e)
+ LogUtil.e(AppConfig.ANG_PACKAGE, "Error loading apps", e)
}
}
}
@@ -268,4 +268,4 @@ class PerAppProxyViewModel(application: Application) : BaseViewModel(application
setPerAppProxyEnabled(true)
SettingsChangeManager.makeRestartService()
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt
index 43d07c44..e467ff34 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.routing
import android.app.Activity
import android.os.Bundle
@@ -16,7 +16,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScaffoldDefaults
import androidx.compose.material3.Text
@@ -46,6 +45,8 @@ import com.v2ray.ang.extension.nullIfBlank
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.apppicker.AppPickerActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingSettingActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingSettingActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt
index 75abb600..6d19ec86 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingSettingActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.routing
import android.content.Intent
import android.os.Bundle
@@ -58,10 +58,10 @@ import com.v2ray.ang.extension.toastError
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
import com.v2ray.ang.util.JsonUtil
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.RoutingSettingsViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/RoutingSettingsViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingsViewModel.kt
similarity index 96%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/RoutingSettingsViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingsViewModel.kt
index b35b77aa..0e79f6c9 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/RoutingSettingsViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingsViewModel.kt
@@ -1,9 +1,10 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.routing
import android.app.Application
import com.v2ray.ang.dto.entities.RulesetItem
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.base.BaseViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -48,4 +49,4 @@ class RoutingSettingsViewModel(application: Application) : BaseViewModel(applica
_rulesetsFlow.value = rulesets.toList()
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/BaseServerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/BaseServerActivity.kt
index c6fe9205..bf1104aa 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/BaseServerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/BaseServerActivity.kt
@@ -46,7 +46,7 @@ import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.AngConfigManager
import com.v2ray.ang.handler.CertificateFingerprintManager
import com.v2ray.ang.handler.MmkvManager
-import com.v2ray.ang.ui.BaseComponentActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.JsonUtil
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerActivity.kt
index 7f258bec..03a60e7f 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerActivity.kt
@@ -49,7 +49,7 @@ import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.AngConfigManager
import com.v2ray.ang.handler.CertificateFingerprintManager
import com.v2ray.ang.handler.MmkvManager
-import com.v2ray.ang.ui.BaseComponentActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.JsonUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerCustomConfigActivity.kt
index c655b234..f00a40f7 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerCustomConfigActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerCustomConfigActivity.kt
@@ -67,7 +67,7 @@ import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.fmt.CustomFmt
import com.v2ray.ang.handler.AngConfigManager
import com.v2ray.ang.handler.MmkvManager
-import com.v2ray.ang.ui.BaseComponentActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.LogUtil
import kotlinx.coroutines.flow.collectLatest
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerGroupActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerGroupActivity.kt
index fb863b32..d79a8a32 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerGroupActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerGroupActivity.kt
@@ -32,7 +32,7 @@ import com.v2ray.ang.extension.isNotNullEmpty
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.MmkvManager
-import com.v2ray.ang.ui.BaseComponentActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
class ServerGroupActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerProxyChainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerProxyChainActivity.kt
index eab57482..eb5880b0 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerProxyChainActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerProxyChainActivity.kt
@@ -47,7 +47,7 @@ import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsManager
-import com.v2ray.ang.ui.BaseComponentActivity
+import com.v2ray.ang.ui.base.BaseComponentActivity
import sh.calvin.reorderable.ReorderableItem
import sh.calvin.reorderable.rememberReorderableLazyListState
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt
index d818935a..584bdb02 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.settings
import android.os.Bundle
import androidx.activity.viewModels
@@ -16,7 +16,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@@ -36,8 +35,8 @@ import com.v2ray.ang.handler.MmkvManager.rememberMmkvBool
import com.v2ray.ang.handler.MmkvManager.rememberMmkvString
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.root.RootManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.SettingsViewModel
class SettingsActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsViewModel.kt
similarity index 95%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsViewModel.kt
index c98101b7..83d44309 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsViewModel.kt
@@ -1,11 +1,11 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.settings
import android.app.Application
import com.v2ray.ang.AppConfig
import com.v2ray.ang.R
import com.v2ray.ang.root.RootManager
+import com.v2ray.ang.ui.base.BaseViewModel
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
class SettingsViewModel(application: Application) : BaseViewModel(application) {
@@ -56,4 +56,4 @@ class SettingsViewModel(application: Application) : BaseViewModel(application) {
null
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScScannerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScScannerActivity.kt
similarity index 92%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScScannerActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScScannerActivity.kt
index bbb04842..6f3f378b 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScScannerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScScannerActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.shortcut
import android.content.Intent
import android.os.Bundle
@@ -8,6 +8,7 @@ import com.v2ray.ang.R
import com.v2ray.ang.extension.toastError
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.AngConfigManager
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
import com.v2ray.ang.ui.main.MainActivity
class ScScannerActivity : HelperBaseComponentActivity() {
@@ -39,4 +40,4 @@ class ScScannerActivity : HelperBaseComponentActivity() {
finish()
}
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStartActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStartActivity.kt
similarity index 87%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStartActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStartActivity.kt
index 106e010d..4597d442 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStartActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStartActivity.kt
@@ -1,9 +1,10 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.shortcut
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import com.v2ray.ang.core.CoreServiceManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
class ScStartActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStopActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStopActivity.kt
similarity index 87%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStopActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStopActivity.kt
index eade1d42..996e7cf0 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScStopActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScStopActivity.kt
@@ -1,9 +1,10 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.shortcut
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import com.v2ray.ang.core.CoreServiceManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
class ScStopActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScSwitchActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScSwitchActivity.kt
similarity index 89%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScSwitchActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScSwitchActivity.kt
index fca1d6ee..2eeea69d 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ScSwitchActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/ScSwitchActivity.kt
@@ -1,9 +1,10 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.shortcut
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import com.v2ray.ang.core.CoreServiceManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
class ScSwitchActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/TaskerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/TaskerActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt
index 33a68b68..1aa66e58 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/TaskerActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt
@@ -1,9 +1,8 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.shortcut
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
-import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -36,6 +35,7 @@ import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.compose.SettingsSwitchItem
import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.handler.MmkvManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.LogUtil
class TaskerActivity : BaseComponentActivity() {
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt
index 9a20753c..c23de832 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.subscription
import android.os.Bundle
import android.text.TextUtils
@@ -11,7 +11,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScaffoldDefaults
import androidx.compose.runtime.Composable
@@ -20,7 +19,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
@@ -42,6 +40,7 @@ import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.handler.SettingsManager
import com.v2ray.ang.handler.SubscriptionUpdater
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.Utils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt
index d99ec386..209308cf 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt
@@ -1,6 +1,7 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.subscription
import android.content.Intent
+import android.graphics.Bitmap
import android.os.Bundle
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Column
@@ -10,7 +11,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
@@ -52,9 +52,9 @@ import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.extension.toast
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.MmkvManager.rememberMmkvBool
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.QRCodeDecoder
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.SubscriptionsViewModel
import sh.calvin.reorderable.ReorderableItem
import sh.calvin.reorderable.rememberReorderableLazyListState
@@ -107,7 +107,7 @@ fun SubSettingScreen(
onSubUpdate: () -> Unit,
onEditSub: (String) -> Unit,
onRemoveSub: (String) -> Unit,
- onShareQRCode: (String) -> android.graphics.Bitmap?,
+ onShareQRCode: (String) -> Bitmap?,
onShareClipboard: (String) -> Unit,
shareSubMethodEntries: List
) {
@@ -117,7 +117,7 @@ fun SubSettingScreen(
val confirmRemove = MmkvManager.decodeSettingsBool(AppConfig.PREF_CONFIRM_REMOVE, false)
var shareTarget by remember { mutableStateOf?>(null) }
- var showQRCodeBitmap by remember { mutableStateOf(null) }
+ var showQRCodeBitmap by remember { mutableStateOf(null) }
val lazyListState = rememberLazyListState()
val reorderableState = rememberReorderableLazyListState(lazyListState) { from, to ->
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SubscriptionsViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt
similarity index 96%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SubscriptionsViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt
index a08d52ec..12ac949a 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SubscriptionsViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.subscription
import android.app.Application
import com.v2ray.ang.R
@@ -8,6 +8,7 @@ import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsChangeManager
import com.v2ray.ang.handler.SettingsManager
import com.v2ray.ang.handler.SubscriptionUpdater
+import com.v2ray.ang.ui.base.BaseViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -62,4 +63,4 @@ class SubscriptionsViewModel(application: Application) : BaseViewModel(applicati
toast(R.string.subscription_updater_job_tips)
}
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt
similarity index 99%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt
index 493aa4bc..34c9749a 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.userasset
import android.content.Intent
import android.net.Uri
@@ -48,7 +48,6 @@ import com.v2ray.ang.R
import com.v2ray.ang.compose.AppDivider
import com.v2ray.ang.compose.AppTopBar
import com.v2ray.ang.compose.ConfirmDialog
-import com.v2ray.ang.compose.SelectListDialog
import com.v2ray.ang.compose.SettingsListItem
import com.v2ray.ang.compose.verticalScrollbar
import com.v2ray.ang.dto.entities.AssetUrlCache
@@ -59,9 +58,9 @@ import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.extension.toTrafficString
import com.v2ray.ang.handler.MmkvManager
import com.v2ray.ang.handler.SettingsManager
+import com.v2ray.ang.ui.base.HelperBaseComponentActivity
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.Utils
-import com.v2ray.ang.viewmodel.UserAssetViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt
index 78366c91..b81b0bc4 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.ui
+package com.v2ray.ang.ui.userasset
import android.os.Bundle
import android.text.TextUtils
@@ -7,10 +7,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScaffoldDefaults
-import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -29,6 +27,7 @@ import com.v2ray.ang.dto.entities.AssetUrlItem
import com.v2ray.ang.extension.toast
import com.v2ray.ang.extension.toastSuccess
import com.v2ray.ang.handler.MmkvManager
+import com.v2ray.ang.ui.base.BaseComponentActivity
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.Utils
import java.io.File
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/UserAssetViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetViewModel.kt
similarity index 98%
rename from V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/UserAssetViewModel.kt
rename to V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetViewModel.kt
index 0ab926fa..cf258a6b 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/UserAssetViewModel.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetViewModel.kt
@@ -1,4 +1,4 @@
-package com.v2ray.ang.viewmodel
+package com.v2ray.ang.ui.userasset
import android.app.Application
import com.v2ray.ang.AppConfig
@@ -7,6 +7,7 @@ import com.v2ray.ang.dto.entities.AssetUrlCache
import com.v2ray.ang.dto.entities.AssetUrlItem
import com.v2ray.ang.extension.concatUrl
import com.v2ray.ang.handler.MmkvManager
+import com.v2ray.ang.ui.base.BaseViewModel
import com.v2ray.ang.util.HttpUtil
import com.v2ray.ang.util.LogUtil
import com.v2ray.ang.util.Utils
@@ -126,4 +127,4 @@ class UserAssetViewModel(application: Application) : BaseViewModel(application)
val failureCount: Int,
val failedAssets: List
)
-}
+}
\ No newline at end of file
diff --git a/V2rayNG/app/src/main/res/xml/shortcuts.xml b/V2rayNG/app/src/main/res/xml/shortcuts.xml
index 8d18a74c..4388c23d 100644
--- a/V2rayNG/app/src/main/res/xml/shortcuts.xml
+++ b/V2rayNG/app/src/main/res/xml/shortcuts.xml
@@ -10,7 +10,7 @@
@@ -24,7 +24,7 @@
@@ -38,7 +38,7 @@
@@ -52,7 +52,7 @@