Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a4461a5
test(change-note-type): screenshots for layout clipping
david-allison Oct 3, 2026
95653a8
fix(change-note-type): stop mappings being clipped
david-allison Oct 3, 2026
11498e7
fix(change-note-type): remove destination down arrow
david-allison Oct 4, 2026
2ff52b0
rename: build.gradle => gradle.kts [breaks build]
david-allison Oct 3, 2026
1940c93
refactor(build): convert `build.gradle` to kts
david-allison Oct 3, 2026
471eb7c
fix(sync): use network timeout in background syncs
david-allison Oct 3, 2026
61747de
test(dialogs): screenshots for keyboard-resizing dialogs
david-allison Oct 3, 2026
7e571ef
fix(tags): stop overriding activity keyboard settings
david-allison Oct 3, 2026
b076787
refactor: make 'resizeDialogWhenSoftInputShown' dialog-only
david-allison Oct 3, 2026
38c8b09
refactor: extract `Int.setBitFlag`
david-allison Oct 3, 2026
76745d9
fix(dialogs): fit dialogs to IME insets
david-allison Oct 3, 2026
e3cb98d
fix(api): load card search results lazily
david-allison Oct 3, 2026
169d07b
refactor(api): extract card template name lookup
david-allison Oct 3, 2026
4e9a6cf
perf(api): load cursor rows on read, not move
david-allison Oct 3, 2026
d9697dd
perf(api): compute only requested card columns
david-allison Oct 3, 2026
39919a7
fix(api): validate column names during query
david-allison Oct 3, 2026
9b4bd95
fix(api): handle deleted cards
david-allison Oct 3, 2026
394126d
ci(emulator): remove legacy 'inputs.clearCaches' reference
david-allison Oct 2, 2026
da13c67
ci(emulator): add a scheduled weekly run (03:17 UTC)
david-allison Oct 2, 2026
ba6a9c5
ci(emulator): make 16 KB emulator scheduled-only
david-allison Oct 2, 2026
9305e99
ci: skip caching the 16 KB emulator snapshot
david-allison Oct 2, 2026
afed0e1
Updated strings from Crowdin
Oct 5, 2026
babc513
build(deps): add ProcessPhoenix
criticalAY Sep 11, 2026
b6dea19
feat(profiles): skip app setup in the ProcessPhoenix process
criticalAY Sep 11, 2026
2688fd2
feat(profiles): hold a lock while background work runs
criticalAY Sep 11, 2026
2112273
feat(profiles): restart the app after closing the collection
criticalAY Sep 11, 2026
54cd8d4
fix(profiles): persist a profile switch synchronously
criticalAY Sep 10, 2026
4baba72
feat(profiles): implement the profile switch safety checks
criticalAY Sep 10, 2026
8b18055
test: stop relying on instant background loads
criticalAY Oct 3, 2026
8f08439
fix(tests): reset ioDispatcher after each test
criticalAY Oct 3, 2026
35e1439
fix: explain 'Anki already open' errors
david-allison Aug 15, 2026
ccf39a8
fix(login): locked-collection error in a dialog
david-allison Aug 15, 2026
188cd78
feat: Settings button on locked-collection dialogs
david-allison Aug 15, 2026
76f9c30
Add Han Unification detection in note editor (Stage 1)
xenonnn4w Nov 11, 2025
ff2286b
fix: close screens launched without a fragment instead of crashing
criticalAY Oct 2, 2026
1662c1b
test: add a controllable Android input method
david-allison Oct 2, 2026
0a6c70e
feat(reviewer): prep for "Type answer into the card" support for `nos…
david-allison Oct 2, 2026
3bf38b4
Updated strings from Crowdin
Oct 5, 2026
9890107
fix(tags): prioritize partially selected tags
david-allison Oct 3, 2026
073d1b4
fix(tags): correct parent tag states
david-allison Oct 3, 2026
0771d22
fix(tags): issues with RecyclerView row reuse
david-allison Oct 3, 2026
70d076c
docs: review reminders documentation
ericli3690 Sep 7, 2026
5b4f4d7
fix: handle backup-related crashes in Intent handlers
david-allison Oct 4, 2026
8a08014
feat(analytics): dead code reporting
david-allison Oct 4, 2026
165aa4e
chore: check if WorkManager failure handling is dead code
david-allison Oct 4, 2026
2847714
Merge remote-tracking branch 'origin/main' into merge/upstream-oct05b
float3 Oct 5, 2026
8b56eeb
Add tr() extension for backend strings access in composable code
lukstbit Oct 4, 2026
b5969cd
Add trCase() extension for handling sentence case strings in composab…
lukstbit Oct 4, 2026
e4c9100
fix(permissions): read permission flags without kotlin-reflect
criticalAY Oct 5, 2026
45c3933
build(proguard): drop the PrefsRepository keep rule
criticalAY Oct 5, 2026
cf4fef5
fix(whiteboard): shake gesture did nothing
criticalAY Oct 5, 2026
d2474ad
Merge remote-tracking branch 'origin/main' into merge/upstream-oct05b
float3 Oct 6, 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
34 changes: 16 additions & 18 deletions .github/workflows/tests_emulator.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
name: 🛠️ Emulator Tests

on:
schedule:
# Weekly emulator coverage, Monday at 03:17 UTC.
- cron: '17 3 * * 1'
workflow_dispatch:
inputs:
iterations:
Expand All @@ -21,7 +24,7 @@ permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name == 'schedule' && 'scheduled' || 'ci' }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -56,22 +59,18 @@ jobs:
console.log('iterationArray is: ' + iterationArray)
}

// If we are running on a schedule it's our periodic passive scan for flakes
// Goal is to run enough iterations on all systems that we have confidence there are no flakes
if (context.eventName === "schedule") {
const iterationCount = 15
for (let i = 0; i < iterationCount; i++) {
iterationArray.push(i);
}
}

// TODO Refactor to make these dynamic with a minSdk/max bracket only on schedule, not push
let apiLevel = [36];

// These are used for performance tuning what emulator to use.
// try different architectures, targets, delays etc
let arch = ['x86_64'];
let target = ['google_apis', 'google_apis_ps16k'];
// Keep the 16 KB emulator off the per-change CI path.
// Scheduled and manual runs exercise both targets.
if (context.eventName !== 'schedule' && context.eventName !== 'workflow_dispatch') {
target = ['google_apis'];
}
let firstBootDelay = [600];

return {
Expand Down Expand Up @@ -138,17 +137,16 @@ jobs:
# Comment this and the with: above out for performance testing on a branch
cache-read-only: ${{ github.ref != 'refs/heads/main' }}

# This appears to be 'Cache Size: ~1230 MB (1290026823 B)' based on watching action logs
# Repo limit is 10GB; branch caches are independent; branches may read default branch cache.
# We don't want branches to evict main branch snapshot, so save on main, read-only all else
# Cache only the per-change emulator: the 16 KB snapshot costs about 2.5 GiB.
- name: AVD cache
if: matrix.target == 'google_apis'
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{matrix.target}}-v2-${{ github.event.inputs.clearCaches }}
key: avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{matrix.target}}-v2-
restore-keys: |
avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{matrix.target}}-v2

Expand Down Expand Up @@ -191,9 +189,9 @@ jobs:
"${ANDROID_HOME:?}/system-images/android-${SDK_API_LEVEL:?}/${SDK_TARGET:?}/${SDK_ARCH:?}/.installer"

- name: AVD Boot and Snapshot Creation
# Only generate a snapshot for saving if we are on main branch with a cache miss
# Warm up the uncached 16 KB emulator on every run; otherwise only on main cache misses.
# Comment the if out to generate snapshots on branch for performance testing
if: "${{ github.event.inputs.clearCaches != '' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/main') }}"
if: "${{ matrix.target == 'google_apis_ps16k' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/main') }}"
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
with:
api-level: ${{ matrix.api-level }}
Expand All @@ -212,10 +210,10 @@ jobs:

# This step is separate so pure install time may be calculated as a step
- name: Emulator Snapshot After Firstboot Warmup
# Only generate a snapshot for saving if we are on main branch with a cache miss
# Always warm up the 16 KB emulator. The default emulator only needs it on main cache misses.
# Switch the if statements via comment if generating snapshots for performance testing
# if: matrix.first-boot-delay != '0'
if: "${{ github.event.inputs.clearCaches != '' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/main') }}"
if: "${{ matrix.target == 'google_apis_ps16k' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/main') }}"
env:
FIRST_BOOT_DELAY: ${{ matrix.first-boot-delay }}
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
Expand Down
Loading
Loading