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

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

Merge changes from topics "mediasession2_libraryroot",...

Merge changes from topics "mediasession2_libraryroot", "mediasession2_commandbutton", "medianotification_updatable"

* changes:
  MediaSession2: Rename BrowserRoot to LibraryRoot and move to updatable
  MediaSession2: Move MediaSession2.CommandButton to updatable
  MediaSession2: Move MediaSessionService2.MediaNotification to updatable
parents 54f957b1 ddec9db6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ public class MediaBrowser2Impl extends MediaController2Impl implements MediaBrow
    }

    @Override
    public void getBrowserRoot_impl(Bundle rootHints) {
    public void getLibraryRoot_impl(Bundle rootHints) {
        final IMediaSession2 binder = getSessionBinder();
        if (binder != null) {
            try {
+3 −1
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import android.os.ResultReceiver;
import android.support.annotation.GuardedBy;
import android.util.Log;

import com.android.media.MediaSession2Impl.CommandButtonImpl;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -650,7 +652,7 @@ public class MediaController2Impl implements MediaController2Provider {
            }
            List<CommandButton> layout = new ArrayList<>();
            for (int i = 0; i < commandButtonlist.size(); i++) {
                CommandButton button = CommandButton.fromBundle(
                CommandButton button = CommandButtonImpl.fromBundle(
                        browser.getContext(), commandButtonlist.get(i));
                if (button != null) {
                    layout.add(button);
+32 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.media;
import android.app.PendingIntent;
import android.content.Context;
import android.media.MediaLibraryService2;
import android.media.MediaLibraryService2.LibraryRoot;
import android.media.MediaLibraryService2.MediaLibrarySession;
import android.media.MediaLibraryService2.MediaLibrarySessionBuilder;
import android.media.MediaLibraryService2.MediaLibrarySessionCallback;
@@ -112,4 +113,31 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement
                    mSessionActivity, mCallbackExecutor, mCallback).getInstance();
        }
    }

    public static final class LibraryRootImpl implements LibraryRootProvider {
        private final LibraryRoot mInstance;
        private final String mRootId;
        private final Bundle mExtras;

        public LibraryRootImpl(Context context, LibraryRoot instance, String rootId,
                Bundle extras) {
            if (rootId == null) {
                throw new IllegalArgumentException("The root id in BrowserRoot cannot be null. " +
                        "Use null for BrowserRoot instead.");
            }
            mInstance = instance;
            mRootId = rootId;
            mExtras = extras;
        }

        @Override
        public String getRootId_impl() {
            return mRootId;
        }

        @Override
        public Bundle getExtras_impl() {
            return mExtras;
        }
    }
}
 No newline at end of file
+152 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.media;

import static android.media.MediaSession2.COMMAND_CODE_CUSTOM;
import static android.media.SessionToken2.TYPE_LIBRARY_SERVICE;
import static android.media.SessionToken2.TYPE_SESSION;
import static android.media.SessionToken2.TYPE_SESSION_SERVICE;
@@ -50,6 +51,7 @@ import android.media.SessionToken2;
import android.media.VolumeProvider;
import android.media.session.MediaSessionManager;
import android.media.update.MediaSession2Provider;
import android.media.update.MediaSession2Provider.CommandButtonProvider;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.Process;
@@ -550,7 +552,7 @@ public class MediaSession2Impl implements MediaSession2Provider {
                throw new IllegalArgumentException("action shouldn't be null");
            }
            mInstance = instance;
            mCommandCode = MediaSession2.COMMAND_CODE_CUSTOM;
            mCommandCode = COMMAND_CODE_CUSTOM;
            mCustomCommand = action;
            mExtra = extra;
        }
@@ -583,7 +585,7 @@ public class MediaSession2Impl implements MediaSession2Provider {
         */
        public static Command fromBundle_impl(Context context, Bundle command) {
            int code = command.getInt(KEY_COMMAND_CODE);
            if (code != MediaSession2.COMMAND_CODE_CUSTOM) {
            if (code != COMMAND_CODE_CUSTOM) {
                return new Command(context, code);
            } else {
                String customCommand = command.getString(KEY_COMMAND_CUSTOM_COMMAND);
@@ -657,7 +659,7 @@ public class MediaSession2Impl implements MediaSession2Provider {

        @Override
        public boolean hasCommand_impl(int code) {
            if (code == MediaSession2.COMMAND_CODE_CUSTOM) {
            if (code == COMMAND_CODE_CUSTOM) {
                throw new IllegalArgumentException("Use hasCommand(Command) for custom command");
            }
            for (int i = 0; i < mCommands.size(); i++) {
@@ -876,6 +878,153 @@ public class MediaSession2Impl implements MediaSession2Provider {
        }
    }

    public static class CommandButtonImpl implements CommandButtonProvider {
        private static final String KEY_COMMAND
                = "android.media.media_session2.command_button.command";
        private static final String KEY_ICON_RES_ID
                = "android.media.media_session2.command_button.icon_res_id";
        private static final String KEY_DISPLAY_NAME
                = "android.media.media_session2.command_button.display_name";
        private static final String KEY_EXTRA
                = "android.media.media_session2.command_button.extra";
        private static final String KEY_ENABLED
                = "android.media.media_session2.command_button.enabled";

        private final CommandButton mInstance;
        private Command mCommand;
        private int mIconResId;
        private String mDisplayName;
        private Bundle mExtra;
        private boolean mEnabled;

        public CommandButtonImpl(Context context, @Nullable Command command, int iconResId,
                @Nullable String displayName, Bundle extra, boolean enabled) {
            mCommand = command;
            mIconResId = iconResId;
            mDisplayName = displayName;
            mExtra = extra;
            mEnabled = enabled;
            mInstance = new CommandButton(this);
        }

        @Override
        public @Nullable Command getCommand_impl() {
            return mCommand;
        }

        @Override
        public int getIconResId_impl() {
            return mIconResId;
        }

        @Override
        public @Nullable String getDisplayName_impl() {
            return mDisplayName;
        }

        @Override
        public @Nullable Bundle getExtra_impl() {
            return mExtra;
        }

        @Override
        public boolean isEnabled_impl() {
            return mEnabled;
        }

        public @NonNull Bundle toBundle() {
            Bundle bundle = new Bundle();
            bundle.putBundle(KEY_COMMAND, mCommand.toBundle());
            bundle.putInt(KEY_ICON_RES_ID, mIconResId);
            bundle.putString(KEY_DISPLAY_NAME, mDisplayName);
            bundle.putBundle(KEY_EXTRA, mExtra);
            bundle.putBoolean(KEY_ENABLED, mEnabled);
            return bundle;
        }

        public static @Nullable CommandButton fromBundle(Context context, Bundle bundle) {
            if (bundle == null) {
                return null;
            }
            CommandButton.Builder builder = new CommandButton.Builder(context);
            builder.setCommand(Command.fromBundle(context, bundle.getBundle(KEY_COMMAND)));
            builder.setIconResId(bundle.getInt(KEY_ICON_RES_ID, 0));
            builder.setDisplayName(bundle.getString(KEY_DISPLAY_NAME));
            builder.setExtra(bundle.getBundle(KEY_EXTRA));
            builder.setEnabled(bundle.getBoolean(KEY_ENABLED));
            try {
                return builder.build();
            } catch (IllegalStateException e) {
                // Malformed or version mismatch. Return null for now.
                return null;
            }
        }

        /**
         * Builder for {@link CommandButton}.
         */
        public static class BuilderImpl implements CommandButtonProvider.BuilderProvider {
            private final Context mContext;
            private final CommandButton.Builder mInstance;
            private Command mCommand;
            private int mIconResId;
            private String mDisplayName;
            private Bundle mExtra;
            private boolean mEnabled;

            public BuilderImpl(Context context, CommandButton.Builder instance) {
                mContext = context;
                mInstance = instance;
                mEnabled = true;
            }

            @Override
            public CommandButton.Builder setCommand_impl(Command command) {
                mCommand = command;
                return mInstance;
            }

            @Override
            public CommandButton.Builder setIconResId_impl(int resId) {
                mIconResId = resId;
                return mInstance;
            }

            @Override
            public CommandButton.Builder setDisplayName_impl(String displayName) {
                mDisplayName = displayName;
                return mInstance;
            }

            @Override
            public CommandButton.Builder setEnabled_impl(boolean enabled) {
                mEnabled = enabled;
                return mInstance;
            }

            @Override
            public CommandButton.Builder setExtra_impl(Bundle extra) {
                mExtra = extra;
                return mInstance;
            }

            @Override
            public CommandButton build_impl() {
                if (mEnabled && mCommand == null) {
                    throw new IllegalStateException("Enabled button needs Command"
                            + " for controller to invoke the command");
                }
                if (mCommand != null && mCommand.getCommandCode() == COMMAND_CODE_CUSTOM
                        && (mIconResId == 0 || TextUtils.isEmpty(mDisplayName))) {
                    throw new IllegalStateException("Custom commands needs icon and"
                            + " and name to display");
                }
                return new CommandButtonImpl(
                        mContext, mCommand, mIconResId, mDisplayName, mExtra, mEnabled).mInstance;
            }
        }
    }

    public static abstract class BuilderBaseImpl<T extends MediaSession2, C extends SessionCallback>
            implements BuilderBaseProvider<T, C> {
        final Context mContext;
+6 −4
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.media;

import android.content.Context;
import android.media.MediaItem2;
import android.media.MediaLibraryService2.BrowserRoot;
import android.media.MediaLibraryService2.LibraryRoot;
import android.media.MediaLibraryService2.MediaLibrarySessionCallback;
import android.media.MediaSession2;
import android.media.MediaSession2.Command;
@@ -27,6 +27,7 @@ import android.media.MediaSession2.CommandGroup;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.PlaylistParams;
import android.media.PlaybackState2;
import android.media.update.MediaSession2Provider.CommandButtonProvider;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
@@ -36,6 +37,7 @@ import android.support.annotation.GuardedBy;
import android.util.ArrayMap;
import android.util.Log;

import com.android.media.MediaSession2Impl.CommandButtonImpl;
import com.android.media.MediaSession2Impl.ControllerInfoImpl;

import java.lang.ref.WeakReference;
@@ -261,7 +263,7 @@ public class MediaSession2Stub extends IMediaSession2.Stub {
        final MediaSession2Impl sessionImpl = getSession();
        if (!(sessionImpl.getCallback() instanceof MediaLibrarySessionCallback)) {
            if (DEBUG) {
                Log.d(TAG, "Session cannot hand getBrowserRoot()");
                Log.d(TAG, "Session cannot hand getLibraryRoot()");
            }
            return;
        }
@@ -280,7 +282,7 @@ public class MediaSession2Stub extends IMediaSession2.Stub {
            final MediaLibrarySessionCallback libraryCallback =
                    (MediaLibrarySessionCallback) session.getCallback();
            final ControllerInfoImpl controllerImpl = ControllerInfoImpl.from(controller);
            BrowserRoot root = libraryCallback.onGetRoot(controller, rootHints);
            LibraryRoot root = libraryCallback.onGetRoot(controller, rootHints);
            try {
                controllerImpl.getControllerBinder().onGetRootResult(rootHints,
                        root == null ? null : root.getRootId(),
@@ -336,7 +338,7 @@ public class MediaSession2Stub extends IMediaSession2.Stub {
        try {
            List<Bundle> layoutBundles = new ArrayList<>();
            for (int i = 0; i < layout.size(); i++) {
                Bundle bundle = layout.get(i).toBundle();
                Bundle bundle = ((CommandButtonImpl) layout.get(i).getProvider()).toBundle();
                if (bundle != null) {
                    layoutBundles.add(bundle);
                }
Loading