|
|
@ -41,6 +41,7 @@ class StateConnecting: |
|
|
|
@dataclass |
|
|
|
@dataclass |
|
|
|
class StateNeedsAuth: |
|
|
|
class StateNeedsAuth: |
|
|
|
network: NetworkInfo |
|
|
|
network: NetworkInfo |
|
|
|
|
|
|
|
retry: bool |
|
|
|
action: Literal["needs_auth"] = "needs_auth" |
|
|
|
action: Literal["needs_auth"] = "needs_auth" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -93,8 +94,8 @@ class WifiManagerUI(Widget): |
|
|
|
return |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
match self.state: |
|
|
|
match self.state: |
|
|
|
case StateNeedsAuth(network): |
|
|
|
case StateNeedsAuth(network, retry): |
|
|
|
self.keyboard.set_title("Enter password", f"for {network.ssid}") |
|
|
|
self.keyboard.set_title("Wrong password" if retry else "Enter password", f"for {network.ssid}") |
|
|
|
self.keyboard.reset() |
|
|
|
self.keyboard.reset() |
|
|
|
gui_app.set_modal_overlay(self.keyboard, lambda result: self._on_password_entered(network, result)) |
|
|
|
gui_app.set_modal_overlay(self.keyboard, lambda result: self._on_password_entered(network, result)) |
|
|
|
case StateShowForgetConfirm(network): |
|
|
|
case StateShowForgetConfirm(network): |
|
|
@ -145,16 +146,20 @@ class WifiManagerUI(Widget): |
|
|
|
signal_icon_rect = rl.Rectangle(rect.x + rect.width - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) |
|
|
|
signal_icon_rect = rl.Rectangle(rect.x + rect.width - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) |
|
|
|
security_icon_rect = rl.Rectangle(signal_icon_rect.x - spacing - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) |
|
|
|
security_icon_rect = rl.Rectangle(signal_icon_rect.x - spacing - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) |
|
|
|
|
|
|
|
|
|
|
|
self._networks_buttons[network.ssid].render(ssid_rect) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
status_text = "" |
|
|
|
status_text = "" |
|
|
|
match self.state: |
|
|
|
match self.state: |
|
|
|
case StateConnecting(network=connecting): |
|
|
|
case StateConnecting(network=connecting): |
|
|
|
if connecting.ssid == network.ssid: |
|
|
|
if connecting.ssid == network.ssid: |
|
|
|
|
|
|
|
self._networks_buttons[network.ssid].enabled = False |
|
|
|
status_text = "CONNECTING..." |
|
|
|
status_text = "CONNECTING..." |
|
|
|
case StateForgetting(network=forgetting): |
|
|
|
case StateForgetting(network=forgetting): |
|
|
|
if forgetting.ssid == network.ssid: |
|
|
|
if forgetting.ssid == network.ssid: |
|
|
|
|
|
|
|
self._networks_buttons[network.ssid].enabled = False |
|
|
|
status_text = "FORGETTING..." |
|
|
|
status_text = "FORGETTING..." |
|
|
|
|
|
|
|
case _: |
|
|
|
|
|
|
|
self._networks_buttons[network.ssid].enabled = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self._networks_buttons[network.ssid].render(ssid_rect) |
|
|
|
|
|
|
|
|
|
|
|
if status_text: |
|
|
|
if status_text: |
|
|
|
status_text_rect = rl.Rectangle(security_icon_rect.x - 410, rect.y, 410, ITEM_HEIGHT) |
|
|
|
status_text_rect = rl.Rectangle(security_icon_rect.x - 410, rect.y, 410, ITEM_HEIGHT) |
|
|
@ -176,7 +181,7 @@ class WifiManagerUI(Widget): |
|
|
|
def _networks_buttons_callback(self, network): |
|
|
|
def _networks_buttons_callback(self, network): |
|
|
|
if self.scroll_panel.is_touch_valid(): |
|
|
|
if self.scroll_panel.is_touch_valid(): |
|
|
|
if not network.is_saved and network.security_type != SecurityType.OPEN: |
|
|
|
if not network.is_saved and network.security_type != SecurityType.OPEN: |
|
|
|
self.state = StateNeedsAuth(network) |
|
|
|
self.state = StateNeedsAuth(network, False) |
|
|
|
elif not network.is_connected: |
|
|
|
elif not network.is_connected: |
|
|
|
self.connect_to_network(network) |
|
|
|
self.connect_to_network(network) |
|
|
|
|
|
|
|
|
|
|
@ -225,13 +230,14 @@ class WifiManagerUI(Widget): |
|
|
|
for n in self._networks: |
|
|
|
for n in self._networks: |
|
|
|
self._networks_buttons[n.ssid] = Button(n.ssid, partial(self._networks_buttons_callback, n), font_size=55, text_alignment=TextAlignment.LEFT, |
|
|
|
self._networks_buttons[n.ssid] = Button(n.ssid, partial(self._networks_buttons_callback, n), font_size=55, text_alignment=TextAlignment.LEFT, |
|
|
|
button_style=ButtonStyle.NO_EFFECT) |
|
|
|
button_style=ButtonStyle.NO_EFFECT) |
|
|
|
self._forget_networks_buttons[n.ssid] = Button("Forget", partial(self._forget_networks_buttons_callback, n), button_style=ButtonStyle.ACTION) |
|
|
|
self._forget_networks_buttons[n.ssid] = Button("Forget", partial(self._forget_networks_buttons_callback, n), button_style=ButtonStyle.FORGET_WIFI, |
|
|
|
|
|
|
|
font_size=45) |
|
|
|
|
|
|
|
|
|
|
|
def _on_need_auth(self, ssid): |
|
|
|
def _on_need_auth(self, ssid): |
|
|
|
with self._lock: |
|
|
|
with self._lock: |
|
|
|
network = next((n for n in self._networks if n.ssid == ssid), None) |
|
|
|
network = next((n for n in self._networks if n.ssid == ssid), None) |
|
|
|
if network: |
|
|
|
if network: |
|
|
|
self.state = StateNeedsAuth(network) |
|
|
|
self.state = StateNeedsAuth(network, True) |
|
|
|
|
|
|
|
|
|
|
|
def _on_activated(self): |
|
|
|
def _on_activated(self): |
|
|
|
with self._lock: |
|
|
|
with self._lock: |
|
|
|