ErrorReporter, AboutFragment: Use correct market URI for Huawei AppGallery installs.

This commit is contained in:
Andreas Schildbach 2021-02-09 12:07:40 +01:00
parent fbaa8f3bb8
commit 4590b4f29c
4 changed files with 30 additions and 7 deletions

View file

@ -30,7 +30,6 @@ public class Constants {
public static final String PLAN_INDEX_FILENAME = "plans-index.txt"; public static final String PLAN_INDEX_FILENAME = "plans-index.txt";
public static final String PLAN_STATIONS_FILENAME = "plans-stations.txt"; public static final String PLAN_STATIONS_FILENAME = "plans-stations.txt";
public static final String MARKET_APP_URL = "market://details?id=%s";
public static final String BITCOIN_ADDRESS = "bc1q8ruc8hanp7hrzfs48dvtuzz4ukmpe7cgsvvzrt"; public static final String BITCOIN_ADDRESS = "bc1q8ruc8hanp7hrzfs48dvtuzz4ukmpe7cgsvvzrt";
public static final String REPORT_EMAIL = "oeffi.app@gmail.com"; public static final String REPORT_EMAIL = "oeffi.app@gmail.com";

View file

@ -20,12 +20,14 @@ package de.schildbach.oeffi.preference;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import de.schildbach.oeffi.Application; import de.schildbach.oeffi.Application;
import de.schildbach.oeffi.Constants;
import de.schildbach.oeffi.R; import de.schildbach.oeffi.R;
import de.schildbach.oeffi.util.Installer;
public class AboutFragment extends PreferenceFragment { public class AboutFragment extends PreferenceFragment {
private static final String KEY_ABOUT_VERSION = "about_version"; private static final String KEY_ABOUT_VERSION = "about_version";
@ -48,11 +50,23 @@ public class AboutFragment extends PreferenceFragment {
addPreferencesFromResource(R.xml.preference_about); addPreferencesFromResource(R.xml.preference_about);
findPreference(KEY_ABOUT_VERSION).setSummary(application.packageInfo().versionName); findPreference(KEY_ABOUT_VERSION).setSummary(application.packageInfo().versionName);
final Uri marketUri = Uri.parse(String.format(Constants.MARKET_APP_URL, application.getPackageName())); final Installer installer = Installer.from(application);
if (installer != null) {
final Uri marketUri = installer.appMarketUriFor(application);
findPreference(KEY_ABOUT_MARKET_APP).setSummary(marketUri.toString()); findPreference(KEY_ABOUT_MARKET_APP).setSummary(marketUri.toString());
findPreference(KEY_ABOUT_MARKET_APP).setIntent(new Intent(Intent.ACTION_VIEW, marketUri)); findPreference(KEY_ABOUT_MARKET_APP).setIntent(new Intent(Intent.ACTION_VIEW, marketUri));
} else {
removeOrDisablePreference(findPreference(KEY_ABOUT_MARKET_APP));
}
final Uri changelogUri = Uri.parse(activity.getString(R.string.about_changelog_summary)); final Uri changelogUri = Uri.parse(activity.getString(R.string.about_changelog_summary));
findPreference(KEY_ABOUT_CHANGELOG).setSummary(changelogUri.toString()); findPreference(KEY_ABOUT_CHANGELOG).setSummary(changelogUri.toString());
findPreference(KEY_ABOUT_CHANGELOG).setIntent(new Intent(Intent.ACTION_VIEW, changelogUri)); findPreference(KEY_ABOUT_CHANGELOG).setIntent(new Intent(Intent.ACTION_VIEW, changelogUri));
} }
private void removeOrDisablePreference(final Preference preference) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
preference.getParent().removePreference(preference);
else
preference.setEnabled(false);
}
} }

View file

@ -366,8 +366,7 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler {
if (installer != null) { if (installer != null) {
builder.setNeutralButton(installer.displayName, (dialog, which) -> { builder.setNeutralButton(installer.displayName, (dialog, which) -> {
stackTraceFile.delete(); stackTraceFile.delete();
context.startActivity(new Intent(Intent.ACTION_VIEW, context.startActivity(new Intent(Intent.ACTION_VIEW, installer.appMarketUriFor(context)));
Uri.parse("market://details?id=" + context.getPackageName())));
}); });
} }
builder.setPositiveButton(R.string.alert_crash_report_download, (dialog, which) -> { builder.setPositiveButton(R.string.alert_crash_report_download, (dialog, which) -> {

View file

@ -20,6 +20,7 @@ package de.schildbach.oeffi.util;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
public enum Installer { public enum Installer {
@ -74,4 +75,14 @@ public enum Installer {
} }
return url.build(); return url.build();
} }
public Uri appMarketUriFor(final Context context) {
final Uri.Builder uri;
if (this == HUAWEI_APP_GALLERY)
uri = Uri.parse("appmarket://details").buildUpon();
else
uri = Uri.parse("market://details").buildUpon();
uri.appendQueryParameter("id", context.getPackageName());
return uri.build();
}
} }