summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorSimon Dai <sdai@google.com>2020-04-22 13:57:27 -0700
committerSimon Dai <sdai@google.com>2020-04-23 10:59:43 -0700
commite7cb020b5dcf64f84bb5b50aeb33cc51530e3a00 (patch)
tree14c52d280ad337a3554e6fa0de4ae6327c59dd11 /src/com
parente8cd868346f252f60bd52c4076365873681e0ffa (diff)
downloadplatform_packages_apps_Car_LocalMediaPlayer-e7cb020b5dcf64f84bb5b50aeb33cc51530e3a00.tar.gz
platform_packages_apps_Car_LocalMediaPlayer-e7cb020b5dcf64f84bb5b50aeb33cc51530e3a00.tar.bz2
platform_packages_apps_Car_LocalMediaPlayer-e7cb020b5dcf64f84bb5b50aeb33cc51530e3a00.zip
Add error resolution for missing permissionandroid11-dev
Prevents LMP from spam requesting permissions, will only request on user action (via error resolution). Bug: 153569299 Test: Manual Change-Id: I327b8b9a0f30d3b8921bd61438bffcd319399cfe
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java4
-rw-r--r--src/com/android/car/media/localmediaplayer/Player.java25
-rw-r--r--src/com/android/car/media/localmediaplayer/Utils.java14
3 files changed, 30 insertions, 13 deletions
diff --git a/src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java b/src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java
index 6f3e5fd..26a440f 100644
--- a/src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java
+++ b/src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java
@@ -113,10 +113,6 @@ public class LocalMediaBrowserService extends MediaBrowserService {
public void onCreate() {
super.onCreate();
- if (!Utils.hasRequiredPermissions(this)) {
- Utils.startPermissionRequest(this);
- }
-
mDataModel = new DataModel(this);
addRootItems();
mSession = new MediaSession(this, MEDIA_SESSION_TAG);
diff --git a/src/com/android/car/media/localmediaplayer/Player.java b/src/com/android/car/media/localmediaplayer/Player.java
index 2bb763b..e39b394 100644
--- a/src/com/android/car/media/localmediaplayer/Player.java
+++ b/src/com/android/car/media/localmediaplayer/Player.java
@@ -173,7 +173,7 @@ public class Player extends MediaSession.Callback {
}
// Check permissions every time we try to play
if (!Utils.hasRequiredPermissions(mContext)) {
- Utils.startPermissionRequest(mContext);
+ setMissingPermissionError();
} else {
requestAudioFocus(() -> resumePlayback());
}
@@ -231,6 +231,25 @@ public class Player extends MediaSession.Callback {
editor.commit();
}
+ private void setMissingPermissionError() {
+ Intent prefsIntent = new Intent();
+ prefsIntent.setClass(mContext, PermissionsActivity.class);
+ prefsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, prefsIntent, 0);
+
+ Bundle extras = new Bundle();
+ extras.putString(Utils.ERROR_RESOLUTION_ACTION_LABEL,
+ mContext.getString(R.string.permission_error_resolve));
+ extras.putParcelable(Utils.ERROR_RESOLUTION_ACTION_INTENT, pendingIntent);
+
+ PlaybackState state = new PlaybackState.Builder()
+ .setState(PlaybackState.STATE_ERROR, 0, 0)
+ .setErrorMessage(mContext.getString(R.string.permission_error))
+ .setExtras(extras)
+ .build();
+ mSession.setPlaybackState(state);
+ }
+
private boolean maybeRebuildQueue(Playlist playlist) {
List<QueueItem> queue = new ArrayList<>();
int foundIdx = 0;
@@ -269,6 +288,10 @@ public class Player extends MediaSession.Callback {
}
public boolean maybeRestoreState() {
+ if (!Utils.hasRequiredPermissions(mContext)) {
+ setMissingPermissionError();
+ return false;
+ }
String serialized = mSharedPrefs.getString(CURRENT_PLAYLIST_KEY, null);
if (serialized == null) {
return false;
diff --git a/src/com/android/car/media/localmediaplayer/Utils.java b/src/com/android/car/media/localmediaplayer/Utils.java
index d761794..5df3760 100644
--- a/src/com/android/car/media/localmediaplayer/Utils.java
+++ b/src/com/android/car/media/localmediaplayer/Utils.java
@@ -27,6 +27,12 @@ public class Utils {
android.Manifest.permission.READ_EXTERNAL_STORAGE
};
+ static final String ERROR_RESOLUTION_ACTION_INTENT =
+ "android.media.extras.ERROR_RESOLUTION_ACTION_INTENT";
+
+ static final String ERROR_RESOLUTION_ACTION_LABEL =
+ "android.media.extras.ERROR_RESOLUTION_ACTION_LABEL";
+
static Uri getUriForResource(Context context, int id) {
Resources res = context.getResources();
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
@@ -43,12 +49,4 @@ public class Utils {
}
return true;
}
-
- static void startPermissionRequest(Context context) {
- if (!Utils.hasRequiredPermissions(context)) {
- Intent intent = new Intent(context, PermissionsActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent);
- }
- }
}