1fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/* 2fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Copyright 2018 The Android Open Source Project 3fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 4fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * you may not use this file except in compliance with the License. 6fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * You may obtain a copy of the License at 7fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 8fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * http://www.apache.org/licenses/LICENSE-2.0 9fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 10fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Unless required by applicable law or agreed to in writing, software 11fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * distributed under the License is distributed on an "AS IS" BASIS, 12fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * See the License for the specific language governing permissions and 14fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * limitations under the License. 15fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 16fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 17fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangpackage androidx.media; 18fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 19fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; 20fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 21fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.net.Uri; 22fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.os.Bundle; 23fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.text.TextUtils; 24fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 25fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.NonNull; 26fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.Nullable; 27fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.RestrictTo; 28fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.media.MediaSession2.ControllerInfo; 29fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.media.MediaSession2.SessionCallback; 30fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 31fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport java.util.List; 32fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 33fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/** 34fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Define a command that a {@link MediaController2} can send to a {@link MediaSession2}. 35fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 36fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * If {@link #getCommandCode()} isn't {@link #COMMAND_CODE_CUSTOM}), it's predefined command. 37fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * If {@link #getCommandCode()} is {@link #COMMAND_CODE_CUSTOM}), it's custom command and 38fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #getCustomCommand()} shouldn't be {@code null}. 39fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 40fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangpublic final class SessionCommand2 { 41fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 42fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for the custom command which can be defined by string action in the 43fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCommand2}. 44fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 45fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_CUSTOM = 0; 46fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 47fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 48fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#play()}. 49fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 50fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the player if the session doesn't reject the request 51fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 52fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * SessionCommand2)}. 53fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 54fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYBACK_PLAY = 1; 55fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 56fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 57fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#pause()}. 58fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 59fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the player if the session doesn't reject the request 60fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 61fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * SessionCommand2)}. 62fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 63fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYBACK_PAUSE = 2; 64fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 65fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 66fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#reset()}. 67fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 68fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the player if the session doesn't reject the request 69fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 70fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * SessionCommand2)}. 71fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 72fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYBACK_RESET = 3; 73fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 74fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 75fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#skipToNextItem()}. 76fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 77fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 78fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the {@link SessionCallback#onCommandRequest( 79fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * MediaSession2, ControllerInfo, SessionCommand2)}. 80fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 81fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_NEXT_ITEM = 4; 82fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 83fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 84fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#skipToPreviousItem()}. 85fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 86fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 87fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the {@link SessionCallback#onCommandRequest( 88fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * MediaSession2, ControllerInfo, SessionCommand2)}. 89fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 90fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PREV_ITEM = 5; 91fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 92fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 93fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#prepare()}. 94fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 95fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the player if the session doesn't reject the request 96fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 97fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * SessionCommand2)}. 98fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 99fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYBACK_PREPARE = 6; 100fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 101fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 102fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#fastForward()}. 103fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 104fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_FAST_FORWARD = 7; 105fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 106fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 107fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#rewind()}. 108fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 109fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_REWIND = 8; 110fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 111fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 112fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#seekTo(long)}. 113fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 114fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the player if the session doesn't reject the request 115fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 116fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * SessionCommand2)}. 117fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 118fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYBACK_SEEK_TO = 9; 119fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 120fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 121fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for both {@link MediaController2#setVolumeTo(int, int)}. 122fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 123fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would set the device volume or send to the volume provider directly if the session 124fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * doesn't reject the request through the 125fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 126fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 127fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_VOLUME_SET_VOLUME = 10; 128fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 129fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 130fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for both {@link MediaController2#adjustVolume(int, int)}. 131fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 132fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would adjust the device volume or send to the volume provider directly if the session 133fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * doesn't reject the request through the 134fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 135fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 136fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_VOLUME_ADJUST_VOLUME = 11; 137fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 138fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 139fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#skipToPlaylistItem(MediaItem2)}. 140fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 141fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 142fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 143fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 144fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 145fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM = 12; 146fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 147fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 148fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#setShuffleMode(int)}. 149fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 150fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 151fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 152fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 153fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 154fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SET_SHUFFLE_MODE = 13; 155fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 156fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 157fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#setRepeatMode(int)}. 158fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 159fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 160fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 161fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 162fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 163fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SET_REPEAT_MODE = 14; 164fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 165fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 166fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}. 167fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 168fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 169fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 170fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 171fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 172fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_ADD_ITEM = 15; 173fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 174fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 175fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}. 176fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 177fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 178fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 179fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 180fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 181fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_REMOVE_ITEM = 16; 182fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 183fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 184fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#replacePlaylistItem(int, MediaItem2)}. 185fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 186fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 187fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 188fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 189fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 190fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_REPLACE_ITEM = 17; 191fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 192fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 193fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#getPlaylist()}. This will expose metadata 194fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * information to the controller. 195fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 196fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_GET_LIST = 18; 197fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 198fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 199fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2)}. 200fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 201fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 202fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 203fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 204fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 205fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SET_LIST = 19; 206fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 207fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 208fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#getPlaylistMetadata()}. This will expose 209fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * metadata information to the controller. 210fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 211fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_GET_LIST_METADATA = 20; 212fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 213fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 214fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}. 215fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * <p> 216fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command would be sent directly to the playlist agent if the session doesn't reject the 217fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * request through the 218fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}. 219fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 220fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_PLAYLIST_SET_LIST_METADATA = 21; 221fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 222fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 223088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim * Command code for {@link MediaController2#getCurrentMediaItem()}. This will expose 224088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim * metadata information to the controller. 225088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim */ 226088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim public static final int COMMAND_CODE_PLAYLIST_GET_CURRENT_MEDIA_ITEM = 20; 227088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim 228088a4052ef5856e551bac28dbc939a62627b8a88Jaewan Kim /** 229fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#playFromMediaId(String, Bundle)}. 230fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 231fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID = 22; 232fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 233fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 234fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#playFromUri(Uri, Bundle)}. 235fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 236fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PLAY_FROM_URI = 23; 237fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 238fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 239fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#playFromSearch(String, Bundle)}. 240fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 241fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PLAY_FROM_SEARCH = 24; 242fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 243fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 244fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#prepareFromMediaId(String, Bundle)}. 245fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 246fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID = 25; 247fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 248fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 249fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#prepareFromUri(Uri, Bundle)}. 250fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 251fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PREPARE_FROM_URI = 26; 252fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 253fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 254fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#prepareFromSearch(String, Bundle)}. 255fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 256fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH = 27; 257fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 258fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 259fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaController2#setRating(String, Rating2)}. 260fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 261fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_SESSION_SET_RATING = 28; 262fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 263fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 264fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim * Command code for {@link MediaController2#subscribeRoutesInfo()} 265fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim */ 266fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim public static final int COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO = 36; 267fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim 268fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim /** 269fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim * Command code for {@link MediaController2#unsubscribeRoutesInfo()} 270fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim */ 271fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim public static final int COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO = 37; 272fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim 273fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim /** 274fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim * Command code for {@link MediaController2#selectRoute(Bundle)}} 275fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim */ 276fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim public static final int COMMAND_CODE_SESSION_SELECT_ROUTE = 38; 277fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim 278fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim /** 279fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#getChildren(String, int, int, Bundle)}. 280fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 281fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_GET_CHILDREN = 29; 282fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 283fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 284fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#getItem(String)}. 285fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 286fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_GET_ITEM = 30; 287fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 288fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 289fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#getLibraryRoot(Bundle)}. 290fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 291fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT = 31; 292fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 293fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 294fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#getSearchResult(String, int, int, Bundle)}. 295fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 296fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT = 32; 297fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 298fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 299fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#search(String, Bundle)}. 300fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 301fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_SEARCH = 33; 302fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 303fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 304fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#subscribe(String, Bundle)}. 305fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 306fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_SUBSCRIBE = 34; 307fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 308fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 309fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Command code for {@link MediaBrowser2#unsubscribe(String)}. 310fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 311fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int COMMAND_CODE_LIBRARY_UNSUBSCRIBE = 35; 312fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 313e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon /** 314e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon * Command code for {@link MediaController2#setPlaybackSpeed(float)}}. 315e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon * <p> 316e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon * Command would be sent directly to the player if the session doesn't reject the request 317e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, 318e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon * SessionCommand2)}. 319e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon */ 320e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon public static final int COMMAND_CODE_PLAYBACK_SET_SPEED = 39; 321e18fafc56c49f683278d91e16a7246c7b1e01badHyundo Moon 322fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String KEY_COMMAND_CODE = 323fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang "android.media.media_session2.command.command_code"; 324fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String KEY_COMMAND_CUSTOM_COMMAND = 325fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang "android.media.media_session2.command.custom_command"; 326fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String KEY_COMMAND_EXTRAS = 327fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang "android.media.media_session2.command.extras"; 328fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 329fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private final int mCommandCode; 330fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang // Nonnull if it's custom command 331fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private final String mCustomCommand; 332fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private final Bundle mExtras; 333fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 334fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 335fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Constructor for creating a predefined command. 336fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 337fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param commandCode A command code for predefined command. 338fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 339fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public SessionCommand2(int commandCode) { 340fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (commandCode == COMMAND_CODE_CUSTOM) { 341fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang throw new IllegalArgumentException("commandCode shouldn't be COMMAND_CODE_CUSTOM"); 342fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 343fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mCommandCode = commandCode; 344fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mCustomCommand = null; 345fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mExtras = null; 346fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 347fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 348fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 349fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Constructor for creating a custom command. 350fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 351fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param action The action of this custom command. 352fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param extras An extra bundle for this custom command. 353fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 354fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public SessionCommand2(@NonNull String action, @Nullable Bundle extras) { 355fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (action == null) { 356fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang throw new IllegalArgumentException("action shouldn't be null"); 357fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 358fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mCommandCode = COMMAND_CODE_CUSTOM; 359fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mCustomCommand = action; 360fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mExtras = extras; 361fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 362fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 363fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 364fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Gets the command code of a predefined command. 365fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * This will return {@link #COMMAND_CODE_CUSTOM} for a custom command. 366fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 367fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public int getCommandCode() { 368fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mCommandCode; 369fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 370fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 371fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 372fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Gets the action of a custom command. 373fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * This will return {@code null} for a predefined command. 374fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 375fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public @Nullable String getCustomCommand() { 376fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mCustomCommand; 377fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 378fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 379fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 380fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Gets the extra bundle of a custom command. 381fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * This will return {@code null} for a predefined command. 382fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 383fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public @Nullable Bundle getExtras() { 384fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mExtras; 385fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 386fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 387fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 388fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a new {@link Bundle} instance from the command 389fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @hide 390fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 391fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @RestrictTo(LIBRARY_GROUP) 392fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public Bundle toBundle() { 393fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Bundle bundle = new Bundle(); 394fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang bundle.putInt(KEY_COMMAND_CODE, mCommandCode); 395fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang bundle.putString(KEY_COMMAND_CUSTOM_COMMAND, mCustomCommand); 396fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang bundle.putBundle(KEY_COMMAND_EXTRAS, mExtras); 397fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return bundle; 398fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 399fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 400fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 401fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a new {@link SessionCommand2} instance from the Bundle 402fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @hide 403fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 404fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @RestrictTo(LIBRARY_GROUP) 405fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static SessionCommand2 fromBundle(@NonNull Bundle command) { 406fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (command == null) { 407fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang throw new IllegalArgumentException("command shouldn't be null"); 408fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 409fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang int code = command.getInt(KEY_COMMAND_CODE); 410fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (code != COMMAND_CODE_CUSTOM) { 411fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new SessionCommand2(code); 412fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } else { 413fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang String customCommand = command.getString(KEY_COMMAND_CUSTOM_COMMAND); 414fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (customCommand == null) { 415fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 416fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 417fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new SessionCommand2(customCommand, command.getBundle(KEY_COMMAND_EXTRAS)); 418fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 419fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 420fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 421fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Override 422fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public boolean equals(Object obj) { 423fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (!(obj instanceof SessionCommand2)) { 424fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return false; 425fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 426fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang SessionCommand2 other = (SessionCommand2) obj; 427fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mCommandCode == other.mCommandCode 428fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang && TextUtils.equals(mCustomCommand, other.mCustomCommand); 429fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 430fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 431fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Override 432fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public int hashCode() { 433fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang final int prime = 31; 434fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return ((mCustomCommand != null) ? mCustomCommand.hashCode() : 0) * prime + mCommandCode; 435fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 436fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang} 437