Skip to content

Commit 86bb484

Browse files
committed
release: v1.11.0 (71)
Bumps versionCode 71 and versionName 1.11.0 across build.gradle.kts, the in-app changelog (1.10.0 moves into its history), the release drift test and the fastlane note, adds the README highlights, and closes the v1.11.0 CHANGELOG section. Minor rather than patch: the callback hold for numbers from scam texts, the code-during-a-call warning, reply bait, trusted number blocks, the release card and the recommended blocklists are all new features. Tests: test_release_drift.py pins the current release's version, so it moves to 1.11.0/71 as it did for every release. ExportedSchemaMigrationTest gains the identity hashes for schemas 19 and 20, which ship for the first time in this release; its comment asks for each version to be added when it ships. No assertion was weakened.
1 parent 13fbfa2 commit 86bb484

7 files changed

Lines changed: 44 additions & 14 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to CallShield will be documented in this file.
44

55
## Unreleased
66

7+
## v1.11.0 (2026-09-30)
8+
79
- A link written `https://evil.com\@paypal.com` in a text is now checked as
810
evil.com, the host a browser actually opens. The text check used to read it
911
as paypal.com.

‎README.md‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ Version highlights for each release are in [CHANGELOG.md](CHANGELOG.md).
7878
5. **Callback-aware.** It won't block a number you recently called or keep answering, a callback after a local emergency call, or a caller who tries twice in five minutes.
7979
6. **Community-driven.** One-tap anonymous reports go through a Cloudflare Worker, and the maintainer merges them into the database.
8080

81+
## v1.11.0 Highlights
82+
83+
Better at the calls and texts scams lead to, and your own lists survive a damaged database.
84+
85+
- **Calling back a scam text.** The outgoing call check holds a call to a number that appeared in a text CallShield flagged as spam in the last 30 days, and the notice says which day the text came.
86+
- **Codes during a call.** A one-time code that arrives while someone who isn't a contact is on the line, or in the 10 minutes after, brings up a warning not to read it out.
87+
- **Text checks.** "Hi mum, this is my new number" and other reply bait is caught in a dozen languages, and look-alike letters and invisible characters no longer hide spam. In aggressive mode a business's opt-out footer alone doesn't block its text any more.
88+
- **Your lists are safer.** Your blocks, allow list and rules survive a damaged database, and a phone restored from a cloud backup downloads the whole spam list again.
89+
- **Trusted number blocks.** A doctor's office that calls from a different line each time can be allowed by its last 2 or 3 digits.
90+
- **Around the app.** Home shows a card when a new release is out. Clearing the log or blocking an area code happens at once, with Undo. Outside North America, a ten-digit number the phone couldn't place isn't scored by North American rules, and Settings lists recommended blocklists for Colombia, Chile and Turkey.
91+
8192
## v1.10.0 Highlights
8293

8394
Let unknown callers ring when you're waiting for a call, and a fix that keeps the spam database blocking between updates.
@@ -100,7 +111,7 @@ A new look for every screen, protection levels you can switch in one tap, and a
100111

101112
Earlier releases are in [CHANGELOG.md](CHANGELOG.md).
102113

103-
## Detection Pipeline (v1.10.0)
114+
## Detection Pipeline (v1.11.0)
104115

105116
All detection layers implement a shared `IChecker` interface and run in priority order through `CheckerPipeline.run`. The first layer with a verdict wins, and each layer is tested on its own. Priorities are stable numbers, and the ladder below is the live order.
106117

‎app/build.gradle.kts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ android {
4949
applicationId = "com.sysadmindoc.callshield"
5050
minSdk = 29
5151
targetSdk = 36
52-
versionCode = 70
53-
versionName = "1.10.0"
52+
versionCode = 71
53+
versionName = "1.11.0"
5454
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
5555
manifestPlaceholders["appLabel"] = "@string/app_name"
5656
}

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

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,18 @@ fun ChangelogScreen() {
5555
SectionHeader(stringResource(R.string.changelog_latest_release), CatGreen)
5656
Spacer(Modifier.height(12.dp))
5757
VersionEntry(
58-
"1.10.0",
59-
"Expecting a call, and a database that keeps blocking",
58+
"1.11.0",
59+
"Scam callbacks, codes during calls and safer lists",
6060
isLatest = true,
61-
date = "September 28, 2026",
62-
summary = "Let unknown callers ring for a while, and a fix that keeps the spam database working between updates.",
61+
date = "September 30, 2026",
62+
summary = "Holds a call back to a scam text, warns before you read a code to a stranger, and keeps your own lists through a damaged database.",
6363
changes =
6464
listOf(
65-
"Expecting a call lets unknown callers ring for an hour, three hours or until midnight, from Home or a Quick Settings tile",
66-
"Numbers from the spam database no longer stop blocking a few weeks after an update",
67-
"The caller ID popup works with TalkBack, and the Blocked log and Blocklist fit small screens with large text",
68-
"A blocked-call alert offers Not spam for a day, and texts sent under a carrier's scam label are flagged",
69-
"Answer and hang up handles national-format numbers and rejects instead of answering while roaming",
65+
"Calling a number from a text flagged as spam in the last 30 days is held first",
66+
"A one-time code that arrives during a call from someone who isn't a contact brings up a warning",
67+
"Text checks catch \"new number\" reply bait and see through look-alike letters",
68+
"Your blocks, allow list and rules survive a damaged database",
69+
"A trusted number can allow its whole number block, and Home shows a card when a new release is out",
7070
),
7171
)
7272
Spacer(Modifier.height(14.dp))
@@ -108,6 +108,20 @@ fun ChangelogScreen() {
108108
}
109109
AnimatedVisibility(visible = showHistory) {
110110
Column(modifier = Modifier.padding(top = 14.dp)) {
111+
VersionEntry(
112+
"1.10.0",
113+
"Expecting a call, and a database that keeps blocking",
114+
date = "September 28, 2026",
115+
summary = "Let unknown callers ring for a while, and a fix that keeps the spam database working between updates.",
116+
changes =
117+
listOf(
118+
"Expecting a call lets unknown callers ring for an hour, three hours or until midnight, from Home or a Quick Settings tile",
119+
"Numbers from the spam database no longer stop blocking a few weeks after an update",
120+
"The caller ID popup works with TalkBack, and the Blocked log and Blocklist fit small screens with large text",
121+
"A blocked-call alert offers Not spam for a day, and texts sent under a carrier's scam label are flagged",
122+
"Answer and hang up handles national-format numbers and rejects instead of answering while roaming",
123+
),
124+
)
111125
VersionEntry(
112126
"1.9.0",
113127
"A new look and protection levels",

‎app/src/test/java/com/sysadmindoc/callshield/data/local/ExportedSchemaMigrationTest.kt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ class ExportedSchemaMigrationTest {
329329
16 to "44dd54cd1d75cfb6b77d16935925c3c7",
330330
17 to "54d29d872ca709df3394318cb541d850",
331331
18 to "a9364c0dbb096a12da7e79a74149f6f3",
332+
19 to "25a4fd853fd6a0bc2d9da1ee52bc4e51",
333+
20 to "1bec3d5a7db5168099a811da0a063511",
332334
)
333335
}
334336
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Calls to a number from a text flagged as spam in the last 30 days are held first, and a one-time code that arrives during a call from a stranger brings up a warning. Text checks catch "new number" reply bait and see through look-alike letters. Your blocks, allow list and rules survive a damaged database. A trusted number can allow its whole number block, Home shows a card when a new release is out, and clearing the log happens at once with Undo.

‎scripts/test_release_drift.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ def test_checkout_is_synchronized(self) -> None:
3535
snapshot_path=snapshot_path,
3636
)
3737
self.assertEqual([], report["issues"], report)
38-
self.assertEqual("1.10.0", report["version_name"])
39-
self.assertEqual(70, report["version_code"])
38+
self.assertEqual("1.11.0", report["version_name"])
39+
self.assertEqual(71, report["version_code"])
4040
self.assertEqual(10, report["sources"]["source_count"])
4141
self.assertEqual(3, len(report["advisories"]))
4242

0 commit comments

Comments
 (0)