summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Dai <sdai@google.com>2020-04-22 13:57:27 -0700
committerSimon Dai <sdai@google.com>2020-04-23 10:59:43 -0700
commite7cb020b5dcf64f84bb5b50aeb33cc51530e3a00 (patch)
tree14c52d280ad337a3554e6fa0de4ae6327c59dd11
parente8cd868346f252f60bd52c4076365873681e0ffa (diff)
downloadLocalMediaPlayer-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--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);
- }
- }
}