diff options
author | Arnaud Berry <arnaudberry@google.com> | 2019-06-24 13:12:23 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-06-24 13:12:23 -0700 |
commit | fb3c20ad515b7d86e9b2dda1c5c90158f0806c94 (patch) | |
tree | a616dbbe48940ef301d451e7f43757d5ff99f250 | |
parent | e10416282401c699e49c83e2cacfcbe6940fbacf (diff) | |
parent | 29a854d684d02e9f4234b9e605cad3aede12844f (diff) | |
download | Media-fb3c20ad515b7d86e9b2dda1c5c90158f0806c94.tar.gz |
Move the playback background... to the playback fragment
am: 29a854d684
Change-Id: If58aadf08a7be7a1f63db62e482e652c64f14216
-rw-r--r-- | res/layout/fragment_playback.xml | 5 | ||||
-rw-r--r-- | res/layout/media_activity.xml | 5 | ||||
-rw-r--r-- | src/com/android/car/media/MediaActivity.java | 45 | ||||
-rw-r--r-- | src/com/android/car/media/PlaybackFragment.java | 34 |
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()); |