We fix some UI issues. Also UI should be more resistant to network manager not running. 
old-commit-hash: 43db36d829
commatwo_master
grekiki 4 years ago committed by GitHub
parent e1e9b018a8
commit 0346516eeb
  1. 67
      selfdrive/ui/qt/offroad/networking.cc
  2. 6
      selfdrive/ui/qt/offroad/networking.hpp
  3. 23
      selfdrive/ui/qt/offroad/wifiManager.cc
  4. 5
      selfdrive/ui/qt/widgets/keyboard.cc

@ -8,6 +8,7 @@
#include <QtConcurrent> #include <QtConcurrent>
#include "networking.hpp" #include "networking.hpp"
#include "util.h"
void clearLayout(QLayout* layout) { void clearLayout(QLayout* layout) {
while (QLayoutItem* item = layout->takeAt(0)) { while (QLayoutItem* item = layout->takeAt(0)) {
@ -43,29 +44,38 @@ std::string exec(const char* cmd) {
// Networking functions // 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 { try {
wifi = new WifiManager(this); wifi = new WifiManager(this);
} catch (std::exception &e) { } 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; 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; QVBoxLayout* vlayout = new QVBoxLayout;
if (show_advanced) { if (show_advanced) {
QPushButton* advancedSettings = new QPushButton("Advanced"); QPushButton* advancedSettings = new QPushButton("Advanced");
advancedSettings->setStyleSheet(R"(margin-right: 30px)"); advancedSettings->setStyleSheet(R"(margin-right: 30px)");
advancedSettings->setFixedSize(300, 100); advancedSettings->setFixedSize(350, 100);
connect(advancedSettings, &QPushButton::released, [=](){s->setCurrentIndex(1);}); connect(advancedSettings, &QPushButton::released, [=](){s->setCurrentWidget(an);});
vlayout->addSpacing(10); vlayout->addSpacing(10);
vlayout->addWidget(advancedSettings, 0, Qt::AlignRight); vlayout->addWidget(advancedSettings, 0, Qt::AlignRight);
vlayout->addSpacing(10); 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))); connect(wifiWidget, SIGNAL(connectToNetwork(Network)), this, SLOT(connectToNetwork(Network)));
vlayout->addWidget(wifiWidget, 1); vlayout->addWidget(wifiWidget, 1);
s->addWidget(layoutToWidget(vlayout, this)); wifiScreen = layoutToWidget(vlayout, this);
s->addWidget(wifiScreen);
an = new AdvancedNetworking(this, wifi); an = new AdvancedNetworking(this, wifi);
connect(an, &AdvancedNetworking::backPress, [=](){s->setCurrentIndex(0);}); connect(an, &AdvancedNetworking::backPress, [=](){s->setCurrentWidget(wifiScreen);});
s->addWidget(an); s->addWidget(an);
// Update network status
QTimer* timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(refresh()));
timer->start(5000);
setStyleSheet(R"( setStyleSheet(R"(
QPushButton { QPushButton {
font-size: 50px; font-size: 50px;
margin: 0px; margin: 0px;
padding: 15px; padding: 15px;
border-width: 0; border-width: 0;
border-radius: 7px; border-radius: 30px;
color: #dddddd; color: #dddddd;
background-color: #444444; background-color: #444444;
} }
@ -101,13 +107,20 @@ Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent){
background-color: #222222; background-color: #222222;
} }
)"); )");
setLayout(s); s->setCurrentWidget(wifiScreen);
ui_setup_complete = true;
} }
void Networking::refresh(){ void Networking::refresh(){
if(!this->isVisible()){ if (!this->isVisible()) {
return; return;
} }
if (!ui_setup_complete) {
attemptInitialization();
if (!ui_setup_complete) {
return;
}
}
wifiWidget->refresh(); wifiWidget->refresh();
an->refresh(); an->refresh();
} }
@ -233,7 +246,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
s->addWidget(settingsWidget); s->addWidget(settingsWidget);
ssh = new SSH; ssh = new SSH;
connect(ssh, &SSH::closeSSHSettings, [=](){s->setCurrentIndex(0);}); connect(ssh, &SSH::closeSSHSettings, [=](){s->setCurrentWidget(settingsWidget);});
s->addWidget(ssh); s->addWidget(ssh);
setLayout(s); setLayout(s);
@ -319,14 +332,16 @@ void WifiUI::refresh() {
// SSID // SSID
hlayout->addSpacing(50); hlayout->addSpacing(50);
QString ssid = QString::fromUtf8(network.ssid); QString ssid = QString::fromUtf8(network.ssid);
if(ssid.length() > 30){ if(ssid.length() > 20){
ssid = ssid.left(30)+""; ssid = ssid.left(20 - 3) + "";
} }
QLabel *ssid_label = new QLabel(ssid); ssid += QString(20 - ssid.length(), ' ');
QLabel *ssid_label = new QLabel("<pre>" + ssid + "</pre>");
ssid_label->setStyleSheet(R"( ssid_label->setStyleSheet(R"(
font-size: 55px; font-size: 55px;
)"); )");
hlayout->addWidget(ssid_label); hlayout->addWidget(ssid_label, 0, Qt::AlignLeft);
// TODO: don't use images for this // TODO: don't use images for this
// strength indicator // strength indicator

@ -72,13 +72,17 @@ public:
explicit Networking(QWidget* parent = 0, bool show_advanced = true); explicit Networking(QWidget* parent = 0, bool show_advanced = true);
private: private:
QStackedLayout* s = nullptr; // keyboard, wifiScreen, advanced QStackedLayout* s = nullptr; // nm_warning, keyboard, wifiScreen, advanced
QWidget* wifiScreen = nullptr;
AdvancedNetworking* an = nullptr; AdvancedNetworking* an = nullptr;
bool ui_setup_complete = false;
bool show_advanced;
Network selectedNetwork; Network selectedNetwork;
WifiUI* wifiWidget; WifiUI* wifiWidget;
WifiManager* wifi = nullptr; WifiManager* wifi = nullptr;
void attemptInitialization();
private slots: private slots:
void connectToNetwork(Network n); void connectToNetwork(Network n);

@ -2,8 +2,10 @@
#include <set> #include <set>
#include <stdlib.h> #include <stdlib.h>
#include <iostream> #include <iostream>
#include "wifiManager.hpp"
#include "common/params.h" #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 * 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); QVariant first = response.arguments().at(0);
QDBusVariant dbvFirst = first.value<QDBusVariant>(); QDBusVariant dbvFirst = first.value<QDBusVariant>();
QVariant vFirst = dbvFirst.variant(); QVariant vFirst = dbvFirst.variant();
return vFirst.value<T>(); if (vFirst.canConvert<T>()) {
return vFirst.value<T>();
} else {
LOGE("Variant unpacking failure");
return T();
}
} }
bool compare_by_strength(const Network &a, const Network &b) { 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(); QString active_connection = active_connection_raw.path();
QDBusInterface nm(nm_service, active_connection, props_iface, bus); QDBusInterface nm(nm_service, active_connection, props_iface, bus);
QDBusObjectPath pth = get_response<QDBusObjectPath>(nm.call("Get", connection_iface, "SpecificObject")); QDBusObjectPath pth = get_response<QDBusObjectPath>(nm.call("Get", connection_iface, "SpecificObject"));
QString Ssid = get_property(pth.path(), "Ssid"); if (pth.path() != "" && pth.path() != "/") {
if (Ssid == ssid) { QString Ssid = get_property(pth.path(), "Ssid");
QDBusInterface nm2(nm_service, nm_path, nm_iface, bus); if (Ssid == ssid) {
nm2.call("DeactivateConnection", QVariant::fromValue(active_connection_raw));// TODO change to disconnect 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() { void WifiManager::disconnect() {
QString active_ap = get_active_ap(); QString active_ap = get_active_ap();
if (active_ap!="" && active_ap!="/") { if (active_ap != "" && active_ap != "/") {
deactivate_connections(get_property(active_ap, "Ssid")); deactivate_connections(get_property(active_ap, "Ssid"));
} }
} }

@ -45,10 +45,13 @@ KeyboardLayout::KeyboardLayout(QWidget *parent, std::vector<QVector<QString>> la
font-size: 65px; font-size: 65px;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
border-radius: 7px; border-radius: 30px;
color: #dddddd; color: #dddddd;
background-color: #444444; background-color: #444444;
} }
QPushButton:pressed {
background-color: #000000;
}
)"); )");
setLayout(vlayout); setLayout(vlayout);
} }

Loading…
Cancel
Save