OeffiMainActivity: Add generic 'update' button to remote message dialogs.

This commit is contained in:
Andreas Schildbach 2018-07-24 19:29:48 +02:00
parent 25eb33c551
commit ae172df838
3 changed files with 62 additions and 49 deletions

View file

@ -328,7 +328,8 @@
<string name="changelog_dialog_title_version">Willkommen zu Öffi Version %s!</string>
<string name="changelog_dialog_title">Folgendes ist neu:</string>
<string name="changelog_dialog_button_dismiss">Weiter</string>
<string name="alert_hint_neutral">Weiter</string>
<string name="alert_message_button_dismiss">Weiter</string>
<string name="alert_message_button_update">App-Update</string>
<string name="alert_crash_report_title">Öffi ist letztens abgestürzt</string>
<string name="alert_crash_report_new_version">Es gibt eine neue Öffi-Version %s. Du solltest aktualisieren, denn möglicherweise wurde dein Problem schon behoben.</string>
<string name="alert_crash_report_message">Möchtest du einen Fehlerbericht senden, um dabei zu helfen das Problem zu lösen?</string>

View file

@ -329,7 +329,8 @@
<string name="changelog_dialog_title_version">Welcome to Offi version %s!</string>
<string name="changelog_dialog_title">Here is what\'s new:</string>
<string name="changelog_dialog_button_dismiss">Dismiss</string>
<string name="alert_hint_neutral">Dismiss</string>
<string name="alert_message_button_dismiss">Dismiss</string>
<string name="alert_message_button_update">Update app</string>
<string name="alert_crash_report_title">Previous crash detected</string>
<string name="alert_crash_report_new_version">There is a new Offi version %s available. You should update, as your problem might already have been fixed.</string>
<string name="alert_crash_report_message">Would you like to send a crash report, helping to fix this issue in the future?</string>

View file

@ -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<String> 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<String> 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<String> 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<String> 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));