diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp b/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp index b262b3b..55c20d2 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp @@ -6,7 +6,6 @@ using namespace UI; using namespace UI::Page; -using WifiInfo = wifiHandlerInterface::WifiInfo; WifiSettings::WifiSettings(std::shared_ptr aWifi) : Base(ID::Pages::WifiSettings), mWifi(aWifi), @@ -19,31 +18,15 @@ WifiSettings::WifiSettings(std::shared_ptr aWifi) // Set Handler for when the wifi scan is done mScanCompleteHandler = [this](auto aWifiInfos) { + if (aWifiInfos.empty()) { + mScanningText->SetText("No Networks Found"); + return; + } mScanningText->SetText("Networks Found"); - // Create List of wifi infos + // Create List of wifi infos that when pressed a Keyboard opens for (WifiInfo wifiInfo : aWifiInfos) { mWifiNetworks->AddItem(wifiInfo.ssid, LV_SYMBOL_WIFI, [this, wifiInfo] { - if (!mPasswordGetter) { - // Launch a Keyboard if we dont already have one when user selects - // list item - auto keyboard = std::make_unique( - [this, wifiInfo](auto aUserEnteredPassword) { - // Attempt Connection when user finishes up with keyboard input - mWifi->connect(wifiInfo.ssid, aUserEnteredPassword); - mScanningText->SetText("Attempting Connection to " + - wifiInfo.ssid); - mPasswordGetter->AnimateOut(); - StartHandlingStatusUpdates(); - }, - "Password:"); - keyboard->OnKeyboardAnimatedOut([this] { - // Once keyboard is done animating out remove it and null the ref to - // it. - RemoveElement(mPasswordGetter); - mPasswordGetter = nullptr; - }); - mPasswordGetter = AddElement(std::move(keyboard)); - } + OpenPasswordKeyboard(wifiInfo); }); } }; @@ -51,6 +34,29 @@ WifiSettings::WifiSettings(std::shared_ptr aWifi) mWifi->scan(); } +void WifiSettings::OpenPasswordKeyboard(WifiInfo aNetworkToConnectTo) { + // We already have a Keyboard don't launch another one. + if (mPasswordGetter) { + return; + } + auto keyboard = std::make_unique( + [this, aNetworkToConnectTo](auto aUserEnteredPassword) { + // Attempt Connection when user finishes up with keyboard input + mWifi->connect(aNetworkToConnectTo.ssid, aUserEnteredPassword); + mScanningText->SetText("Attempting Connection to " + + aNetworkToConnectTo.ssid); + mPasswordGetter->AnimateOut(); + StartHandlingStatusUpdates(); + }, + "Password:"); + keyboard->OnKeyboardAnimatedOut([this] { + // Keyboard is done animating out remove it and null the ref + RemoveElement(mPasswordGetter); + mPasswordGetter = nullptr; + }); + mPasswordGetter = AddElement(std::move(keyboard)); +} + void WifiSettings::StartHandlingStatusUpdates() { mScanStatusHandler = [this](auto aWifiStatus) { if (aWifiStatus.isConnected) { diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp b/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp index 9e04d67..cb938f8 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp @@ -10,6 +10,7 @@ class Keyboard; namespace UI::Page { class WifiSettings : public Base { +using WifiInfo = wifiHandlerInterface::WifiInfo; public: WifiSettings(std::shared_ptr aWifi); @@ -20,7 +21,10 @@ public: protected: void StartHandlingStatusUpdates(); + void OpenPasswordKeyboard(WifiInfo aNetworkToConnectTo); + private: + std::shared_ptr mWifi; Handler mScanCompleteHandler; Handler mScanStatusHandler;