|
|
@@ -5,11 +5,21 @@
|
|
|
#include <cstring>
|
|
|
#include "common/assert.h"
|
|
|
#include "core/core.h"
|
|
|
+#include "core/frontend/applets/error.h"
|
|
|
+#include "core/frontend/applets/general_frontend.h"
|
|
|
+#include "core/frontend/applets/profile_select.h"
|
|
|
+#include "core/frontend/applets/software_keyboard.h"
|
|
|
+#include "core/frontend/applets/web_browser.h"
|
|
|
#include "core/hle/kernel/readable_event.h"
|
|
|
#include "core/hle/kernel/server_session.h"
|
|
|
#include "core/hle/kernel/writable_event.h"
|
|
|
#include "core/hle/service/am/am.h"
|
|
|
#include "core/hle/service/am/applets/applets.h"
|
|
|
+#include "core/hle/service/am/applets/error.h"
|
|
|
+#include "core/hle/service/am/applets/general_backend.h"
|
|
|
+#include "core/hle/service/am/applets/profile_select.h"
|
|
|
+#include "core/hle/service/am/applets/software_keyboard.h"
|
|
|
+#include "core/hle/service/am/applets/web_browser.h"
|
|
|
|
|
|
namespace Service::AM::Applets {
|
|
|
|
|
|
@@ -111,4 +121,76 @@ void Applet::Initialize() {
|
|
|
initialized = true;
|
|
|
}
|
|
|
|
|
|
+AppletManager::AppletManager() = default;
|
|
|
+
|
|
|
+AppletManager::~AppletManager() = default;
|
|
|
+
|
|
|
+void AppletManager::SetAppletFrontendSet(AppletFrontendSet set) {
|
|
|
+ if (set.error != nullptr)
|
|
|
+ frontend.error = std::move(set.error);
|
|
|
+ if (set.photo_viewer != nullptr)
|
|
|
+ frontend.photo_viewer = std::move(set.photo_viewer);
|
|
|
+ if (set.profile_select != nullptr)
|
|
|
+ frontend.profile_select = std::move(set.profile_select);
|
|
|
+ if (set.software_keyboard != nullptr)
|
|
|
+ frontend.software_keyboard = std::move(set.software_keyboard);
|
|
|
+ if (set.web_browser != nullptr)
|
|
|
+ frontend.web_browser = std::move(set.web_browser);
|
|
|
+}
|
|
|
+
|
|
|
+void AppletManager::SetDefaultAppletFrontendSet() {
|
|
|
+ frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>();
|
|
|
+ frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>();
|
|
|
+ frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>();
|
|
|
+ frontend.software_keyboard = std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>();
|
|
|
+ frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>();
|
|
|
+}
|
|
|
+
|
|
|
+void AppletManager::SetDefaultAppletsIfMissing() {
|
|
|
+ if (frontend.error == nullptr) {
|
|
|
+ frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (frontend.photo_viewer == nullptr) {
|
|
|
+ frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (frontend.profile_select == nullptr) {
|
|
|
+ frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (frontend.software_keyboard == nullptr) {
|
|
|
+ frontend.software_keyboard =
|
|
|
+ std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (frontend.web_browser == nullptr) {
|
|
|
+ frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void AppletManager::ClearAll() {
|
|
|
+ frontend = {};
|
|
|
+}
|
|
|
+
|
|
|
+std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id) const {
|
|
|
+ switch (id) {
|
|
|
+ case AppletId::Error:
|
|
|
+ return std::make_shared<Error>(*frontend.error);
|
|
|
+ case AppletId::ProfileSelect:
|
|
|
+ return std::make_shared<ProfileSelect>(*frontend.profile_select);
|
|
|
+ case AppletId::SoftwareKeyboard:
|
|
|
+ return std::make_shared<SoftwareKeyboard>(*frontend.software_keyboard);
|
|
|
+ case AppletId::PhotoViewer:
|
|
|
+ return std::make_shared<PhotoViewer>(*frontend.photo_viewer);
|
|
|
+ case AppletId::LibAppletOff:
|
|
|
+ return std::make_shared<WebBrowser>(*frontend.web_browser);
|
|
|
+ default:
|
|
|
+ UNIMPLEMENTED_MSG(
|
|
|
+ "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.",
|
|
|
+ static_cast<u8>(id));
|
|
|
+ return std::make_shared<StubApplet>();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
} // namespace Service::AM::Applets
|