/*
* MediaControl
* Connect SDK
*
* Copyright (c) 2014 LG Electronics.
* Created by Hyun Kook Khang on 19 Jan 2014
*
* 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.connectsdk.service.capability;
import com.connectsdk.service.capability.listeners.ResponseListener;
import com.connectsdk.service.command.ServiceSubscription;
public interface MediaControl extends CapabilityMethods {
public final static String Any = "MediaControl.Any";
public final static String Play = "MediaControl.Play";
public final static String Pause = "MediaControl.Pause";
public final static String Stop = "MediaControl.Stop";
public final static String Rewind = "MediaControl.Rewind";
public final static String FastForward = "MediaControl.FastForward";
public final static String Seek = "MediaControl.Seek";
public final static String Duration = "MediaControl.Duration";
public final static String PlayState = "MediaControl.PlayState";
public final static String PlayState_Subscribe = "MediaControl.PlayState.Subscribe";
public final static String Position = "MediaControl.Position";
/**
* This capability is deprecated. Use `PlaylistControl.Previous` instead.
*/
@Deprecated
public final static String Previous = "MediaControl.Previous";
/**
* This capability is deprecated. Use `PlaylistControl.Next` instead.
*/
@Deprecated
public final static String Next = "MediaControl.Next";
public static final int PLAYER_STATE_UNKNOWN = 0;
public static final int PLAYER_STATE_IDLE = 1;
public static final int PLAYER_STATE_PLAYING = 2;
public static final int PLAYER_STATE_PAUSED = 3;
public static final int PLAYER_STATE_BUFFERING = 4;
public final static String[] Capabilities = {
Play,
Pause,
Stop,
Rewind,
FastForward,
Seek,
Previous,
Next,
Duration,
PlayState,
PlayState_Subscribe,
Position,
};
/**
* Enumerates possible playback status
*/
public enum PlayStateStatus {
/**
* Unknown state
*/
Unknown,
/**
* Media source is not set.
*/
Idle,
/**
* Media is playing.
*/
Playing,
/**
* Media is paused.
*/
Paused,
/**
* Media is buffering on the first screen device (e.g. on the TV)
*/
Buffering,
/**
* Playback is finished.
*/
Finished;
/**
* Converts int value into PlayStateStatus
* @param playerState int value
* @return PlayStateStatus
*/
public static PlayStateStatus convertPlayerStateToPlayStateStatus(int playerState) {
PlayStateStatus status = PlayStateStatus.Unknown;
switch (playerState) {
case PLAYER_STATE_BUFFERING:
status = PlayStateStatus.Buffering;
break;
case PLAYER_STATE_IDLE:
status = PlayStateStatus.Finished;
break;
case PLAYER_STATE_PAUSED:
status = PlayStateStatus.Paused;
break;
case PLAYER_STATE_PLAYING:
status = PlayStateStatus.Playing;
break;
case PLAYER_STATE_UNKNOWN:
default:
status = PlayStateStatus.Unknown;
break;
}
return status;
}
/**
* Converts String value into PlayStateStatus
* @param transportState String value
* @return PlayStateStatus
*/
public static PlayStateStatus convertTransportStateToPlayStateStatus(String transportState) {
PlayStateStatus status = PlayStateStatus.Unknown;
if (transportState.equals("STOPPED")) {
status = PlayStateStatus.Finished;
}
else if (transportState.equals("PLAYING")) {
status = PlayStateStatus.Playing;
}
else if (transportState.equals("TRANSITIONING")) {
status = PlayStateStatus.Buffering;
}
else if (transportState.equals("PAUSED_PLAYBACK")) {
status = PlayStateStatus.Paused;
}
else if (transportState.equals("PAUSED_RECORDING")) {
}
else if (transportState.equals("RECORDING")) {
}
else if (transportState.equals("NO_MEDIA_PRESENT")) {
}
return status;
}
}
/**
* Get MediaControl implementation
* @return MediaControl
*/
public MediaControl getMediaControl();
/**
* Get a capability priority for current implementation
* @return CapabilityPriorityLevel
*/
public CapabilityPriorityLevel getMediaControlCapabilityLevel();
public void play(ResponseListener<Object> listener);
public void pause(ResponseListener<Object> listener);
public void stop(ResponseListener<Object> listener);
public void rewind(ResponseListener<Object> listener);
public void fastForward(ResponseListener<Object> listener);
/**
* This method is deprecated.
* Use `PlaylistControl#previous(ResponseListener<Object> listener)` instead.
*/
@Deprecated
public void previous(ResponseListener<Object> listener);
/**
* This method is deprecated.
* Use `PlaylistControl#next(ResponseListener<Object> listener)` instead.
*/
@Deprecated
public void next(ResponseListener<Object> listener);
/**
* @param position The new position, in milliseconds from the beginning of the stream
* @param listener (optional) ResponseListener< Object > with methods to be called on success
* or failure
*/
public void seek(long position, ResponseListener<Object> listener);
/**
* Get the current media duration in milliseconds
*/
public void getDuration(DurationListener listener);
/**
* Get the current playback position in milliseconds
*/
public void getPosition(PositionListener listener);
/**
* Get the current state of playback
*/
public void getPlayState(PlayStateListener listener);
/**
* Subscribe for playback state changes
* @param listener receives play state notifications
* @return ServiceSubscription<PlayStateListener>
*/
public ServiceSubscription<PlayStateListener> subscribePlayState(PlayStateListener listener);
/**
* Success block that is called upon any change in a media file's play state.
*
* Passes a PlayStateStatus enum of the current media file
*/
public static interface PlayStateListener extends ResponseListener<PlayStateStatus> { }
/**
* Success block that is called upon successfully getting the media file's current playhead position.
*
* Passes the position of the current playhead position of the current media file, in seconds
*/
public static interface PositionListener extends ResponseListener<Long> { }
/**
* Success block that is called upon successfully getting the media file's duration.
*
* Passes the duration of the current media file, in seconds
*/
public static interface DurationListener extends ResponseListener<Long> { }
}