From 9004bf672233a335a750bef4823b402a24e7abdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8C=E8=8D=89=E9=85=B8=E9=85=AF?= <17663689+kotori2@users.noreply.github.com> Date: Thu, 11 Feb 2021 03:05:38 +0800 Subject: [PATCH] [key selector] Load default config and adjust timeout (#114) --- core/template_override/customize.sh | 6 -- key-selector/src/main/cpp/Languages.h | 25 +++++--- key-selector/src/main/cpp/key_selector.cpp | 75 ++++++++++++++++------ 3 files changed, 71 insertions(+), 35 deletions(-) diff --git a/core/template_override/customize.sh b/core/template_override/customize.sh index 93b5fe4b..44253fe4 100644 --- a/core/template_override/customize.sh +++ b/core/template_override/customize.sh @@ -225,12 +225,6 @@ ui_print "- ${LANG_CUST_INST_COPY_LIB}" rm -rf "/data/misc/$MISC_PATH/framework" mv "${MODPATH}/system/framework" "/data/misc/$MISC_PATH/framework" - -mkdir -p "/data/misc/$MISC_PATH/framework/lib" -if [ "$IS64BIT" = true ]; then - mkdir -p "/data/misc/$MISC_PATH/framework/lib64" -fi - set_perm_recursive /data/misc/$MISC_PATH/framework root root 0755 0644 "u:object_r:magisk_file:s0" || abortC "! ${LANG_CUST_ERR_PERM}" mkdir -p /data/misc/$MISC_PATH/cache diff --git a/key-selector/src/main/cpp/Languages.h b/key-selector/src/main/cpp/Languages.h index 77d27a89..0b5814ef 100644 --- a/key-selector/src/main/cpp/Languages.h +++ b/key-selector/src/main/cpp/Languages.h @@ -11,11 +11,19 @@ public: virtual const std::string desc_line_1() { return "Select variant. Use Volume Down to move and Volume Up to confirm."; } - virtual const std::string desc_line_2(uint16_t seconds) { + virtual const std::string desc_line_2(const uint16_t seconds) { const char base[] = "The program will select YAHFA for you in %hu seconds if you don't \nhave a physical volume button. "; + return u16fmt(base, seconds); + } + virtual const std::string timeout(const uint16_t seconds) { + const char base[] = "No operation after %hu seconds."; + return u16fmt(base, seconds); + }; +protected: + std::string u16fmt(const char* base, std::uint16_t s){ std::string out; - out.resize(sizeof(base) + 20); - sprintf(out.data(), base, seconds); + out.resize(strlen(base) + 20); + sprintf(out.data(), base, s); return out; } }; @@ -25,12 +33,13 @@ public: const std::string desc_line_1() override { return "请选择变种。使用音量减切换,音量加确定。"; } - const std::string desc_line_2(uint16_t seconds) override { + const std::string desc_line_2(const uint16_t seconds) override { const char base[] = "如果您的设备没有音量键,本程序将会在 %hu 秒后自动选择 YAHFA 。"; - std::string out; - out.resize(sizeof(base) + 20); - sprintf(out.data(), base, seconds); - return out; + return u16fmt(base, seconds); + } + const std::string timeout(const uint16_t seconds) override { + const char base[] = "在 %hu 秒内没有任何操作。"; + return u16fmt(base, seconds); } }; diff --git a/key-selector/src/main/cpp/key_selector.cpp b/key-selector/src/main/cpp/key_selector.cpp index a48924d8..4a3a8524 100644 --- a/key-selector/src/main/cpp/key_selector.cpp +++ b/key-selector/src/main/cpp/key_selector.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -30,6 +29,7 @@ #include #include #include +#include #include "Languages.h" #include "key_selector.h" @@ -231,20 +231,24 @@ uint32_t get_event() { } } +// for phone which has no button +uint16_t timeout = 10; +std::unique_ptr l = nullptr; + int main() { if (getuid() != 0) { std::cerr << "Root required" << std::endl; exit(1); } - // for phone which has no button - const uint16_t timeout = 20; - alarm(timeout); - auto sig_handler = [](int){ - std::cout << "No operation after " << timeout << " seconds" << std::endl; - exit(static_cast(Variant::YAHFA)); - }; - signal(SIGALRM, sig_handler); + // languages + char locale[256]; + __system_property_get("persist.sys.locale", locale); + if (locale[0] == 'z' && locale[1] == 'h') { + l = std::make_unique(); + } else { + l = std::make_unique(); + } // get current arch #if defined(__arm__) @@ -279,6 +283,46 @@ int main() { Variant cursor = Variant::YAHFA; + // Load current variant + std::filesystem::path lspd_folder; + bool found = false; + for (auto &item: std::filesystem::directory_iterator("/data/misc/")) { + if (item.is_directory() && item.path().string().starts_with("/data/misc/lspd")) { + lspd_folder = item; + found = true; + break; + } + } + + if (found) { + const auto variant_file = lspd_folder / "variant"; + if (std::filesystem::exists(variant_file)) { + std::ifstream ifs(variant_file); + if (ifs.good()) { + std::string line; + std::getline(ifs, line); + char* end; + int i = std::strtol(line.c_str(), &end, 10); + switch (i) { + default: + case 1: + cursor = Variant::YAHFA; + break; + case 2: + cursor = Variant::SandHook; + break; + } + timeout = 5; + } + } + } + + alarm(timeout); + signal(SIGALRM, [](int){ + std::cout << l->timeout(timeout) << std::endl; + exit(static_cast(Variant::YAHFA)); + }); + auto print_status = [&cursor, variants, arch](){ //std::cout << "\33[2K\r"; // clear this line std::stringstream ss; @@ -287,7 +331,7 @@ int main() { continue; } ss << "["; - ss << (cursor == i.first ? "x" : " "); + ss << (cursor == i.first ? "√" : " "); ss << "] "; ss << i.second.expression; ss << " "; @@ -295,16 +339,6 @@ int main() { std::cout << ss.str() << std::endl; }; - // languages - Languages* l; - char locale[256]; - __system_property_get("persist.sys.locale", locale); - if (locale[0] == 'z' && locale[1] == 'h') { - l = new LanguageChinese(); - } else { - l = new Languages(); - } - std::cout << l->desc_line_1() << std::endl; std::cout << l->desc_line_2(timeout) << std::endl; print_status(); @@ -328,6 +362,5 @@ int main() { } // std::cout << std::endl << cursor << std::endl; - delete l; return static_cast(cursor); } \ No newline at end of file