4040import java .io .FileNotFoundException ;
4141import java .io .IOException ;
4242import java .io .InputStream ;
43+ import java .util .Arrays ;
44+ import java .util .Vector ;
4345
4446/**
4547 * Main activity for Scratch Jr., consisting of a full-screen landscape WebView.
@@ -103,6 +105,7 @@ public class ScratchJrActivity
103105 private final int SCRATCHJR_CAMERA_MIC_PERMISSION = 1 ;
104106 public int cameraPermissionResult = PackageManager .PERMISSION_DENIED ;
105107 public int micPermissionResult = PackageManager .PERMISSION_DENIED ;
108+ public int readExtPermissionResult = PackageManager .PERMISSION_DENIED ;
106109
107110 /* Firebase analytics tracking */
108111 private FirebaseAnalytics _FirebaseAnalytics ;
@@ -172,34 +175,33 @@ public void run() {
172175 requestPermissions ();
173176 }
174177
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+ */
184181 public void requestPermissions () {
185- requestExtStoragePermissions ();
186182 cameraPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .CAMERA );
187183 micPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .RECORD_AUDIO );
184+ readExtPermissionResult = ContextCompat .checkSelfPermission (this , Manifest .permission .READ_EXTERNAL_STORAGE );
188185
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 ) {
200189 return ;
201190 }
202191
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+
203205 ActivityCompat .requestPermissions (this ,
204206 desiredPermissions ,
205207 SCRATCHJR_CAMERA_MIC_PERMISSION );
@@ -217,6 +219,9 @@ public void onRequestPermissionsResult(int requestCode,
217219 if (permission .equals (Manifest .permission .RECORD_AUDIO )) {
218220 micPermissionResult = grantResults [permissionId ];
219221 }
222+ if (permission .equals (Manifest .permission .READ_EXTERNAL_STORAGE )) {
223+ readExtPermissionResult = grantResults [permissionId ];
224+ }
220225 permissionId ++;
221226 }
222227 }
0 commit comments