Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ce7f8c3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove direct use of ISessionController in media cmd"

parents 96583d40 c8b15b6b
Loading
Loading
Loading
Loading
+34 −29
Original line number Diff line number Diff line
@@ -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
                    }
                }