From 0123c3086769b058d04400085c7807284c04003c Mon Sep 17 00:00:00 2001 From: KremeCN <3265494849@qq.com> Date: Tue, 25 Aug 2026 09:25:04 +0800 Subject: [PATCH] refactor(app): remove duplicate provider navigation --- .../abox/manager/ui/login/LoginScreenTest.kt | 10 ++- .../abox/manager/ui/ABoxManagerApp.kt | 1 - .../ui/authenticated/AuthenticatedScreen.kt | 79 ------------------- .../abox/manager/ui/login/LoginScreen.kt | 7 -- .../ui/shell/AccountProviderBottomSheet.kt | 19 +---- .../abox/manager/ui/shell/MainAppShell.kt | 2 - .../src/main/res/values-zh-rCN/strings.xml | 2 - android/app/src/main/res/values/strings.xml | 2 - 8 files changed, 7 insertions(+), 115 deletions(-) delete mode 100644 android/app/src/main/kotlin/com/flagship/abox/manager/ui/authenticated/AuthenticatedScreen.kt diff --git a/android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/login/LoginScreenTest.kt b/android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/login/LoginScreenTest.kt index 451585b..7b6e87e 100644 --- a/android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/login/LoginScreenTest.kt +++ b/android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/login/LoginScreenTest.kt @@ -1,9 +1,11 @@ package com.flagship.abox.manager.ui.login import androidx.activity.ComponentActivity +import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertIsEnabled import androidx.compose.ui.test.assertIsNotEnabled import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -29,7 +31,7 @@ class LoginScreenTest { ) @Test - fun backControlsSwitchProviderBeforeLogin() { + fun topBackControlSwitchesProviderBeforeLogin() { var switches = 0 composeRule.setContent { ABoxTheme { @@ -49,8 +51,8 @@ class LoginScreenTest { composeRule.onNodeWithContentDescription("back-to-providers") .assertIsEnabled() .performClick() - composeRule.onNodeWithText("Back to providers").performClick() - assertEquals(2, switches) + composeRule.onAllNodesWithText("Back to providers").assertCountEquals(0) + assertEquals(1, switches) } @Test @@ -94,6 +96,6 @@ class LoginScreenTest { } composeRule.onNodeWithContentDescription("back-to-providers").assertIsNotEnabled() - composeRule.onNodeWithText("Back to providers").assertIsNotEnabled() + composeRule.onAllNodesWithText("Back to providers").assertCountEquals(0) } } diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/ABoxManagerApp.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/ABoxManagerApp.kt index 1de1c84..9a2dc11 100644 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/ABoxManagerApp.kt +++ b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/ABoxManagerApp.kt @@ -60,7 +60,6 @@ fun ABoxManagerApp( is AppSessionUiState.Authenticated -> MainAppShell( userName = state.username.value, providerName = state.profile.displayName, - onSwitchProvider = sessionActionsViewModel::switchProvider, onLogout = sessionActionsViewModel::logout, actionInProgress = actionState.inProgress, errorMessage = actionState.errorMessage, diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/authenticated/AuthenticatedScreen.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/authenticated/AuthenticatedScreen.kt deleted file mode 100644 index 1df3284..0000000 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/authenticated/AuthenticatedScreen.kt +++ /dev/null @@ -1,79 +0,0 @@ -package com.flagship.abox.manager.ui.authenticated - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.widthIn -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import com.flagship.abox.manager.R -import com.flagship.abox.manager.designsystem.ABoxButton -import com.flagship.abox.manager.domain.ProviderProfile - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun AuthenticatedPlaceholderScreen( - profile: ProviderProfile, - actionInProgress: Boolean, - errorMessage: String?, - onLogout: () -> Unit, - onSwitchProvider: () -> Unit, -) { - Scaffold( - topBar = { - TopAppBar( - title = { Text(stringResource(R.string.authenticated_title, profile.displayName)) }, - ) - }, - ) { contentPadding -> - Box( - modifier = Modifier - .fillMaxSize() - .padding(contentPadding), - contentAlignment = Alignment.Center, - ) { - Column( - modifier = Modifier - .widthIn(max = 520.dp) - .fillMaxWidth() - .verticalScroll(rememberScrollState()) - .padding(24.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(14.dp), - ) { - Text( - text = stringResource(R.string.authenticated_description), - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - errorMessage?.let { Text(it, color = MaterialTheme.colorScheme.error) } - ABoxButton( - onClick = onLogout, - enabled = !actionInProgress, - modifier = Modifier.fillMaxWidth(), - ) { - Text(stringResource(R.string.action_logout)) - } - ABoxButton( - onClick = onSwitchProvider, - enabled = !actionInProgress, - modifier = Modifier.fillMaxWidth(), - ) { - Text(stringResource(R.string.action_switch_provider)) - } - } - } - } -} diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/login/LoginScreen.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/login/LoginScreen.kt index 51b6ddb..4ef1e85 100644 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/login/LoginScreen.kt +++ b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/login/LoginScreen.kt @@ -184,13 +184,6 @@ fun LoginScreen( } else Text(stringResource(R.string.action_login)) } - ABoxButton( - onClick = onSwitchProvider, - enabled = navigationEnabled, - modifier = Modifier.fillMaxWidth(), - ) { - Text(stringResource(R.string.login_back_to_providers)) - } } } } diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderBottomSheet.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderBottomSheet.kt index bb650de..2a18070 100644 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderBottomSheet.kt +++ b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderBottomSheet.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ExitToApp import androidx.compose.material.icons.filled.CloudDone -import androidx.compose.material.icons.filled.SwapHoriz import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults @@ -50,7 +49,6 @@ fun AccountProviderBottomSheet( userName: String, providerName: String, onDismissRequest: () -> Unit, - onSwitchProvider: () -> Unit, onLogout: () -> Unit, actionInProgress: Boolean, errorMessage: String?, @@ -146,22 +144,7 @@ fun AccountProviderBottomSheet( Spacer(modifier = Modifier.height(8.dp)) - // Action Buttons - OutlinedButton( - onClick = onSwitchProvider, - enabled = !actionInProgress, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(12.dp), - ) { - Icon( - imageVector = Icons.Default.SwapHoriz, - contentDescription = null, - modifier = Modifier.size(20.dp), - ) - Spacer(modifier = Modifier.size(8.dp)) - Text(stringResource(R.string.account_sheet_switch_provider)) - } - + // Action button ABoxButton( onClick = onLogout, enabled = !actionInProgress, diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt index 1f9ff41..84cc457 100644 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt +++ b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt @@ -42,7 +42,6 @@ import com.flagship.abox.manager.designsystem.ABoxTopPillBar fun MainAppShell( userName: String, providerName: String, - onSwitchProvider: () -> Unit, onLogout: () -> Unit, modifier: Modifier = Modifier, initialTab: MainTab = MainTab.DEVICES, @@ -125,7 +124,6 @@ fun MainAppShell( userName = userName, providerName = providerName, onDismissRequest = { showAccountSheet = false }, - onSwitchProvider = onSwitchProvider, onLogout = onLogout, actionInProgress = actionInProgress, errorMessage = errorMessage, diff --git a/android/app/src/main/res/values-zh-rCN/strings.xml b/android/app/src/main/res/values-zh-rCN/strings.xml index 9fa1d6b..696dc16 100644 --- a/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/android/app/src/main/res/values-zh-rCN/strings.xml @@ -8,7 +8,6 @@ 无需网络,通过本地模拟设备体验应用。 登录 %1$s 当前提供方:%1$s - 返回提供方选择 用户名 密码 记住用户名 @@ -35,7 +34,6 @@ 账户与提供方 当前登录为 当前提供方 - 切换提供方 退出登录 关闭 设备列表 diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 2b263fd..c8818bb 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -8,7 +8,6 @@ Explore the app with simulated local devices and no network connection. Sign in to %1$s Selected provider: %1$s - Back to providers Username Password Remember username @@ -35,7 +34,6 @@ Account & Provider Signed in as Active Provider - Switch Provider Sign Out Close Device List