From c96450f6e248ce0cd8dc69d91c691e70ede984e0 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Wed, 5 Jun 2019 12:11:24 -0400 Subject: frontend: Add base class and default impl of parent controls applet frontend --- src/core/frontend/applets/general_frontend.cpp | 31 +++++++++++++++++++++++++- src/core/frontend/applets/general_frontend.h | 22 ++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) (limited to 'src/core/frontend/applets') diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general_frontend.cpp index b974f2289..7483ffb76 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general_frontend.cpp @@ -7,9 +7,38 @@ namespace Core::Frontend { +ParentalControlsApplet::~ParentalControlsApplet() = default; + +DefaultParentalControlsApplet::~DefaultParentalControlsApplet() = default; + +void DefaultParentalControlsApplet::VerifyPIN(std::function finished, + bool suspend_future_verification_temporarily) { + LOG_INFO(Service_AM, + "Application requested frontend to verify PIN (normal), " + "suspend_future_verification_temporarily={}, verifying as correct.", + suspend_future_verification_temporarily); + finished(true); +} + +void DefaultParentalControlsApplet::VerifyPINForSettings(std::function finished) { + LOG_INFO(Service_AM, + "Application requested frontend to verify PIN (settings), verifying as correct."); + finished(true); +} + +void DefaultParentalControlsApplet::RegisterPIN(std::function finished) { + LOG_INFO(Service_AM, "Application requested frontend to register new PIN"); + finished(); +} + +void DefaultParentalControlsApplet::ChangePIN(std::function finished) { + LOG_INFO(Service_AM, "Application requested frontend to change PIN to new value"); + finished(); +} + PhotoViewerApplet::~PhotoViewerApplet() = default; -DefaultPhotoViewerApplet::~DefaultPhotoViewerApplet() {} +DefaultPhotoViewerApplet::~DefaultPhotoViewerApplet() = default; void DefaultPhotoViewerApplet::ShowPhotosForApplication(u64 title_id, std::function finished) const { diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general_frontend.h index d4506c999..48e3ce651 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general_frontend.h @@ -9,6 +9,28 @@ namespace Core::Frontend { +class ParentalControlsApplet { +public: + virtual ~ParentalControlsApplet(); + + virtual void VerifyPIN(std::function finished, + bool suspend_future_verification_temporarily) = 0; + virtual void VerifyPINForSettings(std::function finished) = 0; + virtual void RegisterPIN(std::function finished) = 0; + virtual void ChangePIN(std::function finished) = 0; +}; + +class DefaultParentalControlsApplet final : public ParentalControlsApplet { +public: + ~DefaultParentalControlsApplet() override; + + void VerifyPIN(std::function finished, + bool suspend_future_verification_temporarily) override; + void VerifyPINForSettings(std::function finished) override; + void RegisterPIN(std::function finished) override; + void ChangePIN(std::function finished) override; +}; + class PhotoViewerApplet { public: virtual ~PhotoViewerApplet(); -- cgit v1.2.3 From 6ff90082306c3bb5341c0ac2bc3beeb4177dc8a4 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Wed, 5 Jun 2019 12:13:15 -0400 Subject: web_browser: Rename OpenPage to OpenPageLocal This is more representative of what actually occurs, as web does support remote URLs which wouldn't need a romfs callback. This paves for easy future support of this with a call like 'OpenPageRemote' or similar. --- src/core/frontend/applets/web_browser.cpp | 6 +++--- src/core/frontend/applets/web_browser.h | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src/core/frontend/applets') diff --git a/src/core/frontend/applets/web_browser.cpp b/src/core/frontend/applets/web_browser.cpp index 3a3d3d0bf..528295ffc 100644 --- a/src/core/frontend/applets/web_browser.cpp +++ b/src/core/frontend/applets/web_browser.cpp @@ -11,9 +11,9 @@ WebBrowserApplet::~WebBrowserApplet() = default; DefaultWebBrowserApplet::~DefaultWebBrowserApplet() = default; -void DefaultWebBrowserApplet::OpenPage(std::string_view filename, - std::function unpack_romfs_callback, - std::function finished_callback) { +void DefaultWebBrowserApplet::OpenPageLocal(std::string_view filename, + std::function unpack_romfs_callback, + std::function finished_callback) { LOG_INFO(Service_AM, "(STUBBED) called - No suitable web browser implementation found to open website page " "at '{}'!", diff --git a/src/core/frontend/applets/web_browser.h b/src/core/frontend/applets/web_browser.h index f952856af..110e33bc4 100644 --- a/src/core/frontend/applets/web_browser.h +++ b/src/core/frontend/applets/web_browser.h @@ -13,16 +13,16 @@ class WebBrowserApplet { public: virtual ~WebBrowserApplet(); - virtual void OpenPage(std::string_view url, std::function unpack_romfs_callback, - std::function finished_callback) = 0; + virtual void OpenPageLocal(std::string_view url, std::function unpack_romfs_callback, + std::function finished_callback) = 0; }; class DefaultWebBrowserApplet final : public WebBrowserApplet { public: ~DefaultWebBrowserApplet() override; - void OpenPage(std::string_view url, std::function unpack_romfs_callback, - std::function finished_callback) override; + void OpenPageLocal(std::string_view url, std::function unpack_romfs_callback, + std::function finished_callback) override; }; } // namespace Core::Frontend -- cgit v1.2.3 From 54684feffa8518fc8cbc361e460114f810ba2a0e Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Wed, 5 Jun 2019 12:18:10 -0400 Subject: frontend: Add base class and default impl for ECommerce applet frontend --- src/core/frontend/applets/general_frontend.cpp | 64 ++++++++++++++++++++++++++ src/core/frontend/applets/general_frontend.h | 38 +++++++++++++++ 2 files changed, 102 insertions(+) (limited to 'src/core/frontend/applets') diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general_frontend.cpp index 7483ffb76..e6cb59b64 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general_frontend.cpp @@ -53,4 +53,68 @@ void DefaultPhotoViewerApplet::ShowAllPhotos(std::function finished) con finished(); } +ECommerceApplet::~ECommerceApplet() = default; + +DefaultECommerceApplet::~DefaultECommerceApplet() = default; + +void DefaultECommerceApplet::ShowApplicationInformation( + std::function finished, u64 title_id, std::optional user_id, + std::optional full_display, std::optional extra_parameter) { + LOG_INFO(Service_AM, + "Application requested frontend show application information for EShop, " + "title_id={:016X}, user_id={:016X}{:016X}, full_display={}, extra_parameter={}", + title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0], + full_display.has_value() ? fmt::format("{}", *full_display) : "null", + extra_parameter.value_or("null")); + finished(); +} + +void DefaultECommerceApplet::ShowAddOnContentList(std::function finished, u64 title_id, + std::optional user_id, + std::optional full_display) { + LOG_INFO(Service_AM, + "Application requested frontend show add on content list for EShop, " + "title_id={:016X}, user_id={:016X}{:016X}, full_display={}", + title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0], + full_display.has_value() ? fmt::format("{}", *full_display) : "null"); + finished(); +} + +void DefaultECommerceApplet::ShowSubscriptionList(std::function finished, u64 title_id, + std::optional user_id) { + LOG_INFO(Service_AM, + "Application requested frontend show subscription list for EShop, title_id={:016X}, " + "user_id={:016X}{:016X}", + title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]); + finished(); +} + +void DefaultECommerceApplet::ShowConsumableItemList(std::function finished, u64 title_id, + std::optional user_id) { + LOG_INFO( + Service_AM, + "Application requested frontend show consumable item list for EShop, title_id={:016X}, " + "user_id={:016X}{:016X}", + title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]); + finished(); +} + +void DefaultECommerceApplet::ShowShopHome(std::function finished, u128 user_id, + bool full_display) { + LOG_INFO(Service_AM, + "Application requested frontend show home menu for EShop, user_id={:016X}{:016X}, " + "full_display={}", + user_id[1], user_id[0], full_display); + finished(); +} + +void DefaultECommerceApplet::ShowSettings(std::function finished, u128 user_id, + bool full_display) { + LOG_INFO(Service_AM, + "Application requested frontend show settings menu for EShop, user_id={:016X}{:016X}, " + "full_display={}", + user_id[1], user_id[0], full_display); + finished(); +} + } // namespace Core::Frontend diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general_frontend.h index 48e3ce651..616112cfc 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general_frontend.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include "common/common_types.h" namespace Core::Frontend { @@ -47,4 +48,41 @@ public: void ShowAllPhotos(std::function finished) const override; }; +class ECommerceApplet { +public: + virtual ~ECommerceApplet(); + + virtual void ShowApplicationInformation(std::function finished, u64 title_id, + std::optional user_id = {}, + std::optional full_display = {}, + std::optional extra_parameter = {}) = 0; + virtual void ShowAddOnContentList(std::function finished, u64 title_id, + std::optional user_id = {}, + std::optional full_display = {}) = 0; + virtual void ShowSubscriptionList(std::function finished, u64 title_id, + std::optional user_id = {}) = 0; + virtual void ShowConsumableItemList(std::function finished, u64 title_id, + std::optional user_id = {}) = 0; + virtual void ShowShopHome(std::function finished, u128 user_id, bool full_display) = 0; + virtual void ShowSettings(std::function finished, u128 user_id, bool full_display) = 0; +}; + +class DefaultECommerceApplet : public ECommerceApplet { +public: + ~DefaultECommerceApplet() override; + + void ShowApplicationInformation(std::function finished, u64 title_id, + std::optional user_id, std::optional full_display, + std::optional extra_parameter) override; + void ShowAddOnContentList(std::function finished, u64 title_id, + std::optional user_id, + std::optional full_display) override; + void ShowSubscriptionList(std::function finished, u64 title_id, + std::optional user_id) override; + void ShowConsumableItemList(std::function finished, u64 title_id, + std::optional user_id) override; + void ShowShopHome(std::function finished, u128 user_id, bool full_display) override; + void ShowSettings(std::function finished, u128 user_id, bool full_display) override; +}; + } // namespace Core::Frontend -- cgit v1.2.3 From 01ff38cca80c5cf7e64494b129dde8d7c8ebbee5 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Thu, 6 Jun 2019 18:40:59 -0400 Subject: general_frontend: Add documentation for parental controls and ecommerce applets --- src/core/frontend/applets/general_frontend.cpp | 12 ++++++++---- src/core/frontend/applets/general_frontend.h | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) (limited to 'src/core/frontend/applets') diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general_frontend.cpp index e6cb59b64..c30b36de7 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general_frontend.cpp @@ -60,10 +60,11 @@ DefaultECommerceApplet::~DefaultECommerceApplet() = default; void DefaultECommerceApplet::ShowApplicationInformation( std::function finished, u64 title_id, std::optional user_id, std::optional full_display, std::optional extra_parameter) { + const auto value = user_id.value_or(u128{}); LOG_INFO(Service_AM, "Application requested frontend show application information for EShop, " "title_id={:016X}, user_id={:016X}{:016X}, full_display={}, extra_parameter={}", - title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0], + title_id, value[1], value[0], full_display.has_value() ? fmt::format("{}", *full_display) : "null", extra_parameter.value_or("null")); finished(); @@ -72,30 +73,33 @@ void DefaultECommerceApplet::ShowApplicationInformation( void DefaultECommerceApplet::ShowAddOnContentList(std::function finished, u64 title_id, std::optional user_id, std::optional full_display) { + const auto value = user_id.value_or(u128{}); LOG_INFO(Service_AM, "Application requested frontend show add on content list for EShop, " "title_id={:016X}, user_id={:016X}{:016X}, full_display={}", - title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0], + title_id, value[1], value[0], full_display.has_value() ? fmt::format("{}", *full_display) : "null"); finished(); } void DefaultECommerceApplet::ShowSubscriptionList(std::function finished, u64 title_id, std::optional user_id) { + const auto value = user_id.value_or(u128{}); LOG_INFO(Service_AM, "Application requested frontend show subscription list for EShop, title_id={:016X}, " "user_id={:016X}{:016X}", - title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]); + title_id, value[1], value[0]); finished(); } void DefaultECommerceApplet::ShowConsumableItemList(std::function finished, u64 title_id, std::optional user_id) { + const auto value = user_id.value_or(u128{}); LOG_INFO( Service_AM, "Application requested frontend show consumable item list for EShop, title_id={:016X}, " "user_id={:016X}{:016X}", - title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]); + title_id, value[1], value[0]); finished(); } diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general_frontend.h index 616112cfc..4b63f828e 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general_frontend.h @@ -14,10 +14,20 @@ class ParentalControlsApplet { public: virtual ~ParentalControlsApplet(); + // Prompts the user to enter a PIN and calls the callback with whether or not it matches the + // correct PIN. If the bool is passed, and the PIN was recently entered correctly, the frontend + // should not prompt and simply return true. virtual void VerifyPIN(std::function finished, bool suspend_future_verification_temporarily) = 0; + + // Prompts the user to enter a PIN and calls the callback for correctness. Frontends can + // optionally alert the user that this is to change parental controls settings. virtual void VerifyPINForSettings(std::function finished) = 0; + + // Prompts the user to create a new PIN for pctl and stores it with the service. virtual void RegisterPIN(std::function finished) = 0; + + // Prompts the user to verify the current PIN and then store a new one into pctl. virtual void ChangePIN(std::function finished) = 0; }; @@ -52,18 +62,32 @@ class ECommerceApplet { public: virtual ~ECommerceApplet(); + // Shows a page with application icons, description, name, and price. virtual void ShowApplicationInformation(std::function finished, u64 title_id, std::optional user_id = {}, std::optional full_display = {}, std::optional extra_parameter = {}) = 0; + + // Shows a page with all of the add on content available for a game, with name, description, and + // price. virtual void ShowAddOnContentList(std::function finished, u64 title_id, std::optional user_id = {}, std::optional full_display = {}) = 0; + + // Shows a page with all of the subscriptions (recurring payments) for a game, with name, + // description, price, and renewal period. virtual void ShowSubscriptionList(std::function finished, u64 title_id, std::optional user_id = {}) = 0; + + // Shows a page with a list of any additional game related purchasable items (DLC, + // subscriptions, etc) for a particular game, with name, description, type, and price. virtual void ShowConsumableItemList(std::function finished, u64 title_id, std::optional user_id = {}) = 0; + + // Shows the home page of the shop. virtual void ShowShopHome(std::function finished, u128 user_id, bool full_display) = 0; + + // Shows the user settings page of the shop. virtual void ShowSettings(std::function finished, u128 user_id, bool full_display) = 0; }; -- cgit v1.2.3