diff options
Diffstat (limited to 'src/com/android/car')
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); - } - } } |
