1cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang/* 2cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * Copyright 2018 The Android Open Source Project 3cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * 4cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * you may not use this file except in compliance with the License. 6cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * You may obtain a copy of the License at 7cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * 8cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * http://www.apache.org/licenses/LICENSE-2.0 9cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * 10cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * Unless required by applicable law or agreed to in writing, software 11cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * distributed under the License is distributed on an "AS IS" BASIS, 12cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * See the License for the specific language governing permissions and 14cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang * limitations under the License. 15cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang */ 16cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 17cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kangpackage androidx.media; 18cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 19cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kangimport android.os.Bundle; 20cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 21cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kangimport androidx.annotation.Nullable; 22cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 23cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kangimport java.util.List; 24cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 25cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kangclass MediaInterface2 { 26cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang private MediaInterface2() { 27cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang } 28cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 29cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang // TODO: relocate methods among different interfaces and classes. 30cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang interface SessionPlaybackControl { 31cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void prepare(); 32cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void play(); 33cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void pause(); 34cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void reset(); 35cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 36cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void seekTo(long pos); 37cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 38cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang int getPlayerState(); 39cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang long getCurrentPosition(); 40cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang long getDuration(); 41cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 42cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang long getBufferedPosition(); 43cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang int getBufferingState(); 44cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 45cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang float getPlaybackSpeed(); 46cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void setPlaybackSpeed(float speed); 47cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang } 48cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 49cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang interface SessionPlaylistControl { 50cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void setOnDataSourceMissingHelper(MediaSession2.OnDataSourceMissingHelper helper); 51cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void clearOnDataSourceMissingHelper(); 52cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 53cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang List<MediaItem2> getPlaylist(); 54cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang MediaMetadata2 getPlaylistMetadata(); 55cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void setPlaylist(List<MediaItem2> list, MediaMetadata2 metadata); 56cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void updatePlaylistMetadata(MediaMetadata2 metadata); 57cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 58cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang MediaItem2 getCurrentMediaItem(); 59cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void skipToPlaylistItem(MediaItem2 item); 60cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void skipToPreviousItem(); 61cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void skipToNextItem(); 62cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 63cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void addPlaylistItem(int index, MediaItem2 item); 64cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void removePlaylistItem(MediaItem2 item); 65cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void replacePlaylistItem(int index, MediaItem2 item); 66cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 67cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang int getRepeatMode(); 68cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void setRepeatMode(int repeatMode); 69cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang int getShuffleMode(); 70cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang void setShuffleMode(int shuffleMode); 71cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang } 72cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang 73cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang // Common interface for session2 and controller2 74cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang // TODO: consider to add fastForward, rewind. 75cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang abstract static class SessionPlayer implements SessionPlaybackControl, SessionPlaylistControl { 76cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang abstract void skipForward(); 77cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang abstract void skipBackward(); 78cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang abstract void notifyError(@MediaSession2.ErrorCode int errorCode, @Nullable Bundle extras); 79cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang } 80cc070c306ccc400a93f0b5501bf28591fb002d45Insun Kang} 81