4package org.qtproject.qt.android;
6import android.content.ContentResolver;
7import android.content.Context;
8import android.content.Intent;
9import android.content.pm.PackageManager;
11import android.database.Cursor;
13import android.net.Uri;
15import android.util.Log;
17import android.os.ParcelFileDescriptor;
18import android.os.Process;
20import java.util.Arrays;
21import java.util.stream.Collectors;
23class QtContentFileEngine
25 private static String QtTag =
"QtContentFileEngine";
27 static Cursor
query(ContentResolver contentResolver, Uri uri,
String[] projection,
32 if (!hasPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION))
35 return contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);
36 }
catch (Exception ignored) {
45 static ParcelFileDescriptor openFileDescriptor(ContentResolver contentResolver,
50 if (openMode.contains(
"w"))
51 permissions |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
52 if (openMode.contains(
"r"))
53 permissions |= Intent.FLAG_GRANT_READ_URI_PERMISSION;
55 if (!hasPermission(uri, permissions)) {
56 Log.w(QtTag,
"openFileDescriptor(): No permission for URI " + uri);
60 return contentResolver.openFileDescriptor(uri, openMode);
61 }
catch (Exception e) {
62 Log.w(QtTag,
"openFileDescriptor() failed with " + e);
68 static boolean hasPermission(Uri uri,
int permission)
71 int status =
context.checkUriPermission(uri, Process.myPid(), Process.myUid(), permission);
73 return status == PackageManager.PERMISSION_GRANTED;
static const QString context()