Skip to content
This repository was archived by the owner on Aug 12, 2022. It is now read-only.

Commit aeffa34

Browse files
authored
Merge pull request #331 from LLK/issue/android-permissions
refactor permission request
2 parents 027baa1 + 647fb2c commit aeffa34

File tree

2 files changed

+30
-25
lines changed

2 files changed

+30
-25
lines changed

android/ScratchJr/app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ android {
2020
free {
2121
dimension = 'scratchjrversion'
2222
applicationId "org.scratchjr.androidfree"
23-
minSdkVersion 19
24-
targetSdkVersion 28
25-
versionCode 21
26-
versionName "1.2.0"
23+
minSdkVersion 21
24+
targetSdkVersion 29
25+
versionCode 22
26+
versionName "1.2.11"
2727
}
2828
}
2929
}

android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import java.io.FileNotFoundException;
4141
import java.io.IOException;
4242
import 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

Comments
 (0)