Files
memby/app/src/main/res/layout/player_next_up_banner.xml
T
2026-08-26 21:31:05 +12:00

144 lines
6.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- What is on next, said in one short bar in the bottom-left corner while the episode the
viewer is watching keeps playing behind it.
It replaced a 420dp card that shrank the picture to 58% to make room for itself, which
is the whole complaint: the credits are the last thing an episode has to say and the
overlay was covering them. Only the action pill at the end is focusable — the rest of
the bar takes no part in the remote's world, so the transport and the seek keys keep
meaning what they meant a moment before it appeared while nothing has been pressed. The
transport's own Next Episode button is still offered whenever this bar is, for a viewer
who already has the controls up; the pill is the same action reachable without them.
PlayerActivity gives it focus as the bar appears and hands focus back to the video the
moment it goes, the `player_skip_intro` pattern. Back dismisses.
Everything is in dp and nothing is measured against the screen, so it is the same size
on a 720p set and a 4K one; the safe-area margins keep it clear of overscan. -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/player_next_up"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="false"
android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_marginStart="48dp"
android:layout_marginBottom="48dp"
android:background="@drawable/next_up_banner_background"
android:baselineAligned="false"
android:focusable="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="22dp"
android:paddingTop="13dp"
android:paddingEnd="22dp"
android:paddingBottom="13dp">
<!-- The show's own title treatment, with its name as the fallback underneath. Both
live in the same slot at the same height, so which one arrives cannot change
the shape of the bar. -->
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="34dp">
<ImageView
android:id="@+id/player_next_up_logo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@null"
android:maxWidth="168dp"
android:scaleType="fitStart"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/player_next_up_series"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:maxWidth="220dp"
android:textColor="#FFFFFFFF"
android:textSize="18sp"
android:textStyle="bold"
tools:text="Lioness" />
</FrameLayout>
<View
android:layout_width="1dp"
android:layout_height="26dp"
android:layout_marginStart="18dp"
android:layout_marginEnd="18dp"
android:background="@drawable/next_up_divider" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.14"
android:text="@string/next_up_next_episode"
android:textColor="#FF69CD61"
android:textSize="11sp"
android:textStyle="bold" />
<TextView
android:id="@+id/player_next_up_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:maxLines="1"
android:textColor="#D9FFFFFF"
android:textSize="13sp"
tools:text="Starting in 15s" />
</LinearLayout>
<com.ponzischeme89.memby.ui.player.CountdownRingView
android:id="@+id/player_next_up_ring"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginStart="20dp" />
<View
android:layout_width="1dp"
android:layout_height="26dp"
android:layout_marginStart="18dp"
android:layout_marginEnd="18dp"
android:background="@drawable/next_up_divider" />
<!-- The one focusable thing on the bar. A remote has no other way to say "press
this", so the pill is what takes focus — never the bar around it, which would
leave a click landing without anywhere on screen to show it was aimed. -->
<LinearLayout
android:id="@+id/player_next_up_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/next_up_primary_button"
android:focusable="true"
android:gravity="center_vertical"
android:paddingStart="18dp"
android:paddingTop="9dp"
android:paddingEnd="18dp"
android:paddingBottom="9dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:text="@string/next_up_start_next_episode"
android:textColor="@color/next_up_button_text"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</FrameLayout>