Merge pull request #200 from misaochan/google-photos-fix-2

Fix multiple shares from Google Photos
This commit is contained in:
Nicolas Raoul 2016-07-21 15:17:33 +09:00 committed by GitHub
commit 0339ec143f
4 changed files with 39 additions and 8 deletions

View file

@ -1,5 +1,8 @@
# Wikimedia Commons for Android # Wikimedia Commons for Android
##v1.21
- Fixed Google Photos multiple share crash
##v1.20 ##v1.20
- Hotfix for data=null crash - Hotfix for data=null crash

View file

@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fr.free.nrw.commons" package="fr.free.nrw.commons"
android:versionCode="38" android:versionCode="39"
android:versionName="1.20" > android:versionName="1.21" >
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
@ -44,9 +44,7 @@
> >
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" /> <data android:mimeType="image/*" />
<data android:mimeType="audio/ogg" /> <data android:mimeType="audio/ogg" />
</intent-filter> </intent-filter>
@ -58,9 +56,7 @@
> >
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" /> <action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" /> <data android:mimeType="image/*" />
<data android:mimeType="audio/ogg" /> <data android:mimeType="audio/ogg" />
</intent-filter> </intent-filter>

View file

@ -98,7 +98,7 @@ public class ContributionsListFragment extends Fragment {
Uri imageData = data.getData(); Uri imageData = data.getData();
controller.handleImagePicked(requestCode, imageData); controller.handleImagePicked(requestCode, imageData);
} else { } else {
Log.d("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: null"); Log.e("Contributions", "OnActivityResult() parameters: Result code: " + resultCode + " Data: null");
} }
} }

View file

@ -2,13 +2,18 @@ package fr.free.nrw.commons.upload;
import java.util.*; import java.util.*;
import android.Manifest;
import android.app.*; import android.app.*;
import android.content.*; import android.content.*;
import android.content.pm.PackageManager;
import android.database.DataSetObserver; import android.database.DataSetObserver;
import android.net.*; import android.net.*;
import android.os.*; import android.os.*;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.*; import android.view.*;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.*; import android.widget.*;
@ -77,6 +82,32 @@ public class MultipleShareActivity
} }
public void OnMultipleUploadInitiated() { 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() {
Log.d("MultipleShareActivity", "Multiple upload begins");
final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this);
dialog.setIndeterminate(false); dialog.setIndeterminate(false);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
@ -114,7 +145,8 @@ public class MultipleShareActivity
} }
getSupportFragmentManager().beginTransaction() getSupportFragmentManager().beginTransaction()
.add(R.id.uploadsFragmentContainer, categorizationFragment, "categorization") .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<String> categories) { public void onCategoriesSave(ArrayList<String> categories) {