diff --git a/app/build.gradle b/app/build.gradle
index 75677b5..4fe55aa 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,12 +5,12 @@ plugins {
android {
namespace 'com.lahsuak.apps.jetpackcomposebasic'
- compileSdk 33
+ compileSdk 34
defaultConfig {
applicationId "com.lahsuak.apps.jetpackcomposebasic"
minSdk 23
- targetSdk 33
+ targetSdk 34
versionCode 1
versionName "1.0"
@@ -27,17 +27,17 @@ android {
}
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
- jvmTarget = '1.8'
+ jvmTarget = '17'
}
buildFeatures {
compose true
}
composeOptions {
- kotlinCompilerExtensionVersion '1.1.1'
+ kotlinCompilerExtensionVersion '1.4.3'
}
packagingOptions {
resources {
@@ -48,16 +48,20 @@ android {
dependencies {
- implementation 'androidx.core:core-ktx:1.9.0'
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
- implementation 'androidx.activity:activity-compose:1.6.1'
+ implementation 'androidx.core:core-ktx:1.10.1'
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
+ implementation 'androidx.activity:activity-compose:1.7.2'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
- implementation 'androidx.compose.material3:material3:1.1.0-alpha03'
+ implementation 'androidx.compose.material3:material3:1.2.0-alpha03'
+ implementation "com.google.accompanist:accompanist-pager:0.20.2"
+ // If using indicators, also depend on
+ implementation "com.google.accompanist:accompanist-pager-indicators:0.20.2"
+
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.4'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
- debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
+ debugImplementation "androidx.compose.ui:ui-test-manifest:1.4.3"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt
index 187ee32..6be3967 100644
--- a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt
+++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt
@@ -6,12 +6,14 @@ import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
+import com.google.accompanist.pager.ExperimentalPagerApi
+import com.lahsuak.apps.jetpackcomposebasic.ui.screen.OnBoarding
import com.lahsuak.apps.jetpackcomposebasic.ui.theme.JetPackComposeBasicTheme
+@ExperimentalPagerApi
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -22,29 +24,18 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
- Greeting("Android")
+ OnBoarding(modifier = Modifier)
}
}
}
}
}
-/***
-Composable functions :
-A composable function is a regular function annotated with @Composable.
-This enables your function to call other @Composable functions within it.
-You can see how the Greeting function is marked as @Composable.
-This function will produce a piece of UI hierarchy displaying the given input,
-String. Text is a composable function provided by the library.
-***/
-@Composable
-fun Greeting(name: String) {
- Text(text = "Hello $name!")
-}
@Preview(showBackground = true)
@Composable
+@ExperimentalPagerApi
fun DefaultPreview() {
JetPackComposeBasicTheme {
- Greeting("Android")
+ OnBoarding(modifier = Modifier)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/OnBoarding.kt b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/OnBoarding.kt
new file mode 100644
index 0000000..e42a7a3
--- /dev/null
+++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/OnBoarding.kt
@@ -0,0 +1,69 @@
+package com.lahsuak.apps.jetpackcomposebasic.ui.screen
+
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import com.google.accompanist.pager.ExperimentalPagerApi
+import com.google.accompanist.pager.HorizontalPager
+import com.google.accompanist.pager.HorizontalPagerIndicator
+import com.google.accompanist.pager.rememberPagerState
+import com.lahsuak.apps.jetpackcomposebasic.ui.viewpager.Pager
+import com.lahsuak.apps.jetpackcomposebasic.ui.viewpager.dataList
+
+@ExperimentalPagerApi
+@Composable
+fun OnBoarding(modifier: Modifier) {
+ val viewPagerState = rememberPagerState()
+ Column(modifier = modifier.padding(8.dp)) {
+ HorizontalPager(
+ count = dataList.size,
+ state = viewPagerState,
+ modifier = modifier
+ .fillMaxWidth()
+ .weight(1f)
+ ) { pageIndex ->
+ Page(modifier = modifier, dataList[pageIndex])
+ }
+ HorizontalPagerIndicator(
+ pagerState = viewPagerState,
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ activeColor = MaterialTheme.colors.primary,
+ inactiveColor = Color.LightGray
+ )
+ AnimatedVisibility(visible = viewPagerState.currentPage == 2, modifier = Modifier.align(Alignment.End)) {
+ Button(onClick = { }) {
+ Text(text = "Start now")
+ }
+ }
+ }
+}
+
+@Composable
+fun Page(
+ modifier: Modifier,
+ pager: Pager
+) {
+ Column(
+ modifier = modifier.padding(vertical = 8.dp),
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Image(
+ modifier = Modifier.size(120.dp),
+ painter = painterResource(pager.image),
+ contentDescription = null,
+ contentScale = ContentScale.FillBounds
+ )
+ Text(text = pager.description)
+ }
+}
diff --git a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/viewpager/DataSource.kt b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/viewpager/DataSource.kt
new file mode 100644
index 0000000..fd8eb7a
--- /dev/null
+++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/viewpager/DataSource.kt
@@ -0,0 +1,15 @@
+package com.lahsuak.apps.jetpackcomposebasic.ui.viewpager
+
+import androidx.annotation.DrawableRes
+import com.lahsuak.apps.jetpackcomposebasic.R
+
+data class Pager(
+ @DrawableRes val image: Int,
+ val description: String
+)
+
+val dataList = listOf(
+ Pager(R.drawable.ic_music, "Music"),
+ Pager(R.drawable.ic_notifications, "Notification"),
+ Pager(R.drawable.ic_gesture, "Gestures")
+)
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_gesture.xml b/app/src/main/res/drawable/ic_gesture.xml
new file mode 100644
index 0000000..77d1e51
--- /dev/null
+++ b/app/src/main/res/drawable/ic_gesture.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_music.xml b/app/src/main/res/drawable/ic_music.xml
new file mode 100644
index 0000000..4bd8b20
--- /dev/null
+++ b/app/src/main/res/drawable/ic_music.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_notifications.xml b/app/src/main/res/drawable/ic_notifications.xml
new file mode 100644
index 0000000..ed2cf7e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notifications.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/build.gradle b/build.gradle
index e868fc8..b0f2f02 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,10 @@
buildscript {
ext {
- compose_version = '1.3.2'
+ compose_version = '1.4.3'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
- id 'com.android.application' version '7.3.0' apply false
- id 'com.android.library' version '7.3.0' apply false
- id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
+ id 'com.android.application' version '8.0.2' apply false
+ id 'com.android.library' version '8.0.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}
\ No newline at end of file