Skip to content

Commit 1a697b2

Browse files
committed
chore(release): bump version to 1.7.37
Syncs versionCode 65 across the Gradle config, CHANGELOG, README highlights and pipeline heading, in-app changelog, fastlane changelog, F-Droid current-source line, and the release-drift fixture. Also disables the MissingTranslation lint error: partial community translations are supported by design (per-string English fallback, gated by check_translations.py), and lint otherwise fails the build for every string a contributor has not translated yet.
1 parent 9a61471 commit 1a697b2

7 files changed

Lines changed: 61 additions & 8 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,29 @@ All notable changes to CallShield will be documented in this file.
44

55
## Unreleased
66

7-
## v1.7.36 — 2026-08-12
7+
## v1.7.37 — 2026-08-24
8+
9+
### Interface
10+
11+
- Added the Simplified Chinese (zh-CN) translation contributed by wj-on-git,
12+
covering 1,068 of 1,373 strings and 28 of 31 plurals with zero format-specifier
13+
drift. Strings added since the fork fall back to English individually. The
14+
locale is registered in locales_config.xml so it appears in Android's per-app
15+
language picker.
16+
17+
### Distribution
18+
19+
- Release APKs are signed again. The v1.7.26 through v1.7.29 release downloads
20+
were built without any signature, so Android rejected them as invalid packages
21+
(issue #19). The original release key's credentials were lost in a machine
22+
rebuild, so releases now use a new signing key and the pinned signer
23+
certificate moved with it. Anyone still on an old signed install has to
24+
uninstall it before installing v1.7.37.
25+
26+
### Data
27+
28+
- Blocked +8651667456713, an audiobook-course robocall reported through the
29+
in-app flow and the issue tracker (issue #20). Database version 38.
830

931
### Interface
1032

‎README.md‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ legacy snapshot when the shard service is unavailable.
4141
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/06-more.png" width="30%" alt="Protection tools and release information">
4242
</p>
4343

44+
## v1.7.37 Highlights
45+
46+
- **Simplified Chinese:** a community zh-CN translation from wj-on-git covers
47+
most of the app, is selectable from Android's per-app language picker, and
48+
falls back to English per string for anything still untranslated.
49+
- **Installable releases:** release APKs are signed again after several
50+
releases shipped unsigned and would not install; the signer certificate pin
51+
moved to the new release key.
52+
- **Community database:** one new reported robocall number, database version 38.
53+
4454
## v1.7.36 Highlights
4555

4656
- **Bounded local data surfaces** — database and activity views page Room rows,
@@ -356,7 +366,7 @@ legacy snapshot when the shard service is unavailable.
356366
5. **Callback-aware** — won't block callbacks from numbers you recently called, answered repeatedly, after a local emergency call, or urgent repeated callers
357367
6. **Community-driven** — one-tap anonymous contribution via Cloudflare Worker, merged into the database by the maintainer
358368

359-
## Detection Pipeline (v1.7.36)
369+
## Detection Pipeline (v1.7.37)
360370

361371
All detection layers implement a shared `IChecker` interface and run in priority order via `CheckerPipeline.run` — first non-null result wins, every layer is testable in isolation. Priorities are stable numbers; the ladder below is the live order.
362372

‎app/build.gradle.kts‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ android {
4848
applicationId = "com.sysadmindoc.callshield"
4949
minSdk = 29
5050
targetSdk = 36
51-
versionCode = 64
52-
versionName = "1.7.36"
51+
versionCode = 65
52+
versionName = "1.7.37"
5353
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
5454
manifestPlaceholders["appLabel"] = "@string/app_name"
5555
}
@@ -118,6 +118,16 @@ android {
118118
}
119119
}
120120

121+
lint {
122+
// Partial community translations are supported by design
123+
// (docs/TRANSLATING.md): Android falls back to English per string,
124+
// and scripts/check_translations.py gates specifier drift, plural
125+
// coverage, and locale registration. Left enabled, MissingTranslation
126+
// hard-fails the build for every string a contributor has not
127+
// translated yet, which would block any partial translation landing.
128+
disable += "MissingTranslation"
129+
}
130+
121131
testOptions {
122132
unitTests {
123133
// Robolectric needs merged Android resources/manifest to run the

‎app/src/main/java/com/sysadmindoc/callshield/ui/screens/more/ChangelogScreen.kt‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,20 @@ fun ChangelogScreen() {
2424
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp),
2525
verticalArrangement = Arrangement.spacedBy(0.dp),
2626
) {
27+
VersionEntry(
28+
"1.7.37",
29+
"Simplified Chinese translation and installable signed releases",
30+
isLatest = true,
31+
changes =
32+
listOf(
33+
"Simplified Chinese (zh-CN) translation contributed by wj-on-git, selectable per app",
34+
"Release APKs are signed again; earlier unsigned release downloads would not install",
35+
"Community spam database updated with a reported robocall number",
36+
),
37+
)
2738
VersionEntry(
2839
"1.7.36",
2940
"Bounded exports, deterministic ML contracts, and verifiable releases",
30-
isLatest = true,
3141
changes =
3242
listOf(
3343
"CSV and portable backup paths stream Room rows without materializing full logs",

‎docs/fdroid/com.sysadmindoc.callshield.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ AllowedAPKSigningKeys: 920e583ae6ce9f3863a6b3b8847e927d53a66c38a245e12e30ce124c9
5151
AutoUpdateMode: Version
5252
UpdateCheckMode: Tags ^v[0-9]+\.[0-9]+\.[0-9]+$
5353
# Last externally prepared build: 1.7.12 (40).
54-
# Current app source: 1.7.36 (64); no matching F-Droid build has been prepared.
54+
# Current app source: 1.7.37 (65); no matching F-Droid build has been prepared.
5555
CurrentVersion: 1.7.12
5656
CurrentVersionCode: 40
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Simplified Chinese (zh-CN) translation, contributed by wj-on-git and selectable in the per-app language picker. Release APKs are properly signed again, so downloads from the release page install normally. Community spam database update.

‎scripts/test_release_drift.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ def test_checkout_is_synchronized(self) -> None:
2727
now=snapshot_time + timedelta(minutes=1),
2828
)
2929
self.assertEqual([], report["issues"], report)
30-
self.assertEqual("1.7.36", report["version_name"])
31-
self.assertEqual(64, report["version_code"])
30+
self.assertEqual("1.7.37", report["version_name"])
31+
self.assertEqual(65, report["version_code"])
3232
self.assertEqual(9, report["sources"]["source_count"])
3333
self.assertEqual(3, len(report["advisories"]))
3434

0 commit comments

Comments
 (0)