[Libreoffice-commits] online.git: android/lib
Jan Holesovsky (via logerrit)
logerrit at kemper.freedesktop.org
Tue Mar 17 23:36:56 UTC 2020
android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java | 46 ---
android/lib/src/main/java/org/libreoffice/androidlib/RateAppController.java | 134 ++++++----
2 files changed, 87 insertions(+), 93 deletions(-)
New commits:
commit eab62f8ab7ecf455cec286bf52f049a3951448ab
Author: Jan Holesovsky <kendy at collabora.com>
AuthorDate: Tue Mar 17 23:05:39 2020 +0100
Commit: Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Mar 18 00:36:38 2020 +0100
android: Move the code to RateAppController & simplify a bit.
Change-Id: I03eb0dbce22b83bac2c3cfc06db1bff2faaac076
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90677
Tested-by: Jan Holesovsky <kendy at collabora.com>
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
index de3f5da3b..4070f955f 100644
--- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
+++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
@@ -410,25 +410,6 @@ public class LOActivity extends AppCompatActivity {
}
}
- /** opens up the app page on Google Play */
- private void openInGooglePlay() {
- String marketUri = String.format("market://details?id=%1$s", getPackageName());
- String webUri = String.format("https://play.google.com/store/apps/details?id=%1$s", getPackageName());
-
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(marketUri));
- if (getPackageManager().queryIntentActivities(intent, 0).size() <= 0) {
- intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webUri));
- if (getPackageManager().queryIntentActivities(intent, 0).size() <= 0) {
- intent = null;
- }
- }
-
- if (intent != null) {
- rateAppController.updateStatus();
- startActivity(intent);
- }
- }
-
@Override
protected void onNewIntent(Intent intent) {
@@ -855,31 +836,8 @@ public class LOActivity extends AppCompatActivity {
}
else if (message.startsWith("'statusindicatorfinish:") || message.startsWith("'error:")) {
mProgressDialog.dismiss();
- if (BuildConfig.GOOGLE_PLAY_ENABLED && rateAppController != null && rateAppController.shouldAsk()) {
- android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(LOActivity.this);
- final View rateAppLayout = getLayoutInflater().inflate(R.layout.rate_app_layout, null);
- builder.setView(rateAppLayout);
- RatingBar ratingBar = rateAppLayout.findViewById(R.id.ratingBar);
-
- builder.setPositiveButton(getString(R.string.rate_now), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // start google play activity for rating
- openInGooglePlay();
- }
- });
- builder.setNegativeButton(getString(R.string.later), null);
- final AlertDialog alertDialog = builder.create();
- ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
- @Override
- public void onRatingChanged(RatingBar ratingBar1, float v, boolean b) {
- // start google play activity for rating
- openInGooglePlay();
- alertDialog.dismiss();
- }
- });
- alertDialog.show();
- }
+ if (BuildConfig.GOOGLE_PLAY_ENABLED && rateAppController != null)
+ rateAppController.askUserForRating();
}
}
});
diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/RateAppController.java b/android/lib/src/main/java/org/libreoffice/androidlib/RateAppController.java
index 5b819ff33..57a7717f0 100644
--- a/android/lib/src/main/java/org/libreoffice/androidlib/RateAppController.java
+++ b/android/lib/src/main/java/org/libreoffice/androidlib/RateAppController.java
@@ -9,78 +9,114 @@
package org.libreoffice.androidlib;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.view.View;
+import android.widget.RatingBar;
+
+import androidx.appcompat.app.AlertDialog;
+
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
+/** Class to take care of reminding user that it is a good idea to rate the app. */
public class RateAppController {
private static String RATE_ASK_COUNTER_KEY = "RATE_ASK_COUNTER";
private static String RATE_COUNTER_LAST_UPDATE_KEY = "RATE_COUNTER_LAST_UPDATE_DATE";
- /** 1=POSTPONED, 2=RATED */
- private static String RATE_ASK_STATUS_KEY = "RATE_ASK_STATUS";
- LOActivity mActivity;
- private int counter;
- private Date lastDate;
- private int status;
+ private static String RATE_ALREADY_RATED_KEY = "RATE_ALREADY_RATED";
+
+ private LOActivity mActivity;
RateAppController(LOActivity activity) {
this.mActivity = activity;
+ }
+
+ /** Opens up the app page in Google Play. */
+ private void openInGooglePlay() {
+ String marketUri = String.format("market://details?id=%1$s", mActivity.getPackageName());
+ String webUri = String.format("https://play.google.com/store/apps/details?id=%1$s", mActivity.getPackageName());
+
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(marketUri));
+ if (mActivity.getPackageManager().queryIntentActivities(intent, 0).size() <= 0) {
+ intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webUri));
+ if (mActivity.getPackageManager().queryIntentActivities(intent, 0).size() <= 0) {
+ intent = null;
+ }
+ }
- if (mActivity.getPrefs().getInt(RateAppController.RATE_ASK_STATUS_KEY, -1) == -1) {
- /** first time init */
- Date date = new Date();
- mActivity.getPrefs().edit().putLong(RateAppController.RATE_COUNTER_LAST_UPDATE_KEY, date.getTime()).apply();
- /** the status starts from 1 to postpone asking on the first start **/
- mActivity.getPrefs().edit().putInt(RateAppController.RATE_ASK_STATUS_KEY, 1).apply();
- mActivity.getPrefs().edit().putInt(RateAppController.RATE_ASK_COUNTER_KEY, 0).apply();
- this.counter = 0;
- this.lastDate = date;
- this.status = 1;
- } else {
- this.status = mActivity.getPrefs().getInt(RateAppController.RATE_ASK_STATUS_KEY, 0);
- this.counter = mActivity.getPrefs().getInt(RateAppController.RATE_ASK_COUNTER_KEY, 0);
- long dateTime = mActivity.getPrefs().getLong(RateAppController.RATE_COUNTER_LAST_UPDATE_KEY, 0);
- this.lastDate = new Date(dateTime);
+ if (intent != null) {
+ mActivity.getPrefs().edit().putBoolean(RATE_ALREADY_RATED_KEY, true).apply();
+ mActivity.startActivity(intent);
}
}
+ /** Ask the user for rating from time to time (unless they've already rated, or it is not time yet. */
+ public void askUserForRating() {
+ if (!shouldAsk())
+ return;
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+ final View rateAppLayout = mActivity.getLayoutInflater().inflate(R.layout.rate_app_layout, null);
+ builder.setView(rateAppLayout);
+
+ builder.setPositiveButton(R.string.rate_now, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // start google play activity for rating
+ openInGooglePlay();
+ }
+ });
+ builder.setNegativeButton(R.string.later, null);
+
+ final AlertDialog alertDialog = builder.create();
+
+ RatingBar ratingBar = rateAppLayout.findViewById(R.id.ratingBar);
+ ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
+ @Override
+ public void onRatingChanged(RatingBar ratingBar1, float v, boolean b) {
+ // start google play activity for rating
+ openInGooglePlay();
+ alertDialog.dismiss();
+ }
+ });
+ alertDialog.show();
+ }
+
/**
* The counter is incremented once in each day when a document is opened successfully
* If the counter is 4 (meaning it's the 5th day, starting from 0), return true unless the user is already rated
* When the dialog is dismissed, ask again in another 5 days
*/
- public boolean shouldAsk() {
- boolean ret = false;
- /** if the status is 2, user is already rated (hopefully) so we don't have to do anything else */
- if (this.status == 2)
- return ret;
+ private boolean shouldAsk() {
+ // don't ask if the user has already rated
+ if (mActivity.getPrefs().getBoolean(RATE_ALREADY_RATED_KEY, false))
+ return false;
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
- Date today = new Date();
- if (!dateFormat.format(today).equals(dateFormat.format(this.lastDate))) {
- if (this.counter == 4)
- ret = true;
+ final int COUNT_BETWEEN_RATINGS = 5;
- updateCounter();
- }
- return ret;
- }
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.US);
+ Date today = new Date();
+ long lastDate = mActivity.getPrefs().getLong(RateAppController.RATE_COUNTER_LAST_UPDATE_KEY, 0);
- private void updateCounter() {
- this.counter = ++this.counter % 5;
- mActivity.getPrefs().edit().putInt(RateAppController.RATE_ASK_COUNTER_KEY, this.counter).apply();
- updateDate();
- }
+ // don't ask if we have already asked and/or increased the countar today
+ if (dateFormat.format(today).equals(dateFormat.format(lastDate)))
+ return false;
- private void updateDate() {
- Date date = new Date();
- this.lastDate = date;
- mActivity.getPrefs().edit().putLong(RateAppController.RATE_COUNTER_LAST_UPDATE_KEY, this.lastDate.getTime()).apply();
+ boolean ret = false;
+ int counter = mActivity.getPrefs().getInt(RATE_ASK_COUNTER_KEY, 0);
+ if (counter == COUNT_BETWEEN_RATINGS - 1)
+ ret = true;
- }
+ // update the counter and date
+ mActivity.getPrefs().edit()
+ .putInt(RATE_ASK_COUNTER_KEY, (counter + 1) % COUNT_BETWEEN_RATINGS)
+ .putLong(RATE_COUNTER_LAST_UPDATE_KEY, today.getTime())
+ .apply();
- /** This is called when the user clicked on rate now and this will make it never ask again */
- public void updateStatus() {
- this.status = 2;
- mActivity.getPrefs().edit().putInt(RateAppController.RATE_ASK_STATUS_KEY, this.status).apply();
+ return ret;
}
}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
More information about the Libreoffice-commits
mailing list