40
40
import java .io .FileNotFoundException ;
41
41
import java .io .IOException ;
42
42
import java .io .InputStream ;
43
+ import java .util .Arrays ;
44
+ import java .util .Vector ;
43
45
44
46
/**
45
47
* Main activity for Scratch Jr., consisting of a full-screen landscape WebView.
@@ -103,6 +105,7 @@ public class ScratchJrActivity
103
105
private final int SCRATCHJR_CAMERA_MIC_PERMISSION = 1 ;
104
106
public int cameraPermissionResult = PackageManager .PERMISSION_DENIED ;
105
107
public int micPermissionResult = PackageManager .PERMISSION_DENIED ;
108
+ public int readExtPermissionResult = PackageManager .PERMISSION_DENIED ;
106
109
107
110
/* Firebase analytics tracking */
108
111
private FirebaseAnalytics _FirebaseAnalytics ;
@@ -172,34 +175,33 @@ public void run() {
172
175
requestPermissions ();
173
176
}
174
177
175
- private void requestExtStoragePermissions () {
176
- int readExtPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .READ_EXTERNAL_STORAGE );
177
- if (readExtPermissionResult != PackageManager .PERMISSION_GRANTED ) {
178
- int requestCode = 2 ;
179
- ActivityCompat .requestPermissions (this ,
180
- new String []{Manifest .permission .READ_EXTERNAL_STORAGE }, requestCode );
181
- }
182
- }
183
-
178
+ /*
179
+ Ask for all permissions when ScratchJr is first launched so that we are not asking a 5-7 year old to give permission
180
+ */
184
181
public void requestPermissions () {
185
- requestExtStoragePermissions ();
186
182
cameraPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .CAMERA );
187
183
micPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .RECORD_AUDIO );
184
+ readExtPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .READ_EXTERNAL_STORAGE );
188
185
189
- String [] desiredPermissions ;
190
- if (cameraPermissionResult != PackageManager .PERMISSION_GRANTED
191
- && micPermissionResult != PackageManager .PERMISSION_GRANTED ) {
192
- desiredPermissions = new String []{
193
- Manifest .permission .CAMERA , Manifest .permission .RECORD_AUDIO
194
- };
195
- } else if (cameraPermissionResult != PackageManager .PERMISSION_GRANTED ) {
196
- desiredPermissions = new String []{Manifest .permission .CAMERA };
197
- } else if (micPermissionResult != PackageManager .PERMISSION_GRANTED ) {
198
- desiredPermissions = new String []{Manifest .permission .RECORD_AUDIO };
199
- } else {
186
+ if (cameraPermissionResult == PackageManager .PERMISSION_GRANTED
187
+ && micPermissionResult == PackageManager .PERMISSION_GRANTED
188
+ && readExtPermissionResult == PackageManager .PERMISSION_GRANTED ) {
200
189
return ;
201
190
}
202
191
192
+ Vector <String > tmp = new Vector <String >(3 );
193
+ if (cameraPermissionResult != PackageManager .PERMISSION_GRANTED ) {
194
+ tmp .add (Manifest .permission .CAMERA );
195
+ }
196
+ if (micPermissionResult != PackageManager .PERMISSION_GRANTED ) {
197
+ tmp .add (Manifest .permission .RECORD_AUDIO );
198
+ }
199
+ if (readExtPermissionResult != PackageManager .PERMISSION_GRANTED ) {
200
+ tmp .add (Manifest .permission .READ_EXTERNAL_STORAGE );
201
+ }
202
+ Object [] tmpArray = tmp .toArray ();
203
+ String [] desiredPermissions = Arrays .copyOf (tmpArray , tmpArray .length , String [].class );
204
+
203
205
ActivityCompat .requestPermissions (this ,
204
206
desiredPermissions ,
205
207
SCRATCHJR_CAMERA_MIC_PERMISSION );
@@ -217,6 +219,9 @@ public void onRequestPermissionsResult(int requestCode,
217
219
if (permission .equals (Manifest .permission .RECORD_AUDIO )) {
218
220
micPermissionResult = grantResults [permissionId ];
219
221
}
222
+ if (permission .equals (Manifest .permission .READ_EXTERNAL_STORAGE )) {
223
+ readExtPermissionResult = grantResults [permissionId ];
224
+ }
220
225
permissionId ++;
221
226
}
222
227
}
0 commit comments