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
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.fillMaxSize
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
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.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
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.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
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(
modifier = Modifier.safeDrawingPadding()
) {
PageHeader(text = stringResource(id = R.string.home))
LinkOnHome(
heading = stringResource(id = R.string.logout),
icon = Icons.Default.Close,
onClick = {
viewModel.logout()
navController.navigate("login/greeting") {
popUpTo("chat") {
inclusive = true
}
}
},
modifier = Modifier.testTag("logout_from_home")
)
Box(
modifier = Modifier
.weight(1f)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Text(
text = "🐈",
fontSize = 100.sp,
modifier = Modifier.rotate(catRotation),
)
}
}
}

View File

@ -2,7 +2,6 @@ package chat.revolt.screens.settings
import android.content.Intent
import android.net.Uri
import android.widget.Toast
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
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.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.NavController
import chat.revolt.BuildConfig
import chat.revolt.R
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.SheetClickable
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
fun SettingsScreen(
navController: NavController
navController: NavController,
viewModel: SettingsScreenViewModel = hiltViewModel()
) {
val context = LocalContext.current
@ -233,13 +254,12 @@ fun SettingsScreen(
dangerous = true,
modifier = Modifier.testTag("settings_view_logout")
) {
Toast
.makeText(
navController.context,
"Not implemented yet",
Toast.LENGTH_SHORT
)
.show()
viewModel.logout()
navController.navigate("login/greeting") {
popUpTo("chat") {
inclusive = true
}
}
}
}
}