2026-07-29 15:26:40 +12:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
2026-08-24 22:56:46 +12:00
|
|
|
<!-- 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
|
2026-08-26 21:31:05 +12:00
|
|
|
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.
|
2026-08-24 22:56:46 +12:00
|
|
|
|
|
|
|
|
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. -->
|
2026-07-29 15:26:40 +12:00
|
|
|
<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
|
2026-08-24 22:56:46 +12:00
|
|
|
android:layout_width="wrap_content"
|
2026-07-29 15:26:40 +12:00
|
|
|
android:layout_height="wrap_content"
|
2026-08-24 22:56:46 +12:00
|
|
|
android:layout_gravity="bottom|start"
|
|
|
|
|
android:layout_marginStart="48dp"
|
|
|
|
|
android:layout_marginBottom="48dp"
|
2026-07-29 15:26:40 +12:00
|
|
|
android:background="@drawable/next_up_banner_background"
|
2026-08-24 22:56:46 +12:00
|
|
|
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">
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<!-- 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
|
2026-07-29 15:26:40 +12:00
|
|
|
android:layout_width="wrap_content"
|
2026-08-24 22:56:46 +12:00
|
|
|
android:layout_height="34dp">
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<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" />
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<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>
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<View
|
|
|
|
|
android:layout_width="1dp"
|
|
|
|
|
android:layout_height="26dp"
|
|
|
|
|
android:layout_marginStart="18dp"
|
|
|
|
|
android:layout_marginEnd="18dp"
|
|
|
|
|
android:background="@drawable/next_up_divider" />
|
2026-07-29 15:26:40 +12:00
|
|
|
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-08-24 22:56:46 +12:00
|
|
|
android:orientation="vertical">
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<TextView
|
2026-07-29 15:26:40 +12:00
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-08-24 22:56:46 +12:00
|
|
|
android:letterSpacing="0.14"
|
|
|
|
|
android:text="@string/next_up_next_episode"
|
|
|
|
|
android:textColor="#FF69CD61"
|
|
|
|
|
android:textSize="11sp"
|
|
|
|
|
android:textStyle="bold" />
|
2026-07-29 15:26:40 +12:00
|
|
|
|
2026-08-24 22:56:46 +12:00
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/player_next_up_countdown"
|
2026-07-29 15:26:40 +12:00
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-08-24 22:56:46 +12:00
|
|
|
android:layout_marginTop="3dp"
|
|
|
|
|
android:maxLines="1"
|
|
|
|
|
android:textColor="#D9FFFFFF"
|
|
|
|
|
android:textSize="13sp"
|
|
|
|
|
tools:text="Starting in 15s" />
|
2026-07-29 15:26:40 +12:00
|
|
|
</LinearLayout>
|
2026-08-24 22:56:46 +12:00
|
|
|
|
|
|
|
|
<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" />
|
2026-08-26 21:31:05 +12:00
|
|
|
|
|
|
|
|
<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>
|
2026-07-29 15:26:40 +12:00
|
|
|
</LinearLayout>
|
|
|
|
|
</FrameLayout>
|