Fix attachment issues on pre-lollipop devices

pull/795/head
Alex Baker 6 years ago
parent faff1dcc08
commit d74f6d457a

@ -228,6 +228,16 @@
android:authorities="${applicationId}.provider" android:authorities="${applicationId}.provider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true" android:grantUriPermissions="true"
android:name="org.tasks.files.NNFileProvider">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/nnf_provider_paths"/>
</provider>
<provider
android:authorities="${applicationId}.file_provider"
android:exported="false"
android:grantUriPermissions="true"
android:name="androidx.core.content.FileProvider"> android:name="androidx.core.content.FileProvider">
<meta-data <meta-data
android:name="android.support.FILE_PROVIDER_PATHS" android:name="android.support.FILE_PROVIDER_PATHS"

@ -9,7 +9,7 @@ import org.tasks.BuildConfig;
public final class Constants { public final class Constants {
public static final String FILE_PROVIDER_AUTHORITY = BuildConfig.APPLICATION_ID + ".provider"; public static final String FILE_PROVIDER_AUTHORITY = BuildConfig.APPLICATION_ID + ".file_provider";
/** Notification Manager id for timing */ /** Notification Manager id for timing */
public static final int NOTIFICATION_TIMER = -2; public static final int NOTIFICATION_TIMER = -2;

@ -58,10 +58,10 @@ public class CameraActivity extends InjectingAppCompatActivity {
throw new RuntimeException("Invalid Uri"); throw new RuntimeException("Invalid Uri");
} }
final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra( Uri shared =
MediaStore.EXTRA_OUTPUT,
FileProvider.getUriForFile( FileProvider.getUriForFile(
this, Constants.FILE_PROVIDER_AUTHORITY, new File(uri.getPath()))); this, Constants.FILE_PROVIDER_AUTHORITY, new File(uri.getPath()));
intent.putExtra(MediaStore.EXTRA_OUTPUT, shared);
if (atLeastLollipop()) { if (atLeastLollipop()) {
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else { } else {
@ -69,9 +69,7 @@ public class CameraActivity extends InjectingAppCompatActivity {
getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resolveInfoList) { for (ResolveInfo resolveInfo : resolveInfoList) {
grantUriPermission( grantUriPermission(
resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.packageName, shared, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} }
} }

@ -2,11 +2,13 @@ package org.tasks.files;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.nononsenseapps.filepicker.FilePickerActivity; import com.nononsenseapps.filepicker.FilePickerActivity;
import com.nononsenseapps.filepicker.Utils;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
@ -67,7 +69,8 @@ public class FileExplore extends InjectingAppCompatActivity {
if (requestCode == REQUEST_PICKER) { if (requestCode == REQUEST_PICKER) {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setData(data.getData()); File file = Utils.getFileForUri(data.getData());
intent.setData(Uri.fromFile(file));
setResult(Activity.RESULT_OK, intent); setResult(Activity.RESULT_OK, intent);
} }
finish(); finish();

@ -56,9 +56,7 @@ public class FileHelper {
} else { } else {
Intent intent = new Intent(activity, FileExplore.class); Intent intent = new Intent(activity, FileExplore.class);
if (initial != null) { if (initial != null) {
intent.putExtra( intent.putExtra(FileExplore.EXTRA_START_PATH, initial.getPath());
FileExplore.EXTRA_START_PATH,
new File(initial.getPath()));
} }
return intent; return intent;
} }
@ -78,9 +76,7 @@ public class FileHelper {
Intent intent = new Intent(activity, FileExplore.class); Intent intent = new Intent(activity, FileExplore.class);
intent.putExtra(FileExplore.EXTRA_DIRECTORY_MODE, true); intent.putExtra(FileExplore.EXTRA_DIRECTORY_MODE, true);
if (initial != null) { if (initial != null) {
intent.putExtra( intent.putExtra(FileExplore.EXTRA_START_PATH, initial.getPath());
FileExplore.EXTRA_START_PATH,
new File(initial.getPath()));
} }
activity.startActivityForResult(intent, rc); activity.startActivityForResult(intent, rc);
} }

@ -0,0 +1,6 @@
package org.tasks.files;
import androidx.core.content.FileProvider;
public class NNFileProvider extends FileProvider {
}

@ -418,7 +418,7 @@ public class Preferences {
if (atLeastKitKat()) { if (atLeastKitKat()) {
return DocumentFile.fromFile(context.getExternalCacheDir()).getUri(); return DocumentFile.fromFile(context.getExternalCacheDir()).getUri();
} else { } else {
return Uri.fromFile(context.getCacheDir()); return Uri.fromFile(context.getExternalCacheDir());
} }
} }

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<paths> <paths>
<root-path <external-path
name="root" name="external"
path="." /> path="." />
<cache-path <external-cache-path
name="cache" name="external_cache"
path="." /> path="." />
</paths> </paths>
Loading…
Cancel
Save