|
@@ -23,6 +23,7 @@
|
|
|
#include "core/hle/service/am/applets/applet_cabinet.h"
|
|
#include "core/hle/service/am/applets/applet_cabinet.h"
|
|
|
#include "core/hle/service/am/applets/applet_mii_edit_types.h"
|
|
#include "core/hle/service/am/applets/applet_mii_edit_types.h"
|
|
|
#include "core/hle/service/am/applets/applet_profile_select.h"
|
|
#include "core/hle/service/am/applets/applet_profile_select.h"
|
|
|
|
|
+#include "core/hle/service/am/applets/applet_software_keyboard_types.h"
|
|
|
#include "core/hle/service/am/applets/applet_web_browser.h"
|
|
#include "core/hle/service/am/applets/applet_web_browser.h"
|
|
|
#include "core/hle/service/am/applets/applets.h"
|
|
#include "core/hle/service/am/applets/applets.h"
|
|
|
#include "core/hle/service/am/idle.h"
|
|
#include "core/hle/service/am/idle.h"
|
|
@@ -1571,7 +1572,7 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_)
|
|
|
{16, nullptr, "GetMainAppletStorageId"},
|
|
{16, nullptr, "GetMainAppletStorageId"},
|
|
|
{17, nullptr, "GetCallerAppletIdentityInfoStack"},
|
|
{17, nullptr, "GetCallerAppletIdentityInfoStack"},
|
|
|
{18, nullptr, "GetNextReturnDestinationAppletIdentityInfo"},
|
|
{18, nullptr, "GetNextReturnDestinationAppletIdentityInfo"},
|
|
|
- {19, nullptr, "GetDesirableKeyboardLayout"},
|
|
|
|
|
|
|
+ {19, &ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout, "GetDesirableKeyboardLayout"},
|
|
|
{20, nullptr, "PopExtraStorage"},
|
|
{20, nullptr, "PopExtraStorage"},
|
|
|
{25, nullptr, "GetPopExtraStorageEvent"},
|
|
{25, nullptr, "GetPopExtraStorageEvent"},
|
|
|
{30, nullptr, "UnpopInData"},
|
|
{30, nullptr, "UnpopInData"},
|
|
@@ -1590,7 +1591,7 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_)
|
|
|
{120, nullptr, "GetLaunchStorageInfoForDebug"},
|
|
{120, nullptr, "GetLaunchStorageInfoForDebug"},
|
|
|
{130, nullptr, "GetGpuErrorDetectedSystemEvent"},
|
|
{130, nullptr, "GetGpuErrorDetectedSystemEvent"},
|
|
|
{140, nullptr, "SetApplicationMemoryReservation"},
|
|
{140, nullptr, "SetApplicationMemoryReservation"},
|
|
|
- {150, nullptr, "ShouldSetGpuTimeSliceManually"},
|
|
|
|
|
|
|
+ {150, &ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually, "ShouldSetGpuTimeSliceManually"},
|
|
|
};
|
|
};
|
|
|
// clang-format on
|
|
// clang-format on
|
|
|
RegisterHandlers(functions);
|
|
RegisterHandlers(functions);
|
|
@@ -1605,6 +1606,9 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_)
|
|
|
case Applets::AppletId::PhotoViewer:
|
|
case Applets::AppletId::PhotoViewer:
|
|
|
PushInShowAlbum();
|
|
PushInShowAlbum();
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case Applets::AppletId::SoftwareKeyboard:
|
|
|
|
|
+ PushInShowSoftwareKeyboard();
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -1681,6 +1685,14 @@ void ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo(HLERequestContext&
|
|
|
rb.PushRaw(applet_info);
|
|
rb.PushRaw(applet_info);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout(HLERequestContext& ctx) {
|
|
|
|
|
+ LOG_WARNING(Service_AM, "(STUBBED) called");
|
|
|
|
|
+
|
|
|
|
|
+ IPC::ResponseBuilder rb{ctx, 3};
|
|
|
|
|
+ rb.Push(ResultSuccess);
|
|
|
|
|
+ rb.Push<u32>(0);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) {
|
|
void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) {
|
|
|
const Service::Account::ProfileManager manager{};
|
|
const Service::Account::ProfileManager manager{};
|
|
|
bool is_empty{true};
|
|
bool is_empty{true};
|
|
@@ -1700,6 +1712,14 @@ void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext&
|
|
|
rb.Push(user_count);
|
|
rb.Push(user_count);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually(HLERequestContext& ctx) {
|
|
|
|
|
+ LOG_WARNING(Service_AM, "(STUBBED) called");
|
|
|
|
|
+
|
|
|
|
|
+ IPC::ResponseBuilder rb{ctx, 2};
|
|
|
|
|
+ rb.Push(ResultSuccess);
|
|
|
|
|
+ rb.Push<u8>(0);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void ILibraryAppletSelfAccessor::PushInShowAlbum() {
|
|
void ILibraryAppletSelfAccessor::PushInShowAlbum() {
|
|
|
const Applets::CommonArguments arguments{
|
|
const Applets::CommonArguments arguments{
|
|
|
.arguments_version = Applets::CommonArgumentVersion::Version3,
|
|
.arguments_version = Applets::CommonArgumentVersion::Version3,
|
|
@@ -1768,6 +1788,61 @@ void ILibraryAppletSelfAccessor::PushInShowMiiEditData() {
|
|
|
queue_data.emplace_back(std::move(argument_data));
|
|
queue_data.emplace_back(std::move(argument_data));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void ILibraryAppletSelfAccessor::PushInShowSoftwareKeyboard() {
|
|
|
|
|
+ const Applets::CommonArguments arguments{
|
|
|
|
|
+ .arguments_version = Applets::CommonArgumentVersion::Version3,
|
|
|
|
|
+ .size = Applets::CommonArgumentSize::Version3,
|
|
|
|
|
+ .library_version = static_cast<u32>(Applets::SwkbdAppletVersion::Version524301),
|
|
|
|
|
+ .theme_color = Applets::ThemeColor::BasicBlack,
|
|
|
|
|
+ .play_startup_sound = true,
|
|
|
|
|
+ .system_tick = system.CoreTiming().GetClockTicks(),
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ std::vector<char16_t> initial_string(0);
|
|
|
|
|
+
|
|
|
|
|
+ const Applets::SwkbdConfigCommon swkbd_config{
|
|
|
|
|
+ .type = Applets::SwkbdType::Qwerty,
|
|
|
|
|
+ .ok_text{},
|
|
|
|
|
+ .left_optional_symbol_key{},
|
|
|
|
|
+ .right_optional_symbol_key{},
|
|
|
|
|
+ .use_prediction = false,
|
|
|
|
|
+ .key_disable_flags{},
|
|
|
|
|
+ .initial_cursor_position = Applets::SwkbdInitialCursorPosition::Start,
|
|
|
|
|
+ .header_text{},
|
|
|
|
|
+ .sub_text{},
|
|
|
|
|
+ .guide_text{},
|
|
|
|
|
+ .max_text_length = 500,
|
|
|
|
|
+ .min_text_length = 0,
|
|
|
|
|
+ .password_mode = Applets::SwkbdPasswordMode::Disabled,
|
|
|
|
|
+ .text_draw_type = Applets::SwkbdTextDrawType::Box,
|
|
|
|
|
+ .enable_return_button = true,
|
|
|
|
|
+ .use_utf8 = false,
|
|
|
|
|
+ .use_blur_background = true,
|
|
|
|
|
+ .initial_string_offset{},
|
|
|
|
|
+ .initial_string_length = static_cast<u32>(initial_string.size()),
|
|
|
|
|
+ .user_dictionary_offset{},
|
|
|
|
|
+ .user_dictionary_entries{},
|
|
|
|
|
+ .use_text_check = false,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ Applets::SwkbdConfigNew swkbd_config_new{};
|
|
|
|
|
+
|
|
|
|
|
+ std::vector<u8> argument_data(sizeof(arguments));
|
|
|
|
|
+ std::vector<u8> swkbd_data(sizeof(swkbd_config) + sizeof(swkbd_config_new));
|
|
|
|
|
+ std::vector<u8> work_buffer(swkbd_config.initial_string_length * sizeof(char16_t));
|
|
|
|
|
+
|
|
|
|
|
+ std::memcpy(argument_data.data(), &arguments, sizeof(arguments));
|
|
|
|
|
+ std::memcpy(swkbd_data.data(), &swkbd_config, sizeof(swkbd_config));
|
|
|
|
|
+ std::memcpy(swkbd_data.data() + sizeof(swkbd_config), &swkbd_config_new,
|
|
|
|
|
+ sizeof(Applets::SwkbdConfigNew));
|
|
|
|
|
+ std::memcpy(work_buffer.data(), initial_string.data(),
|
|
|
|
|
+ swkbd_config.initial_string_length * sizeof(char16_t));
|
|
|
|
|
+
|
|
|
|
|
+ queue_data.emplace_back(std::move(argument_data));
|
|
|
|
|
+ queue_data.emplace_back(std::move(swkbd_data));
|
|
|
|
|
+ queue_data.emplace_back(std::move(work_buffer));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
IAppletCommonFunctions::IAppletCommonFunctions(Core::System& system_)
|
|
IAppletCommonFunctions::IAppletCommonFunctions(Core::System& system_)
|
|
|
: ServiceFramework{system_, "IAppletCommonFunctions"} {
|
|
: ServiceFramework{system_, "IAppletCommonFunctions"} {
|
|
|
// clang-format off
|
|
// clang-format off
|