diff options
author | Yabin Huang <yabinh@google.com> | 2019-09-03 13:46:42 -0700 |
---|---|---|
committer | Yabin Huang <yabinh@google.com> | 2019-09-24 11:57:00 -0700 |
commit | 0ff14f2087fad2a0570bf0fafb6749fc56a42cc3 (patch) | |
tree | d2e11c26c81e9e46ea09e97a977221a5332c27f4 /TestMediaApp/src | |
parent | 5c03d5cdb6f55fc566adce0584ace596e9494f39 (diff) | |
download | tests-0ff14f2087fad2a0570bf0fafb6749fc56a42cc3.tar.gz |
Add some test cases in test media app
Fixes: 139295650
Test: manual
Change-Id: I4c2443992fe0fa7e9a21397aa1c47ba9ce62579f
Diffstat (limited to 'TestMediaApp/src')
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); } |