mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
Fix storage permission
Part of the way there to fixing #117, however location and contacts still need to be fixed.
This commit is contained in:
parent
5c353944ec
commit
7955cfe71b
4 changed files with 61 additions and 26 deletions
|
|
@ -1,8 +1,7 @@
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(dir: 'libs', include: '*.jar')
|
compile fileTree(include: '*.jar', dir: 'libs')
|
||||||
compile 'com.google.code.gson:gson:1.4'
|
|
||||||
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
|
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
|
||||||
compile 'in.yuvi:http.fluent:1.3'
|
compile 'in.yuvi:http.fluent:1.3'
|
||||||
compile 'com.android.volley:volley:1.0.0'
|
compile 'com.android.volley:volley:1.0.0'
|
||||||
|
|
@ -10,14 +9,17 @@ dependencies {
|
||||||
compile 'ch.acra:acra:4.5.0'
|
compile 'ch.acra:acra:4.5.0'
|
||||||
compile 'org.mediawiki:api:1.3'
|
compile 'org.mediawiki:api:1.3'
|
||||||
compile 'de.keyboardsurfer.android.widget:crouton:1.8.5@aar'
|
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:support-v4:23.4.0'
|
||||||
compile 'com.android.support:appcompat-v7: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 {
|
android {
|
||||||
compileSdkVersion 23
|
compileSdkVersion 23
|
||||||
buildToolsVersion "23.0.2"
|
buildToolsVersion "23.0.3"
|
||||||
|
|
||||||
useLibrary 'org.apache.http.legacy'
|
useLibrary 'org.apache.http.legacy'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,19 @@
|
||||||
package fr.free.nrw.commons.upload;
|
package fr.free.nrw.commons.upload;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.app.NavUtils;
|
import android.support.v4.app.NavUtils;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
|
@ -19,9 +25,9 @@ import java.util.List;
|
||||||
import fr.free.nrw.commons.CommonsApplication;
|
import fr.free.nrw.commons.CommonsApplication;
|
||||||
import fr.free.nrw.commons.EventLog;
|
import fr.free.nrw.commons.EventLog;
|
||||||
import fr.free.nrw.commons.R;
|
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.category.CategorizationFragment;
|
||||||
import fr.free.nrw.commons.contributions.*;
|
|
||||||
import fr.free.nrw.commons.modifications.CategoryModifier;
|
import fr.free.nrw.commons.modifications.CategoryModifier;
|
||||||
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
|
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
|
||||||
import fr.free.nrw.commons.modifications.ModifierSequence;
|
import fr.free.nrw.commons.modifications.ModifierSequence;
|
||||||
|
|
@ -33,12 +39,12 @@ import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
|
||||||
*/
|
*/
|
||||||
public class ShareActivity
|
public class ShareActivity
|
||||||
extends AuthenticatedActivity
|
extends AuthenticatedActivity
|
||||||
implements SingleUploadFragment.OnUploadActionInitiated,
|
implements fr.free.nrw.commons.upload.SingleUploadFragment.OnUploadActionInitiated,
|
||||||
CategorizationFragment.OnCategoriesSaveHandler {
|
CategorizationFragment.OnCategoriesSaveHandler {
|
||||||
|
|
||||||
private static final String TAG = ShareActivity.class.getName();
|
private static final String TAG = ShareActivity.class.getName();
|
||||||
|
|
||||||
private SingleUploadFragment shareView;
|
private fr.free.nrw.commons.upload.SingleUploadFragment shareView;
|
||||||
private CategorizationFragment categorizationFragment;
|
private CategorizationFragment categorizationFragment;
|
||||||
|
|
||||||
private CommonsApplication app;
|
private CommonsApplication app;
|
||||||
|
|
@ -48,14 +54,14 @@ public class ShareActivity
|
||||||
private String mediaUriString;
|
private String mediaUriString;
|
||||||
|
|
||||||
private Uri mediaUri;
|
private Uri mediaUri;
|
||||||
private Contribution contribution;
|
private fr.free.nrw.commons.contributions.Contribution contribution;
|
||||||
private ImageView backgroundImageView;
|
private ImageView backgroundImageView;
|
||||||
private UploadController uploadController;
|
private fr.free.nrw.commons.upload.UploadController uploadController;
|
||||||
|
|
||||||
private CommonsApplication cacheObj;
|
private CommonsApplication cacheObj;
|
||||||
private boolean cacheFound;
|
private boolean cacheFound;
|
||||||
|
|
||||||
private GPSExtractor imageObj;
|
private fr.free.nrw.commons.upload.GPSExtractor imageObj;
|
||||||
|
|
||||||
public ShareActivity() {
|
public ShareActivity() {
|
||||||
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
|
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
|
||||||
|
|
@ -71,8 +77,8 @@ public class ShareActivity
|
||||||
Log.d(TAG, "Cache the categories found");
|
Log.d(TAG, "Cache the categories found");
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadController.startUpload(title, mediaUri, description, mimeType, source, new UploadController.ContributionUploadProgress() {
|
uploadController.startUpload(title, mediaUri, description, mimeType, source, new fr.free.nrw.commons.upload.UploadController.ContributionUploadProgress() {
|
||||||
public void onUploadStarted(Contribution contribution) {
|
public void onUploadStarted(fr.free.nrw.commons.contributions.Contribution contribution) {
|
||||||
ShareActivity.this.contribution = contribution;
|
ShareActivity.this.contribution = contribution;
|
||||||
showPostUpload();
|
showPostUpload();
|
||||||
}
|
}
|
||||||
|
|
@ -134,7 +140,7 @@ public class ShareActivity
|
||||||
} else {
|
} else {
|
||||||
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT)
|
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT)
|
||||||
.param("username", app.getCurrentAccount().name)
|
.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("multiple", true)
|
||||||
.param("result", "cancelled")
|
.param("result", "cancelled")
|
||||||
.log();
|
.log();
|
||||||
|
|
@ -147,10 +153,10 @@ public class ShareActivity
|
||||||
app.getApi().setAuthCookie(authCookie);
|
app.getApi().setAuthCookie(authCookie);
|
||||||
|
|
||||||
|
|
||||||
shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
|
shareView = (fr.free.nrw.commons.upload.SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
|
||||||
categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization");
|
categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization");
|
||||||
if(shareView == null && categorizationFragment == null) {
|
if(shareView == null && categorizationFragment == null) {
|
||||||
shareView = new SingleUploadFragment();
|
shareView = new fr.free.nrw.commons.upload.SingleUploadFragment();
|
||||||
this.getSupportFragmentManager()
|
this.getSupportFragmentManager()
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.add(R.id.single_upload_fragment_container, shareView, "shareView")
|
.add(R.id.single_upload_fragment_container, shareView, "shareView")
|
||||||
|
|
@ -170,7 +176,7 @@ public class ShareActivity
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
uploadController = new UploadController(this);
|
uploadController = new fr.free.nrw.commons.upload.UploadController(this);
|
||||||
setContentView(R.layout.activity_share);
|
setContentView(R.layout.activity_share);
|
||||||
|
|
||||||
app = (CommonsApplication)this.getApplicationContext();
|
app = (CommonsApplication)this.getApplicationContext();
|
||||||
|
|
@ -180,10 +186,10 @@ public class ShareActivity
|
||||||
|
|
||||||
if(intent.getAction().equals(Intent.ACTION_SEND)) {
|
if(intent.getAction().equals(Intent.ACTION_SEND)) {
|
||||||
mediaUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
|
mediaUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
|
||||||
if(intent.hasExtra(UploadService.EXTRA_SOURCE)) {
|
if(intent.hasExtra(fr.free.nrw.commons.upload.UploadService.EXTRA_SOURCE)) {
|
||||||
source = intent.getStringExtra(UploadService.EXTRA_SOURCE);
|
source = intent.getStringExtra(fr.free.nrw.commons.upload.UploadService.EXTRA_SOURCE);
|
||||||
} else {
|
} else {
|
||||||
source = Contribution.SOURCE_EXTERNAL;
|
source = fr.free.nrw.commons.contributions.Contribution.SOURCE_EXTERNAL;
|
||||||
}
|
}
|
||||||
mimeType = intent.getType();
|
mimeType = intent.getType();
|
||||||
}
|
}
|
||||||
|
|
@ -210,12 +216,36 @@ public class ShareActivity
|
||||||
Log.d(TAG, "Uri: " + mediaUriString);
|
Log.d(TAG, "Uri: " + mediaUriString);
|
||||||
Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory());
|
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
|
//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, "Filepath: " + filePath);
|
||||||
|
|
||||||
Log.d(TAG, "Calling GPSExtractor");
|
Log.d(TAG, "Calling GPSExtractor");
|
||||||
imageObj = new GPSExtractor(filePath, this);
|
imageObj = new fr.free.nrw.commons.upload.GPSExtractor(filePath, this);
|
||||||
imageObj.registerLocationManager();
|
imageObj.registerLocationManager();
|
||||||
|
|
||||||
if (filePath != null && !filePath.equals("")) {
|
if (filePath != null && !filePath.equals("")) {
|
||||||
|
|
@ -232,7 +262,7 @@ public class ShareActivity
|
||||||
app.cacheData.setQtPoint(decLongitude, decLatitude);
|
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();
|
List displayCatList = app.cacheData.findCategory();
|
||||||
boolean catListEmpty = displayCatList.isEmpty();
|
boolean catListEmpty = displayCatList.isEmpty();
|
||||||
|
|
@ -246,7 +276,7 @@ public class ShareActivity
|
||||||
} else {
|
} else {
|
||||||
cacheFound = true;
|
cacheFound = true;
|
||||||
Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString());
|
Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString());
|
||||||
MwVolleyApi.setGpsCat(displayCatList);
|
fr.free.nrw.commons.upload.MwVolleyApi.setGpsCat(displayCatList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,4 +148,7 @@
|
||||||
<string name="detail_license_empty">Unknown license</string>
|
<string name="detail_license_empty">Unknown license</string>
|
||||||
<string name="provider_campaigns">Campaigns</string>
|
<string name="provider_campaigns">Campaigns</string>
|
||||||
<string name="menu_refresh">Refresh</string>
|
<string name="menu_refresh">Refresh</string>
|
||||||
|
|
||||||
|
<string name="storage_permission_rationale">Storage permission is needed to access photos</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ buildscript {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.1.0'
|
classpath 'com.android.tools.build:gradle:2.1.2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue