diff options
author | Simon Dai <sdai@google.com> | 2020-04-22 13:57:27 -0700 |
---|---|---|
committer | Simon Dai <sdai@google.com> | 2020-04-23 10:59:43 -0700 |
commit | e7cb020b5dcf64f84bb5b50aeb33cc51530e3a00 (patch) | |
tree | 14c52d280ad337a3554e6fa0de4ae6327c59dd11 | |
parent | e8cd868346f252f60bd52c4076365873681e0ffa (diff) | |
download | LocalMediaPlayer-android11-mainline-permission-release.tar.gz |
Add error resolution for missing permissionandroid-mainline-12.0.0_r112android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12aml_tz2_305400500aml_tz2_305400300aml_tz2_305400100aml_tz2_304500300aml_tz2_303900110aml_tz2_303900102aml_tz2_303800002aml_tz2_303800001aml_tz2_303200001android12-mainline-tzdata2-releaseandroid11-mainline-tethering-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devaml_tz2_305400100
Prevents LMP from spam requesting permissions, will only request on user
action (via error resolution).
Bug: 153569299
Test: Manual
Change-Id: I327b8b9a0f30d3b8921bd61438bffcd319399cfe
-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); - } - } } |