add hidden network buutton and fix instant modal to modal

pull/36197/head
Shane Smiskol 1 month ago
parent d4d5c35f43
commit c524801284
  1. 6
      system/ui/lib/application.py
  2. 6
      system/ui/lib/wifi_manager.py
  3. 4
      system/ui/widgets/keyboard.py
  4. 51
      system/ui/widgets/network.py

@ -270,10 +270,10 @@ class GuiApplication:
if result >= 0:
# Execute callback with the result and clear the overlay
if self._modal_overlay.callback is not None:
self._modal_overlay.callback(result)
original_modal = self._modal_overlay
self._modal_overlay = ModalOverlay()
if original_modal.callback is not None:
original_modal.callback(result)
else:
yield

@ -333,14 +333,12 @@ class WifiManager:
return {}
return dict(reply.body[0])
def connect_to_network(self, ssid: str, password: str):
def connect_to_network(self, ssid: str, password: str, hidden: bool = False):
def worker():
# Clear all connections that may already exist to the network we are connecting to
self._connecting_to_ssid = ssid
self.forget_connection(ssid, block=True)
is_hidden = False
connection = {
'connection': {
'type': ('s', '802-11-wireless'),
@ -350,7 +348,7 @@ class WifiManager:
},
'802-11-wireless': {
'ssid': ('ay', ssid.encode("utf-8")),
'hidden': ('b', is_hidden),
'hidden': ('b', hidden),
'mode': ('s', 'infrastructure'),
},
'ipv4': {

@ -246,7 +246,9 @@ class Keyboard(Widget):
if not self._caps_lock and self._layout_name == "uppercase":
self._layout_name = "lowercase"
def reset(self):
def reset(self, min_text_size: int | None = None):
if min_text_size is not None:
self._min_text_size = min_text_size
self._render_return_status = -1
self.clear()

@ -123,7 +123,7 @@ class AdvancedNetworkSettings(Widget):
# self._pair_device_dialog: PairingDialog | None = None
# self._fcc_dialog: HtmlRenderer | None = None
# ~enable tethering~, ~tethering password~, ~ip address~, wifi network metered, hidden network, (lte settings?)
# ~enable tethering~, ~tethering password~, ~ip address~, ~wifi network metered~, ~hidden network~, (lte settings?)
# # tethering = toggle_item("Enable Tethering", initial_state=wifi_manager
# tethering = toggle_item("Enable Tethering", callback=self._wifi_manager)#, initial_state=wifi_manager
@ -151,6 +151,7 @@ class AdvancedNetworkSettings(Widget):
button_item("Tethering Password", "EDIT", callback=self._edit_tethering_password),
text_item("IP Address", lambda: self._wifi_manager.ipv4_address),
self._wifi_metered_btn,
button_item("Hidden Network", "CONNECT", callback=self._connect_to_hidden_network),
]
self._scroller = Scroller(items, line_separator=True, spacing=0)
@ -179,6 +180,50 @@ class AdvancedNetworkSettings(Widget):
self._wifi_metered_action.set_enabled(False)
self._wifi_manager.set_current_network_metered(metered_type)
def _connect_to_hidden_network(self):
"""
hiddenNetworkButton = new ButtonControl(tr("Hidden Network"), tr("CONNECT"));
connect(hiddenNetworkButton, &ButtonControl::clicked, [=]() {
QString ssid = InputDialog::getText(tr("Enter SSID"), this, "", false, 1);
if (!ssid.isEmpty()) {
QString pass = InputDialog::getText(tr("Enter password"), this, tr("for \"%1\"").arg(ssid), true, -1);
Network hidden_network;
hidden_network.ssid = ssid.toUtf8();
if (!pass.isEmpty()) {
hidden_network.security_type = SecurityType::WPA;
wifi->connect(hidden_network, true, pass);
} else {
wifi->connect(hidden_network, true);
}
emit requestWifiScreen();
}
});
"""
def connect_hidden(result):
if result != 1:
return
ssid = self._keyboard.text
if not ssid:
return
def enter_password(result):
password = self._keyboard.text
if password == "":
# connect without password
self._wifi_manager.connect_to_network(ssid, "", hidden=True)
return
self._wifi_manager.connect_to_network(ssid, password, hidden=True)
self._keyboard.reset(min_text_size=0)
self._keyboard.set_title("Enter password", f"for \"{ssid}\"")
gui_app.set_modal_overlay(self._keyboard, enter_password)
self._keyboard.reset(min_text_size=1)
self._keyboard.set_title("Enter SSID", "")
gui_app.set_modal_overlay(self._keyboard, connect_hidden)
def _edit_tethering_password(self):
def update_password(result):
if result != 1:
@ -187,7 +232,7 @@ class AdvancedNetworkSettings(Widget):
password = self._keyboard.text
self._wifi_manager.set_tethering_password(password)
self._keyboard.reset()
self._keyboard.reset(min_text_size=MIN_PASSWORD_LENGTH)
self._keyboard.set_text(self._wifi_manager.tethering_password)
gui_app.set_modal_overlay(self._keyboard, update_password)
@ -237,7 +282,7 @@ class WifiManagerUI(Widget):
if self.state == UIState.NEEDS_AUTH and self._state_network:
self.keyboard.set_title("Wrong password" if self._password_retry else "Enter password", f"for {self._state_network.ssid}")
self.keyboard.reset()
self.keyboard.reset(min_text_size=MIN_PASSWORD_LENGTH)
gui_app.set_modal_overlay(self.keyboard, lambda result: self._on_password_entered(cast(Network, self._state_network), result))
elif self.state == UIState.SHOW_FORGET_CONFIRM and self._state_network:
self._confirm_dialog.set_text(f'Forget Wi-Fi Network "{self._state_network.ssid}"?')

Loading…
Cancel
Save