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 5f18e7a7fc)
This commit is contained in:
Santiago Seifert
2022-04-07 17:57:26 +00:00
parent c291627ea9
commit 12b2d2c768
2 changed files with 18 additions and 6 deletions

View File

@@ -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

View File

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