From ae0bfae27515d3b740054d6ffc45b4c00bf4b7a4 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Tue, 27 Mar 2018 20:39:38 +0300 Subject: [PATCH 1/7] Fix bottom sheet and current location marker visibilities --- .../nrw/commons/nearby/NearbyMapFragment.java | 50 +++++++++++++------ .../fr/free/nrw/commons/utils/ViewUtil.java | 11 ++++ 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index d541a8e45..859eb7f80 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -55,6 +55,7 @@ import dagger.android.support.DaggerFragment; import fr.free.nrw.commons.R; import fr.free.nrw.commons.contributions.ContributionController; import fr.free.nrw.commons.utils.UriDeserializer; +import fr.free.nrw.commons.utils.ViewUtil; import timber.log.Timber; import static android.app.Activity.RESULT_OK; @@ -105,7 +106,8 @@ public class NearbyMapFragment extends DaggerFragment { private PolygonOptions currentLocationPolygonOptions; private boolean isBottomListSheetExpanded; - private final double CAMERA_TARGET_SHIFT_FACTOR = 0.06; + private final double CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT = 0.06; + private final double CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE = 0.04; @Inject @Named("prefs") @@ -253,13 +255,24 @@ public class NearbyMapFragment extends DaggerFragment { } // Make camera to follow user on location change - CameraPosition position = new CameraPosition.Builder() - .target(isBottomListSheetExpanded ? - new LatLng(curMapBoxLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR, - curMapBoxLatLng.getLongitude()) - : curMapBoxLatLng ) // Sets the new camera position - .zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level - .build(); + CameraPosition position ; + if(ViewUtil.isPortrait(getActivity())){ + position = new CameraPosition.Builder() + .target(isBottomListSheetExpanded ? + new LatLng(curMapBoxLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT, + curMapBoxLatLng.getLongitude()) + : curMapBoxLatLng ) // Sets the new camera position + .zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level + .build(); + }else { + position = new CameraPosition.Builder() + .target(isBottomListSheetExpanded ? + new LatLng(curMapBoxLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, + curMapBoxLatLng.getLongitude()) + : curMapBoxLatLng ) // Sets the new camera position + .zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level + .build(); + } mapboxMap.animateCamera(CameraUpdateFactory .newCameraPosition(position), 1000); @@ -273,12 +286,21 @@ public class NearbyMapFragment extends DaggerFragment { if (mapboxMap != null && curLatLng != null) { if (isBottomListSheetExpanded) { // Make camera to follow user on location change - position = new CameraPosition.Builder() - .target(new LatLng(curLatLng.getLatitude() - CAMERA_TARGET_SHIFT_FACTOR, - curLatLng.getLongitude())) // Sets the new camera target above - // current to make it visible when sheet is expanded - .zoom(11) // Same zoom level - .build(); + if(ViewUtil.isPortrait(getActivity())) { + position = new CameraPosition.Builder() + .target(new LatLng(curLatLng.getLatitude() - CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT, + curLatLng.getLongitude())) // Sets the new camera target above + // current to make it visible when sheet is expanded + .zoom(11) // Same zoom level + .build(); + } else { + position = new CameraPosition.Builder() + .target(new LatLng(curLatLng.getLatitude() - CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, + curLatLng.getLongitude())) // Sets the new camera target above + // current to make it visible when sheet is expanded + .zoom(11) // Same zoom level + .build(); + } } else { // Make camera to follow user on location change diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java index 91e2114a9..b4b26746b 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java @@ -1,7 +1,9 @@ package fr.free.nrw.commons.utils; +import android.app.Activity; import android.content.Context; import android.support.design.widget.Snackbar; +import android.view.Display; import android.view.View; import android.widget.Toast; @@ -16,4 +18,13 @@ public class ViewUtil { Toast.LENGTH_LONG).show(); } + public static boolean isPortrait(Context context) { + Display orientation = ((Activity)context).getWindowManager().getDefaultDisplay(); + if(orientation.getWidth() < orientation.getHeight()){ + return true; + } else { + return false; + } + } + } From ba73dbbd50583417f82877f26592ece2d340d9d7 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Tue, 27 Mar 2018 22:24:14 +0300 Subject: [PATCH 2/7] Fix zoom and target according to bottom sheet position --- .../nrw/commons/nearby/NearbyMapFragment.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index 859eb7f80..f101b72fd 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -262,7 +262,9 @@ public class NearbyMapFragment extends DaggerFragment { new LatLng(curMapBoxLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT, curMapBoxLatLng.getLongitude()) : curMapBoxLatLng ) // Sets the new camera position - .zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level + .zoom(isBottomListSheetExpanded ? + 11 // zoom level is fixed to 11 when bottom sheet is expanded + :mapboxMap.getCameraPosition().zoom) // Same zoom level .build(); }else { position = new CameraPosition.Builder() @@ -270,7 +272,9 @@ public class NearbyMapFragment extends DaggerFragment { new LatLng(curMapBoxLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, curMapBoxLatLng.getLongitude()) : curMapBoxLatLng ) // Sets the new camera position - .zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level + .zoom(isBottomListSheetExpanded ? + 11 // zoom level is fixed to 11 when bottom sheet is expanded + :mapboxMap.getCameraPosition().zoom) // Same zoom level .build(); } @@ -291,14 +295,14 @@ public class NearbyMapFragment extends DaggerFragment { .target(new LatLng(curLatLng.getLatitude() - CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT, curLatLng.getLongitude())) // Sets the new camera target above // current to make it visible when sheet is expanded - .zoom(11) // Same zoom level + .zoom(11) // Fixed zoom level .build(); } else { position = new CameraPosition.Builder() .target(new LatLng(curLatLng.getLatitude() - CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, curLatLng.getLongitude())) // Sets the new camera target above // current to make it visible when sheet is expanded - .zoom(11) // Same zoom level + .zoom(11) // Fixed zoom level .build(); } @@ -366,10 +370,29 @@ public class NearbyMapFragment extends DaggerFragment { fabRecenter.setOnClickListener(view -> { if (curLatLng != null) { mapView.getMapAsync(mapboxMap -> { - CameraPosition position = new CameraPosition.Builder() - .target(new LatLng(curLatLng.getLatitude(), curLatLng.getLongitude())) // Sets the new camera position - .zoom(11) // Sets the zoom - .build(); // Creates a CameraPosition from the builder + CameraPosition position; + + if(ViewUtil.isPortrait(getActivity())){ + position = new CameraPosition.Builder() + .target(isBottomListSheetExpanded ? + new LatLng(curLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT, + curLatLng.getLongitude()) + : new LatLng(curLatLng.getLatitude(), curLatLng.getLongitude(), 0)) // Sets the new camera position + .zoom(isBottomListSheetExpanded ? + 11 // zoom level is fixed to 11 when bottom sheet is expanded + :mapboxMap.getCameraPosition().zoom) // Same zoom level + .build(); + }else { + position = new CameraPosition.Builder() + .target(isBottomListSheetExpanded ? + new LatLng(curLatLng.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, + curLatLng.getLongitude()) + : new LatLng(curLatLng.getLatitude(), curLatLng.getLongitude(), 0)) // Sets the new camera position + .zoom(isBottomListSheetExpanded ? + 11 // zoom level is fixed to 11 when bottom sheet is expanded + :mapboxMap.getCameraPosition().zoom) // Same zoom level + .build(); + } mapboxMap.animateCamera(CameraUpdateFactory .newCameraPosition(position), 1000); From 59a7428048af3df75993df08c22783fc6952d93d Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 29 Mar 2018 16:11:30 +0300 Subject: [PATCH 3/7] Fix neraby leak B, leak caused map marker's have reference to activity stays remain on destroy fragment --- .../java/fr/free/nrw/commons/nearby/NearbyMapFragment.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index f101b72fd..b6015da40 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -821,6 +821,9 @@ public class NearbyMapFragment extends DaggerFragment { if (mapView != null) { mapView.onDestroy(); } + selected = null; + currentLocationMarker = null; + super.onDestroyView(); } From ea57855dcc6de40aeb8711b8ed4e0cc4dc48fcb7 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 29 Mar 2018 19:47:13 +0300 Subject: [PATCH 4/7] Fix memory leak C, I hope --- .../fr/free/nrw/commons/nearby/NearbyActivity.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 88d5880f5..59a1d3ebc 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -262,8 +262,6 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp @Override protected void onStop() { super.onStop(); - locationManager.removeLocationListener(this); - locationManager.unregisterLocationManager(); } @Override @@ -292,8 +290,13 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp // to the retained fragment object to perform its own cleanup. removeMapFragment(); removeListFragment(); - unregisterReceiver(broadcastReceiver); + } + unregisterReceiver(broadcastReceiver); + broadcastReceiver = null; + locationManager.removeLocationListener(this); + locationManager.unregisterLocationManager(); + } private void addNetworkBroadcastReceiver() { @@ -422,6 +425,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp if (nearbyMapFragment != null) { android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction().remove(nearbyMapFragment).commit(); + nearbyMapFragment = null; } } @@ -433,6 +437,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp if (nearbyListFragment != null) { android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction().remove(nearbyListFragment).commit(); + nearbyListFragment = null; } } From 7b5c5ce4975f9ebb60918264410c715a0d941ccb Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 29 Mar 2018 23:15:21 +0300 Subject: [PATCH 5/7] Fix nearby leaks D --- .../upload/DetectUnwantedPicturesAsync.java | 43 +++++++++++++++---- .../nrw/commons/upload/ShareActivity.java | 28 ++---------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/DetectUnwantedPicturesAsync.java b/app/src/main/java/fr/free/nrw/commons/upload/DetectUnwantedPicturesAsync.java index b383601ec..ab9fa5602 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/DetectUnwantedPicturesAsync.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/DetectUnwantedPicturesAsync.java @@ -1,12 +1,18 @@ package fr.free.nrw.commons.upload; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.graphics.BitmapRegionDecoder; import android.net.Uri; import android.os.AsyncTask; +import android.support.v7.app.AlertDialog; import java.io.IOException; +import java.lang.ref.WeakReference; +import fr.free.nrw.commons.R; +import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.utils.ImageUtils; import timber.log.Timber; @@ -21,16 +27,13 @@ import timber.log.Timber; public class DetectUnwantedPicturesAsync extends AsyncTask { - interface Callback { - void onResult(ImageUtils.Result result); - } - - private final Callback callback; private final String imageMediaFilePath; + public final WeakReference activityWeakReference; - DetectUnwantedPicturesAsync(String imageMediaFilePath, Callback callback) { - this.callback = callback; + DetectUnwantedPicturesAsync(WeakReference activityWeakReference, String imageMediaFilePath) { + //this.callback = callback; this.imageMediaFilePath = imageMediaFilePath; + this.activityWeakReference = activityWeakReference; } @Override @@ -53,7 +56,29 @@ public class DetectUnwantedPicturesAsync extends AsyncTask { + //user does not wish to upload the picture, take them back to ContributionsActivity + Intent intent = new Intent(activity, ContributionsActivity.class); + dialogInterface.dismiss(); + activity.startActivity(intent); + }); + errorDialogBuilder.setNegativeButton(activity.getString(R.string.yes), (dialogInterface, i) -> { + //user wishes to go ahead with the upload of this picture, just dismiss this dialog + dialogInterface.dismiss(); + }); + + AlertDialog errorDialog = errorDialogBuilder.create(); + if (!activity.isFinishing()) { + errorDialog.show(); + } + } } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index f5e1820b8..aca17601c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -415,31 +415,9 @@ public class ShareActivity private void performUnwantedPictureDetectionProcess() { String imageMediaFilePath = FileUtils.getPath(this,mediaUri); - DetectUnwantedPicturesAsync detectUnwantedPicturesAsync = new DetectUnwantedPicturesAsync(imageMediaFilePath, result -> { - - if (result != ImageUtils.Result.IMAGE_OK) { - //show appropriate error message - String errorMessage = result == ImageUtils.Result.IMAGE_DARK ? getString(R.string.upload_image_too_dark) : getString(R.string.upload_image_blurry); - AlertDialog.Builder errorDialogBuilder = new AlertDialog.Builder(this); - errorDialogBuilder.setMessage(errorMessage); - errorDialogBuilder.setTitle(getString(R.string.warning)); - errorDialogBuilder.setPositiveButton(getString(R.string.no), (dialogInterface, i) -> { - //user does not wish to upload the picture, take them back to ContributionsActivity - Intent intent = new Intent(ShareActivity.this, ContributionsActivity.class); - dialogInterface.dismiss(); - startActivity(intent); - }); - errorDialogBuilder.setNegativeButton(getString(R.string.yes), (dialogInterface, i) -> { - //user wishes to go ahead with the upload of this picture, just dismiss this dialog - dialogInterface.dismiss(); - }); - - AlertDialog errorDialog = errorDialogBuilder.create(); - if (!isFinishing()) { - errorDialog.show(); - } - } - }); + DetectUnwantedPicturesAsync detectUnwantedPicturesAsync + = new DetectUnwantedPicturesAsync(new WeakReference(this) + , imageMediaFilePath); detectUnwantedPicturesAsync.execute(); } From 499d64bb262e8d96be437de82a59e89057c89ddb Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Fri, 30 Mar 2018 11:55:15 +0300 Subject: [PATCH 6/7] Fix NPE --- .../java/fr/free/nrw/commons/nearby/NearbyMapFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index f101b72fd..79efb463c 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -579,7 +579,9 @@ public class NearbyMapFragment extends DaggerFragment { transparentView.setAlpha(0); closeFabs(isFabOpen); hideFAB(); - this.getView().requestFocus(); + if (this.getView() != null) { + this.getView().requestFocus(); + } break; } } From c6f728a6edd9f4aeb918c84e51cd210884102ca4 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Sat, 31 Mar 2018 03:57:15 +1000 Subject: [PATCH 7/7] Versioning and changelog for v2.7.0 (#1392) * Update changelog.md * Versioning for v2.7.0 --- CHANGELOG.md | 10 ++++++++++ app/build.gradle | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 035835839..7f3dfc30a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Wikimedia Commons for Android +## v2.7.0 +- New Nearby Places UI with direct uploads (and associated category suggestions) +- Added two-factor authentication login +- Added Notifications activity to display user talk messages +- Added real-time location tracking in Nearby +- Added "rate us", "translate", and FB link in About +- Improvements to UI of navigation drawer, tutorial, media details view, login activity and Settings +- Added option to nominate picture for deletion in media details view +- Too many bug and crash fixes to mention! + ## v2.6.7 - Added null checks to prevent frequent crashes in ModificationsSyncAdapter diff --git a/app/build.gradle b/app/build.gradle index 06996d5a6..c4f48451d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,8 +91,8 @@ android { defaultConfig { applicationId 'fr.free.nrw.commons' - versionCode 82 - versionName '2.6.7' + versionCode 83 + versionName '2.7.0' setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) minSdkVersion project.minSdkVersion