summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Berry <arnaudberry@google.com>2019-06-24 13:12:23 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-06-24 13:12:23 -0700
commitfb3c20ad515b7d86e9b2dda1c5c90158f0806c94 (patch)
treea616dbbe48940ef301d451e7f43757d5ff99f250
parente10416282401c699e49c83e2cacfcbe6940fbacf (diff)
parent29a854d684d02e9f4234b9e605cad3aede12844f (diff)
downloadMedia-fb3c20ad515b7d86e9b2dda1c5c90158f0806c94.tar.gz
Move the playback background... to the playback fragment
am: 29a854d684 Change-Id: If58aadf08a7be7a1f63db62e482e652c64f14216
-rw-r--r--res/layout/fragment_playback.xml5
-rw-r--r--res/layout/media_activity.xml5
-rw-r--r--src/com/android/car/media/MediaActivity.java45
-rw-r--r--src/com/android/car/media/PlaybackFragment.java34
4 files changed, 39 insertions, 50 deletions
diff --git a/res/layout/fragment_playback.xml b/res/layout/fragment_playback.xml
index fd0cca6..bc85249 100644
--- a/res/layout/fragment_playback.xml
+++ b/res/layout/fragment_playback.xml
@@ -36,6 +36,11 @@
android:orientation="horizontal"
app:layout_constraintGuide_end="@dimen/control_bar_height"/>
+ <com.android.car.apps.common.BackgroundImageView
+ android:id="@+id/playback_background"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
<include
layout="@layout/scrim_overlay"
android:id="@+id/background_scrim"
diff --git a/res/layout/media_activity.xml b/res/layout/media_activity.xml
index fc70d56..bccfd32 100644
--- a/res/layout/media_activity.xml
+++ b/res/layout/media_activity.xml
@@ -21,11 +21,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <com.android.car.apps.common.BackgroundImageView
- android:id="@+id/playback_background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
diff --git a/src/com/android/car/media/MediaActivity.java b/src/com/android/car/media/MediaActivity.java
index 3316ee3..92a7737 100644
--- a/src/com/android/car/media/MediaActivity.java
+++ b/src/com/android/car/media/MediaActivity.java
@@ -15,10 +15,6 @@
*/
package com.android.car.media;
-import static androidx.lifecycle.Transformations.switchMap;
-
-import static com.android.car.arch.common.LiveDataFunctions.distinct;
-import static com.android.car.arch.common.LiveDataFunctions.nullLiveData;
import static com.android.car.arch.common.LiveDataFunctions.pair;
import android.app.AlertDialog;
@@ -29,13 +25,11 @@ import android.car.drivingstate.CarUxRestrictions;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.ResolveInfo;
-import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.media.session.PlaybackStateCompat;
import android.text.TextUtils;
import android.transition.Fade;
import android.util.Log;
-import android.util.Size;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
@@ -50,7 +44,6 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProviders;
-import com.android.car.apps.common.BackgroundImageView;
import com.android.car.apps.common.CarUxRestrictionsUtil;
import com.android.car.apps.common.util.ViewUtils;
import com.android.car.media.common.AppSelectionFragment;
@@ -59,7 +52,6 @@ import com.android.car.media.common.MediaConstants;
import com.android.car.media.common.MediaItemMetadata;
import com.android.car.media.common.MinimizedPlaybackControlBar;
import com.android.car.media.common.browse.MediaBrowserViewModel;
-import com.android.car.media.common.playback.AlbumArtLiveData;
import com.android.car.media.common.playback.PlaybackViewModel;
import com.android.car.media.common.source.MediaSource;
import com.android.car.media.common.source.MediaSourceViewModel;
@@ -86,7 +78,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
/** Layout views */
private AppBarView mAppBarView;
- private BackgroundImageView mAlbumBackground;
private PlaybackFragment mPlaybackFragment;
private BrowseFragment mSearchFragment;
private BrowseFragment mBrowseFragment;
@@ -234,7 +225,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
int fadeDuration = getResources().getInteger(R.integer.app_selector_fade_duration);
mAppSelectionFragment.setEnterTransition(new Fade().setDuration(fadeDuration));
mAppSelectionFragment.setExitTransition(new Fade().setDuration(fadeDuration));
- mAlbumBackground = findViewById(R.id.playback_background);
MinimizedPlaybackControlBar browsePlaybackControls =
findViewById(R.id.minimized_playback_controls);
@@ -263,15 +253,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
mPlaybackController = playbackController;
});
- mAlbumBackground.addOnLayoutChangeListener(
- (view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
- // This can be removed when fixing b/133523205. Keeping it prevents blurring
- // until the playback view has been shown.
- int backgroundImageSize = mAlbumBackground.getDesiredBackgroundSize();
- localViewModel.setAlbumArtSize(backgroundImageSize, backgroundImageSize);
- });
- localViewModel.getAlbumArt().observe(this, this::setBackgroundImage);
-
playbackViewModel.getPlaybackStateWrapper().observe(this, this::handlePlaybackState);
localViewModel.getModeAndErrorState().observe(this, pair ->
@@ -557,7 +538,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
private void updateMetadata(Mode mode) {
if (mode == Mode.PLAYBACK) {
ViewUtils.hideViewAnimated(mMiniPlaybackControls, mFadeDuration);
- ViewUtils.showViewAnimated(mAlbumBackground, mFadeDuration);
getInnerViewModel().setMiniControlsVisible(false);
} else {
mPlaybackFragment.closeOverflowMenu();
@@ -565,14 +545,9 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
ViewUtils.showViewAnimated(mMiniPlaybackControls, mFadeDuration);
getInnerViewModel().setMiniControlsVisible(true);
}
- ViewUtils.hideViewAnimated(mAlbumBackground, mFadeDuration);
}
}
- private void setBackgroundImage(Bitmap bitmap) {
- mAlbumBackground.setBackgroundImage(bitmap, bitmap != null);
- }
-
@Override
public void onBackStackChanged() {
updateAppBar(getInnerViewModel().mMode.getValue());
@@ -616,8 +591,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
public static class ViewModel extends AndroidViewModel {
private boolean mNeedsInitialization = true;
- private LiveData<Bitmap> mAlbumArt;
- private MutableLiveData<Size> mAlbumArtSize = new MutableLiveData<>();
private PlaybackViewModel mPlaybackViewModel;
private MutableLiveData<Boolean> mIsMiniControlsVisible = new MutableLiveData<>();
@@ -635,16 +608,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
}
mPlaybackViewModel = playbackViewModel;
- mAlbumArt = switchMap(distinct(mAlbumArtSize), size -> {
- if (size == null || size.getHeight() == 0 || size.getWidth() == 0) {
- return nullLiveData();
- } else {
- return AlbumArtLiveData.getAlbumArt(getApplication(),
- size.getWidth(), size.getHeight(), false,
- playbackViewModel.getMetadata());
- }
- });
-
mIsErrorState.setValue(false);
mNeedsInitialization = false;
}
@@ -653,14 +616,6 @@ public class MediaActivity extends FragmentActivity implements BrowseFragment.Ca
return mNeedsInitialization;
}
- void setAlbumArtSize(int width, int height) {
- mAlbumArtSize.setValue(new Size(width, height));
- }
-
- LiveData<Bitmap> getAlbumArt() {
- return mAlbumArt;
- }
-
void setMiniControlsVisible(boolean visible) {
mIsMiniControlsVisible.setValue(visible);
}
diff --git a/src/com/android/car/media/PlaybackFragment.java b/src/com/android/car/media/PlaybackFragment.java
index d4cd173..7ecb661 100644
--- a/src/com/android/car/media/PlaybackFragment.java
+++ b/src/com/android/car/media/PlaybackFragment.java
@@ -19,6 +19,7 @@ package com.android.car.media;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.ColorStateList;
+import android.graphics.Bitmap;
import android.graphics.Rect;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -38,6 +39,7 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.car.apps.common.BackgroundImageView;
import com.android.car.apps.common.util.ViewUtils;
import com.android.car.media.common.MediaAppSelectorWidget;
import com.android.car.media.common.MediaItemMetadata;
@@ -49,6 +51,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
/**
* A {@link Fragment} that implements both the playback and the content forward browsing experience.
@@ -58,6 +61,8 @@ import java.util.Objects;
public class PlaybackFragment extends Fragment {
private static final String TAG = "PlaybackFragment";
+ private CompletableFuture<Bitmap> mFutureAlbumBackground;
+ private BackgroundImageView mAlbumBackground;
private View mBackgroundScrim;
private View mControlBarScrim;
private PlaybackControlsActionBar mPlaybackControls;
@@ -260,6 +265,7 @@ public class PlaybackFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_playback, container, false);
+ mAlbumBackground = view.findViewById(R.id.playback_background);
mQueue = view.findViewById(R.id.queue_list);
mMetadataContainer = view.findViewById(R.id.metadata_container);
mSeekBar = view.findViewById(R.id.seek_bar);
@@ -321,6 +327,30 @@ public class PlaybackFragment extends Fragment {
}
hideViewIds.recycle();
+ int albumBgSizePx = getResources().getInteger(
+ com.android.car.apps.common.R.integer.background_bitmap_target_size_px);
+
+ getPlaybackViewModel().getMetadata().observe(getViewLifecycleOwner(),
+ metadata -> {
+ if (mFutureAlbumBackground != null && !mFutureAlbumBackground.isDone()) {
+ mFutureAlbumBackground.cancel(true);
+ }
+ if (metadata == null) {
+ setBackgroundImage(null);
+ mFutureAlbumBackground = null;
+ } else {
+ mFutureAlbumBackground = metadata.getAlbumArt(
+ getContext(), albumBgSizePx, albumBgSizePx, false);
+ mFutureAlbumBackground.whenComplete((result, throwable) -> {
+ if (throwable != null) {
+ setBackgroundImage(null);
+ } else {
+ setBackgroundImage(result);
+ }
+ });
+ }
+ });
+
return view;
}
@@ -334,6 +364,10 @@ public class PlaybackFragment extends Fragment {
super.onDetach();
}
+ private void setBackgroundImage(Bitmap bitmap) {
+ mAlbumBackground.setBackgroundImage(bitmap, bitmap != null);
+ }
+
private void initPlaybackControls(PlaybackControlsActionBar playbackControls) {
mPlaybackControls = playbackControls;
mPlaybackControls.setModel(getPlaybackViewModel(), getViewLifecycleOwner());