diff --git a/examples/companion_radio/ui-core/ChannelControl.h b/examples/companion_radio/ui-core/ChannelControl.h index 44742689..d29e7577 100644 --- a/examples/companion_radio/ui-core/ChannelControl.h +++ b/examples/companion_radio/ui-core/ChannelControl.h @@ -19,6 +19,10 @@ namespace chanctl { enum Result : uint8_t { OK, FULL, NO_NAME, NO_SECRET, BAD_SECRET, EXISTS, FAILED }; +// A channel's name without the '#' a hashtag channel's starts with -- for a +// label that puts its own '#' in front (as ui-new's tiles do), never "##test". +static inline const char* bareName(const char* name) { return name[0] == '#' ? name + 1 : name; } + static const char* resultText(Result r) { switch (r) { case OK: return "Saved"; diff --git a/examples/companion_radio/ui-new/MessagesScreen.h b/examples/companion_radio/ui-new/MessagesScreen.h index fb5d6700..46b15666 100644 --- a/examples/companion_radio/ui-new/MessagesScreen.h +++ b/examples/companion_radio/ui-new/MessagesScreen.h @@ -721,7 +721,7 @@ class MessagesScreen : public UIScreen { ChannelDetails ch; if (the_mesh.getChannel(pfx[0], ch) && ch.name[0]) { nm[0] = '#'; - DisplayDriver::translateUTF8Static(nm + 1, ch.name, sizeof(nm) - 1); + DisplayDriver::translateUTF8Static(nm + 1, chanctl::bareName(ch.name), sizeof(nm) - 1); } } else { for (int idx = 0; ; idx++) { diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 5775de59..83fa018e 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -463,7 +463,7 @@ class HomeScreen : public UIScreen { ChannelDetails cd; if (!the_mesh.getChannel(c[k].ch, cd) || !cd.name[0]) continue; r.ch = c[k].ch; - snprintf(r.name, sizeof(r.name), "#%s", cd.name[0] == '#' ? cd.name + 1 : cd.name); + snprintf(r.name, sizeof(r.name), "#%s", chanctl::bareName(cd.name)); r.n = _task->getChannelUnread(r.ch); r.overflow = r.n > 0 && _task->getChannelUnreadOverflow(r.ch); } else { @@ -1645,7 +1645,7 @@ public: // '#' marks a channel apart from a contact tile — the two share the // grid and Enter does something different on each. name[0] = '#'; - display.translateUTF8ToBlocks(name + 1, ch.name, sizeof(name) - 1); + display.translateUTF8ToBlocks(name + 1, chanctl::bareName(ch.name), sizeof(name) - 1); unread = _task->getChannelUnread(ch_idx); overflow = unread > 0 && _task->getChannelUnreadOverflow(ch_idx); resolved = true;