diff --git a/selfdrive/assets/offroad/icon_close.svg b/selfdrive/assets/offroad/icon_close.svg
new file mode 100644
index 000000000..4c063371a
--- /dev/null
+++ b/selfdrive/assets/offroad/icon_close.svg
@@ -0,0 +1,4 @@
+
diff --git a/selfdrive/assets/offroad/icon_lock_closed.svg b/selfdrive/assets/offroad/icon_lock_closed.svg
new file mode 100644
index 000000000..b78709740
--- /dev/null
+++ b/selfdrive/assets/offroad/icon_lock_closed.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/selfdrive/ui/qt/offroad/networking.cc b/selfdrive/ui/qt/offroad/networking.cc
index e5ea703b4..ebcb10e31 100644
--- a/selfdrive/ui/qt/offroad/networking.cc
+++ b/selfdrive/ui/qt/offroad/networking.cc
@@ -206,12 +206,37 @@ void WifiUI::refresh() {
int i = 0;
for (Network &network : wifi->seen_networks) {
QHBoxLayout *hlayout = new QHBoxLayout;
- hlayout->addSpacing(50);
QLabel *ssid_label = new QLabel(QString::fromUtf8(network.ssid));
ssid_label->setStyleSheet("font-size: 55px;");
hlayout->addWidget(ssid_label, 1, Qt::AlignLeft);
+ if (wifi->isKnownNetwork(network.ssid)) {
+ QPushButton *forgetBtn = new QPushButton();
+ QPixmap pix("../assets/offroad/icon_close.svg");
+
+ forgetBtn->setIcon(QIcon(pix));
+ forgetBtn->setIconSize(QSize(35, 35));
+ forgetBtn->setStyleSheet("QPushButton { background-color: #E22C2C; }");
+ forgetBtn->setFixedSize(100, 90);
+
+ QObject::connect(forgetBtn, &QPushButton::released, [=]() {
+ if (ConfirmationDialog::confirm("Are you sure you want to forget " + QString::fromUtf8(network.ssid) + "?", this)) {
+ wifi->forgetConnection(network.ssid);
+ }
+ });
+
+ hlayout->addWidget(forgetBtn, 0, Qt::AlignRight);
+ } else if (network.security_type == SecurityType::WPA) {
+ QLabel *lockIcon = new QLabel();
+ QPixmap pix("../assets/offroad/icon_lock_closed.svg");
+ lockIcon->setPixmap(pix.scaledToWidth(35, Qt::SmoothTransformation));
+ lockIcon->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ lockIcon->setStyleSheet("QLabel { margin: 0px; padding-left: 15px; padding-right: 15px; }");
+
+ hlayout->addWidget(lockIcon, 0, Qt::AlignRight);
+ }
+
// strength indicator
unsigned int strength_scale = network.strength / 17;
hlayout->addWidget(new NetworkStrengthWidget(strength_scale), 0, Qt::AlignRight);
diff --git a/selfdrive/ui/qt/offroad/wifiManager.cc b/selfdrive/ui/qt/offroad/wifiManager.cc
index 0588cbd56..a29fe1a44 100644
--- a/selfdrive/ui/qt/offroad/wifiManager.cc
+++ b/selfdrive/ui/qt/offroad/wifiManager.cc
@@ -213,7 +213,7 @@ void WifiManager::connect(const Network &n, const QString &password) {
void WifiManager::connect(const Network &n, const QString &username, const QString &password) {
connecting_to_network = n.ssid;
// disconnect();
- forgetNetwork(n.ssid); //Clear all connections that may already exist to the network we are connecting
+ forgetConnection(n.ssid); //Clear all connections that may already exist to the network we are connecting
connect(n.ssid, username, password, n.security_type);
}
@@ -283,7 +283,7 @@ bool WifiManager::isKnownNetwork(const QString &ssid) {
return !pathFromSsid(ssid).path().isEmpty();
}
-void WifiManager::forgetNetwork(const QString &ssid) {
+void WifiManager::forgetConnection(const QString &ssid) {
QDBusObjectPath path = pathFromSsid(ssid);
if (!path.path().isEmpty()) {
QDBusInterface nm2(nm_service, path.path(), nm_settings_conn_iface, bus);
@@ -480,7 +480,7 @@ bool WifiManager::tetheringEnabled() {
void WifiManager::changeTetheringPassword(const QString &newPassword) {
tetheringPassword = newPassword;
if (isKnownNetwork(tethering_ssid.toUtf8())) {
- forgetNetwork(tethering_ssid.toUtf8());
+ forgetConnection(tethering_ssid.toUtf8());
}
addTetheringConnection();
}
diff --git a/selfdrive/ui/qt/offroad/wifiManager.h b/selfdrive/ui/qt/offroad/wifiManager.h
index 31b128863..7aac7025d 100644
--- a/selfdrive/ui/qt/offroad/wifiManager.h
+++ b/selfdrive/ui/qt/offroad/wifiManager.h
@@ -35,6 +35,7 @@ public:
QString ipv4_address;
void refreshNetworks();
+ void forgetConnection(const QString &ssid);
bool isKnownNetwork(const QString &ssid);
void connect(const Network &ssid);
@@ -66,7 +67,6 @@ private:
void connect(const QByteArray &ssid, const QString &username, const QString &password, SecurityType security_type);
QString get_active_ap();
void deactivateConnection(const QString &ssid);
- void forgetNetwork(const QString &ssid);
QVector get_active_connections();
uint get_wifi_device_state();
QByteArray get_property(const QString &network_path, const QString &property);