From 9b8a74b88e55a4645d9bdcfa3b98b9a43f85c49d Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 16:22:19 +1200 Subject: [PATCH 01/53] Add try catch block --- .../fr/free/nrw/commons/upload/GPSExtractor.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 d030eb201..2bf9fe79f 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 @@ -57,10 +57,14 @@ public class GPSExtractor { provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); - locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); - Location location = locationManager.getLastKnownLocation(provider); - if (location != null) { - myLocationListener.onLocationChanged(location); + try { + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + Location location = locationManager.getLastKnownLocation(provider); + if (location != null) { + myLocationListener.onLocationChanged(location); + } + } catch (IllegalArgumentException e){ + Log.e(TAG, "Illegal argument exception", e); } } From 9543c03cab66659781d7d87325bcede17278312c Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 18:06:50 +1200 Subject: [PATCH 02/53] Add exception logging to UploadController --- .../java/fr/free/nrw/commons/upload/UploadController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index ba896da37..398a74dc3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -13,6 +13,7 @@ import android.os.IBinder; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.text.TextUtils; +import android.util.Log; import android.webkit.MimeTypeMap; import java.io.IOException; @@ -119,7 +120,9 @@ public class UploadController { contribution.setDataLength(length); } } catch(IOException e) { - throw new RuntimeException(e); + Log.e("UploadController", "IO Exception: ", e); + } catch(NullPointerException e) { + Log.e("UploadController", "Null Pointer Exception: ", e); } String mimeType = (String)contribution.getTag("mimeType"); From b30bee5b0f1e6c77675771c6b6cf06bb51edb484 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 18:10:08 +1200 Subject: [PATCH 03/53] Null check for cursor close --- .../main/java/fr/free/nrw/commons/upload/UploadController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index 398a74dc3..aaedcc8df 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -145,10 +145,10 @@ public class UploadController { dateCreated = new Date(); } contribution.setDateCreated(dateCreated); + cursor.close(); } else { contribution.setDateCreated(new Date()); } - cursor.close(); } return contribution; From 08e24d31a5efd77b04198f8e8b6a8626cb5291e0 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 18:28:51 +1200 Subject: [PATCH 04/53] Reword storage permission request --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e9e5af8e2..4dad0d831 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,7 +150,7 @@ Campaigns Refresh - Recommended: Storage for photo metadata + Required: Storage for photo metadata. App cannot function without this. Optional: Current location for category suggestions OK Back From 82f2d58f583d83d728f51dfaab253f8980a63b13 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 18:42:35 +1200 Subject: [PATCH 05/53] Catch exceptions --- .../nrw/commons/contributions/ContributionController.java | 6 +++++- .../java/fr/free/nrw/commons/upload/UploadController.java | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) 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 b37e1b018..58871d2cc 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 @@ -82,7 +82,11 @@ public class ContributionController { break; } Log.i("Image", "Image selected"); - activity.startActivity(shareIntent); + try { + activity.startActivity(shareIntent); + } catch (SecurityException e) { + Log.e("ContributionController", "Security Exception", e); + } } public void saveState(Bundle outState) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index aaedcc8df..c53a16431 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -123,6 +123,8 @@ public class UploadController { Log.e("UploadController", "IO Exception: ", e); } catch(NullPointerException e) { Log.e("UploadController", "Null Pointer Exception: ", e); + } catch(SecurityException e) { + Log.e("UploadController", "Security Exception: ", e); } String mimeType = (String)contribution.getTag("mimeType"); From 24d0b9fdf6ce8660c805b08b40b7316ff09b0870 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 19:02:01 +1200 Subject: [PATCH 06/53] Added fixme in places for permissions check --- .../free/nrw/commons/contributions/ContributionController.java | 1 + .../main/java/fr/free/nrw/commons/upload/UploadController.java | 2 ++ 2 files changed, 3 insertions(+) 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 58871d2cc..79802cea9 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 @@ -85,6 +85,7 @@ public class ContributionController { try { activity.startActivity(shareIntent); } catch (SecurityException e) { + //FIXME: Add permission request here Log.e("ContributionController", "Security Exception", e); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index c53a16431..f72a1c067 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -89,6 +89,8 @@ public class UploadController { } public void startUpload(final Contribution contribution, final ContributionUploadProgress onComplete) { + + //FIXME: Add permission request here SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); if(TextUtils.isEmpty(contribution.getCreator())) { From 619c14857d3f6e72922d18b22ac7caaad2a74348 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 19:03:29 +1200 Subject: [PATCH 07/53] Reword permission request string --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4dad0d831..75ed97e31 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,7 +150,7 @@ Campaigns Refresh - Required: Storage for photo metadata. App cannot function without this. + Required: Read external storage. App cannot function without this. Optional: Current location for category suggestions OK Back From 350679dc5d4e456f99cf523146b84f47476542d2 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 12 Jul 2016 19:10:30 +1200 Subject: [PATCH 08/53] Add comments --- .../free/nrw/commons/contributions/ContributionController.java | 2 +- .../main/java/fr/free/nrw/commons/upload/UploadController.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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 79802cea9..c62b74c56 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 @@ -85,7 +85,7 @@ public class ContributionController { try { activity.startActivity(shareIntent); } catch (SecurityException e) { - //FIXME: Add permission request here + //FIXME: Add permission request here. Only startActivity if permission has been granted. Log.e("ContributionController", "Security Exception", e); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index f72a1c067..85281c33e 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -90,7 +90,7 @@ public class UploadController { public void startUpload(final Contribution contribution, final ContributionUploadProgress onComplete) { - //FIXME: Add permission request here + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); if(TextUtils.isEmpty(contribution.getCreator())) { @@ -104,6 +104,7 @@ public class UploadController { String license = prefs.getString(Prefs.DEFAULT_LICENSE, Prefs.Licenses.CC_BY_SA); contribution.setLicense(license); + //FIXME: Add permission request here. Only executeAsyncTask if permission has been granted Utils.executeAsyncTask(new AsyncTask() { // Fills up missing information about Contributions From c0547c16a987a4596f5e489b061eb5b9f5d00075 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 18:35:19 +1200 Subject: [PATCH 09/53] Add PermissionEverywhere dependency --- app/build.gradle | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index be45cc9f9..98adce9e2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,9 @@ apply plugin: 'com.android.application' +repositories { + maven { url "https://jitpack.io" } +} + dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' @@ -12,6 +16,7 @@ dependencies { compile 'com.android.support:support-v4:23.4.0' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' + compile 'com.github.kaknazaveshtakipishi:PermissionEverywhere:alpha' //noinspection GradleDependency - old version has required feature compile 'com.google.code.gson:gson:1.4' @@ -25,7 +30,7 @@ android { defaultConfig { applicationId "fr.free.nrw.commons" - minSdkVersion 11 + minSdkVersion 15 targetSdkVersion 23 ndk { From 1b385d4f037dc47c6fe8943696f241d63baea3f9 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 18:46:45 +1200 Subject: [PATCH 10/53] Use callback method --- .../nrw/commons/upload/UploadController.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index 85281c33e..e90e4a4f4 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.upload; +import android.Manifest; import android.app.Activity; import android.content.ComponentName; import android.content.Context; @@ -15,6 +16,11 @@ import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.webkit.MimeTypeMap; +import android.widget.Toast; + +import com.permissioneverywhere.PermissionEverywhere; +import com.permissioneverywhere.PermissionResponse; +import com.permissioneverywhere.PermissionResultCallback; import java.io.IOException; import java.util.Date; @@ -22,6 +28,7 @@ import java.util.Date; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.Prefs; +import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.contributions.Contribution; @@ -104,6 +111,17 @@ public class UploadController { String license = prefs.getString(Prefs.DEFAULT_LICENSE, Prefs.Licenses.CC_BY_SA); contribution.setLicense(license); + PermissionEverywhere.getPermission(app, + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, + 2, + "Notification title", + "This app needs a write permission", + R.drawable.ic_launcher) + .enqueue(new PermissionResultCallback() { + @Override + public void onComplete(PermissionResponse permissionResponse) { + + //FIXME: Add permission request here. Only executeAsyncTask if permission has been granted Utils.executeAsyncTask(new AsyncTask() { @@ -166,6 +184,9 @@ public class UploadController { onComplete.onUploadStarted(contribution); } }); + } + }); } + } From f8fbf0f8cfc2f6d5ffaeafc4c7d4d169273679b8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 19:23:55 +1200 Subject: [PATCH 11/53] Added check to send button --- .../fr/free/nrw/commons/upload/ShareActivity.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 bdb58fa1d..9b3e0c68f 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 @@ -12,6 +12,7 @@ import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.NavUtils; import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.MenuItem; import android.view.View; @@ -72,11 +73,23 @@ public class ShareActivity private boolean storagePermission = false; private boolean locationPermission = false; + + public ShareActivity() { super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); } public void uploadActionInitiated(String title, String description) { + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + 1); + } + Toast startingToast = Toast.makeText(getApplicationContext(), R.string.uploading_started, Toast.LENGTH_LONG); startingToast.show(); @@ -86,6 +99,7 @@ public class ShareActivity Log.d(TAG, "Cache the categories found"); } + uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() { public void onUploadStarted(Contribution contribution) { ShareActivity.this.contribution = contribution; From af0c1dc3a80e6380d0d18eb414d772bfde63c260 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 19:35:18 +1200 Subject: [PATCH 12/53] Integrate with Adam's code --- .../nrw/commons/upload/ShareActivity.java | 55 +++++++++++-------- 1 file changed, 32 insertions(+), 23 deletions(-) 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 9b3e0c68f..149083191 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 @@ -73,7 +73,10 @@ public class ShareActivity private boolean storagePermission = false; private boolean locationPermission = false; + private String title; + private String description; + private Snackbar snackbar; public ShareActivity() { super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); @@ -81,31 +84,15 @@ public class ShareActivity public void uploadActionInitiated(String title, String description) { - if (ContextCompat.checkSelfPermission(this, - Manifest.permission.READ_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { + this.title = title; + this.description = description; - ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, - 1); + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + } else { + uploadBegins(); } - Toast startingToast = Toast.makeText(getApplicationContext(), R.string.uploading_started, Toast.LENGTH_LONG); - startingToast.show(); - - if (cacheFound == false) { - //Has to be called after apiCall.request() - app.cacheData.cacheCategory(); - Log.d(TAG, "Cache the categories found"); - } - - - uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() { - public void onUploadStarted(Contribution contribution) { - ShareActivity.this.contribution = contribution; - showPostUpload(); - } - }); } private void showPostUpload() { @@ -248,7 +235,7 @@ public class ShareActivity if (useNewPermissions && (!storagePermission || !locationPermission)) { if (!storagePermission && !locationPermission) { String permissionRationales = getResources().getString(R.string.storage_permission_rationale) + "\n" + getResources().getString(R.string.location_permission_rationale); - Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), permissionRationales, + snackbar = Snackbar.make(findViewById(android.R.id.content), permissionRationales, Snackbar.LENGTH_INDEFINITE) .setAction(R.string.ok, new View.OnClickListener() { @Override @@ -290,6 +277,25 @@ public class ShareActivity } } + private void uploadBegins() { + + Toast startingToast = Toast.makeText(getApplicationContext(), R.string.uploading_started, Toast.LENGTH_LONG); + startingToast.show(); + + if (cacheFound == false) { + //Has to be called after apiCall.request() + app.cacheData.cacheCategory(); + Log.d(TAG, "Cache the categories found"); + } + + uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() { + public void onUploadStarted(Contribution contribution) { + ShareActivity.this.contribution = contribution; + showPostUpload(); + } + }); + } + @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { @@ -298,6 +304,9 @@ public class ShareActivity case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + uploadBegins(); + snackbar.dismiss(); getFileMetadata(); } return; From 8f78f904a0c37f5801f204d2cdd06275bc04e2f5 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 19:38:36 +1200 Subject: [PATCH 13/53] Added comments and whitespace --- .../fr/free/nrw/commons/upload/ShareActivity.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) 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 149083191..5735de399 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 @@ -75,7 +75,6 @@ public class ShareActivity private String title; private String description; - private Snackbar snackbar; public ShareActivity() { @@ -87,12 +86,12 @@ public class ShareActivity this.title = title; this.description = description; + //Check for Storage permission that is required for upload. Do not allow user to proceed without permission, otherwise will crash if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); } else { uploadBegins(); } - } private void showPostUpload() { @@ -161,7 +160,6 @@ public class ShareActivity protected void onAuthCookieAcquired(String authCookie) { app.getApi().setAuthCookie(authCookie); - shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView"); categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization"); if(shareView == null && categorizationFragment == null) { @@ -181,11 +179,6 @@ public class ShareActivity finish(); } - /** - * Initiates retrieval of image coordinates or user coordinates, and caching of coordinates. - * Then initiates the calls to MediaWiki API through an instance of MwVolleyApi. - */ - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -305,6 +298,7 @@ public class ShareActivity if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //Uploading only begins if storage permission granted uploadBegins(); snackbar.dismiss(); getFileMetadata(); @@ -355,6 +349,10 @@ public class ShareActivity useImageCoords(); } + /** + * Initiates retrieval of image coordinates or user coordinates, and caching of coordinates. + * Then initiates the calls to MediaWiki API through an instance of MwVolleyApi. + */ public void useImageCoords() { if(decimalCoords != null) { Log.d(TAG, "Decimal coords of image: " + decimalCoords); @@ -411,5 +409,4 @@ public class ShareActivity } return super.onOptionsItemSelected(item); } - } From 00ab7dc339fe796b7d6316c2aa740dc68e4dc47d Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 13 Jul 2016 19:42:15 +1200 Subject: [PATCH 14/53] Remove wrong code --- app/build.gradle | 4 ++-- .../nrw/commons/upload/UploadController.java | 18 ------------------ 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 98adce9e2..ab29c3617 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ dependencies { compile 'com.android.support:support-v4:23.4.0' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' - compile 'com.github.kaknazaveshtakipishi:PermissionEverywhere:alpha' + //noinspection GradleDependency - old version has required feature compile 'com.google.code.gson:gson:1.4' @@ -30,7 +30,7 @@ android { defaultConfig { applicationId "fr.free.nrw.commons" - minSdkVersion 15 + minSdkVersion 11 targetSdkVersion 23 ndk { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index e90e4a4f4..09acdd6f5 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -18,10 +18,6 @@ import android.util.Log; import android.webkit.MimeTypeMap; import android.widget.Toast; -import com.permissioneverywhere.PermissionEverywhere; -import com.permissioneverywhere.PermissionResponse; -import com.permissioneverywhere.PermissionResultCallback; - import java.io.IOException; import java.util.Date; @@ -111,16 +107,6 @@ public class UploadController { String license = prefs.getString(Prefs.DEFAULT_LICENSE, Prefs.Licenses.CC_BY_SA); contribution.setLicense(license); - PermissionEverywhere.getPermission(app, - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - 2, - "Notification title", - "This app needs a write permission", - R.drawable.ic_launcher) - .enqueue(new PermissionResultCallback() { - @Override - public void onComplete(PermissionResponse permissionResponse) { - //FIXME: Add permission request here. Only executeAsyncTask if permission has been granted Utils.executeAsyncTask(new AsyncTask() { @@ -184,9 +170,5 @@ public class UploadController { onComplete.onUploadStarted(contribution); } }); - } - }); } - - } From 3bac27f6dde88272608b57172b052dc5e9d06651 Mon Sep 17 00:00:00 2001 From: Yusuke Matsubara Date: Wed, 13 Jul 2016 21:57:40 +0900 Subject: [PATCH 15/53] Remove jitpack.io from repositories --- app/build.gradle | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ab29c3617..eb1bf4669 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,9 +1,5 @@ apply plugin: 'com.android.application' -repositories { - maven { url "https://jitpack.io" } -} - dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' From 604fc3d5fe019fa553b80b7505905189b7a6c5c6 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:01:08 +1200 Subject: [PATCH 16/53] Add 4th case for onResults --- .../nrw/commons/upload/ShareActivity.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) 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 5735de399..a44b21efc 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 @@ -81,6 +81,11 @@ public class ShareActivity super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); } + /** + * Called when user taps the submit button + * @param title + * @param description + */ public void uploadActionInitiated(String title, String description) { this.title = title; @@ -88,7 +93,7 @@ public class ShareActivity //Check for Storage permission that is required for upload. Do not allow user to proceed without permission, otherwise will crash if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 4); } else { uploadBegins(); } @@ -293,14 +298,10 @@ public class ShareActivity public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { - // 1 = Storage + // 1 = Storage (from snackbar) case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - - //Uploading only begins if storage permission granted - uploadBegins(); - snackbar.dismiss(); getFileMetadata(); } return; @@ -324,6 +325,20 @@ public class ShareActivity getLocationData(); } } + // 4 = Storage (from submit button) - this needs to be separate from (1) because only the + // submit button should bring user to next screen + case 4: { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //It is OK to call this at both (1) and (4) because if perm had been granted at + //snackbar, user should not be prompted at submit button + getFileMetadata(); + + //Uploading only begins if storage permission granted from arrow icon + uploadBegins(); + snackbar.dismiss(); + } + } } } From bdd53f2f2a64114db0f8c7a43128d310cb326dbe Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:03:16 +1200 Subject: [PATCH 17/53] Add check for Marshmallow --- .../fr/free/nrw/commons/upload/ShareActivity.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 a44b21efc..3e61dbd34 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 @@ -83,17 +83,19 @@ public class ShareActivity /** * Called when user taps the submit button - * @param title - * @param description */ public void uploadActionInitiated(String title, String description) { this.title = title; this.description = description; - //Check for Storage permission that is required for upload. Do not allow user to proceed without permission, otherwise will crash - if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 4); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + //Check for Storage permission that is required for upload. Do not allow user to proceed without permission, otherwise will crash + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 4); + } else { + uploadBegins(); + } } else { uploadBegins(); } From bfcb7fb6f2b8168687169e697d351ac9ed955886 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:08:53 +1200 Subject: [PATCH 18/53] Rearranging code --- .../nrw/commons/upload/ShareActivity.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) 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 3e61dbd34..a2341a217 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 @@ -101,6 +101,25 @@ public class ShareActivity } } + private void uploadBegins() { + + Toast startingToast = Toast.makeText(getApplicationContext(), R.string.uploading_started, Toast.LENGTH_LONG); + startingToast.show(); + + if (cacheFound == false) { + //Has to be called after apiCall.request() + app.cacheData.cacheCategory(); + Log.d(TAG, "Cache the categories found"); + } + + uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() { + public void onUploadStarted(Contribution contribution) { + ShareActivity.this.contribution = contribution; + showPostUpload(); + } + }); + } + private void showPostUpload() { if(categorizationFragment == null) { categorizationFragment = new CategorizationFragment(); @@ -277,25 +296,6 @@ public class ShareActivity } } - private void uploadBegins() { - - Toast startingToast = Toast.makeText(getApplicationContext(), R.string.uploading_started, Toast.LENGTH_LONG); - startingToast.show(); - - if (cacheFound == false) { - //Has to be called after apiCall.request() - app.cacheData.cacheCategory(); - Log.d(TAG, "Cache the categories found"); - } - - uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() { - public void onUploadStarted(Contribution contribution) { - ShareActivity.this.contribution = contribution; - showPostUpload(); - } - }); - } - @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { From 93d3123503bddcbffd918b42dd5eea3706d47219 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:11:29 +1200 Subject: [PATCH 19/53] Added returns --- app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java | 2 ++ 1 file changed, 2 insertions(+) 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 a2341a217..6079a4479 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 @@ -326,6 +326,7 @@ public class ShareActivity && grantResults[1] == PackageManager.PERMISSION_GRANTED) { getLocationData(); } + return; } // 4 = Storage (from submit button) - this needs to be separate from (1) because only the // submit button should bring user to next screen @@ -340,6 +341,7 @@ public class ShareActivity uploadBegins(); snackbar.dismiss(); } + return; } } } From 54428316a6576c1c7f95d0975b9505f92058ceb7 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:24:53 +1200 Subject: [PATCH 20/53] Find location to insert permission check --- .../free/nrw/commons/contributions/ContributionController.java | 1 - .../nrw/commons/contributions/ContributionsListFragment.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) 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 c62b74c56..58871d2cc 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 @@ -85,7 +85,6 @@ public class ContributionController { try { activity.startActivity(shareIntent); } catch (SecurityException e) { - //FIXME: Add permission request here. Only startActivity if permission has been granted. Log.e("ContributionController", "Security Exception", e); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 7ebbc0201..eebf6dd6f 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -94,6 +94,8 @@ public class ContributionsListFragment extends Fragment { public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_from_gallery: + //FIXME: Add permission request here. Only startActivity if permission has been granted + //Gallery crashes before reach ShareActivity screen so must implement check here controller.startGalleryPick(); return true; case R.id.menu_from_camera: From 4207022dee518747a5c1441a06e182bd51d9a5d3 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:32:34 +1200 Subject: [PATCH 21/53] Add check to gallery --- .../ContributionsListFragment.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index eebf6dd6f..b1adc296b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -1,11 +1,15 @@ package fr.free.nrw.commons.contributions; +import android.Manifest; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -96,7 +100,11 @@ public class ContributionsListFragment extends Fragment { case R.id.menu_from_gallery: //FIXME: Add permission request here. Only startActivity if permission has been granted //Gallery crashes before reach ShareActivity screen so must implement check here - controller.startGalleryPick(); + if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + } else { + controller.startGalleryPick(); + } return true; case R.id.menu_from_camera: controller.startCameraCapture(); @@ -131,6 +139,21 @@ public class ContributionsListFragment extends Fragment { } } + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + // 1 = Storage allowed when gallery selected + case 1: { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + controller.startGalleryPick(); + } + return; + } + } + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); // See http://stackoverflow.com/a/8495697/17865 From 456ed7aff63204c3298c01a9ebcee230c9a90a5e Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:37:01 +1200 Subject: [PATCH 22/53] Fixed returns --- .../nrw/commons/contributions/ContributionsListFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index b1adc296b..66bbcf6d9 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -105,7 +105,7 @@ public class ContributionsListFragment extends Fragment { } else { controller.startGalleryPick(); } - return true; + return true; case R.id.menu_from_camera: controller.startCameraCapture(); return true; @@ -148,6 +148,8 @@ public class ContributionsListFragment extends Fragment { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { controller.startGalleryPick(); + } else { + return; } return; } From ae7ed7694394c91901f1550658b56a9290e19bee Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:37:06 +1200 Subject: [PATCH 23/53] Fixed returns --- .../nrw/commons/contributions/ContributionsListFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 66bbcf6d9..820ade716 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -102,10 +102,11 @@ public class ContributionsListFragment extends Fragment { //Gallery crashes before reach ShareActivity screen so must implement check here if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + return true; } else { controller.startGalleryPick(); - } return true; + } case R.id.menu_from_camera: controller.startCameraCapture(); return true; From 0832963f57f553da4fc0f791b2c77c74b0edfe20 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:42:33 +1200 Subject: [PATCH 24/53] Add check for Android M --- .../ContributionsListFragment.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 820ade716..0e8f11814 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; @@ -98,12 +99,17 @@ public class ContributionsListFragment extends Fragment { public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_from_gallery: - //FIXME: Add permission request here. Only startActivity if permission has been granted - //Gallery crashes before reach ShareActivity screen so must implement check here - if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); - return true; - } else { + //Gallery crashes before reach ShareActivity screen so must implement permissions check here + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + return true; + } else { + controller.startGalleryPick(); + return true; + } + } + else { controller.startGalleryPick(); return true; } From 52c33a9b31b8fb33e544f96c16b2e963970cbf19 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 00:44:50 +1200 Subject: [PATCH 25/53] Modify string vals --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 75ed97e31..bf52e5853 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,8 +150,8 @@ Campaigns Refresh - Required: Read external storage. App cannot function without this. - Optional: Current location for category suggestions + Required permission: Read external storage. App cannot function without this. + Optional permission: Get current location for category suggestions OK Back From 54d1fcb4c7db39cd60a951143542cfbfb3f41012 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 16:50:21 +1200 Subject: [PATCH 26/53] Versioning --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6476610a6..ad6085664 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="36" + android:versionName="1.18" > From 6499e6bfd66cefdbfcbffffca30ea20c7a36426a Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Fri, 15 Jul 2016 16:52:00 +1200 Subject: [PATCH 27/53] Update changelog.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ca3949a6..494e2797a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Wikimedia Commons for Android +## v1.18 +- Fixed various crashes +- Fixed camera and gallery for API 23 + ## v1.17 - Fixed various crashes - Fixed 'Desc/license/categories empty' bug From 7592b0bae1ee0c1ff3b63b2a32d9f925e13756bd Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 15 Jul 2016 17:13:39 +1200 Subject: [PATCH 28/53] Add catch for SecurityException --- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 2bf9fe79f..2f76e3149 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 @@ -63,13 +63,19 @@ public class GPSExtractor { if (location != null) { myLocationListener.onLocationChanged(location); } - } catch (IllegalArgumentException e){ + } catch (IllegalArgumentException e) { Log.e(TAG, "Illegal argument exception", e); + } catch (SecurityException e) { + Log.e(TAG, "Security exception", e); } } protected void unregisterLocationManager() { - locationManager.removeUpdates(myLocationListener); + try { + locationManager.removeUpdates(myLocationListener); + } catch (SecurityException e) { + Log.e(TAG, "Security exception", e); + } } /** From 79647575417ad66fddd5317ec410ce7587c61280 Mon Sep 17 00:00:00 2001 From: Yusuke Matsubara Date: Sat, 16 Jul 2016 14:35:42 +0900 Subject: [PATCH 29/53] Travis-CI --- .travis.yml | 10 ++++++++++ app/build.gradle | 1 + 2 files changed, 11 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..0e56f734c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: android +android: + components: + - platform-tools + - tools + - build-tools-23.0.3 + - extra-google-m2repository + - extra-android-m2repository + - android-23 + - sys-img-x86-android-18 diff --git a/app/build.gradle b/app/build.gradle index eb1bf4669..89cfc74d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,5 +44,6 @@ android { lintOptions { disable 'MissingTranslation' disable 'ExtraTranslation' + abortOnError false } } From 73a87c822ff74422c9551822a744dc12b186c0e5 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 18 Jul 2016 21:01:45 +1200 Subject: [PATCH 30/53] Initialize adapter --- .../fr/free/nrw/commons/media/MediaDetailPagerFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index a9a2b2066..78df8c249 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -84,19 +84,21 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false); pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager); pager.setOnPageChangeListener(this); + final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager()); + if(savedInstanceState != null) { final int pageNumber = savedInstanceState.getInt("current-page"); // Adapter doesn't seem to be loading immediately. // Dear God, please forgive us for our sins view.postDelayed(new Runnable() { public void run() { - pager.setAdapter(new MediaDetailAdapter(getChildFragmentManager())); + pager.setAdapter(adapter); pager.setCurrentItem(pageNumber, false); getActivity().supportInvalidateOptionsMenu(); } }, 100); } else { - pager.setAdapter(new MediaDetailAdapter(getChildFragmentManager())); + pager.setAdapter(adapter); } return view; } From a633e74cce52a9ecdc871f3d2af6dfd75d817658 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 18 Jul 2016 21:04:29 +1200 Subject: [PATCH 31/53] Add notifyDataSetChanged() --- .../fr/free/nrw/commons/media/MediaDetailPagerFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 78df8c249..62ecf6c37 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -84,6 +84,7 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false); pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager); pager.setOnPageChangeListener(this); + final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager()); if(savedInstanceState != null) { @@ -95,6 +96,7 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa pager.setAdapter(adapter); pager.setCurrentItem(pageNumber, false); getActivity().supportInvalidateOptionsMenu(); + adapter.notifyDataSetChanged(); } }, 100); } else { From 895e3866488ed51d677f29c662a3de686f1803dd Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 18 Jul 2016 23:20:47 +1200 Subject: [PATCH 32/53] Add FIXME --- .../fr/free/nrw/commons/contributions/ContributionsActivity.java | 1 + .../free/nrw/commons/contributions/ContributionsListAdapter.java | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 7884af248..a4abe07c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -227,6 +227,7 @@ public class ContributionsActivity } + //FIXME: Potential cause of wrong image display bug public Media getMediaAtPosition(int i) { if (contributionsList.getAdapter() == null) { // not yet ready to return data diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java index 669ed0099..8ea7d9696 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java @@ -36,6 +36,7 @@ class ContributionsListAdapter extends CursorAdapter { return parent; } + //FIXME: Potential cause of wrong image display bug @Override public void bindView(View view, Context context, Cursor cursor) { final ContributionViewHolder views = (ContributionViewHolder)view.getTag(); From f42bc80f2f25fc264c23164243f9c36381385c17 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 16:36:46 +1200 Subject: [PATCH 33/53] Fixme added --- app/src/main/java/fr/free/nrw/commons/HandlerService.java | 1 + app/src/main/java/fr/free/nrw/commons/upload/UploadService.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/HandlerService.java b/app/src/main/java/fr/free/nrw/commons/HandlerService.java index f2e30ffec..e29d64fdd 100644 --- a/app/src/main/java/fr/free/nrw/commons/HandlerService.java +++ b/app/src/main/java/fr/free/nrw/commons/HandlerService.java @@ -16,6 +16,7 @@ public abstract class HandlerService extends Service { @Override public void handleMessage(Message msg) { + //FIXME: Google Photos bug handle(msg.what, (T)msg.obj); stopSelf(msg.arg1); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 32482095b..2adb71776 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -111,6 +111,7 @@ public class UploadService extends HandlerService { protected void handle(int what, Contribution contribution) { switch(what) { case ACTION_UPLOAD_FILE: + //FIXME: Google Photos bug uploadContribution(contribution); break; default: @@ -173,6 +174,7 @@ public class UploadService extends HandlerService { String notificationTag = contribution.getLocalUri().toString(); try { + //FIXME: Google Photos bug file = this.getContentResolver().openInputStream(contribution.getLocalUri()); } catch(FileNotFoundException e) { Log.d("Exception", "File not found"); From c21c4e4748510858a0ac080c599a671ff3cc92b4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 16:36:52 +1200 Subject: [PATCH 34/53] Fixme added --- .../free/nrw/commons/contributions/ContributionController.java | 2 ++ 1 file changed, 2 insertions(+) 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 58871d2cc..59de82442 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 @@ -61,6 +61,7 @@ public class ContributionController { } public void startGalleryPick() { + //FIXME: Starts gallery (opens Google Photos) Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT); pickImageIntent.setType("image/*"); fragment.startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY); @@ -71,6 +72,7 @@ public class ContributionController { shareIntent.setAction(Intent.ACTION_SEND); switch(requestCode) { case SELECT_FROM_GALLERY: + //FIXME: Handles image picked from gallery (from Google Photos) shareIntent.setType(activity.getContentResolver().getType(data.getData())); shareIntent.putExtra(Intent.EXTRA_STREAM, data.getData()); shareIntent.putExtra(UploadService.EXTRA_SOURCE, fr.free.nrw.commons.contributions.Contribution.SOURCE_GALLERY); From daba60059bbff1e0d5fefd9b6958632f6eb1fd78 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 17:20:10 +1200 Subject: [PATCH 35/53] Add fixme --- .../nrw/commons/contributions/ContributionsListFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 0e8f11814..68fc41675 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -88,6 +88,7 @@ public class ContributionsListFragment extends Fragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { + //FIXME: must get the file data for Google Photos when receive the intent answer, in the onActivityResult method super.onActivityResult(requestCode, resultCode, data); if(resultCode == Activity.RESULT_OK) { controller.handleImagePicked(requestCode, data); From fd53b3662494c88dd6110f169ca01d989460766b Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 17:31:08 +1200 Subject: [PATCH 36/53] Call getData() in onActivityForResult() --- .../nrw/commons/contributions/ContributionController.java | 4 ++-- .../commons/contributions/ContributionsListFragment.java | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) 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 59de82442..881f70aa2 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 @@ -67,13 +67,13 @@ public class ContributionController { fragment.startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY); } - public void handleImagePicked(int requestCode, Intent data) { + public void handleImagePicked(int requestCode, Uri imageData) { Intent shareIntent = new Intent(activity, ShareActivity.class); shareIntent.setAction(Intent.ACTION_SEND); switch(requestCode) { case SELECT_FROM_GALLERY: //FIXME: Handles image picked from gallery (from Google Photos) - shareIntent.setType(activity.getContentResolver().getType(data.getData())); + shareIntent.setType(activity.getContentResolver().getType(data)); shareIntent.putExtra(Intent.EXTRA_STREAM, data.getData()); shareIntent.putExtra(UploadService.EXTRA_SOURCE, fr.free.nrw.commons.contributions.Contribution.SOURCE_GALLERY); break; diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 68fc41675..53d7a17e4 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; @@ -29,6 +30,7 @@ import fr.free.nrw.commons.AboutActivity; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; import fr.free.nrw.commons.SettingsActivity; +import fr.free.nrw.commons.upload.UploadService; public class ContributionsListFragment extends Fragment { @@ -90,9 +92,8 @@ public class ContributionsListFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { //FIXME: must get the file data for Google Photos when receive the intent answer, in the onActivityResult method super.onActivityResult(requestCode, resultCode, data); - if(resultCode == Activity.RESULT_OK) { - controller.handleImagePicked(requestCode, data); - } + Uri imageData = data.getData(); + controller.handleImagePicked(requestCode, imageData); } From e93ac7746deba9ab9b9fb95254a8b2062ae5828e Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 17:33:08 +1200 Subject: [PATCH 37/53] Replace data with imageData --- .../nrw/commons/contributions/ContributionController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 881f70aa2..9cee652d3 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 @@ -73,8 +73,8 @@ public class ContributionController { switch(requestCode) { case SELECT_FROM_GALLERY: //FIXME: Handles image picked from gallery (from Google Photos) - shareIntent.setType(activity.getContentResolver().getType(data)); - shareIntent.putExtra(Intent.EXTRA_STREAM, data.getData()); + shareIntent.setType(activity.getContentResolver().getType(imageData)); + shareIntent.putExtra(Intent.EXTRA_STREAM, imageData); shareIntent.putExtra(UploadService.EXTRA_SOURCE, fr.free.nrw.commons.contributions.Contribution.SOURCE_GALLERY); break; case SELECT_FROM_CAMERA: From 01aa08d3b5821d131f45b25c1c82ed76a1f0340f Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 19 Jul 2016 18:54:49 +1200 Subject: [PATCH 38/53] Versioning --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ad6085664..5b0fee7f0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="37" + android:versionName="1.19" > From 3b234e2a4ce030139683f414b270c280c8b430a4 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Tue, 19 Jul 2016 18:55:43 +1200 Subject: [PATCH 39/53] Update changelog.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 494e2797a..084af71be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Wikimedia Commons for Android +##v1.19 +- Fixed adapter crash +- Attempt at fixing Google Photos crash + ## v1.18 - Fixed various crashes - Fixed camera and gallery for API 23 From c7b82891b43eedd5daf004af042fbdc15d5a9d9a Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jul 2016 17:11:38 +1200 Subject: [PATCH 40/53] Added null check for data --- .../commons/contributions/ContributionsListFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 53d7a17e4..e681d4064 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -92,8 +92,10 @@ public class ContributionsListFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { //FIXME: must get the file data for Google Photos when receive the intent answer, in the onActivityResult method super.onActivityResult(requestCode, resultCode, data); - Uri imageData = data.getData(); - controller.handleImagePicked(requestCode, imageData); + if (data != null) { + Uri imageData = data.getData(); + controller.handleImagePicked(requestCode, imageData); + } } From 624af56cac1dd81291b92c2e7989467ec79a2962 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jul 2016 17:16:35 +1200 Subject: [PATCH 41/53] Added logcat --- .../nrw/commons/contributions/ContributionsListFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index e681d4064..ff64c657e 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -92,9 +92,13 @@ public class ContributionsListFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { //FIXME: must get the file data for Google Photos when receive the intent answer, in the onActivityResult method super.onActivityResult(requestCode, resultCode, data); + if (data != null) { + Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + "Data: " + data.toString()); Uri imageData = data.getData(); controller.handleImagePicked(requestCode, imageData); + } else { + Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + "Data: null"); } } From 01e96607bd5bd2f9b59e8db2ba36514f8b8747e2 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jul 2016 17:18:49 +1200 Subject: [PATCH 42/53] Formatting --- .../nrw/commons/contributions/ContributionsListFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index ff64c657e..af69c14e9 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -94,11 +94,11 @@ public class ContributionsListFragment extends Fragment { super.onActivityResult(requestCode, resultCode, data); if (data != null) { - Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + "Data: " + data.toString()); + Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: " + data.toString()); Uri imageData = data.getData(); controller.handleImagePicked(requestCode, imageData); } else { - Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + "Data: null"); + Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: null"); } } From c62821bb1cc73fc61d4ff4827e44699d5cbe215d Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jul 2016 17:21:20 +1200 Subject: [PATCH 43/53] Versioning --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b0fee7f0..9fe916c5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="38" + android:versionName="1.20" > From 303be27d029b63cfff8896c5eeb2e8a00e8d4626 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 20 Jul 2016 17:23:44 +1200 Subject: [PATCH 44/53] Update changelog.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 084af71be..585ee1a69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Wikimedia Commons for Android +##v1.20 +- Hotfix for data=null crash + ##v1.19 - Fixed adapter crash - Attempt at fixing Google Photos crash From 6c9b278801b1f1826158709333e5821237c6eade Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 20 Jul 2016 17:49:55 +1200 Subject: [PATCH 45/53] Add log.e --- .../nrw/commons/contributions/ContributionsListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index af69c14e9..df2257896 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -98,7 +98,7 @@ public class ContributionsListFragment extends Fragment { Uri imageData = data.getData(); controller.handleImagePicked(requestCode, imageData); } else { - Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: null"); + Log.e("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: null"); } } From 026ef6643707a7025cbbd22c3ccf2374d1953833 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jul 2016 17:40:47 +1200 Subject: [PATCH 46/53] Whitespace --- app/src/main/AndroidManifest.xml | 4 ---- .../fr/free/nrw/commons/upload/MultipleShareActivity.java | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fe916c5b..ab541eb4f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,7 @@ > - - @@ -58,9 +56,7 @@ > - - diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 0aa135428..6baad2802 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -117,6 +117,8 @@ public class MultipleShareActivity .commit(); } + + public void onCategoriesSave(ArrayList categories) { if(categories.size() > 0) { ContentProviderClient client = getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY); From 207521ef7391d456ce8ec24c796cd3abf0ececa5 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jul 2016 17:45:09 +1200 Subject: [PATCH 47/53] Add runtime permission checking to MultipleShareActivity --- .../commons/upload/MultipleShareActivity.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 6baad2802..2b69bee85 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -2,12 +2,16 @@ package fr.free.nrw.commons.upload; import java.util.*; +import android.Manifest; import android.app.*; import android.content.*; +import android.content.pm.PackageManager; import android.database.DataSetObserver; import android.net.*; import android.os.*; +import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.view.*; import android.view.inputmethod.InputMethodManager; @@ -77,6 +81,29 @@ public class MultipleShareActivity } public void OnMultipleUploadInitiated() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + //Check for Storage permission that is required for upload. Do not allow user to proceed without permission, otherwise will crash + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + } else { + multipleUploadBegins(); + } + } else { + multipleUploadBegins(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + if (requestCode == 1) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + multipleUploadBegins(); + } + } + } + + private void multipleUploadBegins() { final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); dialog.setIndeterminate(false); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); @@ -117,8 +144,6 @@ public class MultipleShareActivity .commit(); } - - public void onCategoriesSave(ArrayList categories) { if(categories.size() > 0) { ContentProviderClient client = getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY); From 599f17559f90961f94623a22523405dda39bdfac Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jul 2016 17:46:41 +1200 Subject: [PATCH 48/53] Add log --- .../fr/free/nrw/commons/upload/MultipleShareActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 2b69bee85..cb1abe34e 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -13,6 +13,7 @@ import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.*; import android.view.inputmethod.InputMethodManager; import android.widget.*; @@ -104,6 +105,9 @@ public class MultipleShareActivity } private void multipleUploadBegins() { + + Log.d("MultipleShareActivity", "Multiple upload begins"); + final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); dialog.setIndeterminate(false); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); From 66ef5fbca746630e13c981bc4ddedc2f950e86fd Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jul 2016 17:59:44 +1200 Subject: [PATCH 49/53] Fix IllegalStateException --- .../fr/free/nrw/commons/upload/MultipleShareActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index cb1abe34e..5fa881a60 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -107,7 +107,7 @@ public class MultipleShareActivity private void multipleUploadBegins() { Log.d("MultipleShareActivity", "Multiple upload begins"); - + final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); dialog.setIndeterminate(false); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); @@ -145,7 +145,8 @@ public class MultipleShareActivity } getSupportFragmentManager().beginTransaction() .add(R.id.uploadsFragmentContainer, categorizationFragment, "categorization") - .commit(); + .commitAllowingStateLoss(); + //See http://stackoverflow.com/questions/7469082/getting-exception-illegalstateexception-can-not-perform-this-action-after-onsa } public void onCategoriesSave(ArrayList categories) { From 3e1d49bf4168f9fd1120f85bb110c7c6745a58e8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 21 Jul 2016 18:04:23 +1200 Subject: [PATCH 50/53] Versioning --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ab541eb4f..9240c241c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="39" + android:versionName="1.21" > From 03de8e387f35d0d34eaad782974896871cde1824 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Thu, 21 Jul 2016 18:05:54 +1200 Subject: [PATCH 51/53] Update changelog.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 585ee1a69..37bc223da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Wikimedia Commons for Android +##v1.21 +-Fixed Google Photos multiple share crash + ##v1.20 - Hotfix for data=null crash From c9c92100763b529aa8fb02a45bde982a5f3e3dbd Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Thu, 21 Jul 2016 18:06:17 +1200 Subject: [PATCH 52/53] Minor correction --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37bc223da..0c2f3c7e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Wikimedia Commons for Android ##v1.21 --Fixed Google Photos multiple share crash +- Fixed Google Photos multiple share crash ##v1.20 - Hotfix for data=null crash From 9f703bb3a145fbf0443369530e8aa6a7f5692d19 Mon Sep 17 00:00:00 2001 From: Yusuke Matsubara Date: Thu, 21 Jul 2016 22:06:57 +0900 Subject: [PATCH 53/53] Add build status image Issue #201 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 774918b7f..e374bc9a7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Wikimedia Commons Android app # +# Upload to Commons [![Build status](https://api.travis-ci.org/nicolas-raoul/apps-android-commons.svg)](https://travis-ci.org/nicolas-raoul/apps-android-commons) Upload pictures from your Android phone/tablet to Wikimedia Commons.