aboutsummaryrefslogtreecommitdiff
path: root/TestMediaApp/src
diff options
context:
space:
mode:
authorYabin Huang <yabinh@google.com>2019-09-03 13:46:42 -0700
committerYabin Huang <yabinh@google.com>2019-09-24 11:57:00 -0700
commit0ff14f2087fad2a0570bf0fafb6749fc56a42cc3 (patch)
treed2e11c26c81e9e46ea09e97a977221a5332c27f4 /TestMediaApp/src
parent5c03d5cdb6f55fc566adce0584ace596e9494f39 (diff)
downloadtests-0ff14f2087fad2a0570bf0fafb6749fc56a42cc3.tar.gz
Add some test cases in test media app
Fixes: 139295650 Test: manual Change-Id: I4c2443992fe0fa7e9a21397aa1c47ba9ce62579f
Diffstat (limited to 'TestMediaApp/src')
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java18
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java13
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java3
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java5
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java23
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java10
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java3
7 files changed, 70 insertions, 5 deletions
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
index 9cf1e7c..2281ded 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
@@ -17,6 +17,7 @@ package com.android.car.media.testmediaapp;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType.LEAF_CHILDREN;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType.QUEUE_ONLY;
+import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaLoginEventOrder.PLAYBACK_STATE_UPDATE_FIRST;
import android.content.Context;
import android.media.AudioManager;
@@ -32,6 +33,7 @@ import androidx.media.MediaBrowserServiceCompat;
import com.android.car.media.testmediaapp.loader.TmaLoader;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
+import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaLoginEventOrder;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import com.android.car.media.testmediaapp.prefs.TmaPrefs;
import com.android.internal.util.Preconditions;
@@ -102,20 +104,32 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
}
private void onAccountChanged(TmaAccountType accountType) {
+ if (PLAYBACK_STATE_UPDATE_FIRST.equals(mPrefs.mLoginEventOrder.getValue())) {
+ updatePlaybackState(accountType);
+ invalidateRoot();
+ } else {
+ invalidateRoot();
+ (new Handler()).postDelayed(() -> {
+ updatePlaybackState(accountType);
+ }, 3000);
+ }
+ }
+
+ private void updatePlaybackState(TmaAccountType accountType) {
if (accountType == TmaAccountType.NONE) {
mPlayer.setPlaybackState(
new TmaMediaEvent(TmaMediaEvent.EventState.ERROR,
TmaMediaEvent.StateErrorCode.AUTHENTICATION_EXPIRED,
getResources().getString(R.string.no_account),
getResources().getString(R.string.select_account),
- TmaMediaEvent.ResolutionIntent.PREFS, 0, null));
+ TmaMediaEvent.ResolutionIntent.PREFS,
+ TmaMediaEvent.Action.NONE, 0, null));
} else {
// TODO don't reset error in all cases...
PlaybackStateCompat.Builder playbackState = new PlaybackStateCompat.Builder();
playbackState.setState(PlaybackStateCompat.STATE_PAUSED, 0, 0);
mSession.setPlaybackState(playbackState.build());
}
- invalidateRoot();
}
private void invalidateRoot() {
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
index f6ec8af..491f940 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
@@ -53,7 +53,7 @@ public class TmaMediaEvent {
public static final TmaMediaEvent INSTANT_PLAYBACK =
new TmaMediaEvent(EventState.PLAYING, StateErrorCode.UNKNOWN_ERROR, null, null,
- ResolutionIntent.NONE, 0, null);
+ ResolutionIntent.NONE, Action.NONE, 0, null);
/** The name of each entry is the value used in the json file. */
public enum EventState {
@@ -105,23 +105,31 @@ public class TmaMediaEvent {
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, int postDelayMs,
+ 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;
}
@@ -152,6 +160,7 @@ public class TmaMediaEvent {
", mErrorMessage='" + mErrorMessage + '\'' +
", mActionLabel='" + mActionLabel + '\'' +
", mResolutionIntent=" + mResolutionIntent +
+ ", mAction=" + mAction +
", mPostDelayMs=" + mPostDelayMs +
", mExceptionClass=" + mExceptionClass +
'}';
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
index cd6eee0..7612cd3 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
@@ -44,6 +44,7 @@ import android.support.v4.media.session.PlaybackStateCompat;
import android.util.Log;
import android.widget.Toast;
+import com.android.car.media.testmediaapp.TmaMediaEvent.Action;
import com.android.car.media.testmediaapp.TmaMediaEvent.EventState;
import com.android.car.media.testmediaapp.TmaMediaEvent.ResolutionIntent;
import com.android.car.media.testmediaapp.TmaMediaItem.TmaCustomAction;
@@ -254,6 +255,8 @@ public class TmaPlayer extends MediaSessionCompat.Callback {
TmaAccountType.PAID.equals(mPrefs.mAccountType.getValue())) {
Log.i(TAG, "Ignoring even for paid account");
return;
+ } else if (Action.RESET_METADATA.equals(event.mAction)) {
+ mSession.setMetadata(mSession.getController().getMetadata());
} else {
setPlaybackState(event);
}
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
index c2e573a..2222afa 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
@@ -26,6 +26,7 @@ import android.util.Log;
import androidx.annotation.Nullable;
import com.android.car.media.testmediaapp.TmaMediaEvent;
+import com.android.car.media.testmediaapp.TmaMediaEvent.Action;
import com.android.car.media.testmediaapp.TmaMediaEvent.EventState;
import com.android.car.media.testmediaapp.TmaMediaEvent.ResolutionIntent;
import com.android.car.media.testmediaapp.TmaMediaEvent.StateErrorCode;
@@ -53,6 +54,7 @@ class TmaMediaEventReader {
ERROR_MESSAGE,
ACTION_LABEL,
INTENT,
+ ACTION,
/** How long to wait before sending the event to the app. */
POST_DELAY_MS,
THROW_EXCEPTION
@@ -70,11 +72,13 @@ class TmaMediaEventReader {
private final Map<String, EventState> mEventStates;
private final Map<String, StateErrorCode> mErrorCodes;
private final Map<String, ResolutionIntent> mResolutionIntents;
+ private final Map<String, Action> mActions;
private TmaMediaEventReader() {
mEventStates = enumNamesToValues(EventState.values());
mErrorCodes = enumNamesToValues(StateErrorCode.values());
mResolutionIntents = enumNamesToValues(ResolutionIntent.values());
+ mActions = enumNamesToValues(Action.values());
}
@Nullable
@@ -86,6 +90,7 @@ class TmaMediaEventReader {
getString(json, Keys.ERROR_MESSAGE),
getString(json, Keys.ACTION_LABEL),
getEnum(json, Keys.INTENT, mResolutionIntents, ResolutionIntent.NONE),
+ getEnum(json, Keys.ACTION, mActions, Action.NONE),
getInt(json, Keys.POST_DELAY_MS),
getString(json, Keys.THROW_EXCEPTION));
}
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
index 3da4209..744ef01 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
@@ -105,6 +105,29 @@ public class TmaEnumPrefs {
}
}
+ /* To simulate the events order after login. Media apps should update playback state first, then
+ * load the browse tree. But sometims some apps (e.g., GPB) don't follow this order strictly. */
+ public enum TmaLoginEventOrder implements EnumPrefValue {
+ PLAYBACK_STATE_UPDATE_FIRST("Update playback state first", "state-first"),
+ BROWSE_TREE_LOAD_FRIST("Load browse tree first", "tree-first");
+
+ private final PrefValueImpl mPrefValue;
+
+ TmaLoginEventOrder(String displayTitle, String id) {
+ mPrefValue = new PrefValueImpl(displayTitle, id);
+ }
+
+ @Override
+ public String getTitle() {
+ return mPrefValue.getTitle();
+ }
+
+ @Override
+ public String getId() {
+ return mPrefValue.getId();
+ }
+ }
+
private static class PrefValueImpl implements EnumPrefValue {
private final String mDisplayTitle;
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java
index 3305a06..8e9d89f 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java
@@ -24,6 +24,7 @@ import androidx.preference.PreferenceManager;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType;
+import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaLoginEventOrder;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import java.util.HashMap;
@@ -45,6 +46,9 @@ public class TmaPrefs {
/** Wait time for openAssetFile. */
public final PrefEntry<TmaReplyDelay> mAssetReplyDelay;
+ /** Media apps event (update playback state, load browse tree) order after login. */
+ public final PrefEntry<TmaLoginEventOrder> mLoginEventOrder;
+
public synchronized static TmaPrefs getInstance(Context context) {
if (sPrefs == null) {
@@ -62,7 +66,8 @@ public class TmaPrefs {
ACCOUNT_TYPE_KEY,
ROOT_NODE_TYPE_KEY,
ROOT_REPLY_DELAY_KEY,
- ASSET_REPLY_DELAY_KEY
+ ASSET_REPLY_DELAY_KEY,
+ LOGIN_EVENT_ORDER_KEY
}
/**
@@ -128,6 +133,9 @@ public class TmaPrefs {
mAssetReplyDelay = new EnumPrefEntry<>(TmaPrefKey.ASSET_REPLY_DELAY_KEY,
TmaReplyDelay.values(), TmaReplyDelay.NONE);
+
+ mLoginEventOrder = new EnumPrefEntry<>(TmaPrefKey.LOGIN_EVENT_ORDER_KEY,
+ TmaLoginEventOrder.values(), TmaLoginEventOrder.PLAYBACK_STATE_UPDATE_FIRST);
}
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
index 482de16..066cc9c 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
@@ -26,6 +26,7 @@ import androidx.preference.PreferenceScreen;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType;
+import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaLoginEventOrder;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import com.android.car.media.testmediaapp.prefs.TmaPrefs.PrefEntry;
@@ -46,6 +47,8 @@ public class TmaPrefsFragment extends PreferenceFragmentCompat {
TmaReplyDelay.values()));
screen.addPreference(createEnumPref(context, "Asset delay: random value in [v, 2v]",
prefs.mAssetReplyDelay, TmaReplyDelay.values()));
+ screen.addPreference(createEnumPref(context, "Login event order", prefs.mLoginEventOrder,
+ TmaLoginEventOrder.values()));
setPreferenceScreen(screen);
}