mirror of
https://github.com/gsantner/dandelion
synced 2024-11-22 12:22:08 +01:00
Added permission check to FileChooser and added missing file choosing method for Android 4.2 WIP WARNING
This commit is contained in:
parent
305a40c8c5
commit
7dbfb10229
3 changed files with 68 additions and 8 deletions
|
@ -34,6 +34,7 @@ import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
@ -351,10 +352,59 @@ public class MainActivity extends AppCompatActivity
|
||||||
progressBar.setVisibility(progress == 100 ? View.GONE : View.VISIBLE);
|
progressBar.setVisibility(progress == 100 ? View.GONE : View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//For Android 4.1/4.2 only. DONT REMOVE
|
||||||
|
protected void openFileChooser(ValueCallback<Uri[]> uploadMsg, String acceptType, String capture)
|
||||||
|
{
|
||||||
|
Log.d(App.TAG, "openFileChooser(ValCallback<Uri[]>, String, String");
|
||||||
|
mFilePathCallback = uploadMsg;
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setType("image/*");
|
||||||
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
|
intent.putExtra("return-data", true);
|
||||||
|
startActivityForResult(Intent.createChooser(intent, "Select Picture"),INPUT_FILE_REQUEST_CODE);
|
||||||
|
}
|
||||||
|
//For Android 4.1/4.2 only. DONT REMOVE
|
||||||
|
protected void openFileChooser(ValueCallback<Uri[]> uploadMsg)
|
||||||
|
{
|
||||||
|
Log.d(App.TAG, "openFileChooser(ValCallback<Uri[]>");
|
||||||
|
onShowFileChooser(webView, uploadMsg, null);
|
||||||
|
/*
|
||||||
|
mUploadMessage = uploadMsg;
|
||||||
|
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
|
i.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
|
i.setType("image/*");
|
||||||
|
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
|
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
|
||||||
if (mFilePathCallback != null) mFilePathCallback.onReceiveValue(null);
|
if(Build.VERSION.SDK_INT >= 23) {
|
||||||
|
int hasWRITE_EXTERNAL_STORAGE = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
|
if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
|
new AlertDialog.Builder(MainActivity.this)
|
||||||
|
.setMessage(R.string.permissions_image)
|
||||||
|
.setNegativeButton(android.R.string.no, null)
|
||||||
|
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 23)
|
||||||
|
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
|
REQUEST_CODE_ASK_PERMISSIONS);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
|
REQUEST_CODE_ASK_PERMISSIONS);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(App.TAG, "onOpenFileChooser");
|
||||||
|
if (mFilePathCallback != null) mFilePathCallback.onReceiveValue(null);
|
||||||
mFilePathCallback = filePathCallback;
|
mFilePathCallback = filePathCallback;
|
||||||
|
|
||||||
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||||
|
@ -365,6 +415,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
photoFile = Helpers.createImageFile();
|
photoFile = Helpers.createImageFile();
|
||||||
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
|
Log.e(App.TAG, "ERROR creating temp file: "+ ex.toString());
|
||||||
// Error occurred while creating the File
|
// Error occurred while creating the File
|
||||||
Snackbar.make(contentLayout, R.string.unable_to_load_image, Snackbar.LENGTH_LONG).show();
|
Snackbar.make(contentLayout, R.string.unable_to_load_image, Snackbar.LENGTH_LONG).show();
|
||||||
return false;
|
return false;
|
||||||
|
@ -396,6 +447,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
|
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
|
||||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
|
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
|
||||||
|
|
||||||
|
Log.d(App.TAG,"startActivityForResult");
|
||||||
startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
|
startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -528,27 +580,33 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
Log.d(App.TAG,"onActivityResult:");
|
||||||
if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) {
|
if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) {
|
||||||
|
Log.d(App.TAG,"reqCode != INPUT_FILE_REQUEST_CODE or mFilePathCallback == null");
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Uri[] results = null;
|
Uri[] results = null;
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
Log.d(App.TAG, "Activity.RESULT_OK");
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
|
Log.d(App.TAG, "data == null");
|
||||||
if (mCameraPhotoPath != null) {
|
if (mCameraPhotoPath != null) {
|
||||||
|
Log.d(App.TAG, "mCameraPhotoPath != null");
|
||||||
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Log.d(App.TAG, "data != null");
|
||||||
String dataString = data.getDataString();
|
String dataString = data.getDataString();
|
||||||
if (dataString != null) {
|
if (dataString != null) {
|
||||||
|
Log.d(App.TAG, "dataString != null");
|
||||||
results = new Uri[]{Uri.parse(dataString)};
|
results = new Uri[]{Uri.parse(dataString)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
mFilePathCallback.onReceiveValue(results);
|
mFilePathCallback.onReceiveValue(results);
|
||||||
mFilePathCallback = null;
|
mFilePathCallback = null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.github.dfa.diaspora_android.App;
|
||||||
import com.github.dfa.diaspora_android.R;
|
import com.github.dfa.diaspora_android.R;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
@ -62,12 +63,13 @@ public class Helpers {
|
||||||
// Create an image file name
|
// Create an image file name
|
||||||
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
||||||
String imageFileName = "JPEG_" + timeStamp + "_";
|
String imageFileName = "JPEG_" + timeStamp + "_";
|
||||||
|
Log.d(App.TAG, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
||||||
File storageDir = Environment.getExternalStoragePublicDirectory(
|
File storageDir = Environment.getExternalStoragePublicDirectory(
|
||||||
Environment.DIRECTORY_PICTURES);
|
Environment.DIRECTORY_PICTURES);
|
||||||
return File.createTempFile(
|
return new File (
|
||||||
imageFileName, /* prefix */
|
imageFileName + /* prefix */
|
||||||
".jpg", /* suffix */
|
".jpg", /* suffix */
|
||||||
storageDir /* directory */
|
storageDir.getAbsolutePath() /* directory */
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
completely close the app or restart the device. If you don\'t permit the storage access but want to use the
|
completely close the app or restart the device. If you don\'t permit the storage access but want to use the
|
||||||
screenshot function at a later time, you can grant the permission later. Please open then: systemsettings - apps -
|
screenshot function at a later time, you can grant the permission later. Please open then: systemsettings - apps -
|
||||||
Diaspora. In the permissions section you can grant the \"write storage permission\".</string>
|
Diaspora. In the permissions section you can grant the \"write storage permission\".</string>
|
||||||
<string name="permissions_image">You must grant \"Access Storage Permission\" to save images. After that you should
|
<string name="permissions_image">You must grant \"Access Storage Permission\" to save/upload images. After that you should
|
||||||
completely close the app or restart the device. If you don\'t permit the storage access but want to save images
|
completely close the app or restart the device. If you don\'t permit the storage access but want to save images
|
||||||
at a later time, you can grant the permission later. Please open then: systemsettings - apps -
|
at a later time, you can grant the permission later. Please open then: systemsettings - apps -
|
||||||
Diaspora. In the permissions section you can grant the \"write storage permission\".</string>
|
Diaspora. In the permissions section you can grant the \"write storage permission\".</string>
|
||||||
|
|
Loading…
Reference in a new issue