Skip to content

Commit

Permalink
Refactor navigation (#19)
Browse files Browse the repository at this point in the history
* Minor fix

* Refactor navigation

* Minor refactoring

* Lint fix

* Fix test

* Minor fix
  • Loading branch information
cp-radhika-s authored Feb 9, 2024
1 parent a169455 commit 8dadcb5
Show file tree
Hide file tree
Showing 30 changed files with 243 additions and 238 deletions.
27 changes: 26 additions & 1 deletion app/src/main/java/com/canopas/catchme/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@ import com.canopas.catchme.ui.flow.auth.phone.EXTRA_RESULT_IS_NEW_USER
import com.canopas.catchme.ui.flow.auth.phone.SignInWithPhoneScreen
import com.canopas.catchme.ui.flow.auth.verification.PhoneVerificationScreen
import com.canopas.catchme.ui.flow.home.home.HomeScreen
import com.canopas.catchme.ui.flow.home.space.create.CreateSpaceHomeScreen
import com.canopas.catchme.ui.flow.home.space.create.SpaceInvite
import com.canopas.catchme.ui.flow.home.space.join.JoinSpaceScreen
import com.canopas.catchme.ui.flow.intro.IntroScreen
import com.canopas.catchme.ui.flow.onboard.OnboardScreen
import com.canopas.catchme.ui.flow.permission.EnablePermissionsScreen
import com.canopas.catchme.ui.flow.settings.SettingsScreen
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.AppNavigator
import com.canopas.catchme.ui.navigation.KEY_RESULT
Expand Down Expand Up @@ -55,7 +60,7 @@ fun MainApp() {

AppNavigator(navController = navController, viewModel.navActions)

NavHost(navController = navController, startDestination = AppDestinations.intro.path) {
NavHost(navController = navController, startDestination = AppDestinations.home.path) {
slideComposable(AppDestinations.intro.path) {
IntroScreen()
}
Expand Down Expand Up @@ -96,5 +101,25 @@ fun MainApp() {
slideComposable(AppDestinations.home.path) {
HomeScreen()
}

slideComposable(AppDestinations.createSpace.path) {
CreateSpaceHomeScreen()
}

slideComposable(AppDestinations.joinSpace.path) {
JoinSpaceScreen()
}

slideComposable(AppDestinations.SpaceInvitation.path) {
SpaceInvite()
}

slideComposable(AppDestinations.enablePermissions.path) {
EnablePermissionsScreen()
}

slideComposable(AppDestinations.settings.path) {
SettingsScreen()
}
}
}
35 changes: 32 additions & 3 deletions app/src/main/java/com/canopas/catchme/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,45 @@
package com.canopas.catchme.ui

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.canopas.catchme.data.storage.UserPreferences
import com.canopas.catchme.ui.navigation.MainNavigator
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.AppNavigator
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class MainViewModel @Inject constructor(
private val userPreferences: UserPreferences,
appNavigator: MainNavigator
navigator: AppNavigator
) : ViewModel() {

val navActions = appNavigator.navigationChannel
val navActions = navigator.navigationChannel

init {
viewModelScope.launch {
if (userPreferences.isIntroShown()) {
if (userPreferences.currentUser == null) {
navigator.navigateTo(
AppDestinations.signIn.path,
popUpToRoute = AppDestinations.intro.path,
inclusive = true
)
} else if (!userPreferences.isOnboardShown()) {
navigator.navigateTo(
AppDestinations.onboard.path,
popUpToRoute = AppDestinations.intro.path,
inclusive = true
)
} else {
navigator.navigateTo(
AppDestinations.home.path,
popUpToRoute = AppDestinations.intro.path,
inclusive = true
)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.canopas.catchme.data.service.auth.FirebaseAuthService
import com.canopas.catchme.data.storage.UserPreferences
import com.canopas.catchme.data.utils.AppDispatcher
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.MainNavigator
import com.canopas.catchme.ui.navigation.AppNavigator
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -18,7 +18,7 @@ import javax.inject.Inject

@HiltViewModel
class SignInMethodViewModel @Inject constructor(
private val navigator: MainNavigator,
private val navigator: AppNavigator,
private val firebaseAuth: FirebaseAuthService,
private val authService: AuthService,
private val appDispatcher: AppDispatcher,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import com.canopas.catchme.data.service.auth.PhoneAuthState
import com.canopas.catchme.data.utils.AppDispatcher
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.AppDestinations.OtpVerificationNavigation
import com.canopas.catchme.ui.navigation.AppNavigator
import com.canopas.catchme.ui.navigation.KEY_RESULT
import com.canopas.catchme.ui.navigation.MainNavigator
import com.canopas.catchme.ui.navigation.RESULT_OKAY
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -21,7 +21,7 @@ import javax.inject.Inject

@HiltViewModel
class SignInWithPhoneViewModel @Inject constructor(
private val appNavigator: MainNavigator,
private val appNavigator: AppNavigator,
private val fbAuthService: FirebaseAuthService,
private val authService: AuthService,
private val dispatcher: AppDispatcher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import com.canopas.catchme.ui.flow.auth.phone.EXTRA_RESULT_IS_NEW_USER
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.AppDestinations.OtpVerificationNavigation.KEY_PHONE_NO
import com.canopas.catchme.ui.navigation.AppDestinations.OtpVerificationNavigation.KEY_VERIFICATION_ID
import com.canopas.catchme.ui.navigation.AppNavigator
import com.canopas.catchme.ui.navigation.KEY_RESULT
import com.canopas.catchme.ui.navigation.MainNavigator
import com.canopas.catchme.ui.navigation.RESULT_OKAY
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -25,7 +25,7 @@ import javax.inject.Inject
@HiltViewModel
class PhoneVerificationViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val appNavigator: MainNavigator,
private val appNavigator: AppNavigator,
private val firebaseAuth: FirebaseAuthService,
private val authService: AuthService,
private val dispatcher: AppDispatcher
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.canopas.catchme.ui.flow.home.home

import androidx.annotation.DrawableRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
Expand All @@ -23,10 +20,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
Expand All @@ -40,7 +34,6 @@ import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.canopas.catchme.R
import com.canopas.catchme.data.utils.isBackgroundLocationPermissionGranted
Expand All @@ -50,14 +43,7 @@ import com.canopas.catchme.ui.flow.home.home.component.SpaceSelectionMenu
import com.canopas.catchme.ui.flow.home.home.component.SpaceSelectionPopup
import com.canopas.catchme.ui.flow.home.map.MapScreen
import com.canopas.catchme.ui.flow.home.places.PlacesScreen
import com.canopas.catchme.ui.flow.home.space.create.CreateSpaceHomeScreen
import com.canopas.catchme.ui.flow.home.space.create.SpaceInvite
import com.canopas.catchme.ui.flow.home.space.join.JoinSpaceScreen
import com.canopas.catchme.ui.flow.permission.EnablePermissionsScreen
import com.canopas.catchme.ui.flow.settings.SettingsScreen
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.AppNavigator
import com.canopas.catchme.ui.navigation.slideComposable
import com.canopas.catchme.ui.navigation.tabComposable
import com.canopas.catchme.ui.theme.AppTheme

Expand All @@ -73,21 +59,6 @@ fun HomeScreen() {
}
}

AppNavigator(navController = navController, viewModel.navActions)
val navBackStackEntry by navController.currentBackStackEntryAsState()

val showTopBar by remember {
derivedStateOf {
showSpaceTopBarOn.contains(navBackStackEntry?.destination?.route)
}
}

val hideBottomBar by remember {
derivedStateOf {
hideBottomBarOn.contains(navBackStackEntry?.destination?.route)
}
}

Scaffold(
containerColor = AppTheme.colorScheme.surface,
content = {
Expand All @@ -97,24 +68,18 @@ fun HomeScreen() {
) {
HomeScreenContent(navController)

AnimatedVisibility(
visible = showTopBar,
enter = slideInVertically { -it },
exit = slideOutVertically { -it }
) {
HomeTopBar()
}
HomeTopBar()
}
}
/* bottomBar = {
AnimatedVisibility(
visible = !hideBottomBar,
enter = slideInVertically(tween(100)) { it },
exit = slideOutVertically(tween(100)) { it }
) {
HomeBottomBar(navController)
}
}*/
/* bottomBar = {
AnimatedVisibility(
visible = !hideBottomBar,
enter = slideInVertically(tween(100)) { it },
exit = slideOutVertically(tween(100)) { it }
) {
HomeBottomBar(navController)
}
}*/
)
}

Expand Down Expand Up @@ -224,26 +189,6 @@ fun HomeScreenContent(navController: NavHostController) {
tabComposable(AppDestinations.activity.path) {
ActivityScreen()
}

slideComposable(AppDestinations.createSpace.path) {
CreateSpaceHomeScreen()
}

slideComposable(AppDestinations.joinSpace.path) {
JoinSpaceScreen()
}

slideComposable(AppDestinations.SpaceInvitation.path) {
SpaceInvite()
}

slideComposable(AppDestinations.enablePermissions.path) {
EnablePermissionsScreen()
}

slideComposable(AppDestinations.settings.path) {
SettingsScreen()
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import com.canopas.catchme.data.service.location.LocationManager
import com.canopas.catchme.data.storage.UserPreferences
import com.canopas.catchme.data.utils.AppDispatcher
import com.canopas.catchme.ui.navigation.AppDestinations
import com.canopas.catchme.ui.navigation.HomeNavigator
import com.canopas.catchme.ui.navigation.MainNavigator
import com.canopas.catchme.ui.navigation.AppNavigator
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand All @@ -21,8 +20,7 @@ import javax.inject.Inject

@HiltViewModel
class HomeScreenViewModel @Inject constructor(
private val navigator: HomeNavigator,
private val mainNavigator: MainNavigator,
private val navigator: AppNavigator,
private val locationManager: LocationManager,
private val spaceRepository: SpaceRepository,
private val userPreferences: UserPreferences,
Expand All @@ -36,15 +34,17 @@ class HomeScreenViewModel @Inject constructor(
val state: StateFlow<HomeScreenState> = _state

init {
updateUser()
getAllSpaces()
if (userPreferences.currentUser != null) {
updateUser()
getAllSpaces()
}
}

private fun updateUser() = viewModelScope.launch(appDispatcher.IO) {
val user = authService.getUser()
if (user == null) {
authService.signOut()
mainNavigator.navigateTo(
navigator.navigateTo(
AppDestinations.signIn.path,
AppDestinations.home.path,
true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,26 +148,14 @@ fun MapScreenContent(modifier: Modifier) {
}
}

LaunchedEffect(userLocation, state.selectedUser) {
if (state.selectedUser != null) {
val location = state.selectedUser?.location
if (location != null) {
val latLng = LatLng(location.latitude, location.longitude)
cameraPositionState.animate(
CameraUpdateFactory.newLatLngZoom(
latLng,
DEFAULT_CAMERA_ZOOM_FOR_SELECTED_USER
)
)
}
} else {
cameraPositionState.animate(
CameraUpdateFactory.newLatLngZoom(
userLocation,
DEFAULT_CAMERA_ZOOM
)
LaunchedEffect(userLocation) {
val location = state.selectedUser?.location
cameraPositionState.animate(
CameraUpdateFactory.newLatLngZoom(
userLocation,
if (location != null) DEFAULT_CAMERA_ZOOM_FOR_SELECTED_USER else DEFAULT_CAMERA_ZOOM
)
}
)
}

Box(modifier = modifier.fillMaxSize()) {
Expand Down
Loading

0 comments on commit 8dadcb5

Please sign in to comment.