Jelajahi Sumber

added edit button

sirekanian 3 tahun lalu
induk
melakukan
513e39d9a6

+ 3 - 0
app/src/debug/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">Spacetime!</string>
+</resources>

+ 4 - 1
app/src/main/java/com/sirekanian/spacetime/MainActivity.kt

@@ -33,7 +33,10 @@ class MainActivity : ComponentActivity() {
                     modifier = Modifier.fillMaxSize(),
                     color = MaterialTheme.colors.background,
                 ) {
-                    HorizontalPager(pages.size) { index ->
+                    HorizontalPager(
+                        count = pages.size,
+                        key = { pages[it].uuid },
+                    ) { index ->
                         when (val page = pages[index]) {
                             is ImagePage -> ImagePageContent(insets, state, page, index)
                             GalleryPage -> GalleryPageContent(insets, state)

+ 5 - 1
app/src/main/java/com/sirekanian/spacetime/Page.kt

@@ -1,6 +1,10 @@
 package com.sirekanian.spacetime
 
-sealed class Page
+import java.util.*
+
+sealed class Page {
+    val uuid: String = UUID.randomUUID().toString()
+}
 
 class ImagePage(val name: String) : Page()
 

+ 13 - 0
app/src/main/java/com/sirekanian/spacetime/ext/AnimatedVisibility.kt

@@ -0,0 +1,13 @@
+package com.sirekanian.spacetime.ext
+
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.runtime.Composable
+
+@Composable
+fun DefaultAnimatedVisibility(visible: Boolean, content: @Composable () -> Unit) {
+    AnimatedVisibility(visible = visible, enter = fadeIn(), exit = fadeOut()) {
+        content()
+    }
+}

+ 13 - 0
app/src/main/java/com/sirekanian/spacetime/ext/VectorIconButton.kt

@@ -0,0 +1,13 @@
+package com.sirekanian.spacetime.ext
+
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.vector.ImageVector
+
+@Composable
+fun VectorIconButton(icon: ImageVector, onClick: () -> Unit) {
+    IconButton(onClick = onClick) {
+        Icon(icon, null)
+    }
+}

+ 21 - 14
app/src/main/java/com/sirekanian/spacetime/ui/ImagePageContent.kt

@@ -1,19 +1,20 @@
 package com.sirekanian.spacetime.ui
 
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material.Button
-import androidx.compose.material.Text
-import androidx.compose.runtime.Composable
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.Edit
+import androidx.compose.runtime.*
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.unit.dp
 import coil.compose.AsyncImage
 import coil.request.ImageRequest
 import com.sirekanian.spacetime.ImagePage
 import com.sirekanian.spacetime.MainState
+import com.sirekanian.spacetime.ext.DefaultAnimatedVisibility
+import com.sirekanian.spacetime.ext.VectorIconButton
 
 @Composable
 fun ImagePageContent(insets: PaddingValues, state: MainState, page: ImagePage, index: Int) {
@@ -26,12 +27,18 @@ fun ImagePageContent(insets: PaddingValues, state: MainState, page: ImagePage, i
         modifier = Modifier.fillMaxSize(),
         contentScale = ContentScale.Crop,
     )
-    Button(
-        onClick = { state.removePage(index) },
-        modifier = Modifier
-            .padding(insets)
-            .padding(16.dp),
-    ) {
-        Text("Delete")
+    var isEditMode by remember { mutableStateOf(false) }
+    DefaultAnimatedVisibility(visible = !isEditMode) {
+        Row(Modifier.padding(insets)) {
+            Spacer(Modifier.weight(1f))
+            VectorIconButton(Icons.Default.Edit, onClick = { isEditMode = true })
+        }
+    }
+    DefaultAnimatedVisibility(visible = isEditMode) {
+        Row(Modifier.padding(insets)) {
+            VectorIconButton(Icons.Default.ArrowBack, onClick = { isEditMode = false })
+            Spacer(Modifier.weight(1f))
+            VectorIconButton(Icons.Default.Delete, onClick = { state.removePage(index) })
+        }
     }
 }

+ 3 - 1
settings.gradle

@@ -5,6 +5,7 @@ pluginManagement {
         mavenCentral()
     }
 }
+
 dependencyResolutionManagement {
     repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
     repositories {
@@ -12,5 +13,6 @@ dependencyResolutionManagement {
         mavenCentral()
     }
 }
-rootProject.name = "Spacetime"
+
+rootProject.name = "spacetime"
 include ':app'