diff --git a/oeffi/res/values-de/strings.xml b/oeffi/res/values-de/strings.xml
index f05e545..ecedf59 100644
--- a/oeffi/res/values-de/strings.xml
+++ b/oeffi/res/values-de/strings.xml
@@ -328,7 +328,8 @@
Willkommen zu Öffi Version %s!
Folgendes ist neu:
Weiter
- Weiter
+ Weiter
+ App-Update
Öffi ist letztens abgestürzt
Es gibt eine neue Öffi-Version %s. Du solltest aktualisieren, denn möglicherweise wurde dein Problem schon behoben.
Möchtest du einen Fehlerbericht senden, um dabei zu helfen das Problem zu lösen?
diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml
index 25af249..926a43c 100644
--- a/oeffi/res/values/strings.xml
+++ b/oeffi/res/values/strings.xml
@@ -329,7 +329,8 @@
Welcome to Offi version %s!
Here is what\'s new:
Dismiss
- Dismiss
+ Dismiss
+ Update app
Previous crash detected
There is a new Offi version %s available. You should update, as your problem might already have been fixed.
Would you like to send a crash report, helping to fix this issue in the future?
diff --git a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java
index eff59ba..d435cb4 100644
--- a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java
+++ b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java
@@ -632,6 +632,64 @@ public abstract class OeffiMainActivity extends OeffiActivity {
return true;
}
+ private Dialog messageDialog(final Bundle message) {
+ final DialogBuilder builder = DialogBuilder.get(this);
+ final String action = message.getString("action");
+ if ("info".equals(action))
+ builder.setIcon(R.drawable.ic_info_grey600_24dp);
+ else if ("warning".equals(action))
+ builder.setIcon(R.drawable.ic_warning_amber_24dp);
+ final String title = message.getString("title");
+ if (title != null)
+ builder.setTitle(title);
+ final String body = message.getString("body");
+ builder.setMessage(body);
+ final String positive = message.getString("button-positive");
+ if (positive != null)
+ builder.setPositiveButton(messageButtonText(positive), messageButtonListener(positive));
+ final String neutral = message.getString("button-neutral");
+ if (neutral != null)
+ builder.setNeutralButton(messageButtonText(neutral), messageButtonListener(neutral));
+ final String negative = message.getString("button-negative");
+ if (negative != null)
+ builder.setNegativeButton(messageButtonText(negative), messageButtonListener(negative));
+ else
+ builder.setNegativeButton(R.string.alert_message_button_dismiss, null);
+
+ final Dialog dialog = builder.create();
+ dialog.setCanceledOnTouchOutside(false);
+ return dialog;
+ }
+
+ private String messageButtonText(final String buttonSpec) {
+ if ("dismiss".equals(buttonSpec))
+ return getString(R.string.alert_message_button_dismiss);
+ else if ("update".equals(buttonSpec))
+ return getString(R.string.alert_message_button_update);
+ else
+ return Splitter.on('|').trimResults().limit(2).split(buttonSpec).iterator().next();
+ }
+
+ private MessageOnClickListener messageButtonListener(final String buttonSpec) {
+ if ("dismiss".equals(buttonSpec)) {
+ return null;
+ } else if ("update".equals(buttonSpec)) {
+ final String installerPackageName = getPackageManager().getInstallerPackageName(getPackageName());
+ if ("com.android.vending".equals(installerPackageName))
+ return new MessageOnClickListener("https://play.google.com/store/apps/details?id=" + getPackageName());
+ else if ("org.fdroid.fdroid".equals(installerPackageName)
+ || "org.fdroid.fdroid.privileged".equals(installerPackageName))
+ return new MessageOnClickListener("https://f-droid.org/de/packages/" + getPackageName() + "/");
+ else
+ // TODO localize
+ return new MessageOnClickListener("https://oeffi.schildbach.de/download.html");
+ } else {
+ final Iterator iterator = Splitter.on('|').trimResults().limit(2).split(buttonSpec).iterator();
+ iterator.next();
+ return new MessageOnClickListener(iterator.next());
+ }
+ }
+
private class MessageOnClickListener implements DialogInterface.OnClickListener {
private final String link;
@@ -647,53 +705,6 @@ public abstract class OeffiMainActivity extends OeffiActivity {
}
}
- private Dialog messageDialog(final Bundle message) {
- final DialogBuilder builder = DialogBuilder.get(this);
- final String action = message.getString("action");
- if ("info".equals(action))
- builder.setIcon(R.drawable.ic_info_grey600_24dp);
- else if ("warning".equals(action))
- builder.setIcon(R.drawable.ic_warning_amber_24dp);
- final String title = message.getString("title");
- if (title != null)
- builder.setTitle(title);
- final String body = message.getString("body");
- builder.setMessage(body);
- final String positive = message.getString("button-positive");
- if (positive != null) {
- final Iterator parts = Splitter.on('|').trimResults().limit(2).split(positive).iterator();
- final String text = parts.next();
- if ("dismiss".equals(text))
- builder.setPositiveButton(R.string.alert_hint_neutral, null);
- else
- builder.setPositiveButton(text, parts.hasNext() ? new MessageOnClickListener(parts.next()) : null);
- }
- final String neutral = message.getString("button-neutral");
- if (neutral != null) {
- final Iterator parts = Splitter.on('|').trimResults().limit(2).split(neutral).iterator();
- final String text = parts.next();
- if ("dismiss".equals(text))
- builder.setNeutralButton(R.string.alert_hint_neutral, null);
- else
- builder.setNeutralButton(text, parts.hasNext() ? new MessageOnClickListener(parts.next()) : null);
- }
- final String negative = message.getString("button-negative");
- if (negative != null) {
- final Iterator parts = Splitter.on('|').trimResults().limit(2).split(negative).iterator();
- final String text = parts.next();
- if ("dismiss".equals(text))
- builder.setNegativeButton(R.string.alert_hint_neutral, null);
- else
- builder.setNegativeButton(text, parts.hasNext() ? new MessageOnClickListener(parts.next()) : null);
- } else {
- builder.setNegativeButton(R.string.alert_hint_neutral, null);
- }
-
- final Dialog dialog = builder.create();
- dialog.setCanceledOnTouchOutside(false);
- return dialog;
- }
-
private long parseTimeExp(final String exp) {
if (exp.endsWith("h"))
return DateUtils.HOUR_IN_MILLIS * Integer.parseInt(exp.substring(0, exp.length() - 1));