blob: 062e83008677e03dbb59ecfb9f066e7f07f6bddc [file] [log] [blame]
/*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* 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.matter.tv.server.tvapp;
import android.util.Log;
/** Stub implement of MediaPlaybackManager, TV manufacture should have there own implements */
public class MediaPlaybackManagerStub implements MediaPlaybackManager {
private final String TAG = MediaPlaybackManagerStub.class.getSimpleName();
private int endpoint;
private int playbackState = PLAYBACK_STATE_PLAYING;
private int playbackSpeed = 1;
private long playbackPosition = 0;
private long playbackDuration = 5 * 60 * 1000;
private long startTime = 100;
private static int playbackMaxForwardSpeed = 10;
private static int playbackMaxRewindSpeed = -10;
public MediaPlaybackManagerStub(int endpoint) {
this.endpoint = endpoint;
}
@Override
public long getAttributes(int attributesId) {
switch (attributesId) {
case ATTRIBUTE_PLAYBACK_STATE:
Log.d(TAG, "getAttributes CurrentState at " + endpoint);
return playbackState;
case ATTRIBUTE_PLAYBACK_START_TIME:
Log.d(TAG, "getAttributes StartTime at " + endpoint);
return startTime;
case ATTRIBUTE_PLAYBACK_DURATION:
Log.d(TAG, "getAttributes Duration at " + endpoint);
return playbackDuration;
case ATTRIBUTE_PLAYBACK_SPEED:
Log.d(
TAG,
"getAttributes SampledPosition PlaybackSpeed " + playbackSpeed + " at " + endpoint);
return playbackSpeed;
case ATTRIBUTE_PLAYBACK_SEEK_RANGE_END:
Log.d(
TAG,
"getAttributes SampledPosition SeekRangeEnd " + playbackDuration + " at " + endpoint);
return playbackDuration;
case ATTRIBUTE_PLAYBACK_SEEK_RANGE_START:
Log.d(TAG, "getAttributes SampledPosition SeekRangeStart " + startTime + " at " + endpoint);
return startTime;
}
return -1;
}
@Override
public int request(int cmd, long parameter) {
long newPosition;
switch (cmd) {
case REQUEST_PLAY:
Log.d(TAG, "request Play at " + endpoint);
playbackState = PLAYBACK_STATE_PLAYING;
playbackSpeed = 1;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_PAUSE:
Log.d(TAG, "request pause at " + endpoint);
playbackState = PLAYBACK_STATE_PAUSED;
playbackSpeed = 0;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_STOP:
Log.d(TAG, "request stop at " + endpoint);
playbackState = PLAYBACK_STATE_NOT_PLAYING;
playbackSpeed = 0;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_START_OVER:
Log.d(TAG, "request start over at " + endpoint);
playbackPosition = 0;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_PREVIOUS:
Log.d(TAG, "request previous at " + endpoint);
playbackState = PLAYBACK_STATE_PLAYING;
playbackSpeed = 1;
playbackPosition = 0;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_NEXT:
Log.d(TAG, "request next at " + endpoint);
playbackState = PLAYBACK_STATE_PLAYING;
playbackSpeed = 1;
playbackPosition = 0;
return RESPONSE_STATUS_SUCCESS;
case REQUEST_REWIND:
Log.d(TAG, "request rewind at " + endpoint);
if (playbackSpeed == playbackMaxRewindSpeed) {
return RESPONSE_STATUS_SPEED_OUT_OF_RANGE;
}
playbackState = PLAYBACK_STATE_PLAYING;
playbackSpeed =
(playbackSpeed >= 0 ? -1 : Math.max(playbackSpeed * 2, playbackMaxRewindSpeed));
return RESPONSE_STATUS_SUCCESS;
case REQUEST_FAST_FORWARD:
Log.d(TAG, "request fast forward at " + endpoint);
if (playbackSpeed == playbackMaxForwardSpeed) {
return RESPONSE_STATUS_SPEED_OUT_OF_RANGE;
}
playbackState = PLAYBACK_STATE_PLAYING;
playbackSpeed =
(playbackSpeed <= 0 ? 1 : Math.min(playbackSpeed * 2, playbackMaxForwardSpeed));
return RESPONSE_STATUS_SUCCESS;
case REQUEST_SKIP_FORWARD:
Log.d(TAG, "request skip forward " + parameter + " milliseconds at " + endpoint);
newPosition = playbackPosition + parameter;
playbackPosition =
(newPosition > playbackDuration)
? playbackDuration
: (newPosition >= 0 ? newPosition : 0);
return RESPONSE_STATUS_SUCCESS;
case REQUEST_SKIP_BACKWARD:
Log.d(TAG, "request skip backward " + parameter + " milliseconds at " + endpoint);
newPosition = playbackPosition - parameter;
playbackPosition =
(newPosition > playbackDuration)
? playbackDuration
: (newPosition >= 0 ? newPosition : 0);
return RESPONSE_STATUS_SUCCESS;
case REQUEST_SEEK:
Log.d(TAG, "request seek to " + parameter + " milliseconds at " + endpoint);
if (parameter > playbackDuration) {
return RESPONSE_STATUS_SEEK_OUT_OF_RANGE;
} else {
playbackPosition = parameter;
}
return RESPONSE_STATUS_SUCCESS;
}
return RESPONSE_STATUS_NOT_ALLOWED;
}
@Override
public MediaPlaybackPosition getPosition() {
Log.d(TAG, "getPosition " + playbackPosition);
return new MediaPlaybackPosition(playbackPosition);
}
}