From 12b2d2c768289b0e91e2ff1bf79736b669ab985f Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Thu, 7 Apr 2022 17:57:26 +0000 Subject: [PATCH] Fix media_session shell commands Bug: 227109905 Test: Manually tested using AndroidX Media session demo app. Change-Id: Ie3cee37689ca2be30c522c1439afd5e6dde374e1 Merged-In: Ie3cee37689ca2be30c522c1439afd5e6dde374e1 (cherry picked from commit 5f18e7a7fc1bf00c9504790e2e80d23bba0369ec) --- .../android/server/media/MediaSessionService.java | 11 +++++++++-- .../com/android/server/media/MediaShellCommand.java | 13 +++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 42fed365441b8..9e5da450c8a51 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -1179,8 +1179,15 @@ public class MediaSessionService extends SystemService implements Monitor { @Override public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err, String[] args, ShellCallback callback, ResultReceiver resultReceiver) { - (new MediaShellCommand()).exec(this, in, out, err, args, callback, - resultReceiver); + String[] packageNames = + mContext.getPackageManager().getPackagesForUid(Binder.getCallingUid()); + String packageName = packageNames != null && packageNames.length > 0 + ? packageNames[0] + : "com.android.shell"; // We should not need this branch, but defaulting to the + // current shell package name for robustness. See + // b/227109905. + new MediaShellCommand(packageName) + .exec(this, in, out, err, args, callback, resultReceiver); } @Override diff --git a/services/core/java/com/android/server/media/MediaShellCommand.java b/services/core/java/com/android/server/media/MediaShellCommand.java index 103cdd997efc2..d175d87651de3 100644 --- a/services/core/java/com/android/server/media/MediaShellCommand.java +++ b/services/core/java/com/android/server/media/MediaShellCommand.java @@ -47,15 +47,19 @@ import java.util.List; * ShellCommand for MediaSessionService. */ public class MediaShellCommand extends ShellCommand { - // This doesn't belongs to any package. Setting the package name to empty string. - private static final String PACKAGE_NAME = ""; private static ActivityThread sThread; private static MediaSessionManager sMediaSessionManager; + + private final String mPackageName; private ISessionManager mSessionService; private PrintWriter mWriter; private PrintWriter mErrorWriter; private InputStream mInput; + public MediaShellCommand(String packageName) { + mPackageName = packageName; + } + @Override public int onCommand(String cmd) { mWriter = getOutPrintWriter(); @@ -110,7 +114,7 @@ public class MediaShellCommand extends ShellCommand { mWriter.println(); mWriter.println("media_session dispatch: dispatch a media key to the system."); mWriter.println(" KEY may be: play, pause, play-pause, mute, headsethook,"); - mWriter.println(" stop, next, previous, rewind, record, fast-forword."); + mWriter.println(" stop, next, previous, rewind, record, fast-forward."); mWriter.println("media_session list-sessions: print a list of the current sessions."); mWriter.println("media_session monitor: monitor updates to the specified session."); mWriter.println(" Use the tag from list-sessions."); @@ -120,7 +124,8 @@ public class MediaShellCommand extends ShellCommand { private void sendMediaKey(KeyEvent event) { try { - mSessionService.dispatchMediaKeyEvent(PACKAGE_NAME, false, event, false); + mSessionService.dispatchMediaKeyEvent( + mPackageName, /* asSystemService= */ false, event, /* needWakeLock= */ false); } catch (RemoteException e) { } }