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) { } }