Merge "Update Smartspace media recommendation card based on Droidfood's feedbacks." into sc-dev
This commit is contained in:
@@ -63,65 +63,101 @@
|
|||||||
android:breakStrategy="balanced"
|
android:breakStrategy="balanced"
|
||||||
android:hyphenationFrequency="none"/>
|
android:hyphenationFrequency="none"/>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover1"
|
android:id="@+id/media_cover1_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover1"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover2"
|
android:id="@+id/media_cover2_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover2"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover3"
|
android:id="@+id/media_cover3_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover3"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover4"
|
android:id="@+id/media_cover4_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover4"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover5"
|
android:id="@+id/media_cover5_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover5"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<ImageView
|
<FrameLayout
|
||||||
android:id="@+id/media_cover6"
|
android:id="@+id/media_cover6_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
android:adjustViewBounds="true"
|
android:background="@drawable/qs_media_light_source">
|
||||||
android:background="@drawable/bg_smartspace_media_item"
|
<ImageView
|
||||||
style="@style/MediaPlayer.Album"
|
android:id="@+id/media_cover6"
|
||||||
android:clipToOutline="true"
|
android:layout_width="match_parent"
|
||||||
android:scaleType="centerCrop"/>
|
android:layout_height="match_parent"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@drawable/bg_smartspace_media_item"
|
||||||
|
style="@style/MediaPlayer.Album"
|
||||||
|
android:clipToOutline="true"
|
||||||
|
android:scaleType="centerCrop"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<!-- Long press menu -->
|
<!-- Long press menu -->
|
||||||
<TextView
|
<TextView
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
app:layout_constraintHorizontal_bias="0" />
|
app:layout_constraintHorizontal_bias="0" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover1"
|
android:id="@+id/media_cover1_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
@@ -48,13 +48,13 @@
|
|||||||
android:layout_marginBottom="@dimen/qs_media_padding"
|
android:layout_marginBottom="@dimen/qs_media_padding"
|
||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover2"
|
app:layout_constraintEnd_toStartOf="@id/media_cover2_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover2"
|
android:id="@+id/media_cover2_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
@@ -63,14 +63,14 @@
|
|||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover1"
|
app:layout_constraintStart_toEndOf="@id/media_cover1_container"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover3"
|
app:layout_constraintEnd_toStartOf="@id/media_cover3_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover3"
|
android:id="@+id/media_cover3_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_collapsed"
|
||||||
@@ -78,45 +78,45 @@
|
|||||||
android:layout_marginBottom="@dimen/qs_media_padding"
|
android:layout_marginBottom="@dimen/qs_media_padding"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover2"
|
app:layout_constraintStart_toEndOf="@id/media_cover2_container"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover4"
|
android:id="@+id/media_cover4_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/media_cover1"
|
app:layout_constraintTop_toBottomOf="@+id/media_cover1_container"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover5"
|
app:layout_constraintEnd_toStartOf="@id/media_cover5_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover5"
|
android:id="@+id/media_cover5_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/media_cover2"
|
app:layout_constraintTop_toBottomOf="@+id/media_cover2_container"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/media_cover4"
|
app:layout_constraintStart_toEndOf="@+id/media_cover4_container"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/media_cover6"
|
app:layout_constraintEnd_toStartOf="@+id/media_cover6_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover6"
|
android:id="@+id/media_cover6_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
app:layout_constraintTop_toBottomOf="@id/media_cover3"
|
app:layout_constraintTop_toBottomOf="@id/media_cover3_container"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover5"
|
app:layout_constraintStart_toEndOf="@id/media_cover5_container"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
app:layout_constraintHorizontal_bias="0" />
|
app:layout_constraintHorizontal_bias="0" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover1"
|
android:id="@+id/media_cover1_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover2"
|
app:layout_constraintEnd_toStartOf="@id/media_cover2_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover2"
|
android:id="@+id/media_cover2_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -65,8 +65,8 @@
|
|||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover1"
|
app:layout_constraintStart_toEndOf="@id/media_cover1_container"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover3"
|
app:layout_constraintEnd_toStartOf="@id/media_cover3_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover3"
|
android:id="@+id/media_cover3_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
android:layout_marginBottom="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginBottom="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
app:layout_constraintBottom_toTopOf="@+id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover2"
|
app:layout_constraintStart_toEndOf="@id/media_cover2_container"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover4"
|
android:id="@+id/media_cover4_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/media_horizontal_center_guideline"
|
app:layout_constraintTop_toBottomOf="@+id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
app:layout_constraintStart_toEndOf="@id/media_vertical_start_guideline"
|
||||||
app:layout_constraintEnd_toStartOf="@id/media_cover5"
|
app:layout_constraintEnd_toStartOf="@id/media_cover5_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
@@ -109,7 +109,7 @@
|
|||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover5"
|
android:id="@+id/media_cover5_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -118,8 +118,8 @@
|
|||||||
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
android:layout_marginEnd="@dimen/qs_aa_media_rec_album_margin"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/media_horizontal_center_guideline"
|
app:layout_constraintTop_toBottomOf="@+id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/media_cover4"
|
app:layout_constraintStart_toEndOf="@+id/media_cover4_container"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/media_cover6"
|
app:layout_constraintEnd_toStartOf="@+id/media_cover6_container"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Constraint
|
<Constraint
|
||||||
android:id="@+id/media_cover6"
|
android:id="@+id/media_cover6_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
android:layout_height="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
app:layout_constraintWidth_max="@dimen/qs_aa_media_rec_album_size_expanded"
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
android:layout_marginBottom="@dimen/qs_media_padding"
|
android:layout_marginBottom="@dimen/qs_media_padding"
|
||||||
app:layout_constraintTop_toBottomOf="@id/media_horizontal_center_guideline"
|
app:layout_constraintTop_toBottomOf="@id/media_horizontal_center_guideline"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/media_cover5"
|
app:layout_constraintStart_toEndOf="@id/media_cover5_container"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ class MediaCarouselController @Inject constructor(
|
|||||||
visualStabilityCallback = VisualStabilityManager.Callback {
|
visualStabilityCallback = VisualStabilityManager.Callback {
|
||||||
if (needsReordering) {
|
if (needsReordering) {
|
||||||
needsReordering = false
|
needsReordering = false
|
||||||
reorderAllPlayers()
|
reorderAllPlayers(previousVisiblePlayerKey = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
keysNeedRemoval.forEach { removePlayer(it) }
|
keysNeedRemoval.forEach { removePlayer(it) }
|
||||||
@@ -285,7 +285,7 @@ class MediaCarouselController @Inject constructor(
|
|||||||
return mediaCarousel
|
return mediaCarousel
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reorderAllPlayers() {
|
private fun reorderAllPlayers(previousVisiblePlayerKey: MediaPlayerData.MediaSortKey?) {
|
||||||
mediaContent.removeAllViews()
|
mediaContent.removeAllViews()
|
||||||
for (mediaPlayer in MediaPlayerData.players()) {
|
for (mediaPlayer in MediaPlayerData.players()) {
|
||||||
mediaPlayer.playerViewHolder?.let {
|
mediaPlayer.playerViewHolder?.let {
|
||||||
@@ -299,9 +299,16 @@ class MediaCarouselController @Inject constructor(
|
|||||||
// Automatically scroll to the active player if needed
|
// Automatically scroll to the active player if needed
|
||||||
if (shouldScrollToActivePlayer) {
|
if (shouldScrollToActivePlayer) {
|
||||||
shouldScrollToActivePlayer = false
|
shouldScrollToActivePlayer = false
|
||||||
val activeMediaIndex = MediaPlayerData.activeMediaIndex()
|
val activeMediaIndex = MediaPlayerData.firstActiveMediaIndex()
|
||||||
if (activeMediaIndex != -1) {
|
if (activeMediaIndex != -1) {
|
||||||
mediaCarouselScrollHandler.scrollToActivePlayer(activeMediaIndex)
|
previousVisiblePlayerKey?.let {
|
||||||
|
val previousVisibleIndex = MediaPlayerData.playerKeys()
|
||||||
|
.indexOfFirst { key -> it == key }
|
||||||
|
mediaCarouselScrollHandler
|
||||||
|
.scrollToPlayer(previousVisibleIndex, activeMediaIndex)
|
||||||
|
} ?: {
|
||||||
|
mediaCarouselScrollHandler.scrollToPlayer(destIndex = activeMediaIndex)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -310,6 +317,8 @@ class MediaCarouselController @Inject constructor(
|
|||||||
private fun addOrUpdatePlayer(key: String, oldKey: String?, data: MediaData): Boolean {
|
private fun addOrUpdatePlayer(key: String, oldKey: String?, data: MediaData): Boolean {
|
||||||
val dataCopy = data.copy(backgroundColor = bgColor)
|
val dataCopy = data.copy(backgroundColor = bgColor)
|
||||||
val existingPlayer = MediaPlayerData.getMediaPlayer(key, oldKey)
|
val existingPlayer = MediaPlayerData.getMediaPlayer(key, oldKey)
|
||||||
|
val curVisibleMediaKey = MediaPlayerData.playerKeys()
|
||||||
|
.elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex)
|
||||||
if (existingPlayer == null) {
|
if (existingPlayer == null) {
|
||||||
var newPlayer = mediaControlPanelFactory.get()
|
var newPlayer = mediaControlPanelFactory.get()
|
||||||
newPlayer.attachPlayer(
|
newPlayer.attachPlayer(
|
||||||
@@ -322,12 +331,12 @@ class MediaCarouselController @Inject constructor(
|
|||||||
newPlayer.setListening(currentlyExpanded)
|
newPlayer.setListening(currentlyExpanded)
|
||||||
MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer)
|
MediaPlayerData.addMediaPlayer(key, dataCopy, newPlayer)
|
||||||
updatePlayerToState(newPlayer, noAnimation = true)
|
updatePlayerToState(newPlayer, noAnimation = true)
|
||||||
reorderAllPlayers()
|
reorderAllPlayers(curVisibleMediaKey)
|
||||||
} else {
|
} else {
|
||||||
existingPlayer.bindPlayer(dataCopy, key)
|
existingPlayer.bindPlayer(dataCopy, key)
|
||||||
MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer)
|
MediaPlayerData.addMediaPlayer(key, dataCopy, existingPlayer)
|
||||||
if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) {
|
if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) {
|
||||||
reorderAllPlayers()
|
reorderAllPlayers(curVisibleMediaKey)
|
||||||
} else {
|
} else {
|
||||||
needsReordering = true
|
needsReordering = true
|
||||||
}
|
}
|
||||||
@@ -367,9 +376,11 @@ class MediaCarouselController @Inject constructor(
|
|||||||
ViewGroup.LayoutParams.WRAP_CONTENT)
|
ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
newRecs.recommendationViewHolder?.recommendations?.setLayoutParams(lp)
|
newRecs.recommendationViewHolder?.recommendations?.setLayoutParams(lp)
|
||||||
newRecs.bindRecommendation(data.copy(backgroundColor = bgColor))
|
newRecs.bindRecommendation(data.copy(backgroundColor = bgColor))
|
||||||
|
val curVisibleMediaKey = MediaPlayerData.playerKeys()
|
||||||
|
.elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex)
|
||||||
MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize)
|
MediaPlayerData.addMediaRecommendation(key, data, newRecs, shouldPrioritize)
|
||||||
updatePlayerToState(newRecs, noAnimation = true)
|
updatePlayerToState(newRecs, noAnimation = true)
|
||||||
reorderAllPlayers()
|
reorderAllPlayers(curVisibleMediaKey)
|
||||||
updatePageIndicator()
|
updatePageIndicator()
|
||||||
mediaCarousel.requiresRemeasuring = true
|
mediaCarousel.requiresRemeasuring = true
|
||||||
// Check postcondition: mediaContent should have the same number of children as there are
|
// Check postcondition: mediaContent should have the same number of children as there are
|
||||||
@@ -719,9 +730,8 @@ internal object MediaPlayerData {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private val comparator =
|
private val comparator =
|
||||||
compareByDescending<MediaSortKey>
|
compareByDescending<MediaSortKey> { it.data.isPlaying }
|
||||||
{ if (shouldPrioritizeSs) it.isSsMediaRec else !it.isSsMediaRec }
|
.thenByDescending { if (shouldPrioritizeSs) it.isSsMediaRec else !it.isSsMediaRec }
|
||||||
.thenByDescending { it.data.isPlaying }
|
|
||||||
.thenByDescending { it.data.isLocalSession }
|
.thenByDescending { it.data.isLocalSession }
|
||||||
.thenByDescending { !it.data.resumption }
|
.thenByDescending { !it.data.resumption }
|
||||||
.thenByDescending { it.updateTime }
|
.thenByDescending { it.updateTime }
|
||||||
@@ -771,8 +781,10 @@ internal object MediaPlayerData {
|
|||||||
|
|
||||||
fun players() = mediaPlayers.values
|
fun players() = mediaPlayers.values
|
||||||
|
|
||||||
|
fun playerKeys() = mediaPlayers.keys
|
||||||
|
|
||||||
/** Returns the index of the first non-timeout media. */
|
/** Returns the index of the first non-timeout media. */
|
||||||
fun activeMediaIndex(): Int {
|
fun firstActiveMediaIndex(): Int {
|
||||||
mediaPlayers.entries.forEachIndexed { index, e ->
|
mediaPlayers.entries.forEachIndexed { index, e ->
|
||||||
if (!e.key.isSsMediaRec && e.key.data.active) {
|
if (!e.key.isSsMediaRec && e.key.data.active) {
|
||||||
return index
|
return index
|
||||||
@@ -791,8 +803,6 @@ internal object MediaPlayerData {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun playerKeys() = mediaPlayers.keys
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
fun clear() {
|
fun clear() {
|
||||||
mediaData.clear()
|
mediaData.clear()
|
||||||
|
|||||||
@@ -559,8 +559,17 @@ class MediaCarouselScrollHandler(
|
|||||||
scrollView.relativeScrollX = 0
|
scrollView.relativeScrollX = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
fun scrollToActivePlayer(activePlayerIndex: Int) {
|
/**
|
||||||
val destIndex = Math.min(mediaContent.getChildCount() - 1, activePlayerIndex)
|
* Smooth scroll to the destination player.
|
||||||
|
*
|
||||||
|
* @param sourceIndex optional source index to indicate where the scroll should begin.
|
||||||
|
* @param destIndex destination index to indicate where the scroll should end.
|
||||||
|
*/
|
||||||
|
fun scrollToPlayer(sourceIndex: Int = -1, destIndex: Int) {
|
||||||
|
if (sourceIndex >= 0 && sourceIndex < mediaContent.childCount) {
|
||||||
|
scrollView.relativeScrollX = sourceIndex * playerWidthPlusPadding
|
||||||
|
}
|
||||||
|
val destIndex = Math.min(mediaContent.getChildCount() - 1, destIndex)
|
||||||
val view = mediaContent.getChildAt(destIndex)
|
val view = mediaContent.getChildAt(destIndex)
|
||||||
// We need to post this to wait for the active player becomes visible.
|
// We need to post this to wait for the active player becomes visible.
|
||||||
mainExecutor.executeDelayed({
|
mainExecutor.executeDelayed({
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import android.media.session.PlaybackState;
|
|||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -45,7 +46,6 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.annotation.UiThread;
|
import androidx.annotation.UiThread;
|
||||||
import androidx.constraintlayout.widget.ConstraintSet;
|
import androidx.constraintlayout.widget.ConstraintSet;
|
||||||
|
|
||||||
import com.android.settingslib.Utils;
|
|
||||||
import com.android.settingslib.widget.AdaptiveIcon;
|
import com.android.settingslib.widget.AdaptiveIcon;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||||
@@ -542,7 +542,10 @@ public class MediaControlPanel {
|
|||||||
mContext.getString(R.string.controls_media_smartspace_rec_description, appLabel));
|
mContext.getString(R.string.controls_media_smartspace_rec_description, appLabel));
|
||||||
|
|
||||||
List<ImageView> mediaCoverItems = mRecommendationViewHolder.getMediaCoverItems();
|
List<ImageView> mediaCoverItems = mRecommendationViewHolder.getMediaCoverItems();
|
||||||
|
List<ViewGroup> mediaCoverContainers = mRecommendationViewHolder.getMediaCoverContainers();
|
||||||
List<Integer> mediaCoverItemsResIds = mRecommendationViewHolder.getMediaCoverItemsResIds();
|
List<Integer> mediaCoverItemsResIds = mRecommendationViewHolder.getMediaCoverItemsResIds();
|
||||||
|
List<Integer> mediaCoverContainersResIds =
|
||||||
|
mRecommendationViewHolder.getMediaCoverContainersResIds();
|
||||||
ConstraintSet expandedSet = mMediaViewController.getExpandedLayout();
|
ConstraintSet expandedSet = mMediaViewController.getExpandedLayout();
|
||||||
ConstraintSet collapsedSet = mMediaViewController.getCollapsedLayout();
|
ConstraintSet collapsedSet = mMediaViewController.getCollapsedLayout();
|
||||||
int mediaRecommendationNum = Math.min(mediaRecommendationList.size(),
|
int mediaRecommendationNum = Math.min(mediaRecommendationList.size(),
|
||||||
@@ -561,7 +564,8 @@ public class MediaControlPanel {
|
|||||||
mediaCoverImageView.setImageIcon(recommendation.getIcon());
|
mediaCoverImageView.setImageIcon(recommendation.getIcon());
|
||||||
|
|
||||||
// Set up the media item's click listener if applicable.
|
// Set up the media item's click listener if applicable.
|
||||||
setSmartspaceRecItemOnClickListener(mediaCoverImageView, recommendation);
|
ViewGroup mediaCoverContainer = mediaCoverContainers.get(uiComponentIndex);
|
||||||
|
setSmartspaceRecItemOnClickListener(mediaCoverContainer, recommendation);
|
||||||
|
|
||||||
// Set up the accessibility label for the media item.
|
// Set up the accessibility label for the media item.
|
||||||
String artistName = recommendation.getExtras()
|
String artistName = recommendation.getExtras()
|
||||||
@@ -581,12 +585,18 @@ public class MediaControlPanel {
|
|||||||
if (uiComponentIndex < MEDIA_RECOMMENDATION_ITEMS_PER_ROW) {
|
if (uiComponentIndex < MEDIA_RECOMMENDATION_ITEMS_PER_ROW) {
|
||||||
setVisibleAndAlpha(collapsedSet,
|
setVisibleAndAlpha(collapsedSet,
|
||||||
mediaCoverItemsResIds.get(uiComponentIndex), true);
|
mediaCoverItemsResIds.get(uiComponentIndex), true);
|
||||||
|
setVisibleAndAlpha(collapsedSet,
|
||||||
|
mediaCoverContainersResIds.get(uiComponentIndex), true);
|
||||||
} else {
|
} else {
|
||||||
setVisibleAndAlpha(collapsedSet,
|
setVisibleAndAlpha(collapsedSet,
|
||||||
mediaCoverItemsResIds.get(uiComponentIndex), false);
|
mediaCoverItemsResIds.get(uiComponentIndex), false);
|
||||||
|
setVisibleAndAlpha(collapsedSet,
|
||||||
|
mediaCoverContainersResIds.get(uiComponentIndex), false);
|
||||||
}
|
}
|
||||||
setVisibleAndAlpha(expandedSet,
|
setVisibleAndAlpha(expandedSet,
|
||||||
mediaCoverItemsResIds.get(uiComponentIndex), true);
|
mediaCoverItemsResIds.get(uiComponentIndex), true);
|
||||||
|
setVisibleAndAlpha(expandedSet,
|
||||||
|
mediaCoverContainersResIds.get(uiComponentIndex), true);
|
||||||
|
|
||||||
uiComponentIndex++;
|
uiComponentIndex++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -437,10 +437,10 @@ class MediaDataManager(
|
|||||||
* connection session.
|
* connection session.
|
||||||
*/
|
*/
|
||||||
fun dismissSmartspaceRecommendation(key: String, delay: Long) {
|
fun dismissSmartspaceRecommendation(key: String, delay: Long) {
|
||||||
Log.d(TAG, "Dismissing Smartspace media target")
|
|
||||||
if (smartspaceMediaData.targetId != key) {
|
if (smartspaceMediaData.targetId != key) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Log.d(TAG, "Dismissing Smartspace media target")
|
||||||
if (smartspaceMediaData.isActive) {
|
if (smartspaceMediaData.isActive) {
|
||||||
smartspaceMediaData = EMPTY_SMARTSPACE_MEDIA_DATA.copy(
|
smartspaceMediaData = EMPTY_SMARTSPACE_MEDIA_DATA.copy(
|
||||||
targetId = smartspaceMediaData.targetId)
|
targetId = smartspaceMediaData.targetId)
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ class RecommendationViewHolder private constructor(itemView: View) {
|
|||||||
itemView.requireViewById(R.id.media_cover4),
|
itemView.requireViewById(R.id.media_cover4),
|
||||||
itemView.requireViewById(R.id.media_cover5),
|
itemView.requireViewById(R.id.media_cover5),
|
||||||
itemView.requireViewById(R.id.media_cover6))
|
itemView.requireViewById(R.id.media_cover6))
|
||||||
|
val mediaCoverContainers = listOf<ViewGroup>(
|
||||||
|
itemView.requireViewById(R.id.media_cover1_container),
|
||||||
|
itemView.requireViewById(R.id.media_cover2_container),
|
||||||
|
itemView.requireViewById(R.id.media_cover3_container),
|
||||||
|
itemView.requireViewById(R.id.media_cover4_container),
|
||||||
|
itemView.requireViewById(R.id.media_cover5_container),
|
||||||
|
itemView.requireViewById(R.id.media_cover6_container))
|
||||||
val mediaCoverItemsResIds = listOf<@IntegerRes Int>(
|
val mediaCoverItemsResIds = listOf<@IntegerRes Int>(
|
||||||
R.id.media_cover1,
|
R.id.media_cover1,
|
||||||
R.id.media_cover2,
|
R.id.media_cover2,
|
||||||
@@ -47,6 +54,13 @@ class RecommendationViewHolder private constructor(itemView: View) {
|
|||||||
R.id.media_cover4,
|
R.id.media_cover4,
|
||||||
R.id.media_cover5,
|
R.id.media_cover5,
|
||||||
R.id.media_cover6)
|
R.id.media_cover6)
|
||||||
|
val mediaCoverContainersResIds = listOf<@IntegerRes Int>(
|
||||||
|
R.id.media_cover1_container,
|
||||||
|
R.id.media_cover2_container,
|
||||||
|
R.id.media_cover3_container,
|
||||||
|
R.id.media_cover4_container,
|
||||||
|
R.id.media_cover5_container,
|
||||||
|
R.id.media_cover6_container)
|
||||||
|
|
||||||
// Settings/Guts screen
|
// Settings/Guts screen
|
||||||
val longPressText = itemView.requireViewById<TextView>(R.id.remove_text)
|
val longPressText = itemView.requireViewById<TextView>(R.id.remove_text)
|
||||||
@@ -58,7 +72,7 @@ class RecommendationViewHolder private constructor(itemView: View) {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
(recommendations.background as IlluminationDrawable).let { background ->
|
(recommendations.background as IlluminationDrawable).let { background ->
|
||||||
mediaCoverItems.forEach { background.registerLightSource(it) }
|
mediaCoverContainers.forEach { background.registerLightSource(it) }
|
||||||
background.registerLightSource(cancel)
|
background.registerLightSource(cancel)
|
||||||
background.registerLightSource(dismiss)
|
background.registerLightSource(dismiss)
|
||||||
background.registerLightSource(dismissLabel)
|
background.registerLightSource(dismissLabel)
|
||||||
@@ -100,7 +114,13 @@ class RecommendationViewHolder private constructor(itemView: View) {
|
|||||||
R.id.media_cover3,
|
R.id.media_cover3,
|
||||||
R.id.media_cover4,
|
R.id.media_cover4,
|
||||||
R.id.media_cover5,
|
R.id.media_cover5,
|
||||||
R.id.media_cover6
|
R.id.media_cover6,
|
||||||
|
R.id.media_cover1_container,
|
||||||
|
R.id.media_cover2_container,
|
||||||
|
R.id.media_cover3_container,
|
||||||
|
R.id.media_cover4_container,
|
||||||
|
R.id.media_cover5_container,
|
||||||
|
R.id.media_cover6_container
|
||||||
)
|
)
|
||||||
|
|
||||||
// Res Ids for the components on the guts panel.
|
// Res Ids for the components on the guts panel.
|
||||||
|
|||||||
Reference in New Issue
Block a user