blob: 491f940b893e7d4fe8c329836444b7726b3c6541 [file] [log] [blame]
/*
* Copyright 2019 The Android Open Source Project
*
* 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.android.car.media.testmediaapp;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_ACTION_ABORTED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_APP_ERROR;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_CONCURRENT_STREAM_LIMIT;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_CONTENT_ALREADY_PLAYING;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_END_OF_QUEUE;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_NOT_AVAILABLE_IN_REGION;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_NOT_SUPPORTED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_PARENTAL_CONTROL_RESTRICTED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_SKIP_LIMIT_REACHED;
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_UNKNOWN_ERROR;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_BUFFERING;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_CONNECTING;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_ERROR;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_FAST_FORWARDING;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_NONE;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_PAUSED;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_PLAYING;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_REWINDING;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_NEXT;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_PREVIOUS;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_QUEUE_ITEM;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_STOPPED;
import android.support.v4.media.session.PlaybackStateCompat.State;
import android.util.Log;
/**
* Contains the info needed to generate a new playback state.
*/
public class TmaMediaEvent {
private static final String TAG = "TmaMediaEvent";
public static final TmaMediaEvent INSTANT_PLAYBACK =
new TmaMediaEvent(EventState.PLAYING, StateErrorCode.UNKNOWN_ERROR, null, null,
ResolutionIntent.NONE, Action.NONE, 0, null);
/** The name of each entry is the value used in the json file. */
public enum EventState {
NONE (STATE_NONE),
STOPPED (STATE_STOPPED),
PAUSED (STATE_PAUSED),
PLAYING (STATE_PLAYING),
FAST_FORWARDING (STATE_FAST_FORWARDING),
REWINDING (STATE_REWINDING),
BUFFERING (STATE_BUFFERING),
ERROR (STATE_ERROR),
CONNECTING (STATE_CONNECTING),
SKIPPING_TO_PREVIOUS (STATE_SKIPPING_TO_PREVIOUS),
SKIPPING_TO_NEXT (STATE_SKIPPING_TO_NEXT),
SKIPPING_TO_QUEUE_ITEM (STATE_SKIPPING_TO_QUEUE_ITEM);
@State final int mValue;
EventState(@State int value) {
mValue = value;
}
}
/** The name of each entry is the value used in the json file. */
public enum StateErrorCode {
UNKNOWN_ERROR (ERROR_CODE_UNKNOWN_ERROR),
APP_ERROR (ERROR_CODE_APP_ERROR),
NOT_SUPPORTED (ERROR_CODE_NOT_SUPPORTED),
AUTHENTICATION_EXPIRED (ERROR_CODE_AUTHENTICATION_EXPIRED),
PREMIUM_ACCOUNT_REQUIRED (ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED),
CONCURRENT_STREAM_LIMIT (ERROR_CODE_CONCURRENT_STREAM_LIMIT),
PARENTAL_CONTROL_RESTRICTED (ERROR_CODE_PARENTAL_CONTROL_RESTRICTED),
NOT_AVAILABLE_IN_REGION (ERROR_CODE_NOT_AVAILABLE_IN_REGION),
CONTENT_ALREADY_PLAYING (ERROR_CODE_CONTENT_ALREADY_PLAYING),
SKIP_LIMIT_REACHED (ERROR_CODE_SKIP_LIMIT_REACHED),
ACTION_ABORTED (ERROR_CODE_ACTION_ABORTED),
END_OF_QUEUE (ERROR_CODE_END_OF_QUEUE);
@State final int mValue;
StateErrorCode(@State int value) {
mValue = value;
}
}
/** The name of each entry is the value used in the json file. */
public enum ResolutionIntent {
NONE,
PREFS
}
/** The name of each entry is the value used in the json file. */
public enum Action {
NONE,
RESET_METADATA
}
final EventState mState;
final StateErrorCode mErrorCode;
final String mErrorMessage;
final String mActionLabel;
final ResolutionIntent mResolutionIntent;
final Action mAction;
/** How long to wait before sending the event to the app. */
final int mPostDelayMs;
private final String mExceptionClass;
public TmaMediaEvent(EventState state, StateErrorCode errorCode, String errorMessage,
String actionLabel, ResolutionIntent resolutionIntent, Action action, int postDelayMs,
String exceptionClass) {
mState = state;
mErrorCode = errorCode;
mErrorMessage = errorMessage;
mActionLabel = actionLabel;
mResolutionIntent = resolutionIntent;
mAction = action;
mPostDelayMs = postDelayMs;
mExceptionClass = exceptionClass;
}
boolean premiumAccountRequired() {
return mState == EventState.ERROR && mErrorCode == StateErrorCode.PREMIUM_ACCOUNT_REQUIRED;
}
void maybeThrow() {
if (mExceptionClass != null) {
RuntimeException exception = null;
try {
Class aClass = Class.forName(mExceptionClass);
exception = (RuntimeException) aClass.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
Log.e(TAG, "Class error for " + mExceptionClass + " : " + e);
}
if (exception != null) throw exception;
}
}
@Override
public String toString() {
return "TmaMediaEvent{" +
"mState=" + mState +
", mErrorCode=" + mErrorCode +
", mErrorMessage='" + mErrorMessage + '\'' +
", mActionLabel='" + mActionLabel + '\'' +
", mResolutionIntent=" + mResolutionIntent +
", mAction=" + mAction +
", mPostDelayMs=" + mPostDelayMs +
", mExceptionClass=" + mExceptionClass +
'}';
}
}