From 86bc47ca7f88746a4abeec6d32d4563746b8acbd Mon Sep 17 00:00:00 2001 From: shenzuqiang Date: Thu, 12 Mar 2026 15:05:27 +0800 Subject: [PATCH] =?UTF-8?q?Dev=EF=BC=9A=201=E3=80=81=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E6=B8=B8=E5=AE=A2=E8=AE=BF=E9=97=AE=202=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E8=B0=83=E8=B5=B7?= =?UTF-8?q?=203=E3=80=81=E7=99=BB=E5=BD=95=E5=88=87=E6=8D=A2=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=BC=98=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/img/rabbit/MainActivity.kt | 8 +- .../com/img/rabbit/pages/screen/MineScreen.kt | 47 +++++++++--- .../rabbit/pages/screen/mine/SettingScreen.kt | 75 ++++++++++--------- .../mine/setting/AccountManagerScreen.kt | 8 +- .../img/rabbit/viewmodel/LoginViewModel.kt | 10 ++- 5 files changed, 95 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/com/img/rabbit/MainActivity.kt b/app/src/main/java/com/img/rabbit/MainActivity.kt index 3cde899..6f95490 100644 --- a/app/src/main/java/com/img/rabbit/MainActivity.kt +++ b/app/src/main/java/com/img/rabbit/MainActivity.kt @@ -112,6 +112,8 @@ class MainActivity : ComponentActivity(), LoadingCallback { generalViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))[GeneralViewModel::class.java] // isGlobalLoading请勿前置,会导致初始化问题 val isGlobalLoading by generalViewModel.isLoading.collectAsState() + // 退出登录 + var isLogout by remember { mutableStateOf(false) } // 软件更新提示 var showUpdateDialog by remember { mutableStateOf(false) } @@ -182,6 +184,9 @@ class MainActivity : ComponentActivity(), LoadingCallback { is LoginBindEvent.Login -> { if(!event.isLogin){ loginViewModel.reset() + isLogout = true + }else{ + isLogout = false } loginViewModel.requestUserConfig() } @@ -284,7 +289,8 @@ class MainActivity : ComponentActivity(), LoadingCallback { if(showSplash){ val token = PreferenceUtil.getAccessToken() // 未登录,显示登录页 - if (token.isNullOrEmpty() && loginViewModel.userConfigResult.value == null) { + //if (token.isNullOrEmpty() && loginViewModel.userConfigResult.value == null) { + if(isLogout){// 退出登录后,显示登录页 // 同意隐私协议政策,检验是否有一键登录权限 loginViewModel.oneKeyLoginForGeTuiSdk(context as Activity) { isAllowShowOneKeyScreen -> if (isAllowShowOneKeyScreen) { diff --git a/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt index a9034f3..0fb58db 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt @@ -88,14 +88,13 @@ fun MineScreen( } } - LaunchedEffect(loginViewModel.userConfigResult.value) { - if(loginViewModel.userConfigResult.value != null){ + LaunchedEffect(loginViewModel.userInfoResult.value) { + if(loginViewModel.userInfoResult.value != null){ // 等待200ms,确保用户配置已经刷新 delay(200) userInfo = PreferenceUtil.getUserInfo() - - Log.i(TAG,"-------------->MineScreen页面,用户配置已经刷新") } + } Box( @@ -116,7 +115,16 @@ fun MineScreen( ) { // 头像和登录/注册 Row( - modifier = Modifier.fillMaxWidth() + modifier = Modifier + .fillMaxWidth() + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) { + if(PreferenceUtil.getUserConfig()?.temp == true){ + doLogin(generalViewModel, navController) + } + } ) { if(userInfo == null){ Image( @@ -131,6 +139,9 @@ fun MineScreen( interactionSource = remember { MutableInteractionSource() } ) { // 处理点击事件(头像) + if(PreferenceUtil.getUserConfig()?.temp == true){ + doLogin(generalViewModel, navController) + } } ) }else{ @@ -146,6 +157,9 @@ fun MineScreen( interactionSource = remember { MutableInteractionSource() } ) { // 处理点击事件(头像) + if(PreferenceUtil.getUserConfig()?.temp == true){ + doLogin(generalViewModel, navController) + } }, fallback = painterResource(id = R.mipmap.ic_user_avatar_default), error = painterResource(id = R.mipmap.ic_user_avatar_default) @@ -160,10 +174,7 @@ fun MineScreen( interactionSource = remember { MutableInteractionSource() } ) { if (userInfo == null) { - // 隐藏TabBar - generalViewModel.setNavigationBarVisible(false) - // 跳转登录页面 - navController.navigate("login?type=${LoginViewModel.JumpLoginType.NORMAL.type}") + doLogin(generalViewModel, navController) } else { // 已登录,跳转个人信息页面 //navController.navigate("userInfo") @@ -175,7 +186,16 @@ fun MineScreen( fontSize = 18.sp, fontWeight = FontWeight.Bold, color = Color(0xFF1A1A1A), - modifier = Modifier.wrapContentSize() + modifier = Modifier + .wrapContentSize() + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ){ + if(PreferenceUtil.getUserConfig()?.temp == true){ + doLogin(generalViewModel, navController) + } + } ) Row( modifier = Modifier @@ -566,6 +586,13 @@ fun MineScreen( } } +private fun doLogin(generalViewModel: GeneralViewModel, navController: NavHostController){ + // 隐藏TabBar + generalViewModel.setNavigationBarVisible(false) + // 跳转登录页面 + navController.navigate("login?type=${LoginViewModel.JumpLoginType.FROM_ADD.type}") +} + @Preview(showBackground = true) @Composable private fun PreviewMineScreen(){ diff --git a/app/src/main/java/com/img/rabbit/pages/screen/mine/SettingScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/mine/SettingScreen.kt index fe237da..e91347a 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/mine/SettingScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/mine/SettingScreen.kt @@ -263,48 +263,51 @@ fun SettingScreen(navController: NavHostController, loginViewModel: LoginViewMod .align(Alignment.CenterVertically) ) } - Box( - modifier = Modifier.fillMaxWidth().height(0.5.dp).padding(horizontal = 12.dp).background( - Color(0x4DBBBBBB) - ) - ) - Row( - modifier = Modifier - .fillMaxWidth() - .height(52.dp) - .clickable( - indication = null, - interactionSource = remember { MutableInteractionSource() } - ) { - // 跳转注销账号页面 - navController.navigate("deleteAccount") - }, - verticalAlignment = Alignment.CenterVertically - ) { + if(PreferenceUtil.getUserConfig()?.temp == false){ Box( - modifier = Modifier.weight(1f) - ){ - Text( - text = "注销账号", - fontSize = 14.sp, - fontWeight = FontWeight.Bold, - color = Color(0xFF1A1A1A), + modifier = Modifier.fillMaxWidth().height(0.5.dp).padding(horizontal = 12.dp).background( + Color(0x4DBBBBBB) + ) + ) + Row( + modifier = Modifier + .fillMaxWidth() + .height(52.dp) + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) { + // 跳转注销账号页面 + navController.navigate("deleteAccount") + }, + verticalAlignment = Alignment.CenterVertically + ) { + Box( + modifier = Modifier.weight(1f) + ){ + Text( + text = "注销账号", + fontSize = 14.sp, + fontWeight = FontWeight.Bold, + color = Color(0xFF1A1A1A), + modifier = Modifier + .wrapContentSize() + .padding(start = 8.dp) + ) + } + + Image( + painter = painterResource(id = R.mipmap.ic_arrow_right), + contentDescription = null, + contentScale = ContentScale.FillWidth, modifier = Modifier .wrapContentSize() - .padding(start = 8.dp) + .padding(end = 12.dp) + .align(Alignment.CenterVertically) ) } - - Image( - painter = painterResource(id = R.mipmap.ic_arrow_right), - contentDescription = null, - contentScale = ContentScale.FillWidth, - modifier = Modifier - .wrapContentSize() - .padding(end = 12.dp) - .align(Alignment.CenterVertically) - ) } + } if(PreferenceUtil.getUserConfig()?.temp == false){ diff --git a/app/src/main/java/com/img/rabbit/pages/screen/mine/setting/AccountManagerScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/mine/setting/AccountManagerScreen.kt index cd86998..a2d2f94 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/mine/setting/AccountManagerScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/mine/setting/AccountManagerScreen.kt @@ -192,7 +192,9 @@ private fun ListItem(item: UserInfoEntity, onChange: (UserInfoEntity) -> Unit){ interactionSource = remember { MutableInteractionSource() } ) { // 切换账号 - onChange(item) + if(PreferenceUtil.getUserInfo()?.user_id != item.user_id){ + onChange(item) + } }, verticalAlignment = Alignment.CenterVertically ) { @@ -239,7 +241,9 @@ private fun ListItem(item: UserInfoEntity, onChange: (UserInfoEntity) -> Unit){ Checkbox( checked = isLogin, onCheckedChange = { isChecked -> - //viewModel.setIsPolicyAgreement(isChecked) + if(isChecked){ + onChange(item) + } }, modifier = Modifier .size(16.dp) diff --git a/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt b/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt index b3df1ac..997bbdc 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt @@ -21,6 +21,7 @@ import com.img.rabbit.bean.local.OnekeyPreLogin import com.img.rabbit.bean.local.toAlipayResult import com.img.rabbit.bean.response.LoginInfoEntity import com.img.rabbit.bean.response.UserConfigEntity +import com.img.rabbit.bean.response.UserInfoEntity import com.img.rabbit.components.CenterToast import com.img.rabbit.provider.api.ApiManager import com.img.rabbit.provider.api.ResultVo @@ -75,10 +76,10 @@ class LoginViewModel : BaseViewModel() { // 登录获取结果 val loginResult = mutableStateOf?>(null) - // 用户配置获取结果 val userConfigResult = mutableStateOf?>(null) - + // 用户信息获取结果 + val userInfoResult = mutableStateOf?>(null) // 错误状态 val errorState = mutableStateOf(null) @@ -123,8 +124,6 @@ class LoginViewModel : BaseViewModel() { } } } - //以下是刷新状态 -// applicationContext?.let { GlobalStateManager(it) }?.storeGlobalUserConfigNotify(true) }else{ Log.w("LoginViewModel", "获取配置失败: code=${response.code}, message=${response.message}") } @@ -397,6 +396,7 @@ class LoginViewModel : BaseViewModel() { //请求登录 private fun requestLogin(jsonObject: JsonObject, loginType: LoginScreenType){ + setLoading(true) mLaunch { val response = ApiManager.serviceVo.login(jsonObject.toString().toRequestBody()) if (response.status) { @@ -407,6 +407,7 @@ class LoginViewModel : BaseViewModel() { }else{ errorState.value = ErrorBean(response.code.toString(), response.message.ifEmpty { "登录失败" }) } + setLoading(false) } } @@ -416,6 +417,7 @@ class LoginViewModel : BaseViewModel() { val response = ApiManager.serviceVo.userInfo() if(response.status){ PreferenceUtil.saveUserInfo(response.data) + userInfoResult.value = response } } }