|
27 | 27 | import android.content.IntentFilter; |
28 | 28 | import android.content.SharedPreferences; |
29 | 29 | import android.content.pm.PackageManager; |
| 30 | +import android.os.Build; |
30 | 31 | import android.os.Bundle; |
31 | 32 | import android.os.Handler; |
32 | 33 | import android.os.Looper; |
@@ -203,6 +204,7 @@ protected void onCreate(final Bundle savedInstanceState) { |
203 | 204 | // We want every release build (nightly, nightly-refactor) to show the popup |
204 | 205 | if (!DEBUG) { |
205 | 206 | showKeepAndroidDialog(); |
| 207 | + showApi23RequirementDialog(); |
206 | 208 | } |
207 | 209 |
|
208 | 210 | MigrationManager.showUserInfoIfPresent(this); |
@@ -984,55 +986,76 @@ private boolean bottomSheetHiddenOrCollapsed() { |
984 | 986 |
|
985 | 987 | private void showKeepAndroidDialog() { |
986 | 988 | final var prefs = PreferenceManager.getDefaultSharedPreferences(this); |
987 | | - |
| 989 | + final var lastCheckKey = getString(R.string.kao_last_checked_key); |
| 990 | + final var lastCheck = Instant.ofEpochMilli(prefs.getLong(lastCheckKey, 0)); |
988 | 991 | final var now = Instant.now(); |
989 | | - final var kaoLastCheck = Instant.ofEpochMilli(prefs.getLong( |
990 | | - getString(R.string.kao_last_checked_key), |
991 | | - 0 |
992 | | - )); |
993 | 992 |
|
994 | | - final var supportedLannguages = List.of("fr", "de", "ca", "es", "id", "it", "pl", |
| 993 | + if (lastCheck.plus(30, ChronoUnit.DAYS).isBefore(now)) { |
| 994 | + final String detailsUrl = getKeepAndroidOpenDetailsUrl(); |
| 995 | + final var solutionUrl = "https://github.com/woheller69/FreeDroidWarn#solutions"; |
| 996 | + |
| 997 | + final var dialog = new AlertDialog.Builder(this) |
| 998 | + .setTitle("Keep Android Open") |
| 999 | + .setCancelable(false) |
| 1000 | + .setMessage(R.string.kao_dialog_warning) |
| 1001 | + .setPositiveButton(android.R.string.ok, (d, w) -> prefs.edit() |
| 1002 | + .putLong(lastCheckKey, now.toEpochMilli()) |
| 1003 | + .apply()) |
| 1004 | + .setNeutralButton(R.string.kao_solution, null) |
| 1005 | + .setNegativeButton(R.string.kao_dialog_more_info, null) |
| 1006 | + .show(); |
| 1007 | + |
| 1008 | + // If we use setNeutralButton/setNegativeButton, dialog will close after pressing the |
| 1009 | + // buttons, but we want it to close only when positive button is pressed |
| 1010 | + dialog.getButton(AlertDialog.BUTTON_NEGATIVE) |
| 1011 | + .setOnClickListener(v -> ShareUtils.openUrlInBrowser(this, detailsUrl)); |
| 1012 | + dialog.getButton(AlertDialog.BUTTON_NEUTRAL) |
| 1013 | + .setOnClickListener(v -> ShareUtils.openUrlInBrowser(this, solutionUrl)); |
| 1014 | + } |
| 1015 | + } |
| 1016 | + |
| 1017 | + @NonNull |
| 1018 | + private static String getKeepAndroidOpenDetailsUrl() { |
| 1019 | + final var supportedLanguages = List.of("fr", "de", "ca", "es", "id", "it", "pl", |
995 | 1020 | "pt", "cs", "sk", "fa", "ar", "tr", "el", "th", "ru", "uk", "ko", "zh", "ja"); |
996 | | - final var locale = Localization.getAppLocale(); |
997 | 1021 | final String kaoBaseUrl = "https://keepandroidopen.org/"; |
998 | | - final String kaoURI; |
999 | | - if (supportedLannguages.contains(locale.getLanguage())) { |
| 1022 | + final var locale = Localization.getAppLocale(); |
| 1023 | + if (supportedLanguages.contains(locale.getLanguage())) { |
1000 | 1024 | if ("zh".equals(locale.getLanguage())) { |
1001 | | - kaoURI = kaoBaseUrl + ("TW".equals(locale.getCountry()) ? "zh-TW" : "zh-CN"); |
| 1025 | + return kaoBaseUrl + ("TW".equals(locale.getCountry()) ? "zh-TW" : "zh-CN"); |
1002 | 1026 | } else { |
1003 | | - kaoURI = kaoBaseUrl + locale.getLanguage(); |
| 1027 | + return kaoBaseUrl + locale.getLanguage(); |
1004 | 1028 | } |
1005 | 1029 | } else { |
1006 | | - kaoURI = kaoBaseUrl; |
| 1030 | + return kaoBaseUrl; |
1007 | 1031 | } |
1008 | | - final var solutionURI = |
1009 | | - "https://github.com/woheller69/FreeDroidWarn?tab=readme-ov-file#solutions"; |
| 1032 | + } |
1010 | 1033 |
|
1011 | | - if (kaoLastCheck.plus(30, ChronoUnit.DAYS).isBefore(now)) { |
1012 | | - final var dialog = new AlertDialog.Builder(this) |
1013 | | - .setTitle("Keep Android Open") |
1014 | | - .setCancelable(false) |
1015 | | - .setMessage(this.getString(R.string.kao_dialog_warning)) |
1016 | | - .setPositiveButton(this.getString(android.R.string.ok), (d, w) -> { |
1017 | | - prefs.edit() |
1018 | | - .putLong( |
1019 | | - getString(R.string.kao_last_checked_key), |
1020 | | - now.toEpochMilli() |
1021 | | - ) |
1022 | | - .apply(); |
1023 | | - }) |
1024 | | - .setNeutralButton(this.getString(R.string.kao_solution), null) |
1025 | | - .setNegativeButton(this.getString(R.string.kao_dialog_more_info), null) |
1026 | | - .show(); |
| 1034 | + private void showApi23RequirementDialog() { |
| 1035 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
| 1036 | + return; // only show dialog on the devices that will stop being supported |
| 1037 | + } |
1027 | 1038 |
|
1028 | | - // If we use setNeutralButton and etc. dialog will close after pressing the buttons, |
1029 | | - // but we want it to close only when positive button is pressed |
1030 | | - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(v -> |
1031 | | - ShareUtils.openUrlInBrowser(this, kaoURI) |
1032 | | - ); |
1033 | | - dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> |
1034 | | - ShareUtils.openUrlInBrowser(this, solutionURI) |
1035 | | - ); |
| 1039 | + final var prefs = PreferenceManager.getDefaultSharedPreferences(this); |
| 1040 | + final var shownKey = getString(R.string.api23_requirement_dialog_shown_key); |
| 1041 | + if (prefs.getBoolean(shownKey, false)) { |
| 1042 | + return; // dialog was already shown in the past, no need to show it again |
1036 | 1043 | } |
| 1044 | + |
| 1045 | + final var dialog = new AlertDialog.Builder(this) |
| 1046 | + .setTitle(R.string.api23_requirement_dialog_title) |
| 1047 | + .setCancelable(false) |
| 1048 | + .setMessage(R.string.api23_requirement_dialog_message) |
| 1049 | + .setPositiveButton(android.R.string.ok, (d, w) -> prefs.edit() |
| 1050 | + .putBoolean(shownKey, true) |
| 1051 | + .apply()) |
| 1052 | + .setNegativeButton(R.string.api23_requirement_dialog_blogpost, null) |
| 1053 | + .show(); |
| 1054 | + |
| 1055 | + // If we use setNegativeButton, dialog will close after pressing the button, |
| 1056 | + // but we want it to close only when positive button is pressed |
| 1057 | + final var blogpostUrl = "https://newpipe.net/blog/pinned/announcement/drop-android-5/"; |
| 1058 | + dialog.getButton(AlertDialog.BUTTON_NEGATIVE) |
| 1059 | + .setOnClickListener(v -> ShareUtils.openUrlInBrowser(this, blogpostUrl)); |
1037 | 1060 | } |
1038 | 1061 | } |
0 commit comments