Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/version 1.0.0.alpha.5 #1002

Merged
merged 6 commits into from
Jul 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ object CartOrderTestTags {

const val CART_ORDER_NAME_EMPTY_ERROR = "Address name must not be empty."
const val ADDRESS_NAME_LENGTH_ERROR = "The address name must be more than 6 characters long."
const val ADDRESS_NAME_INVALID = "Please enter a valid address. for example: AB Complex"
const val CART_ORDER_NAME_ERROR = "Unable to create or get address."

const val ORDER_SHORT_NAME_EMPTY_ERROR = "Address short name cannot be empty."
Expand Down
14 changes: 10 additions & 4 deletions core/common/src/main/java/com/niyaj/common/utils/Extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,15 +107,21 @@ fun getAllCapitalizedLetters(string: String): String {
}

fun String.getCapitalWord(): String {
var capitalizeLetters = ""
val capitalizedString = this.capitalizeWords
var result = ""

if (!capitalizedString.contains(" ")) {
// If it's a single word, return the first two characters
return capitalizedString.take(2)
}

this.capitalizeWords.forEach {
capitalizedString.forEach {
if (it.isUpperCase()) {
capitalizeLetters += it.toString()
result += it.toString()
}
}

return capitalizeLetters
return result
}

val zoneId: ZoneId = ZoneId.of("Asia/Kolkata")
Expand Down
Loading
Loading