From af51ffad8668affd5243ff1933fdc7225cc53c49 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 25 May 2018 23:16:57 +1000 Subject: [PATCH] Incomplete creation of FileProcessor object --- .../nrw/commons/upload/FileProcessor.java | 42 +++--------------- .../free/nrw/commons/upload/GPSExtractor.java | 2 +- .../nrw/commons/upload/ShareActivity.java | 44 +++++++++++++++++-- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.java b/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.java index b349eab39..6e0d134a0 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.java @@ -19,48 +19,20 @@ import java.util.List; import timber.log.Timber; +import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.DUPLICATE_PROCEED; import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.NO_DUPLICATE; +import static fr.free.nrw.commons.upload.FileUtils.getSHA1; public class FileProcessor { + private Uri mediaUri; - /** - * Check if file user wants to upload already exists on Commons - */ - private void checkIfFileExists() { - if (!useNewPermissions || storagePermitted) { - if (!duplicateCheckPassed) { - //Test SHA1 of image to see if it matches SHA1 of a file on Commons - try { - InputStream inputStream = getContentResolver().openInputStream(mediaUri); - Timber.d("Input stream created from %s", mediaUri.toString()); - String fileSHA1 = getSHA1(inputStream); - Timber.d("File SHA1 is: %s", fileSHA1); + public FileProcessor(Uri mediaUri) { + this.mediaUri = mediaUri; - ExistingFileAsync fileAsyncTask = - new ExistingFileAsync(new WeakReference(this), fileSHA1, new WeakReference(this), result -> { - Timber.d("%s duplicate check: %s", mediaUri.toString(), result); - duplicateCheckPassed = (result == DUPLICATE_PROCEED || result == NO_DUPLICATE); - - //TODO: 16/9/17 should we run DetectUnwantedPicturesAsync if DUPLICATE_PROCEED is returned? Since that means - //we are processing images that are already on server???... - if (duplicateCheckPassed) { - //image can be uploaded, so now check if its a useless picture or not - detectUnwantedPictures(); - } - },mwApi); - fileAsyncTask.execute(); - } catch (IOException e) { - Timber.e(e, "IO Exception: "); - } - } - } else { - Timber.w("not ready for preprocessing: useNewPermissions=%s storage=%s location=%s", - useNewPermissions, storagePermitted, locationPermitted); - } } - + /** * Calls the async task that detects if image is fuzzy, too dark, etc */ @@ -108,7 +80,7 @@ public class FileProcessor { * Gets coordinates for category suggestions, either from EXIF data or user location * @param gpsEnabled if true use GPS */ - private void getFileCoordinates(boolean gpsEnabled) { + void getFileCoordinates(boolean gpsEnabled) { Timber.d("Calling GPSExtractor"); try { if (imageObj == null) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index b9750e350..c6863acf6 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -22,7 +22,7 @@ import timber.log.Timber; * is uploaded, extract latitude and longitude from EXIF data of image. If a picture without * geolocation is uploaded, retrieve user's location (if enabled in Settings). */ -public class GPSExtractor { +public class GPSExtractor extends FileProcessor { private final Context context; private SharedPreferences prefs; 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 f48b5526d..0effb9350 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 @@ -79,6 +79,7 @@ import timber.log.Timber; import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.DUPLICATE_PROCEED; import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.NO_DUPLICATE; +import static fr.free.nrw.commons.upload.FileUtils.getSHA1; /** * Activity for the title/desc screen after image is selected. Also starts processing image @@ -307,8 +308,9 @@ public class ShareActivity new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERM_ON_CREATE_LOCATION); } + FileProcessor fileObj = new FileProcessor(mediaUri); checkIfFileExists(); - getFileCoordinates(locationPermitted); + fileObj.getFileCoordinates(locationPermitted); SingleUploadFragment shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView"); categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization"); @@ -436,9 +438,7 @@ public class ShareActivity /** * Displays Snackbar to ask for location permissions */ - private Snackbar requestPermissionUsingSnackBar(String rationale, - final String[] perms, - final int code) { + private Snackbar requestPermissionUsingSnackBar(String rationale, final String[] perms, final int code) { Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), rationale, Snackbar.LENGTH_INDEFINITE).setAction(R.string.ok, view -> ActivityCompat.requestPermissions(ShareActivity.this, perms, code)); @@ -446,6 +446,42 @@ public class ShareActivity return snackbar; } + /** + * Check if file user wants to upload already exists on Commons + */ + private void checkIfFileExists() { + if (!useNewPermissions || storagePermitted) { + if (!duplicateCheckPassed) { + //Test SHA1 of image to see if it matches SHA1 of a file on Commons + try { + InputStream inputStream = getContentResolver().openInputStream(mediaUri); + Timber.d("Input stream created from %s", mediaUri.toString()); + String fileSHA1 = getSHA1(inputStream); + Timber.d("File SHA1 is: %s", fileSHA1); + + ExistingFileAsync fileAsyncTask = + new ExistingFileAsync(new WeakReference(this), fileSHA1, new WeakReference(this), result -> { + Timber.d("%s duplicate check: %s", mediaUri.toString(), result); + duplicateCheckPassed = (result == DUPLICATE_PROCEED || result == NO_DUPLICATE); + + //TODO: 16/9/17 should we run DetectUnwantedPicturesAsync if DUPLICATE_PROCEED is returned? Since that means + //we are processing images that are already on server???... + if (duplicateCheckPassed) { + //image can be uploaded, so now check if its a useless picture or not + detectUnwantedPictures(); + } + },mwApi); + fileAsyncTask.execute(); + } catch (IOException e) { + Timber.e(e, "IO Exception: "); + } + } + } else { + Timber.w("not ready for preprocessing: useNewPermissions=%s storage=%s location=%s", + useNewPermissions, storagePermitted, locationPermitted); + } + } + //I might not be supposed to change it, but still, I saw it @Override public void onPositiveResponse() {