Skip to content

Commit 994c41d

Browse files
committed
Add immersive experience in focus mode of InAppGallery
1 parent 1c77720 commit 994c41d

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

app/src/main/java/app/grapheneos/camera/ktx/Dp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@ import androidx.compose.runtime.Composable
44
import androidx.compose.ui.platform.LocalDensity
55
import androidx.compose.ui.unit.Dp
66

7+
@Composable
8+
fun Int.pxToDp() = with(LocalDensity.current) { this@pxToDp.toDp() }
9+
710
@Composable
811
fun Dp.toPx() = with(LocalDensity.current) { this@toPx.toPx() }

app/src/main/java/app/grapheneos/camera/ui/composable/screen/ui/GalleryScreen.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package app.grapheneos.camera.ui.composable.screen.ui
22

3+
import android.app.Activity
34
import android.widget.Toast
45
import androidx.compose.animation.AnimatedVisibility
56
import androidx.compose.animation.animateColorAsState
@@ -37,11 +38,15 @@ import androidx.compose.ui.Modifier
3738
import androidx.compose.ui.graphics.Color
3839

3940
import androidx.compose.ui.platform.LocalContext
41+
import androidx.compose.ui.platform.LocalView
4042
import androidx.compose.ui.res.stringResource
4143
import androidx.compose.ui.text.style.TextAlign
4244
import androidx.compose.ui.unit.LayoutDirection
4345
import androidx.compose.ui.unit.dp
4446
import androidx.compose.ui.unit.sp
47+
import androidx.core.view.WindowCompat
48+
import androidx.core.view.WindowInsetsCompat
49+
import androidx.core.view.WindowInsetsControllerCompat
4550

4651
import androidx.lifecycle.viewmodel.compose.viewModel
4752
import app.grapheneos.camera.CapturedItem
@@ -74,6 +79,12 @@ fun GalleryScreen(
7479
) {
7580
val context = LocalContext.current
7681

82+
val window = (context as Activity).window
83+
84+
val insetsController = WindowCompat.getInsetsController(window, LocalView.current).apply {
85+
systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT
86+
}
87+
7788
val zoomableState = rememberZoomableState()
7889

7990
val coroutineScope = rememberCoroutineScope()
@@ -125,6 +136,14 @@ fun GalleryScreen(
125136
}
126137
}
127138

139+
LaunchedEffect(viewModel.inFocusMode) {
140+
if (viewModel.inFocusMode) {
141+
insetsController.hide(WindowInsetsCompat.Type.systemBars())
142+
} else {
143+
insetsController.show(WindowInsetsCompat.Type.systemBars())
144+
}
145+
}
146+
128147
// Displays media info dialog when displayedMediaItem is not null
129148
MediaInfoDialog(
130149
mediaItemDetails = viewModel.displayedMediaItem,
@@ -224,7 +243,7 @@ fun GalleryScreen(
224243
// material guidelines)
225244
0.dp,
226245
innerPadding.calculateEndPadding(LayoutDirection.Ltr),
227-
innerPadding.calculateBottomPadding(),
246+
0.dp,
228247
)
229248
.fillMaxSize()
230249
) { page ->

0 commit comments

Comments
 (0)