Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/android-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
33 changes: 24 additions & 9 deletions dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
android:layout_height="wrap_content"
android:elevation="0dp"
android:minHeight="?attr/actionBarSize"
android:paddingStart="4dp"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolve rtl symmetry lint warning where the toolbar may not have symmetric spacing in right-to-left layouts

android:paddingEnd="4dp"
android:theme="@style/Theme.AppCompat.DayNight"
app:contentInsetStart="22dp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -94,6 +95,14 @@ android {
}
}

lint {
checkDependencies = true
warningsAsErrors = true
disable 'GradleDependency', 'NewerVersionAvailable', 'SimilarGradleDependency'
warning 'LintBaseline'
informational 'AndroidGradlePluginVersion'
}

buildTypes {
release {
minifyEnabled = false
Expand Down Expand Up @@ -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')

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Branded navigation assets retain their vector detail at the sample's display size. -->
<issue id="VectorPath">
<ignore path="src/main/res/drawable/home.xml" />

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the vector files are fairly large, can address separately

<ignore path="src/main/res/drawable/logo_vector.xml" />
<ignore path="src/main/res/drawable/product.xml" />
</issue>
</lint>
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,13 @@
android:supportsRtl="true"
android:theme="@style/Theme.Androidsample"
tools:targetApi="33">
<!-- The demo intentionally supports portrait orientation only. -->
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="true"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity">
tools:ignore="LockedOrientationActivity,DiscouragedApi">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -101,13 +98,20 @@ fun CheckoutKitAppRoot(
val navController = rememberNavController()
var currentScreen by remember { mutableStateOf<Screen>(Screen.Product) }
var presentedCheckoutUrl by remember { mutableStateOf<String?>(null) }
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
var snackbarResourceId by remember { mutableStateOf<Int?>(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)
}
}

Expand Down Expand Up @@ -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")
Expand All @@ -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
),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ sealed class CartState {
val cartTotals: CartTotals,
val checkoutUrl: String,
) : CartState()

}

data class CartLine(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading
Loading