From 6f71055ff3aed725f3959346be717e179c96937d Mon Sep 17 00:00:00 2001 From: quantavil Date: Thu, 5 Mar 2026 10:52:17 +0530 Subject: [PATCH 1/6] feat: Implement `MainActivity` with Jetpack Compose Navigation spring animation --- .../main/java/dev/pranav/reef/MainActivity.kt | 46 ++++++++++++------- gradle.properties | 1 + 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Reef/src/main/java/dev/pranav/reef/MainActivity.kt b/Reef/src/main/java/dev/pranav/reef/MainActivity.kt index 1c27085..404d9a3 100644 --- a/Reef/src/main/java/dev/pranav/reef/MainActivity.kt +++ b/Reef/src/main/java/dev/pranav/reef/MainActivity.kt @@ -13,6 +13,8 @@ import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.* +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -249,31 +251,43 @@ class MainActivity: ComponentActivity() { ) ), enterTransition = { - fadeIn(animationSpec = tween(250)) + - slideInHorizontally( - initialOffsetX = { it / 8 }, - animationSpec = tween(250) + fadeIn(animationSpec = tween(300)) + + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Start, + animationSpec = spring( + dampingRatio = 0.8f, + stiffness = 300f + ) ) }, exitTransition = { - fadeOut(animationSpec = tween(250)) + - slideOutHorizontally( - targetOffsetX = { -it / 8 }, - animationSpec = tween(250) + fadeOut(animationSpec = tween(300)) + + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Start, + animationSpec = spring( + dampingRatio = 0.8f, + stiffness = 300f + ) ) }, popEnterTransition = { - fadeIn(animationSpec = tween(250)) + - slideInHorizontally( - initialOffsetX = { -it / 8 }, - animationSpec = tween(250) + fadeIn(animationSpec = tween(300)) + + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.End, + animationSpec = spring( + dampingRatio = 0.8f, + stiffness = 300f + ) ) }, popExitTransition = { - fadeOut(animationSpec = tween(250)) + - slideOutHorizontally( - targetOffsetX = { it / 8 }, - animationSpec = tween(250) + fadeOut(animationSpec = tween(300)) + + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.End, + animationSpec = spring( + dampingRatio = 0.8f, + stiffness = 300f + ) ) } ) { diff --git a/gradle.properties b/gradle.properties index e297c4d..a6ae390 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,3 +25,4 @@ org.gradle.workers.max=4 org.gradle.parallel=true org.gradle.caching=true org.gradle.configureondemand=true +org.gradle.java.home=/usr/lib/jvm/java-17-openjdk From 6f553d67a17d93915a57e6e719e09a68a3ef5870 Mon Sep 17 00:00:00 2001 From: quantavil Date: Thu, 5 Mar 2026 11:34:00 +0530 Subject: [PATCH 2/6] refactor: Standardize TopAppBar to use pinned scroll behavior and the generic TopAppBar component across screens. --- .../main/java/dev/pranav/reef/MainScreen.kt | 7 +- .../reef/screens/CreateRoutineScreen.kt | 4 +- .../screens/NotificationSettingsScreen.kt | 4 +- .../reef/screens/PomodoroSettingsScreen.kt | 4 +- .../dev/pranav/reef/screens/RoutinesScreen.kt | 15 +-- .../dev/pranav/reef/screens/ScreenWrappers.kt | 4 +- .../dev/pranav/reef/screens/SettingsScreen.kt | 9 +- .../java/dev/pranav/reef/timer/TimerScreen.kt | 79 ++++++-------- .../dev/pranav/reef/ui/about/AboutScreen.kt | 4 +- .../ui/focusstats/FocusSessionDetailScreen.kt | 4 +- .../reef/ui/focusstats/FocusStatsScreen.kt | 4 +- .../reef/ui/whitelist/WhitelistScreen.kt | 101 +++++++++--------- 12 files changed, 113 insertions(+), 126 deletions(-) diff --git a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt index 5349903..3bc7c3a 100644 --- a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt @@ -60,7 +60,7 @@ fun HomeContent( var showDiscordDialog by remember { mutableStateOf(false) } var showDonateDialog by remember { mutableStateOf(false) } - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior( rememberTopAppBarState() ) @@ -81,7 +81,7 @@ fun HomeContent( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - MediumTopAppBar( + TopAppBar( title = { Row( horizontalArrangement = Arrangement.spacedBy(12.dp) @@ -120,12 +120,11 @@ fun HomeContent( Column( modifier = Modifier .fillMaxSize() - .verticalScroll(rememberScrollState()) .padding(paddingValues) + .verticalScroll(rememberScrollState()) .padding(horizontal = 16.dp), horizontalAlignment = Alignment.CenterHorizontally ) { - Spacer(Modifier.height(8.dp)) FocusModeCard( diff --git a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt index 75d82f0..8e66076 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt @@ -54,7 +54,7 @@ fun CreateRoutineScreen( ) { val context = LocalContext.current val scope = rememberCoroutineScope() - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() val snackbarHostState = remember { SnackbarHostState() } var currentRoutine by remember { mutableStateOf(null) } @@ -92,7 +92,7 @@ fun CreateRoutineScreen( contentWindowInsets = WindowInsets(0), snackbarHost = { SnackbarHost(snackbarHostState) }, topBar = { - LargeTopAppBar( + TopAppBar( title = { Text( if (currentRoutine != null) stringResource(R.string.edit_routine) diff --git a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt index c33c773..5502abb 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt @@ -36,11 +36,11 @@ fun NotificationSettingsContent( var dailySummary by remember { mutableStateOf(prefs.getBoolean("daily_summary", false)) } var limitWarnings by remember { mutableStateOf(prefs.getBoolean("limit_warnings", true)) } - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( topBar = { - LargeTopAppBar( + TopAppBar( title = { Text(stringResource(R.string.notifications_settings_title)) }, navigationIcon = { IconButton(onClick = onBackPressed) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt index c21acf1..396c00a 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt @@ -118,11 +118,11 @@ fun PomodoroSettingsContent( ) ) - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( topBar = { - LargeTopAppBar( + TopAppBar( title = { Text(stringResource(R.string.pomodoro_settings_title)) }, navigationIcon = { IconButton(onClick = onBackPressed) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt index 956bdd6..2a2d3c1 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt @@ -60,13 +60,13 @@ fun RoutinesScreen( } val scrollBehavior = - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - LargeTopAppBar( + TopAppBar( title = { Text(stringResource(R.string.routines)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior, @@ -90,10 +90,13 @@ fun RoutinesScreen( snackbarHost = { SnackbarHost(snackbarHostState) } ) { paddingValues -> LazyColumn( - modifier = Modifier - .fillMaxSize() - .padding(paddingValues), - contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp), + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues( + start = 16.dp, + end = 16.dp, + top = paddingValues.calculateTopPadding() + 8.dp, + bottom = paddingValues.calculateBottomPadding() + 8.dp + ), verticalArrangement = Arrangement.spacedBy(16.dp) ) { item { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt index dbbd75b..499f3ff 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt @@ -49,13 +49,13 @@ fun UsageScreenWrapper( ) val scrollBehavior = - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - LargeTopAppBar( + TopAppBar( title = { Text(stringResource(R.string.app_usage)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior diff --git a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt index 93d10e8..ab555be 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt @@ -18,12 +18,7 @@ fun SettingsContent( ) { var currentScreen by remember { mutableStateOf(SettingsScreenRoute.Main) } val scrollBehavior = - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) - - LaunchedEffect(currentScreen) { - scrollBehavior.state.heightOffset = 0f - scrollBehavior.state.contentOffset = 0f - } + TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), @@ -34,7 +29,7 @@ fun SettingsContent( enter = fadeIn(), exit = fadeOut() ) { - LargeTopAppBar( + TopAppBar( title = { Text(stringResource(R.string.settings)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior diff --git a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt index a241508..e4649fa 100644 --- a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt @@ -1,6 +1,7 @@ package dev.pranav.reef.timer import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.animateContentSize import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -63,47 +64,39 @@ fun TimerContent( val showRunningView = isTimerRunning || isPaused var selectedMode by remember { mutableIntStateOf(0) } - val setupScrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState()) - val runningScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) - - val scrollBehavior = if (showRunningView) runningScrollBehavior else setupScrollBehavior + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - - LargeTopAppBar( - title = { - Column( - verticalArrangement = Arrangement.spacedBy(16.dp), - ) { - Text( - stringResource(R.string.focus_mode_title) - ) - - if (!showRunningView) { - FocusModeGroup( - selectedMode = selectedMode, - onSelectionChange = { selectedMode = it }) - - Spacer(modifier = Modifier.height(8.dp)) + Column(modifier = Modifier.animateContentSize()) { + TopAppBar( + title = { + Text(stringResource(R.string.focus_mode_title)) + }, + actions = { + IconButton(onClick = { navController.navigate(Screen.FocusStats) }) { + Icon( + Icons.Outlined.BarChart, + contentDescription = "Focus Stats" + ) } - } - }, - actions = { - IconButton(onClick = { navController.navigate(Screen.FocusStats) }) { - Icon( - Icons.Outlined.BarChart, - contentDescription = "Focus Stats" - ) - } - }, - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.Transparent - ), - scrollBehavior = scrollBehavior - ) + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent + ), + scrollBehavior = scrollBehavior + ) + + if (!showRunningView) { + FocusModeGroup( + selectedMode = selectedMode, + onSelectionChange = { selectedMode = it } + ) + Spacer(modifier = Modifier.height(8.dp)) + } + } } ) { paddingValues -> Box( @@ -130,15 +123,13 @@ fun TimerContent( .verticalScroll(rememberScrollState()) .padding(horizontal = 24.dp) ) { - Column(modifier = Modifier.fillMaxWidth()) { - Spacer(modifier = Modifier.height(24.dp)) - - Box(modifier = Modifier.fillMaxWidth()) { - if (selectedMode == 0) { - SimpleFocusSetup(onStartTimer) - } else { - PomodoroFocusSetup(onStartTimer) - } + Spacer(modifier = Modifier.height(16.dp)) + + Box(modifier = Modifier.fillMaxWidth()) { + if (selectedMode == 0) { + SimpleFocusSetup(onStartTimer) + } else { + PomodoroFocusSetup(onStartTimer) } } } diff --git a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt index 44514a3..0a20248 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt @@ -39,12 +39,12 @@ fun AboutScreen( onBackPressed: () -> Unit ) { val scrollState = rememberScrollState() - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - LargeTopAppBar( + TopAppBar( title = { Text( stringResource(R.string.about), diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt index 6c3dfe0..9b43a45 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt @@ -61,12 +61,12 @@ fun FocusSessionDetailScreen(sessionId: String, onBackPressed: () -> Unit) { return } - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( contentWindowInsets = WindowInsets(0), topBar = { - LargeTopAppBar( + TopAppBar( title = { Text( "Session Detail", diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt index d47f48c..f59b487 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt @@ -129,7 +129,7 @@ fun FocusStatsScreen( }" } - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior( rememberTopAppBarState() ) @@ -137,7 +137,7 @@ fun FocusStatsScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - LargeTopAppBar( + TopAppBar( title = { Text( "Focus Stats", diff --git a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt index d16a3dd..00deea2 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt @@ -54,65 +54,64 @@ fun WhitelistScreen( onToggle: (WhitelistedApp) -> Unit, ) { val scrollBehavior = - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - LargeTopAppBar( - title = { - Column( - modifier = Modifier.padding(bottom = 12.dp), - verticalArrangement = Arrangement.spacedBy(16.dp) - ) { + Column { + TopAppBar( + title = { Text(stringResource(R.string.whitelist_apps_title)) - - OutlinedTextField( - value = searchQuery, - onValueChange = onSearchQueryChange, - modifier = Modifier.fillMaxWidth(), - placeholder = { - Text( - "Search apps...", - style = MaterialTheme.typography.bodyLarge - ) - }, - leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) }, - trailingIcon = { - if (searchQuery.isNotEmpty()) { - IconButton(onClick = { onSearchQueryChange("") }) { - Icon( - Icons.Default.Close, - contentDescription = "Clear search" - ) - } - } - }, - shape = RoundedCornerShape(28.dp), - singleLine = true, - textStyle = MaterialTheme.typography.bodyLarge, - colors = OutlinedTextFieldDefaults.colors( - focusedContainerColor = Color.Transparent, - unfocusedContainerColor = Color.Transparent, + }, + navigationIcon = { + IconButton(onClick = { onBackPress() }) { + Icon( + Icons.AutoMirrored.Rounded.ArrowBack, + contentDescription = stringResource(R.string.back) ) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + scrolledContainerColor = MaterialTheme.colorScheme.surface + ), + scrollBehavior = scrollBehavior + ) + + OutlinedTextField( + value = searchQuery, + onValueChange = onSearchQueryChange, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + placeholder = { + Text( + "Search apps...", + style = MaterialTheme.typography.bodyLarge ) - } - }, - navigationIcon = { - IconButton(onClick = { onBackPress() }) { - Icon( - Icons.AutoMirrored.Rounded.ArrowBack, - contentDescription = stringResource(R.string.back) - ) - } - }, - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.Transparent, - scrolledContainerColor = MaterialTheme.colorScheme.surface - ), - scrollBehavior = scrollBehavior - ) + }, + leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) }, + trailingIcon = { + if (searchQuery.isNotEmpty()) { + IconButton(onClick = { onSearchQueryChange("") }) { + Icon( + Icons.Default.Close, + contentDescription = "Clear search" + ) + } + } + }, + shape = RoundedCornerShape(28.dp), + singleLine = true, + textStyle = MaterialTheme.typography.bodyLarge, + colors = OutlinedTextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, + ) + ) + } } ) { paddingValues -> Box( From 25a75b03ee6a93665cbc7c54f60924a035d70f8d Mon Sep 17 00:00:00 2001 From: quantavil Date: Thu, 5 Mar 2026 11:43:02 +0530 Subject: [PATCH 3/6] fixed the home screen navigation behavior, now it properly restore to previous state --- .../main/java/dev/pranav/reef/MainActivity.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Reef/src/main/java/dev/pranav/reef/MainActivity.kt b/Reef/src/main/java/dev/pranav/reef/MainActivity.kt index 404d9a3..5f451fc 100644 --- a/Reef/src/main/java/dev/pranav/reef/MainActivity.kt +++ b/Reef/src/main/java/dev/pranav/reef/MainActivity.kt @@ -129,7 +129,7 @@ class MainActivity: ComponentActivity() { currentDestination?.hasRoute() == true -> 1 currentDestination?.hasRoute() == true -> 2 currentDestination?.hasRoute() == true -> 3 - else -> 0 + else -> -1 } } @@ -212,22 +212,25 @@ class MainActivity: ComponentActivity() { restoreState = true } when (index) { - 0 -> if (selectedNavIndex != 0) navController.navigate( - Screen.Home, - options - ) + 0 -> navController.navigate(Screen.Home) { + popUpTo(navController.graph.startDestinationId) { + saveState = true + } + launchSingleTop = true + restoreState = false + } - 1 -> if (selectedNavIndex != 1) navController.navigate( + 1 -> navController.navigate( Screen.Usage, options ) - 2 -> if (selectedNavIndex != 2) navController.navigate( + 2 -> navController.navigate( Screen.Timer, options ) - 3 -> if (selectedNavIndex != 3) navController.navigate( + 3 -> navController.navigate( Screen.Settings, options ) From 355f7f319b530f083898c1caba413e3a65fd71b7 Mon Sep 17 00:00:00 2001 From: invoke <75154889+PranavPurwar@users.noreply.github.com> Date: Thu, 5 Mar 2026 13:30:08 +0530 Subject: [PATCH 4/6] remove java home Increased the maximum heap size for the Gradle daemon from 2048m to 3072m. --- gradle.properties | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index a6ae390..1fbc403 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,10 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx3072m -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. For more details, visit # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects -# org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn @@ -21,8 +20,6 @@ kotlin.code.style=official # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true -org.gradle.workers.max=4 org.gradle.parallel=true org.gradle.caching=true org.gradle.configureondemand=true -org.gradle.java.home=/usr/lib/jvm/java-17-openjdk From a34f4b3b553bbd66923065d6dd858349bfafe28b Mon Sep 17 00:00:00 2001 From: quantavil Date: Sat, 7 Mar 2026 14:10:19 +0530 Subject: [PATCH 5/6] refactor: replace TopAppBar with MediumTopAppBar across multiple screens and add gradle.properties to gitignore. --- .gitignore | 1 + Reef/src/main/java/dev/pranav/reef/MainScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/PermissionsCheckActivity.kt | 2 +- .../main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/DailyLimitScreen.kt | 2 +- .../java/dev/pranav/reef/screens/NotificationSettingsScreen.kt | 2 +- .../main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt | 2 +- .../dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt | 2 +- .../main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt | 2 +- .../main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt | 2 +- 15 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 138b236..843be65 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ .externalNativeBuild .cxx local.properties +gradle.properties *.patch diff --git a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt index 3bc7c3a..381d35a 100644 --- a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt @@ -81,7 +81,7 @@ fun HomeContent( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - TopAppBar( + MediumTopAppBar( title = { Row( horizontalArrangement = Arrangement.spacedBy(12.dp) diff --git a/Reef/src/main/java/dev/pranav/reef/PermissionsCheckActivity.kt b/Reef/src/main/java/dev/pranav/reef/PermissionsCheckActivity.kt index 71c442d..e263afe 100644 --- a/Reef/src/main/java/dev/pranav/reef/PermissionsCheckActivity.kt +++ b/Reef/src/main/java/dev/pranav/reef/PermissionsCheckActivity.kt @@ -77,7 +77,7 @@ fun PermissionsScreen(onBackClick: () -> Unit) { Scaffold( topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.required_permissions)) }, navigationIcon = { IconButton(onClick = onBackClick) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt index 8e66076..28cfe72 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt @@ -92,7 +92,7 @@ fun CreateRoutineScreen( contentWindowInsets = WindowInsets(0), snackbarHost = { SnackbarHost(snackbarHostState) }, topBar = { - TopAppBar( + MediumTopAppBar( title = { Text( if (currentRoutine != null) stringResource(R.string.edit_routine) diff --git a/Reef/src/main/java/dev/pranav/reef/screens/DailyLimitScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/DailyLimitScreen.kt index 8f5206f..515ea86 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/DailyLimitScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/DailyLimitScreen.kt @@ -55,7 +55,7 @@ fun DailyLimitScreen( contentWindowInsets = WindowInsets(0), containerColor = MaterialTheme.colorScheme.surface, topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.daily_usage_limit)) }, navigationIcon = { IconButton(onClick = onBackPressed) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt index 5502abb..bdfb049 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt @@ -40,7 +40,7 @@ fun NotificationSettingsContent( Scaffold( topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.notifications_settings_title)) }, navigationIcon = { IconButton(onClick = onBackPressed) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt index 396c00a..6425c7c 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt @@ -122,7 +122,7 @@ fun PomodoroSettingsContent( Scaffold( topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.pomodoro_settings_title)) }, navigationIcon = { IconButton(onClick = onBackPressed) { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt index 2a2d3c1..7c3f0dd 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt @@ -66,7 +66,7 @@ fun RoutinesScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.routines)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior, diff --git a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt index 499f3ff..053b356 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt @@ -55,7 +55,7 @@ fun UsageScreenWrapper( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.app_usage)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior diff --git a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt index ab555be..8bb706b 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt @@ -29,7 +29,7 @@ fun SettingsContent( enter = fadeIn(), exit = fadeOut() ) { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.settings)) }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent), scrollBehavior = scrollBehavior diff --git a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt index e4649fa..8933ac1 100644 --- a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt @@ -71,7 +71,7 @@ fun TimerContent( contentWindowInsets = WindowInsets(0), topBar = { Column(modifier = Modifier.animateContentSize()) { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.focus_mode_title)) }, diff --git a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt index 0a20248..afde73e 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt @@ -44,7 +44,7 @@ fun AboutScreen( Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text( stringResource(R.string.about), diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt index 9b43a45..3f056f5 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt @@ -66,7 +66,7 @@ fun FocusSessionDetailScreen(sessionId: String, onBackPressed: () -> Unit) { Scaffold( contentWindowInsets = WindowInsets(0), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text( "Session Detail", diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt index f59b487..725936e 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt @@ -137,7 +137,7 @@ fun FocusStatsScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), contentWindowInsets = WindowInsets(0), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text( "Focus Stats", diff --git a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt index 00deea2..5f484cb 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt @@ -61,7 +61,7 @@ fun WhitelistScreen( contentWindowInsets = WindowInsets(0), topBar = { Column { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.whitelist_apps_title)) }, From 196358614595dafd5b59e57d7ed962fdb24f7421 Mon Sep 17 00:00:00 2001 From: quantavil Date: Sat, 7 Mar 2026 14:31:37 +0530 Subject: [PATCH 6/6] refactor: Replace `TopAppBarDefaults.pinnedScrollBehavior` with `exitUntilCollapsedScrollBehavior`because it was causing scroll jittery --- Reef/src/main/java/dev/pranav/reef/MainScreen.kt | 2 +- .../main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt | 2 +- .../java/dev/pranav/reef/screens/NotificationSettingsScreen.kt | 2 +- .../main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt | 2 +- Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt | 2 +- Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt | 2 +- .../dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt | 2 +- .../main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt | 2 +- .../main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt index 381d35a..5867230 100644 --- a/Reef/src/main/java/dev/pranav/reef/MainScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/MainScreen.kt @@ -60,7 +60,7 @@ fun HomeContent( var showDiscordDialog by remember { mutableStateOf(false) } var showDonateDialog by remember { mutableStateOf(false) } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior( + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( rememberTopAppBarState() ) diff --git a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt index 28cfe72..e2d68b8 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/CreateRoutineScreen.kt @@ -54,7 +54,7 @@ fun CreateRoutineScreen( ) { val context = LocalContext.current val scope = rememberCoroutineScope() - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() val snackbarHostState = remember { SnackbarHostState() } var currentRoutine by remember { mutableStateOf(null) } diff --git a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt index bdfb049..e4008ee 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/NotificationSettingsScreen.kt @@ -36,7 +36,7 @@ fun NotificationSettingsContent( var dailySummary by remember { mutableStateOf(prefs.getBoolean("daily_summary", false)) } var limitWarnings by remember { mutableStateOf(prefs.getBoolean("limit_warnings", true)) } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( topBar = { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt index 6425c7c..de2f7dc 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/PomodoroSettingsScreen.kt @@ -118,7 +118,7 @@ fun PomodoroSettingsContent( ) ) - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( topBar = { diff --git a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt index 7c3f0dd..8f10781 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/RoutinesScreen.kt @@ -60,7 +60,7 @@ fun RoutinesScreen( } val scrollBehavior = - TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt index 053b356..951b6e8 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/ScreenWrappers.kt @@ -49,7 +49,7 @@ fun UsageScreenWrapper( ) val scrollBehavior = - TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt index 8bb706b..854988a 100644 --- a/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/screens/SettingsScreen.kt @@ -18,7 +18,7 @@ fun SettingsContent( ) { var currentScreen by remember { mutableStateOf(SettingsScreenRoute.Main) } val scrollBehavior = - TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt index 8933ac1..a8cde2b 100644 --- a/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/timer/TimerScreen.kt @@ -64,7 +64,7 @@ fun TimerContent( val showRunningView = isTimerRunning || isPaused var selectedMode by remember { mutableIntStateOf(0) } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt index afde73e..dbabb59 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/about/AboutScreen.kt @@ -39,7 +39,7 @@ fun AboutScreen( onBackPressed: () -> Unit ) { val scrollState = rememberScrollState() - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt index 3f056f5..2710f2a 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusSessionDetailScreen.kt @@ -61,7 +61,7 @@ fun FocusSessionDetailScreen(sessionId: String, onBackPressed: () -> Unit) { return } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( contentWindowInsets = WindowInsets(0), diff --git a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt index 725936e..70120be 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/focusstats/FocusStatsScreen.kt @@ -129,7 +129,7 @@ fun FocusStatsScreen( }" } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior( + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( rememberTopAppBarState() ) diff --git a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt index 5f484cb..f771fa0 100644 --- a/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt +++ b/Reef/src/main/java/dev/pranav/reef/ui/whitelist/WhitelistScreen.kt @@ -54,7 +54,7 @@ fun WhitelistScreen( onToggle: (WhitelistedApp) -> Unit, ) { val scrollBehavior = - TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),