summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2019-03-11 19:32:59 -0400
committerGravatar Zach Hilman2019-04-17 11:35:24 -0400
commite51d33f0cee74f9fbd58439b411e6d3fef57576d (patch)
tree1e7a76599d9d831ae71b719fd0da36f7bd64eab6 /src
parentMerge pull request #2315 from ReinUsesLisp/severity-decompiler (diff)
downloadyuzu-e51d33f0cee74f9fbd58439b411e6d3fef57576d.tar.gz
yuzu-e51d33f0cee74f9fbd58439b411e6d3fef57576d.tar.xz
yuzu-e51d33f0cee74f9fbd58439b411e6d3fef57576d.zip
applets: Add AppletManager class to control lifetime
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/applets/applets.cpp82
-rw-r--r--src/core/hle/service/am/applets/applets.h55
2 files changed, 137 insertions, 0 deletions
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp
index a6064c63f..7f70b10df 100644
--- a/src/core/hle/service/am/applets/applets.cpp
+++ b/src/core/hle/service/am/applets/applets.cpp
@@ -5,11 +5,21 @@
5#include <cstring> 5#include <cstring>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/core.h" 7#include "core/core.h"
8#include "core/frontend/applets/error.h"
9#include "core/frontend/applets/general_frontend.h"
10#include "core/frontend/applets/profile_select.h"
11#include "core/frontend/applets/software_keyboard.h"
12#include "core/frontend/applets/web_browser.h"
8#include "core/hle/kernel/readable_event.h" 13#include "core/hle/kernel/readable_event.h"
9#include "core/hle/kernel/server_session.h" 14#include "core/hle/kernel/server_session.h"
10#include "core/hle/kernel/writable_event.h" 15#include "core/hle/kernel/writable_event.h"
11#include "core/hle/service/am/am.h" 16#include "core/hle/service/am/am.h"
12#include "core/hle/service/am/applets/applets.h" 17#include "core/hle/service/am/applets/applets.h"
18#include "core/hle/service/am/applets/error.h"
19#include "core/hle/service/am/applets/general_backend.h"
20#include "core/hle/service/am/applets/profile_select.h"
21#include "core/hle/service/am/applets/software_keyboard.h"
22#include "core/hle/service/am/applets/web_browser.h"
13 23
14namespace Service::AM::Applets { 24namespace Service::AM::Applets {
15 25
@@ -111,4 +121,76 @@ void Applet::Initialize() {
111 initialized = true; 121 initialized = true;
112} 122}
113 123
124AppletManager::AppletManager() = default;
125
126AppletManager::~AppletManager() = default;
127
128void AppletManager::SetAppletFrontendSet(AppletFrontendSet set) {
129 if (set.error != nullptr)
130 frontend.error = std::move(set.error);
131 if (set.photo_viewer != nullptr)
132 frontend.photo_viewer = std::move(set.photo_viewer);
133 if (set.profile_select != nullptr)
134 frontend.profile_select = std::move(set.profile_select);
135 if (set.software_keyboard != nullptr)
136 frontend.software_keyboard = std::move(set.software_keyboard);
137 if (set.web_browser != nullptr)
138 frontend.web_browser = std::move(set.web_browser);
139}
140
141void AppletManager::SetDefaultAppletFrontendSet() {
142 frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>();
143 frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>();
144 frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>();
145 frontend.software_keyboard = std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>();
146 frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>();
147}
148
149void AppletManager::SetDefaultAppletsIfMissing() {
150 if (frontend.error == nullptr) {
151 frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>();
152 }
153
154 if (frontend.photo_viewer == nullptr) {
155 frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>();
156 }
157
158 if (frontend.profile_select == nullptr) {
159 frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>();
160 }
161
162 if (frontend.software_keyboard == nullptr) {
163 frontend.software_keyboard =
164 std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>();
165 }
166
167 if (frontend.web_browser == nullptr) {
168 frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>();
169 }
170}
171
172void AppletManager::ClearAll() {
173 frontend = {};
174}
175
176std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id) const {
177 switch (id) {
178 case AppletId::Error:
179 return std::make_shared<Error>(*frontend.error);
180 case AppletId::ProfileSelect:
181 return std::make_shared<ProfileSelect>(*frontend.profile_select);
182 case AppletId::SoftwareKeyboard:
183 return std::make_shared<SoftwareKeyboard>(*frontend.software_keyboard);
184 case AppletId::PhotoViewer:
185 return std::make_shared<PhotoViewer>(*frontend.photo_viewer);
186 case AppletId::LibAppletOff:
187 return std::make_shared<WebBrowser>(*frontend.web_browser);
188 default:
189 UNIMPLEMENTED_MSG(
190 "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.",
191 static_cast<u8>(id));
192 return std::make_shared<StubApplet>();
193 }
194}
195
114} // namespace Service::AM::Applets 196} // namespace Service::AM::Applets
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h
index 37424c379..7f932672c 100644
--- a/src/core/hle/service/am/applets/applets.h
+++ b/src/core/hle/service/am/applets/applets.h
@@ -12,12 +12,43 @@
12 12
13union ResultCode; 13union ResultCode;
14 14
15namespace Core::Frontend {
16class ErrorApplet;
17class PhotoViewerApplet;
18class ProfileSelectApplet;
19class SoftwareKeyboardApplet;
20class WebBrowserApplet;
21} // namespace Core::Frontend
22
15namespace Service::AM { 23namespace Service::AM {
16 24
17class IStorage; 25class IStorage;
18 26
19namespace Applets { 27namespace Applets {
20 28
29enum class AppletId : u32 {
30 OverlayDisplay = 0x02,
31 QLaunch = 0x03,
32 Starter = 0x04,
33 Auth = 0x0A,
34 Cabinet = 0x0B,
35 Controller = 0x0C,
36 DataErase = 0x0D,
37 Error = 0x0E,
38 NetConnect = 0x0F,
39 ProfileSelect = 0x10,
40 SoftwareKeyboard = 0x11,
41 MiiEdit = 0x12,
42 LibAppletWeb = 0x13,
43 LibAppletShop = 0x14,
44 PhotoViewer = 0x15,
45 Settings = 0x16,
46 LibAppletOff = 0x17,
47 LibAppletWhitelisted = 0x18,
48 LibAppletAuth = 0x19,
49 MyPage = 0x1A,
50};
51
21class AppletDataBroker final { 52class AppletDataBroker final {
22public: 53public:
23 AppletDataBroker(); 54 AppletDataBroker();
@@ -105,5 +136,29 @@ protected:
105 bool initialized = false; 136 bool initialized = false;
106}; 137};
107 138
139struct AppletFrontendSet {
140 std::unique_ptr<Core::Frontend::ErrorApplet> error;
141 std::unique_ptr<Core::Frontend::PhotoViewerApplet> photo_viewer;
142 std::unique_ptr<Core::Frontend::ProfileSelectApplet> profile_select;
143 std::unique_ptr<Core::Frontend::SoftwareKeyboardApplet> software_keyboard;
144 std::unique_ptr<Core::Frontend::WebBrowserApplet> web_browser;
145};
146
147class AppletManager {
148public:
149 AppletManager();
150 ~AppletManager();
151
152 void SetAppletFrontendSet(AppletFrontendSet set);
153 void SetDefaultAppletFrontendSet();
154 void SetDefaultAppletsIfMissing();
155 void ClearAll();
156
157 std::shared_ptr<Applet> GetApplet(AppletId id) const;
158
159private:
160 AppletFrontendSet frontend;
161};
162
108} // namespace Applets 163} // namespace Applets
109} // namespace Service::AM 164} // namespace Service::AM