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