Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d835792b authored by Selim Cinek's avatar Selim Cinek
Browse files

Changing media to MotionLayout

Bug: 154137987
Change-Id: Ice66b2bd79a837832cf1ea9bc3920690ac263a5a
parent b98e9ac6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -19,4 +19,4 @@
    systemui:rippleMinSize="30dp"
    systemui:rippleMaxSize="135dp"
    systemui:highlight="15"
    systemui:cornerRadius="@dimen/qs_media_corner_radius" />
 No newline at end of file
    systemui:cornerRadius="?android:attr/dialogCornerRadius" />
 No newline at end of file
+141 −222
Original line number Diff line number Diff line
@@ -16,236 +16,155 @@
  -->

<!-- Layout for media controls inside QSPanel carousel -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/qs_media_controls"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_height="wrap_content"
    android:background="@drawable/qs_media_background"
    android:gravity="center_horizontal|fill_vertical"
    android:paddingTop="@dimen/qs_media_panel_outer_padding"
    android:paddingBottom="@dimen/qs_media_panel_outer_padding"
    android:background="@drawable/qs_media_background"
    >

    <!-- Buttons to remove this view when no longer needed -->
    <include
        layout="@layout/qs_media_panel_options"
        android:visibility="gone"/>

    <LinearLayout
        android:id="@+id/media_guts"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- Header section -->
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="@dimen/qs_media_panel_outer_padding"
            android:paddingStart="@dimen/qs_media_panel_outer_padding"
            android:paddingEnd="16dp"
        >
    app:layoutDescription="@xml/media_scene">

            <ImageView
                android:id="@+id/album_art"
                android:layout_width="@dimen/qs_media_album_size"
                android:layout_height="@dimen/qs_media_album_size"
                android:layout_marginRight="16dp"
                android:layout_weight="0"
            />

            <LinearLayout
                android:orientation="vertical"
    <FrameLayout
        android:id="@+id/notification_media_progress_time"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
                android:layout_weight="1"
            >
                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                >
                    <com.android.internal.widget.CachingIconView
                        android:id="@+id/icon"
                        android:layout_width="16dp"
                        android:layout_height="16dp"
                        android:layout_marginEnd="5dp"
                    />
                    <TextView
                        android:id="@+id/app_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="14sp"
                        android:singleLine="true"
                    />
                </LinearLayout>

                <!-- Song name -->
        android:forceHasOverlappingRendering="false">
        <!-- width is set to "match_parent" to avoid extra layout calls -->
        <TextView
                    android:id="@+id/header_title"
                    android:layout_width="wrap_content"
            android:id="@+id/media_elapsed_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
                    android:singleLine="true"
                    android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
                    android:textSize="18sp"
                    android:paddingBottom="6dp"
                    android:gravity="center"/>
            android:layout_alignParentLeft="true"
            android:fontFamily="@*android:string/config_bodyFontFamily"
            android:gravity="left"
            android:textSize="14sp" />

                <!-- Artist name -->
        <TextView
                    android:id="@+id/header_artist"
                    android:layout_width="wrap_content"
            android:id="@+id/media_total_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:fontFamily="@*android:string/config_bodyFontFamily"
                    android:textSize="14sp"
                    android:singleLine="true"
                />
            </LinearLayout>
            android:gravity="right"
            android:textSize="14sp" />
    </FrameLayout>

    <ImageButton
        android:id="@+id/action0"
        style="@style/MediaPlayer.Button"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action1"
        style="@style/MediaPlayer.Button"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action2"
        style="@style/MediaPlayer.Button"
        android:layout_width="52dp"
        android:layout_height="52dp" />

    <ImageButton
        android:id="@+id/action3"
        style="@style/MediaPlayer.Button"
        android:layout_width="48dp"
        android:layout_height="48dp" />

            <!-- Output chip -->
    <ImageButton
        android:id="@+id/action4"
        style="@style/MediaPlayer.Button"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <!-- Album Art -->
    <ImageView
        android:id="@+id/album_art"
        android:layout_width="@dimen/qs_media_album_size"
        android:layout_height="@dimen/qs_media_album_size" />

    <!-- Seamless Output Switcher -->
    <LinearLayout
        android:id="@+id/media_seamless"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@*android:drawable/media_seamless_background"
        android:orientation="horizontal"
                android:visibility="gone"
                android:paddingTop="6dp"
                android:paddingBottom="6dp"
        android:forceHasOverlappingRendering="false"
        android:paddingLeft="12dp"
        android:paddingTop="6dp"
        android:paddingRight="12dp"
                android:gravity="center"
                android:id="@+id/media_seamless"
                android:background="@*android:drawable/media_seamless_background"
                android:layout_weight="1"
                android:forceHasOverlappingRendering="false"
            >
        android:paddingBottom="6dp">

        <ImageView
            android:id="@+id/media_seamless_image"
            android:layout_width="@dimen/qs_seamless_icon_size"
            android:layout_height="@dimen/qs_seamless_icon_size"
                    android:src="@*android:drawable/ic_media_seamless"
            android:layout_marginRight="8dp"
                    android:id="@+id/media_seamless_image"
                />
            android:src="@*android:drawable/ic_media_seamless" />

        <TextView
            android:id="@+id/media_seamless_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@*android:string/config_bodyFontFamily"
                    android:text="@*android:string/ext_media_seamless_action"
                    android:textSize="14sp"
                    android:id="@+id/media_seamless_text"
            android:singleLine="true"
                />
            </LinearLayout>
            android:text="@*android:string/ext_media_seamless_action"
            android:textSize="14sp" />
    </LinearLayout>

    <!-- Seek Bar -->
    <SeekBar
        android:id="@+id/media_progress_bar"
        style="@android:style/Widget.ProgressBar.Horizontal"
            android:clickable="true"
            android:layout_width="match_parent"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:maxHeight="3dp"
            android:paddingTop="24dp"
            android:paddingBottom="24dp"
            android:layout_marginBottom="-24dp"
            android:layout_marginTop="-24dp"
            android:splitTrack="false"
        />
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:splitTrack="false" />

        <FrameLayout
            android:id="@+id/notification_media_progress_time"
            android:layout_width="match_parent"
    <!-- App name -->
    <TextView
        android:id="@+id/app_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
            android:paddingStart="@dimen/qs_media_panel_outer_padding"
            android:paddingEnd="@dimen/qs_media_panel_outer_padding"
            android:layout_marginBottom="10dp"
            android:layout_gravity="center"
            >
            <!-- width is set to "match_parent" to avoid extra layout calls -->
        android:singleLine="true"
        android:textSize="14sp" />

    <!-- Song name -->
    <TextView
                android:id="@+id/media_elapsed_time"
                android:layout_width="match_parent"
        android:id="@+id/header_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:fontFamily="@*android:string/config_bodyFontFamily"
                android:textSize="14sp"
                android:gravity="left"
            />
        android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
        android:singleLine="true"
        android:textSize="18sp" />

    <!-- Artist name -->
    <TextView
                android:id="@+id/media_total_time"
                android:layout_width="match_parent"
        android:id="@+id/header_artist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@*android:string/config_bodyFontFamily"
                android:layout_alignParentRight="true"
                android:textSize="14sp"
                android:gravity="right"
            />
        </FrameLayout>
        android:singleLine="true"
        android:textSize="14sp" />

        <!-- Controls -->
        <LinearLayout
            android:id="@+id/media_actions"
            android:orientation="horizontal"
            android:layoutDirection="ltr"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingStart="@dimen/qs_media_panel_outer_padding"
            android:paddingEnd="@dimen/qs_media_panel_outer_padding"
            android:gravity="center"
            >
            <ImageButton
                style="@style/MediaPlayer.Button"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:gravity="center"
                android:visibility="gone"
                android:id="@+id/action0"
            />
            <ImageButton
                style="@style/MediaPlayer.Button"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:gravity="center"
                android:visibility="gone"
                android:id="@+id/action1"
            />
            <ImageButton
                style="@style/MediaPlayer.Button"
                android:layout_width="52dp"
                android:layout_height="52dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:gravity="center"
                android:visibility="gone"
                android:id="@+id/action2"
            />
            <ImageButton
                style="@style/MediaPlayer.Button"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:gravity="center"
                android:visibility="gone"
                android:id="@+id/action3"
            />
            <ImageButton
                style="@style/MediaPlayer.Button"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:gravity="center"
    <com.android.internal.widget.CachingIconView
        android:id="@+id/icon"
        android:layout_width="16dp"
        android:layout_height="16dp" />

    <!-- Buttons to remove this view when no longer needed -->
    <include
        layout="@layout/qs_media_panel_options"
        android:visibility="gone"
                android:id="@+id/action4"
            />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
+1 −1
Original line number Diff line number Diff line
@@ -1232,7 +1232,7 @@
    <dimen name="qs_media_padding">8dp</dimen>
    <dimen name="qs_media_panel_outer_padding">16dp</dimen>
    <dimen name="qs_media_corner_radius">10dp</dimen>
    <dimen name="qs_media_album_size">72dp</dimen>
    <dimen name="qs_media_album_size">52dp</dimen>
    <dimen name="qs_seamless_icon_size">20dp</dimen>
    <dimen name="qqs_media_spacing">8dp</dimen>

+312 −0

File added.

Preview size limit exceeded, changes collapsed.

+34 −4
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import android.animation.AnimatorSet
import android.animation.ValueAnimator
import android.content.res.ColorStateList
import android.content.res.Resources
import android.content.res.TypedArray
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.ColorFilter
@@ -49,6 +50,7 @@ private data class RippleData(
@Keep
class IlluminationDrawable : Drawable() {

    private var themeAttrs: IntArray? = null
    private var cornerRadius = 0f
    private var highlightColor = Color.TRANSPARENT
    private val rippleData = RippleData(0f, 0f, 0f, 0f, 0f, 0f, 0f)
@@ -139,12 +141,40 @@ class IlluminationDrawable : Drawable() {
        theme: Resources.Theme?
    ) {
        val a = obtainAttributes(r, theme, attrs, R.styleable.IlluminationDrawable)
        cornerRadius = a.getDimension(R.styleable.IlluminationDrawable_cornerRadius, cornerRadius)
        themeAttrs = a.extractThemeAttrs()
        updateStateFromTypedArray(a)
        a.recycle()
    }

    private fun updateStateFromTypedArray(a: TypedArray) {
        if (a.hasValue(R.styleable.IlluminationDrawable_cornerRadius)) {
            cornerRadius = a.getDimension(R.styleable.IlluminationDrawable_cornerRadius,
                    cornerRadius)
        }
        if (a.hasValue(R.styleable.IlluminationDrawable_rippleMinSize)) {
            rippleData.minSize = a.getDimension(R.styleable.IlluminationDrawable_rippleMinSize, 0f)
        }
        if (a.hasValue(R.styleable.IlluminationDrawable_rippleMaxSize)) {
            rippleData.maxSize = a.getDimension(R.styleable.IlluminationDrawable_rippleMaxSize, 0f)
        rippleData.highlight = a.getInteger(R.styleable.IlluminationDrawable_highlight, 0) / 100f
        }
        if (a.hasValue(R.styleable.IlluminationDrawable_highlight)) {
            rippleData.highlight = a.getInteger(R.styleable.IlluminationDrawable_highlight, 0) /
                    100f
        }
    }

    override fun canApplyTheme(): Boolean {
        return themeAttrs != null && themeAttrs!!.size > 0 || super.canApplyTheme()
    }

    override fun applyTheme(t: Resources.Theme) {
        super.applyTheme(t)
        themeAttrs?.let {
            val a = t.resolveAttributes(it, R.styleable.IlluminationDrawable)
            updateStateFromTypedArray(a)
            a.recycle()
        }
    }

    override fun setColorFilter(p0: ColorFilter?) {
        throw UnsupportedOperationException("Color filters are not supported")
Loading