This commit is contained in:
ponzischeme89
2026-08-24 22:56:46 +12:00
parent 4f95767e2f
commit 396d35e2f5
48 changed files with 1541 additions and 672 deletions
@@ -1,9 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- A wash, not a panel. This sits on a programme somebody is still watching, so it has no
stroke and no flat fill: it is darkest under the logo, where the type needs the
contrast, and thins towards the countdown so the bar reads as part of the picture
rather than as a card laid over it. -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#F2101418" />
<corners android:radius="14dp" />
<stroke
android:width="1dp"
android:color="#26FFFFFF" />
<gradient
android:angle="0"
android:centerColor="#D0070A0C"
android:endColor="#8C070A0C"
android:startColor="#F0070A0C"
android:type="linear" />
</shape>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#3DFFFFFF" />
</shape>
@@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- A shallow native end-of-episode overlay. The outgoing PlayerView is scaled into the
open left side while this single prefetched episode card fades in. -->
<!-- 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. Nothing here is focusable — the bar takes no part in the
remote's world, so the transport, the seek keys and the centre button all keep meaning
what they meant a moment before it appeared. Play now is the transport's own Next
Episode button, which is offered whenever this bar is, and 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"
@@ -10,102 +20,89 @@
android:visibility="gone">
<LinearLayout
android:layout_width="420dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="50dp"
android:layout_gravity="bottom|start"
android:layout_marginStart="48dp"
android:layout_marginBottom="48dp"
android:background="@drawable/next_up_banner_background"
android:orientation="vertical"
android:padding="20dp">
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">
<ImageView
android:id="@+id/player_next_up_image"
android:layout_width="match_parent"
android:layout_height="214dp"
android:background="#FF1B2026"
android:contentDescription="@null"
android:scaleType="centerCrop" />
<TextView
<!-- 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="wrap_content"
android:layout_marginTop="18dp"
android:letterSpacing="0.14"
android:text="@string/next_up_label"
android:textColor="#FF69CD61"
android:textSize="11sp" />
android:layout_height="34dp">
<TextView
android:id="@+id/player_next_up_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="#FFFFFFFF"
android:textSize="24sp"
android:textStyle="bold" />
<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_meta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#BFFFFFFF"
android:textSize="13sp" />
<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>
<TextView
android:id="@+id/player_next_up_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:textColor="#FF69CD61"
android:textSize="16sp"
android:textStyle="bold" />
<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:layout_marginTop="16dp"
android:orientation="horizontal"
tools:ignore="ButtonStyle">
android:orientation="vertical">
<Button
android:id="@+id/player_next_up_play"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/next_up_primary_button"
android:focusable="true"
android:minWidth="0dp"
android:paddingStart="22dp"
android:paddingTop="9dp"
android:paddingEnd="22dp"
android:paddingBottom="9dp"
android:stateListAnimator="@null"
android:text="@string/next_up_play_now"
android:textAllCaps="false"
android:textColor="@color/next_up_button_text"
android:textSize="15sp" />
android:letterSpacing="0.14"
android:text="@string/next_up_next_episode"
android:textColor="#FF69CD61"
android:textSize="11sp"
android:textStyle="bold" />
<Button
android:id="@+id/player_next_up_dismiss"
<TextView
android:id="@+id/player_next_up_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:background="@drawable/next_up_secondary_button"
android:focusable="true"
android:minWidth="0dp"
android:paddingStart="22dp"
android:paddingTop="9dp"
android:paddingEnd="22dp"
android:paddingBottom="9dp"
android:stateListAnimator="@null"
android:text="@string/next_up_dismiss"
android:textAllCaps="false"
android:textColor="@color/next_up_button_text"
android:textSize="15sp" />
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" />
</LinearLayout>
</FrameLayout>
+8 -2
View File
@@ -87,8 +87,14 @@
<string name="player_skip_intro_countdown">%1$s left</string>
<string name="next_up_label">NEXT UP</string>
<string name="next_up_play_now">Play now</string>
<string name="next_up_dismiss">Dismiss</string>
<string name="next_up_starting_in">Starting in %1$ds</string>
<!-- The eyebrow on the compact next-up bar. "NEXT EPISODE" rather than "NEXT UP":
with the show's own logo beside it there is room to say which of the two the bar
is promising, and the credits pane already uses the longer wording. -->
<string name="next_up_next_episode">NEXT EPISODE</string>
<!-- The line under the eyebrow, given the same figure the ring beside it is drawing:
a clock value over a minute, a bare count of seconds under one. Two figures on one
bar that disagree - "60s" beside "1:00" - read as a countdown that has gone wrong. -->
<string name="next_up_starting_in">Starting in %1$s</string>
<!-- The way back to the credits at normal size and normal speed. Worded as wanting the
credits rather than as dismissing a panel: it is the only thing this button does,
and somebody pressing it is asking to watch them. -->