Skip to content

Merge upstream AnkiDroid (2.26.0alpha0) - #53

Merged
float3 merged 53 commits into
ankiquestfrom
merge/upstream-sep29
Sep 29, 2026
Merged

float3 merged 53 commits into
ankiquestfrom
merge/upstream-sep29

Conversation

@float3

@float3 float3 commented Sep 29, 2026

Copy link
Copy Markdown
Owner

43 upstream commits (ankidroid/Anki-Android main at 0c3be71), with #52's conflicts resolved:

  • AnkiDroid/build.gradle: upstream versionCode=22600100 (2.26.0alpha0), AnkiQuest release/nightly block kept
  • .github/workflows/milestone.yml: fork's skip-missing-milestone script, upstream's milestone 79; milestone.test.cjs follows (8/8 pass)
  • DeckAdapterTest.kt: imports R and CommonString; upstream's DeckPicker import is only used by a helper the fork doesn't have

Merge with a merge commit. #52 closes as merged once this lands.

sanjaysargam and others added 30 commits September 27, 2026 18:54
Adds a checkable "Show preview" action to the note editor
overflow menu.
Prep for Anki 26.09

Part of 21926

Assisted-by: GPT-6
ActivityLaunchLoggerTest was broken due to async logs from AnkiDroidApp.

Fix by using `EmptyApplication`

Fixes 22132

Assisted-by: GPT-6
Read the version code and ensure it never increases by more than 100,000
 (and never decreases).

Assisted-by: GPT-6
Specifically added to `release.sh` so non-CI publishes are tested.

Fetch 2 commits so HEAD and its parent are available.

Assisted-by: GPT-6
Ensure it doesn't jump by over 100k from the base commit

Assisted-by: GPT-6
Previously, a disconnect had stopped `logcat` before tests began
 we use this log for `@Ignore` tests, so although the tests passed
 it broke reporting.

To fix: add an event reporter and keep logcat running.

Preserve the exit status, and terminate the capture when gradle exits.

Fixes 22115

Assisted-by: GPT-6
Just a sample 1+1 for now as a smoke test.

Assisted-by: GPT-6
Like runCatchingWithReport, but only logs the exception instead of also
sending a crash report. The upcoming directory picker scans storage, where
failures are routine and not worth reporting.

Co-authored-by: ShaanNarendran <shaannaren06@gmail.com>
Checks whether a directory contains a named file, resolving the canonical
path first to guard against path traversal. The upcoming directory picker
uses it to spot existing collections. Comes with a JVM test covering the
edge cases.

Co-authored-by: ShaanNarendran <shaannaren06@gmail.com>

Assisted-by: Claude Opus 5
Scans the storage roots for AnkiDroid directories and lists them for one
tap selection, so an SD card can be chosen without knowing its path. A
neutral button still accepts a custom path, which is normalized, created
and checked for writability before being applied.

Co-authored-by: ShaanNarendran <shaannaren06@gmail.com>
Replaces the free text AnkiDroid directory field in Advanced settings
with the picker.

Fixes ankidroid#3114

Co-authored-by: ShaanNarendran <shaannaren06@gmail.com>
Scaffolding asked for in review: opens the dialog and checks the default
and current directories are offered, and that every entry has a label.

Written as a Robolectric test rather than androidTest: the instrumented
suite runs against the release variant, where the host activity used by
launchFragmentInContainer is missing, as it ships in a debug only manifest.

Co-authored-by: ShaanNarendran <shaannaren06@gmail.com>
Related to 22126

Assisted-by: GPT-6
NoteIds and NoteTypeIds need to be strings, because
JS needs them as BigInteger.

This was previously handled by the code in 26.05, now
we need to handle this for 26.09.

Backwards compatible as `BigInt` accepts a `BigInt`

https://github.com/ankitects/anki/blame/643187a050abc36525dedd6f714c6a1260ef54a7/ts/routes/image-occlusion/lib.ts#L17

Part of 21926

Assisted-by: GPT-6
Prep for 20497

Assisted-by: GPT-6
Fixes 22095

Assisted-by: Opus 5.5
criticalAY and others added 16 commits September 28, 2026 05:19
Forward slashes are used to the tests pass on Windows.

Part of 21926

Assisted-by: GPT-6
Anki 26.09 requests this file, previously:

* Vendored MathJax (/_anki/js/vendor/mathjax) was handled
* mathjax.js sat outside this directory

Part of 21926

Assisted-by: GPT-6
Part of 22136

Assisted-by: GPT-6
'1' was already in the list, so it was appended twice

Assisted-by: GPT-6
Completes `androidTest`: 13 files.
One remains due to mixed licenses

AnkiDroid is standardizing licenses to SPDX.

I removed my copyright lines from the files as-per
docs/contributing/copyright-headers.md

Issue 20954

This change was not performed using LLMs and I have verified that it is
correct
Typealiases for R.string/R.plurals support references to CrowdIn
resources that can move modules with their alias definitions. Plain
imports can be inserted automatically by the IDE.

Part of 21500

Assisted-by: Claude Fable 5
Assisted-by: GPT-6 - rename to Common[String/Plurals]
Convert CrowdIn string and plural references, including usages added
since this branch was created. These resources are about to move to
:common:android; other strings will remain in :AnkiDroid.

Part of 21500

Assisted-by: Claude Fable 5
Assisted-by: GPT-6 - de-conflicted and added more references
The widget configuration layout uses start/end attributes

We will add `checkDependencies = true` for 21500
`supportsRtl` will be needed when lint checks this dependency.

Part of 21500

Assisted-by: Claude Fable 5
Switching tabs never sent a screen view, since no activity resumes.
Report each tab when it opens and when you come back to it.

Assisted-by: Claude Opus 5 [helped with tests]
Bumps [undici](https://github.com/nodejs/undici) from 6.28.0 to 6.29.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v6.28.0...v6.29.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.29.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
# Conflicts:
#	.github/workflows/milestone.yml
#	AnkiDroid/build.gradle
#	AnkiDroid/src/test/java/com/ichi2/anki/widget/DeckAdapterTest.kt
Assisted-by: Claude Opus 5 (tests)
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Snapshot diff report vs ankiquest. Open screenshot-diff for diffs.

  • ChangeNoteTypeDialogScreenshotTest: 4 changes
  • InsertFieldDialogScreenshotTest: 8 changes
  • SyncClockErrorScreenshotTest: 1 change
All 13 changed screenshots

ChangeNoteTypeDialogScreenshotTest

  • gesture_navigation_compare.png
  • landscape_compare.png
  • portrait_compare.png
  • portrait_cutout_compare.png

InsertFieldDialogScreenshotTest

  • gesture_navigation_compare.png
  • gesture_navigation_special_scrolled_to_bottom_compare.png
  • landscape_compare.png
  • landscape_special_scrolled_to_bottom_compare.png
  • portrait_compare.png
  • portrait_cutout_compare.png
  • portrait_cutout_special_scrolled_to_bottom_compare.png
  • portrait_special_scrolled_to_bottom_compare.png

SyncClockErrorScreenshotTest

  • clock_error_dialog_compare.png

david-allison and others added 4 commits September 29, 2026 13:01
(showing the confirmation for deleting a deck)

Assisted-by: GPT-6
Loads the active profile without throwing, so a caller can fall back to
the base context. Throwing during attachBaseContext would stop the app
from starting at all.

Timber is not planted that early, so the failure is recorded in
attachError for the caller to log once logging is available.

No caller yet.
AnkiDroidApp now routes its preferences, files, cache, databases and
dirs through the active profile. It is set up in attachBaseContext so
content providers, which get the Application itself, see it too.

The framework's base context is left alone. ActivityThread casts it to
ContextImpl when it delivers a manifest broadcast, so handing it a
wrapper crashed every receiver, starting with BootService after boot.

The ACRA sender process skips the setup: it only sends reports, and
it should not write the profile registry from a second process.

Users with only the Default profile are unaffected, since the wrapper
passes everything through for that profile. Attach failures are logged
once Timber is planted.

Assisted-by: Claude Opus 5 [helped with tests]
@float3
float3 merged commit 3fe2049 into ankiquest Sep 29, 2026
28 checks passed
@float3
float3 deleted the merge/upstream-sep29 branch September 29, 2026 16:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants