From 268d63bebbb55d7b9c10d73a5f9be8417b695791 Mon Sep 17 00:00:00 2001 From: Ritika Date: Thu, 30 Mar 2023 12:34:55 +0530 Subject: [PATCH 1/9] feedback dialog: fix black font in dark mode --- app/src/main/res/layout/dialog_feedback.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/dialog_feedback.xml b/app/src/main/res/layout/dialog_feedback.xml index 9acef11bd7..9817da9eb1 100644 --- a/app/src/main/res/layout/dialog_feedback.xml +++ b/app/src/main/res/layout/dialog_feedback.xml @@ -15,7 +15,7 @@ android:layout_margin="@dimen/dimen_6" android:padding="@dimen/tiny_gap" android:textSize="24sp" - android:textColor="@color/black" + android:textColor="?android:attr/textColorPrimary" android:text="@string/navigation_item_feedback" android:layout_width="wrap_content" android:layout_height="wrap_content" /> @@ -44,7 +44,7 @@ android:layout_margin="@dimen/dimen_6" android:padding="4dp" android:textSize="21sp" - android:textColor="@color/black" + android:textColor="?android:attr/textColorPrimary" android:text="@string/select_feedback_data_choice" android:layout_width="wrap_content" android:layout_height="wrap_content" /> From 7c3d4946243d8faf1add77f91e69d3ed99907d52 Mon Sep 17 00:00:00 2001 From: Ritika Date: Thu, 30 Mar 2023 14:37:05 +0530 Subject: [PATCH 2/9] LocationPickerActivity: fix light map in dark mode --- .../LocationPicker/LocationPickerActivity.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java index ce08baadf0..f569e80ab9 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java @@ -57,6 +57,7 @@ import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.theme.BaseActivity; +import fr.free.nrw.commons.utils.SystemThemeUtils; import javax.inject.Inject; import javax.inject.Named; import org.jetbrains.annotations.NotNull; @@ -139,11 +140,19 @@ public class LocationPickerActivity extends BaseActivity implements OnMapReadyCa @Named("default_preferences") public JsonKvStore applicationKvStore; + /** + * isDarkTheme: for keeping a track of the device theme and modifying the map theme accordingly + */ + @Inject + SystemThemeUtils systemThemeUtils; + private boolean isDarkTheme; @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + isDarkTheme = systemThemeUtils.isDeviceInNightMode(); + getWindow().requestFeature(Window.FEATURE_ACTION_BAR); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -238,7 +247,7 @@ private void getToolbarUI() { @Override public void onMapReady(final MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; - mapboxMap.setStyle(Style.MAPBOX_STREETS, this::onStyleLoaded); + mapboxMap.setStyle(isDarkTheme ? Style.DARK : Style.MAPBOX_STREETS, this::onStyleLoaded); } /** From 8f8dcc0d52d21179ad48fb6a72b3ac825b01048c Mon Sep 17 00:00:00 2001 From: Kartikay Kaushik <93285364+kartikaykaushik14@users.noreply.github.com> Date: Thu, 30 Mar 2023 20:31:58 -0400 Subject: [PATCH 3/9] Fix #5182 Switch From Mapbox to MapLibre (#5184) * Fix #5182 Switch From Mapbox to MapLibre * Fix #5182 Switch From Mapbox to MapLibre - Resolved requestFeature() issue * Fix #5182 Switch From Mapbox to MapLibre - Resolved dark mode issue on two screens * Fix #5182 Switch From Mapbox to MapLibre - Resolved dark mode issue on additional screens * Fix #5182 Switch From Mapbox to MapLibre - Resolved dark mode issue on notification screen * Fix #5182 Switch From Mapbox to MapLibre - Test errors --- app/build.gradle | 10 ++++++---- .../free/nrw/commons/CommonsApplication.java | 17 ++--------------- .../LocationPickerActivity.java | 12 ++++++------ .../CustomSelectorViewModelFactory.kt | 2 +- .../explore/map/ExploreMapFragment.java | 4 +++- .../fragments/NearbyParentFragment.java | 2 +- .../fr/free/nrw/commons/settings/Prefs.java | 1 - .../commons/settings/SettingsFragment.java | 16 ---------------- .../upload/UploadMediaDetailAdapter.java | 4 ++-- .../nrw/commons/upload/worker/UploadWorker.kt | 2 +- app/src/main/res/layout/activity_about.xml | 1 + .../main/res/layout/activity_notification.xml | 3 ++- app/src/main/res/layout/activity_review.xml | 3 ++- app/src/main/res/layout/activity_settings.xml | 1 + .../res/layout/content_location_picker.xml | 2 +- .../res/layout/custom_selector_toolbar.xml | 3 ++- .../main/res/layout/fragment_achievements.xml | 3 ++- .../res/layout/fragment_advance_query.xml | 2 +- .../main/res/layout/fragment_leaderboard.xml | 3 ++- .../res/layout/fragment_media_license.xml | 5 +++-- .../fragment_upload_media_detail_fragment.xml | 5 +++-- .../res/layout/toolbar_location_picker.xml | 2 +- .../res/layout/upload_categories_fragment.xml | 2 +- .../res/layout/upload_depicts_fragment.xml | 2 +- .../LocationPickerActivityUnitTests.kt | 19 ++++++++++++++++--- .../settings/SettingsFragmentUnitTests.kt | 11 ----------- gradle.properties | 3 ++- 27 files changed, 63 insertions(+), 77 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 23044d6810..9f11249d98 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,10 +38,10 @@ dependencies { implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' implementation 'com.github.chrisbanes:PhotoView:2.0.0' implementation 'com.github.pedrovgs:renderers:3.3.3' - implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' - implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' - implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-scalebar-v9:0.5.0' - implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:7.0.0' + implementation "org.maplibre.gl:android-sdk:$MAPLIBRE_VERSION" + implementation 'org.maplibre.gl:android-plugin-scalebar-v9:1.0.0' + + implementation 'com.jakewharton.timber:timber:4.7.1' implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0' implementation 'com.dinuscxj:circleprogressbar:1.1.1' implementation 'com.karumi:dexter:5.0.0' @@ -246,6 +246,8 @@ android { configurations.all { resolutionStrategy.force 'androidx.annotation:annotation:1.1.0' + resolutionStrategy.force 'com.jakewharton.timber:timber:4.7.1' + resolutionStrategy.force 'androidx.fragment:fragment:1.3.6' exclude module: 'okhttp-ws' } flavorDimensions 'tier' diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 5305c6c7ce..bce49fd5a2 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -24,6 +24,7 @@ import com.facebook.imagepipeline.core.ImagePipeline; import com.facebook.imagepipeline.core.ImagePipelineConfig; import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.mapboxsdk.WellKnownTileServer; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao.Table; import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao; @@ -53,7 +54,6 @@ import java.util.Set; import javax.inject.Inject; import javax.inject.Named; -import leakcanary.ObjectWatcher; import org.acra.ACRA; import org.acra.annotation.AcraCore; import org.acra.annotation.AcraDialog; @@ -121,8 +121,6 @@ public class CommonsApplication extends MultiDexApplication { * Constants End */ - private ObjectWatcher objectWatcher; - private static CommonsApplication INSTANCE; public static CommonsApplication getInstance() { @@ -152,7 +150,7 @@ public void onCreate() { INSTANCE = this; ACRA.init(this); - Mapbox.getInstance(this, getString(R.string.mapbox_commons_app_token)); + Mapbox.getInstance(this, getString(R.string.mapbox_commons_app_token), WellKnownTileServer.Mapbox); ApplicationlessInjection .getInstance(this) @@ -268,17 +266,6 @@ public String getUserAgent() { + " (https://mediawiki.org/wiki/Apps/Commons) Android/" + Build.VERSION.RELEASE; } - /** - * Provides a way to get member objectWatcher - * - * @param context Application context - * @return application member objectWatcher - */ - public static ObjectWatcher getObjectWatcher(Context context) { - CommonsApplication application = (CommonsApplication) context.getApplicationContext(); - return application.objectWatcher; - } - /** * clears data of current application * diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java index ce08baadf0..8e3a928db7 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java @@ -31,9 +31,6 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.mapbox.android.core.location.LocationEngineCallback; -import com.mapbox.android.core.location.LocationEngineResult; -import com.mapbox.android.core.permissions.PermissionsManager; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraPosition.Builder; @@ -41,8 +38,11 @@ import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.location.LocationComponent; import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions; +import com.mapbox.mapboxsdk.location.engine.LocationEngineCallback; +import com.mapbox.mapboxsdk.location.engine.LocationEngineResult; import com.mapbox.mapboxsdk.location.modes.CameraMode; import com.mapbox.mapboxsdk.location.modes.RenderMode; +import com.mapbox.mapboxsdk.location.permissions.PermissionsManager; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraIdleListener; @@ -142,9 +142,9 @@ public class LocationPickerActivity extends BaseActivity implements OnMapReadyCa @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { + getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); - getWindow().requestFeature(Window.FEATURE_ACTION_BAR); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); @@ -194,7 +194,7 @@ private void addCredits() { * Clicking back button destroy locationPickerActivity */ private void addBackButtonListener() { - final ImageView backButton = findViewById(R.id.mapbox_place_picker_toolbar_back_button); + final ImageView backButton = findViewById(R.id.maplibre_place_picker_toolbar_back_button); backButton.setOnClickListener(view -> finish()); } @@ -238,7 +238,7 @@ private void getToolbarUI() { @Override public void onMapReady(final MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; - mapboxMap.setStyle(Style.MAPBOX_STREETS, this::onStyleLoaded); + mapboxMap.setStyle(Style.getPredefinedStyle("Streets"), this::onStyleLoaded); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorViewModelFactory.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorViewModelFactory.kt index d7a7d42f40..616c5e83fc 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorViewModelFactory.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorViewModelFactory.kt @@ -10,7 +10,7 @@ import javax.inject.Inject */ class CustomSelectorViewModelFactory @Inject constructor(val context: Context,val imageFileLoader: ImageFileLoader) : ViewModelProvider.Factory { - override fun create(modelClass: Class) : CustomSelectorViewModel { + override fun create(modelClass: Class) : CustomSelectorViewModel { return CustomSelectorViewModel(context,imageFileLoader) as CustomSelectorViewModel } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java index 83a2d14dde..df34122914 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java @@ -81,6 +81,7 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; +import java.util.Arrays; import java.util.List; import javax.inject.Inject; import javax.inject.Named; @@ -189,7 +190,8 @@ public void onViewCreated(@NonNull final View view, @Nullable final Bundle saved mapBox = mapBoxMap; initViews(); presenter.setActionListeners(applicationKvStore); - mapBoxMap.setStyle(isDarkTheme? Style.DARK:Style.OUTDOORS, style -> { + mapBoxMap.setStyle(isDarkTheme? Style.getPredefinedStyle("Dark"): + Style.getPredefinedStyle("Outdoors"), style -> { final UiSettings uiSettings = mapBoxMap.getUiSettings(); uiSettings.setCompassGravity(Gravity.BOTTOM | Gravity.LEFT); uiSettings.setCompassMargins(12, 0, 0, 24); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index 6fd89a9895..a5274fdbce 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -316,7 +316,7 @@ public void onViewCreated(@NonNull final View view, @Nullable final Bundle saved initViews(); presenter.setActionListeners(applicationKvStore); initNearbyFilter(); - mapBoxMap.setStyle(isDarkTheme?Style.DARK:Style.OUTDOORS, style -> { + mapBoxMap.setStyle(isDarkTheme?Style.getPredefinedStyle("Dark"):Style.getPredefinedStyle("Outdoors"), style -> { final UiSettings uiSettings = mapBoxMap.getUiSettings(); uiSettings.setCompassGravity(Gravity.BOTTOM | Gravity.LEFT); uiSettings.setCompassMargins(12, 0, 0, 24); diff --git a/app/src/main/java/fr/free/nrw/commons/settings/Prefs.java b/app/src/main/java/fr/free/nrw/commons/settings/Prefs.java index 0867aebbc9..3342143479 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/Prefs.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/Prefs.java @@ -10,7 +10,6 @@ public class Prefs { public static final String DESCRIPTION_LANGUAGE = "languageDescription"; public static final String APP_UI_LANGUAGE = "appUiLanguage"; public static final String KEY_THEME_VALUE = "appThemePref"; - public static final String TELEMETRY_PREFERENCE = "telemetryPref"; public static class Licenses { public static final String CC_BY_SA_3 = "CC BY-SA 3.0"; diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 10ca6a479a..3df477f55c 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -31,7 +31,6 @@ import com.karumi.dexter.listener.PermissionGrantedResponse; import com.karumi.dexter.listener.single.BasePermissionListener; import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.mapboxsdk.maps.TelemetryDefinition; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.campaigns.CampaignView; @@ -161,21 +160,6 @@ public boolean onPreferenceClick(Preference preference) { findPreference(CampaignView.CAMPAIGNS_DEFAULT_PREFERENCE).setEnabled(false); findPreference("managed_exif_tags").setEnabled(false); } - - // Opting out of telemetry due to app's privacy policy - telemetryOptInOut(false); - defaultKvStore.putBoolean(Prefs.TELEMETRY_PREFERENCE,false); - } - - /** - * Opt in or out of MapBox telemetry - * @param shouldOptIn - */ - private void telemetryOptInOut(boolean shouldOptIn){ - TelemetryDefinition telemetry = Mapbox.getTelemetry(); - if (telemetry != null) { - telemetry.setUserTelemetryRequestState(shouldOptIn); - } } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index 48ee2876b9..835187a6fd 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -174,7 +174,7 @@ public void bind(int position) { if (position == 0) { removeButton.setVisibility(View.GONE); captionInputLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM); - captionInputLayout.setEndIconDrawable(R.drawable.mapbox_info_icon_default); + captionInputLayout.setEndIconDrawable(R.drawable.maplibre_info_icon_default); captionInputLayout.setEndIconOnClickListener(v -> callback.showAlert(R.string.media_detail_caption, R.string.caption_info)); Objects.requireNonNull(captionInputLayout.getEditText()).setFilters(new InputFilter[] { @@ -182,7 +182,7 @@ public void bind(int position) { }); descInputLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM); - descInputLayout.setEndIconDrawable(R.drawable.mapbox_info_icon_default); + descInputLayout.setEndIconDrawable(R.drawable.maplibre_info_icon_default); descInputLayout.setEndIconOnClickListener(v -> callback.showAlert(R.string.media_detail_description, R.string.description_info)); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index 738fb22161..6a4497ea15 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -11,7 +11,7 @@ import androidx.core.app.NotificationManagerCompat import androidx.work.CoroutineWorker import androidx.work.Data import androidx.work.WorkerParameters -import com.mapbox.mapboxsdk.plugins.localization.BuildConfig +import androidx.multidex.BuildConfig import dagger.android.ContributesAndroidInjector import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.Media diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index c509dad714..b0f34d5a8d 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -4,6 +4,7 @@ android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/mainBackground" android:orientation="vertical"> + android:layout_height="match_parent" + android:background="?attr/mainBackground"> + android:layout_height="match_parent" + android:background="?attr/mainBackground"> + app:layout_constraintTop_toTopOf="parent" + android:background="?attr/mainBackground"> + android:layout_height="match_parent" + android:background="?attr/achievementBackground"> diff --git a/app/src/main/res/layout/fragment_leaderboard.xml b/app/src/main/res/layout/fragment_leaderboard.xml index 1e76e21b10..4b8ab700f8 100644 --- a/app/src/main/res/layout/fragment_leaderboard.xml +++ b/app/src/main/res/layout/fragment_leaderboard.xml @@ -4,7 +4,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:background="?attr/achievementBackground"> + android:padding="@dimen/standard_gap" + android:background="?attr/achievementBackground"> + android:src="@drawable/maplibre_info_icon_default"/> + android:layout_height="match_parent" + android:background="?attr/achievementBackground"> + android:src="@drawable/maplibre_info_icon_default"/> + android:src="@drawable/maplibre_info_icon_default" /> + android:src="@drawable/maplibre_info_icon_default" /> Date: Fri, 31 Mar 2023 08:51:07 +0530 Subject: [PATCH 4/9] fix issue #5015 - custom image selector not identifying photo location (#5190) Co-authored-by: Siva --- app/src/main/AndroidManifest.xml | 1 + .../contributions/ContributionController.java | 16 +++++++++++++++- app/src/main/res/values/strings.xml | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 597f190877..6e84bf23f1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ + diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java index 27cef1c0f5..57f77053c8 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java @@ -3,9 +3,12 @@ import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT; import android.Manifest; +import android.Manifest.permission; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; import androidx.annotation.NonNull; import fr.free.nrw.commons.R; import fr.free.nrw.commons.filepicker.DefaultCallback; @@ -66,7 +69,18 @@ public void initiateCustomGalleryPickWithPermission(final Activity activity) { PermissionUtils.checkPermissionsAndPerformAction(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, - () -> FilePicker.openCustomSelector(activity, 0), + () -> { + if (VERSION.SDK_INT >= VERSION_CODES.Q) { + PermissionUtils.checkPermissionsAndPerformAction( + activity, + permission.ACCESS_MEDIA_LOCATION, + () -> {}, + R.string.media_location_permission_denied, + R.string.add_location_manually + ); + } + FilePicker.openCustomSelector(activity, 0); + }, R.string.storage_permission_title, R.string.write_storage_permission_rationale); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c1bb2ef38..2f7fdede4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -511,6 +511,9 @@ Upload your first media by tapping on the add button. Serial Numbers Software + Media location access denied + We may not be able to automatically obtain location data from pictures you upload. Please add the appropriate location for each picture before submitting + Upload photos to Wikimedia Commons directly from your phone. Download the Commons App now: %1$s Share app via... Image Info From 065b79e253ce116e4a9bb5a80bb548105c7e9cad Mon Sep 17 00:00:00 2001 From: Ritika Date: Thu, 30 Mar 2023 12:34:55 +0530 Subject: [PATCH 5/9] feedback dialog: fix black font in dark mode --- app/src/main/res/layout/dialog_feedback.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/dialog_feedback.xml b/app/src/main/res/layout/dialog_feedback.xml index 9acef11bd7..9817da9eb1 100644 --- a/app/src/main/res/layout/dialog_feedback.xml +++ b/app/src/main/res/layout/dialog_feedback.xml @@ -15,7 +15,7 @@ android:layout_margin="@dimen/dimen_6" android:padding="@dimen/tiny_gap" android:textSize="24sp" - android:textColor="@color/black" + android:textColor="?android:attr/textColorPrimary" android:text="@string/navigation_item_feedback" android:layout_width="wrap_content" android:layout_height="wrap_content" /> @@ -44,7 +44,7 @@ android:layout_margin="@dimen/dimen_6" android:padding="4dp" android:textSize="21sp" - android:textColor="@color/black" + android:textColor="?android:attr/textColorPrimary" android:text="@string/select_feedback_data_choice" android:layout_width="wrap_content" android:layout_height="wrap_content" /> From fbbd837e3789b28490e52c463a30c1fd7487ae0c Mon Sep 17 00:00:00 2001 From: Ritika Date: Thu, 30 Mar 2023 14:37:05 +0530 Subject: [PATCH 6/9] LocationPickerActivity: fix light map in dark mode --- .../LocationPicker/LocationPickerActivity.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java index 8e3a928db7..7f971c1779 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java @@ -57,6 +57,7 @@ import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.theme.BaseActivity; +import fr.free.nrw.commons.utils.SystemThemeUtils; import javax.inject.Inject; import javax.inject.Named; import org.jetbrains.annotations.NotNull; @@ -139,12 +140,24 @@ public class LocationPickerActivity extends BaseActivity implements OnMapReadyCa @Named("default_preferences") public JsonKvStore applicationKvStore; + /** + * isDarkTheme: for keeping a track of the device theme and modifying the map theme accordingly + */ + @Inject + SystemThemeUtils systemThemeUtils; + private boolean isDarkTheme; @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); +<<<<<<< HEAD +======= + isDarkTheme = systemThemeUtils.isDeviceInNightMode(); + + getWindow().requestFeature(Window.FEATURE_ACTION_BAR); +>>>>>>> LocationPickerActivity: fix light map in dark mode final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); @@ -238,7 +251,11 @@ private void getToolbarUI() { @Override public void onMapReady(final MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; +<<<<<<< HEAD mapboxMap.setStyle(Style.getPredefinedStyle("Streets"), this::onStyleLoaded); +======= + mapboxMap.setStyle(isDarkTheme ? Style.DARK : Style.MAPBOX_STREETS, this::onStyleLoaded); +>>>>>>> LocationPickerActivity: fix light map in dark mode } /** From 2ffa8a115104d3920d861d861aa66a19ec99665e Mon Sep 17 00:00:00 2001 From: Ritika Date: Fri, 31 Mar 2023 19:04:51 +0530 Subject: [PATCH 7/9] LocationPicker: use predefined style based on device theme --- .../commons/LocationPicker/LocationPickerActivity.java | 10 ++-------- .../LocationPicker/LocationPickerConstants.java | 9 +++++++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java index 7f971c1779..f4505d94d6 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java @@ -152,12 +152,9 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); -<<<<<<< HEAD -======= isDarkTheme = systemThemeUtils.isDeviceInNightMode(); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); ->>>>>>> LocationPickerActivity: fix light map in dark mode final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); @@ -251,11 +248,8 @@ private void getToolbarUI() { @Override public void onMapReady(final MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; -<<<<<<< HEAD - mapboxMap.setStyle(Style.getPredefinedStyle("Streets"), this::onStyleLoaded); -======= - mapboxMap.setStyle(isDarkTheme ? Style.DARK : Style.MAPBOX_STREETS, this::onStyleLoaded); ->>>>>>> LocationPickerActivity: fix light map in dark mode + mapboxMap.setStyle(isDarkTheme ? LocationPickerConstants.DARK_MAP_STYLE : + LocationPickerConstants.STREETS_MAP_STYLE, this::onStyleLoaded); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java index eb27e496c2..b988663519 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java @@ -1,5 +1,7 @@ package fr.free.nrw.commons.LocationPicker; +import com.mapbox.mapboxsdk.maps.Style; + /** * Constants need for location picking */ @@ -11,6 +13,13 @@ public final class LocationPickerConstants { public static final String MAP_CAMERA_POSITION = "location.picker.cameraPosition"; + public static final String DARK_MAP_STYLE + = Style.getPredefinedStyle("Dark"); + + public static final String STREETS_MAP_STYLE + = Style.getPredefinedStyle("Streets"); + + private LocationPickerConstants() { } From 3b1b0c82ffc6985c24733317eb244e4a4644297e Mon Sep 17 00:00:00 2001 From: Ritika Date: Sat, 1 Apr 2023 11:53:20 +0530 Subject: [PATCH 8/9] LocationPickerActivityTest: add additional target exception in catch block --- .../LocationPickerActivityUnitTests.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/locationpicker/LocationPickerActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/locationpicker/LocationPickerActivityUnitTests.kt index b700ef8b19..1b45102dba 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/locationpicker/LocationPickerActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/locationpicker/LocationPickerActivityUnitTests.kt @@ -143,12 +143,15 @@ class LocationPickerActivityUnitTests { method.invoke(activity, mapboxMap) fail("Expected an exception to be thrown") } catch (e: InvocationTargetException) { - assertTrue(e.targetException is MapboxConfigurationException) - assertEquals( - "\nUsing MapView requires calling Mapbox.getInstance(Context context, String apiKey," - + " WellKnownTileServer wellKnownTileServer) before inflating or creating the view.", - e.targetException.message - ) + assertTrue((e.targetException is MapboxConfigurationException) || + (e.targetException is ExceptionInInitializerError)) + if (e.targetException is MapboxConfigurationException) { + assertEquals( + "\nUsing MapView requires calling Mapbox.getInstance(Context context, String apiKey," + + " WellKnownTileServer wellKnownTileServer) before inflating or creating the view.", + e.targetException.message + ) + } } } From 3a2752f4a1682a8b3d86c853302e8dca8a9665af Mon Sep 17 00:00:00 2001 From: Ritika Date: Sat, 1 Apr 2023 12:12:44 +0530 Subject: [PATCH 9/9] LocationPickerConstants: remove extra newline introduced --- .../free/nrw/commons/LocationPicker/LocationPickerConstants.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java index b988663519..a7ee98f945 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerConstants.java @@ -20,7 +20,6 @@ public final class LocationPickerConstants { = Style.getPredefinedStyle("Streets"); - private LocationPickerConstants() { } }