Qt-UI Cleanup SSH and Tethering password (#20169)

Co-authored-by: Comma Device <device@comma.ai>
pull/20141/head
grekiki 4 years ago committed by GitHub
parent 2b9a8e18fd
commit c60cc0310c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 51
      selfdrive/ui/qt/offroad/networking.cc
  2. 11
      selfdrive/ui/qt/widgets/input_field.cc
  3. 4
      selfdrive/ui/qt/widgets/input_field.hpp
  4. 6
      selfdrive/ui/qt/widgets/keyboard.cc

@ -5,7 +5,6 @@
#include <QPushButton> #include <QPushButton>
#include <QLineEdit> #include <QLineEdit>
#include <QRandomGenerator> #include <QRandomGenerator>
#include <QtConcurrent>
#include <algorithm> #include <algorithm>
#include "common/params.h" #include "common/params.h"
@ -30,20 +29,6 @@ QWidget* layoutToWidget(QLayout* l, QWidget* parent){
return q; return q;
} }
// https://stackoverflow.com/questions/478898/how-do-i-execute-a-command-and-get-the-output-of-the-command-within-c-using-po
std::string exec(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
if (!pipe) {
throw std::runtime_error("popen() failed!");
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += buffer.data();
}
return result;
}
// Networking functions // Networking functions
Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent), show_advanced(show_advanced){ Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent), show_advanced(show_advanced){
@ -131,23 +116,19 @@ void Networking::connectToNetwork(Network n) {
if (n.security_type == SecurityType::OPEN) { if (n.security_type == SecurityType::OPEN) {
wifi->connect(n); wifi->connect(n);
} else if (n.security_type == SecurityType::WPA) { } else if (n.security_type == SecurityType::WPA) {
QString pass = InputDialog::getText("Enter password for \"" + n.ssid + "\""); QString pass = InputDialog::getText("Enter password for \"" + n.ssid + "\"", 8);
wifi->connect(n, pass); wifi->connect(n, pass);
} }
} }
void Networking::wrongPassword(QString ssid) { void Networking::wrongPassword(QString ssid) {
return; // TODO: add this back
/*
for (Network n : wifi->seen_networks) { for (Network n : wifi->seen_networks) {
if (n.ssid == ssid) { if (n.ssid == ssid) {
inputField->setPromptText("Wrong password for \"" + n.ssid +"\""); QString pass = InputDialog::getText("Wrong password for \"" + n.ssid +"\"", 8);
s->setCurrentIndex(0); wifi->connect(n, pass);
emit openKeyboard();
return; return;
} }
} }
*/
} }
QFrame* hline(QWidget* parent = 0){ QFrame* hline(QWidget* parent = 0){
@ -193,7 +174,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
editPasswordButton = new QPushButton("EDIT"); editPasswordButton = new QPushButton("EDIT");
editPasswordButton->setFixedWidth(500); editPasswordButton->setFixedWidth(500);
connect(editPasswordButton, &QPushButton::released, [=](){ connect(editPasswordButton, &QPushButton::released, [=](){
QString pass = InputDialog::getText("Enter new tethering password"); QString pass = InputDialog::getText("Enter new tethering password", 8);
if (pass.size()) { if (pass.size()) {
wifi->changeTetheringPassword(pass); wifi->changeTetheringPassword(pass);
} }
@ -255,16 +236,11 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
} }
bool AdvancedNetworking::isSSHEnabled(){ bool AdvancedNetworking::isSSHEnabled(){
QString response = QString::fromStdString(exec("systemctl is-active ssh")); return Params().get("SshEnabled") == "1";
return response.startsWith("active");
} }
void AdvancedNetworking::refresh(){ void AdvancedNetworking::refresh(){
ipLabel->setText(wifi->ipv4_address); ipLabel->setText(wifi->ipv4_address);
// Don't refresh while changing SSH state
if(!toggle_switch_SSH->getEnabled()){
return;
}
if (toggle_switch_SSH->on != isSSHEnabled()) { if (toggle_switch_SSH->on != isSSHEnabled()) {
toggle_switch_SSH->togglePosition(); toggle_switch_SSH->togglePosition();
} }
@ -281,23 +257,8 @@ void AdvancedNetworking::toggleTethering(int enable) {
editPasswordButton->setEnabled(!enable); editPasswordButton->setEnabled(!enable);
} }
void enableSSH(Toggle* toggle_switch_SSH){
Params().write_db_value("SshEnabled", "1");
toggle_switch_SSH->setEnabled(true);
}
void disableSSH(Toggle* toggle_switch_SSH){
Params().write_db_value("SshEnabled", "0");
toggle_switch_SSH->setEnabled(true);
}
void AdvancedNetworking::toggleSSH(int enable) { void AdvancedNetworking::toggleSSH(int enable) {
toggle_switch_SSH->setEnabled(false); Params().write_db_value("SshEnabled", QString::number(enable).toStdString());
if (enable) {
QtConcurrent::run(enableSSH, toggle_switch_SSH);
} else {
QtConcurrent::run(disableSSH, toggle_switch_SSH);
}
} }

@ -56,8 +56,9 @@ InputDialog::InputDialog(QString prompt_text, QWidget *parent): QDialog(parent)
setLayout(layout); setLayout(layout);
} }
QString InputDialog::getText(const QString prompt) { QString InputDialog::getText(const QString prompt, int minLength) {
InputDialog d = InputDialog(prompt); InputDialog d = InputDialog(prompt);
d.setMinLength(minLength);
const int ret = d.exec(); const int ret = d.exec();
if (ret) { if (ret) {
return d.text(); return d.text();
@ -81,8 +82,12 @@ void InputDialog::handleInput(QString s) {
} }
if (!QString::compare(s,"")) { if (!QString::compare(s,"")) {
if (line->text().length() > minLength){
done(QDialog::Accepted); done(QDialog::Accepted);
emitText(line->text()); emitText(line->text());
} else {
setMessage("Need at least "+QString::number(minLength)+" characters!", false);
}
} }
QVector<QString> control_buttons {"", "", "ABC", "", "#+=", "", "123"}; QVector<QString> control_buttons {"", "", "ABC", "", "#+=", "", "123"};
@ -105,3 +110,7 @@ void InputDialog::setMessage(QString message, bool clearInputField){
line->setText(""); line->setText("");
} }
} }
void InputDialog::setMinLength(int length){
minLength = length;
}

@ -14,12 +14,14 @@ class InputDialog : public QDialog {
public: public:
explicit InputDialog(QString prompt_text, QWidget* parent = 0); explicit InputDialog(QString prompt_text, QWidget* parent = 0);
static QString getText(QString prompt); static QString getText(QString prompt, int minLength = -1);
QString text(); QString text();
void show(); void show();
void setMessage(QString message, bool clearInputField=true); void setMessage(QString message, bool clearInputField=true);
void setMinLength(int length);
private: private:
int minLength;
QLineEdit *line; QLineEdit *line;
Keyboard *k; Keyboard *k;
QLabel *label; QLabel *label;

@ -13,14 +13,14 @@ const int SPACEBAR_STRETCH = 3;
KeyboardLayout::KeyboardLayout(QWidget *parent, std::vector<QVector<QString>> layout) : QWidget(parent) { KeyboardLayout::KeyboardLayout(QWidget *parent, std::vector<QVector<QString>> layout) : QWidget(parent) {
QVBoxLayout* vlayout = new QVBoxLayout; QVBoxLayout* vlayout = new QVBoxLayout;
vlayout->setMargin(0); vlayout->setMargin(0);
vlayout->setSpacing(15); vlayout->setSpacing(35);
QButtonGroup* btn_group = new QButtonGroup(this); QButtonGroup* btn_group = new QButtonGroup(this);
QObject::connect(btn_group, SIGNAL(buttonClicked(QAbstractButton*)), parent, SLOT(handleButton(QAbstractButton*))); QObject::connect(btn_group, SIGNAL(buttonClicked(QAbstractButton*)), parent, SLOT(handleButton(QAbstractButton*)));
for (const auto &s : layout) { for (const auto &s : layout) {
QHBoxLayout *hlayout = new QHBoxLayout; QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->setSpacing(30); hlayout->setSpacing(25);
if (vlayout->count() == 1) { if (vlayout->count() == 1) {
hlayout->addSpacing(90); hlayout->addSpacing(90);
@ -28,7 +28,7 @@ KeyboardLayout::KeyboardLayout(QWidget *parent, std::vector<QVector<QString>> la
for (const QString &p : s) { for (const QString &p : s) {
QPushButton* btn = new QPushButton(p); QPushButton* btn = new QPushButton(p);
btn->setFixedHeight(120); btn->setFixedHeight(135);
btn_group->addButton(btn); btn_group->addButton(btn);
hlayout->addWidget(btn, p == QString(" ") ? SPACEBAR_STRETCH : DEFAULT_STRETCH); hlayout->addWidget(btn, p == QString(" ") ? SPACEBAR_STRETCH : DEFAULT_STRETCH);
} }

Loading…
Cancel
Save