Skip to content

Pulse 2.4.0

Choose a tag to compare

@riveerxd riveerxd released this 07 Aug 21:19
· 18 commits to master since this release

A new identity, an app icon that is no longer a black square, and a widget that
uses the space you give it.

Updates in place from any 2.x build and keeps your monitors.

A new mark

A blue ring with a red trace cutting through it, replacing the gradient
cardiogram. It shows up in the launcher icon, the widget header, the dashboard
header, the widget's configuration preview, and the ongoing strict-mode
notification — which used to carry a refresh arrow and so read as a monitor being
re-checked when it never was.

The ring is blue because green means something specific now: blue is the app,
green is the thing it measures, red is the moment it breaks.

Colour means something

Charts no longer take their colour from the per-monitor accent. The sparkline, the
history strip under it and the detail screen's latency bars are all operational
green
, and still bleed to red at a failed check. Everything that is chrome — buttons,
chips, badges, headers — stays blue.

The app icon has no black plate

The mark now sits on transparency instead of a dark square.

Worth knowing why it took a rewrite rather than a colour change:
AdaptiveIconDrawable.draw() fills its layer bitmap with Color.BLACK before it
composites its layers, so an adaptive icon with a transparent <background> renders
solid black — in the launcher and in Settings' app-info screen. It is not a
launcher bug and not a stale icon cache. Android has no fully transparent app icon;
a legacy icon is the closest, and where a launcher insists on a plate you now get a
light one instead of a black one.

The ring is also two arcs with a real gap now, rather than a full circle with the gap
faked by a stroke painted in the plate colour — which is what made the plate
impossible to remove in the first place.

Widget: a header you can strip down

The mark, the app name, the fleet summary ("1 of 6 is down") and the settings cog each
switch off on their own. They used to be a single flag, so the only way to drop the
summary was to lose the branding with it.

Widgets already on your home screen keep their current look — old configurations are
migrated.

Widget: columns

A widget dragged flat has spare width and no height. It used to respond by pushing
monitors below the fold and counting them in "+3 more". Now they spill sideways.

Columns are chosen from the size your launcher reports, and three rules keep it
readable:

  • Width always caps the column count — no number of monitors justifies a column
    too narrow to read a name in, so a fixed count of 3 still collapses on a narrow
    widget.
  • Below about 150dp per column the trailing latency is dropped, so names stop
    truncating to "Market…". The dot already carries health and the number is one tap
    away.
  • A widget too short for both a footer and a monitor drops the footer, rather than
    clipping both.

Set Columns: Auto or pin it to 1–3 in the widget's settings.

Under the hood

  • All five copies of the mark are generated from the brand drawing by
    docs/brand/android_assets.py, after a hand-scaled set shipped a Compose mark whose
    ring gap was half the width of the vectors'.
  • Thirty explored logo directions are in docs/brand, with logos.html as a contact
    sheet.
  • 323 JVM tests and 157 on-device tests, up from 299 and 146. The new ones cover
    the widget's column arithmetic — which decides whether a monitor is visible at all —
    and the launcher icon's transparency, both of which are invisible to code review.

Install

adb install -r Pulse-2.4.0-release.apk

Signed with my own key, so Play Protect will ask you to confirm. There is no Play
listing. 1.x used a different application id — the only way across is the JSON export
in Settings.