One fix, reported from a Xiaomi on Android 16: the font weight control did
nothing. Both bundled faces carry a single variable axis, wght, and the app was
asking for two — a font with no italic axis may refuse the whole request rather
than the part it cannot honour, and on a platform that does, every weight drew
at Regular with no error to show for it. The same declaration had quietly broken
the heavier weights on Android 7.0 and 7.1 as well.
A patch release, not a minor one: nothing else changed.
README.md and releases/README.md were written by tools/update_release_docs.py
rather than by hand, which is what it is for — and ReleaseDocsTest now has
something real to check, since the version, the archived APK and the checksum
all moved together.
The 0.4.0 row also gets its real commit in place of HEAD.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The signing key is on this machine now, so 0.4.0 is signed and archived like
every release before it. The certificate is the same one:
CN=Ganjoor for Android, O=anas-rashid, C=PK
SHA-256 d3b5a144b600dd6d9ae8236f0a1bd630767e88d7eaa1573edaadbf8e651fe494
verified against 0.3.0's before archiving, which is the point of checking: a
different key would have forced every existing install to be removed first, and
releases/README.md promises that never happens.
The 0.3.0 row also gets its real commit; it still said HEAD, which stops meaning
anything the moment another release lands on top of it.
metadata/com.ganjoor.android.yml is the recipe F-Droid's build server uses,
kept with the source it describes rather than only in a fork of fdroiddata.
UpdateCheckMode is Tags, so each new tag is picked up without editing it again.
F-Droid signs with their own key, which is why the release build has to succeed
with no keystore present.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A download control on each row in the list view: the arrow starts it, a spinner
replaces it while it runs and cancels on a tap, and a green tick says the poems
are already on the device. Only text is fetched — recitations stream when
played, and nothing about that changes.
The tick sits in a box the size of an IconButton although nothing about it is
tappable. A bare icon lands where the button's padding would have put it, so
the ticks and the arrows did not line up down the column.
The green is derived from the scheme's own luminance rather than fixed:
Material has no success colour, and one green goes muddy on sepia and glares on
OLED black.
Deleting stays on the downloads page, where the sizes are. A tap beside a
poet's name should not be the thing that throws their poems away.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two gaps in the licence file, both from work done after it was written.
The share, lookup and assistant glyphs are Material Symbols path data copied
into our own vector files. The Libraries table credits the Material icons
library, which is not the same thing as copying its paths, so the drawables now
have their own entry and appear in the app's About page.
The assistant was not mentioned at all. It ships no vendor SDK, no key and no
default endpoint, so nothing non-free is distributed — but a reader may point
it at a service whose terms are their own, and what a model writes back belongs
to neither Ganjoor nor this app. Written down for F-Droid's sake as much as the
reader's.
No new dependencies came with any of it: the assistant reuses the HTTP client
and JSON parser already here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three so far, each signed with the same key so any of them upgrades any other
without losing bookmarks: 0.1.0 as it stood last night, 0.2.0 with share and
the assistant, and 0.2.1 with answers in the page.
These are binaries in git history, which is permanent and makes every clone
carry them. Gitea's own releases attach a build to a tag without that cost;
keeping them here is deliberate, so a version can be reinstalled without
finding the commit and rebuilding it. Tags v0.1.0, v0.2.0 and v0.2.1 mark the
commits each was built from, so they stay reproducible either way.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>