summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-02-06 12:15:27 +0300
committerAndrew Dolgov <[email protected]>2012-02-06 12:15:27 +0300
commit36451d43b8025c005882c6baed9f0c075648dd07 (patch)
tree571c34264220fd6adae69c787af6feadbfc960ef
parent03945cea2ed93d9880fbaf503f3b7c02bad7d4e3 (diff)
add apprater, fix logging in two times, bump version
-rw-r--r--AndroidManifest.xml4
-rw-r--r--src/org/fox/ttrss/AppRater.java100
-rw-r--r--src/org/fox/ttrss/MainActivity.java12
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;
}
}