From 26c208c41ea9a74583c79c3c513d7dc59d40ce57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 15 Jun 2026 09:59:35 +0200 Subject: [PATCH] RemoteISO: Add (untested) support for the local network permission on Android 17 Part of #21585 --- UI/RemoteISOScreen.cpp | 23 +++++++++++++++++++++++ UI/RemoteISOScreen.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/UI/RemoteISOScreen.cpp b/UI/RemoteISOScreen.cpp index a4ce24d843..6167dd27e5 100644 --- a/UI/RemoteISOScreen.cpp +++ b/UI/RemoteISOScreen.cpp @@ -32,6 +32,7 @@ #include "Common/Net/Resolve.h" #include "Common/Net/URL.h" #include "Common/Thread/ThreadUtil.h" +#include "Common/System/System.h" #include "Common/System/Request.h" #include "Common/File/PathBrowser.h" @@ -313,12 +314,34 @@ void RemoteISOScreen::update() { serverRunning_ = nowRunning; } +void RemoteISOScreen::sendMessage(UIMessage message, const char *value) { + UITabbedBaseDialogScreen::sendMessage(message, value); + switch (message) { + case UIMessage::PERMISSION_GRANTED: + if (equals(value, "local_network")) { + RecreateViews(); + } else { + ERROR_LOG(Log::UI, "Unknown permission granted: %s", value); + } + break; + } +} + void RemoteISOScreen::CreateConnectTab(UI::ViewGroup *tab) { auto di = GetI18NCategory(I18NCat::DIALOG); auto ri = GetI18NCategory(I18NCat::REMOTEISO); using namespace UI; + PermissionStatus status = System_GetPermissionStatus(SYSTEM_PERMISSION_LOCAL_NETWORK); + if (status != PERMISSION_STATUS_GRANTED) { + // Proceed with local network functionality + tab->Add(new Choice(ri->T("Ask for network permission")))->OnClick.Add([this](UI::EventParams &e) { + System_AskForPermission(SYSTEM_PERMISSION_LOCAL_NETWORK); + }); + return; + } + if (serverRunning_) { tab->Add(new NoticeView(NoticeLevel::SUCCESS, ri->T("Currently sharing"), "", new LinearLayoutParams(Margins(12, 5, 0, 5)))); } else { diff --git a/UI/RemoteISOScreen.h b/UI/RemoteISOScreen.h index 37476af39d..74ffb1665a 100644 --- a/UI/RemoteISOScreen.h +++ b/UI/RemoteISOScreen.h @@ -46,6 +46,8 @@ protected: void HandleStopServer(UI::EventParams &e); void HandleBrowse(UI::EventParams &e); + void sendMessage(UIMessage message, const char *value) override; + UI::TextView *firewallWarning_ = nullptr; bool serverRunning_ = false; bool serverStopping_ = false;