Loading packages/MediaComponents/Android.mk +4 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,10 @@ LOCAL_CERTIFICATE := platform # TODO: Use System SDK once public APIs are approved # LOCAL_SDK_VERSION := system_current LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ $(call all-Iaidl-files-under, src) LOCAL_PROGUARD_FLAG_FILES := proguard.cfg LOCAL_MULTILIB := first Loading packages/MediaComponents/src/com/android/media/IMediaSession2.aidl 0 → 100644 +55 −0 Original line number Diff line number Diff line /* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.media; import android.os.Bundle; import android.os.ResultReceiver; import com.android.media.IMediaSession2Callback; /** * Interface to MediaSession2. * <p> * Keep this interface oneway. Otherwise a malicious app may implement fake version of this, * and holds calls from session to make session owner(s) frozen. */ interface IMediaSession2 { // TODO(jaewan): add onCommand() to send private command // TODO(jaewan): Due to the nature of oneway calls, APIs can be called in out of order // Add id for individual calls to address this. // TODO(jaewan): We may consider to add another binder just for the connection // not to expose other methods to the controller whose connection wasn't accepted. // But this would be enough for now because it's the same as existing // MediaBrowser and MediaBrowserService. void connect(String callingPackage, IMediaSession2Callback callback); void release(IMediaSession2Callback caller); ////////////////////////////////////////////////////////////////////////////////////////////// // send command ////////////////////////////////////////////////////////////////////////////////////////////// void sendCommand(IMediaSession2Callback caller, in Bundle command, in Bundle args); void sendTransportControlCommand(IMediaSession2Callback caller, int commandCode, in Bundle args); void sendCustomCommand(IMediaSession2Callback caller, in Bundle command, in Bundle args, in ResultReceiver receiver); ////////////////////////////////////////////////////////////////////////////////////////////// // Get library service specific ////////////////////////////////////////////////////////////////////////////////////////////// void getBrowserRoot(IMediaSession2Callback callback, in Bundle rootHints); } packages/MediaComponents/src/com/android/media/IMediaSession2Callback.aidl 0 → 100644 +56 −0 Original line number Diff line number Diff line /* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.media; import android.os.Bundle; import android.os.ResultReceiver; import com.android.media.IMediaSession2; /** * Interface from MediaSession2 to MediaSession2Record. * <p> * Keep this interface oneway. Otherwise a malicious app may implement fake version of this, * and holds calls from session to make session owner(s) frozen. */ oneway interface IMediaSession2Callback { void onPlaybackStateChanged(in Bundle state); void onPlaylistParamsChanged(in Bundle params); /** * Called only when the controller is created with service's token. * * @param sessionBinder {@code null} if the connect is rejected or is disconnected. a session * binder if the connect is accepted. * @param commands initially allowed commands. */ // TODO(jaewan): Also need to pass flags for allowed actions for permission check. // For example, a media can allow setRating only for whitelisted apps // it's better for controller to know such information in advance. // Follow-up TODO: Add similar functions to the session. // TODO(jaewan): Is term 'accepted/rejected' correct? For permission, 'grant' is used. void onConnectionChanged(IMediaSession2 sessionBinder, in Bundle commandGroup); void onCustomLayoutChanged(in List<Bundle> commandButtonlist); void sendCustomCommand(in Bundle command, in Bundle args, in ResultReceiver receiver); ////////////////////////////////////////////////////////////////////////////////////////////// // Browser sepcific ////////////////////////////////////////////////////////////////////////////////////////////// void onGetRootResult(in Bundle rootHints, String rootMediaId, in Bundle rootExtra); } packages/MediaComponents/src/com/android/media/MediaBrowser2Impl.java +0 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.media; import android.content.Context; import android.media.IMediaSession2; import android.media.MediaBrowser2; import android.media.MediaBrowser2.BrowserCallback; import android.media.MediaSession2.CommandButton; Loading packages/MediaComponents/src/com/android/media/MediaController2Impl.java +0 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.media.IMediaSession2; import android.media.IMediaSession2Callback; import android.media.MediaController2.PlaybackInfo; import android.media.MediaItem2; import android.media.MediaSession2; Loading Loading
packages/MediaComponents/Android.mk +4 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,10 @@ LOCAL_CERTIFICATE := platform # TODO: Use System SDK once public APIs are approved # LOCAL_SDK_VERSION := system_current LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ $(call all-Iaidl-files-under, src) LOCAL_PROGUARD_FLAG_FILES := proguard.cfg LOCAL_MULTILIB := first Loading
packages/MediaComponents/src/com/android/media/IMediaSession2.aidl 0 → 100644 +55 −0 Original line number Diff line number Diff line /* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.media; import android.os.Bundle; import android.os.ResultReceiver; import com.android.media.IMediaSession2Callback; /** * Interface to MediaSession2. * <p> * Keep this interface oneway. Otherwise a malicious app may implement fake version of this, * and holds calls from session to make session owner(s) frozen. */ interface IMediaSession2 { // TODO(jaewan): add onCommand() to send private command // TODO(jaewan): Due to the nature of oneway calls, APIs can be called in out of order // Add id for individual calls to address this. // TODO(jaewan): We may consider to add another binder just for the connection // not to expose other methods to the controller whose connection wasn't accepted. // But this would be enough for now because it's the same as existing // MediaBrowser and MediaBrowserService. void connect(String callingPackage, IMediaSession2Callback callback); void release(IMediaSession2Callback caller); ////////////////////////////////////////////////////////////////////////////////////////////// // send command ////////////////////////////////////////////////////////////////////////////////////////////// void sendCommand(IMediaSession2Callback caller, in Bundle command, in Bundle args); void sendTransportControlCommand(IMediaSession2Callback caller, int commandCode, in Bundle args); void sendCustomCommand(IMediaSession2Callback caller, in Bundle command, in Bundle args, in ResultReceiver receiver); ////////////////////////////////////////////////////////////////////////////////////////////// // Get library service specific ////////////////////////////////////////////////////////////////////////////////////////////// void getBrowserRoot(IMediaSession2Callback callback, in Bundle rootHints); }
packages/MediaComponents/src/com/android/media/IMediaSession2Callback.aidl 0 → 100644 +56 −0 Original line number Diff line number Diff line /* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.media; import android.os.Bundle; import android.os.ResultReceiver; import com.android.media.IMediaSession2; /** * Interface from MediaSession2 to MediaSession2Record. * <p> * Keep this interface oneway. Otherwise a malicious app may implement fake version of this, * and holds calls from session to make session owner(s) frozen. */ oneway interface IMediaSession2Callback { void onPlaybackStateChanged(in Bundle state); void onPlaylistParamsChanged(in Bundle params); /** * Called only when the controller is created with service's token. * * @param sessionBinder {@code null} if the connect is rejected or is disconnected. a session * binder if the connect is accepted. * @param commands initially allowed commands. */ // TODO(jaewan): Also need to pass flags for allowed actions for permission check. // For example, a media can allow setRating only for whitelisted apps // it's better for controller to know such information in advance. // Follow-up TODO: Add similar functions to the session. // TODO(jaewan): Is term 'accepted/rejected' correct? For permission, 'grant' is used. void onConnectionChanged(IMediaSession2 sessionBinder, in Bundle commandGroup); void onCustomLayoutChanged(in List<Bundle> commandButtonlist); void sendCustomCommand(in Bundle command, in Bundle args, in ResultReceiver receiver); ////////////////////////////////////////////////////////////////////////////////////////////// // Browser sepcific ////////////////////////////////////////////////////////////////////////////////////////////// void onGetRootResult(in Bundle rootHints, String rootMediaId, in Bundle rootExtra); }
packages/MediaComponents/src/com/android/media/MediaBrowser2Impl.java +0 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.media; import android.content.Context; import android.media.IMediaSession2; import android.media.MediaBrowser2; import android.media.MediaBrowser2.BrowserCallback; import android.media.MediaSession2.CommandButton; Loading
packages/MediaComponents/src/com/android/media/MediaController2Impl.java +0 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.media.IMediaSession2; import android.media.IMediaSession2Callback; import android.media.MediaController2.PlaybackInfo; import android.media.MediaItem2; import android.media.MediaSession2; Loading