diff --git a/commons/app/build.gradle b/commons/app/build.gradle
index 8bf7f2583..5a6428a72 100644
--- a/commons/app/build.gradle
+++ b/commons/app/build.gradle
@@ -1,8 +1,7 @@
apply plugin: 'com.android.application'
dependencies {
- compile fileTree(dir: 'libs', include: '*.jar')
- compile 'com.google.code.gson:gson:1.4'
+ compile fileTree(include: '*.jar', dir: 'libs')
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
compile 'in.yuvi:http.fluent:1.3'
compile 'com.android.volley:volley:1.0.0'
@@ -10,14 +9,17 @@ dependencies {
compile 'ch.acra:acra:4.5.0'
compile 'org.mediawiki:api:1.3'
compile 'de.keyboardsurfer.android.widget:crouton:1.8.5@aar'
- compile group: 'commons-codec', name: 'commons-codec', version: '1.10'
+ compile 'commons-codec:commons-codec:1.10'
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'
+ //noinspectio GradleDependency - old version has required feature
+ compile 'com.google.code.gson:gson:1.4'
}
android {
compileSdkVersion 23
- buildToolsVersion "23.0.2"
+ buildToolsVersion "23.0.3"
useLibrary 'org.apache.http.legacy'
diff --git a/commons/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
index d01f4d194..c92c90f6c 100644
--- a/commons/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
+++ b/commons/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
@@ -1,13 +1,19 @@
package fr.free.nrw.commons.upload;
+import android.Manifest;
import android.content.ContentResolver;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
+import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
+import android.support.design.widget.Snackbar;
+import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.MenuItem;
+import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
@@ -19,9 +25,9 @@ import java.util.List;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.EventLog;
import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.auth.*;
+import fr.free.nrw.commons.auth.AuthenticatedActivity;
+import fr.free.nrw.commons.auth.WikiAccountAuthenticator;
import fr.free.nrw.commons.category.CategorizationFragment;
-import fr.free.nrw.commons.contributions.*;
import fr.free.nrw.commons.modifications.CategoryModifier;
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
import fr.free.nrw.commons.modifications.ModifierSequence;
@@ -33,12 +39,12 @@ import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
*/
public class ShareActivity
extends AuthenticatedActivity
- implements SingleUploadFragment.OnUploadActionInitiated,
+ implements fr.free.nrw.commons.upload.SingleUploadFragment.OnUploadActionInitiated,
CategorizationFragment.OnCategoriesSaveHandler {
private static final String TAG = ShareActivity.class.getName();
- private SingleUploadFragment shareView;
+ private fr.free.nrw.commons.upload.SingleUploadFragment shareView;
private CategorizationFragment categorizationFragment;
private CommonsApplication app;
@@ -48,14 +54,14 @@ public class ShareActivity
private String mediaUriString;
private Uri mediaUri;
- private Contribution contribution;
+ private fr.free.nrw.commons.contributions.Contribution contribution;
private ImageView backgroundImageView;
- private UploadController uploadController;
+ private fr.free.nrw.commons.upload.UploadController uploadController;
private CommonsApplication cacheObj;
private boolean cacheFound;
- private GPSExtractor imageObj;
+ private fr.free.nrw.commons.upload.GPSExtractor imageObj;
public ShareActivity() {
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
@@ -71,8 +77,8 @@ 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) {
+ uploadController.startUpload(title, mediaUri, description, mimeType, source, new fr.free.nrw.commons.upload.UploadController.ContributionUploadProgress() {
+ public void onUploadStarted(fr.free.nrw.commons.contributions.Contribution contribution) {
ShareActivity.this.contribution = contribution;
showPostUpload();
}
@@ -134,7 +140,7 @@ public class ShareActivity
} else {
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT)
.param("username", app.getCurrentAccount().name)
- .param("source", getIntent().getStringExtra(UploadService.EXTRA_SOURCE))
+ .param("source", getIntent().getStringExtra(fr.free.nrw.commons.upload.UploadService.EXTRA_SOURCE))
.param("multiple", true)
.param("result", "cancelled")
.log();
@@ -147,10 +153,10 @@ public class ShareActivity
app.getApi().setAuthCookie(authCookie);
- shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
+ shareView = (fr.free.nrw.commons.upload.SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization");
if(shareView == null && categorizationFragment == null) {
- shareView = new SingleUploadFragment();
+ shareView = new fr.free.nrw.commons.upload.SingleUploadFragment();
this.getSupportFragmentManager()
.beginTransaction()
.add(R.id.single_upload_fragment_container, shareView, "shareView")
@@ -170,9 +176,9 @@ public class ShareActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- uploadController = new UploadController(this);
+ uploadController = new fr.free.nrw.commons.upload.UploadController(this);
setContentView(R.layout.activity_share);
-
+
app = (CommonsApplication)this.getApplicationContext();
backgroundImageView = (ImageView)findViewById(R.id.backgroundImage);
@@ -180,10 +186,10 @@ public class ShareActivity
if(intent.getAction().equals(Intent.ACTION_SEND)) {
mediaUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
- if(intent.hasExtra(UploadService.EXTRA_SOURCE)) {
- source = intent.getStringExtra(UploadService.EXTRA_SOURCE);
+ if(intent.hasExtra(fr.free.nrw.commons.upload.UploadService.EXTRA_SOURCE)) {
+ source = intent.getStringExtra(fr.free.nrw.commons.upload.UploadService.EXTRA_SOURCE);
} else {
- source = Contribution.SOURCE_EXTERNAL;
+ source = fr.free.nrw.commons.contributions.Contribution.SOURCE_EXTERNAL;
}
mimeType = intent.getType();
}
@@ -210,12 +216,36 @@ public class ShareActivity
Log.d(TAG, "Uri: " + mediaUriString);
Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory());
+
+
+ // Check permissions
+ if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
+ Manifest.permission.READ_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED) {
+
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this,
+ Manifest.permission.READ_EXTERNAL_STORAGE)) {
+
+ Log.i(TAG,
+ "Displaying camera permission rationale to provide additional context.");
+ Snackbar.make(this.findViewById(android.R.id.content), R.string.storage_permission_rationale, Snackbar.LENGTH_INDEFINITE).setAction(R.string.ok, new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ ActivityCompat.requestPermissions(ShareActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
+ }
+ }).show();
+
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
+ }
+ }
+
//convert image Uri to file path
- String filePath = FileUtils.getPath(this, mediaUri);
+ String filePath = fr.free.nrw.commons.upload.FileUtils.getPath(this, mediaUri);
Log.d(TAG, "Filepath: " + filePath);
Log.d(TAG, "Calling GPSExtractor");
- imageObj = new GPSExtractor(filePath, this);
+ imageObj = new fr.free.nrw.commons.upload.GPSExtractor(filePath, this);
imageObj.registerLocationManager();
if (filePath != null && !filePath.equals("")) {
@@ -232,7 +262,7 @@ public class ShareActivity
app.cacheData.setQtPoint(decLongitude, decLatitude);
}
- MwVolleyApi apiCall = new MwVolleyApi(this);
+ fr.free.nrw.commons.upload.MwVolleyApi apiCall = new fr.free.nrw.commons.upload.MwVolleyApi(this);
List displayCatList = app.cacheData.findCategory();
boolean catListEmpty = displayCatList.isEmpty();
@@ -246,7 +276,7 @@ public class ShareActivity
} else {
cacheFound = true;
Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString());
- MwVolleyApi.setGpsCat(displayCatList);
+ fr.free.nrw.commons.upload.MwVolleyApi.setGpsCat(displayCatList);
}
}
}
diff --git a/commons/app/src/main/res/values/strings.xml b/commons/app/src/main/res/values/strings.xml
index 5b53614a7..f0bd2f760 100644
--- a/commons/app/src/main/res/values/strings.xml
+++ b/commons/app/src/main/res/values/strings.xml
@@ -148,4 +148,7 @@
Unknown license
Campaigns
Refresh
+
+ Storage permission is needed to access photos
+ OK
diff --git a/commons/build.gradle b/commons/build.gradle
index 0a11ca96a..691c8e8d0 100644
--- a/commons/build.gradle
+++ b/commons/build.gradle
@@ -5,7 +5,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
+ classpath 'com.android.tools.build:gradle:2.1.2'
}
}