From 0346516eebeeddc0dcedbca01c0e8e5f17059e1d Mon Sep 17 00:00:00 2001 From: grekiki Date: Mon, 15 Feb 2021 13:42:02 +0100 Subject: [PATCH] UI fixes (#20069) We fix some UI issues. Also UI should be more resistant to network manager not running. old-commit-hash: 43db36d829c4f8a6c551c55d54d091c0c05ccc54 --- selfdrive/ui/qt/offroad/networking.cc | 67 ++++++++++++++++---------- selfdrive/ui/qt/offroad/networking.hpp | 6 ++- selfdrive/ui/qt/offroad/wifiManager.cc | 23 ++++++--- selfdrive/ui/qt/widgets/keyboard.cc | 5 +- 4 files changed, 66 insertions(+), 35 deletions(-) diff --git a/selfdrive/ui/qt/offroad/networking.cc b/selfdrive/ui/qt/offroad/networking.cc index 3bc9f8d870..f40ad18136 100644 --- a/selfdrive/ui/qt/offroad/networking.cc +++ b/selfdrive/ui/qt/offroad/networking.cc @@ -8,6 +8,7 @@ #include #include "networking.hpp" +#include "util.h" void clearLayout(QLayout* layout) { while (QLayoutItem* item = layout->takeAt(0)) { @@ -43,29 +44,38 @@ std::string exec(const char* cmd) { // Networking functions -Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent){ +Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent), show_advanced(show_advanced){ + s = new QStackedLayout; + + QLabel* warning = new QLabel("Network manager is inactive!"); + warning->setStyleSheet(R"(font-size: 65px;)"); + + s->addWidget(warning); + setLayout(s); + + QTimer* timer = new QTimer(this); + QObject::connect(timer, SIGNAL(timeout()), this, SLOT(refresh())); + timer->start(5000); + attemptInitialization(); +} + +void Networking::attemptInitialization(){ + // Checks if network manager is active try { wifi = new WifiManager(this); } catch (std::exception &e) { - QLabel* warning = new QLabel("Network manager is inactive!"); - warning->setStyleSheet(R"(font-size: 65px;)"); - - QVBoxLayout* warning_layout = new QVBoxLayout; - warning_layout->addWidget(warning, 0, Qt::AlignCenter); - setLayout(warning_layout); return; } - connect(wifi, SIGNAL(wrongPassword(QString)), this, SLOT(wrongPassword(QString))); - s = new QStackedLayout; + connect(wifi, SIGNAL(wrongPassword(QString)), this, SLOT(wrongPassword(QString))); QVBoxLayout* vlayout = new QVBoxLayout; if (show_advanced) { QPushButton* advancedSettings = new QPushButton("Advanced"); advancedSettings->setStyleSheet(R"(margin-right: 30px)"); - advancedSettings->setFixedSize(300, 100); - connect(advancedSettings, &QPushButton::released, [=](){s->setCurrentIndex(1);}); + advancedSettings->setFixedSize(350, 100); + connect(advancedSettings, &QPushButton::released, [=](){s->setCurrentWidget(an);}); vlayout->addSpacing(10); vlayout->addWidget(advancedSettings, 0, Qt::AlignRight); vlayout->addSpacing(10); @@ -75,24 +85,20 @@ Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent){ connect(wifiWidget, SIGNAL(connectToNetwork(Network)), this, SLOT(connectToNetwork(Network))); vlayout->addWidget(wifiWidget, 1); - s->addWidget(layoutToWidget(vlayout, this)); + wifiScreen = layoutToWidget(vlayout, this); + s->addWidget(wifiScreen); an = new AdvancedNetworking(this, wifi); - connect(an, &AdvancedNetworking::backPress, [=](){s->setCurrentIndex(0);}); + connect(an, &AdvancedNetworking::backPress, [=](){s->setCurrentWidget(wifiScreen);}); s->addWidget(an); - // Update network status - QTimer* timer = new QTimer(this); - QObject::connect(timer, SIGNAL(timeout()), this, SLOT(refresh())); - timer->start(5000); - setStyleSheet(R"( QPushButton { font-size: 50px; margin: 0px; padding: 15px; border-width: 0; - border-radius: 7px; + border-radius: 30px; color: #dddddd; background-color: #444444; } @@ -101,13 +107,20 @@ Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent){ background-color: #222222; } )"); - setLayout(s); + s->setCurrentWidget(wifiScreen); + ui_setup_complete = true; } void Networking::refresh(){ - if(!this->isVisible()){ + if (!this->isVisible()) { return; } + if (!ui_setup_complete) { + attemptInitialization(); + if (!ui_setup_complete) { + return; + } + } wifiWidget->refresh(); an->refresh(); } @@ -233,7 +246,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid s->addWidget(settingsWidget); ssh = new SSH; - connect(ssh, &SSH::closeSSHSettings, [=](){s->setCurrentIndex(0);}); + connect(ssh, &SSH::closeSSHSettings, [=](){s->setCurrentWidget(settingsWidget);}); s->addWidget(ssh); setLayout(s); @@ -319,14 +332,16 @@ void WifiUI::refresh() { // SSID hlayout->addSpacing(50); QString ssid = QString::fromUtf8(network.ssid); - if(ssid.length() > 30){ - ssid = ssid.left(30)+"…"; + if(ssid.length() > 20){ + ssid = ssid.left(20 - 3) + "…"; } - QLabel *ssid_label = new QLabel(ssid); + ssid += QString(20 - ssid.length(), ' '); + + QLabel *ssid_label = new QLabel("
" + ssid + "
"); ssid_label->setStyleSheet(R"( font-size: 55px; )"); - hlayout->addWidget(ssid_label); + hlayout->addWidget(ssid_label, 0, Qt::AlignLeft); // TODO: don't use images for this // strength indicator diff --git a/selfdrive/ui/qt/offroad/networking.hpp b/selfdrive/ui/qt/offroad/networking.hpp index b2df3c5bd8..64f010121b 100644 --- a/selfdrive/ui/qt/offroad/networking.hpp +++ b/selfdrive/ui/qt/offroad/networking.hpp @@ -72,13 +72,17 @@ public: explicit Networking(QWidget* parent = 0, bool show_advanced = true); private: - QStackedLayout* s = nullptr; // keyboard, wifiScreen, advanced + QStackedLayout* s = nullptr; // nm_warning, keyboard, wifiScreen, advanced + QWidget* wifiScreen = nullptr; AdvancedNetworking* an = nullptr; + bool ui_setup_complete = false; + bool show_advanced; Network selectedNetwork; WifiUI* wifiWidget; WifiManager* wifi = nullptr; + void attemptInitialization(); private slots: void connectToNetwork(Network n); diff --git a/selfdrive/ui/qt/offroad/wifiManager.cc b/selfdrive/ui/qt/offroad/wifiManager.cc index 5161d532b3..26384b84fa 100644 --- a/selfdrive/ui/qt/offroad/wifiManager.cc +++ b/selfdrive/ui/qt/offroad/wifiManager.cc @@ -2,8 +2,10 @@ #include #include #include -#include "wifiManager.hpp" + #include "common/params.h" +#include "common/swaglog.h" +#include "wifiManager.hpp" /** * We are using a NetworkManager DBUS API : https://developer.gnome.org/NetworkManager/1.26/spec.html @@ -45,7 +47,12 @@ T get_response(QDBusMessage response) { QVariant first = response.arguments().at(0); QDBusVariant dbvFirst = first.value(); QVariant vFirst = dbvFirst.variant(); - return vFirst.value(); + if (vFirst.canConvert()) { + return vFirst.value(); + } else { + LOGE("Variant unpacking failure"); + return T(); + } } bool compare_by_strength(const Network &a, const Network &b) { @@ -229,10 +236,12 @@ void WifiManager::deactivate_connections(QString ssid) { QString active_connection = active_connection_raw.path(); QDBusInterface nm(nm_service, active_connection, props_iface, bus); QDBusObjectPath pth = get_response(nm.call("Get", connection_iface, "SpecificObject")); - QString Ssid = get_property(pth.path(), "Ssid"); - if (Ssid == ssid) { - QDBusInterface nm2(nm_service, nm_path, nm_iface, bus); - nm2.call("DeactivateConnection", QVariant::fromValue(active_connection_raw));// TODO change to disconnect + if (pth.path() != "" && pth.path() != "/") { + QString Ssid = get_property(pth.path(), "Ssid"); + if (Ssid == ssid) { + QDBusInterface nm2(nm_service, nm_path, nm_iface, bus); + nm2.call("DeactivateConnection", QVariant::fromValue(active_connection_raw));// TODO change to disconnect + } } } } @@ -347,7 +356,7 @@ void WifiManager::change(unsigned int new_state, unsigned int previous_state, un void WifiManager::disconnect() { QString active_ap = get_active_ap(); - if (active_ap!="" && active_ap!="/") { + if (active_ap != "" && active_ap != "/") { deactivate_connections(get_property(active_ap, "Ssid")); } } diff --git a/selfdrive/ui/qt/widgets/keyboard.cc b/selfdrive/ui/qt/widgets/keyboard.cc index a00395c22b..8a8006ed99 100644 --- a/selfdrive/ui/qt/widgets/keyboard.cc +++ b/selfdrive/ui/qt/widgets/keyboard.cc @@ -45,10 +45,13 @@ KeyboardLayout::KeyboardLayout(QWidget *parent, std::vector> la font-size: 65px; margin: 0px; padding: 0px; - border-radius: 7px; + border-radius: 30px; color: #dddddd; background-color: #444444; } + QPushButton:pressed { + background-color: #000000; + } )"); setLayout(vlayout); }