sirekanian 3 жил өмнө
parent
commit
52dc387538

+ 1 - 0
app/build.gradle

@@ -52,4 +52,5 @@ dependencies {
     implementation "androidx.core:core-ktx:1.9.0"
     implementation "androidx.compose.material:material:$composeLibraryVersion"
     implementation "androidx.activity:activity-compose:1.5.1"
+    implementation "com.google.accompanist:accompanist-pager:0.25.1"
 }

+ 15 - 10
app/src/main/java/com/sirekanian/spacetime/MainActivity.kt

@@ -4,34 +4,39 @@ import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.systemBarsPadding
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Surface
-import androidx.compose.material.Text
+import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
 import androidx.core.view.WindowCompat
+import com.google.accompanist.pager.ExperimentalPagerApi
+import com.google.accompanist.pager.HorizontalPager
 import com.sirekanian.spacetime.ui.theme.SpacetimeTheme
 
 class MainActivity : ComponentActivity() {
+
+    @ExperimentalPagerApi
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         WindowCompat.setDecorFitsSystemWindows(window, false)
         setContent {
+            val state = remember { MainState() }
+            val pages = state.getPages()
             SpacetimeTheme {
                 Surface(
                     modifier = Modifier.fillMaxSize(),
-                    color = MaterialTheme.colors.background
+                    color = MaterialTheme.colors.background,
                 ) {
-                    Text(
-                        text = "Hello Android!",
-                        modifier = Modifier
-                            .padding(16.dp)
-                            .systemBarsPadding()
-                    )
+                    HorizontalPager(
+                        count = pages.size,
+                        modifier = Modifier.systemBarsPadding(),
+                    ) { index ->
+                        PageContent(state, pages[index], index)
+                    }
                 }
             }
         }
     }
+
 }

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

@@ -0,0 +1,27 @@
+package com.sirekanian.spacetime
+
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+
+class MainState {
+
+    private var list by mutableStateOf(
+        listOf(
+            ImagePage("default1"),
+            ImagePage("default2"),
+        )
+    )
+
+    fun getPages(): List<Page> =
+        list.plus(GalleryPage)
+
+    fun addPage(name: String) {
+        list = list.plus(ImagePage(name))
+    }
+
+    fun removePage(index: Int) {
+        list = list.filterIndexed { i, _ -> i != index }
+    }
+
+}

+ 7 - 0
app/src/main/java/com/sirekanian/spacetime/Page.kt

@@ -0,0 +1,7 @@
+package com.sirekanian.spacetime
+
+sealed class Page
+
+class ImagePage(val name: String) : Page()
+
+object GalleryPage : Page()

+ 42 - 0
app/src/main/java/com/sirekanian/spacetime/PageContent.kt

@@ -0,0 +1,42 @@
+package com.sirekanian.spacetime
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.Button
+import androidx.compose.material.Text
+import androidx.compose.material.TextField
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+
+@Composable
+fun PageContent(state: MainState, page: Page, index: Int) {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp),
+        verticalArrangement = Arrangement.spacedBy(16.dp)
+    ) {
+        when (page) {
+            is ImagePage -> {
+                Text(text = "page ${page.name}")
+                Button(onClick = { state.removePage(index) }) {
+                    Text("Delete")
+                }
+            }
+            GalleryPage -> {
+                var name by remember { mutableStateOf("") }
+                TextField(
+                    value = name,
+                    onValueChange = { name = it },
+                    modifier = Modifier.fillMaxWidth()
+                )
+                Button(
+                    onClick = { state.addPage(name) },
+                    enabled = name.isNotEmpty()
+                ) {
+                    Text("Add")
+                }
+            }
+        }
+    }
+}