diff --git a/oeffi/src/de/schildbach/oeffi/Constants.java b/oeffi/src/de/schildbach/oeffi/Constants.java index 6b537bc..94cf1f7 100644 --- a/oeffi/src/de/schildbach/oeffi/Constants.java +++ b/oeffi/src/de/schildbach/oeffi/Constants.java @@ -30,7 +30,6 @@ public class Constants { public static final String PLAN_INDEX_FILENAME = "plans-index.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 REPORT_EMAIL = "oeffi.app@gmail.com"; diff --git a/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java b/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java index c3f411d..9f30553 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java @@ -20,12 +20,14 @@ package de.schildbach.oeffi.preference; import android.app.Activity; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceFragment; import androidx.annotation.Nullable; import de.schildbach.oeffi.Application; -import de.schildbach.oeffi.Constants; import de.schildbach.oeffi.R; +import de.schildbach.oeffi.util.Installer; public class AboutFragment extends PreferenceFragment { private static final String KEY_ABOUT_VERSION = "about_version"; @@ -48,11 +50,23 @@ public class AboutFragment extends PreferenceFragment { addPreferencesFromResource(R.xml.preference_about); findPreference(KEY_ABOUT_VERSION).setSummary(application.packageInfo().versionName); - final Uri marketUri = Uri.parse(String.format(Constants.MARKET_APP_URL, application.getPackageName())); - findPreference(KEY_ABOUT_MARKET_APP).setSummary(marketUri.toString()); - findPreference(KEY_ABOUT_MARKET_APP).setIntent(new Intent(Intent.ACTION_VIEW, marketUri)); + 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).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)); findPreference(KEY_ABOUT_CHANGELOG).setSummary(changelogUri.toString()); 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); + } } diff --git a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java index 9269085..4ffd60e 100644 --- a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java +++ b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java @@ -366,8 +366,7 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler { if (installer != null) { builder.setNeutralButton(installer.displayName, (dialog, which) -> { stackTraceFile.delete(); - context.startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse("market://details?id=" + context.getPackageName()))); + context.startActivity(new Intent(Intent.ACTION_VIEW, installer.appMarketUriFor(context))); }); } builder.setPositiveButton(R.string.alert_crash_report_download, (dialog, which) -> { diff --git a/oeffi/src/de/schildbach/oeffi/util/Installer.java b/oeffi/src/de/schildbach/oeffi/util/Installer.java index 04f7372..2976af6 100644 --- a/oeffi/src/de/schildbach/oeffi/util/Installer.java +++ b/oeffi/src/de/schildbach/oeffi/util/Installer.java @@ -20,6 +20,7 @@ package de.schildbach.oeffi.util; import android.app.Application; import android.content.Context; import android.content.pm.PackageManager; +import android.net.Uri; import okhttp3.HttpUrl; public enum Installer { @@ -74,4 +75,14 @@ public enum Installer { } 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(); + } }