Skip to content

Feature Request: Custom In-App Rating Prompt (No Google API) #191

Description

@amarradi

Summary

Display a friendly, non-intrusive dialog asking users to rate the app on Google Play – without using the Google Play In-App Review API.

The dialog should appear only after a certain amount of meaningful usage, and never directly after installing the update.
It must be shown only at appropriate, non-disruptive moments.
All logic and data persistence is to be centralized via Leafpad.java using SharedPreferences.


Why?

Encouraging positive ratings helps the app’s visibility and growth.
However, aggressive or poorly timed prompts cause frustration.
This feature is meant to be respectful, optional, and user-friendly.


✅ Suggested Trigger Conditions

The prompt should appear only if at least one of these criteria is met:

The user has created 5 or more notes, or

The total character count across all notes is 500 or more, or

The app has been opened 10 times or more

🧠 These thresholds are suggestions – developers are welcome to bring in additional ideas to refine the logic.


❗ Important: Do Not Prompt Immediately After Update

Even if a user has already fulfilled all rules, do not prompt immediately after updating the app.
Instead:

Add a delay (e.g. 5 more launches or 7 days)

Or track a rating_prompt_first_possible timestamp

Developer may choose if this delay is needed and how to implement it


🚫 Never Interrupt Note Editing

⚠️ The rating prompt must never appear while the user is editing a note.

This includes:

Being inside the NoteEditActivity

Editing title or body text

Viewing an unsaved draft

Users must not be interrupted while writing.
Only show the prompt on the home screen, in a passive moment.


🧭 Dialog Behavior

The dialog (preferably a BottomSheetDialog) should offer:

Yes → open the Play Store via SettingsFragment.launchAppStore(...)

No → never ask again

Later → postpone next prompt


⏰ Postponement Logic

After first "Later" → wait 2 months

After second "Later" → wait 4 more months

After that → never show again


🔐 Centralized SharedPreferences via Leafpad.java

Suggested keys:

rating_prompt_answered = "yes" | "no" | "later"
rating_prompt_later_date = long timestamp
rating_prompt_first_possible = long timestamp (optional)
launch_count = int
note_count = int
total_note_chars = int

All read/write logic should go through static helper methods in Leafpad.java.


🧠 Additional Developer Ideas (optional)

Detect idle time before prompting

Tie the prompt to actions like exporting or sharing a note

Allow test triggering via Developer Options

Remember if the prompt was already shown during the session


🧱 Architecture

Must follow the MVVM pattern

Strings must be externalized and translatable (start with English)

Use only Material 3 components and named colors

The UI should be lightweight, friendly, and skippable

Hey 👋 just a quick note:
If you're working on this or planning a PR, check out our Contributing Guidelines first. Thanks so much! 💚

Metadata

Metadata

Assignees

No one assigned

    Labels

    New featureLabel for new featureenhancementNew feature or requestnice to haveIt would be nice if this were implemented

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions