Skip to content

Commit

Permalink
Feat: Bug Fix & Enhancement
Browse files Browse the repository at this point in the history
- Close #999
- Close #982
  • Loading branch information
niyajali committed Jul 30, 2024
1 parent f639088 commit 9609e20
Show file tree
Hide file tree
Showing 19 changed files with 6,856 additions and 375 deletions.
31 changes: 2 additions & 29 deletions app/src/main/java/com/niyaj/poposroom/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,6 @@ import com.niyaj.common.utils.openAppSettings
import com.niyaj.common.utils.showToast
import com.niyaj.core.analytics.AnalyticsHelper
import com.niyaj.core.analytics.LocalAnalyticsHelper
import com.niyaj.data.repository.UserDataRepository
import com.niyaj.data.utils.NetworkMonitor
import com.niyaj.data.utils.WorkMonitor
import com.niyaj.designsystem.icon.PoposIcons
import com.niyaj.designsystem.theme.PoposRoomTheme
import com.niyaj.home.HomeNavGraph
Expand All @@ -81,18 +78,9 @@ class MainActivity : ComponentActivity() {
@Inject
lateinit var lazyStats: dagger.Lazy<JankStats>

@Inject
lateinit var networkMonitor: NetworkMonitor

@Inject
lateinit var workMonitor: WorkMonitor

@Inject
lateinit var analyticsHelper: AnalyticsHelper

@Inject
lateinit var userDataRepository: UserDataRepository

private val viewModel: MainActivityViewModel by viewModels()

@OptIn(ExperimentalMaterialNavigationApi::class)
Expand All @@ -101,7 +89,6 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)

var uiState: MainActivityUiState by mutableStateOf(MainActivityUiState.Loading)

// Update the uiState
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
Expand All @@ -110,13 +97,6 @@ class MainActivity : ComponentActivity() {
.collect()
}
}
// TOOD:: Removed Splash Screen Condition Check
// splashScreen.setKeepOnScreenCondition {
// when (uiState) {
// MainActivityUiState.Loading -> true
// is MainActivityUiState.Success -> false
// }
// }

WindowCompat.setDecorFitsSystemWindows(window, false)

Expand Down Expand Up @@ -149,23 +129,16 @@ class MainActivity : ComponentActivity() {
onDispose {}
}

val appState = rememberPoposAppState(
networkMonitor = networkMonitor,
workMonitor = workMonitor,
userDataRepository = userDataRepository,
)

CompositionLocalProvider(LocalAnalyticsHelper provides analyticsHelper) {
PoposRoomTheme(
darkTheme = darkTheme,
androidTheme = shouldUseAndroidTheme(uiState),
disableDynamicTheming = shouldDisableDynamicTheming(uiState),
) {
RequestAllPermissions()
// TODO:: By Default Providing HomeNavGraph for this release

PoposApp(
appState = appState,
// if (isLoggedIn) HomeNavGraph else AccountNavGraph
appState = rememberPoposAppState(),
startRoute = HomeNavGraph,
)
}
Expand Down
23 changes: 0 additions & 23 deletions app/src/main/java/com/niyaj/poposroom/ui/PoposApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

package com.niyaj.poposroom.ui

import android.annotation.SuppressLint
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
Expand All @@ -29,22 +28,16 @@ import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.niyaj.designsystem.components.PoposBackground
import com.niyaj.poposroom.navigation.PoposNavHost
import com.ramcosta.composedestinations.spec.Route

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun PoposApp(
Expand All @@ -53,29 +46,13 @@ fun PoposApp(
startRoute: Route,
) {
PoposBackground(modifier) {
val snackbarHostState = remember { SnackbarHostState() }

val reportState = appState.reportState.collectAsStateWithLifecycle().value
val deleteState = appState.deleteState.collectAsStateWithLifecycle().value

LaunchedEffect(key1 = deleteState, key2 = reportState) {
if (deleteState) {
snackbarHostState.showSnackbar("Data Deletion Running")
}

if (reportState) {
snackbarHostState.showSnackbar("Generating Reports")
}
}

Scaffold(
modifier = Modifier.semantics {
testTagsAsResourceId = true
},
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
contentWindowInsets = WindowInsets(0, 0, 0, 0),
snackbarHost = { SnackbarHost(snackbarHostState) },
) { padding ->
Box(
Modifier
Expand Down
87 changes: 2 additions & 85 deletions app/src/main/java/com/niyaj/poposroom/ui/PoposAppState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,29 +22,17 @@ import androidx.compose.runtime.Stable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.navigation.NavController
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navOptions
import androidx.tracing.trace
import com.google.accompanist.navigation.material.BottomSheetNavigator
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.google.accompanist.navigation.material.rememberBottomSheetNavigator
import com.niyaj.data.repository.UserDataRepository
import com.niyaj.data.utils.NetworkMonitor
import com.niyaj.data.utils.WorkMonitor
import com.niyaj.ui.utils.TrackDisposableJank
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn

@OptIn(ExperimentalMaterialNavigationApi::class)
@Composable
fun rememberPoposAppState(
networkMonitor: NetworkMonitor,
userDataRepository: UserDataRepository,
workMonitor: WorkMonitor,
coroutineScope: CoroutineScope = rememberCoroutineScope(),
navController: NavHostController = rememberNavController(),
bottomSheetNavigator: BottomSheetNavigator = rememberBottomSheetNavigator(),
Expand All @@ -54,93 +42,22 @@ fun rememberPoposAppState(
navController,
bottomSheetNavigator,
coroutineScope,
networkMonitor,
workMonitor,
userDataRepository,
) {
PoposAppState(
navController,
bottomSheetNavigator,
coroutineScope,
networkMonitor,
workMonitor,
userDataRepository,
)
}
}

@Stable
class PoposAppState
@OptIn(ExperimentalMaterialNavigationApi::class)
constructor(
class PoposAppState(
val navController: NavHostController,
val bottomSheetNavigator: BottomSheetNavigator,
coroutineScope: CoroutineScope,
networkMonitor: NetworkMonitor,
workMonitor: WorkMonitor,
userDataRepository: UserDataRepository,
) {
val isOffline = networkMonitor.isOnline
.map(Boolean::not)
.stateIn(
scope = coroutineScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = false,
)

val isLoggedIn = userDataRepository
.isUserLoggedIn
.stateIn(
scope = coroutineScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = false,
)

val reportState = workMonitor.isGeneratingReport.stateIn(
coroutineScope,
SharingStarted.WhileSubscribed(5_000),
false,
)

val deleteState = workMonitor.isDeletingData.stateIn(
coroutineScope,
SharingStarted.WhileSubscribed(5_000),
false,
)

val printingError = workMonitor.printingError.stateIn(
coroutineScope,
SharingStarted.Eagerly,
null,
)

/**
* UI logic for navigating to a top level destination in the app. Top level destinations have
* only one copy of the destination of the back stack, and save and restore state whenever you
* navigate to and from it.
*
* @param topLevelRoute: The destination the app needs to navigate to.
*/
fun navigateToTopLevelDestination(topLevelRoute: String) {
trace("Navigation: $topLevelRoute") {
val topLevelNavOptions = navOptions {
// Pop up to the start destination of the graph to
// avoid building up a large stack of destinations
// on the back stack as users select items
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
// Avoid multiple copies of the same destination when
// reselecting the same item
launchSingleTop = true
// Restore state when reselecting a previously selected item
restoreState = true
}

navController.navigate(topLevelRoute, topLevelNavOptions)
}
}
}
)

/**
* Stores information about navigation events to be used with JankStats
Expand Down
Loading

0 comments on commit 9609e20

Please sign in to comment.