From 389e55d72a60b024130f15683c184b46b83fe6a4 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 31 Jul 2026 20:37:01 +0800 Subject: [PATCH] Code clean --- .../main/java/com/v2ray/ang/AngApplication.kt | 2 +- .../com/v2ray/ang/core/CoreConfigManager.kt | 4 +- .../com/v2ray/ang/core/CoreServiceManager.kt | 4 +- .../com/v2ray/ang/core/LauncherManager.kt | 2 +- .../com/v2ray/ang/dto/TestServiceMessage.kt | 2 +- .../v2ray/ang/handler/SubscriptionUpdater.kt | 14 +-- .../com/v2ray/ang/receiver/BootReceiver.kt | 2 + .../com/v2ray/ang/service/CoreTestService.kt | 2 +- .../com/v2ray/ang/service/QSTileService.kt | 2 +- .../ang/service/RealPingWorkerService.kt | 2 +- .../ang/service/SubscriptionUpdateService.kt | 4 +- .../java/com/v2ray/ang/ui/AboutActivity.kt | 4 +- .../java/com/v2ray/ang/ui/ScannerActivity.kt | 2 +- .../ang/ui/apppicker/AppPickerActivity.kt | 4 +- .../com/v2ray/ang/ui/backup/BackupActivity.kt | 10 +- .../ang/ui/base/BaseComponentActivity.kt | 2 +- .../ang/ui/checkupdate/CheckUpdateActivity.kt | 4 +- .../java/com/v2ray/ang/ui/compose/SnackBar.kt | 8 +- .../com/v2ray/ang/ui/logcat/LogcatActivity.kt | 4 +- .../com/v2ray/ang/ui/main/MainGroupTab.kt | 2 +- .../com/v2ray/ang/ui/main/MainImportMenu.kt | 2 +- .../com/v2ray/ang/ui/main/MainRepository.kt | 2 +- .../java/com/v2ray/ang/ui/main/MainScreen.kt | 2 +- .../com/v2ray/ang/ui/main/MainServerPager.kt | 12 +-- .../com/v2ray/ang/ui/main/MainViewModel.kt | 2 +- .../ang/ui/perappproxy/PerAppProxyActivity.kt | 8 +- .../ang/ui/routing/RoutingEditActivity.kt | 12 +-- .../ang/ui/routing/RoutingSettingActivity.kt | 12 +-- .../v2ray/ang/ui/server/BaseServerActivity.kt | 12 +-- .../com/v2ray/ang/ui/server/ServerActivity.kt | 14 +-- .../ui/server/ServerCustomConfigActivity.kt | 10 +- .../ang/ui/server/ServerGroupActivity.kt | 18 ++-- .../v2ray/ang/ui/server/ServerHttpActivity.kt | 2 +- .../ang/ui/server/ServerHysteria2Activity.kt | 4 +- .../ang/ui/server/ServerProxyChainActivity.kt | 14 +-- .../ui/server/ServerShadowsocksActivity.kt | 4 +- .../ang/ui/server/ServerSocksActivity.kt | 2 +- .../ang/ui/server/ServerTrojanActivity.kt | 2 +- .../ang/ui/server/ServerVlessActivity.kt | 4 +- .../ang/ui/server/ServerVmessActivity.kt | 4 +- .../ang/ui/server/ServerWireguardActivity.kt | 2 +- .../v2ray/ang/ui/settings/SettingsActivity.kt | 10 +- .../v2ray/ang/ui/shortcut/TaskerActivity.kt | 4 +- .../ang/ui/subscription/SubEditActivity.kt | 12 +-- .../ang/ui/subscription/SubSettingActivity.kt | 8 +- .../ui/subscription/SubscriptionsViewModel.kt | 2 +- .../ang/ui/userasset/UserAssetActivity.kt | 10 +- .../ang/ui/userasset/UserAssetUrlActivity.kt | 6 +- .../src/main/java/com/v2ray/ang/util/Utils.kt | 93 +------------------ 49 files changed, 140 insertions(+), 229 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/AngApplication.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/AngApplication.kt index 6a3a1758..a0802b0b 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/AngApplication.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/AngApplication.kt @@ -6,8 +6,8 @@ import androidx.work.Configuration import androidx.work.WorkManager import com.tencent.mmkv.MMKV import com.v2ray.ang.AppConfig.ANG_PACKAGE -import com.v2ray.ang.ui.compose.ThemeManager import com.v2ray.ang.handler.SettingsManager +import com.v2ray.ang.ui.compose.ThemeManager class AngApplication : Application() { companion object { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt index 6a5a922b..7e08f7be 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreConfigManager.kt @@ -378,8 +378,8 @@ object CoreConfigManager { val fallbackTag = if (strategyType.supportsObservatory && resolvedOutbound.profile.policyGroupTestOutbounds != false) { resolvedOutbound.profile.policyGroupFallbackTag ?.takeIf { it.isNotEmpty() && it != AppConfig.TAG_PROXY } - // Xray excludes dead random/roundRobin candidates only when fallbackTag is set; - // without this default, an enabled empty field creates no observatory. + // Xray excludes dead random/roundRobin candidates only when fallbackTag is set; + // without this default, an enabled empty field creates no observatory. ?: membersToAdd.first().tag } else null val strategy = buildBalancerStrategy( diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreServiceManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreServiceManager.kt index 172f08e1..d1369a44 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreServiceManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreServiceManager.kt @@ -12,6 +12,7 @@ import android.system.OsConstants import androidx.core.content.ContextCompat import com.v2ray.ang.AppConfig import com.v2ray.ang.R +import com.v2ray.ang.contracts.IDialerService import com.v2ray.ang.contracts.ServiceControl import com.v2ray.ang.dto.OutboundTrafficStat import com.v2ray.ang.dto.entities.ProfileItem @@ -21,11 +22,10 @@ import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.NotificationManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.handler.SpeedtestManager +import com.v2ray.ang.helper.MessageHelper import com.v2ray.ang.service.DialerNativeService import com.v2ray.ang.service.DialerWebviewService -import com.v2ray.ang.contracts.IDialerService import com.v2ray.ang.util.LogUtil -import com.v2ray.ang.helper.MessageHelper import com.v2ray.ang.util.Utils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/LauncherManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/LauncherManager.kt index f143df19..ff09b77b 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/LauncherManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/LauncherManager.kt @@ -11,12 +11,12 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.toastError import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager +import com.v2ray.ang.helper.MessageHelper import com.v2ray.ang.root.RootManager import com.v2ray.ang.service.CoreProxyOnlyService import com.v2ray.ang.service.CoreRootService import com.v2ray.ang.service.CoreVpnService import com.v2ray.ang.util.LogUtil -import com.v2ray.ang.helper.MessageHelper import com.v2ray.ang.util.Utils object LauncherManager { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/TestServiceMessage.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/TestServiceMessage.kt index 9dc901bc..052d468c 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/TestServiceMessage.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/TestServiceMessage.kt @@ -6,6 +6,6 @@ data class TestServiceMessage( val key: Int, val subscriptionId: String = "", val serverGuids: List = emptyList(), - val onlyTcp : Boolean = false + val onlyTcp: Boolean = false ) : Serializable diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SubscriptionUpdater.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SubscriptionUpdater.kt index 4251003b..89dbfcd8 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SubscriptionUpdater.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SubscriptionUpdater.kt @@ -13,8 +13,8 @@ import androidx.work.workDataOf import com.v2ray.ang.AngApplication import com.v2ray.ang.AppConfig import com.v2ray.ang.dto.SubscriptionUpdateMessage -import com.v2ray.ang.util.LogUtil import com.v2ray.ang.helper.MessageHelper +import com.v2ray.ang.util.LogUtil import java.util.concurrent.TimeUnit object SubscriptionUpdater { @@ -45,12 +45,12 @@ object SubscriptionUpdater { MmkvManager.decodeSubscriptions() .filter { it.subscription.autoUpdate && it.subscription.url.isNotEmpty() } .forEach { sub -> - scheduleOne( - context = context, - subId = sub.guid, - existingWorkPolicy = existingWorkPolicy - ) - } + scheduleOne( + context = context, + subId = sub.guid, + existingWorkPolicy = existingWorkPolicy + ) + } LogUtil.i( AppConfig.TAG, "SubscriptionUpdater: sync complete forceReschedule=$forceReschedule" diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/receiver/BootReceiver.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/receiver/BootReceiver.kt index b666a1f4..84ce0c9d 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/receiver/BootReceiver.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/receiver/BootReceiver.kt @@ -30,6 +30,7 @@ class BootReceiver : BroadcastReceiver() { Intent.ACTION_MY_PACKAGE_REPLACED -> { // Continue } + Intent.ACTION_LOCKED_BOOT_COMPLETED -> { val userManager = context.getSystemService(Context.USER_SERVICE) as? UserManager if (userManager != null && !userManager.isUserUnlocked) { @@ -37,6 +38,7 @@ class BootReceiver : BroadcastReceiver() { return } } + else -> { LogUtil.w(AppConfig.TAG, "BootReceiver: Unhandled action: $action") return diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/CoreTestService.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/CoreTestService.kt index 63ef7bc4..7b184f5f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/CoreTestService.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/CoreTestService.kt @@ -11,9 +11,9 @@ import com.v2ray.ang.dto.TestServiceMessage import com.v2ray.ang.enums.NotificationChannelType import com.v2ray.ang.extension.serializable import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.util.LogUtil import com.v2ray.ang.helper.MessageHelper import com.v2ray.ang.helper.NotificationHelper +import com.v2ray.ang.util.LogUtil import java.util.Collections class CoreTestService : Service() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/QSTileService.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/QSTileService.kt index 90447c8f..70bfdcfe 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/QSTileService.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/QSTileService.kt @@ -12,8 +12,8 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.core.CoreServiceManager import com.v2ray.ang.core.LauncherManager -import com.v2ray.ang.util.LogUtil import com.v2ray.ang.helper.MessageHelper +import com.v2ray.ang.util.LogUtil import com.v2ray.ang.util.Utils import java.lang.ref.SoftReference diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/RealPingWorkerService.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/RealPingWorkerService.kt index ed42ed38..e421aeda 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/RealPingWorkerService.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/RealPingWorkerService.kt @@ -27,7 +27,7 @@ import java.util.concurrent.atomic.AtomicInteger class RealPingWorkerService( private val context: Context, private val guids: List, - private val onlyTcp : Boolean = false, + private val onlyTcp: Boolean = false, private val onEvent: (RealPingEvent) -> Unit = {} ) { private val job = SupervisorJob() diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/service/SubscriptionUpdateService.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/service/SubscriptionUpdateService.kt index 809d482b..87f96e8c 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/service/SubscriptionUpdateService.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/service/SubscriptionUpdateService.kt @@ -14,8 +14,8 @@ import com.v2ray.ang.enums.NotificationChannelType import com.v2ray.ang.extension.serializable import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.util.LogUtil import com.v2ray.ang.helper.NotificationHelper +import com.v2ray.ang.util.LogUtil import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -109,7 +109,7 @@ class SubscriptionUpdateService : Service() { private suspend fun updateSingle(subId: String, forcedUpdate: Boolean) { val subItem = MmkvManager.decodeSubscription(subId) ?: return - if(!subItem.enabled || subItem.url.isEmpty()){ + if (!subItem.enabled || subItem.url.isEmpty()) { return } 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 90821cd8..5bc02b82 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 @@ -29,11 +29,11 @@ import androidx.compose.ui.viewinterop.AndroidView import com.v2ray.ang.AppConfig import com.v2ray.ang.BuildConfig import com.v2ray.ang.R +import com.v2ray.ang.core.CoreNativeManager +import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.SettingsMenuItem import com.v2ray.ang.ui.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 f31dd002..8eb61d78 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 @@ -63,10 +63,10 @@ import com.google.zxing.PlanarYUVLuminanceSource import com.google.zxing.common.HybridBinarizer import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.enums.PermissionType import com.v2ray.ang.extension.toast import com.v2ray.ang.ui.base.HelperBaseComponentActivity +import com.v2ray.ang.ui.compose.AppTopBar 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/apppicker/AppPickerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt index 1fb2669d..26d7246c 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/apppicker/AppPickerActivity.kt @@ -31,12 +31,12 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.R +import com.v2ray.ang.dto.AppInfo +import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.ui.compose.AppListItem import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.ItemDivider import com.v2ray.ang.ui.compose.verticalScrollbar -import com.v2ray.ang.dto.AppInfo -import com.v2ray.ang.ui.base.BaseComponentActivity class AppPickerActivity : BaseComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt index 7be52143..0d78fef0 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/backup/BackupActivity.kt @@ -31,16 +31,16 @@ import androidx.lifecycle.repeatOnLifecycle import com.v2ray.ang.AppConfig import com.v2ray.ang.BuildConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.InputDialog -import com.v2ray.ang.ui.compose.InputField -import com.v2ray.ang.ui.compose.SelectListDialog -import com.v2ray.ang.ui.compose.SettingsMenuItem 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.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.InputDialog +import com.v2ray.ang.ui.compose.InputField +import com.v2ray.ang.ui.compose.SelectListDialog +import com.v2ray.ang.ui.compose.SettingsMenuItem import com.v2ray.ang.util.LogUtil import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt index c25b24a6..fc0325ee 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/base/BaseComponentActivity.kt @@ -6,8 +6,8 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.runtime.Composable -import com.v2ray.ang.ui.compose.AppTheme import com.v2ray.ang.handler.SettingsManager +import com.v2ray.ang.ui.compose.AppTheme import com.v2ray.ang.util.MyContextWrapper abstract class BaseComponentActivity : ComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt index f962c71c..316b83c3 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/checkupdate/CheckUpdateActivity.kt @@ -23,12 +23,12 @@ import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.BuildConfig import com.v2ray.ang.R +import com.v2ray.ang.core.CoreNativeManager +import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.SettingsMenuItem import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.ui.compose.VersionInfoBlock -import com.v2ray.ang.core.CoreNativeManager -import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.util.Utils class CheckUpdateActivity : BaseComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/compose/SnackBar.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/compose/SnackBar.kt index f2575d51..571afbbd 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/compose/SnackBar.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/compose/SnackBar.kt @@ -84,7 +84,7 @@ class AppSnackbarController( fun show(message: CharSequence, type: ToastType = ToastType.NORMAL, long: Boolean = false) { val id = ++currentId - scope.launch { + scope.launch { if (currentShowTime != 0L) { val elapsed = System.currentTimeMillis() - currentShowTime if (elapsed < SnackbarThrottleMs) { @@ -92,7 +92,7 @@ class AppSnackbarController( } } - hostState.currentSnackbarData?.dismiss() + hostState.currentSnackbarData?.dismiss() launch { hostState.showSnackbar( @@ -108,8 +108,8 @@ class AppSnackbarController( } currentShowTime = System.currentTimeMillis() - } - } + } + } } private data class AppSnackbarVisuals( diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt index c3db7e9b..9d3c1a74 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/logcat/LogcatActivity.kt @@ -38,11 +38,11 @@ import androidx.core.content.FileProvider import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import com.v2ray.ang.R +import com.v2ray.ang.extension.toast +import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.ItemDivider import com.v2ray.ang.ui.compose.verticalScrollbar -import com.v2ray.ang.extension.toast -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/main/MainGroupTab.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainGroupTab.kt index b511cca8..d19eb21a 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 @@ -16,9 +16,9 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.v2ray.ang.ui.compose.colorFabActive import com.v2ray.ang.dto.GroupMapItem import com.v2ray.ang.dto.entities.ServersCache +import com.v2ray.ang.ui.compose.colorFabActive import kotlinx.coroutines.flow.StateFlow @Composable diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainImportMenu.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainImportMenu.kt index 2dcb3cb7..778053e4 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainImportMenu.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainImportMenu.kt @@ -6,10 +6,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.SelectListDialog import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.isComplexType +import com.v2ray.ang.ui.compose.SelectListDialog internal enum class ServerMenuAction( @StringRes val labelRes: Int, diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt index 6c1a77bd..11359a2d 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt @@ -18,8 +18,8 @@ import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.handler.SubscriptionUpdater -import com.v2ray.ang.util.LogUtil import com.v2ray.ang.helper.MessageHelper +import com.v2ray.ang.util.LogUtil import com.v2ray.ang.util.Utils import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow 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 4cf625db..ad707a3f 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 @@ -28,9 +28,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.ui.compose.LocalDarkTheme import com.v2ray.ang.ui.compose.QRCodeDialog -import com.v2ray.ang.dto.entities.ProfileItem 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 832f2f4d..dad6ef83 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 @@ -43,6 +43,12 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.R +import com.v2ray.ang.dto.entities.ProfileItem +import com.v2ray.ang.dto.entities.ServersCache +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.ui.compose.ItemDivider import com.v2ray.ang.ui.compose.ReorderableGridItem import com.v2ray.ang.ui.compose.ReorderableListItem @@ -50,12 +56,6 @@ import com.v2ray.ang.ui.compose.colorConfigType import com.v2ray.ang.ui.compose.colorPing import com.v2ray.ang.ui.compose.colorPingRed import com.v2ray.ang.ui.compose.verticalScrollbar -import com.v2ray.ang.dto.entities.ProfileItem -import com.v2ray.ang.dto.entities.ServersCache -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 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/ui/main/MainViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt index 3eed95ea..10b80041 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt @@ -672,7 +672,7 @@ class MainViewModel( } } - fun testAllRealPing(onlyTcp : Boolean = false) { + fun testAllRealPing(onlyTcp: Boolean = false) { dataSource.cancelAllPing() val groupId = uiState.value.selectedGroupId val servers = currentServers() diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt index 47c1f653..e1de5fe7 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/perappproxy/PerAppProxyActivity.kt @@ -41,16 +41,16 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.R +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.ui.compose.AppDivider import com.v2ray.ang.ui.compose.AppListItem import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.ItemDivider import com.v2ray.ang.ui.compose.colorFabActive import com.v2ray.ang.ui.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 class PerAppProxyActivity : BaseComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt index f93eefd7..b3819578 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingEditActivity.kt @@ -34,12 +34,6 @@ import androidx.lifecycle.lifecycleScope import com.v2ray.ang.AppConfig.BUILTIN_OUTBOUND_TAGS import com.v2ray.ang.AppConfig.TAG_PROXY import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.RulesetItem import com.v2ray.ang.extension.nullIfBlank import com.v2ray.ang.extension.toast @@ -47,6 +41,12 @@ 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 com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem +import com.v2ray.ang.ui.compose.verticalScrollbar import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt index 56848eb7..8694e41f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/routing/RoutingSettingActivity.kt @@ -45,6 +45,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import com.v2ray.ang.AppConfig import com.v2ray.ang.R +import com.v2ray.ang.dto.entities.RulesetItem +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.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.ItemDivider import com.v2ray.ang.ui.compose.ReorderableListItem @@ -53,12 +59,6 @@ import com.v2ray.ang.ui.compose.SettingsListItem import com.v2ray.ang.ui.compose.colorConfigType import com.v2ray.ang.ui.compose.colorFabActive import com.v2ray.ang.ui.compose.verticalScrollbar -import com.v2ray.ang.dto.entities.RulesetItem -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 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 2040baf2..d6a62045 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 @@ -32,12 +32,6 @@ import androidx.compose.ui.unit.dp import com.v2ray.ang.AppConfig.REALITY import com.v2ray.ang.AppConfig.TLS import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.enums.NetworkType @@ -47,6 +41,12 @@ import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.CertificateFingerprintManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.ui.base.BaseComponentActivity +import com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem +import com.v2ray.ang.ui.compose.verticalScrollbar 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 89af54ca..68ac1d21 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 @@ -34,12 +34,6 @@ import com.v2ray.ang.AppConfig.TLS import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_ADDRESS_V4 import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_MTU import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.enums.NetworkType @@ -50,6 +44,12 @@ import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.CertificateFingerprintManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.ui.base.BaseComponentActivity +import com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem +import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.util.JsonUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -255,7 +255,7 @@ fun ServerScreen( var finalMask by rememberSaveable { mutableStateOf(initialConfig.finalMask ?: "") } var kcpMtu by rememberSaveable { mutableStateOf(initialConfig.kcpMtu?.toString() ?: "") } var kcpTti by rememberSaveable { mutableStateOf(initialConfig.kcpTti?.toString() ?: "") } - var browserDialerMode by rememberSaveable { mutableStateOf(initialConfig.browserDialerMode?: "") } + var browserDialerMode by rememberSaveable { mutableStateOf(initialConfig.browserDialerMode ?: "") } var streamSecurity by rememberSaveable { mutableStateOf(initialConfig.security ?: "") } var sni by rememberSaveable { mutableStateOf(initialConfig.sni ?: "") } var allowInsecure by rememberSaveable { mutableStateOf(initialConfig.insecure == true) } 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 19a628e4..c5d944be 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 @@ -55,11 +55,6 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.horizontalScrollbar -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast @@ -68,6 +63,11 @@ import com.v2ray.ang.fmt.CustomFmt import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.ui.base.BaseComponentActivity +import com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.horizontalScrollbar +import com.v2ray.ang.ui.compose.verticalScrollbar 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 4da40585..10e4b51d 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 @@ -26,11 +26,6 @@ import androidx.compose.ui.unit.dp import com.v2ray.ang.AppConfig.BUILTIN_OUTBOUND_TAGS import com.v2ray.ang.AppConfig.TAG_PROXY import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.BalancerStrategyType import com.v2ray.ang.enums.EConfigType @@ -40,6 +35,11 @@ import com.v2ray.ang.extension.toastSuccess import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.ui.base.BaseComponentActivity +import com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem class ServerGroupActivity : BaseComponentActivity() { @@ -67,10 +67,10 @@ class ServerGroupActivity : BaseComponentActivity() { val config = MmkvManager.decodeServerConfig(editGuid) populateSubscriptionSpinner() fallbackSuggestions = ( - BUILTIN_OUTBOUND_TAGS + SettingsManager.getProfileRemarks( - excludeConfigTypes = setOf(EConfigType.CUSTOM, EConfigType.POLICYGROUP) - ) - ).filter { it != TAG_PROXY } + BUILTIN_OUTBOUND_TAGS + SettingsManager.getProfileRemarks( + excludeConfigTypes = setOf(EConfigType.CUSTOM, EConfigType.POLICYGROUP) + ) + ).filter { it != TAG_PROXY } initialRemarks = config?.remarks ?: "" initialFilter = config?.policyGroupFilter ?: "" diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHttpActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHttpActivity.kt index b7026606..e35bab24 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHttpActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHttpActivity.kt @@ -5,8 +5,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.enums.EConfigType +import com.v2ray.ang.ui.compose.FormTextField class ServerHttpActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHysteria2Activity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHysteria2Activity.kt index 456ceabd..8d1d4f4f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHysteria2Activity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerHysteria2Activity.kt @@ -6,11 +6,11 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringResource import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem class ServerHysteria2Activity : BaseServerActivity() { 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 f1bfd4d0..21e1420f 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 @@ -35,12 +35,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.reorderableDragHandle -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.isComplexType @@ -50,9 +44,15 @@ import com.v2ray.ang.extension.toastSuccess import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.ui.base.BaseComponentActivity -import java.util.UUID +import com.v2ray.ang.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.reorderableDragHandle +import com.v2ray.ang.ui.compose.verticalScrollbar import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState +import java.util.UUID class ServerProxyChainActivity : BaseComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerShadowsocksActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerShadowsocksActivity.kt index e8522795..76610f22 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerShadowsocksActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerShadowsocksActivity.kt @@ -6,10 +6,10 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField class ServerShadowsocksActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerSocksActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerSocksActivity.kt index 66c5c4f1..caf1a696 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerSocksActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerSocksActivity.kt @@ -5,8 +5,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.enums.EConfigType +import com.v2ray.ang.ui.compose.FormTextField class ServerSocksActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerTrojanActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerTrojanActivity.kt index 6bf8deaf..e53db275 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerTrojanActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerTrojanActivity.kt @@ -5,10 +5,10 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast +import com.v2ray.ang.ui.compose.FormTextField class ServerTrojanActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVlessActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVlessActivity.kt index 41949f20..653dd1bb 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVlessActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVlessActivity.kt @@ -6,11 +6,11 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField class ServerVlessActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVmessActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVmessActivity.kt index dd1fdd53..47744360 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVmessActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerVmessActivity.kt @@ -6,11 +6,11 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.dto.entities.ProfileItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toast +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField class ServerVmessActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerWireguardActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerWireguardActivity.kt index a01cf564..07b3c0a9 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerWireguardActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/server/ServerWireguardActivity.kt @@ -6,8 +6,8 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.FormTextField import com.v2ray.ang.enums.EConfigType +import com.v2ray.ang.ui.compose.FormTextField class ServerWireguardActivity : BaseServerActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt index c53a5724..d803ea1f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/settings/SettingsActivity.kt @@ -25,6 +25,11 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.VPN import com.v2ray.ang.R +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.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.CollapsiblePreferenceGroupHeader import com.v2ray.ang.ui.compose.SettingsEditItem @@ -33,11 +38,6 @@ import com.v2ray.ang.ui.compose.SettingsMenuItem import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.ui.compose.ThemeManager import com.v2ray.ang.ui.compose.verticalScrollbar -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 class SettingsActivity : BaseComponentActivity() { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt index 290af8e4..34bbd0dc 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/shortcut/TaskerActivity.kt @@ -31,11 +31,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.v2ray.ang.AppConfig import com.v2ray.ang.R +import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.ui.base.BaseComponentActivity import com.v2ray.ang.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.ui.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/subscription/SubEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt index 79d71a1e..2df184bb 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubEditActivity.kt @@ -26,12 +26,6 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.lifecycleScope import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormDropdownField -import com.v2ray.ang.ui.compose.FormTextField -import com.v2ray.ang.ui.compose.SettingsSwitchItem -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.SubscriptionItem import com.v2ray.ang.enums.EConfigType import com.v2ray.ang.extension.toLongEx @@ -42,6 +36,12 @@ 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.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormDropdownField +import com.v2ray.ang.ui.compose.FormTextField +import com.v2ray.ang.ui.compose.SettingsSwitchItem +import com.v2ray.ang.ui.compose.verticalScrollbar 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/subscription/SubSettingActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt index 66618cd0..57e40b37 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubSettingActivity.kt @@ -40,6 +40,10 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.v2ray.ang.AppConfig import com.v2ray.ang.R +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.ui.compose.AppTopBar import com.v2ray.ang.ui.compose.DeleteConfirmDialog import com.v2ray.ang.ui.compose.ItemDivider @@ -49,10 +53,6 @@ import com.v2ray.ang.ui.compose.SelectListDialog import com.v2ray.ang.ui.compose.SettingsSwitchItem import com.v2ray.ang.ui.compose.colorFabActive import com.v2ray.ang.ui.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 sh.calvin.reorderable.ReorderableItem diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt index 63a3f17b..1587959d 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/subscription/SubscriptionsViewModel.kt @@ -10,8 +10,8 @@ import com.v2ray.ang.extension.moveItem 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.helper.MessageHelper +import com.v2ray.ang.ui.base.BaseViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt index ceff32f7..7ccaf7ef 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetActivity.kt @@ -45,11 +45,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.ItemDivider -import com.v2ray.ang.ui.compose.SettingsListItem -import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.dto.entities.AssetUrlCache import com.v2ray.ang.dto.entities.AssetUrlItem import com.v2ray.ang.extension.toTrafficString @@ -59,6 +54,11 @@ 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.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.ItemDivider +import com.v2ray.ang.ui.compose.SettingsListItem +import com.v2ray.ang.ui.compose.verticalScrollbar import com.v2ray.ang.util.LogUtil import com.v2ray.ang.util.Utils import kotlinx.coroutines.Dispatchers diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt index c95b643c..11649e0f 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/userasset/UserAssetUrlActivity.kt @@ -20,14 +20,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.v2ray.ang.AppConfig import com.v2ray.ang.R -import com.v2ray.ang.ui.compose.AppTopBar -import com.v2ray.ang.ui.compose.DeleteConfirmDialog -import com.v2ray.ang.ui.compose.FormTextField 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.ui.compose.AppTopBar +import com.v2ray.ang.ui.compose.DeleteConfirmDialog +import com.v2ray.ang.ui.compose.FormTextField 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/util/Utils.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt index 3508e780..087d5749 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt @@ -4,12 +4,9 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.Intent -import android.content.res.Configuration.UI_MODE_NIGHT_MASK -import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.os.Build import android.os.LocaleList import android.provider.Settings -import android.text.Editable import android.util.Base64 import android.util.Patterns import android.webkit.URLUtil @@ -35,27 +32,6 @@ object Utils { Regex("^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$") private val IPV6_REGEX = Regex("^((?:[0-9A-Fa-f]{1,4}))?((?::[0-9A-Fa-f]{1,4}))*::((?:[0-9A-Fa-f]{1,4}))?((?::[0-9A-Fa-f]{1,4}))*|((?:[0-9A-Fa-f]{1,4}))((?::[0-9A-Fa-f]{1,4})){7}$") - /** - * Convert string to editable for Kotlin. - * - * @param text The string to convert. - * @return An Editable instance containing the text. - */ - fun getEditable(text: String?): Editable { - return Editable.Factory.getInstance().newEditable(text.orEmpty()) - } - - /** - * Find the position of a value in an array. - * - * @param array The array to search. - * @param value The value to find. - * @return The index of the value in the array, or -1 if not found. - */ - fun arrayFind(array: Array, value: String): Int { - return array.indexOf(value) - } - /** * Parse a string to an integer with a default value. * @@ -115,7 +91,7 @@ object Utils { * @param text The base64 encoded string. * @return The decoded string, or null if decoding fails. */ - fun tryDecodeBase64(text: String?): String? { + private fun tryDecodeBase64(text: String?): String? { if (text.isNullOrEmpty()) return null try { @@ -304,36 +280,6 @@ object Utils { } } - /** - * Decode a URL-encoded string. - * - * @param url The URL-encoded string. - * @return The decoded string, or the original string if decoding fails. - */ - fun urlDecode(url: String): String { - return try { - URLDecoder.decode(url, Charsets.UTF_8.toString()) - } catch (e: Exception) { - LogUtil.e(AppConfig.TAG, "Failed to decode URL", e) - url - } - } - - /** - * Encode a string to URL-encoded format. - * - * @param url The string to encode. - * @return The URL-encoded string, or the original string if encoding fails. - */ - fun urlEncode(url: String): String { - return try { - URLEncoder.encode(url, Charsets.UTF_8.toString()) - } catch (e: Exception) { - LogUtil.e(AppConfig.TAG, "Failed to encode URL", e) - url - } - } - /** * Decode a "encodeURIComponent" string. * @@ -424,16 +370,6 @@ object Utils { } } - /** - * Get the dark mode status. - * - * @param context The context to use. - * @return True if dark mode is enabled, false otherwise. - */ - fun getDarkModeStatus(context: Context): Boolean { - return context.resources.configuration.uiMode and UI_MODE_NIGHT_MASK != UI_MODE_NIGHT_NO - } - /** * Get the IPv6 address in a formatted string. * @@ -468,26 +404,6 @@ object Utils { .replace("|", "%7C") } - /** - * Find a free port from a list of ports. - * - * @param ports The list of ports to check. - * @return The first free port found. - * @throws IOException If no free port is found. - */ - fun findFreePort(ports: List): Int { - for (port in ports) { - try { - return ServerSocket(port).use { it.localPort } - } catch (ex: IOException) { - continue // try next port - } - } - - // if the program gets here, no port in the range was found - throw IOException("no free port found") - } - /** * Find a random free port. * @@ -544,13 +460,6 @@ object Utils { */ fun isXray(): Boolean = BuildConfig.APPLICATION_ID.startsWith("com.v2ray.ang") - /** - * Check if it is the Google Play version. - * - * @return True if the package is Google Play, false otherwise. - */ - fun isGoogleFlavor(): Boolean = BuildConfig.FLAVOR == "playstore" - /** * Converts an InetAddress to its long representation *