Skip to content

Commit

Permalink
feat: add a option for logout
Browse files Browse the repository at this point in the history
  • Loading branch information
Yash-Garg committed Dec 12, 2022
1 parent 3806202 commit ce2ebc2
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 8 deletions.
7 changes: 6 additions & 1 deletion app/src/main/kotlin/dev/yash/keymanager/ui/KeyManagerApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,12 @@ fun KeyManagerApp() {
}
composable(NavDestinations.HomeScreen.route) {
val homeViewModel = hiltViewModel<HomeViewModel>()
HomeScreen(viewModel = homeViewModel)
HomeScreen(
viewModel = homeViewModel,
onLogoutNavigate = {
navController.navigate(NavDestinations.AuthScreen.route) { popUpTo(0) }
}
)
}
}
}
Expand Down
45 changes: 38 additions & 7 deletions app/src/main/kotlin/dev/yash/keymanager/ui/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.twotone.ExitToApp
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FabPosition
import androidx.compose.material3.FloatingActionButton
Expand All @@ -14,6 +15,7 @@ import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
Expand All @@ -33,17 +35,19 @@ import dev.yash.keymanager.R
import dev.yash.keymanager.data.models.GpgKey
import dev.yash.keymanager.data.models.NavDestinations
import dev.yash.keymanager.data.models.SshKey
import kotlinx.coroutines.runBlocking

@OptIn(ExperimentalMaterial3Api::class)
@Suppress("UNCHECKED_CAST")
@Composable
fun HomeScreen(
viewModel: HomeViewModel = viewModel(),
navController: NavHostController = rememberNavController()
navController: NavHostController = rememberNavController(),
onLogoutNavigate: () -> Unit,
) {
val sshKeys = viewModel.sshKeys.collectAsLazyPagingItems() as LazyPagingItems<SshKey>
val gpgKeys = viewModel.gpgKeys.collectAsLazyPagingItems() as LazyPagingItems<GpgKey>
val openAddDialog = remember { mutableStateOf(false) }
val openLogoutDialog = remember { mutableStateOf(false) }

Scaffold(
topBar = {
Expand All @@ -57,15 +61,15 @@ fun HomeScreen(
},
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
actions = {
IconButton(onClick = { /*TODO*/}) { Icon(Icons.TwoTone.ExitToApp, null) }
IconButton(onClick = { openLogoutDialog.value = true }) {
Icon(Icons.TwoTone.ExitToApp, null)
}
}
)
},
bottomBar = { HomeBottomBar(navController = navController) },
floatingActionButton = {
FloatingActionButton(onClick = { openAddDialog.value = true }) {
Icon(Icons.Filled.Add, null)
}
FloatingActionButton(onClick = {}) { Icon(Icons.Filled.Add, null) }
},
floatingActionButtonPosition = FabPosition.End
) {
Expand All @@ -75,6 +79,33 @@ fun HomeScreen(
sshKeys = sshKeys,
gpgKeys = gpgKeys
)

if (openLogoutDialog.value) {
AlertDialog(
onDismissRequest = { openLogoutDialog.value = false },
title = {
Text(
text = "Are you sure you want to logout?",
fontWeight = FontWeight.SemiBold
)
},
text = { Text(text = "This will delete the stored access token.") },
confirmButton = {
TextButton(
onClick = {
runBlocking { viewModel.logout() }
onLogoutNavigate()
openLogoutDialog.value = false
}
) {
Text("Confirm")
}
},
dismissButton = {
TextButton(onClick = { openLogoutDialog.value = false }) { Text("Dismiss") }
}
)
}
}
}

Expand All @@ -90,7 +121,7 @@ fun HomeBottomBar(navController: NavHostController) {
selected = selectedTab == index,
onClick = {
selectedTab = index
navController.navigate(item.route)
navController.navigate(item.route) { popUpTo(0) }
},
icon = { Icon(requireNotNull(item.icon), null) }
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package dev.yash.keymanager.ui.home

import android.content.SharedPreferences
import androidx.lifecycle.ViewModel
import androidx.paging.Pager
import androidx.paging.PagingConfig
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.yash.keymanager.data.api.GithubRepository
import dev.yash.keymanager.data.utils.AuthConfig
import dev.yash.keymanager.paging.GithubPagingSource
import javax.inject.Inject

Expand All @@ -13,6 +15,7 @@ class HomeViewModel
@Inject
constructor(
private val repository: GithubRepository,
private val preferences: SharedPreferences,
private val pagingSourceFactory: GithubPagingSource.Factory
) : ViewModel() {
private val sshKeysPager =
Expand All @@ -26,4 +29,6 @@ constructor(

val gpgKeys
get() = gpgKeysPager.flow

fun logout() = preferences.edit().remove(AuthConfig.TOKEN_KEY).apply()
}

0 comments on commit ce2ebc2

Please sign in to comment.