diff --git a/firmware/application/ui/ui_btngrid.cpp b/firmware/application/ui/ui_btngrid.cpp index f287832e..666fb1da 100644 --- a/firmware/application/ui/ui_btngrid.cpp +++ b/firmware/application/ui/ui_btngrid.cpp @@ -110,16 +110,18 @@ void BtnGridView::clear() { void BtnGridView::add_items(std::initializer_list new_items) { for (auto item : new_items) { - menu_items.push_back(item); + if (!blacklisted_app(item)) + menu_items.push_back(item); } update_items(); } void BtnGridView::add_item(GridItem new_item) { - menu_items.push_back(new_item); - - update_items(); + if (!blacklisted_app(new_item)) { + menu_items.push_back(new_item); + update_items(); + } } void BtnGridView::update_items() { @@ -232,4 +234,30 @@ bool BtnGridView::on_encoder(const EncoderEvent event) { return set_highlighted(highlighted_item + event); } +/* BlackList ******************************************************/ + +std::unique_ptr blacklist_ptr{}; +size_t blacklist_len{}; + +void load_blacklist() { + File f; + + auto error = f.open(BLACKLIST); + if (error) + return; + + blacklist_ptr = std::unique_ptr(new char[f.size()]); + if (f.read(blacklist_ptr.get(), f.size())) + blacklist_len = f.size(); +} + +bool BtnGridView::blacklisted_app(GridItem new_item) { + std::string app_name = new_item.text; + + if (blacklist_len < app_name.size()) + return false; + + return std::search(blacklist_ptr.get(), blacklist_ptr.get() + blacklist_len, app_name.begin(), app_name.end()) < blacklist_ptr.get() + blacklist_len; +} + } /* namespace ui */ diff --git a/firmware/application/ui/ui_btngrid.hpp b/firmware/application/ui/ui_btngrid.hpp index 57b4f97d..03ba22df 100644 --- a/firmware/application/ui/ui_btngrid.hpp +++ b/firmware/application/ui/ui_btngrid.hpp @@ -36,6 +36,9 @@ #include #include +// file used for listing apps to hide from menu +#define BLACKLIST u"/SETTINGS/blacklist" + namespace ui { struct GridItem { @@ -47,6 +50,8 @@ struct GridItem { // TODO: Prevent default-constructed GridItems. }; +void load_blacklist(); + class BtnGridView : public View { public: BtnGridView(Rect new_parent_rect = {0, 0, 240, 304}, bool keep_highlight = false); @@ -70,6 +75,7 @@ class BtnGridView : public View { void on_blur() override; bool on_key(const KeyEvent event) override; bool on_encoder(const EncoderEvent event) override; + bool blacklisted_app(GridItem new_item); private: int rows_{3}; diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 925d3dca..f1ef3cbc 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -161,6 +161,8 @@ SystemStatusView::SystemStatusView( rtc_battery_workaround(); + ui::load_blacklist(); + if (pmem::should_use_sdcard_for_pmem()) { pmem::load_persistent_settings_from_file(); } @@ -572,8 +574,8 @@ TransmittersMenuView::TransmittersMenuView(NavigationView& nav) { add_items({{"..", Color::light_grey(), &bitmap_icon_previous, [&nav]() { nav.pop(); }}}); } add_items({ - {"ADS-B", ui::Color::green(), &bitmap_icon_adsb, [&nav]() { nav.push(); }}, - {"APRS", ui::Color::green(), &bitmap_icon_aprs, [&nav]() { nav.push(); }}, + {"ADS-B TX", ui::Color::green(), &bitmap_icon_adsb, [&nav]() { nav.push(); }}, + {"APRS TX", ui::Color::green(), &bitmap_icon_aprs, [&nav]() { nav.push(); }}, {"BHT Xy/EP", ui::Color::green(), &bitmap_icon_bht, [&nav]() { nav.push(); }}, {"BurgerPgr", ui::Color::yellow(), &bitmap_icon_burger, [&nav]() { nav.push(); }}, {"GPS Sim", ui::Color::green(), &bitmap_icon_gps_sim, [&nav]() { nav.push(); }},