New app: FocusFeed
Samsung release-APK UI retest — 2026-10-27
Author-side physical testing passed on Samsung SM-X510 (Galaxy Tab S9 FE), Android 16, using upstream FocusFeed 1.0.2 ARM64 / code 4022, signed with an Android Debug development certificate, and APKPure 3.20.81 / code 3208157 (com.apkpure.aegon). This is not the original SM-G998B / Android 15 configuration and not an F-Droid-signed APK test.
Usage access and overlay permission were enabled through Android Settings. With APKPure selected and zero balance, a 60-second focus session visibly blocked two consecutive APKPure launches, with the overlay disappearing on return to FocusFeed. Completion credited 12 seconds normally through the UI. Redeeming those 12 seconds opened APKPure without the overlay; the blocker returned when the reward expired. An unselected Samsung Calculator remained accessible. Screenshots were inspected locally for both blocks, reward access and reblocking. No Android overlay protections were bypassed. The session was stopped afterward.
This closes the author-side Samsung/Android 16 and full release-UI redemption checks. Independent verification on the original Samsung/Android 15 configuration and maintainer acceptance remain pending. Earlier dated results below retain their original scope.
Physical-device validation — 2026-10-26
Seven instrumentation tests passed on Motorola Edge 70 Fusion / Android 17 (API 37), in 38.481 seconds. Tested: visible zero-balance blocker; blocking on two consecutive launches after returning to FocusFeed; unselected app remaining accessible; persisted focus credit and notification; reward expiry and reblocking; permission revocation; migration.
The runtime APK is the 1.0.2 debug build from d2c3b34, installed as a separate .debug package. The target is an overlay-compatible Activity in a separate test APK, not APKPure. Tests grant debug permissions and drive the native repository; they do not validate the complete release-APK UI redemption flow. No production app data was cleared.
The first run passed 5/6 and timed out in startActivitySync while returning to Flutter. The updated test launches asynchronously and still requires overlay disappearance on return and the actual visible blocking message on both launches. An unselected-app scenario was added. The second run with the screen unlocked passed 7/7. Changes and detailed evidence: upstream PR #4. No runtime code or release tag was changed.
Still pending: independent Samsung SM-G998B / Android 15 / APKPure retest, full release-APK UI redemption flow, and maintainer acceptance. This Motorola result does not establish the cause or resolution of the original Samsung observation. Official publication is not claimed.
Code Quality reports: the 32 findings comprise three Minor SYSTEM_ALERT_WINDOW warnings (one per ABI) and 29 informational findings covering permissions, R8, ABI/size, test-signed artifacts and Fastlane metadata. SYSTEM_ALERT_WINDOW draws the voluntary blocker; PACKAGE_USAGE_STATS reads local foreground events; FOREGROUND_SERVICE/SPECIAL_USE maintain the user-started monitor; notifications are optional; boot recovery restores paused progress without downtime credit. AndroidX generates the non-exported receiver permission. Artifact signing links are for CI testing, not proof of official catalog signing or publication.
Current submission — 2026-10-25
Version 1.0.2, ABI codes 4021 / 4022 / 4023. Upstream PR #3 is merged; v1.0.2 source release pins d2c3b34d730e90426cd7ef184af07baa4d6b8a51. The recipe now pins that same full commit for all three architectures. Matching changelogs exist in en-US and pt-BR.
Release preparation passed Flutter analysis, 20 Flutter tests, JVM tests and Android/iOS simulator compilation in GitHub Actions 39828828271. The merge adds no further code changes. F-Droid pipeline 2987337391 passed all nine jobs, including source/schema/lint/update checks, all three ABI builds (4021/4022/4023), and the final APK check. Earlier pipelines below refer to earlier revisions.
Still required: independent Samsung SM-G998B / Android 15 / APKPure retest of two consecutive launches, unselected-app access, reward redemption and blocking after expiry. The overlap/activity-class fix addresses tracking weaknesses but has not established or resolved the original device-specific cause. The two-launch scenario has now passed on Motorola as documented above; the Samsung retest remains pending. Maintainer acceptance remains pending.
The sections below retain the submission rationale and dated validation history; old version numbers and pipeline results are historical.
Abstract
Please introduce the functions and usage of your app in summary, and also attach some screenshots.
FocusFeed (io.github.alunoadsnoite.focusfeed, MIT) is a Portuguese-language offline Pomodoro app for Android. Users select installed apps, grant Usage Access and draw-over-other-apps access, and start a focus session. Completed focus earns 20% of its duration as a break balance; spending that balance temporarily releases the selected apps. Pause, resume, stop, local daily history, recovery after interruption and optional notifications are included. Accessibility access is not required.
There is no account, backend, advertising, analytics or tracking. The release manifest has no INTERNET permission. Android Settings and other apps can intentionally hide overlays; background restrictions can interrupt monitoring. This is a voluntary focus aid, not an unbreakable parental-control app.
Real screenshots from a temporary Android 14 emulator (Portuguese UI; also provided as en-US fallback metadata):
The blocker screenshot was taken only after the instrumented test found the visible focus message above an overlay-compatible activity in a separate test APK. These are actual app screenshots, not mockups. Version 1.0.1 does not change the user interface from the version captured.
Please elaborate why you wrote this app. Please highlight the unique functions it provides over other similar apps in F-Droid.
The aim is to connect focus time with a concrete, earned break allowance while keeping all progress on the device. The combination of a fixed 20% time balance, native app overlays, automatic reblocking after a break and recovery without crediting unmonitored time provides value beyond a standalone timer. We do not claim that individual features are absent from every other F-Droid app.
Checklist
Policy
- The app complies with the inclusion criteria.
- The original app author has been notified (and does not oppose the inclusion). If you are not the author, please paste the link of the reply from the author.
- The upstream app source code repo contains the app metadata in a Fastlane or Triple-T folder structure. The summary and description must be included and images, icon, and changelog should also be provided for better user experience. The
en-USlocale must be included.
Docs
- Please read the guide first if this is your first contribution.
- Please make sure your metadata follows the best practice in our templates.
- Please read the Build Metadata Reference and make sure your metadata is valid.
- Please read the Quick Start Guide.
Merge Request Setup
- The title of this merge request should follow "New app: app name" format.
- Please make sure your fdroiddata fork is public and your branch is not protected. See https://docs.gitlab.com/user/project/repository/branches/protected/.
- Please read our Git guide if you don't know how to rebase your branch. Don't rebase your branch if there is no conflict.
- All related fdroiddata and RFP issues have been referenced in this merge request
- Please only submit one app in one MR.
Metadata
- Metadata must be put in
metadata/<applicationId>.yml. - Metadata must be a valid YAML file.
- Metadata must use LF as line ending.
- Don't add summary/description/changelog/images or anything that should be provided in upstream repo. Please check the Changes tab to make sure there is no other unrelated files added in the MR.
- Releases are tagged and auto update is enabled unless there is a special reason.
- There is an issue tracker and contact info of the author so that we can report bugs and contact the author.
- An AuthorName must be added. It doesn't need to be the real name.
- External repos are added as git submodules instead of srclibs. You can update git submodules without opening an MR in this repo and the submodule is covered by our scanner.
- Enable Reproducible Builds. We'll use your signature for improved security/reliability, also allowing users to switch between different channels. Do note that if you don't enable reproducible build then the apk will be signed with our key so you can't enable it later. If you can't enable this, please add the reasons here.
- Setup abi split if the APK is large and the splitted ones can be much smaller.
- Only the latest versions should be kept in the metadata before it's merged. If you update the metadata, please replace the old versions with the new ones.
- Don't add any disabled versions in the metadata.
- The
commitfield should be the full hash. Please don't use tag or branch in commit.
Pipeline
- All pipelines should pass.
- All warnings and errors in the Reports tab should be fixed or explained.
- F-Droid CI runners are under GitLab's FOSS program, so there's no need for you to pay for any CI time. If Gitlab starts asking for phone numbers or credit cards don't submit anything, just leave a note in the MR so we know we need to trigger the CI.
Explanations and validation
- Author and related requests: I am the upstream maintainer submitting this app through the same account. This MR is the existing FocusFeed submission; no separate FocusFeed RFP issue or duplicate MR was found in the project searches on 2026-10-14. The public fork uses the unprotected
focusfeed-metadatabranch. - Metadata: only
metadata/io.github.alunoadsnoite.focusfeed.ymlbelongs in this MR. Upstream Fastlane contains en-US and pt-BR summaries, descriptions, icons, changelogs and four real phone screenshots. The app UI is Portuguese; en-US provides English descriptions and the same actual screenshots. - Version and source: version 1.0.1 uses base build number 401 and now pins source commit
0e0495bbb80b9f982c53cf36c79919212bd1e6ad, which includes the foreground-blocking fix from upstream PR #2 (closed) and the 4011–4013 Fastlane changelogs. The earlierv1.0.1-fdroid.1tag remains on the previous source revision. ARMv7/ARM64/x86_64 codes are 4011/4012/4013, followingbase * 10 + ABI;VercodeOperationtracks those variants. The higher base preserves upgrades from earlier split codes (1002/2002/4002). - SDK source exception: Flutter is a toolchain srclib, not an additional application source repository. The recipe follows the official
templates/build-flutter.ymlalternative:flutter@stable, then checkout the exact SDK revision recorded in.metadata. Other external source repositories are not used. - Signing exception: upstream reproducible signing has not been verified and no reproducible upstream APK is published. Please use the F-Droid signing key.
FOCUSFEED_UNSIGNED=1excludes the developer signing configuration. We understand that switching later to the upstream reproducible-signing arrangement is not available under the template's policy. No signing secrets are committed. - ABI splitting: separate builds use
--split-per-abi --target-platform=...and architecture-specific output paths. Local unsigned release sizes are approximately 14.3 MB (ARMv7), 17.0 MB (ARM64) and 18.4 MB (x86_64), compared with the previous ~47 MB universal APK. Flutter's release build already enables R8 and resource shrinking. - Local validation: Flutter analyze passed, 20 Flutter tests and all 17 JVM tests passed on the new source commit, and GitHub Actions built the Android debug/release variants. The previous source revision passed five instrumented Android 14 scenarios; the new two-launch instrumentation scenario is included but was not executed locally because the local emulators failed during startup. The overlay test uses a separate overlay-compatible test activity and still requires the actual visible focus message. Android's protections were not bypassed.
- Permissions: Usage Access checks only foreground-app events locally; SYSTEM_ALERT_WINDOW draws the voluntary blocker; foreground-service permissions maintain the user-started monitor; notifications are optional; BOOT_COMPLETED restores paused progress without awarding downtime credit. No QUERY_ALL_PACKAGES or accessibility service is declared. Launcher visibility is limited to apps returned by the launcher query.
- Pipeline: all nine jobs passed in https://gitlab.com/alunoadsnoite/fdroiddata/-/pipelines/2963844433, including all three ABI builds and APK checks. Upstream GitHub CI also passed, including Android and iOS simulator checks. Maintainer acceptance remains separate.
- Platform scope: this submission builds Android;
rm: iosexcludes iOS source. iPhone Screen Time validation remains pending upstream and is not claimed as Android build validation.
Build review update — 2026-10-19
Implemented the requested Gradle override and updated all three ABI recipes. The base build number is now 401 so no existing split APK is downgraded; generated codes are 4011/4012/4013. The additional v1.0.1-fdroid.1 tag lets tag-based update checks detect the new build number without moving v1.0.1. Source changes are in upstream PR #1, merged; the recipe pins the public source commit.
All nine F-Droid jobs passed in pipeline #2963844433, including all three APK builds and binary checks. Local Flutter analysis and all 20 tests passed; upstream GitHub CI passed as well.
Maintainer-triggered upstream pipeline #2963950139 passed all nine jobs, including all three ABI builds and APK checks. Awaiting independent tester review as requested by linsui.
Tester follow-up — 2026-10-22
Joerg's review reported that the blocker was not shown reliably when a selected app was launched again, and that the changelogs did not match version codes 4011–4013. Both issues are addressed in upstream PR #2, merged as 0e0495bbb80b9f982c53cf36c79919212bd1e6ad:
- Foreground polling now uses a bounded 10-second overlap and tracks package plus activity class, so a newer launch is not lost when an event is delivered late or a previous activity pauses afterwards.
- Four JVM regression tests cover the overlap boundary, a late pause of a previous activity, replay of stale events and reopening the selected app. A new instrumentation scenario requires visible blocking on two consecutive launches.
- Fastlane changelogs now exist for 4011, 4012 and 4013 in both listing locales, so the changelog is no longer silently omitted.
All three ABI recipes now pin 0e0495b; version name/codes remain 1.0.1 / 4011–4013. A new F-Droid pipeline is running on this revision. Please retest the arm64 build once it is available. Apps that explicitly hide non-system overlays, including Android Settings, can still suppress the blocker by design; the patch does not bypass Android protections.



