{"id":51022874,"url":"https://github.com/jsfan3/streakapp","last_synced_at":"2026-06-21T17:01:54.332Z","repository":{"id":360468026,"uuid":"1250111263","full_name":"jsfan3/streakapp","owner":"jsfan3","description":"An Android Codename One app for tracking language-study streaks from foreground app usage","archived":false,"fork":false,"pushed_at":"2026-06-13T23:24:28.000Z","size":1382,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T00:22:13.645Z","etag":null,"topics":["android","cc0","codename-one","java","language-learning","streak-tracker","usage-access"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsfan3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-26T10:10:58.000Z","updated_at":"2026-06-13T22:45:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jsfan3/streakapp","commit_stats":null,"previous_names":["jsfan3/streakapp"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jsfan3/streakapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsfan3%2Fstreakapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsfan3%2Fstreakapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsfan3%2Fstreakapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsfan3%2Fstreakapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsfan3","download_url":"https://codeload.github.com/jsfan3/streakapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsfan3%2Fstreakapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34618484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","cc0","codename-one","java","language-learning","streak-tracker","usage-access"],"created_at":"2026-06-21T17:01:53.251Z","updated_at":"2026-06-21T17:01:54.323Z","avatar_url":"https://github.com/jsfan3.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StreakApp\n\nStreakApp is a small Codename One app for tracking daily language-study streaks\nfrom real Android app usage. It reads Android Usage Access statistics locally,\nchecks whether the configured study apps reached their daily target, and keeps a\nsimple streak with limited streak freezes.\n\n## Features\n\n- Tracks usage time for AnkiDroid, Duolingo, Drops, Rosetta Stone, Talkpal, and\n  Quizlet.\n- Lets each app be enabled or disabled and gives each app an editable daily\n  minute target.\n- Supports calendar days ending at midnight or study days ending at 4:00 AM.\n- Awards one streak freeze every four completed days, capped at four available\n  freezes.\n- Opens the tracked Android apps directly from the dashboard.\n- Refreshes usage asynchronously and refreshes again when the app returns to the\n  foreground.\n- Supports English and Italian localization. Additional localizations can be\n  added fairly easily.\n- Supports system, light, and dark appearance modes.\n- Supports in-app text size adjustment on top of the device text settings.\n\n## Usage Time Semantics\n\nStreakApp reports the time an Android app remains in the foreground, not the\nstrict amount of active study time inside that app. Android's usage statistics\ninclude the time spent while the app is launching and visible. On an older\nphone, for example, a language app that takes twenty seconds to start can add\nthose twenty seconds to the foreground total.\n\nFor this reason, the daily minute target for each app is editable. You can tune\nthe target to account for launch time and other foreground time that is not\nactual study.\n\n## Screenshots\n\n| Dashboard | Settings |\n| --- | --- |\n| ![Dashboard](docs/screenshots/home.png) | ![Settings](docs/screenshots/settings.png) |\n\n| Navigation | Information |\n| --- | --- |\n| ![Navigation drawer](docs/screenshots/navigation.png) | ![Information](docs/screenshots/information.png) |\n\n## Android Permission\n\nUsage tracking requires Android's Usage Access permission for StreakApp. The app\ndoes not request a normal runtime permission dialog because Android exposes this\npermission through system settings.\n\nAll usage calculations happen on the device. StreakApp does not send usage data\nto a server.\n\n## License\n\nStreakApp is dedicated to the public domain under the CC0 1.0 Universal\nlicense. See [LICENSE](LICENSE).\n\n## Development\n\nThis is a Java 17 Codename One project generated with the Codename One\nInitializr.\n\nUseful commands:\n\n```bash\n./mvnw -pl common compile cn1:compliance-check\n./mvnw -pl common cn1:run\n./mvnw -pl common cn1:test\n./mvnw -pl android -am package -Dcodename1.platform=android -Dcodename1.buildTarget=android-device\n```\n\nAutomated Codename One cloud builds require account credentials or a configured\nuser token. Android signing material should be supplied locally or through CI\nsecrets and must not be committed.\n\n## Repository Notes\n\nGenerated build outputs, APK/AAB files, keystores, provisioning files, local\nproperties, and environment files are ignored by `.gitignore`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsfan3%2Fstreakapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsfan3%2Fstreakapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsfan3%2Fstreakapp/lists"}