| /* |
| * Copyright (C) 2013 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 androidx.mediarouter.media; |
| |
| import android.content.Intent; |
| import android.os.Messenger; |
| |
| /** |
| * Defines the communication protocol for media route provider services. |
| */ |
| abstract class MediaRouteProviderProtocol { |
| /** |
| * The {@link Intent} that must be declared as handled by the service. |
| * Put this in your manifest. |
| */ |
| public static final String SERVICE_INTERFACE = |
| "android.media.MediaRouteProviderService"; |
| |
| /* |
| * Messages sent from the client to the service. |
| * DO NOT RENUMBER THESE! |
| */ |
| |
| /** (client v1) |
| * Register client. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : client version |
| */ |
| public static final int CLIENT_MSG_REGISTER = 1; |
| |
| /** (client v1) |
| * Unregister client. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| */ |
| public static final int CLIENT_MSG_UNREGISTER = 2; |
| |
| /** (client v1) |
| * Create route controller. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_ROUTE_ID : route id string |
| */ |
| public static final int CLIENT_MSG_CREATE_ROUTE_CONTROLLER = 3; |
| |
| /** (client v1) |
| * Release route controller. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| */ |
| public static final int CLIENT_MSG_RELEASE_ROUTE_CONTROLLER = 4; |
| |
| /** (client v1) |
| * Select route. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| */ |
| public static final int CLIENT_MSG_SELECT_ROUTE = 5; |
| |
| /** (client v1) |
| * Unselect route. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| */ |
| public static final int CLIENT_MSG_UNSELECT_ROUTE = 6; |
| |
| /** (client v1) |
| * Set route volume. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_VOLUME : volume integer |
| */ |
| public static final int CLIENT_MSG_SET_ROUTE_VOLUME = 7; |
| |
| /** (client v1) |
| * Update route volume. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_VOLUME : volume delta integer |
| */ |
| public static final int CLIENT_MSG_UPDATE_ROUTE_VOLUME = 8; |
| |
| /** (client v1) |
| * Route control request. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - obj : media control intent |
| */ |
| public static final int CLIENT_MSG_ROUTE_CONTROL_REQUEST = 9; |
| |
| /** (client v1) |
| * Sets the discovery request. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - obj : discovery request bundle, or null if none |
| */ |
| public static final int CLIENT_MSG_SET_DISCOVERY_REQUEST = 10; |
| |
| /** (client v3) |
| * Create dynamic group route controller. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_MEMBER_ROUTE_ID : initial member route id string |
| */ |
| public static final int CLIENT_MSG_CREATE_DYNAMIC_GROUP_ROUTE_CONTROLLER = 11; |
| |
| /** (client v3) |
| * Adds a member route to a dynamic group route. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_MEMBER_ROUTE_ID : member route id to be added |
| */ |
| public static final int CLIENT_MSG_ADD_MEMBER_ROUTE = 12; |
| |
| /** (client v3) |
| * Removes a member route from a dynamic group route. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_MEMBER_ROUTE_ID : member route id to be removed |
| */ |
| public static final int CLIENT_MSG_REMOVE_MEMBER_ROUTE = 13; |
| |
| /** (client v3) |
| * Updates member routes of a dynamic group route. |
| * - replyTo : client messenger |
| * - arg1 : request id |
| * - arg2 : route controller id |
| * - CLIENT_DATA_MEMBER_ROUTE_IDS : array list of member route ids |
| */ |
| public static final int CLIENT_MSG_UPDATE_MEMBER_ROUTES = 14; |
| |
| public static final String CLIENT_DATA_ROUTE_ID = "routeId"; |
| public static final String CLIENT_DATA_ROUTE_LIBRARY_GROUP = "routeGroupId"; |
| public static final String CLIENT_DATA_VOLUME = "volume"; |
| public static final String CLIENT_DATA_UNSELECT_REASON = "unselectReason"; |
| public static final String CLIENT_DATA_MEMBER_ROUTE_IDS = "memberRouteIds"; |
| public static final String CLIENT_DATA_MEMBER_ROUTE_ID = "memberRouteId"; |
| public static final String CLIENT_DATA_PROVIDER_DESCRIPTOR = "providerDescriptor"; |
| public static final String CLIENT_DATA_CONTROLLER_INFO = "controllerInfo"; |
| public static final String CLIENT_DATA_CONTROLLER_ID = "controllerId"; |
| |
| public static final String DATA_KEY_GROUPABLE_SECION_TITLE = "groupableTitle"; |
| public static final String DATA_KEY_TRANSFERABLE_SECTION_TITLE = "transferableTitle"; |
| public static final String DATA_KEY_DYNAMIC_ROUTE_DESCRIPTORS = "dynamicRoutes"; |
| |
| /* |
| * Messages sent from the service to the client. |
| * DO NOT RENUMBER THESE! |
| */ |
| |
| /** (service v1) |
| * Generic failure sent in response to any unrecognized or malformed request. |
| * - arg1 : request id |
| */ |
| public static final int SERVICE_MSG_GENERIC_FAILURE = 0; |
| |
| /** (service v1) |
| * Generic failure sent in response to a successful message. |
| * - arg1 : request id |
| */ |
| public static final int SERVICE_MSG_GENERIC_SUCCESS = 1; |
| |
| /** (service v1) |
| * Registration succeeded. |
| * - arg1 : request id |
| * - arg2 : server version |
| * - obj : route provider descriptor bundle, or null |
| */ |
| public static final int SERVICE_MSG_REGISTERED = 2; |
| |
| /** (service v1) |
| * Route control request success result. |
| * - arg1 : request id |
| * - obj : result data bundle, or null |
| */ |
| public static final int SERVICE_MSG_CONTROL_REQUEST_SUCCEEDED = 3; |
| |
| /** (service v1) |
| * Route control request failure result. |
| * - arg1 : request id |
| * - obj : result data bundle, or null |
| * - SERVICE_DATA_ERROR: error message |
| */ |
| public static final int SERVICE_MSG_CONTROL_REQUEST_FAILED = 4; |
| |
| /** (service v1) |
| * Route provider descriptor changed. (unsolicited event) |
| * - arg1 : reserved (0) |
| * - obj : route provider descriptor bundle, or null |
| */ |
| public static final int SERVICE_MSG_DESCRIPTOR_CHANGED = 5; |
| |
| /** (service v2) |
| * Dynamic route controller created. Sends back related data. |
| * - arg1 : request id |
| * - arg2 : service version |
| * - obj : bundle |
| * - CLIENT_DATA_ROUTE_ID: (string) dynamic group route id |
| * - DATA_KEY_GROUPABLE_SECION_TITLE: (string) groupable section title |
| * - DATA_KEY_TRANSFERABLE_SECTION_TITLE: (string) transferable section title |
| */ |
| public static final int SERVICE_MSG_DYNAMIC_ROUTE_CREATED = 6; |
| |
| /** (service v2) |
| * Dynamic route descriptors changed. (unsolicited event) |
| * - arg1 : reserved (0) |
| * - arg2 : controllerId |
| * - obj : bundle |
| * - DATA_KEY_DYNAMIC_ROUTE_DESCRIPTORS: (list of bundle) |
| */ |
| public static final int SERVICE_MSG_DYNAMIC_ROUTE_DESCRIPTORS_CHANGED = 7; |
| |
| /** (service v3) |
| * Dynamic route controller created without any request. (unsolicited event) |
| * - arg1 : reserved (0) |
| * - arg2 : service version |
| * - obj : bundle |
| * - CLIENT_DATA_PROVIDER_DESCRIPTOR: (bundle) provider descriptor bundle. |
| * - CLIENT_DATA_CONTROLLER_INFO: (bundle) Information of the new controller which |
| * includes following items: |
| * - CLIENT_DATA_ROUTE_ID: (string) dynamic group route id |
| * - CLIENT_DATA_CONTROLLER_ID: (int) the controller id |
| * - DATA_KEY_GROUPABLE_SECION_TITLE: (string) groupable section title |
| * - DATA_KEY_TRANSFERABLE_SECTION_TITLE: (string) transferable section title |
| */ |
| public static final int SERVICE_MSG_DYNAMIC_ROUTE_CREATED_WITHOUT_REQUEST = 8; |
| |
| public static final String SERVICE_DATA_ERROR = "error"; |
| |
| /* |
| * Recognized client version numbers. (Reserved for future use.) |
| * DO NOT RENUMBER THESE! |
| */ |
| |
| /** |
| * The client version used from the beginning. |
| */ |
| public static final int CLIENT_VERSION_1 = 1; |
| |
| /** |
| * The client version used from support library v24.1.0. |
| */ |
| public static final int CLIENT_VERSION_2 = 2; |
| |
| /** |
| * The client version used from androidx 1.0.0. |
| */ |
| public static final int CLIENT_VERSION_3 = 3; |
| |
| /** |
| * The client version used from androidx 1.2.0. |
| * From this version, framework MediaRouter2 is used to support transfer. |
| */ |
| public static final int CLIENT_VERSION_4 = 4; |
| |
| /** |
| * The current client version. |
| */ |
| public static final int CLIENT_VERSION_CURRENT = CLIENT_VERSION_4; |
| |
| /* |
| * Recognized server version numbers. (Reserved for future use.) |
| * DO NOT RENUMBER THESE! |
| */ |
| |
| /** |
| * The service version used from the beginning. |
| */ |
| public static final int SERVICE_VERSION_1 = 1; |
| |
| /** |
| * The service version used from androidx 1.0.0. |
| */ |
| public static final int SERVICE_VERSION_2 = 2; |
| |
| /** |
| * The service version used from androidx 1.2.0. |
| * From this version, framework MediaRoute2ProviderService is used to support transfer. |
| */ |
| public static final int SERVICE_VERSION_3 = 3; |
| |
| /** |
| * The current service version. |
| */ |
| public static final int SERVICE_VERSION_CURRENT = SERVICE_VERSION_3; |
| |
| static final int CLIENT_VERSION_START = CLIENT_VERSION_1; |
| |
| /** |
| * Returns true if the messenger object is valid. |
| * <p> |
| * The messenger constructor and unparceling code does not check whether the |
| * provided IBinder is a valid IMessenger object. As a result, it's possible |
| * for a peer to send an invalid IBinder that will result in crashes downstream. |
| * This method checks that the messenger is in a valid state. |
| * </p> |
| */ |
| public static boolean isValidRemoteMessenger(Messenger messenger) { |
| try { |
| return messenger != null && messenger.getBinder() != null; |
| } catch (NullPointerException ex) { |
| // If the messenger was constructed with a binder interface other than |
| // IMessenger then the call to getBinder() will crash with an NPE. |
| return false; |
| } |
| } |
| |
| private MediaRouteProviderProtocol() { |
| } |
| } |