Ignore same playback state when both PlaybackState and error message are the same
Fixes: 140139039
Test: manual
Change-Id: Ica69bc19aec58d4937b8a79b7c977c72e73b97f6
diff --git a/src/com/android/car/media/MediaActivity.java b/src/com/android/car/media/MediaActivity.java
index 4cc19ec..7b49b69 100644
--- a/src/com/android/car/media/MediaActivity.java
+++ b/src/com/android/car/media/MediaActivity.java
@@ -105,8 +105,8 @@
private Mode mMode;
private Intent mCurrentSourcePreferences;
private boolean mCanShowMiniPlaybackControls;
- private boolean mIsBrowseTreeReady;
- private Integer mCurrentPlaybackState;
+ private boolean mBrowseTreeHasChildren;
+ private PlaybackViewModel.PlaybackStateWrapper mCurrentPlaybackStateWrapper;
private List<MediaItemMetadata> mTopItems;
private CarUxRestrictionsUtil mCarUxRestrictionsUtil;
@@ -244,16 +244,19 @@
});
mediaBrowserViewModel.getBrowsedMediaItems().observe(this, futureData -> {
if (futureData.isLoading()) {
- mIsBrowseTreeReady = false;
+ if (Log.isLoggable(TAG, Log.INFO)) {
+ Log.i(TAG, "Loading browse tree...");
+ }
+ mBrowseTreeHasChildren = false;
return;
}
- final boolean browseTreeReady =
+ final boolean browseTreeHasChildren =
futureData.getData() != null && !futureData.getData().isEmpty();
if (Log.isLoggable(TAG, Log.INFO)) {
- Log.i(TAG, "Browse tree ready status changed: " + mIsBrowseTreeReady + " -> "
- + browseTreeReady);
+ Log.i(TAG, "Browse tree loaded, status (has children or not) changed: "
+ + mBrowseTreeHasChildren + " -> " + browseTreeHasChildren);
}
- mIsBrowseTreeReady = browseTreeReady;
+ mBrowseTreeHasChildren = browseTreeHasChildren;
handlePlaybackState(playbackViewModel.getPlaybackStateWrapper().getValue(), false);
mAppBarView.setDataLoaded(true);
@@ -319,8 +322,11 @@
private void handlePlaybackState(PlaybackViewModel.PlaybackStateWrapper state,
boolean ignoreSameState) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "handlePlaybackState(); state change: " + mCurrentPlaybackState + " -> "
- + (state != null ? state.getState() : null));
+ Log.d(TAG,
+ "handlePlaybackState(); state change: " + (mCurrentPlaybackStateWrapper != null
+ ? mCurrentPlaybackStateWrapper.getState() : null) + " -> " + (
+ state != null ? state.getState() : null));
+
}
// TODO(arnaudberry) rethink interactions between customized layouts and dynamic visibility.
@@ -331,18 +337,25 @@
getInnerViewModel().setMiniControlsVisible(mCanShowMiniPlaybackControls);
}
if (state == null) {
+ mCurrentPlaybackStateWrapper = null;
return;
}
- if (ignoreSameState && mCurrentPlaybackState != null
- && mCurrentPlaybackState == state.getState()) {
+
+ String displayedMessage = getDisplayedMessage(state);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Displayed error message: [" + displayedMessage + "]");
+ }
+ if (ignoreSameState && mCurrentPlaybackStateWrapper != null
+ && mCurrentPlaybackStateWrapper.getState() == state.getState()
+ && TextUtils.equals(displayedMessage,
+ getDisplayedMessage(mCurrentPlaybackStateWrapper))) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Ignore same playback state.");
}
return;
}
- if (mCurrentPlaybackState == null || mCurrentPlaybackState != state.getState()) {
- mCurrentPlaybackState = state.getState();
- }
+
+ mCurrentPlaybackStateWrapper = state;
maybeCancelToast();
maybeCancelDialog();
@@ -352,14 +365,10 @@
MediaConstants.ERROR_RESOLUTION_ACTION_INTENT);
String label = extras == null ? null : extras.getString(
MediaConstants.ERROR_RESOLUTION_ACTION_LABEL);
- String displayedMessage = getDisplayedMessage(state);
boolean isFatalError = false;
if (!TextUtils.isEmpty(displayedMessage)) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Error message is not empty");
- }
- if (mIsBrowseTreeReady) {
+ if (mBrowseTreeHasChildren) {
if (intent != null && !isUxRestricted()) {
showDialog(intent, displayedMessage, label, getString(android.R.string.cancel));
} else {
@@ -378,7 +387,10 @@
}
}
- private String getDisplayedMessage(PlaybackViewModel.PlaybackStateWrapper state) {
+ private String getDisplayedMessage(@Nullable PlaybackViewModel.PlaybackStateWrapper state) {
+ if (state == null) {
+ return null;
+ }
if (!TextUtils.isEmpty(state.getErrorMessage())) {
return state.getErrorMessage().toString();
}
@@ -457,8 +469,8 @@
Log.i(TAG, "MediaSource changed to " + mediaSource);
}
- mIsBrowseTreeReady = false;
- mCurrentPlaybackState = null;
+ mBrowseTreeHasChildren = false;
+ mCurrentPlaybackStateWrapper = null;
mAppBarView.setDataLoaded(false);
maybeCancelToast();
maybeCancelDialog();