pull/35293/head
Shane Smiskol 5 days ago
parent e1f86bab05
commit 15283d9778
  1. 24
      selfdrive/ui/qt/network/networking.cc
  2. 1
      selfdrive/ui/qt/network/networking.h
  3. 1
      selfdrive/ui/qt/network/wifi_manager.cc
  4. 46
      selfdrive/ui/qt/widgets/controls.h

@ -184,7 +184,6 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
list->addItem(cellularMeteredToggle);
// Wi-Fi metered toggle
std::vector<QString> longi_button_texts{tr("Unmetered"), tr("Default"), tr("Metered")};
wifiMeteredToggle = new ToggleControl(tr("Wi-Fi Network Metered"), tr("Prevent large data uploads when on a metered Wi-FI connection"), "", false);
wifiMeteredToggle->setEnabled(false);
QObject::connect(wifiMeteredToggle, &ToggleControl::toggleFlipped, [=](bool state) {
@ -201,6 +200,22 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
});
list->addItem(wifiMeteredToggle);
std::vector<QString> metered_button_texts{tr("unmetered"), tr("metered"), tr("default")};
wifiMeteredToggle2 = new MultiButtonControl(tr("Wi-Fi Network Metered"), tr("Prevent large data uploads when on a metered Wi-FI connection"), "", metered_button_texts);
QObject::connect(wifiMeteredToggle2, &MultiButtonControl::buttonClicked, [=](int id) {
std::cout << "Set Wi-Fi metered to " << id << std::endl;
wifiMeteredToggle2->setEnabled(false);
auto pending_call = wifi->setCurrentNetworkMetered(id == 1);
if (pending_call) {
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(*pending_call);
QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=]() {
refresh();
watcher->deleteLater();
});
}
});
list->addItem(wifiMeteredToggle2);
// Hidden Network
hiddenNetworkButton = new ButtonControl(tr("Hidden Network"), tr("CONNECT"));
connect(hiddenNetworkButton, &ButtonControl::clicked, [=]() {
@ -241,15 +256,22 @@ void AdvancedNetworking::refresh() {
wifiMeteredToggle->setEnabled(false);
wifiMeteredToggle->setValue("");
wifiMeteredToggle->setToggled(true);
wifiMeteredToggle2->setEnabled(false);
} else if (wifi->ipv4_address != "") {
bool metered = wifi->currentNetworkMetered();
wifiMeteredToggle->setEnabled(true);
wifiMeteredToggle->setValue("");
wifiMeteredToggle->setToggled(metered);
wifiMeteredToggle2->setEnabled(true);
wifiMeteredToggle2->setCheckedButton(metered ? 1 : 0);
} else {
wifiMeteredToggle->setEnabled(false);
wifiMeteredToggle->setValue("Disconnected");
wifiMeteredToggle->setToggled(false);
wifiMeteredToggle2->setEnabled(false);
}
update();

@ -67,6 +67,7 @@ private:
ButtonControl* hiddenNetworkButton;
ToggleControl* cellularMeteredToggle;
ToggleControl* wifiMeteredToggle;
MultiButtonControl* wifiMeteredToggle2;
WifiManager* wifi = nullptr;
Params params;

@ -398,6 +398,7 @@ std::optional<QDBusPendingCall> WifiManager::setCurrentNetworkMetered(bool meter
int meteredInt = metered ? NM_METERED_YES : NM_METERED_NO;
Connection settings = getConnectionSettings(conn);
settings["connection"]["metered"] = meteredInt;
std::cout << "done\n";
return asyncCall(conn.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings));
}
}

@ -190,10 +190,10 @@ private:
bool store_confirm = false;
};
class ButtonParamControl : public AbstractControl {
class MultiButtonControl : public AbstractControl {
Q_OBJECT
public:
ButtonParamControl(const QString &param, const QString &title, const QString &desc, const QString &icon,
MultiButtonControl(const QString &title, const QString &desc, const QString &icon,
const std::vector<QString> &button_texts, const int minimum_button_width = 225) : AbstractControl(title, desc, icon) {
const QString style = R"(
QPushButton {
@ -211,28 +211,34 @@ public:
QPushButton:checked:enabled {
background-color: #33Ab4C;
}
QPushButton:checked:disabled {
background-color: #9933Ab4C;
}
QPushButton:disabled {
color: #33E4E4E4;
}
)";
key = param.toStdString();
int value = atoi(params.get(key).c_str());
// TODO: none of these look good
// QPushButton:checked:disabled {
// background-color: #227722;
// }
// QPushButton:checked:disabled {
// background-color: #3333Ab4C;
// }
button_group = new QButtonGroup(this);
button_group->setExclusive(true);
for (int i = 0; i < button_texts.size(); i++) {
QPushButton *button = new QPushButton(button_texts[i], this);
button->setCheckable(true);
button->setChecked(i == value);
button->setChecked(i == 0);
button->setStyleSheet(style);
button->setMinimumWidth(minimum_button_width);
hlayout->addWidget(button);
button_group->addButton(button, i);
}
QObject::connect(button_group, QOverload<int>::of(&QButtonGroup::buttonClicked), [=](int id) {
params.put(key, std::to_string(id));
});
QObject::connect(button_group, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &MultiButtonControl::buttonClicked);
}
void setEnabled(bool enable) {
@ -245,6 +251,29 @@ public:
button_group->button(id)->setChecked(true);
}
signals:
void buttonClicked(int id);
protected:
QButtonGroup *button_group;
};
class ButtonParamControl : public MultiButtonControl {
Q_OBJECT
public:
ButtonParamControl(const QString &param, const QString &title, const QString &desc, const QString &icon,
const std::vector<QString> &button_texts, const int minimum_button_width = 225) : MultiButtonControl(title, desc, icon, button_texts, minimum_button_width) {
key = param.toStdString();
int value = atoi(params.get(key).c_str());
if (value > 0 && value >= button_texts.size()) {
button_group->button(value)->setChecked(false);
}
QObject::connect(this, QOverload<int>::of(&MultiButtonControl::buttonClicked), [=](int id) {
params.put(key, std::to_string(id));
});
}
void refresh() {
int value = atoi(params.get(key).c_str());
button_group->button(value)->setChecked(true);
@ -257,7 +286,6 @@ public:
private:
std::string key;
Params params;
QButtonGroup *button_group;
};
class ListWidget : public QWidget {

Loading…
Cancel
Save