mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	Merge pull request #11929 from dima-xd/swkbd-applet
service: am: Add support for LLE Software Keyboard Applet
This commit is contained in:
		
						commit
						324c93e4aa
					
				| @ -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
 | ||||||
|  | |||||||
| @ -347,11 +347,14 @@ private: | |||||||
|     void GetLibraryAppletInfo(HLERequestContext& ctx); |     void GetLibraryAppletInfo(HLERequestContext& ctx); | ||||||
|     void ExitProcessAndReturn(HLERequestContext& ctx); |     void ExitProcessAndReturn(HLERequestContext& ctx); | ||||||
|     void GetCallerAppletIdentityInfo(HLERequestContext& ctx); |     void GetCallerAppletIdentityInfo(HLERequestContext& ctx); | ||||||
|  |     void GetDesirableKeyboardLayout(HLERequestContext& ctx); | ||||||
|     void GetMainAppletAvailableUsers(HLERequestContext& ctx); |     void GetMainAppletAvailableUsers(HLERequestContext& ctx); | ||||||
|  |     void ShouldSetGpuTimeSliceManually(HLERequestContext& ctx); | ||||||
| 
 | 
 | ||||||
|     void PushInShowAlbum(); |     void PushInShowAlbum(); | ||||||
|     void PushInShowCabinetData(); |     void PushInShowCabinetData(); | ||||||
|     void PushInShowMiiEditData(); |     void PushInShowMiiEditData(); | ||||||
|  |     void PushInShowSoftwareKeyboard(); | ||||||
| 
 | 
 | ||||||
|     std::deque<std::vector<u8>> queue_data; |     std::deque<std::vector<u8>> queue_data; | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user