trialware stuff, bump version
This commit is contained in:
parent
f27ffe5f0a
commit
204ee6d4b9
@ -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"
|
||||
|
@ -134,7 +134,7 @@
|
||||
<item
|
||||
android:id="@+id/donate"
|
||||
android:showAsAction=""
|
||||
android:title="@string/donate"/>
|
||||
android:title="@string/trial_purchase"/>
|
||||
</group>
|
||||
|
||||
<item
|
||||
|
@ -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>
|
@ -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;
|
||||
|
@ -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");
|
||||
|
@ -49,6 +49,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,30 +443,76 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
finish();
|
||||
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();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
|
||||
final ArticlePager ap = (ArticlePager)getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
|
||||
if (!notify && System.currentTimeMillis() > firstStart + (TRIAL_DAYS * 24 * 60 * 60 * 1000)) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
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();
|
||||
return true;
|
||||
case R.id.donate:
|
||||
if (true) {
|
||||
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getString(R.string.cancel),
|
||||
new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog,
|
||||
int which) {
|
||||
|
||||
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"));
|
||||
@ -479,6 +528,20 @@ public class OnlineActivity extends CommonActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
|
||||
final ArticlePager ap = (ArticlePager)getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
case R.id.donate:
|
||||
if (true) {
|
||||
openUnlockUrl();
|
||||
}
|
||||
return true;
|
||||
case R.id.logout:
|
||||
logout();
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user