Ver Fonte

added back handlers

sirekanian há 3 anos atrás
pai
commit
c0a42a69a4

+ 9 - 0
app/src/main/java/com/sirekanian/spacetime/MainPresenter.kt

@@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.platform.LocalContext
+import com.google.accompanist.pager.ExperimentalPagerApi
 import com.sirekanian.spacetime.data.Repository
 import com.sirekanian.spacetime.data.api.ThumbnailApi
 import com.sirekanian.spacetime.ext.app
@@ -24,6 +25,7 @@ interface MainPresenter {
     fun savePage(page: ImagePage)
     fun removePage(page: ImagePage)
     fun loadGallery()
+    fun openPageByIndex(index: Int)
 
 }
 
@@ -61,6 +63,13 @@ class MainPresenterImpl(
         }
     }
 
+    override fun openPageByIndex(index: Int) {
+        scope.launch {
+            @OptIn(ExperimentalPagerApi::class)
+            state.pagerState.animateScrollToPage(index)
+        }
+    }
+
     private suspend fun updatePages() {
         state.pages = repository.getPages()
     }

+ 5 - 0
app/src/main/java/com/sirekanian/spacetime/MainScreen.kt

@@ -1,5 +1,6 @@
 package com.sirekanian.spacetime
 
+import androidx.activity.compose.BackHandler
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.systemBars
@@ -17,9 +18,13 @@ import com.sirekanian.spacetime.ui.ImagePageContent
 @ExperimentalPagerApi
 fun MainScreen(presenter: MainPresenter) {
     val state = presenter.state
+    BackHandler(state.pagerState.currentPage > 0) {
+        presenter.openPageByIndex(0)
+    }
     val pages = state.pages.plus(GalleryPage)
     val insets = WindowInsets.systemBars.asPaddingValues()
     HorizontalPager(
+        state = state.pagerState,
         count = pages.size,
         key = { pages[it].id },
     ) { index ->

+ 4 - 0
app/src/main/java/com/sirekanian/spacetime/MainState.kt

@@ -4,6 +4,8 @@ import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
+import com.google.accompanist.pager.ExperimentalPagerApi
+import com.google.accompanist.pager.PagerState
 import com.sirekanian.spacetime.ext.currentDate
 import com.sirekanian.spacetime.ext.minusMonths
 import com.sirekanian.spacetime.ext.withDayOfMonth
@@ -14,6 +16,8 @@ import kotlinx.datetime.LocalDate
 
 class MainState {
 
+    @OptIn(ExperimentalPagerApi::class)
+    val pagerState = PagerState()
     var pages by mutableStateOf(listOf<ImagePage>())
     var draft by mutableStateOf<Draft?>(null)
     var thumbnails by mutableStateOf(listOf<Thumbnail>())

+ 4 - 0
app/src/main/java/com/sirekanian/spacetime/ui/ImagePageContent.kt

@@ -1,5 +1,6 @@
 package com.sirekanian.spacetime.ui
 
+import androidx.activity.compose.BackHandler
 import androidx.compose.animation.core.animateFloatAsState
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.combinedClickable
@@ -40,6 +41,9 @@ fun ImagePageContent(
     onDone: (ImagePage) -> Unit,
 ) {
     var isEditMode by remember { mutableStateOf(false) }
+    BackHandler(isEditMode) {
+        isEditMode = false
+    }
     var name by remember(isEditMode) { mutableStateOf(page.name) }
     var date by remember(isEditMode) { mutableStateOf(page.date) }
     var blur by remember(isEditMode) { mutableStateOf(page.blur) }