Introduces a new app widget for music playback control and display. Adds widget provider classes, update manager, view factory, and related resources (layouts, colors, strings, XML). Integrates widget updates with MediaService to reflect current playback state. Updates AndroidManifest to register the widget.
79 lines
3.0 KiB
XML
79 lines
3.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
android:id="@+id/root"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="112dp"
|
|
android:padding="12dp"
|
|
android:background="@drawable/widget_bg">
|
|
|
|
<ImageView
|
|
android:id="@+id/album_art"
|
|
android:layout_width="96dp"
|
|
android:layout_height="match_parent"
|
|
android:scaleType="centerCrop"
|
|
android:contentDescription="@string/widget_content_desc_album_art"/>
|
|
|
|
<LinearLayout
|
|
android:id="@+id/texts"
|
|
android:orientation="vertical"
|
|
android:layout_toRightOf="@id/album_art"
|
|
android:layout_toEndOf="@id/album_art"
|
|
android:layout_toLeftOf="@id/controls"
|
|
android:layout_toStartOf="@id/controls"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_centerVertical="true"
|
|
android:layout_marginStart="12dp">
|
|
|
|
<TextView
|
|
android:id="@+id/title"
|
|
android:maxLines="2"
|
|
android:ellipsize="end"
|
|
android:textStyle="bold"
|
|
android:textSize="16sp"
|
|
android:textColor="@color/widget_title"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"/>
|
|
|
|
<TextView
|
|
android:id="@+id/subtitle"
|
|
android:maxLines="1"
|
|
android:ellipsize="end"
|
|
android:textSize="13sp"
|
|
android:textColor="@color/widget_subtitle"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"/>
|
|
</LinearLayout>
|
|
|
|
<LinearLayout
|
|
android:id="@+id/controls"
|
|
android:layout_alignParentRight="true"
|
|
android:layout_alignParentEnd="true"
|
|
android:orientation="horizontal"
|
|
android:gravity="center"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="match_parent">
|
|
|
|
<ImageButton android:id="@+id/btn_prev"
|
|
android:layout_width="44dp" android:layout_height="44dp"
|
|
android:background="@android:color/transparent"
|
|
android:src="@drawable/ic_skip_previous"
|
|
android:contentDescription="@string/widget_content_desc_prev"
|
|
android:tint="@color/widget_icon_tint"/>
|
|
|
|
<ImageButton android:id="@+id/btn_play_pause"
|
|
android:layout_width="48dp" android:layout_height="48dp"
|
|
android:background="@android:color/transparent"
|
|
android:src="@drawable/ic_play"
|
|
android:contentDescription="@string/widget_content_desc_play_pause"
|
|
android:tint="@color/widget_icon_tint"/>
|
|
|
|
<ImageButton android:id="@+id/btn_next"
|
|
android:layout_width="44dp" android:layout_height="44dp"
|
|
android:background="@android:color/transparent"
|
|
android:src="@drawable/ic_skip_next"
|
|
android:contentDescription="@string/widget_content_desc_next"
|
|
android:tint="@color/widget_icon_tint"/>
|
|
</LinearLayout>
|
|
</RelativeLayout>
|