diff --git a/.github/workflows/android-test.yml b/.github/workflows/android-test.yml
index b7cf7ac0b..e89b8c15f 100644
--- a/.github/workflows/android-test.yml
+++ b/.github/workflows/android-test.yml
@@ -145,5 +145,13 @@ jobs:
- name: Kotlin Lint
run: ./gradlew detekt
- - name: Android Lint
- run: ./gradlew lintRelease
+ - name: Setup sample app environment
+ run: ${{ github.workspace }}/scripts/setup_storefront_env --skip-optional-prompts
+ env:
+ STOREFRONT_DOMAIN: example.myshopify.com
+ STOREFRONT_ACCESS_TOKEN: test-token
+
+ - name: Sample static analysis and Android Lint
+ run: |
+ ./gradlew lintRelease
+ ./gradlew -p samples/CheckoutKitAndroidDemo :app:detekt :app:lintRelease
diff --git a/dev.yml b/dev.yml
index d4b169f4f..cbef96246 100644
--- a/dev.yml
+++ b/dev.yml
@@ -55,7 +55,10 @@ check:
storefront-env-tests: ./scripts/test_setup_storefront_env
ruby-script-tests: ./scripts/test_ruby
android-detekt: platforms/android/gradlew -p platforms/android detekt
- android-lint: platforms/android/gradlew -p platforms/android lintRelease
+ android-lint: |
+ scripts/check_storefront_env
+ platforms/android/gradlew -p platforms/android lintRelease
+ platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:lintRelease
swift-lint: cd platforms/swift && ./Scripts/lint
react-native-lint-swift: cd platforms/react-native && ./scripts/lint_swift
react-native-lint-module: cd platforms/react-native && pnpm module lint
@@ -252,14 +255,20 @@ commands:
platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:testDebugUnitTest --console=plain
lint:
- desc: Check code style and lint (detekt + Android lint)
+ desc: Check code style and lint (detekt + Android lint, including the sample)
aliases: [style]
- run: platforms/android/gradlew -p platforms/android detekt lintRelease
+ run: |
+ scripts/check_storefront_env
+ platforms/android/gradlew -p platforms/android detekt lintRelease
+ platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:detekt :app:lintRelease
format:
- desc: Auto-format and apply safe lint autocorrections
+ desc: Auto-format and apply safe lint autocorrections, including the sample
aliases: [fix]
- run: platforms/android/gradlew -p platforms/android detekt --auto-correct
+ run: |
+ scripts/check_storefront_env
+ platforms/android/gradlew -p platforms/android detekt --auto-correct
+ platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:detekt --auto-correct
check:
desc: Run all Android checks (detekt, Android lint)
@@ -269,11 +278,17 @@ commands:
/opt/dev/bin/dev android check android-lint
subcommands:
detekt:
- desc: Run detekt static analysis
- run: platforms/android/gradlew -p platforms/android detekt
+ desc: Run detekt static analysis, including the sample
+ run: |
+ scripts/check_storefront_env
+ platforms/android/gradlew -p platforms/android detekt
+ platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:detekt
android-lint:
- desc: Run Android lint
- run: platforms/android/gradlew -p platforms/android lintRelease
+ desc: Run Android lint, including the sample
+ run: |
+ scripts/check_storefront_env
+ platforms/android/gradlew -p platforms/android lintRelease
+ platforms/android/samples/CheckoutKitAndroidDemo/gradlew -p platforms/android/samples/CheckoutKitAndroidDemo :app:lintRelease
clean:
desc: Clean Android Gradle build outputs
diff --git a/platforms/android/lib/src/main/res/layout/checkout_view_content.xml b/platforms/android/lib/src/main/res/layout/checkout_view_content.xml
index 2171b0a42..6d641c104 100644
--- a/platforms/android/lib/src/main/res/layout/checkout_view_content.xml
+++ b/platforms/android/lib/src/main/res/layout/checkout_view_content.xml
@@ -10,6 +10,7 @@
android:layout_height="wrap_content"
android:elevation="0dp"
android:minHeight="?attr/actionBarSize"
+ android:paddingStart="4dp"
android:paddingEnd="4dp"
android:theme="@style/Theme.AppCompat.DayNight"
app:contentInsetStart="22dp"
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/build.gradle b/platforms/android/samples/CheckoutKitAndroidDemo/app/build.gradle
index 76fefc336..da6e24337 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/build.gradle
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/build.gradle
@@ -5,6 +5,7 @@ plugins {
id 'com.google.devtools.ksp'
id 'org.jetbrains.kotlin.plugin.compose'
id 'com.apollographql.apollo'
+ id 'io.gitlab.arturbosch.detekt'
}
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
@@ -94,6 +95,14 @@ android {
}
}
+ lint {
+ checkDependencies = true
+ warningsAsErrors = true
+ disable 'GradleDependency', 'NewerVersionAvailable', 'SimilarGradleDependency'
+ warning 'LintBaseline'
+ informational 'AndroidGradlePluginVersion'
+ }
+
buildTypes {
release {
minifyEnabled = false
@@ -130,7 +139,15 @@ tasks.withType(KotlinJvmCompile).configureEach {
}
+detekt {
+ buildUponDefaultConfig = false
+ config.setFrom('../detekt.config.yml')
+ autoCorrect = true
+}
+
dependencies {
+ detektPlugins libs.detekt.formatting
+
// Checkout Kit
implementation project(':lib')
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/lint.xml b/platforms/android/samples/CheckoutKitAndroidDemo/app/lint.xml
new file mode 100644
index 000000000..b190123c9
--- /dev/null
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/lint.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/AndroidManifest.xml b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/AndroidManifest.xml
index 57a174da6..25c4c3137 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/AndroidManifest.xml
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/AndroidManifest.xml
@@ -50,12 +50,13 @@
android:supportsRtl="true"
android:theme="@style/Theme.Androidsample"
tools:targetApi="33">
+
+ tools:ignore="LockedOrientationActivity,DiscouragedApi">
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/CheckoutKitApp.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/CheckoutKitApp.kt
index 23a392f16..22780da49 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/CheckoutKitApp.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/CheckoutKitApp.kt
@@ -27,14 +27,13 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
@@ -58,7 +57,6 @@ import com.shopify.checkout_kit_android_demo.settings.SettingsUiState
import com.shopify.checkout_kit_android_demo.settings.SettingsViewModel
import com.shopify.checkoutkit.CheckoutAppearance
import com.shopify.checkoutkit.ColorScheme
-import kotlinx.coroutines.launch
import org.koin.androidx.compose.koinViewModel
@Composable
@@ -83,7 +81,6 @@ fun CheckoutKitAppRoot(
val cartState = cartViewModel.cartState.collectAsState()
val totalQuantity = cartState.value.totalQuantity
val activity = LocalActivity.current as ComponentActivity
- val context = LocalContext.current
CheckoutKitSampleTheme(darkTheme = useDarkTheme) {
val checkoutAppearance = (settingsUiState as? SettingsUiState.Loaded)?.settings?.appearance
@@ -101,13 +98,20 @@ fun CheckoutKitAppRoot(
val navController = rememberNavController()
var currentScreen by remember { mutableStateOf(Screen.Product) }
var presentedCheckoutUrl by remember { mutableStateOf(null) }
- val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
+ var snackbarResourceId by remember { mutableStateOf(null) }
+ var snackbarEventId by remember { mutableIntStateOf(0) }
+ val snackbarMessage = snackbarResourceId?.let { stringResource(it) }
ObserveAsEvents(flow = SnackbarController.events) { event ->
- scope.launch {
+ snackbarResourceId = event.resourceId
+ snackbarEventId++
+ }
+
+ LaunchedEffect(snackbarEventId) {
+ snackbarMessage?.let { message ->
snackbarHostState.currentSnackbarData?.dismiss()
- snackbarHostState.showSnackbar(message = context.resources.getText(event.resourceId).toString())
+ snackbarHostState.showSnackbar(message = message)
}
}
@@ -147,7 +151,8 @@ fun CheckoutKitAppRoot(
containerColor = MaterialTheme.colorScheme.primary,
contentColor = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier.offset(
- x = -(7.5.dp), y = 20.dp
+ x = -(7.5.dp),
+ y = 20.dp
)
) {
Text("$totalQuantity")
@@ -157,7 +162,9 @@ fun CheckoutKitAppRoot(
Icon(
modifier = Modifier.height(48.dp),
painter = painterResource(id = R.drawable.cart),
- contentDescription = stringResource(id = R.string.cart_icon_content_description),
+ contentDescription = stringResource(
+ id = R.string.cart_icon_content_description
+ ),
)
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/MainActivity.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/MainActivity.kt
index 74f39805c..06635f974 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/MainActivity.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/MainActivity.kt
@@ -87,7 +87,9 @@ class MainActivity : ComponentActivity() {
} else {
geolocationPermissionCallback = callback
geolocationOrigin = origin
- geolocationLauncher.launch(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
+ geolocationLauncher.launch(
+ arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
+ )
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartItem.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartItem.kt
index 20f5b9a87..e9247f065 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartItem.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartItem.kt
@@ -1,6 +1,5 @@
package com.shopify.checkout_kit_android_demo.cart
-
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartView.kt
index 21fbdc533..2a1d9bba6 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartView.kt
@@ -22,9 +22,9 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
@@ -57,7 +57,6 @@ fun CartView(
cartViewModel: CartViewModel,
onPresentAppOwnedCheckout: (String) -> Unit,
) {
-
val state = cartViewModel.cartState.collectAsState().value
val loading = cartViewModel.loadingState.collectAsState().value
val checkoutPresentationMode = cartViewModel.checkoutPresentationMode.collectAsState().value
@@ -153,7 +152,10 @@ private fun CartLines(
}
}
item {
- Column(verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier.padding(bottom = verticalPadding)) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(10.dp),
+ modifier = Modifier.padding(bottom = verticalPadding)
+ ) {
Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) {
Text(
text = stringResource(id = R.string.cart_product_header),
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartViewModel.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartViewModel.kt
index 047e54d67..c3d800571 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartViewModel.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/CartViewModel.kt
@@ -27,7 +27,6 @@ import com.shopify.checkoutkit.CheckoutPreload
import com.shopify.checkoutkit.CheckoutPresentation
import com.shopify.checkoutkit.CheckoutProtocol
import com.shopify.checkoutkit.ShopifyCheckoutKit
-import com.shopify.ucp.embedded.checkout.Checkout
import com.shopify.ucp.embedded.checkout.WindowOpenResult
import com.shopify.ucp.embedded.checkout.windowOpenRejected
import com.shopify.ucp.embedded.checkout.windowOpenSuccess
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/data/CartState.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/data/CartState.kt
index 035b49382..642666db5 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/data/CartState.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/cart/data/CartState.kt
@@ -13,7 +13,6 @@ sealed class CartState {
val cartTotals: CartTotals,
val checkoutUrl: String,
) : CartState()
-
}
data class CartLine(
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/components/QuantitySelector.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/components/QuantitySelector.kt
index 3b0961bbe..c8b79b626 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/components/QuantitySelector.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/components/QuantitySelector.kt
@@ -22,7 +22,8 @@ fun QuantitySelector(
TextButton(
modifier = Modifier.width(40.dp),
enabled = enabled,
- onClick = { if (quantity > 1) setQuantity(quantity - 1) }) {
+ onClick = { if (quantity > 1) setQuantity(quantity - 1) }
+ ) {
Text("-")
}
Text(
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/di/AppModule.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/di/AppModule.kt
index 267657b5e..ee8529dfb 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/di/AppModule.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/di/AppModule.kt
@@ -9,12 +9,12 @@ import com.shopify.checkout_kit_android_demo.BuildConfig
import com.shopify.checkout_kit_android_demo.cart.CartViewModel
import com.shopify.checkout_kit_android_demo.cart.data.CartRepository
import com.shopify.checkout_kit_android_demo.common.client.StorefrontApiClient
-import com.shopify.checkout_kit_android_demo.graphql.cache.Cache.cache
import com.shopify.checkout_kit_android_demo.common.logs.LogDatabase
import com.shopify.checkout_kit_android_demo.common.logs.Logger
import com.shopify.checkout_kit_android_demo.common.logs.MIGRATION_1_2
import com.shopify.checkout_kit_android_demo.common.logs.MIGRATION_2_3
import com.shopify.checkout_kit_android_demo.common.logs.MIGRATION_3_4
+import com.shopify.checkout_kit_android_demo.graphql.cache.Cache.cache
import com.shopify.checkout_kit_android_demo.home.HomeViewModel
import com.shopify.checkout_kit_android_demo.logs.LogsViewModel
import com.shopify.checkout_kit_android_demo.products.ProductsViewModel
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/logs/LogDatabase.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/logs/LogDatabase.kt
index fe98f04d5..1ba7ad516 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/logs/LogDatabase.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/logs/LogDatabase.kt
@@ -6,24 +6,24 @@ import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
@Database(
- entities = [LogLine::class],
- version = 4,
- exportSchema = false,
+ entities = [LogLine::class],
+ version = 4,
+ exportSchema = false,
)
abstract class LogDatabase : RoomDatabase() {
- abstract fun logDao(): LogDao
+ abstract fun logDao(): LogDao
}
val MIGRATION_1_2 = object : Migration(1, 2) {
- override fun migrate(db: SupportSQLiteDatabase) {
- db.execSQL("ALTER TABLE LogLine ADD COLUMN checkout_completedorderDetails TEXT")
- }
+ override fun migrate(db: SupportSQLiteDatabase) {
+ db.execSQL("ALTER TABLE LogLine ADD COLUMN checkout_completedorderDetails TEXT")
+ }
}
val MIGRATION_2_3 = object : Migration(2, 3) {
- override fun migrate(db: SupportSQLiteDatabase) {
- db.execSQL(
- """
+ override fun migrate(db: SupportSQLiteDatabase) {
+ db.execSQL(
+ """
CREATE TABLE LogLine_new (
id BLOB NOT NULL PRIMARY KEY,
createdAt INTEGER NOT NULL,
@@ -33,25 +33,25 @@ val MIGRATION_2_3 = object : Migration(2, 3) {
error_detailsmessage TEXT,
checkout_completedorderDetails TEXT
)
- """.trimIndent()
- )
- db.execSQL(
- """
+ """.trimIndent()
+ )
+ db.execSQL(
+ """
INSERT INTO LogLine_new (id, createdAt, message, type, error_detailstype, error_detailsmessage, checkout_completedorderDetails)
SELECT id, createdAt, message, type, error_detailstype, error_detailsmessage, checkout_completedorderDetails
FROM LogLine
WHERE type IN ('STANDARD', 'ERROR', 'CHECKOUT_COMPLETED')
- """.trimIndent()
- )
- db.execSQL("DROP TABLE LogLine")
- db.execSQL("ALTER TABLE LogLine_new RENAME TO LogLine")
- }
+ """.trimIndent()
+ )
+ db.execSQL("DROP TABLE LogLine")
+ db.execSQL("ALTER TABLE LogLine_new RENAME TO LogLine")
+ }
}
val MIGRATION_3_4 = object : Migration(3, 4) {
- override fun migrate(db: SupportSQLiteDatabase) {
- db.execSQL(
- """
+ override fun migrate(db: SupportSQLiteDatabase) {
+ db.execSQL(
+ """
CREATE TABLE LogLine_new (
id BLOB NOT NULL PRIMARY KEY,
createdAt INTEGER NOT NULL,
@@ -60,10 +60,10 @@ val MIGRATION_3_4 = object : Migration(3, 4) {
level TEXT NOT NULL,
payload TEXT
)
- """.trimIndent()
- )
- db.execSQL(
- """
+ """.trimIndent()
+ )
+ db.execSQL(
+ """
INSERT INTO LogLine_new (id, createdAt, message, source, level, payload)
SELECT
id,
@@ -80,9 +80,9 @@ val MIGRATION_3_4 = object : Migration(3, 4) {
END
FROM LogLine
WHERE type IN ('STANDARD', 'ERROR', 'CHECKOUT_COMPLETED')
- """.trimIndent()
- )
- db.execSQL("DROP TABLE LogLine")
- db.execSQL("ALTER TABLE LogLine_new RENAME TO LogLine")
- }
+ """.trimIndent()
+ )
+ db.execSQL("DROP TABLE LogLine")
+ db.execSQL("ALTER TABLE LogLine_new RENAME TO LogLine")
+ }
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/navigation/CheckoutKitNavHost.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/navigation/CheckoutKitNavHost.kt
index c36c185b9..25d91e818 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/navigation/CheckoutKitNavHost.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/common/navigation/CheckoutKitNavHost.kt
@@ -40,7 +40,10 @@ sealed class Screen(val route: String) {
}
fun route(collectionHandle: String): String {
- return route.replace("{collectionHandle}", URLEncoder.encode(collectionHandle, StandardCharsets.UTF_8.name()))
+ return route.replace(
+ "{collectionHandle}",
+ URLEncoder.encode(collectionHandle, StandardCharsets.UTF_8.name())
+ )
}
}
@@ -81,7 +84,6 @@ fun CheckoutKitNavHost(
navController = navController,
startDestination = startDestination,
) {
-
composable(Screen.Home.route) {
HomeView(navController)
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/Featured.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/Featured.kt
index fb1be6cc5..87c275706 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/Featured.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/Featured.kt
@@ -41,7 +41,6 @@ fun Featured(
.padding(start = 15.dp, end = 15.dp, top = 30.dp)
.fillMaxSize()
) {
-
Header3(
resourceId = R.string.featured_title,
modifier = Modifier,
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HeroImage.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HeroImage.kt
index ab65867ac..d9068f112 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HeroImage.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HeroImage.kt
@@ -16,7 +16,8 @@ import com.shopify.checkout_kit_android_demo.R
@Composable
fun HeroImage() {
Surface(
- color = Color.Black, modifier = Modifier
+ color = Color.Black,
+ modifier = Modifier
.fillMaxWidth()
.alpha(0.75f)
) {
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HomeView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HomeView.kt
index 11943d529..aa4f7dc23 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HomeView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/home/HomeView.kt
@@ -20,7 +20,6 @@ fun HomeView(
navController: NavController,
homeViewModel: HomeViewModel = koinViewModel()
) {
-
LaunchedEffect(key1 = true) {
homeViewModel.fetchHomePageData()
}
@@ -50,7 +49,12 @@ fun HomeView(
is HomeUIState.Loaded -> {
ProductCollections(
productCollections = homeUiState.productCollections,
- onClick = { collectionHandle -> homeViewModel.productCollectionSelected(navController, collectionHandle) }
+ onClick = { collectionHandle ->
+ homeViewModel.productCollectionSelected(
+ navController,
+ collectionHandle
+ )
+ }
)
Featured(homeUiState.productCollections.firstOrNull()?.products ?: emptyList()) { productId: ID ->
homeViewModel.productSelected(navController, productId)
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsView.kt
index b98525dda..42ea3d165 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsView.kt
@@ -58,7 +58,6 @@ fun LogsView(logsViewModel: LogsViewModel) {
.fillMaxSize()
.padding(horizontal = horizontalPadding, vertical = verticalPadding)
) {
-
Button(shape = RectangleShape, onClick = {
logsViewModel.clear()
}) {
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsViewModel.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsViewModel.kt
index 70335e3d2..23d07e8a8 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsViewModel.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/LogsViewModel.kt
@@ -12,7 +12,7 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import java.util.Date
-class LogsViewModel(private val logDb: LogDatabase): ViewModel() {
+class LogsViewModel(private val logDb: LogDatabase) : ViewModel() {
private val _logState = MutableStateFlow(LogState.Loading)
val logState: StateFlow = _logState.asStateFlow()
@@ -44,14 +44,13 @@ class LogsViewModel(private val logDb: LogDatabase): ViewModel() {
checkoutId = checkoutContext?.checkoutId,
previousCheckoutPayload = checkoutContext?.previousCheckoutPayload,
)
-
}
sealed class LogState {
- data object Loading: LogState()
+ data object Loading : LogState()
data class Populated(
val groups: List
- ): LogState()
+ ) : LogState()
}
data class CheckoutLogGroup(
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/details/LogDetailModal.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/details/LogDetailModal.kt
index f27ae9d0b..c9e96f59b 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/details/LogDetailModal.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/logs/details/LogDetailModal.kt
@@ -11,7 +11,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.window.Dialog
@@ -23,7 +22,10 @@ fun LogDetailModal(
logLine: LogLine?,
previousCheckoutPayload: String?,
onDismissRequest: () -> Unit,
- prettyJson: Json = Json { prettyPrint = true; prettyPrintIndent = " " }
+ prettyJson: Json = Json {
+ prettyPrint = true
+ prettyPrintIndent = " "
+ }
) {
Dialog(onDismissRequest = { onDismissRequest() }) {
Card(
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/ProductsView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/ProductsView.kt
index ddae6edbf..45fd05d7e 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/ProductsView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/ProductsView.kt
@@ -46,7 +46,6 @@ fun ProductsView(
navController: NavController,
productsViewModel: ProductsViewModel = koinViewModel(),
) {
-
val pager = remember {
Pager(PagingConfig(pageSize = 10)) {
productsViewModel.pagingSource
@@ -115,11 +114,14 @@ fun Product(
imageHeight: Dp,
onProductClick: (id: ID) -> Unit,
) {
- Column(verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier
- .wrapContentWidth()
- .clickable {
- onProductClick(product.id)
- }) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(10.dp),
+ modifier = Modifier
+ .wrapContentWidth()
+ .clickable {
+ onProductClick(product.id)
+ }
+ ) {
RemoteImage(
url = product.image?.url,
altText = product.image?.altText ?: stringResource(id = R.string.product_alt_text_default),
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionProduct.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionProduct.kt
index 4aae6f95e..225edfad8 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionProduct.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionProduct.kt
@@ -35,12 +35,14 @@ fun ProductCollectionProduct(
) {
BoxWithConstraints {
val largeScreen = maxWidth >= largeScreenBreakpoint
- Column(verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier
- .fillMaxWidth(.49f)
- .clickable {
- onProductClick(product.id)
- }) {
-
+ Column(
+ verticalArrangement = Arrangement.spacedBy(10.dp),
+ modifier = Modifier
+ .fillMaxWidth(.49f)
+ .clickable {
+ onProductClick(product.id)
+ }
+ ) {
RemoteImage(
url = product.image?.url,
altText = product.image?.altText ?: stringResource(id = R.string.featured_default_alt_text),
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionView.kt
index 0f9663aa5..ddfd56cca 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollectionView.kt
@@ -84,7 +84,12 @@ fun ProductCollectionView(
ProductCollectionProduct(
product = collectionProduct,
textColor = MaterialTheme.colorScheme.onBackground,
- onProductClick = { productId -> productCollectionViewModel.productSelected(navController, productId) }
+ onProductClick = { productId ->
+ productCollectionViewModel.productSelected(
+ navController,
+ productId
+ )
+ }
)
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollections.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollections.kt
index 765304372..2d396ec18 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollections.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/ProductCollections.kt
@@ -66,12 +66,13 @@ fun ProductCollection(
onClick: (String) -> Unit,
modifier: Modifier,
) {
- Column(modifier = Modifier
- .padding(bottom = verticalPadding)
- .clickable {
- onClick(handle)
- }) {
-
+ Column(
+ modifier = Modifier
+ .padding(bottom = verticalPadding)
+ .clickable {
+ onClick(handle)
+ }
+ ) {
RemoteImage(
url = image?.url,
altText = image?.altText ?: stringResource(R.string.collection_img_alt_default),
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/data/ProductCollectionRepository.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/data/ProductCollectionRepository.kt
index 93aa80dce..eb491007b 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/data/ProductCollectionRepository.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/collection/data/ProductCollectionRepository.kt
@@ -8,7 +8,10 @@ import kotlinx.coroutines.flow.map
class ProductCollectionRepository(
private val client: StorefrontApiClient,
) {
- suspend fun getProductCollections(numberOfCollections: Int, numberOfProductsPerCollection: Int): List {
+ suspend fun getProductCollections(
+ numberOfCollections: Int,
+ numberOfProductsPerCollection: Int
+ ): List {
return observeProductCollections(numberOfCollections, numberOfProductsPerCollection).last()
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/OptionSelector.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/OptionSelector.kt
index 6d62a59bd..50216a5d2 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/OptionSelector.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/OptionSelector.kt
@@ -22,7 +22,6 @@ fun OptionSelector(
) {
availableOptions.forEach { (optionName, optionValues) ->
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
-
BodySmall(optionName)
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductView.kt
index d5c437779..7a70d808f 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductView.kt
@@ -36,7 +36,6 @@ fun ProductView(
productId: String,
productViewModel: ProductViewModel = koinViewModel(),
) {
-
LaunchedEffect(key1 = true) {
productViewModel.fetchProduct(productId)
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductViewModel.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductViewModel.kt
index 428367f6b..17798a96f 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductViewModel.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/products/product/ProductViewModel.kt
@@ -117,7 +117,8 @@ class ProductViewModel(
}?.availableForSale ?: false,
)
}
- })
+ }
+ )
}
// Modifies the options for the selected variant (e.g: [size: large, color: red]) by replacing one with a new option (e.g. color: blue)
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/PreferencesManager.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/PreferencesManager.kt
index ccd926ccf..70cc7d6db 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/PreferencesManager.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/PreferencesManager.kt
@@ -67,7 +67,10 @@ class PreferencesManager(private val context: Context) {
suspend fun setCheckoutPreloadingEnabled(enabled: Boolean) = saveData(CHECKOUT_PRELOADING, enabled)
- suspend fun setCheckoutPresentationMode(mode: CheckoutPresentationMode) = saveData(CHECKOUT_PRESENTATION_MODE, mode.name)
+ suspend fun setCheckoutPresentationMode(mode: CheckoutPresentationMode) = saveData(
+ CHECKOUT_PRESENTATION_MODE,
+ mode.name
+ )
suspend fun setDragToDismissEnabled(enabled: Boolean) = saveData(DRAG_TO_DISMISS, enabled)
@@ -91,7 +94,6 @@ class PreferencesManager(private val context: Context) {
private val TAP_AWAY_TO_DISMISS = booleanPreferencesKey("tapAwayToDismiss")
private val WINDOW_OPEN_HANDLER = stringPreferencesKey("windowOpenHandler")
private val CHECKOUT_SHEET_PRESET = stringPreferencesKey("checkoutSheetStyle")
-
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/SettingsView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/SettingsView.kt
index b102daf3b..161023f9f 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/SettingsView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/SettingsView.kt
@@ -36,7 +36,6 @@ fun SettingsView(
settingsViewModel: SettingsViewModel,
navController: NavHostController,
) {
-
when (val uiState = settingsViewModel.uiState.collectAsState().value) {
is SettingsUiState.Loading -> {
ProgressIndicator()
@@ -104,7 +103,6 @@ fun SettingsView(
.background(color = MaterialTheme.colorScheme.background)
.fillMaxWidth()
)
-
}
AppearanceSection(
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/account/AccountView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/account/AccountView.kt
index bc3ada630..61d29e5cd 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/account/AccountView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/account/AccountView.kt
@@ -29,7 +29,6 @@ fun AccountView(
navController: NavHostController,
viewModel: AccountViewModel = koinViewModel(),
) {
-
val uiState = viewModel.uiState.collectAsState().value
LaunchedEffect(key1 = true) {
@@ -59,7 +58,6 @@ fun AccountView(
.padding(bottom = 20.dp)
.fillMaxWidth()
) {
-
Header2(
text = customer.displayName,
modifier = Modifier.padding(end = 10.dp),
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/LoginView.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/LoginView.kt
index e4d139a2a..0a695dbd6 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/LoginView.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/LoginView.kt
@@ -24,7 +24,6 @@ fun LoginView(
navController: NavController,
loginViewModel: LoginViewModel = koinViewModel(),
) {
-
val uiState = loginViewModel.uiState.collectAsState().value
LaunchedEffect(key1 = true) {
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStore.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStore.kt
index 2e767dd43..136301780 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStore.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStore.kt
@@ -9,14 +9,14 @@ import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import com.shopify.checkout_kit_android_demo.settings.authentication.data.AccessToken
-import java.io.IOException
-import java.security.GeneralSecurityException
-import kotlin.coroutines.cancellation.CancellationException
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import timber.log.Timber
+import java.io.IOException
+import java.security.GeneralSecurityException
+import kotlin.coroutines.cancellation.CancellationException
// Keep this name in sync with the DataStore exclusions in res/xml/data_extraction_rules.xml and
// res/xml/backup_rules.xml.
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProvider.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProvider.kt
index b19a00c92..07351fd0b 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProvider.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProvider.kt
@@ -6,15 +6,13 @@ import com.google.crypto.tink.KeyTemplates
import com.google.crypto.tink.RegistryConfiguration
import com.google.crypto.tink.aead.AeadConfig
import com.google.crypto.tink.integration.android.AndroidKeysetManager
-import java.io.IOException
-import java.security.GeneralSecurityException
-import java.security.KeyStore
-import kotlin.coroutines.cancellation.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import timber.log.Timber
+import java.security.KeyStore
+import kotlin.coroutines.cancellation.CancellationException
// SharedPreferences file name; this alone maps to
// shared_prefs/customer_access_token_keyset.xml and must match the XML backup exclusions.
@@ -98,6 +96,5 @@ internal class TokenAeadProvider internal constructor(
Timber.w("Unable to delete customer access token master key (%s)", failure.javaClass.simpleName)
}
}
-
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/utils/AuthenticationHelper.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/utils/AuthenticationHelper.kt
index e08177b4c..9dbc95843 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/utils/AuthenticationHelper.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/java/com/shopify/checkout_kit_android_demo/settings/authentication/utils/AuthenticationHelper.kt
@@ -1,6 +1,6 @@
package com.shopify.checkout_kit_android_demo.settings.authentication.utils
-import android.net.Uri
+import androidx.core.net.toUri
import android.util.Base64
import androidx.compose.ui.text.intl.Locale
import java.security.MessageDigest
@@ -24,7 +24,7 @@ class AuthenticationHelper(
locale: Locale,
): String {
val codeChallenge = codeChallenge(codeVerifier)
- val url = Uri.parse("$baseUrl/oauth/authorize").buildUpon()
+ val url = "$baseUrl/oauth/authorize".toUri().buildUpon()
.appendQueryParameter("scope", "openid email customer-account-api:full")
.appendQueryParameter("client_id", clientId)
.appendQueryParameter("response_type", "code")
@@ -49,7 +49,7 @@ class AuthenticationHelper(
* Builds a logout URL
*/
fun buildLogoutURL(idToken: String): String {
- return "$baseUrl/logout?id_token_hint=${idToken}"
+ return "$baseUrl/logout?id_token_hint=$idToken"
}
/**
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/drawable/hero.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/drawable-nodpi/hero.png
similarity index 100%
rename from platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/drawable/hero.png
rename to platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/drawable-nodpi/hero.png
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
deleted file mode 100644
index 89a7bb492..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_background.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index cce0ead6d..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
deleted file mode 100644
index d1795de41..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_background.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index 39bda3c5f..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
deleted file mode 100644
index 0463dbbdc..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 89a0fb572..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
deleted file mode 100644
index d749c0755..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 4a72d13e9..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
deleted file mode 100644
index a38a57abb..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 37c1b75f9..000000000
Binary files a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/values/strings.xml b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/values/strings.xml
index 79efb187e..fb97b1991 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/values/strings.xml
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/main/res/values/strings.xml
@@ -58,7 +58,6 @@
Log in
Log out
- Retry
Checkout is unavailable. Please try again.
@@ -92,7 +91,6 @@
Featured plant image
- Taxes included
Products
Add to cart
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStoreTest.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStoreTest.kt
index cb78e1b37..dcf32e891 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStoreTest.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/CustomerAccessTokenStoreTest.kt
@@ -8,12 +8,6 @@ import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.stringPreferencesKey
import com.google.crypto.tink.Aead
import com.shopify.checkout_kit_android_demo.settings.authentication.data.AccessToken
-import java.io.File
-import java.io.IOException
-import java.nio.charset.StandardCharsets.UTF_8
-import java.security.GeneralSecurityException
-import java.util.Base64
-import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
@@ -31,6 +25,12 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
+import java.io.File
+import java.io.IOException
+import java.nio.charset.StandardCharsets.UTF_8
+import java.security.GeneralSecurityException
+import java.util.Base64
+import java.util.concurrent.atomic.AtomicInteger
class CustomerAccessTokenStoreTest {
@get:Rule
@@ -135,13 +135,15 @@ class CustomerAccessTokenStoreTest {
@Test
fun `does not remove a token saved while an unreadable token is being discarded`() = runBlocking {
val replacement = "v1:replacement"
- val store = storeWith(DecryptFailingAead {
- runBlocking {
- dataStore.edit { preferences ->
- preferences[TOKEN_KEY] = replacement
+ val store = storeWith(
+ DecryptFailingAead {
+ runBlocking {
+ dataStore.edit { preferences ->
+ preferences[TOKEN_KEY] = replacement
+ }
}
}
- })
+ )
store.save(token())
@@ -153,7 +155,9 @@ class CustomerAccessTokenStoreTest {
fun `does not persist a token when the codec cannot be created`() = runBlocking {
val store = CustomerAccessTokenStore(
json = json,
- tokenCodecProvider = codecProvider(codecFactory = { throw GeneralSecurityException("Unable to load keyset") }),
+ tokenCodecProvider = codecProvider(
+ codecFactory = { throw GeneralSecurityException("Unable to load keyset") }
+ ),
dataStore = dataStore
)
@@ -170,7 +174,9 @@ class CustomerAccessTokenStoreTest {
}
val store = CustomerAccessTokenStore(
json = json,
- tokenCodecProvider = codecProvider(codecFactory = { throw GeneralSecurityException("Unable to load keyset") }),
+ tokenCodecProvider = codecProvider(
+ codecFactory = { throw GeneralSecurityException("Unable to load keyset") }
+ ),
dataStore = dataStore
)
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/EncryptedTokenCodecTest.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/EncryptedTokenCodecTest.kt
index 71a002910..7e39d0c17 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/EncryptedTokenCodecTest.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/EncryptedTokenCodecTest.kt
@@ -1,10 +1,10 @@
package com.shopify.checkout_kit_android_demo.settings.authentication.data.source.local
import com.google.crypto.tink.Aead
-import java.security.GeneralSecurityException
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.Test
+import java.security.GeneralSecurityException
class EncryptedTokenCodecTest {
private val codec = EncryptedTokenCodec(FakeAead())
@@ -55,6 +55,5 @@ class EncryptedTokenCodecTest {
}
return ciphertext
}
-
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/KeysetAeadFactoryTest.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/KeysetAeadFactoryTest.kt
index 06f6fc5ab..f79d609c2 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/KeysetAeadFactoryTest.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/KeysetAeadFactoryTest.kt
@@ -1,12 +1,12 @@
package com.shopify.checkout_kit_android_demo.settings.authentication.data.source.local
import com.google.crypto.tink.Aead
-import java.io.IOException
-import java.security.GeneralSecurityException
-import java.util.concurrent.atomic.AtomicInteger
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.Test
+import java.io.IOException
+import java.security.GeneralSecurityException
+import java.util.concurrent.atomic.AtomicInteger
class KeysetAeadFactoryTest {
@Test
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProviderTest.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProviderTest.kt
index bca2c2a73..169005001 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProviderTest.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenAeadProviderTest.kt
@@ -1,8 +1,6 @@
package com.shopify.checkout_kit_android_demo.settings.authentication.data.source.local
import com.google.crypto.tink.Aead
-import java.security.GeneralSecurityException
-import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
@@ -11,6 +9,8 @@ import kotlinx.coroutines.runBlocking
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.Test
+import java.security.GeneralSecurityException
+import java.util.concurrent.atomic.AtomicInteger
class TokenAeadProviderTest {
@Test
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenBackupRulesTest.kt b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenBackupRulesTest.kt
index ca22098d8..f7eed0580 100644
--- a/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenBackupRulesTest.kt
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/app/src/test/java/com/shopify/checkout_kit_android_demo/settings/authentication/data/source/local/TokenBackupRulesTest.kt
@@ -1,9 +1,9 @@
package com.shopify.checkout_kit_android_demo.settings.authentication.data.source.local
-import javax.xml.parsers.DocumentBuilderFactory
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import org.w3c.dom.Element
+import javax.xml.parsers.DocumentBuilderFactory
class TokenBackupRulesTest {
@Test
@@ -42,13 +42,17 @@ class TokenBackupRulesTest {
val exclusions = section!!.getElementsByTagName("exclude")
tokenDataStorePaths.forEach { tokenDataStorePath ->
- assertThat((0 until exclusions.length).any {
- (exclusions.item(it) as Element).getAttribute("path") == tokenDataStorePath
- }).withFailMessage("Missing DataStore exclusion for $tokenDataStorePath in $sectionName").isTrue()
+ assertThat(
+ (0 until exclusions.length).any {
+ (exclusions.item(it) as Element).getAttribute("path") == tokenDataStorePath
+ }
+ ).withFailMessage("Missing DataStore exclusion for $tokenDataStorePath in $sectionName").isTrue()
}
- assertThat((0 until exclusions.length).any {
- (exclusions.item(it) as Element).getAttribute("path") == keysetPath
- }).withFailMessage("Missing keyset exclusion in $sectionName").isTrue()
+ assertThat(
+ (0 until exclusions.length).any {
+ (exclusions.item(it) as Element).getAttribute("path") == keysetPath
+ }
+ ).withFailMessage("Missing keyset exclusion in $sectionName").isTrue()
}
}
}
diff --git a/platforms/android/samples/CheckoutKitAndroidDemo/detekt.config.yml b/platforms/android/samples/CheckoutKitAndroidDemo/detekt.config.yml
new file mode 100644
index 000000000..7f6cbbca9
--- /dev/null
+++ b/platforms/android/samples/CheckoutKitAndroidDemo/detekt.config.yml
@@ -0,0 +1,10 @@
+formatting:
+ active: true
+ autoCorrect: true
+ MaximumLineLength:
+ active: true
+ maxLineLength: 140
+ NoUnusedImports:
+ active: true
+ NoWildcardImports:
+ active: true