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; } } 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 79efb463c..e3e066ef5 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 @@ -823,6 +823,9 @@ public class NearbyMapFragment extends DaggerFragment { if (mapView != null) { mapView.onDestroy(); } + selected = null; + currentLocationMarker = null; + super.onDestroyView(); } 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(); }