diff options
| author | 2019-01-21 19:53:59 +0900 | |
|---|---|---|
| committer | 2019-01-21 19:53:59 +0900 | |
| commit | c8b15b6b774595db1a587e3632b1b8da6c85ce1e (patch) | |
| tree | 044820b8a7ad8cbe701e526845b4c34827256f5f | |
| parent | 9cb3f789b6ad61bd784742c64d395b31b1518a0e (diff) | |
Remove direct use of ISessionController in media cmd
Test: manual
Change-Id: Ia955858bee1b9a270b44f37e5dec9f4a594618bd
| -rw-r--r-- | cmds/media/src/com/android/commands/media/Media.java | 63 | 
1 files changed, 34 insertions, 29 deletions
diff --git a/cmds/media/src/com/android/commands/media/Media.java b/cmds/media/src/com/android/commands/media/Media.java index d160b73cc223..1e915f8232d3 100644 --- a/cmds/media/src/com/android/commands/media/Media.java +++ b/cmds/media/src/com/android/commands/media/Media.java @@ -17,18 +17,18 @@  package com.android.commands.media; -import android.app.ActivityManager; +import android.app.ActivityThread;  import android.content.Context;  import android.media.MediaMetadata; -import android.media.session.ControllerCallbackLink; -import android.media.session.ISessionController;  import android.media.session.ISessionManager; +import android.media.session.MediaController;  import android.media.session.MediaController.PlaybackInfo;  import android.media.session.MediaSession.QueueItem; +import android.media.session.MediaSessionManager;  import android.media.session.PlaybackState;  import android.os.Bundle;  import android.os.HandlerThread; -import android.os.IBinder; +import android.os.Looper;  import android.os.RemoteException;  import android.os.ServiceManager;  import android.os.SystemClock; @@ -48,6 +48,8 @@ import java.util.List;  public class Media extends BaseCommand {      // 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 ISessionManager mSessionService;      /** @@ -80,6 +82,13 @@ public class Media extends BaseCommand {      @Override      public void onRun() throws Exception { +        if (sThread == null) { +            Looper.prepareMainLooper(); +            sThread = ActivityThread.systemMain(); +            Context context = sThread.getSystemContext(); +            sMediaSessionManager = +                    (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); +        }          mSessionService = ISessionManager.Stub.asInterface(ServiceManager.checkService(                  Context.MEDIA_SESSION_SERVICE));          if (mSessionService == null) { @@ -117,12 +126,11 @@ public class Media extends BaseCommand {              showError("Error: must include a session id");              return;          } +          boolean success = false;          try { -            List<IBinder> sessions = mSessionService -                    .getSessions(null, ActivityManager.getCurrentUser()); -            for (IBinder session : sessions) { -                ISessionController controller = ISessionController.Stub.asInterface(session); +            List<MediaController> controllers = sMediaSessionManager.getActiveSessions(null); +            for (MediaController controller : controllers) {                  try {                      if (controller != null && id.equals(controller.getTag())) {                          ControllerMonitor monitor = new ControllerMonitor(controller); @@ -178,14 +186,14 @@ public class Media extends BaseCommand {                  KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD));      } -    class ControllerCallbackStub extends ControllerCallbackLink.CallbackStub { +    class ControllerCallback extends MediaController.Callback {          @Override          public void onSessionDestroyed() {              System.out.println("onSessionDestroyed. Enter q to quit.");          }          @Override -        public void onEvent(String event, Bundle extras) { +        public void onSessionEvent(String event, Bundle extras) {              System.out.println("onSessionEvent event=" + event + ", extras=" + extras);          } @@ -218,25 +226,25 @@ public class Media extends BaseCommand {          }          @Override -        public void onVolumeInfoChanged(PlaybackInfo info) { -            System.out.println("onVolumeInfoChanged " + info); +        public void onAudioInfoChanged(PlaybackInfo info) { +            System.out.println("onAudioInfoChanged " + info);          }      }      private class ControllerMonitor { -        private final ISessionController mController; -        private final ControllerCallbackLink mControllerCallbackLink; +        private final MediaController mController; +        private final ControllerCallback mControllerCallback; -        ControllerMonitor(ISessionController controller) { +        ControllerMonitor(MediaController controller) {              mController = controller; -            mControllerCallbackLink = new ControllerCallbackLink(new ControllerCallbackStub()); +            mControllerCallback = new ControllerCallback();          }          void printUsageMessage() {              try {                  System.out.println("V2Monitoring session " + mController.getTag()                          + "...  available commands: play, pause, next, previous"); -            } catch (RemoteException e) { +            } catch (RuntimeException e) {                  System.out.println("Error trying to monitor session!");              }              System.out.println("(q)uit: finish monitoring"); @@ -248,8 +256,8 @@ public class Media extends BaseCommand {                  @Override                  protected void onLooperPrepared() {                      try { -                        mController.registerCallbackListener(PACKAGE_NAME, mControllerCallbackLink); -                    } catch (RemoteException e) { +                        mController.registerCallback(mControllerCallback); +                    } catch (RuntimeException e) {                          System.out.println("Error registering monitor callback");                      }                  } @@ -291,7 +299,7 @@ public class Media extends BaseCommand {              } finally {                  cbThread.getLooper().quit();                  try { -                    mController.unregisterCallbackListener(mControllerCallbackLink); +                    mController.unregisterCallback(mControllerCallback);                  } catch (Exception e) {                      // ignoring                  } @@ -305,9 +313,9 @@ public class Media extends BaseCommand {              KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode, 0, 0,                      KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD);              try { -                mController.sendMediaButton(PACKAGE_NAME, null, false, down); -                mController.sendMediaButton(PACKAGE_NAME, null, false, up); -            } catch (RemoteException e) { +                mController.dispatchMediaButtonEvent(down); +                mController.dispatchMediaButtonEvent(up); +            } catch (RuntimeException e) {                  System.out.println("Failed to dispatch " + keyCode);              }          } @@ -316,16 +324,13 @@ public class Media extends BaseCommand {      private void runListSessions() {          System.out.println("Sessions:");          try { -            List<IBinder> sessions = mSessionService -                    .getSessions(null, ActivityManager.getCurrentUser()); -            for (IBinder session : sessions) { - -                ISessionController controller = ISessionController.Stub.asInterface(session); +            List<MediaController> controllers = sMediaSessionManager.getActiveSessions(null); +            for (MediaController controller : controllers) {                  if (controller != null) {                      try {                          System.out.println("  tag=" + controller.getTag()                                  + ", package=" + controller.getPackageName()); -                    } catch (RemoteException e) { +                    } catch (RuntimeException e) {                          // ignore                      }                  }  |