2
2
3
3
import java .util .Map ;
4
4
import java .util .HashMap ;
5
- import android .util .Log ;
6
5
import android .net .Uri ;
7
6
import android .content .Context ;
8
7
import android .content .Intent ;
13
12
14
13
public class FileChooser {
15
14
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 ;
17
16
18
17
public static final String GET_CONTENT_MESSAGE = "AndroidUtils.FileChooser.getContent" ;
19
18
public static final String OPEN_DOCUMENT_MESSAGE = "AndroidUtils.FileChooser.openDocument" ;
@@ -34,13 +33,15 @@ public void onDispatched(String type , Map message) {
34
33
(String )message .get ("mime" ),
35
34
(String )message .get ("url" ),
36
35
(Boolean )message .get ("openable" ),
37
- (Boolean )message .get ("grantWrite" ));
36
+ (Boolean )message .get ("grantWrite" ),
37
+ (Boolean )message .get ("persistPermissions" ));
38
38
} else if (type .equals (CREATE_DOCUMENT_MESSAGE )) {
39
39
createDocument ((String )message .get ("title" ),
40
40
(String )message .get ("mime" ),
41
41
(String )message .get ("url" ),
42
42
(String )message .get ("name" ),
43
- (Boolean )message .get ("openable" ));
43
+ (Boolean )message .get ("openable" ),
44
+ (Boolean )message .get ("persistPermissions" ));
44
45
} else if (type .equals (SystemDispatcher .ACTIVITY_RESULT_MESSAGE )) {
45
46
onActivityResult ((Integer )message .get ("requestCode" ),
46
47
(Integer )message .get ("resultCode" ),
@@ -73,7 +74,7 @@ public void run() {
73
74
activity .runOnUiThread (runnable );
74
75
}
75
76
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 ) {
77
78
final Activity activity = QtNative .activity ();
78
79
79
80
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
92
93
public void run () {
93
94
activity .startActivityForResult (
94
95
Intent .createChooser (intent , title ),
95
- CHOOSE_DOCUMENT_ACTION );
96
+ persistPermissions ? CHOOSE_PERSISTENT_ACTION : CHOOSE_CONTENT_ACTION );
96
97
};
97
98
};
98
99
activity .runOnUiThread (runnable );
99
100
}
100
101
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 ) {
102
103
final Activity activity = QtNative .activity ();
103
104
104
105
final Intent intent = new Intent (Intent .ACTION_CREATE_DOCUMENT );
@@ -118,25 +119,24 @@ static private void createDocument(final String title, String mime, String url,
118
119
public void run () {
119
120
activity .startActivityForResult (
120
121
Intent .createChooser (intent , title ),
121
- CHOOSE_DOCUMENT_ACTION );
122
+ persistPermissions ? CHOOSE_PERSISTENT_ACTION : CHOOSE_CONTENT_ACTION );
122
123
};
123
124
};
124
125
activity .runOnUiThread (runnable );
125
126
}
126
127
127
128
static private void onActivityResult (int requestCode , int resultCode , Intent data ) {
128
129
if (requestCode == CHOOSE_CONTENT_ACTION ||
129
- requestCode == CHOOSE_DOCUMENT_ACTION ) {
130
+ requestCode == CHOOSE_PERSISTENT_ACTION ) {
130
131
Map reply = new HashMap ();
131
132
if (resultCode == Activity .RESULT_OK ) {
132
133
Uri uri = data .getData ();
133
134
134
- if (requestCode == CHOOSE_DOCUMENT_ACTION ) {
135
- Activity activity = QtNative .activity ();
135
+ if (requestCode == CHOOSE_PERSISTENT_ACTION ) {
136
136
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 );
140
140
}
141
141
142
142
reply .put ("uri" , uri .toString ());
0 commit comments