summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-12-08 23:36:37 +0400
committerAndrew Dolgov <[email protected]>2012-12-08 23:36:37 +0400
commit227ccc9b5b0dec6f2d05ff1458f0d7e08aadca6e (patch)
treeaf793fa49a2a172c66a58348b7ded2db7331ed32 /src
parent25a8c94c8184cf950996ec7aefa07ccb5fd90241 (diff)
add some friendly nagging
Diffstat (limited to 'src')
-rw-r--r--src/org/fox/ttrss/util/AppRater.java110
1 files changed, 102 insertions, 8 deletions
diff --git a/src/org/fox/ttrss/util/AppRater.java b/src/org/fox/ttrss/util/AppRater.java
index 5b410b69..bab3225b 100644
--- a/src/org/fox/ttrss/util/AppRater.java
+++ b/src/org/fox/ttrss/util/AppRater.java
@@ -2,10 +2,16 @@ package org.fox.ttrss.util;
// From http://androidsnippets.com/prompt-engaged-users-to-rate-your-app-in-the-android-market-appirater
+import java.util.List;
+
+import org.fox.ttrss.R;
+
import android.app.Dialog;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
import android.net.Uri;
import android.view.View;
import android.view.View.OnClickListener;
@@ -16,13 +22,32 @@ import android.widget.TextView;
public class AppRater {
private final static String APP_TITLE = "Tiny Tiny RSS";
private final static String APP_PNAME = "org.fox.ttrss";
+ private final static String DONATE_APP_PNAME = "org.fox.ttrss.key";
private final static int DAYS_UNTIL_PROMPT = 3;
private final static int LAUNCHES_UNTIL_PROMPT = 7;
+
+ private final static int DONATION_DAYS_UNTIL_PROMPT = DAYS_UNTIL_PROMPT * 3;
+ private final static int DONATION_LAUNCHES_UNTIL_PROMPT = LAUNCHES_UNTIL_PROMPT * 3;
+
+ public static boolean isDonationApkInstalled(Context mContext) {
+ List<PackageInfo> pkgs = mContext.getPackageManager()
+ .getInstalledPackages(0);
+
+ for (PackageInfo p : pkgs) {
+ if (DONATE_APP_PNAME.equals(p.packageName)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
public static void appLaunched(Context mContext) {
SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
- if (prefs.getBoolean("dontshowagain", false)) { return ; }
+
+ if (prefs.getBoolean("dontshowagain", false) &&
+ prefs.getBoolean("donate_dontshowagain", false)) { return ; }
SharedPreferences.Editor editor = prefs.edit();
@@ -37,17 +62,82 @@ public class AppRater {
editor.putLong("date_firstlaunch", date_firstLaunch);
}
+ boolean rateDialogShown = false;
+
// Wait at least n days before opening
- if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
- if (System.currentTimeMillis() >= date_firstLaunch +
- (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
- showRateDialog(mContext, editor);
- }
+ if (launch_count >= LAUNCHES_UNTIL_PROMPT &&
+ !prefs.getBoolean("dontshowagain", false) &&
+ System.currentTimeMillis() >= date_firstLaunch + (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
+
+ rateDialogShown = true;
+ showRateDialog(mContext, editor);
}
-
+
+ if (launch_count >= DONATION_LAUNCHES_UNTIL_PROMPT &&
+ !prefs.getBoolean("donate_dontshowagain", false) &&
+ !rateDialogShown &&
+ !isDonationApkInstalled(mContext) &&
+ System.currentTimeMillis() >= date_firstLaunch + (DONATION_DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
+
+ showDonationDialog(mContext, editor);
+ }
+
editor.commit();
}
+ public static void showDonationDialog(final Context mContext, final SharedPreferences.Editor editor) {
+ final Dialog dialog = new Dialog(mContext);
+ dialog.setTitle("Donate to " + APP_TITLE);
+
+ LinearLayout ll = new LinearLayout(mContext);
+ ll.setOrientation(LinearLayout.VERTICAL);
+
+ TextView tv = new TextView(mContext);
+ tv.setText("If you enjoy using " + APP_TITLE + ", please consider donating. Your $1.99 could go a long way towards continued support of this project. Thanks!");
+ tv.setWidth(240);
+ tv.setPadding(4, 0, 4, 10);
+ ll.addView(tv);
+
+ Button b1 = new Button(mContext);
+ b1.setText("Donate!");
+ b1.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ try {
+ mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + DONATE_APP_PNAME)));
+ } catch (ActivityNotFoundException e) {
+ mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + DONATE_APP_PNAME)));
+ }
+ dialog.dismiss();
+ }
+ });
+ ll.addView(b1);
+
+ Button b2 = new Button(mContext);
+ b2.setText("Remind me later");
+ b2.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ ll.addView(b2);
+
+ Button b3 = new Button(mContext);
+ b3.setText("No, thanks");
+ b3.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ if (editor != null) {
+ editor.putBoolean("donate_dontshowagain", true);
+ editor.commit();
+ }
+ dialog.dismiss();
+ }
+ });
+ ll.addView(b3);
+
+ dialog.setContentView(ll);
+ dialog.show();
+ }
+
public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
final Dialog dialog = new Dialog(mContext);
dialog.setTitle("Rate " + APP_TITLE);
@@ -65,7 +155,11 @@ public class AppRater {
b1.setText("Rate " + APP_TITLE);
b1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
- mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
+ try {
+ mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
+ } catch (ActivityNotFoundException e) {
+ mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + APP_PNAME)));
+ }
dialog.dismiss();
}
});