From 204ee6d4b9d69bab67e867de473f14499a09c797 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 27 Dec 2012 00:01:39 +0400 Subject: [PATCH] trialware stuff, bump version --- AndroidManifest.xml | 4 +- res/menu/main_menu.xml | 2 +- res/values/strings.xml | 4 ++ src/org/fox/ttrss/CommonActivity.java | 5 ++ src/org/fox/ttrss/FeedsActivity.java | 2 +- src/org/fox/ttrss/OnlineActivity.java | 97 ++++++++++++++++++++++----- src/org/fox/ttrss/util/AppRater.java | 92 +------------------------ 7 files changed, 95 insertions(+), 111 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3f656b1a..df98441d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="122" + android:versionName="1.0" > + android:title="@string/trial_purchase"/> Dim status bar Dim status bar when reading %1$d comments + Trial mode, %1$d day(s) left. + Unlock full version + Trial expired + To continue using Tiny Tiny RSS please unlock the full version by purchasing the key. \ No newline at end of file diff --git a/src/org/fox/ttrss/CommonActivity.java b/src/org/fox/ttrss/CommonActivity.java index 5c18f383..d1f09958 100644 --- a/src/org/fox/ttrss/CommonActivity.java +++ b/src/org/fox/ttrss/CommonActivity.java @@ -1,8 +1,13 @@ package org.fox.ttrss; +import java.util.List; + import org.fox.ttrss.util.DatabaseHelper; import android.annotation.SuppressLint; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.app.FragmentActivity; diff --git a/src/org/fox/ttrss/FeedsActivity.java b/src/org/fox/ttrss/FeedsActivity.java index 2480de6a..a129c10c 100644 --- a/src/org/fox/ttrss/FeedsActivity.java +++ b/src/org/fox/ttrss/FeedsActivity.java @@ -107,7 +107,7 @@ public class FeedsActivity extends OnlineActivity implements HeadlinesEventListe ft.commit(); AppRater.appLaunched(this); - + checkTrial(true); } } else { // savedInstanceState != null m_actionbarUpEnabled = savedInstanceState.getBoolean("actionbarUpEnabled"); diff --git a/src/org/fox/ttrss/OnlineActivity.java b/src/org/fox/ttrss/OnlineActivity.java index 13f92a3f..36c46461 100644 --- a/src/org/fox/ttrss/OnlineActivity.java +++ b/src/org/fox/ttrss/OnlineActivity.java @@ -48,6 +48,8 @@ import com.google.gson.reflect.TypeToken; public class OnlineActivity extends CommonActivity { private final String TAG = this.getClass().getSimpleName(); + + private final static int TRIAL_DAYS = 8; protected SharedPreferences m_prefs; protected Menu m_menu; @@ -160,6 +162,7 @@ public class OnlineActivity extends CommonActivity { if (isOffline) { switchOfflineSuccess(); } else { + checkTrial(false); /* if (getIntent().getExtras() != null) { Intent i = getIntent(); @@ -440,17 +443,90 @@ public class OnlineActivity extends CommonActivity { if (hasPendingOfflineData()) syncOfflineData(); + finish(); + } + + public void checkTrial(boolean notify) { List pkgs = getPackageManager() .getInstalledPackages(0); + boolean isTrial = true; + for (PackageInfo p : pkgs) { if ("org.fox.ttrss.key".equals(p.packageName)) { - toast(R.string.donate_thanks); + //toast(R.string.donate_thanks); + isTrial = false; break; } } + + if (isTrial) { + long firstStart = m_prefs.getLong("date_firstlaunch_trial", -1); + + if (firstStart == -1) { + firstStart = System.currentTimeMillis(); + + SharedPreferences.Editor editor = m_prefs.edit(); + editor.putLong("date_firstlaunch_trial", firstStart); + editor.commit(); + } + + if (!notify && System.currentTimeMillis() > firstStart + (TRIAL_DAYS * 24 * 60 * 60 * 1000)) { + + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setTitle(R.string.trial_expired) + .setMessage(R.string.trial_expired_message) + .setCancelable(false) + .setPositiveButton(getString(R.string.trial_purchase), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + + openUnlockUrl(); + finish(); + + } + }) + .setNegativeButton(getString(R.string.cancel), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + + finish(); + + } + }); - finish(); + AlertDialog dialog = builder.create(); + dialog.show(); + + } else { + long daysLeft = Math.round((firstStart + (TRIAL_DAYS * 24 * 60 * 60 * 1000) - System.currentTimeMillis()) / (24 * 60 * 60 * 1000)); + + if (notify) { + toast(getString(R.string.trial_mode_prompt, Long.valueOf(daysLeft))); + } + } + } + } + + private void openUnlockUrl() { + try { + Intent intent = new Intent(Intent.ACTION_VIEW, + Uri.parse("market://details?id=org.fox.ttrss.key")); + startActivity(intent); + } catch (ActivityNotFoundException ae) { + try { + Intent intent = new Intent(Intent.ACTION_VIEW, + Uri.parse("https://play.google.com/store/apps/details?id=org.fox.ttrss.key")); + startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + toast(R.string.error_other_error); + } + } } @Override @@ -464,20 +540,7 @@ public class OnlineActivity extends CommonActivity { return true; case R.id.donate: if (true) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse("market://details?id=org.fox.ttrss.key")); - startActivity(intent); - } catch (ActivityNotFoundException ae) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse("https://play.google.com/store/apps/details?id=org.fox.ttrss.key")); - startActivity(intent); - } catch (Exception e) { - e.printStackTrace(); - toast(R.string.error_other_error); - } - } + openUnlockUrl(); } return true; case R.id.logout: @@ -1275,7 +1338,7 @@ public class OnlineActivity extends CommonActivity { GlobalState.getInstance().m_canUseProgress = m_canUseProgress; Log.d(TAG, "Authenticated! canUseProgress=" + m_canUseProgress); - + if (apiLevel != null) { setApiLevel(apiLevel.getAsInt()); Log.d(TAG, "Received API level: " + getApiLevel()); diff --git a/src/org/fox/ttrss/util/AppRater.java b/src/org/fox/ttrss/util/AppRater.java index 5bcc5788..08163710 100644 --- a/src/org/fox/ttrss/util/AppRater.java +++ b/src/org/fox/ttrss/util/AppRater.java @@ -2,16 +2,11 @@ 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; @@ -22,32 +17,14 @@ 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 * 10; - private final static int DONATION_LAUNCHES_UNTIL_PROMPT = LAUNCHES_UNTIL_PROMPT * 3; - - public static boolean isDonationApkInstalled(Context mContext) { - List 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) && - prefs.getBoolean("donate_dontshowagain", false)) { return ; } + if (prefs.getBoolean("dontshowagain", false)) { return ; } SharedPreferences.Editor editor = prefs.edit(); @@ -62,82 +39,17 @@ 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 && !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); + showRateDialog(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);