mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Have 'Pick from Camera' work on Non-Samsung phones
Implement hack laid out in http://stackoverflow.com/a/5054673/17865 Thanks to Reedy & ragesoss for testing!
This commit is contained in:
parent
ad0377a20a
commit
a57d0316f8
1 changed files with 45 additions and 3 deletions
|
|
@ -2,6 +2,7 @@ package org.wikimedia.commons.contributions;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Environment;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.v4.app.LoaderManager;
|
import android.support.v4.app.LoaderManager;
|
||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
|
|
@ -21,6 +22,7 @@ import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||||
|
import com.actionbarsherlock.view.ActionMode;
|
||||||
import com.actionbarsherlock.view.Menu;
|
import com.actionbarsherlock.view.Menu;
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
|
|
@ -37,6 +39,8 @@ import org.wikimedia.commons.UploadService;
|
||||||
import org.wikimedia.commons.auth.AuthenticatedActivity;
|
import org.wikimedia.commons.auth.AuthenticatedActivity;
|
||||||
import org.wikimedia.commons.auth.WikiAccountAuthenticator;
|
import org.wikimedia.commons.auth.WikiAccountAuthenticator;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
@ -173,6 +177,18 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
||||||
requestAuthToken();
|
requestAuthToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
outState.putParcelable("lastGeneratedCaptureURI", lastGeneratedCaptureURI);
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
|
lastGeneratedCaptureURI = (Uri) savedInstanceState.getParcelable("lastGeneratedCaptureURI");
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
@ -191,15 +207,39 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
||||||
if(resultCode == RESULT_OK) {
|
if(resultCode == RESULT_OK) {
|
||||||
Intent shareIntent = new Intent(this, ShareActivity.class);
|
Intent shareIntent = new Intent(this, ShareActivity.class);
|
||||||
shareIntent.setAction(Intent.ACTION_SEND);
|
shareIntent.setAction(Intent.ACTION_SEND);
|
||||||
Log.d("Commons", "Type is " + data.getType() + " Uri is " + data.getData());
|
Log.d("Commons", "Uri is " + lastGeneratedCaptureURI);
|
||||||
shareIntent.setType("image/*"); //FIXME: Find out appropriate mime type
|
shareIntent.setType("image/jpeg"); //FIXME: Find out appropriate mime type
|
||||||
shareIntent.putExtra(Intent.EXTRA_STREAM, data.getData());
|
shareIntent.putExtra(Intent.EXTRA_STREAM, lastGeneratedCaptureURI);
|
||||||
startActivity(shareIntent);
|
startActivity(shareIntent);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See http://stackoverflow.com/a/5054673/17865 for why this is done
|
||||||
|
private Uri lastGeneratedCaptureURI;
|
||||||
|
|
||||||
|
private void reGenerateImageCaptureURI() {
|
||||||
|
String storageState = Environment.getExternalStorageState();
|
||||||
|
if(storageState.equals(Environment.MEDIA_MOUNTED)) {
|
||||||
|
|
||||||
|
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Commons/images/" + new Date().getTime() + ".jpg";
|
||||||
|
File _photoFile = new File(path);
|
||||||
|
try {
|
||||||
|
if(_photoFile.exists() == false) {
|
||||||
|
_photoFile.getParentFile().mkdirs();
|
||||||
|
_photoFile.createNewFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e("Commons", "Could not create file: " + path, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastGeneratedCaptureURI = Uri.fromFile(_photoFile);
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("No external storage found!");
|
||||||
|
}
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch(item.getItemId()) {
|
switch(item.getItemId()) {
|
||||||
|
|
@ -210,6 +250,8 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
||||||
return true;
|
return true;
|
||||||
case R.id.menu_from_camera:
|
case R.id.menu_from_camera:
|
||||||
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||||
|
reGenerateImageCaptureURI();
|
||||||
|
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, lastGeneratedCaptureURI);
|
||||||
startActivityForResult(takePictureIntent, SELECT_FROM_CAMERA);
|
startActivityForResult(takePictureIntent, SELECT_FROM_CAMERA);
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue