aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzard <fuzzard@kodi.tv>2022-05-09 14:05:20 +1000
committerfuzzard <fuzzard@kodi.tv>2022-06-18 09:58:23 +1000
commitc9a50f006d2db466e52b4e67eba16e2b30eafdb6 (patch)
tree16328c7dd97657667b92312f4e538af159d2e04c
parent7b6cdbfc6edf32c1719f0702abe1ec0a2253b9e8 (diff)
Android SDK 30 and All files access permission
-rw-r--r--cmake/platform/android/android.cmake2
-rw-r--r--tools/android/packaging/xbmc/AndroidManifest.xml.in1
-rw-r--r--tools/android/packaging/xbmc/src/Splash.java.in58
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;
+ }
+ }
+
}