0.2.66 - End Credits improvements / Gateway: 0.1.47 - End credits redesign

This commit is contained in:
ponzischeme89
2026-08-15 22:26:17 +12:00
parent e528d04b43
commit 4bc4b075ec
28 changed files with 643 additions and 211 deletions
+91 -36
View File
@@ -11,6 +11,17 @@
So the left half of this layout is empty on purpose: it is a hole for the picture that
is already there to show through.
Three things sit on it, and the arrangement is the design: what is *ending* in the top
left, how long until it hands over in the top right, and what is *next* in the panel
down the right-hand side. The two corners are deliberately opposite each other — they
are the two facts a viewer wants at a glance, and putting either inside the panel buries
it in prose the eye has already finished reading.
Nothing here says how fast the picture is running. A chip stating "2× speed" was the
only thing on screen that ever mentioned it, and it explained a mechanism rather than
answering a question: the countdown opposite already says the thing a viewer actually
wants to know, and it stays true whatever speed the stream turned out to sustain.
There is no scrim and no card behind the picture. It sits on somebody's film, and the
only lit surface is the button under focus. -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -21,33 +32,92 @@
android:focusable="false"
android:visibility="gone">
<!-- Why the picture is running fast. Without it a viewer who looks up mid-roll has a
sped-up image and no stated reason for it, which reads as the stream misbehaving.
It sits under the picture's left half rather than in the panel, because it is a
label on the video and not part of what is on next.
<!-- What is playing, top left, above the shrunken picture.
The logo rather than the title because it is the show's own treatment and the one
thing on this screen that is unmistakably *this* programme — the panel opposite is
entirely about the next episode, so without this the screen says what is coming and
never what is ending. The start margin is the shrunken picture's own left edge,
which CREDITS_VIDEO_SCALE and CREDITS_VIDEO_SHIFT_X put at ~34dp on a 16:9 set, so
it reads as belonging to the picture beneath it.
The text fallback under it is not optional decoration: transparent Emby logos are
commonly black, and a black title treatment on this near-black screen is an
invisible heading — the same trap `ui/TitleLogo.kt` exists for. Exactly one of the
two is ever shown. -->
<ImageView
android:id="@+id/player_end_credits_logo"
android:layout_width="wrap_content"
android:layout_height="46dp"
android:layout_gravity="top|start"
android:layout_marginStart="34dp"
android:layout_marginTop="42dp"
android:adjustViewBounds="true"
android:contentDescription="@null"
android:maxWidth="260dp"
android:scaleType="fitStart"
android:visibility="gone"
tools:ignore="ContentDescription"
tools:visibility="visible" />
The start margin is aligned with the shrunken picture's own left edge, which
CREDITS_VIDEO_SCALE and CREDITS_VIDEO_SHIFT_X put at ~34dp on a 16:9 set, so it reads
as a caption on the credits rather than as something floating in the black beside
them. The bottom margin is the seek chip's, for the same reason: it is the height
this app already puts a chip at. -->
<TextView
android:id="@+id/player_end_credits_speed"
android:id="@+id/player_end_credits_logo_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_gravity="top|start"
android:layout_marginStart="34dp"
android:layout_marginBottom="104dp"
android:background="@drawable/time_remaining_cue_background"
android:letterSpacing="0.06"
android:paddingStart="14dp"
android:paddingTop="7dp"
android:paddingEnd="14dp"
android:paddingBottom="7dp"
android:textColor="#FF69CD61"
android:textSize="14sp"
android:layout_marginTop="42dp"
android:ellipsize="end"
android:maxLines="1"
android:maxWidth="260dp"
android:textColor="#E6FFFFFF"
android:textSize="21sp"
android:textStyle="bold"
tools:text="2×" />
android:visibility="gone"
tools:text="Love Story"
tools:visibility="visible" />
<!-- The countdown, top right, opposite the logo.
It is the one number on the screen that changes, and it answers the only question a
viewer has while the credits run: how long until the next episode takes over. Out
here rather than in the panel because the panel is a block of description that the
eye reads once, and a figure counting down inside it drags attention back to prose
somebody has already finished with.
Gone rather than blank until the last minute — the pane can open several minutes
before the file ends, and a countdown reading "4:12" would be the most prominent
thing on screen for most of its life. -->
<LinearLayout
android:id="@+id/player_end_credits_countdown_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|end"
android:layout_marginTop="42dp"
android:layout_marginEnd="72dp"
android:gravity="end"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.14"
android:text="@string/end_credits_next_in_label"
android:textColor="#FF69CD61"
android:textSize="11sp" />
<TextView
android:id="@+id/player_end_credits_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:textColor="#FFFFFFFF"
android:textSize="30sp"
android:textStyle="bold"
tools:text="0:28" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
@@ -111,21 +181,6 @@
android:textSize="13sp"
tools:text="S02E05 · Northbound" />
<!-- Gone rather than blank until the last minute. The pane opens minutes before
the file ends, and a countdown that sat there reading "starting in 4:12"
would be the most prominent thing on it for most of its life. -->
<TextView
android:id="@+id/player_end_credits_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:textColor="#FF69CD61"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone"
tools:text="Starting in 28s"
tools:visibility="visible" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+4 -1
View File
@@ -91,7 +91,10 @@
credits rather than as dismissing a panel: it is the only thing this button does,
and somebody pressing it is asking to watch them. -->
<string name="end_credits_watch">Watch credits</string>
<string name="end_credits_speed">%1$s speed</string>
<!-- The eyebrow over the credits countdown. The figure below it is a clock value rather
than a count of seconds, because the pane can open with minutes still to run and
"in 128" is not a time anybody reads. -->
<string name="end_credits_next_in_label">NEXT EPISODE STARTING IN</string>
<string name="next_up_starting_now">Starting now…</string>
<string name="app_name">Memby</string>
<string name="app_updated_to_version">Memby has been updated to version %1$s.</string>