11package net .sourceforge .smallbasic ;
22
3- import java .io .BufferedOutputStream ;
4- import java .io .BufferedReader ;
5- import java .io .BufferedWriter ;
6- import java .io .ByteArrayInputStream ;
7- import java .io .ByteArrayOutputStream ;
8- import java .io .DataInputStream ;
9- import java .io .File ;
10- import java .io .FileNotFoundException ;
11- import java .io .FileOutputStream ;
12- import java .io .FileReader ;
13- import java .io .FileWriter ;
14- import java .io .IOException ;
15- import java .io .InputStreamReader ;
16- import java .io .UnsupportedEncodingException ;
17- import java .net .Inet4Address ;
18- import java .net .InetAddress ;
19- import java .net .NetworkInterface ;
20- import java .net .ServerSocket ;
21- import java .net .Socket ;
22- import java .net .SocketException ;
23- import java .net .URLDecoder ;
24- import java .nio .file .Files ;
25- import java .nio .file .Path ;
26- import java .nio .file .Paths ;
27- import java .util .Date ;
28- import java .util .Enumeration ;
29- import java .util .HashMap ;
30- import java .util .Locale ;
31- import java .util .Map ;
32- import java .util .Properties ;
33- import java .util .Queue ;
34- import java .util .concurrent .ConcurrentLinkedQueue ;
35- import java .util .concurrent .ExecutorService ;
36- import java .util .concurrent .Executors ;
37- import java .util .concurrent .Semaphore ;
38- import java .util .zip .GZIPInputStream ;
39-
403import android .Manifest ;
414import android .annotation .SuppressLint ;
425import android .app .Activity ;
5720import android .media .AudioManager ;
5821import android .media .MediaPlayer ;
5922import android .net .Uri ;
60- import android .os .Build ;
6123import android .os .Bundle ;
6224import android .os .Environment ;
63- import android .support .annotation .NonNull ;
64- import android .support .annotation .RequiresApi ;
6525import android .support .v4 .app .ActivityCompat ;
6626import android .support .v4 .content .ContextCompat ;
6727import android .util .Base64 ;
7636import android .view .inputmethod .InputMethodManager ;
7737import android .widget .Toast ;
7838
39+ import java .io .BufferedOutputStream ;
40+ import java .io .BufferedReader ;
41+ import java .io .BufferedWriter ;
42+ import java .io .ByteArrayInputStream ;
43+ import java .io .ByteArrayOutputStream ;
44+ import java .io .DataInputStream ;
45+ import java .io .File ;
46+ import java .io .FileNotFoundException ;
47+ import java .io .FileReader ;
48+ import java .io .FileWriter ;
49+ import java .io .IOException ;
50+ import java .io .InputStreamReader ;
51+ import java .io .UnsupportedEncodingException ;
52+ import java .net .Inet4Address ;
53+ import java .net .InetAddress ;
54+ import java .net .NetworkInterface ;
55+ import java .net .ServerSocket ;
56+ import java .net .Socket ;
57+ import java .net .SocketException ;
58+ import java .net .URLDecoder ;
59+ import java .util .Date ;
60+ import java .util .Enumeration ;
61+ import java .util .HashMap ;
62+ import java .util .Locale ;
63+ import java .util .Map ;
64+ import java .util .Properties ;
65+ import java .util .Queue ;
66+ import java .util .concurrent .ConcurrentLinkedQueue ;
67+ import java .util .concurrent .ExecutorService ;
68+ import java .util .concurrent .Executors ;
69+ import java .util .concurrent .Semaphore ;
70+ import java .util .zip .GZIPInputStream ;
71+
7972/**
8073 * Extends NativeActivity to provide interface methods for runtime.cpp
8174 *
@@ -92,6 +85,7 @@ public class MainActivity extends NativeActivity {
9285 private static final float LOCATION_DISTANCE = 1 ;
9386 private static final int REQUEST_STORAGE_PERMISSION = 1 ;
9487 private static final int REQUEST_LOCATION_PERMISSION = 2 ;
88+ private static final String FOLDER_NAME = "SmallBASIC" ;
9589 private String _startupBas = null ;
9690 private boolean _untrusted = false ;
9791 private final ExecutorService _audioExecutor = Executors .newSingleThreadExecutor ();
@@ -192,6 +186,17 @@ public void browseFile(final byte[] pathBytes) {
192186 }
193187 }
194188
189+ public int checkFilePermission () {
190+ int result ;
191+ if (!permitted (Manifest .permission .WRITE_EXTERNAL_STORAGE )) {
192+ checkPermission (Manifest .permission .WRITE_EXTERNAL_STORAGE , REQUEST_STORAGE_PERMISSION );
193+ result = 1 ;
194+ } else {
195+ result = 0 ;
196+ }
197+ return result ;
198+ }
199+
195200 public void clearSoundQueue () {
196201 Log .i (TAG , "clearSoundQueue" );
197202 for (Sound sound : _sounds ) {
@@ -250,9 +255,9 @@ public String getExternalStorage() {
250255 String result ;
251256 String path = Environment .getExternalStorageDirectory ().getAbsolutePath ();
252257 if (isPublicStorage (path )) {
253- File sb = new File (path , "sbasic" );
258+ File sb = new File (path , FOLDER_NAME );
254259 if ((sb .isDirectory () && sb .canWrite ()) || sb .mkdirs ()) {
255- result = path + "/sbasic" ;
260+ result = path + "/" + FOLDER_NAME ;
256261 } else {
257262 result = path ;
258263 }
@@ -451,13 +456,7 @@ public boolean requestLocationUpdates() {
451456 final LocationManager locationService = (LocationManager ) getSystemService (Context .LOCATION_SERVICE );
452457 boolean result = false ;
453458 if (!permitted (Manifest .permission .ACCESS_FINE_LOCATION )) {
454- runOnUiThread (new Runnable () {
455- @ Override
456- public void run () {
457- String [] permissions = {Manifest .permission .ACCESS_FINE_LOCATION };
458- ActivityCompat .requestPermissions (MainActivity .this , permissions , REQUEST_LOCATION_PERMISSION );
459- }
460- });
459+ checkPermission (Manifest .permission .ACCESS_FINE_LOCATION , REQUEST_LOCATION_PERMISSION );
461460 } else if (locationService != null ) {
462461 final Criteria criteria = new Criteria ();
463462 final String provider = locationService .getBestProvider (criteria , true );
@@ -605,7 +604,6 @@ public void speak(final byte[] textBytes) {
605604 @ Override
606605 protected void onCreate (Bundle savedInstanceState ) {
607606 super .onCreate (savedInstanceState );
608- checkFilePermission ();
609607 processIntent ();
610608 processSettings ();
611609 }
@@ -637,11 +635,14 @@ private String buildTokenForm() {
637635 "<input value=OK name=okay type=submit style='vertical-align:top'></form>" ;
638636 }
639637
640- private void checkFilePermission () {
641- if (!permitted (Manifest .permission .WRITE_EXTERNAL_STORAGE )) {
642- String [] permissions = {Manifest .permission .WRITE_EXTERNAL_STORAGE };
643- ActivityCompat .requestPermissions (this , permissions , REQUEST_STORAGE_PERMISSION );
644- }
638+ private void checkPermission (final String permission , final int result ) {
639+ runOnUiThread (new Runnable () {
640+ @ Override
641+ public void run () {
642+ String [] permissions = {permission };
643+ ActivityCompat .requestPermissions (MainActivity .this , permissions , result );
644+ }
645+ });
645646 }
646647
647648 private String execBuffer (final String buffer , final String name , boolean run ) throws IOException {
0 commit comments