Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
343384d
build(deps): update all non-major dependencies (#81)
renovate[bot] Mar 12, 2026
64814a8
build(deps): update all non-major dependencies (#83)
renovate[bot] Mar 14, 2026
6879d86
chore(release): 1.5.1-staging.1 [skip ci]
semantic-release-bot Mar 14, 2026
1f26185
build(deps): update actions/create-github-app-token action to v3 (#85)
renovate[bot] Mar 21, 2026
e650cde
ci(release): update project on website with new releases
pawcoding Mar 21, 2026
6dc3966
build(deps): update all non-major dependencies
renovate[bot] Mar 21, 2026
0fbf723
chore(*): run ktfmt
pawcoding Mar 21, 2026
1e91f3e
chore(release): 1.5.1-staging.2 [skip ci]
semantic-release-bot Mar 21, 2026
20d59f0
build(deps): update android-actions/setup-android action to v4 (#87)
renovate[bot] Mar 28, 2026
b7e8cab
build(deps): update dependency androidx.compose:compose-bom to v2026.…
renovate[bot] Mar 28, 2026
adc54a8
chore(release): 1.5.1-staging.3 [skip ci]
semantic-release-bot Mar 28, 2026
986442d
chore(git): exclude docs
pawcoding Apr 4, 2026
0571272
feat(assistant): add shortcuts.xml with OPEN_APP_FEATURE capability
pawcoding Apr 4, 2026
2065d57
build(*): bump version code for closed alpha release
pawcoding Apr 5, 2026
1082aa3
build(gradle): migrade to shared gradle daemon
pawcoding Apr 12, 2026
0923a14
build(deps): update all non-major dependencies
renovate[bot] Apr 11, 2026
acb1759
Merge pull request #89 from pawcoding/renovate/all-minor-patch
pawcoding Apr 12, 2026
c39978a
chore(release): 1.5.1-staging.4 [skip ci]
semantic-release-bot Apr 12, 2026
76d80be
ci(*): bump release version number
pawcoding Apr 12, 2026
d1e9ae1
chore(release): 1.5.1-staging.5 [skip ci]
semantic-release-bot Apr 12, 2026
c61f06b
Merge branch 'staging' into feat/assistant
pawcoding Apr 12, 2026
4c4531b
Merge pull request #88 from pawcoding/feat/assistant
pawcoding Apr 12, 2026
85e72f8
chore(release): 1.6.0-staging.1 [skip ci]
semantic-release-bot Apr 12, 2026
2c69901
build(deps): update dependency com.android.application to v9.1.1 (#90)
renovate[bot] Apr 18, 2026
0d35e4c
build(deps): update cycjimmy/semantic-release-action action to v6 (#92)
renovate[bot] Apr 25, 2026
6022d7b
build(deps): update all non-major dependencies
renovate[bot] Apr 25, 2026
3267bdb
chore(release): 1.6.0-staging.2 [skip ci]
semantic-release-bot Apr 25, 2026
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
18 changes: 14 additions & 4 deletions .github/workflows/android-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:

steps:
- name: 🔑 Create token
uses: actions/create-github-app-token@v2
uses: actions/create-github-app-token@v3
id: app-token
with:
app-id: ${{ secrets.GH_APP_ID}}
Expand All @@ -32,7 +32,7 @@ jobs:
cache: 'gradle'

- name: 📦 Setup Android SDK
uses: android-actions/setup-android@v3
uses: android-actions/setup-android@v4

- name: 🧹 Check format
run: |
Expand All @@ -45,7 +45,7 @@ jobs:
echo $KEYSTORE_BASE64 | base64 --decode > keystore.jks

- name: 🚀 Release APK
uses: cycjimmy/semantic-release-action@v4
uses: cycjimmy/semantic-release-action@v6.0.0
id: release
env:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
Expand All @@ -70,4 +70,14 @@ jobs:
releaseName: ${{ steps.release.outputs.new_release_version }}
status: draft
mappingFile: app/build/outputs/mapping/release/mapping.txt
debugSymbols: app/build/intermediates/merged_native_libs/release/mergeReleaseNativeLibs/out/lib
debugSymbols: app/build/intermediates/merged_native_libs/release/mergeReleaseNativeLibs/out/lib

- name: 🖥️ Update website
if: steps.release.outputs.new_release_published == 'true' && !steps.release.outputs.new_release_channel && steps.release.outputs.new_release_patch_version == '0'
uses: pawcoding/update-project-action@v0.0.5
with:
pocketbase-url: ${{ vars.PB_URL }}
collection-id: ${{ vars.PB_COLLECTION }}
record-id: ${{ vars.PB_RECORD }}
env:
PB_TOKEN: ${{ secrets.PB_TOKEN }}
10 changes: 5 additions & 5 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: "Copilot Setup Steps"
name: 'Copilot Setup Steps'

# Automatically run the setup steps when they are changed to allow for easy validation
on:
Expand Down Expand Up @@ -29,12 +29,12 @@ jobs:
- name: 📦 Setup JDK
uses: actions/setup-java@v5
with:
distribution: "temurin"
java-version: "21"
cache: "gradle"
distribution: 'temurin'
java-version: '21'
cache: 'gradle'

- name: 📦 Setup Android SDK
uses: android-actions/setup-android@v3
uses: android-actions/setup-android@v4

- name: 🧹 Initialize formatter
run: |
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ name: Test
on:
push:
branches:
- "**"
- "!master"
- "!staging"
- '**'
- '!master'
- '!staging'

jobs:
release:
Expand All @@ -20,12 +20,12 @@ jobs:
- name: 📦 Setup JDK
uses: actions/setup-java@v5
with:
distribution: "temurin"
java-version: "21"
cache: "gradle"
distribution: 'temurin'
java-version: '21'
cache: 'gradle'

- name: 📦 Setup Android SDK
uses: android-actions/setup-android@v3
uses: android-actions/setup-android@v4

- name: 🧹 Check format
run: |
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
/.idea/copilot.*
/docs/plans
/docs/android
.DS_Store
/build
/captures
Expand Down
2 changes: 0 additions & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.jetbrains.kotlin.serialization)
id("com.google.devtools.ksp") version "2.3.6"
id("com.ncorti.ktfmt.gradle") version "0.25.0"
id("com.google.devtools.ksp") version "2.3.7"
id("com.ncorti.ktfmt.gradle") version "0.26.0"
}

android {
Expand Down Expand Up @@ -62,8 +62,8 @@ android {
}

buildFeatures {
compose = true
resValues = true
compose = true
resValues = true
}

androidResources { generateLocaleConfig = true }
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
<data android:host="*" />
<data android:mimeType="application/vnd.apple.pkpass" />
</intent-filter>

<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>

<activity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import de.pawcode.cardstore.utils.calculateCardScore
import de.pawcode.cardstore.utils.isLightColor
import kotlinx.coroutines.flow.first

private const val MAX_SHORTCUTS = 3
internal const val SHORTCUT_ACTION = "de.pawcode.cardstore.ACTION_VIEW_CARD"

internal fun cardShortcutId(cardId: String) = "card_shortcut_$cardId"
Expand All @@ -39,9 +38,10 @@ suspend fun updateShortcuts(context: Context) {
SortAttribute.MOST_USED -> allCards.sortedByDescending { it.useCount }
}

val topCards = sortedCards.take(MAX_SHORTCUTS)

val maxShortcuts = ShortcutManagerCompat.getMaxShortcutCountPerActivity(context)
val topCards = sortedCards.take(maxShortcuts)
val newShortcutIds = topCards.map { cardShortcutId(it.cardId) }.toSet()

val existingShortcuts = ShortcutManagerCompat.getDynamicShortcuts(context)
val staleIds = existingShortcuts.filter { it.id !in newShortcutIds }.map { it.id }
if (staleIds.isNotEmpty()) ShortcutManagerCompat.removeDynamicShortcuts(context, staleIds)
Expand All @@ -62,6 +62,11 @@ suspend fun updateShortcuts(context: Context) {
.setLongLabel(card.storeName)
.setIcon(icon)
.setIntent(intent)
.addCapabilityBinding(
"actions.intent.OPEN_APP_FEATURE",
"feature.name",
listOf(card.storeName),
)
.build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/de/pawcode/cardstore/ui/CardStore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ fun CardStore(modifier: Modifier = Modifier) {
NavDisplay(
entries = navigationState.toEntries(entryProvider),
onBack = { navigator.goBack() },
sceneStrategy = remember { DialogSceneStrategy() },
sceneStrategies = remember { listOf(DialogSceneStrategy()) },
transitionSpec = {
slideInHorizontally(initialOffsetX = { it }) togetherWith ExitTransition.None
},
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/res/xml/shortcuts.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<capability android:name="actions.intent.OPEN_APP_FEATURE">
<shortcut-fulfillment>
<parameter android:name="feature.name" />
</shortcut-fulfillment>
<intent
android:action="de.pawcode.cardstore.ACTION_VIEW_CARD"
android:targetClass="de.pawcode.cardstore.CardOverlayActivity" />
</capability>
</shortcuts>
13 changes: 13 additions & 0 deletions gradle/gradle-daemon-jvm.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/e99bae143b75f9a10ead10248f02055e/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/04e088f8677de3b384108493cc9481d0/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/e55dccbfe27cb97945148c61a39c89c5/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/dbd05c4936d573642f94cd149e1356c8/redirect
toolchainVendor=JETBRAINS
toolchainVersion=21
18 changes: 9 additions & 9 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
[versions]
activityCompose = "1.12.4"
agp = "9.0.1"
activityCompose = "1.13.0"
agp = "9.2.0"
barcodeScanning = "17.3.0"
biometric = "1.1.0"
colorpickerCompose = "1.1.3"
composeBom = "2026.02.00"
composeBom = "2026.04.01"
composedBarcodes = "1.3.0"
coreKtx = "1.17.0"
coreKtx = "1.18.0"
coreSplashscreen = "1.2.0"
datastorePreferences = "1.2.0"
datastorePreferences = "1.2.1"
espressoCore = "3.7.0"
junit = "4.13.2"
junitVersion = "1.3.0"
kotlin = "2.3.10"
kotlinSerialization = "2.3.10"
kotlinxSerialization = "1.10.0"
kotlin = "2.3.21"
kotlinSerialization = "2.3.21"
kotlinxSerialization = "1.11.0"
lifecycleRuntimeKtx = "2.10.0"
lifecycleViewmodelNav3 = "2.10.0"
nav3Core = "1.0.1"
nav3Core = "1.1.1"
playServicesCodeScanner = "16.1.0"
revealswipe = "3.0.0"
review = "2.0.2"
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
2 changes: 1 addition & 1 deletion gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ pluginManagement {
gradlePluginPortal()
}
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
Expand Down
4 changes: 2 additions & 2 deletions version.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
VERSION_CODE=64
VERSION_NAME=1.5.0
VERSION_CODE=72
VERSION_NAME=1.6.0-staging.2