Compare commits

..
Author SHA1 Message Date
anasandClaude Opus 5 6590a6b21a Move the download under the opening paragraph
Below the tech line is already too far down. Someone who has just read what the
app is wants the app next, not the toolkit it is written in.

One line now, as a heading so it reads as a button rather than prose, with the
facts that decide whether to tap it beside it — Android version, size, older
releases, checksum — and the install warning under it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 23:19:32 +02:00
anasandClaude Opus 5 66d8b82648 Put the download where someone looking for it will look
The APK has been in releases/ all along, but nothing on the front page said so,
and the first thing most people want from an app's repository is the app.

A Download section above the fold: the current build as a relative link that
works on any forge, the raw URL spelled out for anywhere the relative one does
not resolve, the checksum to verify it, and a pointer to releases/ for every
earlier version.

It also says plainly that Android will call the developer unknown and ask to
install anyway. That warning is what Android says about every app installed
outside a store, and read cold it looks like the app is unsafe rather than
merely unlisted — better to say so first than to let someone find out and
assume the worst.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 23:17:49 +02:00
Anas Rashid c801d88ef3 Merge pull request #7 from anas-rashid/release/archive-0.4.0-apk
Archive the signed 0.4.0, and add the F-Droid recipe
2026-10-07 19:21:22 +02:00
anasandClaude Opus 5 331e0544bc Archive the signed 0.4.0, and add the F-Droid recipe
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>
2026-10-07 19:17:08 +02:00
anasandClaude Opus 5 a725e66a9a Converge the two remotes after 0.4.0
Gitea and GitHub each made their own merge commit for the 0.4.0 release branch.
Both have the same tree — the same release, merged twice — so this reconciles
the history and leaves one main again.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 19:02:36 +02:00
Anas Rashid 31279bc5da Merge pull request #6 from anas-rashid/release/0.4.0
Release 0.4.0
2026-10-07 19:01:30 +02:00
Anas Rashid 23efc2afa3 Merge pull request #5 from anas-rashid/test/dictionary-fits-beside
Test the rule that chooses the dictionary's container
2026-10-07 19:01:20 +02:00
anas 270c28c9c9 Merge pull request 'Release 0.4.0' (#7) from release/0.4.0 into main
Reviewed-on: #7
2026-10-07 16:53:58 +00:00
anasandClaude Opus 5 3407f010c9 Release 0.4.0
Twenty commits since v0.3.0, and the tag still pointed at the old one: nothing
could be published while main declared a version that was already taken.

0.4.0 rather than 0.3.1 — this is not a patch. Tablets and unfolded foldables
read in columns now, the dictionary and the reading settings moved beside the
poem instead of over it, couplets sit in cards and share a line where there is
room, pages fill in where they load, and the design system that describes all of
it lives in design/.

Changelog 6 in all three languages, as F-Droid reads them from fastlane/.

The release APK is not archived in releases/ yet: the signing key is not on this
machine, and every release so far shares one key so that each upgrades the last
in place. Signing and archiving wait for it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 18:47:06 +02:00
8 changed files with 103 additions and 4 deletions

No files matched your search

+9
View File
@@ -13,6 +13,15 @@ An Android reader for [Ganjoor](https://ganjoor.net), the open archive of Persia
240 poets and ~135,000 poems, laid out for comfortable long-form reading in Persian, Urdu
and Arabic script, online or fully offline.
### ⬇ [Download ganjoor-0.4.0.apk](releases/ganjoor-0.4.0.apk)
Android 7.0 and up · 31.7 MB · [older releases](releases/) · `sha256 1c64cefa…fb863ab9fc7`
Android will call the developer unknown and offer to install anyway — it says that about every
app installed outside a store. Allow installs from your browser once and it will go through.
Every release is signed with the same key, so a new one upgrades the last without losing your
bookmarks. [Build it yourself](#build) instead if you would rather.
Jetpack Compose, Material 3, `minSdk 24`. No account, no tracking, no server of its own.
## Reading
+3 -3
View File
@@ -16,7 +16,7 @@ val keystoreProperties = Properties().apply {
// A delivered file should say what it is without being opened.
base {
archivesName = "ganjoor-0.3.0"
archivesName = "ganjoor-0.4.0"
}
android {
@@ -32,8 +32,8 @@ android {
// Pre-1.0 while the app is still being shaped. versionCode only ever climbs: F-Droid
// refuses an update that does not, and one changelog file per code lives in
// fastlane/metadata/android/*/changelogs/.
versionCode = 5
versionName = "0.3.0"
versionCode = 6
versionName = "0.4.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
@@ -0,0 +1,19 @@
Tablets and unfolded foldables now read in columns: the poets on the right, then
a column for each level of the open book, and the poem in whatever room is left.
Each column scrolls on its own and narrows as you read, so the poem keeps the
middle. A button in the top bar folds them away.
Where there is room, a couplet's two hemistichs sit on one line, as Ganjoor sets
them on a desktop. Each couplet now sits in a soft card.
The dictionary and the reading settings open beside the poem rather than over
it, so nothing you are reading is covered.
Pages fill in where they load instead of blanking the screen, and Home and the
reading settings stay reachable while they do.
Tapping a word no longer carries the comma or question mark after it into the
lookup.
A reading keeps playing when you scroll down the poem, and a seek bar moves it
back and forth.
@@ -0,0 +1,17 @@
تبلت‌ها و گوشی‌های تاشوی باز حالا ستونی خوانده می‌شوند: شاعران در سمت راست، سپس
یک ستون برای هر لایهٔ کتاب باز، و شعر در هر فضایی که می‌ماند. هر ستون جداگانه
پیمایش می‌شود و با خواندن باریک‌تر می‌شود تا شعر میانه را نگه دارد. دکمه‌ای در
نوار بالا آن‌ها را جمع می‌کند.
هر جا جا باشد، دو مصرع یک بیت در یک سطر می‌نشینند، همان‌گونه که گنجور روی رایانه
می‌چیند. هر بیت اکنون در کارتی ملایم می‌نشیند.
لغت‌نامه و تنظیمات خواندن کنار شعر باز می‌شوند، نه رویش، تا چیزی از آنچه
می‌خوانید پوشیده نشود.
صفحه‌ها همان‌جا که بار می‌شوند پر می‌شوند و صفحه سفید نمی‌ماند؛ خانه و تنظیمات
خواندن در همان حال هم در دسترس‌اند.
ضربه بر یک واژه دیگر ویرگول یا علامت پرسش پس از آن را به جست‌وجو نمی‌برد.
خوانش با پیمایش شعر قطع نمی‌شود، و نواری تازه آن را پس و پیش می‌برد.
@@ -0,0 +1,17 @@
ٹیبلٹ اور کھلے فولڈ ایبل اب ستونوں میں پڑھے جاتے ہیں: شعرا دائیں طرف، پھر کھلی
کتاب کی ہر سطح کے لیے ایک ستون، اور باقی جگہ میں کلام۔ ہر ستون الگ سکرول ہوتا ہے
اور پڑھتے وقت تنگ ہو جاتا ہے تاکہ کلام درمیان میں رہے۔ اوپر کی پٹی کا ایک بٹن
انہیں سمیٹ دیتا ہے۔
جہاں گنجائش ہو، شعر کے دونوں مصرعے ایک ہی سطر میں آتے ہیں، جیسے گنجور کمپیوٹر پر
دکھاتا ہے۔ ہر شعر اب ایک ہلکے کارڈ میں بیٹھتا ہے۔
لغت نامہ اور مطالعے کی ترتیبات کلام کے ساتھ کھلتی ہیں، اُس پر نہیں، تاکہ جو آپ
پڑھ رہے ہیں وہ ڈھکا نہ جائے۔
صفحات وہیں بھرتے ہیں جہاں لوڈ ہوتے ہیں، خالی اسکرین نہیں آتی؛ ہوم اور مطالعے کی
ترتیبات اُس دوران بھی دستیاب رہتی ہیں۔
کسی لفظ پر ٹیپ اب اُس کے بعد والا کوما یا سوالیہ نشان ساتھ نہیں لے جاتی۔
سکرول کرنے پر تلاوت بند نہیں ہوتی، اور ایک نئی سیک بار اُسے آگے پیچھے کرتی ہے۔
+35
View File
@@ -0,0 +1,35 @@
# F-Droid metadata for Ganjoor for Android.
#
# This file is not read by the app or the build; it is the recipe F-Droid's build
# server uses, kept here so it travels with the source it describes. To submit or
# update the listing, copy it into a fork of gitlab.com/fdroid/fdroiddata as
# metadata/com.ganjoor.android.yml and open a merge request.
#
# F-Droid builds from source and signs with their own key, which is why the
# release build must succeed with no keystore present — see app/build.gradle.kts.
Categories:
- Reading
License: MIT
AuthorName: Muhammad Anas Rashid
SourceCode: https://github.com/anas-rashid/ganjoorandroid
IssueTracker: https://github.com/anas-rashid/ganjoorandroid/issues
Changelog: https://github.com/anas-rashid/ganjoorandroid/releases
AutoName: گنجور
RepoType: git
Repo: https://github.com/anas-rashid/ganjoorandroid.git
Builds:
- versionName: 0.4.0
versionCode: 6
commit: v0.4.0
subdir: app
gradle:
- yes
AutoUpdateMode: Version
UpdateCheckMode: Tags
CurrentVersion: 0.4.0
CurrentVersionCode: 6
+3 -1
View File
@@ -12,7 +12,8 @@ from source and signs with its own key, so these are for direct installation onl
| 0.2.0 | 2 | `d92445f` | Share a poem, couplet or selection; look a word up from any app's selection menu; the optional AI assistant. |
| 0.2.1 | 3 | `ec05989` | Assistant answers in the page rather than over it, a visible chevron for each couplet's actions, and answers remembered so scrolling doesn't re-ask. |
| 0.2.2 | 4 | `d7568d1` | Credits Material Symbols for the glyphs, and states the terms around the optional assistant. |
| 0.3.0 | 5 | `HEAD` | Pin poets to the home screen: three views (pinned, Ganjoor's order, alphabetical), as cards or a list, with a download control on each row. |
| 0.3.0 | 5 | `5d12a1c` | Pin poets to the home screen: three views (pinned, Ganjoor's order, alphabetical), as cards or a list, with a download control on each row. |
| 0.4.0 | 6 | `270c28c` | Columns on tablets and unfolded foldables; the dictionary and reading settings beside the poem rather than over it; couplets in cards, two hemistichs to a line where there is room; skeletons while pages load; a seek bar on recitations. |
## Checksums
@@ -22,6 +23,7 @@ from source and signs with its own key, so these are for direct installation onl
5163554eb01845c131c31a9da7bdd748170bb9b5f82edaece754b4cf40b02b0c ganjoor-0.2.1.apk
e473269044710813d2cf4119de663fe180f887239df7bdb1ccee0239ef84fd3e ganjoor-0.2.2.apk
9c38d5cacf9e809c2189ba581f8aa6eb4072d4fa0316f00d66434461cf4b1459 ganjoor-0.3.0.apk
1c64cefa0fb2b51bf73386460ec1b88bda3e20832fa6926c2f7f1fb863ab9fc7 ganjoor-0.4.0.apk
```
Installing: `adb install -r releases/ganjoor-<version>.apk`. A phone holding a *debug* build has
Binary file not shown.