Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.

Commit d2bb4e8

Browse files
committed
fixed permission error -> invalid url encoding
1 parent fe2923e commit d2bb4e8

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

android/src/de/skycoder42/androidutils/FileChooser.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.Map;
44
import java.util.HashMap;
5-
import android.util.Log;
65
import android.net.Uri;
76
import android.content.Context;
87
import android.content.Intent;
@@ -13,7 +12,7 @@
1312

1413
public class FileChooser {
1514
public static final int CHOOSE_CONTENT_ACTION = 0x1091c657;
16-
public static final int CHOOSE_DOCUMENT_ACTION = 0x1091c658;
15+
public static final int CHOOSE_PERSISTENT_ACTION = 0x1091c658;
1716

1817
public static final String GET_CONTENT_MESSAGE = "AndroidUtils.FileChooser.getContent";
1918
public static final String OPEN_DOCUMENT_MESSAGE = "AndroidUtils.FileChooser.openDocument";
@@ -34,13 +33,15 @@ public void onDispatched(String type , Map message) {
3433
(String)message.get("mime"),
3534
(String)message.get("url"),
3635
(Boolean)message.get("openable"),
37-
(Boolean)message.get("grantWrite"));
36+
(Boolean)message.get("grantWrite"),
37+
(Boolean)message.get("persistPermissions"));
3838
} else if (type.equals(CREATE_DOCUMENT_MESSAGE)) {
3939
createDocument((String)message.get("title"),
4040
(String)message.get("mime"),
4141
(String)message.get("url"),
4242
(String)message.get("name"),
43-
(Boolean)message.get("openable"));
43+
(Boolean)message.get("openable"),
44+
(Boolean)message.get("persistPermissions"));
4445
} else if (type.equals(SystemDispatcher.ACTIVITY_RESULT_MESSAGE)) {
4546
onActivityResult((Integer)message.get("requestCode"),
4647
(Integer)message.get("resultCode"),
@@ -73,7 +74,7 @@ public void run() {
7374
activity.runOnUiThread(runnable);
7475
}
7576

76-
static private void openDocument(final String title, String mime, String url, boolean openable, boolean grantWrite) {
77+
static private void openDocument(final String title, String mime, String url, boolean openable, boolean grantWrite, final boolean persistPermissions) {
7778
final Activity activity = QtNative.activity();
7879

7980
final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
@@ -92,13 +93,13 @@ static private void openDocument(final String title, String mime, String url, bo
9293
public void run() {
9394
activity.startActivityForResult(
9495
Intent.createChooser(intent, title),
95-
CHOOSE_DOCUMENT_ACTION);
96+
persistPermissions ? CHOOSE_PERSISTENT_ACTION : CHOOSE_CONTENT_ACTION);
9697
};
9798
};
9899
activity.runOnUiThread(runnable);
99100
}
100101

101-
static private void createDocument(final String title, String mime, String url, String name, boolean openable) {
102+
static private void createDocument(final String title, String mime, String url, String name, boolean openable, final boolean persistPermissions) {
102103
final Activity activity = QtNative.activity();
103104

104105
final Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
@@ -118,25 +119,24 @@ static private void createDocument(final String title, String mime, String url,
118119
public void run() {
119120
activity.startActivityForResult(
120121
Intent.createChooser(intent, title),
121-
CHOOSE_DOCUMENT_ACTION);
122+
persistPermissions ? CHOOSE_PERSISTENT_ACTION : CHOOSE_CONTENT_ACTION);
122123
};
123124
};
124125
activity.runOnUiThread(runnable);
125126
}
126127

127128
static private void onActivityResult(int requestCode, int resultCode, Intent data) {
128129
if(requestCode == CHOOSE_CONTENT_ACTION ||
129-
requestCode == CHOOSE_DOCUMENT_ACTION) {
130+
requestCode == CHOOSE_PERSISTENT_ACTION) {
130131
Map reply = new HashMap();
131132
if (resultCode == Activity.RESULT_OK) {
132133
Uri uri = data.getData();
133134

134-
if(requestCode == CHOOSE_DOCUMENT_ACTION) {
135-
Activity activity = QtNative.activity();
135+
if(requestCode == CHOOSE_PERSISTENT_ACTION) {
136136
int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
137-
activity.grantUriPermission(activity.getPackageName(), uri, takeFlags);
138-
ContentResolver resolver = activity.getContentResolver();
139-
resolver.takePersistableUriPermission(uri, takeFlags);
137+
QtNative.activity()
138+
.getContentResolver()
139+
.takePersistableUriPermission(uri, takeFlags);
140140
}
141141

142142
reply.put("uri", uri.toString());

contentdevice.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ bool ContentDevice::open(QIODevice::OpenMode mode)
4848
auto uri = QAndroidJniObject::callStaticObjectMethod("android/net/Uri",
4949
"parse",
5050
"(Ljava/lang/String;)Landroid/net/Uri;",
51-
QAndroidJniObject::fromString(_url.toString()).object());
51+
QAndroidJniObject::fromString(_url.toString(QUrl::FullyEncoded)).object());
5252
if(!uri.isValid()) {
5353
AndroidUtils::javaThrow();
5454
return false;

filechooser.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void FileChooser::open()
104104
{"mime", _mimeType},
105105
{"openable", _flags.testFlag(OpenableFlag)},
106106
{"localOnly", _flags.testFlag(LocalOnlyFlag)},
107-
{"grantWrite", _flags.testFlag(AlwaysGrantWrite)}
107+
{"grantWrite", _flags.testFlag(AlwaysGrantWriteFlag)}
108108
};
109109
break;
110110
case FileChooser::OpenDocument:
@@ -114,7 +114,8 @@ void FileChooser::open()
114114
{"mime", _mimeType},
115115
{"url", _contentUrl.toString()},
116116
{"openable", _flags.testFlag(OpenableFlag)},
117-
{"grantWrite", _flags.testFlag(AlwaysGrantWrite)}
117+
{"grantWrite", _flags.testFlag(AlwaysGrantWriteFlag)},
118+
{"persistPermissions", _flags.testFlag(PersistPermissionsFlag)}
118119
};
119120
break;
120121
case FileChooser::CreateDocument:
@@ -124,7 +125,8 @@ void FileChooser::open()
124125
{"mime", _mimeType},
125126
{"url", _contentUrl.toString()},
126127
{"name", _contentUrl.fileName()},
127-
{"openable", _flags.testFlag(OpenableFlag)}
128+
{"openable", _flags.testFlag(OpenableFlag)},
129+
{"persistPermissions", _flags.testFlag(PersistPermissionsFlag)}
128130
};
129131
break;
130132
default:

filechooser.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class FileChooser : public QObject
2626
enum ChooserFlag {
2727
OpenableFlag = 0x01,
2828
LocalOnlyFlag = 0x02,
29-
AlwaysGrantWrite = 0x04
29+
AlwaysGrantWriteFlag = 0x04,
30+
PersistPermissionsFlag = 0x08
3031
};
3132
Q_DECLARE_FLAGS(ChooserFlags, ChooserFlag)
3233
Q_FLAG(ChooserFlags)

0 commit comments

Comments
 (0)