From 64aa36ccc3d8cdbeb161f2cc4e54d27a537a72a7 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 20 May 2025 00:35:32 -0700 Subject: [PATCH] nice experience --- selfdrive/ui/qt/network/networking.cc | 11 +++++++++-- selfdrive/ui/qt/network/wifi_manager.cc | 7 +++---- selfdrive/ui/qt/network/wifi_manager.h | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/selfdrive/ui/qt/network/networking.cc b/selfdrive/ui/qt/network/networking.cc index ed79b9ba01..46fb6b7892 100644 --- a/selfdrive/ui/qt/network/networking.cc +++ b/selfdrive/ui/qt/network/networking.cc @@ -210,10 +210,17 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid wifiMeteredToggle = new ToggleControl(tr("Metered Wi-Fi Network"), tr("Prevent large data uploads when on a metered connection"), "", false); wifiMeteredToggle->setEnabled(false); QObject::connect(wifiMeteredToggle, &ToggleControl::toggleFlipped, [=](bool state) { - wifi->setCurrentNetworkMetered(state); + std::cout << "Set Wi-Fi metered to " << state << std::endl; wifiMeteredToggle->setValue(state ? "Metered" : "Unmetered"); wifiMeteredToggle->setEnabled(false); - std::cout << "Set Wi-Fi metered to " << state << std::endl; + auto pending_call = wifi->setCurrentNetworkMetered(state); + if (pending_call) { + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(*pending_call); + QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=]() { + refresh(); + watcher->deleteLater(); + }); + } }); list->addItem(wifiMeteredToggle); diff --git a/selfdrive/ui/qt/network/wifi_manager.cc b/selfdrive/ui/qt/network/wifi_manager.cc index 9090dec98e..1befa97633 100644 --- a/selfdrive/ui/qt/network/wifi_manager.cc +++ b/selfdrive/ui/qt/network/wifi_manager.cc @@ -396,7 +396,7 @@ bool WifiManager::currentNetworkMetered() { return type != NetworkType::NONE && type != NetworkType::WIFI && type != NetworkType::ETHERNET; } -bool WifiManager::setCurrentNetworkMetered(bool metered) { +std::optional WifiManager::setCurrentNetworkMetered(bool metered) { // auto primary_conn = call(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); // std::cout << "Primary connection: " << primary_conn.path() << "\n"; // QDBusObjectPath settingsConnPath = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection"); @@ -417,13 +417,12 @@ bool WifiManager::setCurrentNetworkMetered(bool metered) { settings["connection"]["metered"] = meteredInt; std::cout << "done setting metered to " << meteredInt << "\n"; - asyncCall(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings)); - return true; + return asyncCall(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings)); } } } } - return false; + return std::nullopt; //// NetworkType type = currentNetworkType(); // std::cout << "Setting metered to " << metered << " for type " << (int)type << "\n"; diff --git a/selfdrive/ui/qt/network/wifi_manager.h b/selfdrive/ui/qt/network/wifi_manager.h index e48ec0a2da..ccbd562d5c 100644 --- a/selfdrive/ui/qt/network/wifi_manager.h +++ b/selfdrive/ui/qt/network/wifi_manager.h @@ -55,7 +55,7 @@ public: std::optional activateWifiConnection(const QString &ssid); NetworkType currentNetworkType(); bool currentNetworkMetered(); - bool setCurrentNetworkMetered(bool metered); + std::optional setCurrentNetworkMetered(bool metered); void updateGsmSettings(bool roaming, QString apn, bool metered); void connect(const Network &ssid, const bool is_hidden = false, const QString &password = {}, const QString &username = {});