diff options
-rw-r--r-- | AndroidManifest.xml | 4 | ||||
-rw-r--r-- | src/org/fox/ttrss/AppRater.java | 100 | ||||
-rw-r--r-- | src/org/fox/ttrss/MainActivity.java | 12 |
3 files changed, 113 insertions, 3 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d017eb88..d58d7788 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.fox.ttrss" - android:versionCode="58" - android:versionName="0.4.10" > + android:versionCode="59" + android:versionName="0.4.11" > <uses-sdk android:minSdkVersion="7" /> diff --git a/src/org/fox/ttrss/AppRater.java b/src/org/fox/ttrss/AppRater.java new file mode 100644 index 00000000..2bce4248 --- /dev/null +++ b/src/org/fox/ttrss/AppRater.java @@ -0,0 +1,100 @@ +package org.fox.ttrss;
+
+// From http://androidsnippets.com/prompt-engaged-users-to-rate-your-app-in-the-android-market-appirater
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.LinearLayout;
+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 int DAYS_UNTIL_PROMPT = 3;
+ private final static int LAUNCHES_UNTIL_PROMPT = 7;
+
+ public static void appLaunched(Context mContext) {
+ SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
+ if (prefs.getBoolean("dontshowagain", false)) { return ; }
+
+ SharedPreferences.Editor editor = prefs.edit();
+
+ // Increment launch counter
+ long launch_count = prefs.getLong("launch_count", 0) + 1;
+ editor.putLong("launch_count", launch_count);
+
+ // Get date of first launch
+ Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
+ if (date_firstLaunch == 0) {
+ date_firstLaunch = System.currentTimeMillis();
+ editor.putLong("date_firstlaunch", date_firstLaunch);
+ }
+
+ // 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);
+ }
+ }
+
+ editor.commit();
+ }
+
+ public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
+ final Dialog dialog = new Dialog(mContext);
+ dialog.setTitle("Rate " + 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 take a moment to rate it. Thanks for your support!");
+ tv.setWidth(240);
+ tv.setPadding(4, 0, 4, 10);
+ ll.addView(tv);
+
+ Button b1 = new Button(mContext);
+ 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)));
+ 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("dontshowagain", true);
+ editor.commit();
+ }
+ dialog.dismiss();
+ }
+ });
+ ll.addView(b3);
+
+ dialog.setContentView(ll);
+ dialog.show();
+ }
+}
\ No newline at end of file diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 6dabfbec..7ec8ffd2 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -65,6 +65,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices { private boolean m_compatMode = false; private boolean m_enableCats = false; private int m_apiLevel = 0; + private boolean m_isLoggingIn = false; private boolean m_isOffline = false; private boolean m_offlineModeReady = false; @@ -539,6 +540,9 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } } + //AppRater.showRateDialog(this, null); + AppRater.appLaunched(this); + if (m_sessionId != null) { loginSuccess(); } else { @@ -691,7 +695,9 @@ public class MainActivity extends FragmentActivity implements OnlineServices { m_refreshTimer.schedule(m_refreshTask, 60 * 1000L, 120 * 1000L); } else { - login(); + if (!m_isLoggingIn) { + login(); + } } } @@ -1426,6 +1432,8 @@ public class MainActivity extends FragmentActivity implements OnlineServices { @SuppressWarnings("unchecked") protected void onPostExecute(JsonElement result) { + m_isLoggingIn = false; + if (result != null) { try { JsonObject content = result.getAsJsonObject(); @@ -1743,6 +1751,8 @@ public class MainActivity extends FragmentActivity implements OnlineServices { ar.execute(map); setLoadingStatus(R.string.login_in_progress, true); + + m_isLoggingIn = true; } } |