[android] Properly set sharing intent permissions

There was an exception in console

Signed-off-by: Alexander Borsuk <me@alex.bio>
This commit is contained in:
Alexander Borsuk 2021-06-18 02:26:45 +02:00 committed by Roman Tsisyk
parent 17cb86f9cd
commit 48fb06c49c
2 changed files with 18 additions and 2 deletions

View file

@ -1,5 +1,6 @@
package com.mapswithme.util;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
@ -95,7 +96,6 @@ public class SharingUtils
public static void shareBookmarkFile(Context context, String fileName)
{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(KMZ_MIME_TYPE);
final String subject = context.getString(R.string.share_bookmarks_email_subject);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
@ -103,8 +103,16 @@ public class SharingUtils
final String text = context.getString(R.string.share_bookmarks_email_body);
intent.putExtra(Intent.EXTRA_TEXT, text.toString());
Uri fileUri = StorageUtils.getUriForFilePath(context, fileName);
final Uri fileUri = StorageUtils.getUriForFilePath(context, fileName);
intent.putExtra(android.content.Intent.EXTRA_STREAM, fileUri);
// Properly set permissions for intent, see
// https://developer.android.com/reference/androidx/core/content/FileProvider#include-the-permission-in-an-intent
intent.setDataAndType(fileUri, KMZ_MIME_TYPE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
intent.setClipData(ClipData.newRawUri("", fileUri));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
context.startActivity(Intent.createChooser(intent, context.getString(R.string.share)));
}

View file

@ -791,6 +791,14 @@ public class Utils
{
Uri uri = StorageUtils.getUriForFilePath(activity, logsZipFile);
intent.putExtra(Intent.EXTRA_STREAM, uri);
// Properly set permissions for intent, see
// https://developer.android.com/reference/androidx/core/content/FileProvider#include-the-permission-in-an-intent
intent.setData(uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
intent.setClipData(ClipData.newRawUri("", uri));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
}
// Do this so some email clients don't complain about empty body.