From b3c152c02463b761bf4845c17e7099e2af6b5c23 Mon Sep 17 00:00:00 2001 From: KaushalVasava Date: Tue, 25 Jul 2023 14:44:08 +0530 Subject: [PATCH 1/5] Update dependencies --- app/build.gradle | 24 ++++++++++++------------ build.gradle | 8 ++++---- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 75677b5..c35e5f3 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,15 +48,15 @@ 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' 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" 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 From fc1d47cce796fa2c52721575a44ae067ccfa5c47 Mon Sep 17 00:00:00 2001 From: KaushalVasava Date: Sat, 9 Sep 2023 12:44:07 +0530 Subject: [PATCH 2/5] Add food screen --- app/build.gradle | 2 +- .../apps/jetpackcomposebasic/MainActivity.kt | 3 +- .../ui/screen/NavigationItem.kt | 2 + .../ui/screen/SplashScreen.kt | 115 ++++++++++++++++++ app/src/main/res/drawable/food_logo.webp | Bin 0 -> 15022 bytes build.gradle | 8 +- 6 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/NavigationItem.kt create mode 100644 app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/SplashScreen.kt create mode 100644 app/src/main/res/drawable/food_logo.webp diff --git a/app/build.gradle b/app/build.gradle index c35e5f3..c057e38 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,7 +37,7 @@ android { compose true } composeOptions { - kotlinCompilerExtensionVersion '1.4.3' + kotlinCompilerExtensionVersion '1.4.7' } packagingOptions { resources { 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..8c57274 100644 --- a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt +++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt @@ -10,6 +10,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import com.lahsuak.apps.jetpackcomposebasic.ui.screen.SplashScreen import com.lahsuak.apps.jetpackcomposebasic.ui.theme.JetPackComposeBasicTheme class MainActivity : ComponentActivity() { @@ -22,7 +23,7 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - Greeting("Android") + SplashScreen() } } } diff --git a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/NavigationItem.kt b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/NavigationItem.kt new file mode 100644 index 0000000..db0615c --- /dev/null +++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/NavigationItem.kt @@ -0,0 +1,2 @@ +package com.lahsuak.apps.jetpackcomposebasic.ui.screen + diff --git a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/SplashScreen.kt b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/SplashScreen.kt new file mode 100644 index 0000000..523a214 --- /dev/null +++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/ui/screen/SplashScreen.kt @@ -0,0 +1,115 @@ +package com.lahsuak.apps.jetpackcomposebasic.ui.screen + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.LocationOn +import androidx.compose.material.icons.filled.Person +import androidx.compose.material3.Button +import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.FilledTonalIconButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.lahsuak.apps.jetpackcomposebasic.R + +@Composable +fun SplashScreen() { + Box(Modifier.fillMaxSize()) { + Column( + Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.Center, + ) { + Text( + "Annpurna", + fontSize = 20.sp, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Spacer(modifier = Modifier.height(16.dp)) + Image( + painter = painterResource(id = R.drawable.food_logo), contentDescription = "food", + contentScale = ContentScale.Crop, + modifier = Modifier + .size(300.dp) + .align(Alignment.CenterHorizontally) + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + "A good food make your life healthier", + fontSize = 32.sp, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface, + textAlign = TextAlign.Center, + fontFamily = FontFamily.Serif, + letterSpacing = 2.sp, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Spacer(modifier = Modifier.height(16.dp)) + FilledTonalButton( + onClick = {}, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) { + Icon(Icons.Default.LocationOn, contentDescription = null) + Spacer(modifier = Modifier.width(4.dp)) + Text("Choose language") + } + Spacer(modifier = Modifier.height(16.dp)) + Text( + "Login or registration", + fontSize = 16.sp, + color = MaterialTheme.colorScheme.onSurface + ) + Spacer(modifier = Modifier.height(8.dp)) + FilledTonalButton( + onClick = { /*TODO*/ }, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) { + Icon(Icons.Default.Person, contentDescription = null) + Spacer(modifier = Modifier.width(4.dp)) + Text("Google SignIn") + } + Spacer(modifier = Modifier.height(16.dp)) + Text("OR", Modifier.align(Alignment.CenterHorizontally)) + Spacer(modifier = Modifier.height(16.dp)) + Button(onClick = { /*TODO*/ }, Modifier.fillMaxWidth()) { + Text("Login") + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewSplashScreen() { + MaterialTheme { + Surface(modifier = Modifier.background(MaterialTheme.colorScheme.background)) { + SplashScreen() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/food_logo.webp b/app/src/main/res/drawable/food_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..987f70131c93d0a9c88a1510e9b83aced6e09ffb GIT binary patch literal 15022 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 a_8yo>q1LLa)PEzIDTx1u6!71w$^Qr88C`?` literal 0 HcmV?d00001 diff --git a/build.gradle b/build.gradle index b0f2f02..9546bb2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,10 @@ buildscript { ext { - compose_version = '1.4.3' + compose_version = '1.4.7' } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - 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 + id 'com.android.application' version '8.1.0' apply false + id 'com.android.library' version '8.1.0' apply false + id 'org.jetbrains.kotlin.android' version '1.8.21' apply false } \ No newline at end of file From 3c5cb337bbc11f0f328caec42aa1c687dddd5561 Mon Sep 17 00:00:00 2001 From: KaushalVasava Date: Wed, 27 Sep 2023 10:39:34 +0530 Subject: [PATCH 3/5] Add auto open key-board at start-up of the screen --- .../apps/jetpackcomposebasic/MainActivity.kt | 73 ++++++++++++++++--- 1 file changed, 61 insertions(+), 12 deletions(-) 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 8c57274..60734b5 100644 --- a/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt +++ b/app/src/main/java/com/lahsuak/apps/jetpackcomposebasic/MainActivity.kt @@ -3,13 +3,35 @@ package com.lahsuak.apps.jetpackcomposebasic import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import com.lahsuak.apps.jetpackcomposebasic.ui.screen.SplashScreen import com.lahsuak.apps.jetpackcomposebasic.ui.theme.JetPackComposeBasicTheme @@ -23,29 +45,56 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - SplashScreen() + LoginScreen() } } } } } -/*** -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. -***/ + +@OptIn(ExperimentalComposeUiApi::class) @Composable -fun Greeting(name: String) { - Text(text = "Hello $name!") +fun LoginScreen() { + val keyboard = LocalSoftwareKeyboardController.current + val focusRequester = remember { FocusRequester() } + + LaunchedEffect(Unit) { + // requesting to get focus + focusRequester.requestFocus() + // show keyboard at start-up + keyboard?.show() + } + var name by rememberSaveable { + mutableStateOf("") + } + + Column(Modifier.fillMaxSize().padding(16.dp)) { + OutlinedTextField( + value = name, + onValueChange = { + name = it + }, + placeholder = { + Text("Enter your name") + }, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + keyboardActions = KeyboardActions( + onDone = { + // hide keyboard when submit input + keyboard?.hide() + }), + modifier = Modifier + .fillMaxWidth() + .focusRequester(focusRequester) // add focusRequester to get focus on textfield + .background(MaterialTheme.colorScheme.surfaceVariant), + ) + } } @Preview(showBackground = true) @Composable fun DefaultPreview() { JetPackComposeBasicTheme { - Greeting("Android") + LoginScreen() } } \ No newline at end of file From 06cd4ce880d10360ebd59cfa1646755c8b9b1b2b Mon Sep 17 00:00:00 2001 From: Kaushal Vasava <49050597+KaushalVasava@users.noreply.github.com> Date: Wed, 27 Sep 2023 10:44:24 +0530 Subject: [PATCH 4/5] Create README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad6d50a --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# JetPackCompose Basic + +In this project, you will know how to open keyboard at screen start-up and get focus on TextField. + + +# Video +https://github.com/KaushalVasava/JetPackCompose_Basic/assets/49050597/97046668-2033-4c53-b374-da35b5ead465 + +# Author +Kaushal Vasava + From 43c805a674bb48f9722dfc678b6d1b4a950be022 Mon Sep 17 00:00:00 2001 From: Kaushal Vasava <49050597+KaushalVasava@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:49:11 +0530 Subject: [PATCH 5/5] Update README.md --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index ad6d50a..c0765b5 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,34 @@ In this project, you will know how to open keyboard at screen start-up and get focus on TextField. +First know this, + +➡ FocusRequester: +The FocusRequester is used in conjunction with Modifier.focusRequester to send requests to change focus. + +➡ SoftwareKeyboardController: +SoftwareKeyboardController that can control the current software keyboard. + +Steps: +1. Initialize FocusRequester and SoftwareKeyboardController +val keyboard = LocalSoftwareKeyboardController.current +val focusRequester = remember { FocusRequester() } + +2. Call requestFocus() method to get focus and show the keyboard and put all this code inside LanchedEffect to run at once +LaunchedEffect(Unit) { + focusRequester.requestFocus() + keyboard?.show() +} +3. Add focusRequester modifier and pass focusRequester of the TextField +TextField(Modifier.focusRequester(focusRequester),..) + +4. Add a keyboard Options as Done and Action to hide keyboard when submit input. + +keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), +keyboardActions = KeyboardActions( + onDone = { + keyboard?.hide() +}) # Video https://github.com/KaushalVasava/JetPackCompose_Basic/assets/49050597/97046668-2033-4c53-b374-da35b5ead465