diff options
author | fuzzard <fuzzard@kodi.tv> | 2022-05-09 14:05:20 +1000 |
---|---|---|
committer | fuzzard <fuzzard@kodi.tv> | 2022-06-18 09:58:23 +1000 |
commit | c9a50f006d2db466e52b4e67eba16e2b30eafdb6 (patch) | |
tree | 16328c7dd97657667b92312f4e538af159d2e04c | |
parent | 7b6cdbfc6edf32c1719f0702abe1ec0a2253b9e8 (diff) |
Android SDK 30 and All files access permission
-rw-r--r-- | cmake/platform/android/android.cmake | 2 | ||||
-rw-r--r-- | tools/android/packaging/xbmc/AndroidManifest.xml.in | 1 | ||||
-rw-r--r-- | tools/android/packaging/xbmc/src/Splash.java.in | 58 |
3 files changed, 58 insertions, 3 deletions
diff --git a/cmake/platform/android/android.cmake b/cmake/platform/android/android.cmake index e41dc24e22..8250d49f81 100644 --- a/cmake/platform/android/android.cmake +++ b/cmake/platform/android/android.cmake @@ -2,6 +2,6 @@ set(PLATFORM_REQUIRED_DEPS LibAndroidJNI OpenGLES EGL Zip) set(APP_RENDER_SYSTEM gles) # Store SDK compile version -set(TARGET_SDK 29) +set(TARGET_SDK 30) # Minimum supported SDK version set(TARGET_MINSDK 21) diff --git a/tools/android/packaging/xbmc/AndroidManifest.xml.in b/tools/android/packaging/xbmc/AndroidManifest.xml.in index fbb807ff37..b342c3715d 100644 --- a/tools/android/packaging/xbmc/AndroidManifest.xml.in +++ b/tools/android/packaging/xbmc/AndroidManifest.xml.in @@ -10,6 +10,7 @@ android:targetSdkVersion="@TARGET_SDK@" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.GET_TASKS" /> diff --git a/tools/android/packaging/xbmc/src/Splash.java.in b/tools/android/packaging/xbmc/src/Splash.java.in index c96330e321..61e6c943ed 100644 --- a/tools/android/packaging/xbmc/src/Splash.java.in +++ b/tools/android/packaging/xbmc/src/Splash.java.in @@ -1,5 +1,6 @@ package @APP_PACKAGE@; +import static android.content.pm.PackageManager.FEATURE_LEANBACK; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.Manifest; @@ -21,6 +22,7 @@ import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; +import android.provider.Settings; import android.text.Html; import android.text.method.LinkMovementMethod; import android.util.Log; @@ -134,8 +136,25 @@ public class Splash extends Activity mSplash.mTextView.setText("Asking for permissions..."); mSplash.mProgress.setVisibility(View.INVISIBLE); - requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, + if ((Build.VERSION.SDK_INT >= 30) && !isAndroidTV()) + { + try + { + Intent intent = new Intent(); + intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + intent.setData(Uri.parse(String.format("package:%s", getPackageName()))); + startActivityForResult(intent, PERMISSION_RESULT_CODE); + } + catch (Exception e) + { + Log.d(TAG, "Exception asking for permissions: " + e.getMessage()); + } + } + else + { + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_RESULT_CODE); + } break; case CheckingPermissionsDone: if (mPermissionOK) @@ -734,7 +753,14 @@ public class Splash extends Activity private boolean CheckPermissions() { boolean retVal = false; - if (android.os.Build.VERSION.SDK_INT > 22) + if ((Build.VERSION.SDK_INT >= 30) && !isAndroidTV()) + { + if (Environment.isExternalStorageManager()) + { + retVal = true; + } + } + else if (Build.VERSION.SDK_INT > 22) { int permissionCheck; permissionCheck = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); @@ -765,6 +791,20 @@ public class Splash extends Activity mStateMachine.sendEmptyMessage(CheckingPermissionsDone); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) + { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == PERMISSION_RESULT_CODE) + { + if (Environment.isExternalStorageManager()) + { + mPermissionOK = true; + } + mStateMachine.sendEmptyMessage(CheckingPermissionsDone); + } + } + void updateExternalStorageState() { String state = Environment.getExternalStorageState(); @@ -963,4 +1003,18 @@ public class Splash extends Activity } } + private boolean isAndroidTV() + { + if (getPackageManager().hasSystemFeature(FEATURE_LEANBACK)) + { + Log.d(TAG, "Running on an Android TV Device"); + return true; + } + else + { + Log.d(TAG, "Running on a non Android TV Device"); + return false; + } + } + } |