summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Dai <sdai@google.com>2020-04-24 00:19:43 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-04-24 00:19:43 +0000
commit4cb5af9389eab4198fd2868e7a7dd7596f44638e (patch)
tree14c52d280ad337a3554e6fa0de4ae6327c59dd11
parentb24e8cf1a567ed52b7086b4008ff13df707dfccc (diff)
parente7cb020b5dcf64f84bb5b50aeb33cc51530e3a00 (diff)
downloadLocalMediaPlayer-4cb5af9389eab4198fd2868e7a7dd7596f44638e.tar.gz
Add error resolution for missing permission am: e7cb020b5d
Change-Id: I252b60e23db8e01fd2646b472834f415ac5da336
-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);
- }
- }
}