diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 829d00b4eb..7cae75df42 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -1,5 +1,13 @@ package app.organicmaps; +import static android.Manifest.permission.ACCESS_COARSE_LOCATION; +import static android.Manifest.permission.ACCESS_FINE_LOCATION; +import static android.Manifest.permission.POST_NOTIFICATIONS; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static app.organicmaps.location.LocationState.FOLLOW; +import static app.organicmaps.location.LocationState.FOLLOW_AND_ROTATE; +import static app.organicmaps.location.LocationState.LOCATION_TAG; + import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; @@ -39,6 +47,11 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.ArrayList; +import java.util.Objects; + import app.organicmaps.Framework.PlacePageActivationListener; import app.organicmaps.api.Const; import app.organicmaps.base.BaseMwmFragmentActivity; @@ -58,6 +71,7 @@ import app.organicmaps.editor.Editor; import app.organicmaps.editor.EditorActivity; import app.organicmaps.editor.EditorHostFragment; import app.organicmaps.editor.FeatureCategoryActivity; +import app.organicmaps.editor.OsmOAuth; import app.organicmaps.editor.ReportFragment; import app.organicmaps.help.HelpActivity; import app.organicmaps.intent.Factory; @@ -104,18 +118,6 @@ import app.organicmaps.widget.menu.MainMenu; import app.organicmaps.widget.placepage.PlacePageController; import app.organicmaps.widget.placepage.PlacePageData; import app.organicmaps.widget.placepage.PlacePageViewModel; -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import java.util.ArrayList; -import java.util.Objects; - -import static android.Manifest.permission.ACCESS_COARSE_LOCATION; -import static android.Manifest.permission.ACCESS_FINE_LOCATION; -import static android.Manifest.permission.POST_NOTIFICATIONS; -import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import static app.organicmaps.location.LocationState.FOLLOW; -import static app.organicmaps.location.LocationState.FOLLOW_AND_ROTATE; -import static app.organicmaps.location.LocationState.LOCATION_TAG; public class MwmActivity extends BaseMwmFragmentActivity implements PlacePageActivationListener, @@ -250,6 +252,7 @@ public class MwmActivity extends BaseMwmFragmentActivity RoutingController.get().restoreRoute(); processIntent(); + migrateOAuthCredentials(); } /** @@ -304,6 +307,25 @@ public class MwmActivity extends BaseMwmFragmentActivity } } + private void migrateOAuthCredentials() + { + if (OsmOAuth.containsOAuth1Credentials(this)) + { + // Remove old OAuth v1 secrets + OsmOAuth.clearOAuth1Credentials(this); + EditorHostFragment.clearNoobAlertFlag(this); + + // Notify user to re-login + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + .setTitle(R.string.alert_reauth_title) + .setMessage(R.string.alert_reauth_message) + .setPositiveButton(R.string.ok, null) + .setOnDismissListener(dialog -> mAlertDialog = null) + .show(); + } + } + private static void checkMeasurementSystem() { UnitLocale.initializeCurrentUnits(); diff --git a/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java b/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java index 456e8b259b..2a49f0d6e3 100644 --- a/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java @@ -65,6 +65,13 @@ public class EditorHostFragment extends BaseMwmToolbarFragment implements View.O private int mMandatoryNamesCount = 0; private static final String NOOB_ALERT_SHOWN = "Alert_for_noob_was_shown"; + + public static void clearNoobAlertFlag(@NonNull Context context) { + MwmApplication.prefs(context).edit() + .remove(NOOB_ALERT_SHOWN) + .apply(); + } + /** * Used in MultilanguageAdapter to show, select and remove items. */ diff --git a/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java b/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java index 7515707022..0dfccd59ea 100644 --- a/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java +++ b/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java @@ -44,6 +44,20 @@ public final class OsmOAuth return MwmApplication.prefs(context).contains(PREF_OSM_OAUTH2_TOKEN); } + public static boolean containsOAuth1Credentials(@NonNull Context context) + { + SharedPreferences prefs = MwmApplication.prefs(context); + return prefs.contains(PREF_OSM_TOKEN) && prefs.contains(PREF_OSM_SECRET); + } + + public static void clearOAuth1Credentials(@NonNull Context context) + { + MwmApplication.prefs(context).edit() + .remove(PREF_OSM_TOKEN) + .remove(PREF_OSM_SECRET) + .apply(); + } + public static String getAuthToken(@NonNull Context context) { return MwmApplication.prefs(context).getString(PREF_OSM_OAUTH2_TOKEN, ""); diff --git a/data/strings/strings.txt b/data/strings/strings.txt index 01da7f5056..8a20c91106 100644 --- a/data/strings/strings.txt +++ b/data/strings/strings.txt @@ -20305,6 +20305,18 @@ zh-Hans = 糟糕,出错了。请尝试重新登录。 zh-Hant = 噢,發生錯誤。請嘗試再次登入。 + [alert_reauth_title] + tags = android + en = OpenStreetMap.org authentication + ru = Авторизация через OpenStreetMap.org + uk = Авторизація через OpenStreetMap.org + + [alert_reauth_message] + tags = android + en = Please re-login to OpenStreetMap.org from settings menu in order to save map edits + ru = Пожалуйста повторно введите логин и пароль аккаунта OpenStreetMap.org в настройках приложения чтобы публиковать редактирования карты + uk = Будь ласка увійдіть у свій OpenStreetMap.org акаунт в налаштуваннях застосунку щоб мати можливість публікувати зміни до мапи + [dialog_error_storage_title] tags = android en = Storage access problem