diff options
author | Simon Dai <sdai@google.com> | 2020-04-24 00:51:51 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-04-24 00:51:51 +0000 |
commit | fab1119c73e0684826b164fd64a72b2198938ae1 (patch) | |
tree | 14c52d280ad337a3554e6fa0de4ae6327c59dd11 | |
parent | 9b053f63da18031bbe53f1cf35bad2d05fa263ff (diff) | |
parent | dcd3856a5e5fd91079b9f13566d4dd298dc002ee (diff) | |
download | LocalMediaPlayer-fab1119c73e0684826b164fd64a72b2198938ae1.tar.gz |
Add error resolution for missing permission am: e7cb020b5d am: ad53ed36a2 am: dcd3856a5e
Change-Id: I290fed7c00e87e56a6f854004a844d3121111b95
-rw-r--r-- | OWNERS | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/com/android/car/media/localmediaplayer/LocalMediaBrowserService.java | 4 | ||||
-rw-r--r-- | src/com/android/car/media/localmediaplayer/Player.java | 25 | ||||
-rw-r--r-- | src/com/android/car/media/localmediaplayer/Utils.java | 14 |
5 files changed, 34 insertions, 13 deletions
@@ -2,3 +2,5 @@ # Please update this list if you find better candidates. stenning@google.com ajchen@google.com +igorr@google.com +arnaudberry@google.com diff --git a/res/values/strings.xml b/res/values/strings.xml index 7e4e990..ac6d4a1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -21,6 +21,8 @@ <string name="genres_title">Genres</string> <string name="albums_title">Albums</string> <string name="playback_error">Something went wrong.</string> + <string name="permission_error">Missing permission.</string> + <string name="permission_error_resolve">Grant permission</string> <string name="playlist">Now Playing</string> <string name="shuffle">Shuffle</string> 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); - } - } } |