fix: settings logout should have been impl-d long time ago

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2023-09-17 00:17:36 +02:00 committed by Infi
parent d9c858c064
commit b1fc97714b
2 changed files with 66 additions and 49 deletions

View File

@ -1,58 +1,55 @@
package chat.revolt.screens.chat.views package chat.revolt.screens.chat.views
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material.icons.Icons import androidx.compose.material3.Text
import androidx.compose.material.icons.filled.Close
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag import androidx.compose.ui.draw.rotate
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel import androidx.compose.ui.unit.sp
import androidx.lifecycle.ViewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import chat.revolt.R import chat.revolt.R
import chat.revolt.api.RevoltAPI
import chat.revolt.api.settings.GlobalState
import chat.revolt.components.generic.PageHeader import chat.revolt.components.generic.PageHeader
import chat.revolt.components.screens.home.LinkOnHome
import chat.revolt.persistence.KVStorage
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.runBlocking
import javax.inject.Inject
@HiltViewModel
class HomeScreenViewModel @Inject constructor(
private val kvStorage: KVStorage
) : ViewModel() {
fun logout() {
runBlocking {
kvStorage.remove("sessionToken")
GlobalState.reset()
RevoltAPI.logout()
}
}
}
@Composable @Composable
fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hiltViewModel()) { fun HomeScreen(navController: NavController) {
val catTransition = rememberInfiniteTransition(label = "cat")
val catRotation by catTransition.animateFloat(
initialValue = 0f,
targetValue = 360f,
animationSpec = infiniteRepeatable(
animation = tween(10000, easing = LinearEasing),
repeatMode = RepeatMode.Restart
),
label = "catRotation"
)
Column( Column(
modifier = Modifier.safeDrawingPadding() modifier = Modifier.safeDrawingPadding()
) { ) {
PageHeader(text = stringResource(id = R.string.home)) PageHeader(text = stringResource(id = R.string.home))
Box(
LinkOnHome( modifier = Modifier
heading = stringResource(id = R.string.logout), .weight(1f)
icon = Icons.Default.Close, .fillMaxSize(),
onClick = { contentAlignment = Alignment.Center,
viewModel.logout() ) {
navController.navigate("login/greeting") { Text(
popUpTo("chat") { text = "🐈",
inclusive = true fontSize = 100.sp,
} modifier = Modifier.rotate(catRotation),
} )
}, }
modifier = Modifier.testTag("logout_from_home")
)
} }
} }

View File

@ -2,7 +2,6 @@ package chat.revolt.screens.settings
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.widget.Toast
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -26,17 +25,39 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import chat.revolt.BuildConfig import chat.revolt.BuildConfig
import chat.revolt.R import chat.revolt.R
import chat.revolt.activities.InviteActivity import chat.revolt.activities.InviteActivity
import chat.revolt.api.RevoltAPI
import chat.revolt.api.settings.GlobalState
import chat.revolt.components.generic.PageHeader import chat.revolt.components.generic.PageHeader
import chat.revolt.components.generic.SheetClickable import chat.revolt.components.generic.SheetClickable
import chat.revolt.components.screens.settings.SelfUserOverview import chat.revolt.components.screens.settings.SelfUserOverview
import chat.revolt.persistence.KVStorage
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.runBlocking
import javax.inject.Inject
@HiltViewModel
class SettingsScreenViewModel @Inject constructor(
private val kvStorage: KVStorage
) : ViewModel() {
fun logout() {
runBlocking {
kvStorage.remove("sessionToken")
GlobalState.reset()
RevoltAPI.logout()
}
}
}
@Composable @Composable
fun SettingsScreen( fun SettingsScreen(
navController: NavController navController: NavController,
viewModel: SettingsScreenViewModel = hiltViewModel()
) { ) {
val context = LocalContext.current val context = LocalContext.current
@ -233,13 +254,12 @@ fun SettingsScreen(
dangerous = true, dangerous = true,
modifier = Modifier.testTag("settings_view_logout") modifier = Modifier.testTag("settings_view_logout")
) { ) {
Toast viewModel.logout()
.makeText( navController.navigate("login/greeting") {
navController.context, popUpTo("chat") {
"Not implemented yet", inclusive = true
Toast.LENGTH_SHORT }
) }
.show()
} }
} }
} }