├── .gitignore ├── .idea ├── .gitignore ├── compiler.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml └── misc.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── arvind │ │ └── nikeshop │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── arvind │ │ │ └── nikeshop │ │ │ ├── MainActivity.kt │ │ │ ├── app │ │ │ └── NikeShopApp.kt │ │ │ ├── component │ │ │ ├── BottomBar.kt │ │ │ └── TopAppBarWithBack.kt │ │ │ ├── model │ │ │ ├── DataDummy.kt │ │ │ └── Product.kt │ │ │ ├── navigation │ │ │ ├── Navigation.kt │ │ │ └── Screen.kt │ │ │ ├── ui │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Shape.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ │ ├── utils │ │ │ └── Constants.kt │ │ │ └── view │ │ │ ├── AddToCartScren.kt │ │ │ ├── Dashboard.kt │ │ │ ├── HomeScreen.kt │ │ │ ├── ProductDetailsScreen.kt │ │ │ └── SplashScreen.kt │ └── res │ │ ├── drawable-nodpi │ │ ├── jacket.png │ │ ├── shoe_thumb_1.png │ │ ├── shoe_thumb_2.png │ │ ├── shoe_thumb_3.png │ │ ├── shoe_thumb_4.png │ │ ├── shoe_thumb_5.png │ │ ├── shoe_tilt_2.png │ │ ├── shooe_tilt_1.png │ │ ├── show_1.png │ │ ├── small_tilt_shoe_1.png │ │ ├── small_tilt_shoe_2.png │ │ ├── small_tilt_shoe_3.png │ │ ├── user.png │ │ └── watch.png │ │ ├── drawable-v24 │ │ ├── app_logo.png │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── filter_list.png │ │ ├── ic_baseline_favorite_border_24.xml │ │ ├── ic_baseline_home_24.xml │ │ ├── ic_baseline_search_24.xml │ │ └── ic_baseline_shopping_cart_24.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── values-night │ │ └── themes.xml │ │ └── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── themes.xml │ └── test │ └── java │ └── com │ └── arvind │ └── nikeshop │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # E-commerceShopAppUI-Android 2 | New style for app design E-commerce Shop App UI made in Jetpack Compose.😉😎 3 | 4 | (Navigation Components, 5 | Dagger-Hilt, 6 | Material Components) 7 | 8 | # Screenshot 9 | 10 | ![68747470733a2f2f63646e2e6472696262626c652e636f6d2f75736572732f323433323939342f73637265656e73686f74732f31303434363132372f6d656469612f666130613963653334386530626661313862303062](https://user-images.githubusercontent.com/25154589/131151663-fee5f270-ee92-4f7a-adf2-62aaedd96064.png) 11 | 12 | 13 | ►Design Credit: https://dribbble.com/shots/10446127-E-commerce-App-Exploration/attachments/2283107?mode=media 14 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'kotlin-android' 4 | id 'kotlin-kapt' 5 | id 'dagger.hilt.android.plugin' 6 | } 7 | 8 | android { 9 | compileSdk 30 10 | 11 | defaultConfig { 12 | applicationId "com.arvind.nikeshop" 13 | minSdk 21 14 | targetSdk 30 15 | versionCode 1 16 | versionName "1.0" 17 | 18 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 19 | vectorDrawables { 20 | useSupportLibrary true 21 | } 22 | } 23 | 24 | buildTypes { 25 | release { 26 | minifyEnabled false 27 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 28 | } 29 | } 30 | compileOptions { 31 | sourceCompatibility JavaVersion.VERSION_1_8 32 | targetCompatibility JavaVersion.VERSION_1_8 33 | } 34 | kotlinOptions { 35 | jvmTarget = '1.8' 36 | useIR = true 37 | } 38 | buildFeatures { 39 | compose true 40 | } 41 | composeOptions { 42 | kotlinCompilerExtensionVersion compose_version 43 | kotlinCompilerVersion '1.5.21' 44 | } 45 | packagingOptions { 46 | resources { 47 | excludes += '/META-INF/{AL2.0,LGPL2.1}' 48 | } 49 | } 50 | } 51 | 52 | dependencies { 53 | 54 | implementation 'androidx.core:core-ktx:1.6.0' 55 | implementation 'androidx.appcompat:appcompat:1.3.1' 56 | implementation 'com.google.android.material:material:1.4.0' 57 | implementation "androidx.compose.ui:ui:$compose_version" 58 | implementation "androidx.compose.material:material:$compose_version" 59 | implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" 60 | implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' 61 | implementation 'androidx.activity:activity-compose:1.3.1' 62 | testImplementation 'junit:junit:4.13.2' 63 | androidTestImplementation 'androidx.test.ext:junit:1.1.3' 64 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 65 | androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" 66 | debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" 67 | 68 | //lifecycle 69 | implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07" 70 | implementation "androidx.navigation:navigation-compose:2.4.0-alpha06" 71 | implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-beta02" 72 | 73 | // Retrofit 74 | implementation 'com.squareup.retrofit2:retrofit:2.9.0' 75 | implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 76 | implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2" 77 | implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2" 78 | 79 | // Paging Compose 80 | implementation "androidx.paging:paging-compose:1.0.0-alpha12" 81 | 82 | // Coroutines 83 | implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1' 84 | implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1' 85 | 86 | // Coroutine Lifecycle Scopes 87 | implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1" 88 | implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1" 89 | implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' 90 | 91 | //Dagger - Hilt 92 | implementation "com.google.dagger:hilt-android:2.38.1" 93 | kapt "com.google.dagger:hilt-android-compiler:2.38.1" 94 | implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" 95 | kapt "androidx.hilt:hilt-compiler:1.0.0" 96 | implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03' 97 | 98 | 99 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/arvind/nikeshop/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.arvind.nikeshop", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 14 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import androidx.compose.material.MaterialTheme 7 | import androidx.compose.material.Surface 8 | import androidx.compose.material.Text 9 | import androidx.compose.runtime.Composable 10 | import androidx.compose.ui.tooling.preview.Preview 11 | import com.arvind.nikeshop.navigation.Navigation 12 | import com.arvind.nikeshop.ui.theme.NikeShopTheme 13 | 14 | class MainActivity : ComponentActivity() { 15 | override fun onCreate(savedInstanceState: Bundle?) { 16 | super.onCreate(savedInstanceState) 17 | setContent { 18 | JetNikeShopUIMain() 19 | } 20 | } 21 | 22 | @Composable 23 | fun JetNikeShopUIMain() { 24 | NikeShopTheme { 25 | Surface(color = MaterialTheme.colors.background) { 26 | Navigation() 27 | } 28 | } 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/app/NikeShopApp.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.app 2 | 3 | import android.app.Application 4 | import dagger.hilt.android.HiltAndroidApp 5 | 6 | @HiltAndroidApp 7 | class NikeShopApp : Application() { 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/component/BottomBar.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.component 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.size 6 | import androidx.compose.foundation.shape.CircleShape 7 | import androidx.compose.material.BottomAppBar 8 | import androidx.compose.material.Icon 9 | import androidx.compose.runtime.Composable 10 | import androidx.compose.ui.Alignment 11 | import androidx.compose.ui.Modifier 12 | import androidx.compose.ui.draw.clip 13 | import androidx.compose.ui.res.painterResource 14 | import androidx.compose.ui.tooling.preview.Preview 15 | import androidx.compose.ui.unit.dp 16 | import com.arvind.nikeshop.R 17 | import com.arvind.nikeshop.ui.theme.lightSilver 18 | import com.arvind.nikeshop.ui.theme.orange 19 | import com.arvind.nikeshop.ui.theme.white 20 | 21 | @Preview(showBackground = true) 22 | @Composable 23 | fun BottomBar() { 24 | BottomAppBar( 25 | backgroundColor = white, 26 | elevation = 0.dp 27 | ) { 28 | Icon( 29 | painter = painterResource(R.drawable.ic_baseline_home_24), 30 | tint = lightSilver, 31 | contentDescription = "", 32 | modifier = Modifier 33 | .weight(1f) 34 | .size(20.dp, 20.dp) 35 | ) 36 | Icon( 37 | painter = painterResource(R.drawable.ic_baseline_search_24), 38 | tint = lightSilver, 39 | contentDescription = "", 40 | modifier = Modifier 41 | .weight(1f) 42 | .size(20.dp, 20.dp) 43 | ) 44 | Box( 45 | contentAlignment = Alignment.Center, 46 | modifier = Modifier 47 | .weight(1f) 48 | ) { 49 | Box( 50 | contentAlignment = Alignment.Center, 51 | modifier = Modifier 52 | .clip(CircleShape) 53 | .background(orange) 54 | .size(44.dp, 44.dp) 55 | 56 | 57 | ) { 58 | Icon( 59 | painter = painterResource(R.drawable.ic_baseline_shopping_cart_24), 60 | tint = white, 61 | contentDescription = "", 62 | modifier = Modifier 63 | .size(20.dp, 20.dp) 64 | ) 65 | } 66 | 67 | } 68 | 69 | Icon( 70 | painter = painterResource(R.drawable.ic_baseline_favorite_border_24), 71 | tint = lightSilver, 72 | contentDescription = "", 73 | modifier = Modifier 74 | .weight(1f) 75 | .size(20.dp, 20.dp) 76 | ) 77 | 78 | 79 | } 80 | 81 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/component/TopAppBarWithBack.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.component 2 | 3 | import androidx.compose.foundation.Image 4 | import androidx.compose.foundation.layout.* 5 | import androidx.compose.foundation.shape.CircleShape 6 | import androidx.compose.foundation.shape.RoundedCornerShape 7 | import androidx.compose.material.Card 8 | import androidx.compose.material.Icon 9 | import androidx.compose.material.IconButton 10 | import androidx.compose.material.icons.Icons 11 | import androidx.compose.material.icons.outlined.Favorite 12 | import androidx.compose.material.icons.outlined.KeyboardArrowLeft 13 | import androidx.compose.material.icons.outlined.List 14 | import androidx.compose.material.icons.outlined.Menu 15 | import androidx.compose.runtime.Composable 16 | import androidx.compose.ui.Alignment 17 | import androidx.compose.ui.Modifier 18 | import androidx.compose.ui.draw.clip 19 | import androidx.compose.ui.res.painterResource 20 | import androidx.compose.ui.tooling.preview.Preview 21 | import androidx.compose.ui.unit.dp 22 | import com.arvind.nikeshop.R 23 | import com.arvind.nikeshop.ui.theme.orange 24 | 25 | 26 | @Composable 27 | fun TopAppBarWithBack(onBackClick: () -> Unit) { 28 | Row( 29 | modifier = Modifier.fillMaxWidth() 30 | .padding(30.dp), 31 | horizontalArrangement = Arrangement.SpaceBetween, 32 | verticalAlignment = Alignment.Top 33 | ) { 34 | Card( 35 | modifier = Modifier.width(50.dp), 36 | shape = RoundedCornerShape(12.dp), 37 | elevation = 5.dp 38 | ) { 39 | IconButton(onClick = { onBackClick() }) { 40 | Icon( 41 | imageVector = Icons.Outlined.KeyboardArrowLeft, 42 | contentDescription = "" 43 | ) 44 | } 45 | 46 | } 47 | 48 | Card( 49 | modifier = Modifier.width(50.dp), 50 | shape = RoundedCornerShape(12.dp), 51 | elevation = 5.dp 52 | ) { 53 | IconButton(onClick = { }) { 54 | Icon( 55 | imageVector = Icons.Outlined.Favorite, 56 | contentDescription = "", 57 | tint = orange 58 | ) 59 | } 60 | 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/model/DataDummy.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.model 2 | 3 | import com.arvind.nikeshop.R 4 | 5 | object DataDummy { 6 | val product = Product( 7 | 1, 8 | "Nike Air Max 200", 9 | 240.00, 10 | 100, 11 | R.drawable.shooe_tilt_1, 12 | "Trending Now" 13 | 14 | ) 15 | 16 | val productList = listOf( 17 | product, 18 | product.copy( 19 | 2, 20 | "Nike Air Max 97", 21 | 240.00, 22 | 100, 23 | R.drawable.shoe_tilt_2, 24 | "Trending Now" 25 | ), 26 | product.copy( 27 | 3, 28 | "Nike Air Max 97", 29 | 220.00, 30 | 100, 31 | R.drawable.shoe_tilt_2, 32 | "Trending Now" 33 | ) 34 | 35 | ) 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/model/Product.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.model 2 | 3 | import java.io.Serializable 4 | 5 | data class Product( 6 | val id: Int, 7 | val name: String, 8 | val price: Double, 9 | val isliked: Int, 10 | val imageID: Int, 11 | val category: String, 12 | ) : Serializable 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/navigation/Navigation.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.navigation 2 | 3 | import androidx.compose.runtime.Composable 4 | import androidx.navigation.compose.NavHost 5 | import androidx.navigation.compose.composable 6 | import androidx.navigation.compose.rememberNavController 7 | import com.arvind.nikeshop.view.* 8 | 9 | @Composable 10 | fun Navigation() { 11 | val navController = rememberNavController() 12 | NavHost( 13 | navController = navController, 14 | startDestination = Screen.SplashScreen.route 15 | ) { 16 | composable(Screen.SplashScreen.route) { 17 | SplashScreen(navController = navController) 18 | } 19 | composable(Screen.HomeScreen.route) { 20 | Dashboard() 21 | } 22 | composable(Screen.ProductDetailsScreen.route) { 23 | ProductDetailsScreen() 24 | } 25 | composable(Screen.AddToCartScreen.route) { 26 | AddToCartScren() 27 | } 28 | 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/navigation/Screen.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.navigation 2 | 3 | sealed class Screen(val route: String) { 4 | object SplashScreen : Screen("splash_screen") 5 | object HomeScreen : Screen("home_screen") 6 | object ProductDetailsScreen : Screen("product_details_screen") 7 | object AddToCartScreen : Screen("add_to_cart_screen") 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.ui.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Purple200 = Color(0xFFBB86FC) 6 | val Purple500 = Color(0xFF6200EE) 7 | val Purple700 = Color(0xFF3700B3) 8 | val Teal200 = Color(0xFF03DAC5) 9 | 10 | val white = Color(0XFFFFFFFF) 11 | val background = Color(0XFFFFFFFF) 12 | val lightbox = Color(0XFFF3F3F3) 13 | val lightSilver = Color(209,215,224) 14 | 15 | val cottonBall = Color(241, 244, 253) 16 | val titleTextColor = Color(0xff1d2635) 17 | val subTitleTextColor = Color(0xff797878) 18 | 19 | val skyBlue = Color(0xff1790C7) 20 | val lightBlue = Color(0xff5C3BFF) 21 | 22 | 23 | val orange = Color(0xffE65829) 24 | val red = Color(0xffFF3737) 25 | val lightorange = Color(0xffFFE9DF) 26 | 27 | val lightGrey = Color(0xffE1E2E4) 28 | val grey = Color(0xffA1A3A6) 29 | val darkgrey = Color(0xff747F8F) 30 | val lightgraybg=Color(0xffF8F8F8) 31 | val lightsilverbox = Color(0xffF6F6F6) 32 | 33 | val iconColor = Color(0xffa8a09b) 34 | val yellowColor = Color(0xfffbba01) 35 | 36 | val black = Color(0xff20262C) 37 | val lightblack = Color(0xff5F5F60) -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/ui/theme/Shape.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.ui.theme 2 | 3 | import androidx.compose.foundation.shape.RoundedCornerShape 4 | import androidx.compose.material.Shapes 5 | import androidx.compose.ui.unit.dp 6 | 7 | val Shapes = Shapes( 8 | small = RoundedCornerShape(4.dp), 9 | medium = RoundedCornerShape(4.dp), 10 | large = RoundedCornerShape(0.dp) 11 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/ui/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.ui.theme 2 | 3 | import androidx.compose.foundation.isSystemInDarkTheme 4 | import androidx.compose.material.MaterialTheme 5 | import androidx.compose.material.darkColors 6 | import androidx.compose.material.lightColors 7 | import androidx.compose.runtime.Composable 8 | 9 | private val DarkColorPalette = darkColors( 10 | primary = Purple200, 11 | primaryVariant = Purple700, 12 | secondary = Teal200 13 | ) 14 | 15 | private val LightColorPalette = lightColors( 16 | primary = Purple500, 17 | primaryVariant = Purple700, 18 | secondary = Teal200 19 | 20 | /* Other default colors to override 21 | background = Color.White, 22 | surface = Color.White, 23 | onPrimary = Color.White, 24 | onSecondary = Color.Black, 25 | onBackground = Color.Black, 26 | onSurface = Color.Black, 27 | */ 28 | ) 29 | 30 | @Composable 31 | fun NikeShopTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) { 32 | val colors = if (darkTheme) { 33 | DarkColorPalette 34 | } else { 35 | LightColorPalette 36 | } 37 | 38 | MaterialTheme( 39 | colors = colors, 40 | typography = Typography, 41 | shapes = Shapes, 42 | content = content 43 | ) 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.ui.theme 2 | 3 | import androidx.compose.material.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | body1 = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp 15 | ) 16 | /* Other default text styles to override 17 | button = TextStyle( 18 | fontFamily = FontFamily.Default, 19 | fontWeight = FontWeight.W500, 20 | fontSize = 14.sp 21 | ), 22 | caption = TextStyle( 23 | fontFamily = FontFamily.Default, 24 | fontWeight = FontWeight.Normal, 25 | fontSize = 12.sp 26 | ) 27 | */ 28 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/utils/Constants.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.utils 2 | 3 | object Constants { 4 | const val SPLASH_SCREEN_DURATION = 0L 5 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/view/AddToCartScren.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.view 2 | 3 | import androidx.compose.foundation.Image 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.rememberScrollState 7 | import androidx.compose.foundation.shape.CircleShape 8 | import androidx.compose.foundation.shape.RoundedCornerShape 9 | import androidx.compose.foundation.verticalScroll 10 | import androidx.compose.material.* 11 | import androidx.compose.material.icons.Icons 12 | import androidx.compose.material.icons.filled.Delete 13 | import androidx.compose.material.icons.outlined.Delete 14 | import androidx.compose.material.icons.sharp.Delete 15 | import androidx.compose.runtime.Composable 16 | import androidx.compose.ui.Alignment 17 | import androidx.compose.ui.Modifier 18 | import androidx.compose.ui.draw.clip 19 | import androidx.compose.ui.graphics.Color 20 | import androidx.compose.ui.graphics.painter.Painter 21 | import androidx.compose.ui.res.painterResource 22 | import androidx.compose.ui.text.ParagraphStyle 23 | import androidx.compose.ui.text.SpanStyle 24 | import androidx.compose.ui.text.buildAnnotatedString 25 | import androidx.compose.ui.text.font.FontWeight 26 | import androidx.compose.ui.text.withStyle 27 | import androidx.compose.ui.tooling.preview.Preview 28 | import androidx.compose.ui.unit.dp 29 | import androidx.compose.ui.unit.sp 30 | import com.arvind.nikeshop.R 31 | import com.arvind.nikeshop.ui.theme.* 32 | 33 | @Preview(showBackground = true) 34 | @Composable 35 | fun AddToCartScren() { 36 | Box( 37 | modifier = Modifier 38 | .fillMaxSize() 39 | .verticalScroll(rememberScrollState()) 40 | ) { 41 | Column( 42 | modifier = Modifier 43 | .fillMaxSize() 44 | .padding(30.dp) 45 | ) { 46 | TopAppBarHeader() 47 | Spacer(modifier = Modifier.padding(5.dp)) 48 | DeleteCart() 49 | Spacer(modifier = Modifier.padding(20.dp)) 50 | CartItemList() 51 | Spacer(modifier = Modifier.padding(20.dp)) 52 | NextButtonWithTotalItems() 53 | } 54 | } 55 | } 56 | 57 | 58 | @Composable 59 | fun DeleteCart() { 60 | Row( 61 | modifier = Modifier.fillMaxWidth(), 62 | horizontalArrangement = Arrangement.SpaceBetween, 63 | verticalAlignment = Alignment.CenterVertically 64 | ) { 65 | Text( 66 | buildAnnotatedString { 67 | withStyle(style = ParagraphStyle(lineHeight = 30.sp)) { 68 | withStyle( 69 | style = SpanStyle( 70 | color = subTitleTextColor, 71 | fontSize = 24.sp 72 | ) 73 | ) { 74 | append("Shopping\n") 75 | } 76 | withStyle( 77 | style = SpanStyle( 78 | fontWeight = FontWeight.Bold, 79 | color = titleTextColor, 80 | fontSize = 24.sp 81 | ) 82 | ) { 83 | append("Cart") 84 | } 85 | 86 | } 87 | } 88 | ) 89 | 90 | IconButton(onClick = { }) { 91 | Icon( 92 | imageVector = Icons.Outlined.Delete, 93 | contentDescription = "", 94 | tint = orange 95 | ) 96 | 97 | } 98 | } 99 | } 100 | 101 | @Composable 102 | fun CartItemList() { 103 | Column( 104 | modifier = Modifier.fillMaxSize(), 105 | verticalArrangement = Arrangement.spacedBy(40.dp) 106 | ) { 107 | ProductCartItems( 108 | imagePainter = painterResource(id = R.drawable.shooe_tilt_1), 109 | title = "NIKE AIR MAX 200", 110 | price = "240.00", 111 | pricetag = "$", 112 | count = "x1", 113 | backgroundColor = lightsilverbox 114 | ) 115 | ProductCartItems( 116 | imagePainter = painterResource(id = R.drawable.small_tilt_shoe_3), 117 | title = "NIKE AIR MAX 97", 118 | price = "190.00", 119 | pricetag = "$", 120 | count = "x1", 121 | backgroundColor = lightsilverbox 122 | ) 123 | ProductCartItems( 124 | imagePainter = painterResource(id = R.drawable.small_tilt_shoe_2), 125 | title = "NIKE AIR MAX 200", 126 | price = "220.00", 127 | pricetag = "$", 128 | count = "x1", 129 | backgroundColor = lightsilverbox 130 | ) 131 | 132 | } 133 | } 134 | 135 | @Composable 136 | fun ProductCartItems( 137 | imagePainter: Painter, 138 | title: String = "", 139 | price: String = "", 140 | pricetag: String = "", 141 | count: String = "", 142 | backgroundColor: Color = Color.Transparent 143 | ) { 144 | Row( 145 | modifier = Modifier.fillMaxWidth(), 146 | horizontalArrangement = Arrangement.SpaceBetween, 147 | verticalAlignment = Alignment.CenterVertically 148 | ) { 149 | Box( 150 | modifier = Modifier 151 | .width(100.dp) 152 | .height(100.dp) 153 | .fillMaxWidth(0.2f) 154 | .clip(RoundedCornerShape(20.dp)) 155 | .background(backgroundColor), 156 | contentAlignment = Alignment.Center 157 | ) { 158 | Image( 159 | painter = imagePainter, 160 | contentDescription = "", 161 | modifier = Modifier.padding(8.dp), 162 | ) 163 | } 164 | Column( 165 | modifier = Modifier 166 | .fillMaxWidth() 167 | .padding(horizontal = 16.dp), 168 | horizontalAlignment = Alignment.Start, 169 | verticalArrangement = Arrangement.SpaceEvenly 170 | ) { 171 | Text( 172 | text = title, 173 | fontSize = 18.sp, 174 | color = titleTextColor, 175 | fontWeight = FontWeight.Bold 176 | ) 177 | Spacer(modifier = Modifier.height(10.dp)) 178 | 179 | Row( 180 | modifier = Modifier.fillMaxWidth(), 181 | horizontalArrangement = Arrangement.SpaceBetween, 182 | verticalAlignment = Alignment.CenterVertically 183 | ) { 184 | Text( 185 | text = buildAnnotatedString { 186 | withStyle( 187 | style = SpanStyle( 188 | orange, 189 | fontWeight = FontWeight.Bold 190 | ) 191 | ) { 192 | append(pricetag) 193 | } 194 | withStyle( 195 | style = SpanStyle( 196 | titleTextColor 197 | ) 198 | ) { 199 | append(price) 200 | } 201 | }, 202 | style = MaterialTheme.typography.subtitle1, 203 | modifier = Modifier, 204 | fontSize = 16.sp 205 | 206 | ) 207 | Box( 208 | modifier = Modifier 209 | .size(35.dp, 35.dp) 210 | .clip(CircleShape) 211 | .background(backgroundColor), 212 | contentAlignment = Alignment.Center 213 | ) { 214 | Text( 215 | text = count, 216 | fontSize = 14.sp, 217 | color = titleTextColor 218 | ) 219 | } 220 | } 221 | 222 | } 223 | } 224 | } 225 | 226 | @Composable 227 | fun NextButtonWithTotalItems() { 228 | Column(modifier = Modifier.fillMaxWidth()) { 229 | Divider(color = lightGrey, thickness = 2.dp) 230 | Spacer(modifier = Modifier.padding(8.dp)) 231 | Row( 232 | modifier = Modifier.fillMaxWidth(), 233 | horizontalArrangement = Arrangement.SpaceBetween, 234 | verticalAlignment = Alignment.CenterVertically 235 | ) { 236 | Text( 237 | text = "3 Items", 238 | fontSize = 14.sp, 239 | color = lightGrey 240 | ) 241 | 242 | Text( 243 | text = "$650.00", 244 | fontSize = 18.sp, 245 | color = titleTextColor, 246 | fontWeight = FontWeight.Bold 247 | ) 248 | } 249 | 250 | Button( 251 | onClick = { 252 | }, 253 | colors = ButtonDefaults.buttonColors(backgroundColor = orange), 254 | modifier = Modifier 255 | .fillMaxWidth() 256 | .padding( 257 | top = 30.dp, 258 | bottom = 34.dp 259 | ) 260 | .align(Alignment.CenterHorizontally), 261 | shape = RoundedCornerShape(14.dp) 262 | ) { 263 | Text( 264 | text = "Next", 265 | color = white, 266 | style = MaterialTheme.typography.button, 267 | modifier = Modifier.padding(top = 8.dp, bottom = 8.dp) 268 | ) 269 | } 270 | 271 | } 272 | } 273 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/view/Dashboard.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.view 2 | 3 | import androidx.compose.animation.Crossfade 4 | import androidx.compose.foundation.layout.height 5 | import androidx.compose.foundation.layout.padding 6 | import androidx.compose.foundation.layout.size 7 | import androidx.compose.material.* 8 | import androidx.compose.runtime.Composable 9 | import androidx.compose.runtime.mutableStateOf 10 | import androidx.compose.runtime.remember 11 | import androidx.compose.ui.Modifier 12 | import androidx.compose.ui.graphics.Color 13 | import androidx.compose.ui.res.painterResource 14 | import androidx.compose.ui.tooling.preview.Preview 15 | import androidx.compose.ui.unit.dp 16 | import com.arvind.nikeshop.R 17 | import com.arvind.nikeshop.ui.theme.orange 18 | 19 | @Preview(showBackground = true) 20 | @Composable 21 | fun Dashboard( 22 | ) { 23 | val sectionState = remember { mutableStateOf(DashboardSection.Home) } 24 | val navItems = DashboardSection.values().toList() 25 | 26 | Scaffold( 27 | bottomBar = { 28 | BottomBar( 29 | items = navItems, 30 | currentSection = sectionState.value, 31 | onSectionSelected = { sectionState.value = it }, 32 | ) 33 | }) { innerPadding -> 34 | val modifier = Modifier.padding(innerPadding) 35 | Crossfade( 36 | modifier = modifier, 37 | targetState = sectionState.value 38 | ) 39 | { section -> 40 | when (section) { 41 | DashboardSection.Home -> HomeScreen() 42 | } 43 | when (section) { 44 | DashboardSection.ShoppingCart -> AddToCartScren() 45 | } 46 | when (section) { 47 | DashboardSection.CartDetails -> ProductDetailsScreen() 48 | } 49 | 50 | } 51 | } 52 | } 53 | 54 | @Composable 55 | private fun BottomBar( 56 | items: List, 57 | currentSection: DashboardSection, 58 | onSectionSelected: (DashboardSection) -> Unit, 59 | ) { 60 | BottomNavigation( 61 | modifier = Modifier.height(50.dp), 62 | backgroundColor = MaterialTheme.colors.background, 63 | contentColor = contentColorFor(MaterialTheme.colors.background) 64 | ) { 65 | items.forEach { section -> 66 | 67 | val selected = section == currentSection 68 | 69 | val iconRes = if (selected) section.selectedIcon else section.icon 70 | 71 | BottomNavigationItem( 72 | icon = { 73 | 74 | Icon( 75 | painter = painterResource(id = iconRes), 76 | modifier = Modifier.size(24.dp), 77 | contentDescription = "Bottom nav icons" 78 | ) 79 | }, 80 | selected = selected, 81 | unselectedContentColor = Color.Gray, 82 | selectedContentColor = orange, 83 | onClick = { onSectionSelected(section) }, 84 | alwaysShowLabel = false 85 | ) 86 | } 87 | } 88 | } 89 | 90 | private enum class DashboardSection( 91 | val icon: Int, 92 | val selectedIcon: Int, 93 | ) { 94 | Home(R.drawable.ic_baseline_home_24, R.drawable.ic_baseline_home_24), 95 | List(R.drawable.ic_baseline_search_24, R.drawable.ic_baseline_search_24), 96 | ShoppingCart(R.drawable.ic_baseline_shopping_cart_24, R.drawable.ic_baseline_shopping_cart_24), 97 | CartDetails( 98 | R.drawable.ic_baseline_favorite_border_24, 99 | R.drawable.ic_baseline_favorite_border_24 100 | ), 101 | } -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/view/HomeScreen.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.view 2 | 3 | import androidx.compose.foundation.* 4 | import androidx.compose.foundation.layout.* 5 | import androidx.compose.foundation.lazy.LazyRow 6 | import androidx.compose.foundation.lazy.items 7 | import androidx.compose.foundation.shape.CircleShape 8 | import androidx.compose.foundation.shape.RoundedCornerShape 9 | import androidx.compose.foundation.text.BasicTextField 10 | import androidx.compose.foundation.text.KeyboardActions 11 | import androidx.compose.foundation.text.KeyboardOptions 12 | import androidx.compose.material.* 13 | import androidx.compose.material.icons.Icons 14 | import androidx.compose.material.icons.filled.Search 15 | import androidx.compose.material.icons.outlined.Favorite 16 | import androidx.compose.material.icons.outlined.FavoriteBorder 17 | import androidx.compose.material.icons.outlined.Menu 18 | import androidx.compose.runtime.* 19 | import androidx.compose.ui.Alignment 20 | import androidx.compose.ui.ExperimentalComposeUiApi 21 | import androidx.compose.ui.Modifier 22 | import androidx.compose.ui.draw.clip 23 | import androidx.compose.ui.draw.shadow 24 | import androidx.compose.ui.graphics.Color 25 | import androidx.compose.ui.graphics.RectangleShape 26 | import androidx.compose.ui.layout.ContentScale 27 | import androidx.compose.ui.platform.LocalSoftwareKeyboardController 28 | import androidx.compose.ui.res.painterResource 29 | import androidx.compose.ui.res.stringResource 30 | import androidx.compose.ui.text.* 31 | import androidx.compose.ui.text.font.FontWeight 32 | import androidx.compose.ui.text.input.ImeAction 33 | import androidx.compose.ui.text.style.TextAlign 34 | import androidx.compose.ui.tooling.preview.Preview 35 | import androidx.compose.ui.unit.dp 36 | import androidx.compose.ui.unit.sp 37 | import com.arvind.nikeshop.R 38 | import com.arvind.nikeshop.model.Product 39 | import com.arvind.nikeshop.ui.theme.* 40 | import java.util.* 41 | 42 | @Preview(showBackground = true) 43 | @Composable 44 | fun HomeScreen() { 45 | Box(modifier = Modifier 46 | .fillMaxSize() 47 | .verticalScroll(rememberScrollState())) { 48 | Column(modifier = Modifier.padding(30.dp)) { 49 | TopAppBarHeader() 50 | Spacer(modifier = Modifier.padding(10.dp)) 51 | OurProductsWithSearch() 52 | Spacer(modifier = Modifier.padding(20.dp)) 53 | ProductCategory() 54 | Spacer(modifier = Modifier.padding(20.dp)) 55 | ProductWidget() 56 | } 57 | } 58 | 59 | 60 | } 61 | 62 | @Composable 63 | fun TopAppBarHeader() { 64 | Row( 65 | modifier = Modifier 66 | .fillMaxWidth(), 67 | horizontalArrangement = Arrangement.SpaceBetween, 68 | verticalAlignment = Alignment.Top 69 | ) { 70 | Card( 71 | modifier = Modifier 72 | .width(50.dp), 73 | elevation = 5.dp, 74 | shape = RoundedCornerShape(12.dp) 75 | ) { 76 | IconButton(onClick = { }) { 77 | Icon( 78 | imageVector = Icons.Outlined.Menu, 79 | contentDescription = "" 80 | ) 81 | 82 | } 83 | } 84 | 85 | Card( 86 | modifier = Modifier 87 | .size(50.dp), 88 | elevation = 5.dp, 89 | shape = RoundedCornerShape(12.dp) 90 | ) { 91 | Image(painter = painterResource(id = R.drawable.user), contentDescription = "User", 92 | modifier = Modifier.size(50.dp)) 93 | } 94 | 95 | } 96 | } 97 | 98 | @Composable 99 | fun OurProductsWithSearch() { 100 | var search by remember { mutableStateOf("") } 101 | 102 | Column(modifier = Modifier 103 | .fillMaxWidth(), 104 | verticalArrangement = Arrangement.Top) { 105 | 106 | Text( 107 | buildAnnotatedString { 108 | withStyle(style = ParagraphStyle(lineHeight = 30.sp)) { 109 | withStyle( 110 | style = SpanStyle( 111 | color = subTitleTextColor, 112 | fontSize = 24.sp)) { 113 | append("Our\n") 114 | } 115 | withStyle( 116 | style = SpanStyle( 117 | fontWeight = FontWeight.Bold, 118 | color = titleTextColor, 119 | fontSize = 24.sp 120 | ) 121 | ) { 122 | append("Products") 123 | } 124 | 125 | } 126 | } 127 | ) 128 | 129 | Row( 130 | verticalAlignment = Alignment.CenterVertically, 131 | horizontalArrangement = Arrangement.Start, 132 | modifier = Modifier 133 | .fillMaxWidth() 134 | .height(78.dp) 135 | .padding(top = 30.dp) 136 | ) { 137 | TextField( 138 | modifier = Modifier 139 | .weight(0.85f), 140 | colors = TextFieldDefaults.textFieldColors( 141 | backgroundColor = lightbox, 142 | focusedIndicatorColor = Color.Transparent, 143 | unfocusedIndicatorColor = Color.Transparent, 144 | ), 145 | value = search, 146 | shape = RoundedCornerShape(12.dp), 147 | singleLine = true, 148 | onValueChange = { search = it }, 149 | placeholder = { 150 | Text( 151 | text = "Search Products", 152 | color = lightGrey 153 | ) 154 | }, 155 | leadingIcon = { 156 | Icon( 157 | imageVector = Icons.Filled.Search, 158 | contentDescription = "", 159 | tint = lightblack 160 | ) 161 | }, 162 | ) 163 | Spacer(modifier = Modifier.width(5.dp)) 164 | Card( 165 | modifier = Modifier 166 | .width(60.dp) 167 | .padding(start = 16.dp) 168 | .clickable { }, 169 | elevation = 5.dp, 170 | shape = RoundedCornerShape(12.dp) 171 | ) { 172 | IconButton(onClick = { }) { 173 | Icon( 174 | painter = painterResource(R.drawable.filter_list), 175 | contentDescription = "Filter Icon", 176 | modifier = Modifier.size(20.dp, 20.dp) 177 | ) 178 | 179 | } 180 | } 181 | 182 | } 183 | 184 | } 185 | } 186 | 187 | @Composable 188 | fun ProductCategory() { 189 | val itemList = listOf("Sneakers", "Jacket", "Watch", "Watch") 190 | val categoryImagesList = listOf( 191 | R.drawable.shoe_thumb_2, 192 | R.drawable.jacket, 193 | R.drawable.watch, 194 | R.drawable.watch 195 | ) 196 | LazyRow(modifier = Modifier 197 | .fillMaxWidth()) { 198 | items(itemList.size) { item -> 199 | Box( 200 | modifier = Modifier 201 | .height(40.dp) 202 | .border( 203 | color = if (item == 0) orange else lightGrey, 204 | width = 2.dp, 205 | shape = RoundedCornerShape(10.dp) 206 | ) 207 | ) { 208 | Row(modifier = Modifier 209 | .fillMaxWidth() 210 | .padding(top = 2.dp), 211 | verticalAlignment = Alignment.CenterVertically, 212 | horizontalArrangement = Arrangement.Center) { 213 | Image(painter = painterResource(categoryImagesList[item]), contentDescription = "", 214 | modifier = Modifier.size(30.dp, 30.dp)) 215 | Text( 216 | modifier = Modifier 217 | .padding( 218 | start = 5.dp, 219 | end = 16.dp, 220 | top = 8.dp, 221 | bottom = 8.dp 222 | ), 223 | text = itemList[item], 224 | color = if (item == 0) lightblack else Color.LightGray 225 | ) 226 | } 227 | 228 | } 229 | Spacer(modifier = Modifier.width(10.dp)) 230 | } 231 | } 232 | } 233 | 234 | @Composable 235 | fun ProductWidget() { 236 | val productImagesList = listOf( 237 | R.drawable.shooe_tilt_1, 238 | R.drawable.shoe_tilt_2, 239 | ) 240 | val productTitleitemList = listOf("Nike Air Max 200", "Nike Air Max 97") 241 | val productTrendingitemList = listOf("Trending Now", "Best Selling") 242 | val productPriceitemList = listOf("240.00", "220.00") 243 | val productPriceTagitemList = listOf("$ ", "$ ") 244 | 245 | LazyRow(modifier = Modifier 246 | .fillMaxWidth() 247 | .wrapContentHeight(), 248 | contentPadding = PaddingValues(horizontal = 5.dp), 249 | horizontalArrangement = Arrangement.spacedBy(20.dp)) { 250 | items(productImagesList.size) { item -> 251 | Card(modifier = Modifier 252 | .width(180.dp) 253 | .wrapContentHeight(), 254 | shape = RoundedCornerShape(24.dp), 255 | elevation = 2.dp) { 256 | 257 | Column(modifier = Modifier 258 | .fillMaxWidth() 259 | .wrapContentHeight() 260 | .padding(12.dp)) { 261 | IconButton(onClick = { }) { 262 | Icon(imageVector = Icons.Outlined.FavoriteBorder, 263 | contentDescription = "", 264 | tint = lightGrey) 265 | 266 | } 267 | 268 | Box( 269 | modifier = Modifier 270 | .fillMaxWidth() 271 | .wrapContentSize() 272 | .clip(CircleShape) 273 | .background(lightorange), 274 | contentAlignment = Alignment.Center 275 | ) { 276 | Image( 277 | modifier = Modifier 278 | .size(100.dp), 279 | painter = painterResource(productImagesList[item]), 280 | contentDescription = "", 281 | ) 282 | } 283 | 284 | Column(modifier = Modifier 285 | .fillMaxWidth() 286 | .padding(top = 20.dp), 287 | horizontalAlignment = Alignment.CenterHorizontally, 288 | verticalArrangement = Arrangement.Center) { 289 | 290 | Text(text = productTitleitemList[item], 291 | fontWeight = FontWeight.Bold, 292 | fontSize = 16.sp, 293 | color = titleTextColor) 294 | 295 | Text(text = productTrendingitemList[item], 296 | fontWeight = FontWeight.Bold, 297 | fontSize = 16.sp, 298 | color = orange, 299 | modifier = Modifier.padding(bottom = 10.dp)) 300 | 301 | Text( 302 | text = buildAnnotatedString { 303 | withStyle( 304 | style = SpanStyle( 305 | orange, 306 | fontWeight = FontWeight.Bold 307 | ) 308 | ) { 309 | append(productPriceTagitemList[item]) 310 | } 311 | withStyle( 312 | style = SpanStyle( 313 | titleTextColor 314 | ) 315 | ) { 316 | append(productPriceitemList[item]) 317 | } 318 | }, 319 | style = MaterialTheme.typography.subtitle1, 320 | modifier = Modifier, 321 | fontSize = 16.sp 322 | 323 | ) 324 | } 325 | 326 | 327 | } 328 | } 329 | 330 | } 331 | } 332 | } 333 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/view/ProductDetailsScreen.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.view 2 | 3 | import android.widget.RatingBar 4 | import androidx.compose.foundation.* 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.lazy.LazyRow 7 | import androidx.compose.foundation.shape.CircleShape 8 | import androidx.compose.foundation.shape.RoundedCornerShape 9 | import androidx.compose.foundation.shape.ZeroCornerSize 10 | import androidx.compose.material.* 11 | import androidx.compose.material.icons.Icons 12 | import androidx.compose.material.icons.filled.Add 13 | import androidx.compose.material.icons.filled.ShoppingCart 14 | import androidx.compose.runtime.Composable 15 | import androidx.compose.runtime.mutableStateOf 16 | import androidx.compose.runtime.saveable.rememberSaveable 17 | import androidx.compose.ui.Alignment 18 | import androidx.compose.ui.Modifier 19 | import androidx.compose.ui.draw.clip 20 | import androidx.compose.ui.graphics.Color 21 | import androidx.compose.ui.layout.ContentScale 22 | import androidx.compose.ui.res.painterResource 23 | import androidx.compose.ui.res.stringResource 24 | import androidx.compose.ui.text.SpanStyle 25 | import androidx.compose.ui.text.buildAnnotatedString 26 | import androidx.compose.ui.text.font.FontWeight 27 | import androidx.compose.ui.text.style.TextAlign 28 | import androidx.compose.ui.text.withStyle 29 | import androidx.compose.ui.tooling.preview.Preview 30 | import androidx.compose.ui.unit.dp 31 | import androidx.compose.ui.unit.sp 32 | import androidx.constraintlayout.compose.ConstraintLayout 33 | import com.arvind.nikeshop.R 34 | import com.arvind.nikeshop.component.TopAppBarWithBack 35 | import com.arvind.nikeshop.ui.theme.* 36 | 37 | @Preview(showBackground = true) 38 | @Composable 39 | fun ProductDetailsScreen() { 40 | Scaffold( 41 | topBar = { 42 | TopAppBarWithBack( 43 | onBackClick = { 44 | 45 | }, 46 | ) 47 | }, backgroundColor = lightgraybg, 48 | floatingActionButton = { 49 | FloatingActionButton( 50 | onClick = { }, 51 | backgroundColor = orange 52 | ) { 53 | Icon( 54 | imageVector = Icons.Default.ShoppingCart, 55 | contentDescription = "Add To Cart", 56 | tint = white 57 | ) 58 | } 59 | }, 60 | 61 | content = { 62 | Box( 63 | modifier = Modifier 64 | .fillMaxSize() 65 | .verticalScroll(rememberScrollState()) 66 | ) { 67 | ConstraintLayout { 68 | val (imagesliderref, addtocartref) = createRefs() 69 | Box(modifier = Modifier 70 | .height(280.dp) 71 | .constrainAs(imagesliderref) { 72 | top.linkTo(imagesliderref.top) 73 | bottom.linkTo(imagesliderref.top) 74 | start.linkTo(parent.start) 75 | end.linkTo(parent.end) 76 | }) { 77 | HeaderImagesSlider() 78 | } 79 | Surface( 80 | color = white, 81 | shape = RoundedCornerShape(40.dp) 82 | .copy( 83 | bottomStart = ZeroCornerSize, 84 | bottomEnd = ZeroCornerSize 85 | ), 86 | modifier = Modifier 87 | .fillMaxSize() 88 | .padding(top = 300.dp) 89 | .constrainAs(addtocartref) { 90 | bottom.linkTo(parent.bottom) 91 | start.linkTo(parent.start) 92 | end.linkTo(parent.end) 93 | } 94 | ) { 95 | Column( 96 | modifier = Modifier 97 | .fillMaxSize() 98 | .padding(30.dp) 99 | ) { 100 | ProductTitle() 101 | Spacer(modifier = Modifier.padding(10.dp)) 102 | ProductAvailableSize() 103 | Spacer(modifier = Modifier.padding(10.dp)) 104 | ProductItemColorWithDesc() 105 | } 106 | 107 | 108 | } 109 | 110 | } 111 | 112 | } 113 | } 114 | ) 115 | 116 | } 117 | 118 | 119 | @Composable 120 | fun HeaderImagesSlider() { 121 | val showThumbImagesList = listOf( 122 | R.drawable.show_1, 123 | R.drawable.shoe_thumb_1, 124 | R.drawable.shoe_thumb_4, 125 | R.drawable.shoe_thumb_3 126 | ) 127 | Column( 128 | verticalArrangement = Arrangement.Top, 129 | horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier 130 | .fillMaxWidth() 131 | .fillMaxHeight() 132 | ) { 133 | Image( 134 | contentScale = ContentScale.Fit, 135 | painter = painterResource(id = R.drawable.show_1), 136 | contentDescription = "", 137 | modifier = Modifier 138 | .size(230.dp) 139 | ) 140 | 141 | LazyRow( 142 | modifier = Modifier 143 | .fillMaxWidth() 144 | .padding(horizontal = 16.dp), 145 | horizontalArrangement = Arrangement.spacedBy(10.dp) 146 | ) { 147 | items(showThumbImagesList.size) { item -> 148 | Box( 149 | modifier = Modifier 150 | .height(60.dp) 151 | .width(62.dp) 152 | .border( 153 | color = if (item == 0) orange else lightGrey, 154 | width = 2.dp, 155 | shape = RoundedCornerShape(16.dp) 156 | ) 157 | .clickable { }) { 158 | Image( 159 | painter = painterResource(showThumbImagesList[item]), 160 | contentDescription = "", 161 | modifier = Modifier 162 | .size(50.dp, 50.dp) 163 | .padding( 164 | start = 10.dp, 165 | end = 5.dp, 166 | top = 5.dp, 167 | bottom = 5.dp 168 | ) 169 | ) 170 | 171 | } 172 | Spacer(modifier = Modifier.width(10.dp)) 173 | } 174 | } 175 | } 176 | } 177 | 178 | @Composable 179 | fun ProductTitle() { 180 | Column( 181 | modifier = Modifier.fillMaxWidth(), 182 | horizontalAlignment = Alignment.CenterHorizontally 183 | ) { 184 | Divider( 185 | color = grey, 186 | modifier = Modifier 187 | .height(4.dp) 188 | .width(40.dp) 189 | ) 190 | Spacer(modifier = Modifier.padding(5.dp)) 191 | 192 | Row( 193 | modifier = Modifier.fillMaxWidth(), 194 | verticalAlignment = Alignment.CenterVertically, 195 | horizontalArrangement = Arrangement.SpaceBetween 196 | ) { 197 | Text( 198 | text = "NIKE AIR MAX 200", 199 | color = titleTextColor, 200 | fontSize = 24.sp, 201 | fontWeight = FontWeight.Bold 202 | ) 203 | 204 | Column(modifier = Modifier.wrapContentHeight()) { 205 | Text( 206 | text = buildAnnotatedString { 207 | withStyle( 208 | style = SpanStyle( 209 | orange, 210 | fontWeight = FontWeight.Bold 211 | ) 212 | ) { 213 | append("$ ") 214 | } 215 | withStyle( 216 | style = SpanStyle( 217 | titleTextColor 218 | ) 219 | ) { 220 | append("240") 221 | } 222 | }, 223 | style = MaterialTheme.typography.subtitle1, 224 | modifier = Modifier, 225 | fontSize = 16.sp 226 | 227 | ) 228 | 229 | 230 | } 231 | } 232 | } 233 | } 234 | 235 | @Composable 236 | fun ProductAvailableSize() { 237 | val itemListavailablesize = listOf("US6", "US7", "US8", "US9") 238 | Column(modifier = Modifier.fillMaxWidth()) { 239 | 240 | Text( 241 | text = "Available Sizes", 242 | color = titleTextColor, 243 | fontSize = 18.sp 244 | ) 245 | Spacer(modifier = Modifier.padding(10.dp)) 246 | 247 | LazyRow( 248 | modifier = Modifier 249 | .fillMaxWidth() 250 | ) { 251 | items(itemListavailablesize.size) { item -> 252 | Box( 253 | modifier = Modifier 254 | .height(40.dp) 255 | .width(70.dp) 256 | .border( 257 | color = if (item == 1) orange else lightGrey, 258 | width = 2.dp, 259 | shape = RoundedCornerShape(10.dp) 260 | ) 261 | .clickable { }) { 262 | Text( 263 | modifier = Modifier 264 | .padding( 265 | start = 20.dp, 266 | end = 16.dp, 267 | top = 10.dp, 268 | bottom = 8.dp 269 | ), 270 | text = itemListavailablesize[item], 271 | fontWeight = FontWeight.Bold, 272 | color = if (item == 1) titleTextColor else Color.LightGray 273 | ) 274 | 275 | 276 | } 277 | Spacer(modifier = Modifier.width(10.dp)) 278 | } 279 | } 280 | } 281 | } 282 | 283 | @Composable 284 | fun ProductItemColorWithDesc() { 285 | Column(modifier = Modifier.fillMaxWidth()) { 286 | Text( 287 | text = "Color", 288 | color = titleTextColor, 289 | fontSize = 18.sp 290 | ) 291 | Spacer(modifier = Modifier.padding(10.dp)) 292 | 293 | Row( 294 | modifier = Modifier 295 | .fillMaxWidth(), 296 | horizontalArrangement = Arrangement.spacedBy(16.dp), 297 | verticalAlignment = Alignment.CenterVertically 298 | ) { 299 | Box( 300 | modifier = Modifier 301 | .size(30.dp) 302 | .clip(shape = CircleShape) 303 | .background(orange) 304 | .clickable { } 305 | ) 306 | Box( 307 | modifier = Modifier 308 | .size(30.dp) 309 | .clip(shape = CircleShape) 310 | .background(lightBlue) 311 | .clickable { } 312 | ) 313 | Box( 314 | modifier = Modifier 315 | .size(30.dp) 316 | .clip(shape = CircleShape) 317 | .background(black) 318 | .clickable { } 319 | ) 320 | Box( 321 | modifier = Modifier 322 | .size(30.dp) 323 | .clip(shape = CircleShape) 324 | .background(red) 325 | .clickable { } 326 | ) 327 | Box( 328 | modifier = Modifier 329 | .size(30.dp) 330 | .clip(shape = CircleShape) 331 | .background(skyBlue) 332 | .clickable { } 333 | ) 334 | } 335 | Spacer(modifier = Modifier.padding(10.dp)) 336 | Text( 337 | text = "Description", 338 | color = titleTextColor, 339 | fontSize = 18.sp 340 | ) 341 | Spacer(modifier = Modifier.padding(5.dp)) 342 | Text( 343 | text = stringResource(id = R.string.product_text_description), 344 | color = lightblack, 345 | fontSize = 14.sp 346 | ) 347 | } 348 | 349 | } 350 | 351 | 352 | 353 | 354 | 355 | -------------------------------------------------------------------------------- /app/src/main/java/com/arvind/nikeshop/view/SplashScreen.kt: -------------------------------------------------------------------------------- 1 | package com.arvind.nikeshop.view 2 | 3 | import android.view.animation.OvershootInterpolator 4 | import androidx.compose.animation.core.Animatable 5 | import androidx.compose.animation.core.tween 6 | import androidx.compose.foundation.Image 7 | import androidx.compose.foundation.layout.Box 8 | import androidx.compose.foundation.layout.fillMaxSize 9 | import androidx.compose.foundation.layout.size 10 | import androidx.compose.runtime.Composable 11 | import androidx.compose.runtime.LaunchedEffect 12 | import androidx.compose.runtime.remember 13 | import androidx.compose.ui.Alignment 14 | import androidx.compose.ui.Modifier 15 | import androidx.compose.ui.res.painterResource 16 | import androidx.compose.ui.unit.dp 17 | import androidx.navigation.NavController 18 | import com.arvind.nikeshop.R 19 | import com.arvind.nikeshop.navigation.Screen 20 | import com.arvind.nikeshop.utils.Constants 21 | import kotlinx.coroutines.CoroutineDispatcher 22 | import kotlinx.coroutines.Dispatchers 23 | import kotlinx.coroutines.delay 24 | import kotlinx.coroutines.withContext 25 | 26 | @Composable 27 | fun SplashScreen( 28 | navController: NavController, 29 | dispatcher: CoroutineDispatcher = Dispatchers.Main 30 | ) { 31 | val scale = remember { 32 | Animatable(0f) 33 | } 34 | val overshootInterpolator = remember { 35 | OvershootInterpolator(2f) 36 | } 37 | LaunchedEffect(key1 = true) { 38 | withContext(dispatcher) { 39 | scale.animateTo( 40 | targetValue = 0.5f, 41 | animationSpec = tween( 42 | durationMillis = 500, 43 | easing = { 44 | overshootInterpolator.getInterpolation(it) 45 | } 46 | ) 47 | ) 48 | delay(Constants.SPLASH_SCREEN_DURATION) 49 | navController.popBackStack() 50 | navController.navigate(Screen.HomeScreen.route) 51 | } 52 | } 53 | 54 | Box( 55 | modifier = Modifier.fillMaxSize(), 56 | contentAlignment = Alignment.Center 57 | ) { 58 | Image( 59 | painter = painterResource(id = R.drawable.app_logo), 60 | contentDescription = "Logo", 61 | modifier = Modifier.size(128.dp) 62 | ) 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/jacket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/jacket.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_thumb_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_thumb_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_thumb_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_thumb_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_thumb_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_thumb_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_thumb_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_thumb_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_thumb_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_thumb_5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shoe_tilt_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shoe_tilt_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/shooe_tilt_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/shooe_tilt_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/show_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/show_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/small_tilt_shoe_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/small_tilt_shoe_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/small_tilt_shoe_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/small_tilt_shoe_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/small_tilt_shoe_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/small_tilt_shoe_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/user.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/watch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-nodpi/watch.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable-v24/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/drawable/filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_favorite_border_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_home_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_search_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meshramaravind/E-commerceShopAppUI-Android/ad06a890e9e7d039fa23b2680aead2224d9fb58d/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | 11 | #E65829 12 | #E65829 13 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #DC553D 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | NikeShop 3 | 4 | 5 | Clean lines, versatile and timeless—the people shoe 6 | returns with the Nike Air Max 90. 7 | Featuring the same iconic Waffle sole, 8 | stitched overlays and classic TPU accents 9 | you come to love, it lets you walk among 10 | the pantheon of Air. ßNothing as fly, 11 | nothing as comfortable, nothing as proven. 12 | The Nike Air Max 90 stays true to its OG running 13 | roots with the iconic Waffle sole, 14 | stitched overlays and classic TPU details. 15 | Classic colours celebrate your fresh look 16 | while Max Air cushioning adds comfort to the journey. 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 23 | 24 |