Skip to content

Add RedReader support for Android - #1301

Merged
abrignoni merged 2 commits into
mainfrom
feat/redreader-android
Sep 3, 2026
Merged

Add RedReader support for Android#1301
abrignoni merged 2 commits into
mainfrom
feat/redreader-android

Conversation

@abrignoni

Copy link
Copy Markdown
Owner

Adds RedReader (org.quantumbadger.redreader) support for Android, an open source Reddit client that works without an account. Three artifacts:

  • Fetch History (cache.db): the index of the app's HTTP cache, one row per request with URL, account and time. File type is decoded from the app's FileType constants (Constants.java lines 263-275 at tag v1.26). The type decides how much weight a row carries: a Subreddit about row plus a Post list row together date a visit to that subreddit, and on the tested device the two subreddits opened produced exactly those. A Comment list row is weaker, because the app precaches comment threads for the posts it lists (the same file defines a COMMENT_PRECACHE priority at line 256): the tested device opened two threads and holds seventy comment rows. The notes say all of this, and that a cache prunes, so an absence is not evidence a request was never made.
  • Subreddits Opened: the per-account subreddit database. Its file name is the SHA-1 of the username (RedditSubredditManager.java line 100), so the anonymous account's file begins DA39A3EE…, the SHA-1 of an empty string, and a signed-in account's begins with the SHA-1 of its name. The Account Hash column carries that prefix so an examiner can test a suspected username against the file. One row per subreddit opened, with the time it was cached; the multi-kilobyte sidebar markdown Reddit stores per subreddit is not reported.
  • Accounts and Subscriptions: the account list without its OAuth refresh token (a credential, deliberately omitted), and the subscription list, which for the anonymous account is the app's shipped default set rather than anyone's choices.

Verified on a multi-container tree: the storage spellings collapse, a second Android user adds its own rows against a known delta (88 then 128 cache rows with a tenant holding 40), and a decoy package adds none. sample_data follows with the next corpus capture.

🤖 Generated with Claude Code

abrignoni and others added 2 commits September 3, 2026 08:13
Three artifacts from the app's databases:

- Fetch History (cache.db): the index of the app's HTTP cache, one row per
  request with URL, account and time. File type is decoded from the app's
  FileType constants at tag v1.26. A Subreddit about row and a Post list row
  together date a visit to that subreddit; a Comment list row is weaker,
  because the app precaches comment threads for listed posts (the same source
  file defines a COMMENT_PRECACHE priority), so it records a fetch rather than
  a thread anyone opened. The notes say so.
- Subreddits Opened: the per-account subreddit database, whose file name is
  the SHA-1 of the username (RedditSubredditManager.java line 100), so the
  anonymous account's file begins with the SHA-1 of an empty string and a
  signed-in account's with the SHA-1 of its name. One row per subreddit
  opened, with the time it was cached.
- Accounts and Subscriptions: the account list without its OAuth refresh
  token, which is a credential, and the subscription list, which for the
  anonymous account is the app's shipped default set rather than choices.

Verified on a multi-container tree: the storage spellings collapse, a second
Android user adds its own rows against a known delta (88 then 128 cache rows
with a tenant holding 40), and a decoy package adds none.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Row counts from a real aleapp.py run against the emu_a15_oss_v8 corpus.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@abrignoni
abrignoni merged commit 00122b1 into main Sep 3, 2026
10 checks passed
@abrignoni
abrignoni deleted the feat/redreader-android branch September 3, 2026 12:28
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.

1 participant