summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-12-27 00:01:39 +0400
committerAndrew Dolgov <[email protected]>2012-12-27 00:01:39 +0400
commit204ee6d4b9d69bab67e867de473f14499a09c797 (patch)
treec7cc9ed1b680c7fbf6b68c6a7a5ecba72c20b05b
parentf27ffe5f0a8a75d563682e2fc32162cee9ffdbb1 (diff)
trialware stuff, bump version
-rw-r--r--AndroidManifest.xml4
-rw-r--r--res/menu/main_menu.xml2
-rw-r--r--res/values/strings.xml4
-rw-r--r--src/org/fox/ttrss/CommonActivity.java5
-rw-r--r--src/org/fox/ttrss/FeedsActivity.java2
-rw-r--r--src/org/fox/ttrss/OnlineActivity.java97
-rw-r--r--src/org/fox/ttrss/util/AppRater.java92
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 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttrss"
- android:versionCode="119"
- android:versionName="0.9.3" >
+ android:versionCode="122"
+ android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml
index a4d168a5..076597cb 100644
--- a/res/menu/main_menu.xml
+++ b/res/menu/main_menu.xml
@@ -134,7 +134,7 @@
<item
android:id="@+id/donate"
android:showAsAction=""
- android:title="@string/donate"/>
+ android:title="@string/trial_purchase"/>
</group>
<item
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c85634ef..93f97cc1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -147,4 +147,8 @@
<string name="prefs_dim_status_bar">Dim status bar</string>
<string name="prefs_dim_status_bar_long">Dim status bar when reading</string>
<string name="article_comments">%1$d comments</string>
+ <string name="trial_mode_prompt">Trial mode, %1$d day(s) left.</string>
+ <string name="trial_purchase">Unlock full version</string>
+ <string name="trial_expired">Trial expired</string>
+ <string name="trial_expired_message">To continue using Tiny Tiny RSS please unlock the full version by purchasing the key.</string>
</resources> \ 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<PackageInfo> 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<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) &&
- 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);