Просмотр исходного кода

applets: Pass in the LibraryAppletMode each applet's constructor

Morph 5 лет назад
Родитель
Сommit
d1e40dd244

+ 2 - 2
src/core/hle/service/am/am.cpp

@@ -1135,13 +1135,13 @@ ILibraryAppletCreator::~ILibraryAppletCreator() = default;
 void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) {
 void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) {
     IPC::RequestParser rp{ctx};
     IPC::RequestParser rp{ctx};
     const auto applet_id = rp.PopRaw<Applets::AppletId>();
     const auto applet_id = rp.PopRaw<Applets::AppletId>();
-    const auto applet_mode = rp.PopRaw<u32>();
+    const auto applet_mode = rp.PopRaw<Applets::LibraryAppletMode>();
 
 
     LOG_DEBUG(Service_AM, "called with applet_id={:08X}, applet_mode={:08X}", applet_id,
     LOG_DEBUG(Service_AM, "called with applet_id={:08X}, applet_mode={:08X}", applet_id,
               applet_mode);
               applet_mode);
 
 
     const auto& applet_manager{system.GetAppletManager()};
     const auto& applet_manager{system.GetAppletManager()};
-    const auto applet = applet_manager.GetApplet(applet_id);
+    const auto applet = applet_manager.GetApplet(applet_id, applet_mode);
 
 
     if (applet == nullptr) {
     if (applet == nullptr) {
         LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", applet_id);
         LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", applet_id);

+ 9 - 9
src/core/hle/service/am/applets/applets.cpp

@@ -241,31 +241,31 @@ void AppletManager::ClearAll() {
     frontend = {};
     frontend = {};
 }
 }
 
 
-std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id) const {
+std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id, LibraryAppletMode mode) const {
     switch (id) {
     switch (id) {
     case AppletId::Auth:
     case AppletId::Auth:
-        return std::make_shared<Auth>(system, *frontend.parental_controls);
+        return std::make_shared<Auth>(system, mode, *frontend.parental_controls);
     case AppletId::Controller:
     case AppletId::Controller:
-        return std::make_shared<Controller>(system, *frontend.controller);
+        return std::make_shared<Controller>(system, mode, *frontend.controller);
     case AppletId::Error:
     case AppletId::Error:
-        return std::make_shared<Error>(system, *frontend.error);
+        return std::make_shared<Error>(system, mode, *frontend.error);
     case AppletId::ProfileSelect:
     case AppletId::ProfileSelect:
-        return std::make_shared<ProfileSelect>(system, *frontend.profile_select);
+        return std::make_shared<ProfileSelect>(system, mode, *frontend.profile_select);
     case AppletId::SoftwareKeyboard:
     case AppletId::SoftwareKeyboard:
-        return std::make_shared<SoftwareKeyboard>(system, *frontend.software_keyboard);
+        return std::make_shared<SoftwareKeyboard>(system, mode, *frontend.software_keyboard);
     case AppletId::Web:
     case AppletId::Web:
     case AppletId::Shop:
     case AppletId::Shop:
     case AppletId::OfflineWeb:
     case AppletId::OfflineWeb:
     case AppletId::LoginShare:
     case AppletId::LoginShare:
     case AppletId::WebAuth:
     case AppletId::WebAuth:
-        return std::make_shared<WebBrowser>(system, *frontend.web_browser);
+        return std::make_shared<WebBrowser>(system, mode, *frontend.web_browser);
     case AppletId::PhotoViewer:
     case AppletId::PhotoViewer:
-        return std::make_shared<PhotoViewer>(system, *frontend.photo_viewer);
+        return std::make_shared<PhotoViewer>(system, mode, *frontend.photo_viewer);
     default:
     default:
         UNIMPLEMENTED_MSG(
         UNIMPLEMENTED_MSG(
             "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.",
             "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.",
             static_cast<u8>(id));
             static_cast<u8>(id));
-        return std::make_shared<StubApplet>(system, id);
+        return std::make_shared<StubApplet>(system, id, mode);
     }
     }
 }
 }
 
 

+ 9 - 1
src/core/hle/service/am/applets/applets.h

@@ -62,6 +62,14 @@ enum class AppletId : u32 {
     MyPage = 0x1A,
     MyPage = 0x1A,
 };
 };
 
 
+enum class LibraryAppletMode : u32 {
+    AllForeground = 0,
+    Background = 1,
+    NoUI = 2,
+    BackgroundIndirectDisplay = 3,
+    AllForegroundInitiallyHidden = 4,
+};
+
 class AppletDataBroker final {
 class AppletDataBroker final {
 public:
 public:
     explicit AppletDataBroker(Kernel::KernelCore& kernel_);
     explicit AppletDataBroker(Kernel::KernelCore& kernel_);
@@ -200,7 +208,7 @@ public:
     void SetDefaultAppletsIfMissing();
     void SetDefaultAppletsIfMissing();
     void ClearAll();
     void ClearAll();
 
 
-    std::shared_ptr<Applet> GetApplet(AppletId id) const;
+    std::shared_ptr<Applet> GetApplet(AppletId id, LibraryAppletMode mode) const;
 
 
 private:
 private:
     AppletFrontendSet frontend;
     AppletFrontendSet frontend;

+ 3 - 2
src/core/hle/service/am/applets/controller.cpp

@@ -45,8 +45,9 @@ static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
     };
     };
 }
 }
 
 
-Controller::Controller(Core::System& system_, const Core::Frontend::ControllerApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend{frontend_}, system{system_} {}
+Controller::Controller(Core::System& system_, LibraryAppletMode applet_mode_,
+                       const Core::Frontend::ControllerApplet& frontend_)
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {}
 
 
 Controller::~Controller() = default;
 Controller::~Controller() = default;
 
 

+ 3 - 1
src/core/hle/service/am/applets/controller.h

@@ -106,7 +106,8 @@ static_assert(sizeof(ControllerSupportResultInfo) == 0xC,
 
 
 class Controller final : public Applet {
 class Controller final : public Applet {
 public:
 public:
-    explicit Controller(Core::System& system_, const Core::Frontend::ControllerApplet& frontend_);
+    explicit Controller(Core::System& system_, LibraryAppletMode applet_mode_,
+                        const Core::Frontend::ControllerApplet& frontend_);
     ~Controller() override;
     ~Controller() override;
 
 
     void Initialize() override;
     void Initialize() override;
@@ -119,6 +120,7 @@ public:
     void ConfigurationComplete();
     void ConfigurationComplete();
 
 
 private:
 private:
+    LibraryAppletMode applet_mode;
     const Core::Frontend::ControllerApplet& frontend;
     const Core::Frontend::ControllerApplet& frontend;
     Core::System& system;
     Core::System& system;
 
 

+ 3 - 2
src/core/hle/service/am/applets/error.cpp

@@ -86,8 +86,9 @@ ResultCode Decode64BitError(u64 error) {
 
 
 } // Anonymous namespace
 } // Anonymous namespace
 
 
-Error::Error(Core::System& system_, const Core::Frontend::ErrorApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend{frontend_}, system{system_} {}
+Error::Error(Core::System& system_, LibraryAppletMode applet_mode_,
+             const Core::Frontend::ErrorApplet& frontend_)
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {}
 
 
 Error::~Error() = default;
 Error::~Error() = default;
 
 

+ 3 - 1
src/core/hle/service/am/applets/error.h

@@ -25,7 +25,8 @@ enum class ErrorAppletMode : u8 {
 
 
 class Error final : public Applet {
 class Error final : public Applet {
 public:
 public:
-    explicit Error(Core::System& system_, const Core::Frontend::ErrorApplet& frontend_);
+    explicit Error(Core::System& system_, LibraryAppletMode applet_mode_,
+                   const Core::Frontend::ErrorApplet& frontend_);
     ~Error() override;
     ~Error() override;
 
 
     void Initialize() override;
     void Initialize() override;
@@ -40,6 +41,7 @@ public:
 private:
 private:
     union ErrorArguments;
     union ErrorArguments;
 
 
+    LibraryAppletMode applet_mode;
     const Core::Frontend::ErrorApplet& frontend;
     const Core::Frontend::ErrorApplet& frontend;
     ResultCode error_code = RESULT_SUCCESS;
     ResultCode error_code = RESULT_SUCCESS;
     ErrorAppletMode mode = ErrorAppletMode::ShowError;
     ErrorAppletMode mode = ErrorAppletMode::ShowError;

+ 8 - 6
src/core/hle/service/am/applets/general_backend.cpp

@@ -37,8 +37,9 @@ static void LogCurrentStorage(AppletDataBroker& broker, std::string_view prefix)
     }
     }
 }
 }
 
 
-Auth::Auth(Core::System& system_, Core::Frontend::ParentalControlsApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend{frontend_}, system{system_} {}
+Auth::Auth(Core::System& system_, LibraryAppletMode applet_mode_,
+           Core::Frontend::ParentalControlsApplet& frontend_)
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {}
 
 
 Auth::~Auth() = default;
 Auth::~Auth() = default;
 
 
@@ -152,8 +153,9 @@ void Auth::AuthFinished(bool is_successful) {
     broker.SignalStateChanged();
     broker.SignalStateChanged();
 }
 }
 
 
-PhotoViewer::PhotoViewer(Core::System& system_, const Core::Frontend::PhotoViewerApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend{frontend_}, system{system_} {}
+PhotoViewer::PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_,
+                         const Core::Frontend::PhotoViewerApplet& frontend_)
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {}
 
 
 PhotoViewer::~PhotoViewer() = default;
 PhotoViewer::~PhotoViewer() = default;
 
 
@@ -202,8 +204,8 @@ void PhotoViewer::ViewFinished() {
     broker.SignalStateChanged();
     broker.SignalStateChanged();
 }
 }
 
 
-StubApplet::StubApplet(Core::System& system_, AppletId id_)
-    : Applet{system_.Kernel()}, id{id_}, system{system_} {}
+StubApplet::StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_)
+    : Applet{system_.Kernel()}, id{id_}, applet_mode{applet_mode_}, system{system_} {}
 
 
 StubApplet::~StubApplet() = default;
 StubApplet::~StubApplet() = default;
 
 

+ 8 - 3
src/core/hle/service/am/applets/general_backend.h

@@ -20,7 +20,8 @@ enum class AuthAppletType : u32 {
 
 
 class Auth final : public Applet {
 class Auth final : public Applet {
 public:
 public:
-    explicit Auth(Core::System& system_, Core::Frontend::ParentalControlsApplet& frontend_);
+    explicit Auth(Core::System& system_, LibraryAppletMode applet_mode_,
+                  Core::Frontend::ParentalControlsApplet& frontend_);
     ~Auth() override;
     ~Auth() override;
 
 
     void Initialize() override;
     void Initialize() override;
@@ -32,6 +33,7 @@ public:
     void AuthFinished(bool is_successful = true);
     void AuthFinished(bool is_successful = true);
 
 
 private:
 private:
+    LibraryAppletMode applet_mode;
     Core::Frontend::ParentalControlsApplet& frontend;
     Core::Frontend::ParentalControlsApplet& frontend;
     Core::System& system;
     Core::System& system;
     bool complete = false;
     bool complete = false;
@@ -50,7 +52,8 @@ enum class PhotoViewerAppletMode : u8 {
 
 
 class PhotoViewer final : public Applet {
 class PhotoViewer final : public Applet {
 public:
 public:
-    explicit PhotoViewer(Core::System& system_, const Core::Frontend::PhotoViewerApplet& frontend_);
+    explicit PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_,
+                         const Core::Frontend::PhotoViewerApplet& frontend_);
     ~PhotoViewer() override;
     ~PhotoViewer() override;
 
 
     void Initialize() override;
     void Initialize() override;
@@ -62,6 +65,7 @@ public:
     void ViewFinished();
     void ViewFinished();
 
 
 private:
 private:
+    LibraryAppletMode applet_mode;
     const Core::Frontend::PhotoViewerApplet& frontend;
     const Core::Frontend::PhotoViewerApplet& frontend;
     bool complete = false;
     bool complete = false;
     PhotoViewerAppletMode mode = PhotoViewerAppletMode::CurrentApp;
     PhotoViewerAppletMode mode = PhotoViewerAppletMode::CurrentApp;
@@ -70,7 +74,7 @@ private:
 
 
 class StubApplet final : public Applet {
 class StubApplet final : public Applet {
 public:
 public:
-    explicit StubApplet(Core::System& system_, AppletId id_);
+    explicit StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_);
     ~StubApplet() override;
     ~StubApplet() override;
 
 
     void Initialize() override;
     void Initialize() override;
@@ -82,6 +86,7 @@ public:
 
 
 private:
 private:
     AppletId id;
     AppletId id;
+    LibraryAppletMode applet_mode;
     Core::System& system;
     Core::System& system;
 };
 };
 
 

+ 2 - 2
src/core/hle/service/am/applets/profile_select.cpp

@@ -15,9 +15,9 @@ namespace Service::AM::Applets {
 
 
 constexpr ResultCode ERR_USER_CANCELLED_SELECTION{ErrorModule::Account, 1};
 constexpr ResultCode ERR_USER_CANCELLED_SELECTION{ErrorModule::Account, 1};
 
 
-ProfileSelect::ProfileSelect(Core::System& system_,
+ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_,
                              const Core::Frontend::ProfileSelectApplet& frontend_)
                              const Core::Frontend::ProfileSelectApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend{frontend_}, system{system_} {}
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {}
 
 
 ProfileSelect::~ProfileSelect() = default;
 ProfileSelect::~ProfileSelect() = default;
 
 

+ 2 - 1
src/core/hle/service/am/applets/profile_select.h

@@ -33,7 +33,7 @@ static_assert(sizeof(UserSelectionOutput) == 0x18, "UserSelectionOutput has inco
 
 
 class ProfileSelect final : public Applet {
 class ProfileSelect final : public Applet {
 public:
 public:
-    explicit ProfileSelect(Core::System& system_,
+    explicit ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_,
                            const Core::Frontend::ProfileSelectApplet& frontend_);
                            const Core::Frontend::ProfileSelectApplet& frontend_);
     ~ProfileSelect() override;
     ~ProfileSelect() override;
 
 
@@ -47,6 +47,7 @@ public:
     void SelectionComplete(std::optional<Common::UUID> uuid);
     void SelectionComplete(std::optional<Common::UUID> uuid);
 
 
 private:
 private:
+    LibraryAppletMode applet_mode;
     const Core::Frontend::ProfileSelectApplet& frontend;
     const Core::Frontend::ProfileSelectApplet& frontend;
 
 
     UserSelectionConfig config;
     UserSelectionConfig config;

+ 3 - 2
src/core/hle/service/am/applets/web_browser.cpp

@@ -208,8 +208,9 @@ void ExtractSharedFonts(Core::System& system) {
 
 
 } // namespace
 } // namespace
 
 
-WebBrowser::WebBrowser(Core::System& system_, const Core::Frontend::WebBrowserApplet& frontend_)
-    : Applet{system_.Kernel()}, frontend(frontend_), system{system_} {}
+WebBrowser::WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_,
+                       const Core::Frontend::WebBrowserApplet& frontend_)
+    : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend(frontend_), system{system_} {}
 
 
 WebBrowser::~WebBrowser() = default;
 WebBrowser::~WebBrowser() = default;
 
 

+ 3 - 1
src/core/hle/service/am/applets/web_browser.h

@@ -25,7 +25,8 @@ namespace Service::AM::Applets {
 
 
 class WebBrowser final : public Applet {
 class WebBrowser final : public Applet {
 public:
 public:
-    WebBrowser(Core::System& system_, const Core::Frontend::WebBrowserApplet& frontend_);
+    WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_,
+               const Core::Frontend::WebBrowserApplet& frontend_);
 
 
     ~WebBrowser() override;
     ~WebBrowser() override;
 
 
@@ -63,6 +64,7 @@ private:
     void ExecuteWifi();
     void ExecuteWifi();
     void ExecuteLobby();
     void ExecuteLobby();
 
 
+    LibraryAppletMode applet_mode;
     const Core::Frontend::WebBrowserApplet& frontend;
     const Core::Frontend::WebBrowserApplet& frontend;
 
 
     bool complete{false};
     bool complete{false};