summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Dai <sdai@google.com>2020-04-24 00:51:51 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-04-24 00:51:51 +0000
commitfab1119c73e0684826b164fd64a72b2198938ae1 (patch)
tree14c52d280ad337a3554e6fa0de4ae6327c59dd11
parent9b053f63da18031bbe53f1cf35bad2d05fa263ff (diff)
parentdcd3856a5e5fd91079b9f13566d4dd298dc002ee (diff)
downloadLocalMediaPlayer-fab1119c73e0684826b164fd64a72b2198938ae1.tar.gz
Add error resolution for missing permission am: e7cb020b5d am: ad53ed36a2 am: dcd3856a5e
Change-Id: I290fed7c00e87e56a6f854004a844d3121111b95
-rw-r--r--OWNERS2
-rw-r--r--res/values/strings.xml2
-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
5 files changed, 34 insertions, 13 deletions
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 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);
- }
- }
}