From f734464a520983e1d4ac8ab9c3f9ff79d6212a25 Mon Sep 17 00:00:00 2001 From: ManicSteiner Date: Fri, 3 Nov 2023 23:37:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=94=E5=9B=9E=E6=A1=8C=E9=9D=A2&?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8=E8=BF=94=E5=9B=9E=E6=A1=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/AsstCaller.h | 1 + resource/config.json | 3 ++- src/MaaCore/Assistant.cpp | 5 ++++ src/MaaCore/Assistant.h | 4 ++++ src/MaaCore/AsstCaller.cpp | 9 +++++++ src/MaaCore/Config/GeneralConfig.cpp | 1 + src/MaaCore/Config/GeneralConfig.h | 1 + src/MaaCore/Controller/AdbController.cpp | 7 ++++++ src/MaaCore/Controller/AdbController.h | 4 ++++ src/MaaCore/Controller/Controller.cpp | 6 +++++ src/MaaCore/Controller/Controller.h | 2 ++ src/MaaCore/Controller/ControllerAPI.h | 2 ++ .../Controller/MaaThriftController.cpp | 2 ++ src/MaaCore/Controller/MaaThriftController.h | 2 ++ .../Controller/MinitouchController.cpp | 6 +++++ src/MaaCore/Controller/MinitouchController.h | 2 ++ .../Controller/PlayToolsController.cpp | 6 +++++ src/MaaCore/Controller/PlayToolsController.h | 2 ++ src/MaaWpfGui/Main/AsstProxy.cs | 5 ++++ src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 2 ++ src/MaaWpfGui/Services/MaaService.cs | 3 +++ .../ViewModels/UI/TaskQueueViewModel.cs | 24 +++++++++++++++++++ 26 files changed, 106 insertions(+), 1 deletion(-) diff --git a/include/AsstCaller.h b/include/AsstCaller.h index 9dcef3f7bf..ee4921713a 100644 --- a/include/AsstCaller.h +++ b/include/AsstCaller.h @@ -46,6 +46,7 @@ extern "C" AsstBool ASSTAPI AsstStop(AsstHandle handle); AsstBool ASSTAPI AsstRunning(AsstHandle handle); AsstBool ASSTAPI AsstConnected(AsstHandle handle); + AsstBool ASSTAPI AsstBackToHome(AsstHandle handle); /* Async with AsstMsg::AsyncCallInfo Callback*/ AsstAsyncCallId ASSTAPI AsstAsyncConnect(AsstHandle handle, const char* adb_path, const char* address, diff --git a/resource/config.json b/resource/config.json index db35a64c86..3db5c0d6f6 100644 --- a/resource/config.json +++ b/resource/config.json @@ -87,7 +87,8 @@ "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" -i", - "callMaatouch": "[Adb] -s [AdbSerial] shell \"export CLASSPATH=/data/local/tmp/[minitouchWorkingFile]; app_process /data/local/tmp com.shxyke.MaaTouch.App\"" + "callMaatouch": "[Adb] -s [AdbSerial] shell \"export CLASSPATH=/data/local/tmp/[minitouchWorkingFile]; app_process /data/local/tmp com.shxyke.MaaTouch.App\"", + "back_to_home": "[Adb] -s [AdbSerial] shell input keyevent HOME" }, { "configName": "CapWithShell", diff --git a/src/MaaCore/Assistant.cpp b/src/MaaCore/Assistant.cpp index 60ede52477..0de52de45b 100644 --- a/src/MaaCore/Assistant.cpp +++ b/src/MaaCore/Assistant.cpp @@ -631,3 +631,8 @@ bool asst::Assistant::inited() const noexcept { return m_ctrler && m_ctrler->inited(); } + +bool asst::Assistant::back_to_home() const +{ + return m_ctrler->back_to_home(); +} diff --git a/src/MaaCore/Assistant.h b/src/MaaCore/Assistant.h index 87ca15ad32..4d61b9a450 100644 --- a/src/MaaCore/Assistant.h +++ b/src/MaaCore/Assistant.h @@ -56,6 +56,8 @@ public: virtual std::string get_uuid() const = 0; // 获取任务列表 virtual std::vector get_tasks_list() const = 0; + + virtual bool back_to_home() const = 0; }; namespace asst @@ -92,6 +94,8 @@ namespace asst virtual std::string get_uuid() const override; virtual std::vector get_tasks_list() const override; + virtual bool back_to_home() const override; + public: std::shared_ptr ctrler() const { return m_ctrler; } std::shared_ptr status() const { return m_status; } diff --git a/src/MaaCore/AsstCaller.cpp b/src/MaaCore/AsstCaller.cpp index 578d24ecfa..9d85818237 100644 --- a/src/MaaCore/AsstCaller.cpp +++ b/src/MaaCore/AsstCaller.cpp @@ -154,6 +154,15 @@ AsstBool AsstConnected(AsstHandle handle) return handle->connected() ? AsstTrue : AsstFalse; } +AsstBool ASSTAPI AsstBackToHome(AsstHandle handle) +{ + if (!inited() || handle == nullptr) { + return AsstFalse; + } + + return handle->back_to_home() ? AsstTrue : AsstFalse; +} + AsstAsyncCallId AsstAsyncConnect(AsstHandle handle, const char* adb_path, const char* address, const char* config, AsstBool block) { diff --git a/src/MaaCore/Config/GeneralConfig.cpp b/src/MaaCore/Config/GeneralConfig.cpp index 4a1018db8b..e7612bbddf 100644 --- a/src/MaaCore/Config/GeneralConfig.cpp +++ b/src/MaaCore/Config/GeneralConfig.cpp @@ -86,6 +86,7 @@ bool asst::GeneralConfig::parse(const json::value& json) adb.chmod_minitouch = cfg_json.get("chmodMinitouch", base_cfg.chmod_minitouch); adb.call_minitouch = cfg_json.get("callMinitouch", base_cfg.call_minitouch); adb.call_maatouch = cfg_json.get("callMaatouch", base_cfg.call_maatouch); + adb.back_to_home = cfg_json.get("back_to_home", base_cfg.back_to_home); m_adb_cfg[cfg_json.at("configName").as_string()] = std::move(adb); } diff --git a/src/MaaCore/Config/GeneralConfig.h b/src/MaaCore/Config/GeneralConfig.h index dbfab61e03..3bf1b9409d 100644 --- a/src/MaaCore/Config/GeneralConfig.h +++ b/src/MaaCore/Config/GeneralConfig.h @@ -80,6 +80,7 @@ namespace asst std::string chmod_minitouch; std::string call_minitouch; std::string call_maatouch; + std::string back_to_home; }; class GeneralConfig final : public SingletonHolder, public AbstractConfig diff --git a/src/MaaCore/Controller/AdbController.cpp b/src/MaaCore/Controller/AdbController.cpp index 0110cfd3f2..b97d5eb6f5 100644 --- a/src/MaaCore/Controller/AdbController.cpp +++ b/src/MaaCore/Controller/AdbController.cpp @@ -694,6 +694,7 @@ bool asst::AdbController::connect(const std::string& adb_path, const std::string m_adb.screencap_encode = cmd_replace(adb_cfg.screencap_encode); m_adb.start = cmd_replace(adb_cfg.start); m_adb.stop = cmd_replace(adb_cfg.stop); + m_adb.back_to_home = cmd_replace(adb_cfg.back_to_home); if (m_support_socket && !m_server_started) { std::string bind_address; @@ -740,3 +741,9 @@ void asst::AdbController::clear_lf_info() { m_adb.screencap_end_of_line = AdbProperty::ScreencapEndOfLine::UnknownYet; } + +void asst::AdbController::back_to_home() noexcept +{ + call_command(m_adb.back_to_home); + return; +} diff --git a/src/MaaCore/Controller/AdbController.h b/src/MaaCore/Controller/AdbController.h index 02048d1e33..617dba468d 100644 --- a/src/MaaCore/Controller/AdbController.h +++ b/src/MaaCore/Controller/AdbController.h @@ -48,6 +48,8 @@ namespace asst AdbController& operator=(const AdbController&) = delete; AdbController& operator=(AdbController&&) = delete; + virtual void back_to_home() noexcept override; + protected: std::optional call_command(const std::string& cmd, int64_t timeout = 20000, bool allow_reconnect = true, bool recv_by_socket = false); @@ -97,6 +99,8 @@ namespace asst std::string start; std::string stop; + std::string back_to_home; + /* properties */ enum class ScreencapEndOfLine { diff --git a/src/MaaCore/Controller/Controller.cpp b/src/MaaCore/Controller/Controller.cpp index d3185798d7..02eb26efc0 100644 --- a/src/MaaCore/Controller/Controller.cpp +++ b/src/MaaCore/Controller/Controller.cpp @@ -70,6 +70,12 @@ void asst::Controller::sync_params() m_controller->set_kill_adb_on_exit(m_kill_adb_on_exit); } +bool asst::Controller::back_to_home() +{ + m_controller->back_to_home(); + return true; +} + cv::Mat asst::Controller::get_resized_image_cache() const { const static cv::Size d_size(m_scale_size.first, m_scale_size.second); diff --git a/src/MaaCore/Controller/Controller.h b/src/MaaCore/Controller/Controller.h index 4c117597dd..c86656adb8 100644 --- a/src/MaaCore/Controller/Controller.h +++ b/src/MaaCore/Controller/Controller.h @@ -71,6 +71,8 @@ namespace asst Controller& operator=(const Controller&) = delete; Controller& operator=(Controller&&) = delete; + bool back_to_home(); + private: cv::Mat get_resized_image_cache() const; diff --git a/src/MaaCore/Controller/ControllerAPI.h b/src/MaaCore/Controller/ControllerAPI.h index f5c6e574c0..75f56b616f 100644 --- a/src/MaaCore/Controller/ControllerAPI.h +++ b/src/MaaCore/Controller/ControllerAPI.h @@ -49,6 +49,8 @@ namespace asst ControllerAPI& operator=(const ControllerAPI&) = delete; ControllerAPI& operator=(ControllerAPI&&) = delete; + + virtual void back_to_home() noexcept {} }; struct InputEvent diff --git a/src/MaaCore/Controller/MaaThriftController.cpp b/src/MaaCore/Controller/MaaThriftController.cpp index b6e4dc4194..15d2d16300 100644 --- a/src/MaaCore/Controller/MaaThriftController.cpp +++ b/src/MaaCore/Controller/MaaThriftController.cpp @@ -484,6 +484,8 @@ std::pair asst::MaaThriftController::get_screen_res() const noexcept return m_screen_size; } +void asst::MaaThriftController::back_to_home() noexcept {} + void asst::MaaThriftController::clear_info() noexcept { m_inited = false; diff --git a/src/MaaCore/Controller/MaaThriftController.h b/src/MaaCore/Controller/MaaThriftController.h index dee348bf7e..20ce43467f 100644 --- a/src/MaaCore/Controller/MaaThriftController.h +++ b/src/MaaCore/Controller/MaaThriftController.h @@ -54,6 +54,8 @@ namespace asst MaaThriftController& operator=(const MaaThriftController&) = delete; MaaThriftController& operator=(MaaThriftController&&) = delete; + virtual void back_to_home() noexcept override; + protected: virtual void clear_info() noexcept; void callback(AsstMsg msg, const json::value& details); diff --git a/src/MaaCore/Controller/MinitouchController.cpp b/src/MaaCore/Controller/MinitouchController.cpp index 8b7394e496..ee908e81db 100644 --- a/src/MaaCore/Controller/MinitouchController.cpp +++ b/src/MaaCore/Controller/MinitouchController.cpp @@ -374,3 +374,9 @@ bool asst::MinitouchController::connect(const std::string& adb_path, const std:: return true; } + +void asst::MinitouchController::back_to_home() noexcept +{ + AdbController::back_to_home(); + return; +} diff --git a/src/MaaCore/Controller/MinitouchController.h b/src/MaaCore/Controller/MinitouchController.h index 6338a8376c..377d5fb7aa 100644 --- a/src/MaaCore/Controller/MinitouchController.h +++ b/src/MaaCore/Controller/MinitouchController.h @@ -35,6 +35,8 @@ namespace asst MinitouchController& operator=(const MinitouchController&) = delete; MinitouchController& operator=(MinitouchController&&) = delete; + virtual void back_to_home() noexcept override; + protected: virtual std::optional reconnect(const std::string& cmd, int64_t timeout, bool recv_by_socket) override; diff --git a/src/MaaCore/Controller/PlayToolsController.cpp b/src/MaaCore/Controller/PlayToolsController.cpp index 850291d5dc..39803c99b0 100644 --- a/src/MaaCore/Controller/PlayToolsController.cpp +++ b/src/MaaCore/Controller/PlayToolsController.cpp @@ -166,6 +166,12 @@ std::pair asst::PlayToolsController::get_screen_res() const noexcept return m_screen_size; } +void asst::PlayToolsController::back_to_home() noexcept +{ + Log.info("HOME is not supported on iOS"); + return; +} + bool asst::PlayToolsController::toucher_down(const Point& p, const int delay) { return toucher_commit(TouchPhase::Began, p, delay); diff --git a/src/MaaCore/Controller/PlayToolsController.h b/src/MaaCore/Controller/PlayToolsController.h index 291ee32bd0..02765cdddd 100644 --- a/src/MaaCore/Controller/PlayToolsController.h +++ b/src/MaaCore/Controller/PlayToolsController.h @@ -47,6 +47,8 @@ namespace asst PlayToolsController& operator=(const PlayToolsController&) = delete; PlayToolsController& operator=(PlayToolsController&&) = delete; + virtual void back_to_home() noexcept override; + protected: AsstCallback m_callback; diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 16b8e911d3..584d61ca93 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -1677,6 +1677,11 @@ namespace MaaWpfGui.Main return AsstAppendCloseDown() && AsstStart(); } + public bool AsstBackToHome() + { + return MaaService.AsstBackToHome(_handle); + } + /// /// 领取信用及商店购物。 /// diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index bc50791fd4..83379ce1fd 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -332,6 +332,8 @@ Other client types are not supported Shutdown (only once) Exit MAA and Emulator, then Hibernate if no other running MAA Exit MAA and Emulator, then Shutdown if no other running MAA + Back to Desktop + Move Arknights into background Link Start! Stop Wait & Stop diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 4fad3ee8fe..587aa0f81e 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -332,6 +332,8 @@ Bilibili: ログイン インターフェイスに表示されるアカウント シャットダウン(1回のみ) MAAとエミューレータを終了し、他のMAAがない場合はPCを休止状態になる MAAを終了し、他のMAAがない場合はシャットダウン + デスクトップに戻る + アークナイツをバックグラウンドに移動する Link Start! 止める 待って & 止める diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 4fd737b25a..575d03e263 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -332,6 +332,8 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산) 시스템 종료(한 번만) MAA와 에뮬레이터를 종료, 다른 MAA가 없으면 절전 모드 MAA를 종료, 다른 MAA가 없으면 시스템 종료 + Back to Desktop + Move Arknights into background Link Start! 중지 기다리다 & 중지 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 199ab8efe6..519a7aa91c 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -332,6 +332,8 @@ 关机(仅一次) 退出 MAA 和 模拟器,如无其他 MAA 进程则休眠 退出 MAA,如无其他 MAA 进程则关机 + 返回桌面 + 将 明日方舟 切入后台 Link Start! 停止 等待 & 停止 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 8af2f0add3..2c791ac38e 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -332,6 +332,8 @@ 關機(僅一次) 退出 MAA 和 模擬器,如無其他 MAA 程式則休眠 退出 MAA,如無其他 MAA 程式則關機 + 返回桌面 + 將 明日方舟 轉入後臺 Link Start! 停止 等待 & 停止 diff --git a/src/MaaWpfGui/Services/MaaService.cs b/src/MaaWpfGui/Services/MaaService.cs index fb9343231d..56cf0d3b6c 100644 --- a/src/MaaWpfGui/Services/MaaService.cs +++ b/src/MaaWpfGui/Services/MaaService.cs @@ -65,5 +65,8 @@ namespace MaaWpfGui.Services [DllImport("MaaCore.dll")] public static extern IntPtr AsstGetVersion(); + + [DllImport("MaaCore.dll")] + public static extern bool AsstBackToHome(AsstHandle handle); } } diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 9a16f5472a..0d31822152 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -363,6 +363,8 @@ namespace MaaWpfGui.ViewModels.UI { new GenericCombinedData { Display = LocalizationHelper.GetString("DoNothing"), Value = ActionType.DoNothing }, new GenericCombinedData { Display = LocalizationHelper.GetString("ExitArknights"), Value = ActionType.StopGame }, + new GenericCombinedData { Display = LocalizationHelper.GetString("BackToAndroidHome"), Value = ActionType.BackToAndroidHome }, + new GenericCombinedData { Display = LocalizationHelper.GetString("ExitEmulator"), Value = ActionType.ExitEmulator }, new GenericCombinedData { Display = LocalizationHelper.GetString("ExitSelf"), Value = ActionType.ExitSelf }, new GenericCombinedData { Display = LocalizationHelper.GetString("ExitEmulatorAndSelf"), Value = ActionType.ExitEmulatorAndSelf }, @@ -378,6 +380,8 @@ namespace MaaWpfGui.ViewModels.UI new GenericCombinedData { Display = LocalizationHelper.GetString("ExitEmulatorAndSelfIfOtherMaaElseExitEmulatorAndSelfAndHibernate"), Value = ActionType.ExitEmulatorAndSelfIfOtherMaaElseExitEmulatorAndSelfAndHibernate }, new GenericCombinedData { Display = LocalizationHelper.GetString("ExitSelfIfOtherMaaElseShutdown"), Value = ActionType.ExitSelfIfOtherMaaElseShutdown }, + + new GenericCombinedData { Display = LocalizationHelper.GetString("BackToDesktop"), Value = ActionType.BackToDesktop }, }; var tempOrderList = new List(new DragItemViewModel[taskList.Count]); var nonOrderList = new List(); @@ -1937,6 +1941,16 @@ namespace MaaWpfGui.ViewModels.UI /// Exits MAA and, if no other processes of MAA are running, computer shutdown. /// ExitSelfIfOtherMaaElseShutdown, + + /// + /// Do nothing, just back to desktop. + /// + BackToDesktop, + + /// + /// Switch the game to background without kill it. + /// + BackToAndroidHome, } /// @@ -2056,6 +2070,16 @@ namespace MaaWpfGui.ViewModels.UI goto case ActionType.Shutdown; } + case ActionType.BackToDesktop: + Type shellType = Type.GetTypeFromProgID("Shell.Application"); + object shellObject = System.Activator.CreateInstance(shellType); + shellType.InvokeMember("ToggleDesktop", System.Reflection.BindingFlags.InvokeMethod, null, shellObject, null); + break; + + case ActionType.BackToAndroidHome: + Instances.AsstProxy.AsstBackToHome(); + break; + default: Execute.OnUIThread(() => {