* feat(rate-dialog): native store review + prompt after a productive win Baseline of PR #8680 (squashed) so review improvements land as a separate, cherry-pickable commit on top. Co-Authored-By: Claude <noreply@anthropic.com> * feat(rate-dialog): calm banner, feedback cooldown, delayed win prompt Review + UX follow-ups on top of PR #8680: - Fix (correctness): re-check full eligibility at prompt fire-time, not just opt-out, so a crash/data-damage recorded after arming still suppresses it. - Fix: iOS advances the rating cadence only once the native request resolves; a reject leaves eligibility intact instead of burning a lifetime prompt. - Fix: Android review-flow failure now logs and abandons instead of opening the Play Store unprompted (the trigger is an automatic win, not a user tap). - UX: web/electron/F-Droid now show a calm, non-modal banner that opens the full rate/feedback dialog on request, rather than a modal shoved in mid-flow. - UX: 'give feedback' no longer permanently opts out — it starts a long cooldown (~90 app-start days) so an engaged user can still be asked once more later. - UX: the win prompt fires a few seconds after the completion, not on the tap. - UX: dedicated 'Send feedback' entry in the Help menu (GitHub Discussions). - UX: show the maintainer email as selectable text (mailto: dead-end fallback). - Refactor: move selectTodayProgress into work-context.selectors (colocation); idempotency guard on the win subscription. Co-Authored-By: Claude <noreply@anthropic.com> * test(rate-dialog): import WIN_PROMPT_DELAY_MS in spec instead of mirroring it Export the delay constant from the service and reference it in the spec so the test can't silently drift from the real value. Found by a review pass. Co-Authored-By: Claude <noreply@anthropic.com> * feat(rate-dialog): recurring cadence, version-age gate, GitHub star CTA Growth-focused follow-ups (review found the lifetime cap starves review recency/velocity, which is what stores rank on): - Recurring cadence: after the fixed onboarding tiers (32/96 app-start days) the prompt no longer stops forever — it recurs every ~180 app-start days (~6+ months of real use), well inside Apple's ~3/365 allowance and Play's own quota. Still calm: win-timed, opt-out/crash/feedback-gated, OS-throttled. - Version-age gate: hold the prompt for 7 days after the app version changes so a fresh (possibly regressed) release isn't asked to be rated immediately. Tracked via two device-local LS keys, checked at arm time and fire time. - Play tier-burn is now only a deferral, not a lifetime loss (recurring cadence). - Web/Electron CTA: 'Star us on GitHub' (the desktop-distribution equivalent of store ranking) instead of the near-zero-conversion how-to-rate doc. Tests cover recurrence at + beyond the last tier, the version-age gate, and the updated cadence expectations. 60/60 green; tsc clean. Co-Authored-By: Claude <noreply@anthropic.com> * fix(rate-dialog): register iOS plugin, drop version-age gate, cut per-tick churn Second multi-review pass (7 reviewers): - CRITICAL (Codex, verified): the iOS StoreReview Capacitor plugin was never registered — CustomViewController registers WebDavHttpPlugin but not StoreReviewPlugin, so requestReview() rejected and the native App Store review card never showed. Register it via registerPluginInstance. - Remove the version-age gate (4 reviewers): getAppVersionStr() changes every release and the app ships ~weekly, so the 7-day window kept re-arming on every update (web SW reload / Electron auto-update) and near-permanently suppressed the prompt on desktop — the platform where the GitHub-star intent matters most. It also duplicated the 30-day crash gate, which already covers crashing regressions. Drops 2 LS keys, a constant, and ~40 LOC. - Perf: add distinctUntilChanged on the armed win stream so the 1s time-tracking tick (new {done,total} with identical numbers) no longer re-runs scan/filter every second for the whole session. 59/59 specs green; tsc clean. Kotlin/Swift can't be compiled here — the iOS registration needs an on-device/simulator smoke test. Co-Authored-By: Claude <noreply@anthropic.com> * chore(i18n): translate new rate-prompt strings into all locales Add BANNER_ACTION, BTN_STAR_GITHUB (F.D_RATE) and SEND_FEEDBACK (MH.HM) to all 27 non-en locale files — previously they existed only in en.json and fell back to English for everyone else. SEND_FEEDBACK reuses each locale's existing feedback wording for consistency; GitHub is kept untranslated. Deliberately edits locale files beyond the usual en-only workflow, per request. Best-effort translations — a native check on the less-common languages is welcome. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .idea | ||
| app | ||
| fastlane/metadata/android/en-US/changelogs | ||
| gradle/wrapper | ||
| .gitignore | ||
| ALWAYS_TAG_RELEASES_FOR_FDROID | ||
| build.gradle | ||
| capacitor.settings.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| README_OFFLINE.md | ||
| README_ONLINE.md | ||
| settings.gradle | ||
super-productivity-android
Android App for Super Productivity (https://super-productivity.com/).
I am not an Android developer, so help would be very welcome!!
New Connectivity-Free Mode is Here!
This feature was added on October 7, 2024. See Pull Request #57.
You can now use the core features of the app without an internet connection, offering a smoother and more reliable experience. We've made several key updates to enhance usability:
- Connectivity-Free Mode Support: Enjoy uninterrupted access to the app's main features without needing a network connection. You can still sync with WebDAV, Dropbox, or choose to work entirely offline without any network access.
- Online-Only Mode (Compatibility Mode): For users who prefer or need the traditional experience, the app still supports the original mode, which requires an internet connection for functionality.
- CORS Issues Resolved: Fixed cross-origin resource sharing (CORS) problems, especially for WebDAV sync, ensuring secure and smooth synchronisation with local or hosted resources.
- Enhanced Security: Strengthened data protection to keep your information secure, even when offline.
- Seamless Upgrade: Existing users can continue using the app in Online-Only Mode (Compatibility Mode) without any disruptions, while new users can immediately enjoy the benefits of Connectivity-Free Mode. Future updates will also include a smooth migration plan for everyone.
Update now to enjoy these exciting new features and improvements!
Launch Modes
The app supports two launch modes:
- Connectivity-Free Mode (Recommended) – Use the app without an internet connection.
- Online-Only Mode (Compatibility Mode) – Requires an internet connection to connect to production, local development, or self-hosted servers.
Configuring Launch Mode
To configure the launch mode, adjust the LAUNCH_MODE setting in the app_config.properties file:
- 0: Default behaviour (read from SharedPreferences)
- 1: Force Online-Only Mode (Compatibility Mode)
- 2: Force Connectivity-Free Mode (Recommended)
Recommendation: Set LAUNCH_MODE to 2 for Connectivity-Free Mode.
How to Adjust LAUNCH_MODE
- Locate the
app_config.propertiesfile in the project's root directory. - Open the file in a text editor.
- Find the
LAUNCH_MODEsetting and set it to your desired mode (0,1, or2).
LAUNCH_MODE=2
Important: The app_config.properties file is intended for local modifications only. DO NOT COMMIT this file unless you are sure of what you are doing.
Detailed Configuration Guides
- Connectivity-Free Mode Documentation (Recommended): Step-by-step guide to setting up and building the app in Connectivity-Free Mode.
- Online-Only Mode (Compatibility) Documentation: Step-by-step guide to setting up and building the app in Online-Only Mode.