Add error resolution for missing permission am: e7cb020b5d am: ad53ed36a2
Change-Id: Ic828ca5941404a61b38b007831c762fd2a909567
diff --git a/OWNERS b/OWNERS
index f0f7c14..e2dc47b 100644
--- a/OWNERS
+++ b/OWNERS
@@ -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 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 @@
}
// Check permissions every time we try to play
if (!Utils.hasRequiredPermissions(mContext)) {
- Utils.startPermissionRequest(mContext);
+ setMissingPermissionError();
} else {
requestAudioFocus(() -> resumePlayback());
}
@@ -231,6 +231,25 @@
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 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 @@
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 @@
}
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);
- }
- }
}