diff options
Diffstat (limited to '')
369 files changed, 49394 insertions, 0 deletions
diff --git a/gui/Android.mk b/gui/Android.mk new file mode 100644 index 000000000..78e93c61a --- /dev/null +++ b/gui/Android.mk @@ -0,0 +1,189 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_CFLAGS := -fno-strict-aliasing + +LOCAL_SRC_FILES := \ + gui.cpp \ + resources.cpp \ + pages.cpp \ + text.cpp \ + image.cpp \ + action.cpp \ + console.cpp \ + fill.cpp \ + button.cpp \ + checkbox.cpp \ + fileselector.cpp \ + progressbar.cpp \ + animation.cpp \ + object.cpp \ + slider.cpp \ + slidervalue.cpp \ + listbox.cpp \ + keyboard.cpp \ + input.cpp \ + blanktimer.cpp \ + partitionlist.cpp \ + mousecursor.cpp \ + scrolllist.cpp \ + patternpassword.cpp \ + textbox.cpp \ + terminal.cpp \ + twmsg.cpp + +ifneq ($(TWRP_CUSTOM_KEYBOARD),) + LOCAL_SRC_FILES += $(TWRP_CUSTOM_KEYBOARD) +else + LOCAL_SRC_FILES += hardwarekeyboard.cpp +endif + +LOCAL_SHARED_LIBRARIES += libminuitwrp libc libstdc++ libminzip libaosprecovery libselinux +LOCAL_MODULE := libguitwrp + +#TWRP_EVENT_LOGGING := true +ifeq ($(TWRP_EVENT_LOGGING), true) + LOCAL_CFLAGS += -D_EVENT_LOGGING +endif +ifneq ($(TW_USE_KEY_CODE_TOUCH_SYNC),) + LOCAL_CFLAGS += -DTW_USE_KEY_CODE_TOUCH_SYNC=$(TW_USE_KEY_CODE_TOUCH_SYNC) +endif + +ifneq ($(TW_NO_SCREEN_BLANK),) + LOCAL_CFLAGS += -DTW_NO_SCREEN_BLANK +endif +ifneq ($(TW_NO_SCREEN_TIMEOUT),) + LOCAL_CFLAGS += -DTW_NO_SCREEN_TIMEOUT +endif +ifeq ($(TW_OEM_BUILD), true) + LOCAL_CFLAGS += -DTW_OEM_BUILD +endif +ifneq ($(TW_X_OFFSET),) + LOCAL_CFLAGS += -DTW_X_OFFSET=$(TW_X_OFFSET) +endif +ifneq ($(TW_Y_OFFSET),) + LOCAL_CFLAGS += -DTW_Y_OFFSET=$(TW_Y_OFFSET) +endif +ifneq ($(TW_W_OFFSET),) + LOCAL_CFLAGS += -DTW_W_OFFSET=$(TW_W_OFFSET) +endif +ifneq ($(TW_H_OFFSET),) + LOCAL_CFLAGS += -DTW_H_OFFSET=$(TW_H_OFFSET) +endif +ifeq ($(TW_ROUND_SCREEN), true) + LOCAL_CFLAGS += -DTW_ROUND_SCREEN +endif + +LOCAL_C_INCLUDES += \ + bionic \ + system/core/include \ + system/core/libpixelflinger/include + +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) + LOCAL_C_INCLUDES += external/stlport/stlport +endif + +LOCAL_CFLAGS += -DTWRES=\"$(TWRES_PATH)\" + +include $(BUILD_STATIC_LIBRARY) + +# Transfer in the resources for the device +include $(CLEAR_VARS) +LOCAL_MODULE := twrp +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)$(TWRES_PATH) + +# The extra blank line before *** is intentional to ensure it ends up on its own line +define TW_THEME_WARNING_MSG + +**************************************************************************** + Could not find ui.xml for TW_THEME: $(TW_THEME) + Set TARGET_SCREEN_WIDTH and TARGET_SCREEN_HEIGHT to automatically select + an appropriate theme, or set TW_THEME to one of the following: + $(notdir $(wildcard $(commands_recovery_local_path)/gui/theme/*_*)) +**************************************************************************** +endef +define TW_CUSTOM_THEME_WARNING_MSG + +**************************************************************************** + Could not find ui.xml for TW_CUSTOM_THEME: $(TW_CUSTOM_THEME) + Expected to find custom theme's ui.xml at: + $(TWRP_THEME_LOC)/ui.xml + Please fix this or set TW_THEME to one of the following: + $(notdir $(wildcard $(commands_recovery_local_path)/gui/theme/*_*)) +**************************************************************************** +endef + +TWRP_RES := $(commands_recovery_local_path)/gui/theme/common/fonts +TWRP_RES += $(commands_recovery_local_path)/gui/theme/common/languages +ifeq ($(TW_EXTRA_LANGUAGES),true) + TWRP_RES += $(commands_recovery_local_path)/gui/theme/extra-languages/fonts + TWRP_RES += $(commands_recovery_local_path)/gui/theme/extra-languages/languages +endif + +ifeq ($(TW_CUSTOM_THEME),) + ifeq ($(TW_THEME),) + ifeq ($(DEVICE_RESOLUTION),) + GUI_WIDTH := $(TARGET_SCREEN_WIDTH) + GUI_HEIGHT := $(TARGET_SCREEN_HEIGHT) + else + SPLIT_DEVICE_RESOLUTION := $(subst x, ,$(DEVICE_RESOLUTION)) + GUI_WIDTH := $(word 1, $(SPLIT_DEVICE_RESOLUTION)) + GUI_HEIGHT := $(word 2, $(SPLIT_DEVICE_RESOLUTION)) + endif + + # Minimum resolution of 100x100 + # This also ensures GUI_WIDTH and GUI_HEIGHT are numbers + ifeq ($(shell test $(GUI_WIDTH) -ge 100; echo $$?),0) + ifeq ($(shell test $(GUI_HEIGHT) -ge 100; echo $$?),0) + ifeq ($(shell test $(GUI_WIDTH) -gt $(GUI_HEIGHT); echo $$?),0) + ifeq ($(shell test $(GUI_WIDTH) -ge 1280; echo $$?),0) + TW_THEME := landscape_hdpi + else + TW_THEME := landscape_mdpi + endif + else ifeq ($(shell test $(GUI_WIDTH) -lt $(GUI_HEIGHT); echo $$?),0) + ifeq ($(shell test $(GUI_WIDTH) -ge 720; echo $$?),0) + TW_THEME := portrait_hdpi + else + TW_THEME := portrait_mdpi + endif + else ifeq ($(shell test $(GUI_WIDTH) -eq $(GUI_HEIGHT); echo $$?),0) + # watch_hdpi does not yet exist + TW_THEME := watch_mdpi + endif + endif + endif + endif + + TWRP_THEME_LOC := $(commands_recovery_local_path)/gui/theme/$(TW_THEME) + ifeq ($(wildcard $(TWRP_THEME_LOC)/ui.xml),) + $(warning $(TW_THEME_WARNING_MSG)) + $(error Theme selection failed; exiting) + endif + + TWRP_RES += $(commands_recovery_local_path)/gui/theme/common/$(word 1,$(subst _, ,$(TW_THEME))).xml + # for future copying of used include xmls and fonts: + # UI_XML := $(TWRP_THEME_LOC)/ui.xml + # TWRP_INCLUDE_XMLS := $(shell xmllint --xpath '/recovery/include/xmlfile/@name' $(UI_XML)|sed -n 's/[^\"]*\"\([^\"]*\)\"[^\"]*/\1\n/gp'|sort|uniq) + # TWRP_FONTS_TTF := $(shell xmllint --xpath '/recovery/resources/font/@filename' $(UI_XML)|sed -n 's/[^\"]*\"\([^\"]*\)\"[^\"]*/\1\n/gp'|sort|uniq)niq) +else + TWRP_THEME_LOC := $(TW_CUSTOM_THEME) + ifeq ($(wildcard $(TWRP_THEME_LOC)/ui.xml),) + $(warning $(TW_CUSTOM_THEME_WARNING_MSG)) + $(error Theme selection failed; exiting) + endif +endif + +TWRP_RES += $(TW_ADDITIONAL_RES) + +TWRP_RES_GEN := $(intermediates)/twrp +$(TWRP_RES_GEN): + mkdir -p $(TARGET_RECOVERY_ROOT_OUT)$(TWRES_PATH) + cp -fr $(TWRP_RES) $(TARGET_RECOVERY_ROOT_OUT)$(TWRES_PATH) + cp -fr $(TWRP_THEME_LOC)/* $(TARGET_RECOVERY_ROOT_OUT)$(TWRES_PATH) + +LOCAL_GENERATED_SOURCES := $(TWRP_RES_GEN) +LOCAL_SRC_FILES := twrp $(TWRP_RES_GEN) +include $(BUILD_PREBUILT) diff --git a/gui/action.cpp b/gui/action.cpp new file mode 100644 index 000000000..a39515828 --- /dev/null +++ b/gui/action.cpp @@ -0,0 +1,2035 @@ +/*update + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <linux/input.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/wait.h> +#include <dirent.h> +#include <private/android_filesystem_config.h> + +#include <string> +#include <sstream> +#include "../partitions.hpp" +#include "../twrp-functions.hpp" +#include "../openrecoveryscript.hpp" + +#include "../adb_install.h" +#include "../fuse_sideload.h" +#include "blanktimer.hpp" + +extern "C" { +#include "../twcommon.h" +#include "../variables.h" +#include "../twinstall.h" +#include "cutils/properties.h" +#include "../adb_install.h" +}; +#include "../set_metadata.h" +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../tw_atomic.hpp" + +GUIAction::mapFunc GUIAction::mf; +std::set<string> GUIAction::setActionsRunningInCallerThread; +static string zip_queue[10]; +static int zip_queue_index; +pid_t sideload_child_pid; + +static void *ActionThread_work_wrapper(void *data); + +class ActionThread +{ +public: + ActionThread(); + ~ActionThread(); + + void threadActions(GUIAction *act); + void run(void *data); +private: + friend void *ActionThread_work_wrapper(void*); + struct ThreadData + { + ActionThread *this_; + GUIAction *act; + ThreadData(ActionThread *this_, GUIAction *act) : this_(this_), act(act) {} + }; + + pthread_t m_thread; + bool m_thread_running; + pthread_mutex_t m_act_lock; +}; + +static ActionThread action_thread; // for all kinds of longer running actions +static ActionThread cancel_thread; // for longer running "cancel" actions + +static void *ActionThread_work_wrapper(void *data) +{ + static_cast<ActionThread::ThreadData*>(data)->this_->run(data); + return NULL; +} + +ActionThread::ActionThread() +{ + m_thread_running = false; + pthread_mutex_init(&m_act_lock, NULL); +} + +ActionThread::~ActionThread() +{ + pthread_mutex_lock(&m_act_lock); + if (m_thread_running) { + pthread_mutex_unlock(&m_act_lock); + pthread_join(m_thread, NULL); + } else { + pthread_mutex_unlock(&m_act_lock); + } + pthread_mutex_destroy(&m_act_lock); +} + +void ActionThread::threadActions(GUIAction *act) +{ + pthread_mutex_lock(&m_act_lock); + if (m_thread_running) { + pthread_mutex_unlock(&m_act_lock); + LOGERR("Another threaded action is already running -- not running %u actions starting with '%s'\n", + act->mActions.size(), act->mActions[0].mFunction.c_str()); + } else { + m_thread_running = true; + pthread_mutex_unlock(&m_act_lock); + ThreadData *d = new ThreadData(this, act); + pthread_create(&m_thread, NULL, &ActionThread_work_wrapper, d); + } +} + +void ActionThread::run(void *data) +{ + ThreadData *d = (ThreadData*)data; + GUIAction* act = d->act; + + std::vector<GUIAction::Action>::iterator it; + for (it = act->mActions.begin(); it != act->mActions.end(); ++it) + act->doAction(*it); + + pthread_mutex_lock(&m_act_lock); + m_thread_running = false; + pthread_mutex_unlock(&m_act_lock); + delete d; +} + +GUIAction::GUIAction(xml_node<>* node) + : GUIObject(node) +{ + xml_node<>* child; + xml_node<>* actions; + xml_attribute<>* attr; + + if (!node) return; + + if (mf.empty()) { +#define ADD_ACTION(n) mf[#n] = &GUIAction::n +#define ADD_ACTION_EX(name, func) mf[name] = &GUIAction::func + // These actions will be run in the caller's thread + ADD_ACTION(reboot); + ADD_ACTION(home); + ADD_ACTION(key); + ADD_ACTION(page); + ADD_ACTION(reload); + ADD_ACTION(readBackup); + ADD_ACTION(set); + ADD_ACTION(clear); + ADD_ACTION(mount); + ADD_ACTION(unmount); + ADD_ACTION_EX("umount", unmount); + ADD_ACTION(restoredefaultsettings); + ADD_ACTION(copylog); + ADD_ACTION(compute); + ADD_ACTION_EX("addsubtract", compute); + ADD_ACTION(setguitimezone); + ADD_ACTION(overlay); + ADD_ACTION(queuezip); + ADD_ACTION(cancelzip); + ADD_ACTION(queueclear); + ADD_ACTION(sleep); + ADD_ACTION(sleepcounter); + ADD_ACTION(appenddatetobackupname); + ADD_ACTION(generatebackupname); + ADD_ACTION(checkpartitionlist); + ADD_ACTION(getpartitiondetails); + ADD_ACTION(screenshot); + ADD_ACTION(setbrightness); + ADD_ACTION(fileexists); + ADD_ACTION(killterminal); + ADD_ACTION(checkbackupname); + ADD_ACTION(adbsideloadcancel); + ADD_ACTION(fixsu); + ADD_ACTION(startmtp); + ADD_ACTION(stopmtp); + ADD_ACTION(cancelbackup); + ADD_ACTION(checkpartitionlifetimewrites); + ADD_ACTION(mountsystemtoggle); + ADD_ACTION(setlanguage); + ADD_ACTION(checkforapp); + ADD_ACTION(togglebacklight); + + // remember actions that run in the caller thread + for (mapFunc::const_iterator it = mf.begin(); it != mf.end(); ++it) + setActionsRunningInCallerThread.insert(it->first); + + // These actions will run in a separate thread + ADD_ACTION(flash); + ADD_ACTION(wipe); + ADD_ACTION(refreshsizes); + ADD_ACTION(nandroid); + ADD_ACTION(fixcontexts); + ADD_ACTION(fixpermissions); + ADD_ACTION(dd); + ADD_ACTION(partitionsd); + ADD_ACTION(installhtcdumlock); + ADD_ACTION(htcdumlockrestoreboot); + ADD_ACTION(htcdumlockreflashrecovery); + ADD_ACTION(cmd); + ADD_ACTION(terminalcommand); + ADD_ACTION(reinjecttwrp); + ADD_ACTION(decrypt); + ADD_ACTION(adbsideload); + ADD_ACTION(openrecoveryscript); + ADD_ACTION(installsu); + ADD_ACTION(decrypt_backup); + ADD_ACTION(repair); + ADD_ACTION(resize); + ADD_ACTION(changefilesystem); + ADD_ACTION(flashimage); + ADD_ACTION(twcmd); + ADD_ACTION(setbootslot); + ADD_ACTION(installapp); + } + + // First, get the action + actions = FindNode(node, "actions"); + if (actions) child = FindNode(actions, "action"); + else child = FindNode(node, "action"); + + if (!child) return; + + while (child) + { + Action action; + + attr = child->first_attribute("function"); + if (!attr) return; + + action.mFunction = attr->value(); + action.mArg = child->value(); + mActions.push_back(action); + + child = child->next_sibling("action"); + } + + // Now, let's get either the key or region + child = FindNode(node, "touch"); + if (child) + { + attr = child->first_attribute("key"); + if (attr) + { + std::vector<std::string> keys = TWFunc::Split_String(attr->value(), "+"); + for (size_t i = 0; i < keys.size(); ++i) + { + const int key = getKeyByName(keys[i]); + mKeys[key] = false; + } + } + else + { + attr = child->first_attribute("x"); + if (!attr) return; + mActionX = atol(attr->value()); + attr = child->first_attribute("y"); + if (!attr) return; + mActionY = atol(attr->value()); + attr = child->first_attribute("w"); + if (!attr) return; + mActionW = atol(attr->value()); + attr = child->first_attribute("h"); + if (!attr) return; + mActionH = atol(attr->value()); + } + } +} + +int GUIAction::NotifyTouch(TOUCH_STATE state, int x __unused, int y __unused) +{ + if (state == TOUCH_RELEASE) + doActions(); + + return 0; +} + +int GUIAction::NotifyKey(int key, bool down) +{ + std::map<int, bool>::iterator itr = mKeys.find(key); + if (itr == mKeys.end()) + return 1; + + bool prevState = itr->second; + itr->second = down; + + // If there is only one key for this action, wait for key up so it + // doesn't trigger with multi-key actions. + // Else, check if all buttons are pressed, then consume their release events + // so they don't trigger one-button actions and reset mKeys pressed status + if (mKeys.size() == 1) { + if (!down && prevState) { + doActions(); + return 0; + } + } else if (down) { + for (itr = mKeys.begin(); itr != mKeys.end(); ++itr) { + if (!itr->second) + return 1; + } + + // Passed, all req buttons are pressed, reset them and consume release events + HardwareKeyboard *kb = PageManager::GetHardwareKeyboard(); + for (itr = mKeys.begin(); itr != mKeys.end(); ++itr) { + kb->ConsumeKeyRelease(itr->first); + itr->second = false; + } + + doActions(); + return 0; + } + + return 1; +} + +int GUIAction::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + if (varName.empty() && !isConditionValid() && mKeys.empty() && !mActionW) + doActions(); + else if ((varName.empty() || IsConditionVariable(varName)) && isConditionValid() && isConditionTrue()) + doActions(); + + return 0; +} + +void GUIAction::simulate_progress_bar(void) +{ + gui_msg("simulating=Simulating actions..."); + for (int i = 0; i < 5; i++) + { + if (PartitionManager.stop_backup.get_value()) { + DataManager::SetValue("tw_cancel_backup", 1); + gui_msg("backup_cancel=Backup Cancelled"); + DataManager::SetValue("ui_progress", 0); + PartitionManager.stop_backup.set_value(0); + return; + } + usleep(500000); + DataManager::SetValue("ui_progress", i * 20); + } +} + +int GUIAction::flash_zip(std::string filename, int* wipe_cache) +{ + int ret_val = 0; + + DataManager::SetValue("ui_progress", 0); + + if (filename.empty()) + { + LOGERR("No file specified.\n"); + return -1; + } + + if (!TWFunc::Path_Exists(filename)) { + if (!PartitionManager.Mount_By_Path(filename, true)) { + return -1; + } + if (!TWFunc::Path_Exists(filename)) { + gui_msg(Msg(msg::kError, "unable_to_locate=Unable to locate {1}.")(filename)); + return -1; + } + } + + if (simulate) { + simulate_progress_bar(); + } else { + ret_val = TWinstall_zip(filename.c_str(), wipe_cache); + + // Now, check if we need to ensure TWRP remains installed... + struct stat st; + if (stat("/sbin/installTwrp", &st) == 0) + { + DataManager::SetValue("tw_operation", "Configuring TWRP"); + DataManager::SetValue("tw_partition", ""); + gui_msg("config_twrp=Configuring TWRP..."); + if (TWFunc::Exec_Cmd("/sbin/installTwrp reinstall") < 0) + { + gui_msg("config_twrp_err=Unable to configure TWRP with this kernel."); + } + } + } + + // Done + DataManager::SetValue("ui_progress", 100); + DataManager::SetValue("ui_progress", 0); + return ret_val; +} + +GUIAction::ThreadType GUIAction::getThreadType(const GUIAction::Action& action) +{ + string func = gui_parse_text(action.mFunction); + bool needsThread = setActionsRunningInCallerThread.find(func) == setActionsRunningInCallerThread.end(); + if (needsThread) { + if (func == "cancelbackup") + return THREAD_CANCEL; + else + return THREAD_ACTION; + } + return THREAD_NONE; +} + +int GUIAction::doActions() +{ + if (mActions.size() < 1) + return -1; + + // Determine in which thread to run the actions. + // Do it for all actions at once before starting, so that we can cancel the whole batch if the thread is already busy. + ThreadType threadType = THREAD_NONE; + std::vector<Action>::iterator it; + for (it = mActions.begin(); it != mActions.end(); ++it) { + ThreadType tt = getThreadType(*it); + if (tt == THREAD_NONE) + continue; + if (threadType == THREAD_NONE) + threadType = tt; + else if (threadType != tt) { + LOGERR("Can't mix normal and cancel actions in the same list.\n" + "Running the whole batch in the cancel thread.\n"); + threadType = THREAD_CANCEL; + break; + } + } + + // Now run the actions in the desired thread. + switch (threadType) { + case THREAD_ACTION: + action_thread.threadActions(this); + break; + + case THREAD_CANCEL: + cancel_thread.threadActions(this); + break; + + default: { + // no iterators here because theme reloading might kill our object + const size_t cnt = mActions.size(); + for (size_t i = 0; i < cnt; ++i) + doAction(mActions[i]); + } + } + + return 0; +} + +int GUIAction::doAction(Action action) +{ + DataManager::GetValue(TW_SIMULATE_ACTIONS, simulate); + + std::string function = gui_parse_text(action.mFunction); + std::string arg = gui_parse_text(action.mArg); + + // find function and execute it + mapFunc::const_iterator funcitr = mf.find(function); + if (funcitr != mf.end()) + return (this->*funcitr->second)(arg); + + LOGERR("Unknown action '%s'\n", function.c_str()); + return -1; +} + +void GUIAction::operation_start(const string operation_name) +{ + LOGINFO("operation_start: '%s'\n", operation_name.c_str()); + time(&Start); + DataManager::SetValue(TW_ACTION_BUSY, 1); + DataManager::SetValue("ui_progress", 0); + DataManager::SetValue("tw_operation", operation_name); + DataManager::SetValue("tw_operation_state", 0); + DataManager::SetValue("tw_operation_status", 0); +} + +void GUIAction::operation_end(const int operation_status) +{ + time_t Stop; + int simulate_fail; + DataManager::SetValue("ui_progress", 100); + if (simulate) { + DataManager::GetValue(TW_SIMULATE_FAIL, simulate_fail); + if (simulate_fail != 0) + DataManager::SetValue("tw_operation_status", 1); + else + DataManager::SetValue("tw_operation_status", 0); + } else { + if (operation_status != 0) { + DataManager::SetValue("tw_operation_status", 1); + } + else { + DataManager::SetValue("tw_operation_status", 0); + } + } + DataManager::SetValue("tw_operation_state", 1); + DataManager::SetValue(TW_ACTION_BUSY, 0); + blankTimer.resetTimerAndUnblank(); + property_set("twrp.action_complete", "1"); + time(&Stop); + if ((int) difftime(Stop, Start) > 10) + DataManager::Vibrate("tw_action_vibrate"); + LOGINFO("operation_end - status=%d\n", operation_status); +} + +int GUIAction::reboot(std::string arg) +{ + sync(); + DataManager::SetValue("tw_gui_done", 1); + DataManager::SetValue("tw_reboot_arg", arg); + + return 0; +} + +int GUIAction::home(std::string arg __unused) +{ + gui_changePage("main"); + return 0; +} + +int GUIAction::key(std::string arg) +{ + const int key = getKeyByName(arg); + PageManager::NotifyKey(key, true); + PageManager::NotifyKey(key, false); + return 0; +} + +int GUIAction::page(std::string arg) +{ + property_set("twrp.action_complete", "0"); + std::string page_name = gui_parse_text(arg); + return gui_changePage(page_name); +} + +int GUIAction::reload(std::string arg __unused) +{ + PageManager::RequestReload(); + // The actual reload is handled in pages.cpp in PageManager::RunReload() + // The reload will occur on the next Update or Render call and will + // be performed in the rendoer thread instead of the action thread + // to prevent crashing which could occur when we start deleting + // GUI resources in the action thread while we attempt to render + // with those same resources in another thread. + return 0; +} + +int GUIAction::readBackup(std::string arg __unused) +{ + string Restore_Name; + DataManager::GetValue("tw_restore", Restore_Name); + PartitionManager.Set_Restore_Files(Restore_Name); + return 0; +} + +int GUIAction::set(std::string arg) +{ + if (arg.find('=') != string::npos) + { + string varName = arg.substr(0, arg.find('=')); + string value = arg.substr(arg.find('=') + 1, string::npos); + + DataManager::GetValue(value, value); + DataManager::SetValue(varName, value); + } + else + DataManager::SetValue(arg, "1"); + return 0; +} + +int GUIAction::clear(std::string arg) +{ + DataManager::SetValue(arg, "0"); + return 0; +} + +int GUIAction::mount(std::string arg) +{ + if (arg == "usb") { + DataManager::SetValue(TW_ACTION_BUSY, 1); + if (!simulate) + PartitionManager.usb_storage_enable(); + else + gui_msg("simulating=Simulating actions..."); + } else if (!simulate) { + PartitionManager.Mount_By_Path(arg, true); + PartitionManager.Add_MTP_Storage(arg); + } else + gui_msg("simulating=Simulating actions..."); + return 0; +} + +int GUIAction::unmount(std::string arg) +{ + if (arg == "usb") { + if (!simulate) + PartitionManager.usb_storage_disable(); + else + gui_msg("simulating=Simulating actions..."); + DataManager::SetValue(TW_ACTION_BUSY, 0); + } else if (!simulate) { + PartitionManager.UnMount_By_Path(arg, true); + } else + gui_msg("simulating=Simulating actions..."); + return 0; +} + +int GUIAction::restoredefaultsettings(std::string arg __unused) +{ + operation_start("Restore Defaults"); + if (simulate) // Simulated so that people don't accidently wipe out the "simulation is on" setting + gui_msg("simulating=Simulating actions..."); + else { + DataManager::ResetDefaults(); + PartitionManager.Update_System_Details(); + PartitionManager.Mount_Current_Storage(true); + } + operation_end(0); + return 0; +} + +int GUIAction::copylog(std::string arg __unused) +{ + operation_start("Copy Log"); + if (!simulate) + { + string dst, curr_storage; + int copy_kernel_log = 0; + + DataManager::GetValue("tw_include_kernel_log", copy_kernel_log); + PartitionManager.Mount_Current_Storage(true); + curr_storage = DataManager::GetCurrentStoragePath(); + dst = curr_storage + "/recovery.log"; + TWFunc::copy_file("/tmp/recovery.log", dst.c_str(), 0755); + tw_set_default_metadata(dst.c_str()); + if (copy_kernel_log) + TWFunc::copy_kernel_log(curr_storage); + sync(); + gui_msg(Msg("copy_log=Copied recovery log to {1}")(dst)); + } else + simulate_progress_bar(); + operation_end(0); + return 0; +} + + +int GUIAction::compute(std::string arg) +{ + if (arg.find("+") != string::npos) + { + string varName = arg.substr(0, arg.find('+')); + string string_to_add = arg.substr(arg.find('+') + 1, string::npos); + int amount_to_add = atoi(string_to_add.c_str()); + int value; + + DataManager::GetValue(varName, value); + DataManager::SetValue(varName, value + amount_to_add); + return 0; + } + if (arg.find("-") != string::npos) + { + string varName = arg.substr(0, arg.find('-')); + string string_to_subtract = arg.substr(arg.find('-') + 1, string::npos); + int amount_to_subtract = atoi(string_to_subtract.c_str()); + int value; + + DataManager::GetValue(varName, value); + value -= amount_to_subtract; + if (value <= 0) + value = 0; + DataManager::SetValue(varName, value); + return 0; + } + if (arg.find("*") != string::npos) + { + string varName = arg.substr(0, arg.find('*')); + string multiply_by_str = gui_parse_text(arg.substr(arg.find('*') + 1, string::npos)); + int multiply_by = atoi(multiply_by_str.c_str()); + int value; + + DataManager::GetValue(varName, value); + DataManager::SetValue(varName, value*multiply_by); + return 0; + } + if (arg.find("/") != string::npos) + { + string varName = arg.substr(0, arg.find('/')); + string divide_by_str = gui_parse_text(arg.substr(arg.find('/') + 1, string::npos)); + int divide_by = atoi(divide_by_str.c_str()); + int value; + + if (divide_by != 0) + { + DataManager::GetValue(varName, value); + DataManager::SetValue(varName, value/divide_by); + } + return 0; + } + LOGERR("Unable to perform compute '%s'\n", arg.c_str()); + return -1; +} + +int GUIAction::setguitimezone(std::string arg __unused) +{ + string SelectedZone; + DataManager::GetValue(TW_TIME_ZONE_GUISEL, SelectedZone); // read the selected time zone into SelectedZone + string Zone = SelectedZone.substr(0, SelectedZone.find(';')); // parse to get time zone + string DSTZone = SelectedZone.substr(SelectedZone.find(';') + 1, string::npos); // parse to get DST component + + int dst; + DataManager::GetValue(TW_TIME_ZONE_GUIDST, dst); // check wether user chose to use DST + + string offset; + DataManager::GetValue(TW_TIME_ZONE_GUIOFFSET, offset); // pull in offset + + string NewTimeZone = Zone; + if (offset != "0") + NewTimeZone += ":" + offset; + + if (dst != 0) + NewTimeZone += DSTZone; + + DataManager::SetValue(TW_TIME_ZONE_VAR, NewTimeZone); + DataManager::update_tz_environment_variables(); + return 0; +} + +int GUIAction::overlay(std::string arg) +{ + return gui_changeOverlay(arg); +} + +int GUIAction::queuezip(std::string arg __unused) +{ + if (zip_queue_index >= 10) { + gui_msg("max_queue=Maximum zip queue reached!"); + return 0; + } + DataManager::GetValue("tw_filename", zip_queue[zip_queue_index]); + if (strlen(zip_queue[zip_queue_index].c_str()) > 0) { + zip_queue_index++; + DataManager::SetValue(TW_ZIP_QUEUE_COUNT, zip_queue_index); + } + return 0; +} + +int GUIAction::cancelzip(std::string arg __unused) +{ + if (zip_queue_index <= 0) { + gui_msg("min_queue=Minimum zip queue reached!"); + return 0; + } else { + zip_queue_index--; + DataManager::SetValue(TW_ZIP_QUEUE_COUNT, zip_queue_index); + } + return 0; +} + +int GUIAction::queueclear(std::string arg __unused) +{ + zip_queue_index = 0; + DataManager::SetValue(TW_ZIP_QUEUE_COUNT, zip_queue_index); + return 0; +} + +int GUIAction::sleep(std::string arg) +{ + operation_start("Sleep"); + usleep(atoi(arg.c_str())); + operation_end(0); + return 0; +} + +int GUIAction::sleepcounter(std::string arg) +{ + operation_start("SleepCounter"); + // Ensure user notices countdown in case it needs to be cancelled + blankTimer.resetTimerAndUnblank(); + int total = atoi(arg.c_str()); + for (int t = total; t > 0; t--) { + int progress = (int)(((float)(total-t)/(float)total)*100.0); + DataManager::SetValue("ui_progress", progress); + ::sleep(1); + DataManager::SetValue("tw_sleep", t-1); + } + DataManager::SetValue("ui_progress", 100); + operation_end(0); + return 0; +} + +int GUIAction::appenddatetobackupname(std::string arg __unused) +{ + operation_start("AppendDateToBackupName"); + string Backup_Name; + DataManager::GetValue(TW_BACKUP_NAME, Backup_Name); + Backup_Name += TWFunc::Get_Current_Date(); + if (Backup_Name.size() > MAX_BACKUP_NAME_LEN) + Backup_Name.resize(MAX_BACKUP_NAME_LEN); + DataManager::SetValue(TW_BACKUP_NAME, Backup_Name); + PageManager::NotifyKey(KEY_END, true); + PageManager::NotifyKey(KEY_END, false); + operation_end(0); + return 0; +} + +int GUIAction::generatebackupname(std::string arg __unused) +{ + operation_start("GenerateBackupName"); + TWFunc::Auto_Generate_Backup_Name(); + operation_end(0); + return 0; +} + +int GUIAction::checkpartitionlist(std::string arg) +{ + string List, part_path; + int count = 0; + + if (arg.empty()) + arg = "tw_wipe_list"; + DataManager::GetValue(arg, List); + LOGINFO("checkpartitionlist list '%s'\n", List.c_str()); + if (!List.empty()) { + size_t start_pos = 0, end_pos = List.find(";", start_pos); + while (end_pos != string::npos && start_pos < List.size()) { + part_path = List.substr(start_pos, end_pos - start_pos); + LOGINFO("checkpartitionlist part_path '%s'\n", part_path.c_str()); + if (part_path == "/and-sec" || part_path == "DALVIK" || part_path == "INTERNAL") { + // Do nothing + } else { + count++; + } + start_pos = end_pos + 1; + end_pos = List.find(";", start_pos); + } + DataManager::SetValue("tw_check_partition_list", count); + } else { + DataManager::SetValue("tw_check_partition_list", 0); + } + return 0; +} + +int GUIAction::getpartitiondetails(std::string arg) +{ + string List, part_path; + + if (arg.empty()) + arg = "tw_wipe_list"; + DataManager::GetValue(arg, List); + LOGINFO("getpartitiondetails list '%s'\n", List.c_str()); + if (!List.empty()) { + size_t start_pos = 0, end_pos = List.find(";", start_pos); + part_path = List; + while (end_pos != string::npos && start_pos < List.size()) { + part_path = List.substr(start_pos, end_pos - start_pos); + LOGINFO("getpartitiondetails part_path '%s'\n", part_path.c_str()); + if (part_path == "/and-sec" || part_path == "DALVIK" || part_path == "INTERNAL") { + // Do nothing + } else { + DataManager::SetValue("tw_partition_path", part_path); + break; + } + start_pos = end_pos + 1; + end_pos = List.find(";", start_pos); + } + if (!part_path.empty()) { + TWPartition* Part = PartitionManager.Find_Partition_By_Path(part_path); + if (Part) { + unsigned long long mb = 1048576; + + DataManager::SetValue("tw_partition_name", Part->Display_Name); + DataManager::SetValue("tw_partition_mount_point", Part->Mount_Point); + DataManager::SetValue("tw_partition_file_system", Part->Current_File_System); + DataManager::SetValue("tw_partition_size", Part->Size / mb); + DataManager::SetValue("tw_partition_used", Part->Used / mb); + DataManager::SetValue("tw_partition_free", Part->Free / mb); + DataManager::SetValue("tw_partition_backup_size", Part->Backup_Size / mb); + DataManager::SetValue("tw_partition_removable", Part->Removable); + DataManager::SetValue("tw_partition_is_present", Part->Is_Present); + + if (Part->Can_Repair()) + DataManager::SetValue("tw_partition_can_repair", 1); + else + DataManager::SetValue("tw_partition_can_repair", 0); + if (Part->Can_Resize()) + DataManager::SetValue("tw_partition_can_resize", 1); + else + DataManager::SetValue("tw_partition_can_resize", 0); + if (TWFunc::Path_Exists("/sbin/mkfs.fat")) + DataManager::SetValue("tw_partition_vfat", 1); + else + DataManager::SetValue("tw_partition_vfat", 0); + if (TWFunc::Path_Exists("/sbin/mkexfatfs")) + DataManager::SetValue("tw_partition_exfat", 1); + else + DataManager::SetValue("tw_partition_exfat", 0); + if (TWFunc::Path_Exists("/sbin/mkfs.f2fs")) + DataManager::SetValue("tw_partition_f2fs", 1); + else + DataManager::SetValue("tw_partition_f2fs", 0); + if (TWFunc::Path_Exists("/sbin/mke2fs")) + DataManager::SetValue("tw_partition_ext", 1); + else + DataManager::SetValue("tw_partition_ext", 0); + return 0; + } else { + LOGERR("Unable to locate partition: '%s'\n", part_path.c_str()); + } + } + } + DataManager::SetValue("tw_partition_name", ""); + DataManager::SetValue("tw_partition_file_system", ""); + // Set this to 0 to prevent trying to partition this device, just in case + DataManager::SetValue("tw_partition_removable", 0); + return 0; +} + +int GUIAction::screenshot(std::string arg __unused) +{ + time_t tm; + char path[256]; + int path_len; + uid_t uid = AID_MEDIA_RW; + gid_t gid = AID_MEDIA_RW; + + const std::string storage = DataManager::GetCurrentStoragePath(); + if (PartitionManager.Is_Mounted_By_Path(storage)) { + snprintf(path, sizeof(path), "%s/Pictures/Screenshots/", storage.c_str()); + } else { + strcpy(path, "/tmp/"); + } + + if (!TWFunc::Create_Dir_Recursive(path, 0775, uid, gid)) + return 0; + + tm = time(NULL); + path_len = strlen(path); + + // Screenshot_2014-01-01-18-21-38.png + strftime(path+path_len, sizeof(path)-path_len, "Screenshot_%Y-%m-%d-%H-%M-%S.png", localtime(&tm)); + + int res = gr_save_screenshot(path); + if (res == 0) { + chmod(path, 0666); + chown(path, uid, gid); + + gui_msg(Msg("screenshot_saved=Screenshot was saved to {1}")(path)); + + // blink to notify that the screenshow was taken + gr_color(255, 255, 255, 255); + gr_fill(0, 0, gr_fb_width(), gr_fb_height()); + gr_flip(); + gui_forceRender(); + } else { + gui_err("screenshot_err=Failed to take a screenshot!"); + } + return 0; +} + +int GUIAction::setbrightness(std::string arg) +{ + return TWFunc::Set_Brightness(arg); +} + +int GUIAction::fileexists(std::string arg) +{ + struct stat st; + string newpath = arg + "/."; + + operation_start("FileExists"); + if (stat(arg.c_str(), &st) == 0 || stat(newpath.c_str(), &st) == 0) + operation_end(0); + else + operation_end(1); + return 0; +} + +void GUIAction::reinject_after_flash() +{ + if (DataManager::GetIntValue(TW_HAS_INJECTTWRP) == 1 && DataManager::GetIntValue(TW_INJECT_AFTER_ZIP) == 1) { + gui_msg("injecttwrp=Injecting TWRP into boot image..."); + if (simulate) { + simulate_progress_bar(); + } else { + TWPartition* Boot = PartitionManager.Find_Partition_By_Path("/boot"); + if (Boot == NULL || Boot->Current_File_System != "emmc") + TWFunc::Exec_Cmd("injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash"); + else { + string injectcmd = "injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash bd=" + Boot->Actual_Block_Device; + TWFunc::Exec_Cmd(injectcmd); + } + gui_msg("done=Done."); + } + } +} + +int GUIAction::flash(std::string arg) +{ + int i, ret_val = 0, wipe_cache = 0; + // We're going to jump to this page first, like a loading page + gui_changePage(arg); + for (i=0; i<zip_queue_index; i++) { + string zip_path = zip_queue[i]; + size_t slashpos = zip_path.find_last_of('/'); + string zip_filename = (slashpos == string::npos) ? zip_path : zip_path.substr(slashpos + 1); + operation_start("Flashing"); + DataManager::SetValue("tw_filename", zip_path); + DataManager::SetValue("tw_file", zip_filename); + DataManager::SetValue(TW_ZIP_INDEX, (i + 1)); + + TWFunc::SetPerformanceMode(true); + ret_val = flash_zip(zip_path, &wipe_cache); + TWFunc::SetPerformanceMode(false); + if (ret_val != 0) { + gui_msg(Msg(msg::kError, "zip_err=Error installing zip file '{1}'")(zip_path)); + ret_val = 1; + break; + } + } + zip_queue_index = 0; + + if (wipe_cache) { + gui_msg("zip_wipe_cache=One or more zip requested a cache wipe -- Wiping cache now."); + PartitionManager.Wipe_By_Path("/cache"); + } + + reinject_after_flash(); + PartitionManager.Update_System_Details(); + operation_end(ret_val); + // This needs to be after the operation_end call so we change pages before we change variables that we display on the screen + DataManager::SetValue(TW_ZIP_QUEUE_COUNT, zip_queue_index); + return 0; +} + +int GUIAction::wipe(std::string arg) +{ + operation_start("Format"); + DataManager::SetValue("tw_partition", arg); + + int ret_val = false; + + if (simulate) { + simulate_progress_bar(); + } else { + if (arg == "data") + ret_val = PartitionManager.Factory_Reset(); + else if (arg == "battery") + ret_val = PartitionManager.Wipe_Battery_Stats(); + else if (arg == "rotate") + ret_val = PartitionManager.Wipe_Rotate_Data(); + else if (arg == "dalvik") + ret_val = PartitionManager.Wipe_Dalvik_Cache(); + else if (arg == "DATAMEDIA") { + ret_val = PartitionManager.Format_Data(); + } else if (arg == "INTERNAL") { + int has_datamedia; + + DataManager::GetValue(TW_HAS_DATA_MEDIA, has_datamedia); + if (has_datamedia) { + ret_val = PartitionManager.Wipe_Media_From_Data(); + } else { + ret_val = PartitionManager.Wipe_By_Path(DataManager::GetSettingsStoragePath()); + } + } else if (arg == "EXTERNAL") { + string External_Path; + + DataManager::GetValue(TW_EXTERNAL_PATH, External_Path); + ret_val = PartitionManager.Wipe_By_Path(External_Path); + } else if (arg == "ANDROIDSECURE") { + ret_val = PartitionManager.Wipe_Android_Secure(); + } else if (arg == "LIST") { + string Wipe_List, wipe_path; + bool skip = false; + ret_val = true; + + DataManager::GetValue("tw_wipe_list", Wipe_List); + LOGINFO("wipe list '%s'\n", Wipe_List.c_str()); + if (!Wipe_List.empty()) { + size_t start_pos = 0, end_pos = Wipe_List.find(";", start_pos); + while (end_pos != string::npos && start_pos < Wipe_List.size()) { + wipe_path = Wipe_List.substr(start_pos, end_pos - start_pos); + LOGINFO("wipe_path '%s'\n", wipe_path.c_str()); + if (wipe_path == "/and-sec") { + if (!PartitionManager.Wipe_Android_Secure()) { + gui_msg("and_sec_wipe_err=Unable to wipe android secure"); + ret_val = false; + break; + } else { + skip = true; + } + } else if (wipe_path == "DALVIK") { + if (!PartitionManager.Wipe_Dalvik_Cache()) { + gui_err("dalvik_wipe_err=Failed to wipe dalvik"); + ret_val = false; + break; + } else { + skip = true; + } + } else if (wipe_path == "INTERNAL") { + if (!PartitionManager.Wipe_Media_From_Data()) { + ret_val = false; + break; + } else { + skip = true; + } + } + if (!skip) { + if (!PartitionManager.Wipe_By_Path(wipe_path)) { + gui_msg(Msg(msg::kError, "unable_to_wipe=Unable to wipe {1}.")(wipe_path)); + ret_val = false; + break; + } else if (wipe_path == DataManager::GetSettingsStoragePath()) { + arg = wipe_path; + } + } else { + skip = false; + } + start_pos = end_pos + 1; + end_pos = Wipe_List.find(";", start_pos); + } + } + } else + ret_val = PartitionManager.Wipe_By_Path(arg); +#ifndef TW_OEM_BUILD + if (arg == DataManager::GetSettingsStoragePath()) { + // If we wiped the settings storage path, recreate the TWRP folder and dump the settings + string Storage_Path = DataManager::GetSettingsStoragePath(); + + if (PartitionManager.Mount_By_Path(Storage_Path, true)) { + LOGINFO("Making TWRP folder and saving settings.\n"); + Storage_Path += "/TWRP"; + mkdir(Storage_Path.c_str(), 0777); + DataManager::Flush(); + } else { + LOGERR("Unable to recreate TWRP folder and save settings.\n"); + } + } +#endif + } + PartitionManager.Update_System_Details(); + if (ret_val) + ret_val = 0; // 0 is success + else + ret_val = 1; // 1 is failure + operation_end(ret_val); + return 0; +} + +int GUIAction::refreshsizes(std::string arg __unused) +{ + operation_start("Refreshing Sizes"); + if (simulate) { + simulate_progress_bar(); + } else + PartitionManager.Update_System_Details(); + operation_end(0); + return 0; +} + +int GUIAction::nandroid(std::string arg) +{ + if (simulate) { + PartitionManager.stop_backup.set_value(0); + DataManager::SetValue("tw_partition", "Simulation"); + simulate_progress_bar(); + operation_end(0); + } else { + operation_start("Nandroid"); + int ret = 0; + + if (arg == "backup") { + string Backup_Name; + DataManager::GetValue(TW_BACKUP_NAME, Backup_Name); + string auto_gen = gui_lookup("auto_generate", "(Auto Generate)"); + if (Backup_Name == auto_gen || Backup_Name == gui_lookup("curr_date", "(Current Date)") || Backup_Name == "0" || Backup_Name == "(" || PartitionManager.Check_Backup_Name(true) == 0) { + ret = PartitionManager.Run_Backup(false); + } else { + operation_end(1); + return -1; + } + DataManager::SetValue(TW_BACKUP_NAME, auto_gen); + } else if (arg == "restore") { + string Restore_Name; + DataManager::GetValue("tw_restore", Restore_Name); + ret = PartitionManager.Run_Restore(Restore_Name); + } else { + operation_end(1); + return -1; + } + DataManager::SetValue("tw_encrypt_backup", 0); + if (!PartitionManager.stop_backup.get_value()) { + if (ret == false) + ret = 1; // 1 for failure + else + ret = 0; // 0 for success + DataManager::SetValue("tw_cancel_backup", 0); + } + else { + DataManager::SetValue("tw_cancel_backup", 1); + gui_msg("backup_cancel=Backup Cancelled"); + ret = 0; + } + operation_end(ret); + return ret; + } + return 0; +} + +int GUIAction::cancelbackup(std::string arg __unused) { + if (simulate) { + PartitionManager.stop_backup.set_value(1); + } + else { + int op_status = PartitionManager.Cancel_Backup(); + if (op_status != 0) + op_status = 1; // failure + } + + return 0; +} + +int GUIAction::fixcontexts(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Fix Contexts"); + LOGINFO("fix contexts started!\n"); + if (simulate) { + simulate_progress_bar(); + } else { + op_status = PartitionManager.Fix_Contexts(); + if (op_status != 0) + op_status = 1; // failure + } + operation_end(op_status); + return 0; +} + +int GUIAction::fixpermissions(std::string arg) +{ + return fixcontexts(arg); +} + +int GUIAction::dd(std::string arg) +{ + operation_start("imaging"); + + if (simulate) { + simulate_progress_bar(); + } else { + string cmd = "dd " + arg; + TWFunc::Exec_Cmd(cmd); + } + operation_end(0); + return 0; +} + +int GUIAction::partitionsd(std::string arg __unused) +{ + operation_start("Partition SD Card"); + int ret_val = 0; + + if (simulate) { + simulate_progress_bar(); + } else { + int allow_partition; + DataManager::GetValue(TW_ALLOW_PARTITION_SDCARD, allow_partition); + if (allow_partition == 0) { + gui_err("no_real_sdcard=This device does not have a real SD Card! Aborting!"); + } else { + if (!PartitionManager.Partition_SDCard()) + ret_val = 1; // failed + } + } + operation_end(ret_val); + return 0; + +} + +int GUIAction::installhtcdumlock(std::string arg __unused) +{ + operation_start("Install HTC Dumlock"); + if (simulate) { + simulate_progress_bar(); + } else + TWFunc::install_htc_dumlock(); + + operation_end(0); + return 0; +} + +int GUIAction::htcdumlockrestoreboot(std::string arg __unused) +{ + operation_start("HTC Dumlock Restore Boot"); + if (simulate) { + simulate_progress_bar(); + } else + TWFunc::htc_dumlock_restore_original_boot(); + + operation_end(0); + return 0; +} + +int GUIAction::htcdumlockreflashrecovery(std::string arg __unused) +{ + operation_start("HTC Dumlock Reflash Recovery"); + if (simulate) { + simulate_progress_bar(); + } else + TWFunc::htc_dumlock_reflash_recovery_to_boot(); + + operation_end(0); + return 0; +} + +int GUIAction::cmd(std::string arg) +{ + int op_status = 0; + + operation_start("Command"); + LOGINFO("Running command: '%s'\n", arg.c_str()); + if (simulate) { + simulate_progress_bar(); + } else { + op_status = TWFunc::Exec_Cmd(arg); + if (op_status != 0) + op_status = 1; + } + + operation_end(op_status); + return 0; +} + +int GUIAction::terminalcommand(std::string arg) +{ + int op_status = 0; + string cmdpath, command; + + DataManager::GetValue("tw_terminal_location", cmdpath); + operation_start("CommandOutput"); + gui_print("%s # %s\n", cmdpath.c_str(), arg.c_str()); + if (simulate) { + simulate_progress_bar(); + operation_end(op_status); + } else if (arg == "exit") { + LOGINFO("Exiting terminal\n"); + operation_end(op_status); + page("main"); + } else { + command = "cd \"" + cmdpath + "\" && " + arg + " 2>&1";; + LOGINFO("Actual command is: '%s'\n", command.c_str()); + DataManager::SetValue("tw_terminal_state", 1); + DataManager::SetValue("tw_background_thread_running", 1); + FILE* fp; + char line[512]; + + fp = popen(command.c_str(), "r"); + if (fp == NULL) { + LOGERR("Error opening command to run (%s).\n", strerror(errno)); + } else { + int fd = fileno(fp), has_data = 0, check = 0, keep_going = -1; + struct timeval timeout; + fd_set fdset; + + while (keep_going) + { + FD_ZERO(&fdset); + FD_SET(fd, &fdset); + timeout.tv_sec = 0; + timeout.tv_usec = 400000; + has_data = select(fd+1, &fdset, NULL, NULL, &timeout); + if (has_data == 0) { + // Timeout reached + DataManager::GetValue("tw_terminal_state", check); + if (check == 0) { + keep_going = 0; + } + } else if (has_data < 0) { + // End of execution + keep_going = 0; + } else { + // Try to read output + if (fgets(line, sizeof(line), fp) != NULL) + gui_print("%s", line); // Display output + else + keep_going = 0; // Done executing + } + } + fclose(fp); + } + DataManager::SetValue("tw_operation_status", 0); + DataManager::SetValue("tw_operation_state", 1); + DataManager::SetValue("tw_terminal_state", 0); + DataManager::SetValue("tw_background_thread_running", 0); + DataManager::SetValue(TW_ACTION_BUSY, 0); + } + return 0; +} + +int GUIAction::killterminal(std::string arg __unused) +{ + LOGINFO("Sending kill command...\n"); + operation_start("KillCommand"); + DataManager::SetValue("tw_operation_status", 0); + DataManager::SetValue("tw_operation_state", 1); + DataManager::SetValue("tw_terminal_state", 0); + DataManager::SetValue("tw_background_thread_running", 0); + DataManager::SetValue(TW_ACTION_BUSY, 0); + return 0; +} + +int GUIAction::reinjecttwrp(std::string arg __unused) +{ + int op_status = 0; + operation_start("ReinjectTWRP"); + gui_msg("injecttwrp=Injecting TWRP into boot image..."); + if (simulate) { + simulate_progress_bar(); + } else { + TWFunc::Exec_Cmd("injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash"); + gui_msg("done=Done."); + } + + operation_end(op_status); + return 0; +} + +int GUIAction::checkbackupname(std::string arg __unused) +{ + int op_status = 0; + + operation_start("CheckBackupName"); + if (simulate) { + simulate_progress_bar(); + } else { + op_status = PartitionManager.Check_Backup_Name(true); + if (op_status != 0) + op_status = 1; + } + + operation_end(op_status); + return 0; +} + +int GUIAction::decrypt(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Decrypt"); + if (simulate) { + simulate_progress_bar(); + } else { + string Password; + DataManager::GetValue("tw_crypto_password", Password); + op_status = PartitionManager.Decrypt_Device(Password); + if (op_status != 0) + op_status = 1; + else { + + DataManager::SetValue(TW_IS_ENCRYPTED, 0); + + int has_datamedia; + + // Check for a custom theme and load it if exists + DataManager::GetValue(TW_HAS_DATA_MEDIA, has_datamedia); + if (has_datamedia != 0) { + if (tw_get_default_metadata(DataManager::GetSettingsStoragePath().c_str()) != 0) { + LOGINFO("Failed to get default contexts and file mode for storage files.\n"); + } else { + LOGINFO("Got default contexts and file mode for storage files.\n"); + } + } + PartitionManager.Decrypt_Adopted(); + } + } + + operation_end(op_status); + return 0; +} + +int GUIAction::adbsideload(std::string arg __unused) +{ + operation_start("Sideload"); + if (simulate) { + simulate_progress_bar(); + operation_end(0); + } else { + gui_msg("start_sideload=Starting ADB sideload feature..."); + bool mtp_was_enabled = TWFunc::Toggle_MTP(false); + + // wait for the adb connection + int ret = apply_from_adb("/", &sideload_child_pid); + DataManager::SetValue("tw_has_cancel", 0); // Remove cancel button from gui now that the zip install is going to start + + if (ret != 0) { + if (ret == -2) + gui_msg("need_new_adb=You need adb 1.0.32 or newer to sideload to this device."); + ret = 1; // failure + } else { + int wipe_cache = 0; + int wipe_dalvik = 0; + DataManager::GetValue("tw_wipe_dalvik", wipe_dalvik); + + if (TWinstall_zip(FUSE_SIDELOAD_HOST_PATHNAME, &wipe_cache) == 0) { + if (wipe_cache || DataManager::GetIntValue("tw_wipe_cache")) + PartitionManager.Wipe_By_Path("/cache"); + if (wipe_dalvik) + PartitionManager.Wipe_Dalvik_Cache(); + } else { + ret = 1; // failure + } + } + if (sideload_child_pid) { + LOGINFO("Signaling child sideload process to exit.\n"); + struct stat st; + // Calling stat() on this magic filename signals the minadbd + // subprocess to shut down. + stat(FUSE_SIDELOAD_HOST_EXIT_PATHNAME, &st); + int status; + LOGINFO("Waiting for child sideload process to exit.\n"); + waitpid(sideload_child_pid, &status, 0); + } + property_set("ctl.start", "adbd"); + TWFunc::Toggle_MTP(mtp_was_enabled); + reinject_after_flash(); + operation_end(ret); + } + return 0; +} + +int GUIAction::adbsideloadcancel(std::string arg __unused) +{ + struct stat st; + DataManager::SetValue("tw_has_cancel", 0); // Remove cancel button from gui + gui_msg("cancel_sideload=Cancelling ADB sideload..."); + LOGINFO("Signaling child sideload process to exit.\n"); + // Calling stat() on this magic filename signals the minadbd + // subprocess to shut down. + stat(FUSE_SIDELOAD_HOST_EXIT_PATHNAME, &st); + if (!sideload_child_pid) { + LOGERR("Unable to get child ID\n"); + return 0; + } + ::sleep(1); + LOGINFO("Killing child sideload process.\n"); + kill(sideload_child_pid, SIGTERM); + int status; + LOGINFO("Waiting for child sideload process to exit.\n"); + waitpid(sideload_child_pid, &status, 0); + sideload_child_pid = 0; + DataManager::SetValue("tw_page_done", "1"); // For OpenRecoveryScript support + return 0; +} + +int GUIAction::openrecoveryscript(std::string arg __unused) +{ + operation_start("OpenRecoveryScript"); + if (simulate) { + simulate_progress_bar(); + operation_end(0); + } else { + int op_status = OpenRecoveryScript::Run_OpenRecoveryScript_Action(); + operation_end(op_status); + } + return 0; +} + +int GUIAction::installsu(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Install SuperSU"); + if (simulate) { + simulate_progress_bar(); + } else { + if (!TWFunc::Install_SuperSU()) + op_status = 1; + } + + operation_end(op_status); + return 0; +} + +int GUIAction::fixsu(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Fixing Superuser Permissions"); + if (simulate) { + simulate_progress_bar(); + } else { + LOGERR("Fixing su permissions was deprecated from TWRP.\n"); + LOGERR("4.3+ ROMs with SELinux will always lose su perms.\n"); + } + + operation_end(op_status); + return 0; +} + +int GUIAction::decrypt_backup(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Try Restore Decrypt"); + if (simulate) { + simulate_progress_bar(); + } else { + string Restore_Path, Filename, Password; + DataManager::GetValue("tw_restore", Restore_Path); + Restore_Path += "/"; + DataManager::GetValue("tw_restore_password", Password); + TWFunc::SetPerformanceMode(true); + if (TWFunc::Try_Decrypting_Backup(Restore_Path, Password)) + op_status = 0; // success + else + op_status = 1; // fail + TWFunc::SetPerformanceMode(false); + } + + operation_end(op_status); + return 0; +} + +int GUIAction::repair(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Repair Partition"); + if (simulate) { + simulate_progress_bar(); + } else { + string part_path; + DataManager::GetValue("tw_partition_mount_point", part_path); + if (PartitionManager.Repair_By_Path(part_path, true)) { + op_status = 0; // success + } else { + op_status = 1; // fail + } + } + + operation_end(op_status); + return 0; +} + +int GUIAction::resize(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Resize Partition"); + if (simulate) { + simulate_progress_bar(); + } else { + string part_path; + DataManager::GetValue("tw_partition_mount_point", part_path); + if (PartitionManager.Resize_By_Path(part_path, true)) { + op_status = 0; // success + } else { + op_status = 1; // fail + } + } + + operation_end(op_status); + return 0; +} + +int GUIAction::changefilesystem(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Change File System"); + if (simulate) { + simulate_progress_bar(); + } else { + string part_path, file_system; + DataManager::GetValue("tw_partition_mount_point", part_path); + DataManager::GetValue("tw_action_new_file_system", file_system); + if (PartitionManager.Wipe_By_Path(part_path, file_system)) { + op_status = 0; // success + } else { + gui_err("change_fs_err=Error changing file system."); + op_status = 1; // fail + } + } + PartitionManager.Update_System_Details(); + operation_end(op_status); + return 0; +} + +int GUIAction::startmtp(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Start MTP"); + if (PartitionManager.Enable_MTP()) + op_status = 0; // success + else + op_status = 1; // fail + + operation_end(op_status); + return 0; +} + +int GUIAction::stopmtp(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Stop MTP"); + if (PartitionManager.Disable_MTP()) + op_status = 0; // success + else + op_status = 1; // fail + + operation_end(op_status); + return 0; +} + +int GUIAction::flashimage(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Flash Image"); + string path, filename; + DataManager::GetValue("tw_zip_location", path); + DataManager::GetValue("tw_file", filename); + if (PartitionManager.Flash_Image(path, filename)) + op_status = 0; // success + else + op_status = 1; // fail + + operation_end(op_status); + return 0; +} + +int GUIAction::twcmd(std::string arg) +{ + operation_start("TWRP CLI Command"); + if (simulate) + simulate_progress_bar(); + else + OpenRecoveryScript::Run_CLI_Command(arg.c_str()); + operation_end(0); + return 0; +} + +int GUIAction::getKeyByName(std::string key) +{ + if (key == "home") return KEY_HOMEPAGE; // note: KEY_HOME is cursor movement (like KEY_END) + else if (key == "menu") return KEY_MENU; + else if (key == "back") return KEY_BACK; + else if (key == "search") return KEY_SEARCH; + else if (key == "voldown") return KEY_VOLUMEDOWN; + else if (key == "volup") return KEY_VOLUMEUP; + else if (key == "power") { + int ret_val; + DataManager::GetValue(TW_POWER_BUTTON, ret_val); + if (!ret_val) + return KEY_POWER; + else + return ret_val; + } + + return atol(key.c_str()); +} + +int GUIAction::checkpartitionlifetimewrites(std::string arg) +{ + int op_status = 0; + TWPartition* sys = PartitionManager.Find_Partition_By_Path(arg); + + operation_start("Check Partition Lifetime Writes"); + if (sys) { + if (sys->Check_Lifetime_Writes() != 0) + DataManager::SetValue("tw_lifetime_writes", 1); + else + DataManager::SetValue("tw_lifetime_writes", 0); + op_status = 0; // success + } else { + DataManager::SetValue("tw_lifetime_writes", 1); + op_status = 1; // fail + } + + operation_end(op_status); + return 0; +} + +int GUIAction::mountsystemtoggle(std::string arg) +{ + int op_status = 0; + bool remount_system = PartitionManager.Is_Mounted_By_Path("/system"); + bool remount_vendor = PartitionManager.Is_Mounted_By_Path("/vendor"); + + operation_start("Toggle System Mount"); + if (!PartitionManager.UnMount_By_Path("/system", true)) { + op_status = 1; // fail + } else { + TWPartition* Part = PartitionManager.Find_Partition_By_Path("/system"); + if (Part) { + if (arg == "0") { + DataManager::SetValue("tw_mount_system_ro", 0); + Part->Change_Mount_Read_Only(false); + } else { + DataManager::SetValue("tw_mount_system_ro", 1); + Part->Change_Mount_Read_Only(true); + } + if (remount_system) { + Part->Mount(true); + } + op_status = 0; // success + } else { + op_status = 1; // fail + } + Part = PartitionManager.Find_Partition_By_Path("/vendor"); + if (Part) { + if (arg == "0") { + Part->Change_Mount_Read_Only(false); + } else { + Part->Change_Mount_Read_Only(true); + } + if (remount_vendor) { + Part->Mount(true); + } + op_status = 0; // success + } else { + op_status = 1; // fail + } + } + + operation_end(op_status); + return 0; +} + +int GUIAction::setlanguage(std::string arg __unused) +{ + int op_status = 0; + + operation_start("Set Language"); + PageManager::LoadLanguage(DataManager::GetStrValue("tw_language")); + PageManager::RequestReload(); + op_status = 0; // success + + operation_end(op_status); + return 0; +} + +int GUIAction::togglebacklight(std::string arg __unused) +{ + blankTimer.toggleBlank(); + return 0; +} + +int GUIAction::setbootslot(std::string arg) +{ + operation_start("Set Boot Slot"); + if (!simulate) + PartitionManager.Set_Active_Slot(arg); + else + simulate_progress_bar(); + operation_end(0); + return 0; +} + +int GUIAction::checkforapp(std::string arg __unused) +{ + operation_start("Check for TWRP App"); + if (!simulate) + { + string sdkverstr = TWFunc::System_Property_Get("ro.build.version.sdk"); + int sdkver = 0; + if (!sdkverstr.empty()) { + sdkver = atoi(sdkverstr.c_str()); + } + if (sdkver <= 13) { + if (sdkver == 0) + LOGINFO("Unable to read sdk version from build prop\n"); + else + LOGINFO("SDK version too low for TWRP app (%i < 14)\n", sdkver); + DataManager::SetValue("tw_app_install_status", 1); // 0 = no status, 1 = not installed, 2 = already installed or do not install + goto exit; + } + if (PartitionManager.Mount_By_Path("/system", false)) { + string base_path = "/system"; + if (TWFunc::Path_Exists("/system/system")) + base_path += "/system"; // For devices with system as a root file system (e.g. Pixel) + string install_path = base_path + "/priv-app"; + if (!TWFunc::Path_Exists(install_path)) + install_path = base_path + "/app"; + install_path += "/twrpapp"; + if (TWFunc::Path_Exists(install_path)) { + LOGINFO("App found at '%s'\n", install_path.c_str()); + DataManager::SetValue("tw_app_install_status", 2); // 0 = no status, 1 = not installed, 2 = already installed or do not install + goto exit; + } + } + if (PartitionManager.Mount_By_Path("/data", false)) { + const char parent_path[] = "/data/app"; + const char app_prefix[] = "me.twrp.twrpapp-"; + DIR *d = opendir(parent_path); + if (d) { + struct dirent *p; + while ((p = readdir(d))) { + if (p->d_type != DT_DIR || strlen(p->d_name) < strlen(app_prefix) || strncmp(p->d_name, app_prefix, strlen(app_prefix))) + continue; + closedir(d); + LOGINFO("App found at '%s/%s'\n", parent_path, p->d_name); + DataManager::SetValue("tw_app_install_status", 2); // 0 = no status, 1 = not installed, 2 = already installed or do not install + goto exit; + } + closedir(d); + } + } else { + LOGINFO("Data partition cannot be mounted during app check\n"); + DataManager::SetValue("tw_app_install_status", 2); // 0 = no status, 1 = not installed, 2 = already installed or do not install + } + } else + simulate_progress_bar(); + LOGINFO("App not installed\n"); + DataManager::SetValue("tw_app_install_status", 1); // 0 = no status, 1 = not installed, 2 = already installed +exit: + operation_end(0); + return 0; +} + +int GUIAction::installapp(std::string arg __unused) +{ + int op_status = 1; + operation_start("Install TWRP App"); + if (!simulate) + { + if (DataManager::GetIntValue("tw_mount_system_ro") > 0 || DataManager::GetIntValue("tw_app_install_system") == 0) { + if (PartitionManager.Mount_By_Path("/data", true)) { + string install_path = "/data/app"; + string context = "u:object_r:apk_data_file:s0"; + if (!TWFunc::Path_Exists(install_path)) { + if (mkdir(install_path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { + LOGERR("Error making %s directory: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + if (chown(install_path.c_str(), 1000, 1000)) { + LOGERR("chown %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + if (setfilecon(install_path.c_str(), (security_context_t)context.c_str()) < 0) { + LOGERR("setfilecon %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + } + install_path += "/me.twrp.twrpapp-1"; + if (mkdir(install_path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { + LOGERR("Error making %s directory: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + if (chown(install_path.c_str(), 1000, 1000)) { + LOGERR("chown %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + if (setfilecon(install_path.c_str(), (security_context_t)context.c_str()) < 0) { + LOGERR("setfilecon %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + install_path += "/base.apk"; + if (TWFunc::copy_file("/sbin/me.twrp.twrpapp.apk", install_path, 0644)) { + LOGERR("Error copying apk file\n"); + goto exit; + } + if (chown(install_path.c_str(), 1000, 1000)) { + LOGERR("chown %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + if (setfilecon(install_path.c_str(), (security_context_t)context.c_str()) < 0) { + LOGERR("setfilecon %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + sync(); + sync(); + } + } else { + if (PartitionManager.Mount_By_Path("/system", true)) { + string base_path = "/system"; + if (TWFunc::Path_Exists("/system/system")) + base_path += "/system"; // For devices with system as a root file system (e.g. Pixel) + string install_path = base_path + "/priv-app"; + string context = "u:object_r:system_file:s0"; + if (!TWFunc::Path_Exists(install_path)) + install_path = base_path + "/app"; + if (TWFunc::Path_Exists(install_path)) { + install_path += "/twrpapp"; + LOGINFO("Installing app to '%s'\n", install_path.c_str()); + if (mkdir(install_path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0) { + if (setfilecon(install_path.c_str(), (security_context_t)context.c_str()) < 0) { + LOGERR("setfilecon %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + install_path += "/me.twrp.twrpapp.apk"; + if (TWFunc::copy_file("/sbin/me.twrp.twrpapp.apk", install_path, 0644)) { + LOGERR("Error copying apk file\n"); + goto exit; + } + if (setfilecon(install_path.c_str(), (security_context_t)context.c_str()) < 0) { + LOGERR("setfilecon %s error: %s\n", install_path.c_str(), strerror(errno)); + goto exit; + } + sync(); + sync(); + PartitionManager.UnMount_By_Path("/system", true); + op_status = 0; + } else { + LOGERR("Error making app directory '%s': %s\n", strerror(errno)); + } + } + } + } + } else + simulate_progress_bar(); +exit: + operation_end(0); + return 0; +} diff --git a/gui/animation.cpp b/gui/animation.cpp new file mode 100644 index 000000000..2244503e8 --- /dev/null +++ b/gui/animation.cpp @@ -0,0 +1,147 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// animation.cpp - GUIAnimation object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + + +GUIAnimation::GUIAnimation(xml_node<>* node) : GUIObject(node) +{ + xml_node<>* child; + + mAnimation = NULL; + mFrame = 1; + mFPS = 1; + mLoop = -1; + mRender = 1; + mUpdateCount = 0; + + if (!node) return; + + mAnimation = LoadAttrAnimation(FindNode(node, "resource"), "name"); + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, NULL, NULL, &mPlacement); + + child = FindNode(node, "speed"); + if (child) + { + mFPS = LoadAttrInt(child, "fps", mFPS); + mRender = LoadAttrInt(child, "render", mRender); + } + if (mFPS > 30) mFPS = 30; + + child = FindNode(node, "loop"); + if (child) + { + xml_attribute<>* attr = child->first_attribute("frame"); + if (attr) + mLoop = atoi(attr->value()) - 1; + mFrame = LoadAttrInt(child, "start", mFrame); + } + + // Fetch the render sizes + if (mAnimation && mAnimation->GetResource()) + { + mRenderW = mAnimation->GetWidth(); + mRenderH = mAnimation->GetHeight(); + + // Adjust for placement + if (mPlacement != TOP_LEFT && mPlacement != BOTTOM_LEFT) + { + if (mPlacement == CENTER) + mRenderX -= (mRenderW / 2); + else + mRenderX -= mRenderW; + } + if (mPlacement != TOP_LEFT && mPlacement != TOP_RIGHT) + { + if (mPlacement == CENTER) + mRenderY -= (mRenderH / 2); + else + mRenderY -= mRenderH; + } + SetPlacement(TOP_LEFT); + } +} + +int GUIAnimation::Render(void) +{ + if (!isConditionTrue()) + return 0; + + if (!mAnimation || !mAnimation->GetResource(mFrame)) return -1; + + gr_blit(mAnimation->GetResource(mFrame), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + return 0; +} + +int GUIAnimation::Update(void) +{ + if (!isConditionTrue()) + return 0; + + if (!mAnimation) return -1; + + // Handle the "end-of-animation" state + if (mLoop == -2) return 0; + + // Determine if we need the next frame yet... + if (++mUpdateCount > 30 / mFPS) + { + mUpdateCount = 0; + if (++mFrame >= mAnimation->GetResourceCount()) + { + if (mLoop < 0) + { + mFrame = mAnimation->GetResourceCount() - 1; + mLoop = -2; + } + else + mFrame = mLoop; + } + if (mRender == 2) return 2; + return (Render() == 0 ? 1 : -1); + } + return 0; +} + diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp new file mode 100644 index 000000000..220525387 --- /dev/null +++ b/gui/blanktimer.cpp @@ -0,0 +1,152 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +using namespace std; +#include <string> +#include <pthread.h> +#include <sys/time.h> +#include <time.h> +#include <unistd.h> +#include "pages.hpp" +#include "blanktimer.hpp" +#include "../data.hpp" +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" +#include "../twrp-functions.hpp" +#include "../variables.h" + +blanktimer::blanktimer(void) { + pthread_mutex_init(&mutex, NULL); + setTime(0); // no timeout + state = kOn; + orig_brightness = getBrightness(); +} + +bool blanktimer::isScreenOff() { + return state >= kOff; +} + +void blanktimer::setTime(int newtime) { + pthread_mutex_lock(&mutex); + sleepTimer = newtime; + pthread_mutex_unlock(&mutex); +} + +void blanktimer::setTimer(void) { + clock_gettime(CLOCK_MONOTONIC, &btimer); +} + +void blanktimer::checkForTimeout() { +#ifndef TW_NO_SCREEN_TIMEOUT + pthread_mutex_lock(&mutex); + timespec curTime, diff; + clock_gettime(CLOCK_MONOTONIC, &curTime); + diff = TWFunc::timespec_diff(btimer, curTime); + if (sleepTimer > 2 && diff.tv_sec > (sleepTimer - 2) && state == kOn) { + orig_brightness = getBrightness(); + state = kDim; + TWFunc::Set_Brightness("5"); + } + if (sleepTimer && diff.tv_sec > sleepTimer && state < kOff) { + state = kOff; + TWFunc::Set_Brightness("0"); + TWFunc::check_and_run_script("/sbin/postscreenblank.sh", "blank"); + PageManager::ChangeOverlay("lock"); + } +#ifndef TW_NO_SCREEN_BLANK + if (state == kOff) { + gr_fb_blank(true); + state = kBlanked; + } +#endif + pthread_mutex_unlock(&mutex); +#endif +} + +string blanktimer::getBrightness(void) { + string result; + + if (DataManager::GetIntValue("tw_has_brightnesss_file")) { + DataManager::GetValue("tw_brightness", result); + if (result.empty()) + result = "255"; + } + return result; +} + +void blanktimer::resetTimerAndUnblank(void) { +#ifndef TW_NO_SCREEN_TIMEOUT + pthread_mutex_lock(&mutex); + setTimer(); + switch (state) { + case kBlanked: +#ifndef TW_NO_SCREEN_BLANK + gr_fb_blank(false); +#endif + // TODO: this is asymmetric with postscreenblank.sh - shouldn't it be under the next case label? + TWFunc::check_and_run_script("/sbin/postscreenunblank.sh", "unblank"); + // No break here, we want to keep going + case kOff: + gui_forceRender(); + // No break here, we want to keep going + case kDim: + if (!orig_brightness.empty()) + TWFunc::Set_Brightness(orig_brightness); + state = kOn; + case kOn: + break; + } + pthread_mutex_unlock(&mutex); +#endif +} + +void blanktimer::blank(void) { +/* 1) No need for timer handling since checkForTimeout() verifies + * state of screen before performing screen-off + * 2) Assume screen-off causes issues for devices that set + * TW_NO_SCREEN_TIMEOUT and do not blank screen here either + */ + +#ifndef TW_NO_SCREEN_TIMEOUT + pthread_mutex_lock(&mutex); + if (state == kOn) { + orig_brightness = getBrightness(); + state = kOff; + TWFunc::Set_Brightness("0"); + TWFunc::check_and_run_script("/sbin/postscreenblank.sh", "blank"); + } +#ifndef TW_NO_SCREEN_BLANK + if (state == kOff) { + gr_fb_blank(true); + state = kBlanked; + } +#endif + pthread_mutex_unlock(&mutex); +#endif +} + +void blanktimer::toggleBlank(void) { + if (state == kOn) { + blank(); + PageManager::ChangeOverlay("lock"); + } else { + resetTimerAndUnblank(); + } +} diff --git a/gui/blanktimer.hpp b/gui/blanktimer.hpp new file mode 100644 index 000000000..fe7b77c17 --- /dev/null +++ b/gui/blanktimer.hpp @@ -0,0 +1,60 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __BLANKTIMER_HEADER_HPP +#define __BLANKTIMER_HEADER_HPP + +#include <sys/time.h> + +using namespace std; + +class blanktimer +{ +public: + blanktimer(); + + // set timeout in seconds + void setTime(int newtime); + + // call this in regular intervals + void checkForTimeout(); + + // call this when an input event is received or when an operation is finished + void resetTimerAndUnblank(); + + // call this when power button is pressed + void toggleBlank(void); + + bool isScreenOff(); + +private: + void setTimer(void); + string getBrightness(void); + void blank(void); + + pthread_mutex_t mutex; + enum State { kOn = 0, kDim = 1, kOff = 2, kBlanked = 3 }; + State state; + timespec btimer; + long sleepTimer; + string orig_brightness; +}; + +extern blanktimer blankTimer; + +#endif // __BLANKTIMER_HEADER_HPP diff --git a/gui/button.cpp b/gui/button.cpp new file mode 100644 index 000000000..a9b02a305 --- /dev/null +++ b/gui/button.cpp @@ -0,0 +1,263 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> +#include "../data.hpp" + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIButton::GUIButton(xml_node<>* node) + : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mButtonImg = NULL; + mButtonIcon = NULL; + mButtonLabel = NULL; + mAction = NULL; + mRendered = false; + hasHighlightColor = false; + renderHighlight = false; + hasFill = false; + + if (!node) return; + + // These can be loaded directly from the node + mButtonLabel = new GUIText(node); + mAction = new GUIAction(node); + + mButtonImg = new GUIImage(node); + if (mButtonImg->Render() < 0) + { + delete mButtonImg; + mButtonImg = NULL; + } + if (mButtonLabel->Render() < 0) + { + delete mButtonLabel; + mButtonLabel = NULL; + } + // Load fill if it exists + mFillColor = LoadAttrColor(FindNode(node, "fill"), "color", &hasFill); + if (!hasFill && mButtonImg == NULL) { + LOGERR("No image resource or fill specified for button.\n"); + } + + // The icon is a special case + mButtonIcon = LoadAttrImage(FindNode(node, "icon"), "resource"); + + mHighlightColor = LoadAttrColor(FindNode(node, "highlight"), "color", &hasHighlightColor); + + int x = 0, y = 0, w = 0, h = 0; + TextPlacement = TOP_LEFT; + if (mButtonImg) { + mButtonImg->GetRenderPos(x, y, w, h); + } else if (hasFill) { + LoadPlacement(FindNode(node, "placement"), &x, &y, &w, &h, &TextPlacement); + } + SetRenderPos(x, y, w, h); + if (mButtonLabel) { + TextPlacement = (Placement)LoadAttrInt(FindNode(node, "placement"), "textplacement", TOP_LEFT); + if (TextPlacement != TEXT_ONLY_RIGHT) { + mButtonLabel->scaleWidth = 1; + mButtonLabel->SetMaxWidth(w); + mButtonLabel->SetPlacement(CENTER); + mTextX = ((mRenderW / 2) + mRenderX); + mTextY = mRenderY + (mRenderH / 2); + mButtonLabel->SetRenderPos(mTextX, mTextY); + } else { + mTextX = mRenderW + mRenderX + 5; + mButtonLabel->GetCurrentBounds(mTextW, mTextH); + mRenderW += mTextW + 5; + mTextY = mRenderY + (mRenderH / 2) - (mTextH / 2); + mButtonLabel->SetRenderPos(mTextX, mTextY); + if (mAction) + mAction->SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + } + } +} + +GUIButton::~GUIButton() +{ + delete mButtonImg; + delete mButtonLabel; + delete mAction; +} + +int GUIButton::Render(void) +{ + if (!isConditionTrue()) + { + mRendered = false; + return 0; + } + + int ret = 0; + + if (mButtonImg) ret = mButtonImg->Render(); + if (ret < 0) return ret; + if (hasFill) { + gr_color(mFillColor.red, mFillColor.green, mFillColor.blue, mFillColor.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + } + if (mButtonIcon && mButtonIcon->GetResource()) + gr_blit(mButtonIcon->GetResource(), 0, 0, mIconW, mIconH, mIconX, mIconY); + if (mButtonLabel) { + int w, h; + mButtonLabel->GetCurrentBounds(w, h); + if (w != mTextW) { + mTextW = w; + } + ret = mButtonLabel->Render(); + if (ret < 0) return ret; + } + if (renderHighlight && hasHighlightColor) { + gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + } + mRendered = true; + return ret; +} + +int GUIButton::Update(void) +{ + if (!isConditionTrue()) return (mRendered ? 2 : 0); + if (!mRendered) return 2; + + int ret = 0, ret2 = 0; + + if (mButtonImg) ret = mButtonImg->Update(); + if (ret < 0) return ret; + + if (ret == 0) + { + if (mButtonLabel) { + ret2 = mButtonLabel->Update(); + if (ret2 < 0) return ret2; + if (ret2 > ret) ret = ret2; + } + } + else if (ret == 1) + { + // The button re-rendered, so everyone else is a render + if (mButtonIcon && mButtonIcon->GetResource()) + gr_blit(mButtonIcon->GetResource(), 0, 0, mIconW, mIconH, mIconX, mIconY); + if (mButtonLabel) ret = mButtonLabel->Render(); + if (ret < 0) return ret; + ret = 1; + } + else + { + // Aparently, the button needs a background update + ret = 2; + } + return ret; +} + +int GUIButton::SetRenderPos(int x, int y, int w, int h) +{ + mRenderX = x; + mRenderY = y; + if (w || h) + { + mRenderW = w; + mRenderH = h; + } + + mIconW = mButtonIcon->GetWidth(); + mIconH = mButtonIcon->GetHeight(); + + mTextH = 0; + mTextW = 0; + mIconX = mRenderX + ((mRenderW - mIconW) / 2); + if (mButtonLabel) mButtonLabel->GetCurrentBounds(mTextW, mTextH); + if (mTextW && TextPlacement == TEXT_ONLY_RIGHT) + { + mRenderW += mTextW + 5; + } + + if (mIconH == 0 || mTextH == 0 || mIconH + mTextH > mRenderH) + { + mIconY = mRenderY + (mRenderH / 2) - (mIconH / 2); + } + else + { + int divisor = mRenderH - (mIconH + mTextH); + mIconY = mRenderY + (divisor / 3); + } + + if (mButtonLabel) mButtonLabel->SetRenderPos(mTextX, mTextY); + if (mAction) mAction->SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + return 0; +} + +int GUIButton::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + static int last_state = 0; + + if (!isConditionTrue()) return -1; + if (x < mRenderX || x - mRenderX > mRenderW || y < mRenderY || y - mRenderY > mRenderH || state == TOUCH_RELEASE) { + if (last_state == 1) { + last_state = 0; + if (mButtonLabel != NULL) + mButtonLabel->isHighlighted = false; + if (mButtonImg != NULL) + mButtonImg->isHighlighted = false; + renderHighlight = false; + mRendered = false; + } + } else { + if (last_state == 0) { + last_state = 1; + DataManager::Vibrate("tw_button_vibrate"); + if (mButtonLabel != NULL) + mButtonLabel->isHighlighted = true; + if (mButtonImg != NULL) + mButtonImg->isHighlighted = true; + renderHighlight = true; + mRendered = false; + } + } + if (x < mRenderX || x - mRenderX > mRenderW || y < mRenderY || y - mRenderY > mRenderH) + return 0; + return (mAction ? mAction->NotifyTouch(state, x, y) : 1); +} diff --git a/gui/checkbox.cpp b/gui/checkbox.cpp new file mode 100644 index 000000000..a2958db99 --- /dev/null +++ b/gui/checkbox.cpp @@ -0,0 +1,185 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// checkbox.cpp - GUICheckbox object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUICheckbox::GUICheckbox(xml_node<>* node) + : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mChecked = NULL; + mUnchecked = NULL; + mLabel = NULL; + mRendered = false; + + mLastState = 0; + + if (!node) + return; + + // The label can be loaded directly + mLabel = new GUIText(node); + + // Read the check states + child = FindNode(node, "image"); + if (child) + { + mChecked = LoadAttrImage(child, "checked"); + mUnchecked = LoadAttrImage(child, "unchecked"); + } + + // Get the variable data + child = FindNode(node, "data"); + if (child) + { + attr = child->first_attribute("variable"); + if (attr) + mVarName = attr->value(); + attr = child->first_attribute("default"); + if (attr) + DataManager::SetValue(mVarName, attr->value()); + } + + mCheckW = mChecked->GetWidth(); + mCheckH = mChecked->GetHeight(); + if (mCheckW == 0) + { + mCheckW = mUnchecked->GetWidth(); + mCheckH = mUnchecked->GetHeight(); + } + + int x, y, w, h; + mLabel->GetRenderPos(x, y, w, h); + SetRenderPos(x, y, 0, 0); +} + +GUICheckbox::~GUICheckbox() +{ +} + +int GUICheckbox::Render(void) +{ + if (!isConditionTrue()) + { + mRendered = false; + return 0; + } + + int ret = 0; + int lastState = 0; + DataManager::GetValue(mVarName, lastState); + + if (lastState) + { + if (mChecked && mChecked->GetResource()) + gr_blit(mChecked->GetResource(), 0, 0, mCheckW, mCheckH, mRenderX, mRenderY); + } + else + { + if (mUnchecked && mUnchecked->GetResource()) + gr_blit(mUnchecked->GetResource(), 0, 0, mCheckW, mCheckH, mRenderX, mRenderY); + } + if (mLabel) + ret = mLabel->Render(); + mLastState = lastState; + mRendered = true; + return ret; +} + +int GUICheckbox::Update(void) +{ + if (!isConditionTrue()) return (mRendered ? 2 : 0); + if (!mRendered) return 2; + + int lastState = 0; + DataManager::GetValue(mVarName, lastState); + + if (lastState != mLastState) + return 2; + return 0; +} + +int GUICheckbox::SetRenderPos(int x, int y, int w, int h) +{ + mRenderX = x; + mRenderY = y; + + if (w || h) + return -1; + + int textW, textH; + mLabel->GetCurrentBounds(textW, textH); + + w = textW + mCheckW + 5; + mRenderW = w; + mRenderH = mCheckH; + + mTextX = mRenderX + mCheckW + 5; + mTextY = mRenderY + (mCheckH / 2); + + mLabel->SetRenderPos(mTextX, mTextY, 0, 0); + mLabel->SetPlacement(TEXT_ONLY_RIGHT); + mLabel->SetMaxWidth(gr_fb_width() - mTextX); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + return 0; +} + +int GUICheckbox::NotifyTouch(TOUCH_STATE state, int x __unused, int y __unused) +{ + if (!isConditionTrue()) + return -1; + + if (state == TOUCH_RELEASE) + { + int lastState; + DataManager::GetValue(mVarName, lastState); + lastState = (lastState == 0) ? 1 : 0; + DataManager::SetValue(mVarName, lastState); + + DataManager::Vibrate("tw_button_vibrate"); + } + return 0; +} + diff --git a/gui/console.cpp b/gui/console.cpp new file mode 100644 index 000000000..03628ec30 --- /dev/null +++ b/gui/console.cpp @@ -0,0 +1,413 @@ +/* + Copyright 2015 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// console.cpp - GUIConsole object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <time.h> +#include <unistd.h> +#include <pthread.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "gui.hpp" +#include "twmsg.h" + +#define GUI_CONSOLE_BUFFER_SIZE 512 + +static pthread_mutex_t console_lock; +static size_t last_message_count = 0; +static std::vector<Message> gMessages; + +static std::vector<std::string> gConsole; +static std::vector<std::string> gConsoleColor; +static FILE* ors_file = NULL; + +struct InitMutex +{ + InitMutex() { pthread_mutex_init(&console_lock, NULL); } +} initMutex; + +static void internal_gui_print(const char *color, char *buf) +{ + // make sure to flush any outstanding messages first to preserve order of outputs + GUIConsole::Translate_Now(); + + fputs(buf, stdout); + if (ors_file) { + fprintf(ors_file, "%s", buf); + fflush(ors_file); + } + + char *start, *next; + + if (buf[0] == '\n' && strlen(buf) < 2) { + // This prevents the double lines bug seen in the console during zip installs + return; + } + + pthread_mutex_lock(&console_lock); + for (start = next = buf; *next != '\0';) + { + if (*next == '\n') + { + *next = '\0'; + gConsole.push_back(start); + gConsoleColor.push_back(color); + + start = ++next; + } + else + ++next; + } + + // The text after last \n (or whole string if there is no \n) + if (*start) { + gConsole.push_back(start); + gConsoleColor.push_back(color); + } + pthread_mutex_unlock(&console_lock); +} + +extern "C" void gui_print(const char *fmt, ...) +{ + char buf[GUI_CONSOLE_BUFFER_SIZE]; // We're going to limit a single request to 512 bytes + + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, GUI_CONSOLE_BUFFER_SIZE, fmt, ap); + va_end(ap); + + internal_gui_print("normal", buf); +} + +extern "C" void gui_print_color(const char *color, const char *fmt, ...) +{ + char buf[GUI_CONSOLE_BUFFER_SIZE]; // We're going to limit a single request to 512 bytes + + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, GUI_CONSOLE_BUFFER_SIZE, fmt, ap); + va_end(ap); + + internal_gui_print(color, buf); +} + +extern "C" void gui_set_FILE(FILE* f) +{ + ors_file = f; +} + +void gui_msg(const char* text) +{ + if (text) { + Message msg = Msg(text); + gui_msg(msg); + } +} + +void gui_warn(const char* text) +{ + if (text) { + Message msg = Msg(msg::kWarning, text); + gui_msg(msg); + } +} + +void gui_err(const char* text) +{ + if (text) { + Message msg = Msg(msg::kError, text); + gui_msg(msg); + } +} + +void gui_highlight(const char* text) +{ + if (text) { + Message msg = Msg(msg::kHighlight, text); + gui_msg(msg); + } +} + +void gui_msg(Message msg) +{ + std::string output = msg; + output += "\n"; + fputs(output.c_str(), stdout); + if (ors_file) { + fprintf(ors_file, "%s", output.c_str()); + fflush(ors_file); + } + pthread_mutex_lock(&console_lock); + gMessages.push_back(msg); + pthread_mutex_unlock(&console_lock); +} + +void GUIConsole::Translate_Now() +{ + pthread_mutex_lock(&console_lock); + size_t message_count = gMessages.size(); + if (message_count <= last_message_count) + { + pthread_mutex_unlock(&console_lock); + return; + } + + for (size_t m = last_message_count; m < message_count; m++) { + std::string message = gMessages[m]; + std::string color = "normal"; + if (gMessages[m].GetKind() == msg::kError) + color = "error"; + else if (gMessages[m].GetKind() == msg::kHighlight) + color = "highlight"; + else if (gMessages[m].GetKind() == msg::kWarning) + color = "warning"; + gConsole.push_back(message); + gConsoleColor.push_back(color); + } + last_message_count = message_count; + pthread_mutex_unlock(&console_lock); +} + +void GUIConsole::Clear_For_Retranslation() +{ + pthread_mutex_lock(&console_lock); + last_message_count = 0; + gConsole.clear(); + gConsoleColor.clear(); + pthread_mutex_unlock(&console_lock); +} + +GUIConsole::GUIConsole(xml_node<>* node) : GUIScrollList(node) +{ + xml_node<>* child; + + mLastCount = 0; + scrollToEnd = true; + mSlideoutX = mSlideoutY = mSlideoutW = mSlideoutH = 0; + mSlideout = 0; + mSlideoutState = visible; + + allowSelection = false; // console doesn't support list item selections + + if (!node) + { + mRenderX = 0; + mRenderY = 0; + mRenderW = gr_fb_width(); + mRenderH = gr_fb_height(); + } + else + { + child = FindNode(node, "color"); + if (child) + { + mFontColor = LoadAttrColor(child, "foreground", mFontColor); + mBackgroundColor = LoadAttrColor(child, "background", mBackgroundColor); + //mScrollColor = LoadAttrColor(child, "scroll", mScrollColor); + } + + child = FindNode(node, "slideout"); + if (child) + { + mSlideout = 1; + mSlideoutState = hidden; + LoadPlacement(child, &mSlideoutX, &mSlideoutY, &mSlideoutW, &mSlideoutH, &mPlacement); + + mSlideoutImage = LoadAttrImage(child, "resource"); + + if (mSlideoutImage && mSlideoutImage->GetResource()) + { + mSlideoutW = mSlideoutImage->GetWidth(); + mSlideoutH = mSlideoutImage->GetHeight(); + if (mPlacement == CENTER || mPlacement == CENTER_X_ONLY) { + mSlideoutX = mSlideoutX - (mSlideoutW / 2); + if (mPlacement == CENTER) { + mSlideoutY = mSlideoutY - (mSlideoutH / 2); + } + } + } + } + } +} + +int GUIConsole::RenderSlideout(void) +{ + if (!mSlideoutImage || !mSlideoutImage->GetResource()) + return -1; + + gr_blit(mSlideoutImage->GetResource(), 0, 0, mSlideoutW, mSlideoutH, mSlideoutX, mSlideoutY); + return 0; +} + +int GUIConsole::RenderConsole(void) +{ + Translate_Now(); + pthread_mutex_lock(&console_lock); + AddLines(&gConsole, &gConsoleColor, &mLastCount, &rConsole, &rConsoleColor); + pthread_mutex_unlock(&console_lock); + GUIScrollList::Render(); + + // if last line is fully visible, keep tracking the last line when new lines are added + int bottom_offset = GetDisplayRemainder() - actualItemHeight; + bool isAtBottom = firstDisplayedItem == (int)GetItemCount() - GetDisplayItemCount() - (bottom_offset != 0) && y_offset == bottom_offset; + if (isAtBottom) + scrollToEnd = true; +#if 0 + // debug - show if we are tracking the last line + if (scrollToEnd) { + gr_color(0,255,0,255); + gr_fill(mRenderX+mRenderW-5, mRenderY+mRenderH-5, 5, 5); + } else { + gr_color(255,0,0,255); + gr_fill(mRenderX+mRenderW-5, mRenderY+mRenderH-5, 5, 5); + } +#endif + return (mSlideout ? RenderSlideout() : 0); +} + +int GUIConsole::Render(void) +{ + if (!isConditionTrue()) + return 0; + + if (mSlideout && mSlideoutState == hidden) + return RenderSlideout(); + + return RenderConsole(); +} + +int GUIConsole::Update(void) +{ + if (mSlideout && mSlideoutState != visible) + { + if (mSlideoutState == hidden) + return 0; + + if (mSlideoutState == request_hide) + mSlideoutState = hidden; + + if (mSlideoutState == request_show) + mSlideoutState = visible; + + // Any time we activate the console, we reset the position + SetVisibleListLocation(rConsole.size() - 1); + mUpdate = 1; + scrollToEnd = true; + } + + pthread_mutex_lock(&console_lock); + bool addedNewText = AddLines(&gConsole, &gConsoleColor, &mLastCount, &rConsole, &rConsoleColor); + pthread_mutex_unlock(&console_lock); + if (addedNewText) { + // someone added new text + // at least the scrollbar must be updated, even if the new lines are currently not visible + mUpdate = 1; + } + + if (scrollToEnd) { + // keep the last line in view + SetVisibleListLocation(rConsole.size() - 1); + } + + GUIScrollList::Update(); + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + return 0; +} + +// IsInRegion - Checks if the request is handled by this object +// Return 1 if this object handles the request, 0 if not +int GUIConsole::IsInRegion(int x, int y) +{ + if (mSlideout) { + // Check if they tapped the slideout button + if (x >= mSlideoutX && x < mSlideoutX + mSlideoutW && y >= mSlideoutY && y < mSlideoutY + mSlideoutH) + return 1; + + // If we're only rendering the slideout, bail now + if (mSlideoutState == hidden) + return 0; + } + + return GUIScrollList::IsInRegion(x, y); +} + +// NotifyTouch - Notify of a touch event +// Return 0 on success, >0 to ignore remainder of touch, and <0 on error +int GUIConsole::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + if (mSlideout && x >= mSlideoutX && x < mSlideoutX + mSlideoutW && y >= mSlideoutY && y < mSlideoutY + mSlideoutH) { + if (state == TOUCH_START) { + if (mSlideoutState == hidden) + mSlideoutState = request_show; + else if (mSlideoutState == visible) + mSlideoutState = request_hide; + } + return 1; + } + scrollToEnd = false; + return GUIScrollList::NotifyTouch(state, x, y); +} + +size_t GUIConsole::GetItemCount() +{ + return rConsole.size(); +} + +void GUIConsole::RenderItem(size_t itemindex, int yPos, bool selected __unused) +{ + // Set the color for the font + if (rConsoleColor[itemindex] == "normal") { + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + } else { + COLOR FontColor; + std::string color = rConsoleColor[itemindex]; + ConvertStrToColor(color, &FontColor); + FontColor.alpha = 255; + gr_color(FontColor.red, FontColor.green, FontColor.blue, FontColor.alpha); + } + + // render text + const char* text = rConsole[itemindex].c_str(); + gr_textEx_scaleW(mRenderX, yPos, text, mFont->GetResource(), mRenderW, TOP_LEFT, 0); +} + +void GUIConsole::NotifySelect(size_t item_selected __unused) +{ + // do nothing - console ignores selections +} diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp new file mode 100644 index 000000000..a992b80ea --- /dev/null +++ b/gui/fileselector.cpp @@ -0,0 +1,377 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <string.h> +#include <sys/stat.h> +#include <dirent.h> +#include <algorithm> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" +#include "../twrp-functions.hpp" + +int GUIFileSelector::mSortOrder = 0; + +GUIFileSelector::GUIFileSelector(xml_node<>* node) : GUIScrollList(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mFolderIcon = mFileIcon = NULL; + mShowFolders = mShowFiles = mShowNavFolders = 1; + mUpdate = 0; + mPathVar = "cwd"; + updateFileList = false; + + // Load filter for filtering files (e.g. *.zip for only zips) + child = FindNode(node, "filter"); + if (child) { + attr = child->first_attribute("extn"); + if (attr) + mExtn = attr->value(); + attr = child->first_attribute("folders"); + if (attr) + mShowFolders = atoi(attr->value()); + attr = child->first_attribute("files"); + if (attr) + mShowFiles = atoi(attr->value()); + attr = child->first_attribute("nav"); + if (attr) + mShowNavFolders = atoi(attr->value()); + } + + // Handle the path variable + child = FindNode(node, "path"); + if (child) { + attr = child->first_attribute("name"); + if (attr) + mPathVar = attr->value(); + attr = child->first_attribute("default"); + if (attr) { + mPathDefault = attr->value(); + DataManager::SetValue(mPathVar, attr->value()); + } + } + + // Handle the result variable + child = FindNode(node, "data"); + if (child) { + attr = child->first_attribute("name"); + if (attr) + mVariable = attr->value(); + attr = child->first_attribute("default"); + if (attr) + DataManager::SetValue(mVariable, attr->value()); + } + + // Handle the sort variable + child = FindNode(node, "sort"); + if (child) { + attr = child->first_attribute("name"); + if (attr) + mSortVariable = attr->value(); + attr = child->first_attribute("default"); + if (attr) + DataManager::SetValue(mSortVariable, attr->value()); + + DataManager::GetValue(mSortVariable, mSortOrder); + } + + // Handle the selection variable + child = FindNode(node, "selection"); + if (child && (attr = child->first_attribute("name"))) + mSelection = attr->value(); + else + mSelection = "0"; + + // Get folder and file icons if present + child = FindNode(node, "icon"); + if (child) { + mFolderIcon = LoadAttrImage(child, "folder"); + mFileIcon = LoadAttrImage(child, "file"); + } + int iconWidth = std::max(mFolderIcon->GetWidth(), mFileIcon->GetWidth()); + int iconHeight = std::max(mFolderIcon->GetHeight(), mFileIcon->GetHeight()); + SetMaxIconSize(iconWidth, iconHeight); + + // Fetch the file/folder list + std::string value; + DataManager::GetValue(mPathVar, value); + GetFileList(value); +} + +GUIFileSelector::~GUIFileSelector() +{ +} + +int GUIFileSelector::Update(void) +{ + if (!isConditionTrue()) + return 0; + + GUIScrollList::Update(); + + // Update the file list if needed + if (updateFileList) { + string value; + DataManager::GetValue(mPathVar, value); + if (GetFileList(value) == 0) { + updateFileList = false; + mUpdate = 1; + } else + return 0; + } + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + return 0; +} + +int GUIFileSelector::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIScrollList::NotifyVarChange(varName, value); + + if (!isConditionTrue()) + return 0; + + if (varName.empty()) { + // Always clear the data variable so we know to use it + DataManager::SetValue(mVariable, ""); + } + if (varName == mPathVar || varName == mSortVariable) { + if (varName == mSortVariable) { + DataManager::GetValue(mSortVariable, mSortOrder); + } else { + // Reset the list to the top + SetVisibleListLocation(0); + if (value.empty()) + DataManager::SetValue(mPathVar, mPathDefault); + } + updateFileList = true; + mUpdate = 1; + return 0; + } + return 0; +} + +bool GUIFileSelector::fileSort(FileData d1, FileData d2) +{ + if (d1.fileName == ".") + return -1; + if (d2.fileName == ".") + return 0; + if (d1.fileName == "..") + return -1; + if (d2.fileName == "..") + return 0; + + switch (mSortOrder) { + case 3: // by size largest first + if (d1.fileSize == d2.fileSize || d1.fileType == DT_DIR) // some directories report a different size than others - but this is not the size of the files inside the directory, so we just sort by name on directories + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) < 0); + return d1.fileSize < d2.fileSize; + case -3: // by size smallest first + if (d1.fileSize == d2.fileSize || d1.fileType == DT_DIR) // some directories report a different size than others - but this is not the size of the files inside the directory, so we just sort by name on directories + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); + return d1.fileSize > d2.fileSize; + case 2: // by last modified date newest first + if (d1.lastModified == d2.lastModified) + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) < 0); + return d1.lastModified < d2.lastModified; + case -2: // by date oldest first + if (d1.lastModified == d2.lastModified) + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); + return d1.lastModified > d2.lastModified; + case -1: // by name descending + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) > 0); + default: // should be a 1 - sort by name ascending + return (strcasecmp(d1.fileName.c_str(), d2.fileName.c_str()) < 0); + } + return 0; +} + +int GUIFileSelector::GetFileList(const std::string folder) +{ + DIR* d; + struct dirent* de; + struct stat st; + + // Clear all data + mFolderList.clear(); + mFileList.clear(); + + d = opendir(folder.c_str()); + if (d == NULL) { + LOGINFO("Unable to open '%s'\n", folder.c_str()); + if (folder != "/" && (mShowNavFolders != 0 || mShowFiles != 0)) { + size_t found; + found = folder.find_last_of('/'); + if (found != string::npos) { + string new_folder = folder.substr(0, found); + + if (new_folder.length() < 2) + new_folder = "/"; + DataManager::SetValue(mPathVar, new_folder); + } + } + return -1; + } + + while ((de = readdir(d)) != NULL) { + FileData data; + + data.fileName = de->d_name; + if (data.fileName == ".") + continue; + if (data.fileName == ".." && folder == "/") + continue; + + data.fileType = de->d_type; + + std::string path = folder + "/" + data.fileName; + stat(path.c_str(), &st); + data.protection = st.st_mode; + data.userId = st.st_uid; + data.groupId = st.st_gid; + data.fileSize = st.st_size; + data.lastAccess = st.st_atime; + data.lastModified = st.st_mtime; + data.lastStatChange = st.st_ctime; + + if (data.fileType == DT_UNKNOWN) { + data.fileType = TWFunc::Get_D_Type_From_Stat(path); + } + if (data.fileType == DT_DIR) { + if (mShowNavFolders || (data.fileName != "." && data.fileName != "..")) + mFolderList.push_back(data); + } else if (data.fileType == DT_REG || data.fileType == DT_LNK || data.fileType == DT_BLK) { + if (mExtn.empty() || (data.fileName.length() > mExtn.length() && data.fileName.substr(data.fileName.length() - mExtn.length()) == mExtn)) { + mFileList.push_back(data); + } + } + } + closedir(d); + + std::sort(mFolderList.begin(), mFolderList.end(), fileSort); + std::sort(mFileList.begin(), mFileList.end(), fileSort); + + return 0; +} + +void GUIFileSelector::SetPageFocus(int inFocus) +{ + GUIScrollList::SetPageFocus(inFocus); + if (inFocus) { + std::string value; + DataManager::GetValue(mPathVar, value); + if (value.empty()) + DataManager::SetValue(mPathVar, mPathDefault); + updateFileList = true; + mUpdate = 1; + } +} + +size_t GUIFileSelector::GetItemCount() +{ + size_t folderSize = mShowFolders ? mFolderList.size() : 0; + size_t fileSize = mShowFiles ? mFileList.size() : 0; + return folderSize + fileSize; +} + +void GUIFileSelector::RenderItem(size_t itemindex, int yPos, bool selected) +{ + size_t folderSize = mShowFolders ? mFolderList.size() : 0; + + ImageResource* icon; + std::string text; + + if (itemindex < folderSize) { + text = mFolderList.at(itemindex).fileName; + icon = mFolderIcon; + if (text == "..") + text = gui_lookup("up_a_level", "(Up A Level)"); + } else { + text = mFileList.at(itemindex - folderSize).fileName; + icon = mFileIcon; + } + + RenderStdItem(yPos, selected, icon, text.c_str()); +} + +void GUIFileSelector::NotifySelect(size_t item_selected) +{ + size_t folderSize = mShowFolders ? mFolderList.size() : 0; + size_t fileSize = mShowFiles ? mFileList.size() : 0; + + if (item_selected < folderSize + fileSize) { + // We've selected an item! + std::string str; + if (item_selected < folderSize) { + std::string cwd; + + str = mFolderList.at(item_selected).fileName; + if (mSelection != "0") + DataManager::SetValue(mSelection, str); + DataManager::GetValue(mPathVar, cwd); + + // Ignore requests to do nothing + if (str == ".") return; + if (str == "..") { + if (cwd != "/") { + size_t found; + found = cwd.find_last_of('/'); + cwd = cwd.substr(0,found); + + if (cwd.length() < 2) cwd = "/"; + } + } else { + // Add a slash if we're not the root folder + if (cwd != "/") cwd += "/"; + cwd += str; + } + + if (mShowNavFolders == 0 && mShowFiles == 0) { + // nav folders and files are disabled, this is probably the restore list and we need to save chosen location to mVariable instead of mPathVar + DataManager::SetValue(mVariable, cwd); + } else { + // We are changing paths, so we need to set mPathVar + DataManager::SetValue(mPathVar, cwd); + } + } else if (!mVariable.empty()) { + str = mFileList.at(item_selected - folderSize).fileName; + if (mSelection != "0") + DataManager::SetValue(mSelection, str); + + std::string cwd; + DataManager::GetValue(mPathVar, cwd); + if (cwd != "/") + cwd += "/"; + DataManager::SetValue(mVariable, cwd + str); + } + } + mUpdate = 1; +} diff --git a/gui/fill.cpp b/gui/fill.cpp new file mode 100644 index 000000000..3cfbe6ed4 --- /dev/null +++ b/gui/fill.cpp @@ -0,0 +1,70 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// fill.cpp - GUIFill object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIFill::GUIFill(xml_node<>* node) : GUIObject(node) +{ + bool has_color = false; + mColor = LoadAttrColor(node, "color", &has_color); + if (!has_color) { + LOGERR("No color specified for fill\n"); + return; + } + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH); + + return; +} + +int GUIFill::Render(void) +{ + if (!isConditionTrue()) + return 0; + + gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + return 0; +} + diff --git a/gui/gui.cpp b/gui/gui.cpp new file mode 100644 index 000000000..369b6b897 --- /dev/null +++ b/gui/gui.cpp @@ -0,0 +1,931 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/input.h> +#include <pthread.h> +#include <stdarg.h> +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <sys/mount.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +extern "C" +{ +#include "../twcommon.h" +#include <pixelflinger/pixelflinger.h> +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" +#include "../variables.h" +#include "../partitions.hpp" +#include "../twrp-functions.hpp" +#include "../openrecoveryscript.hpp" +#include "../orscmd/orscmd.h" +#include "blanktimer.hpp" +#include "../tw_atomic.hpp" + +// Enable to print render time of each frame to the log file +//#define PRINT_RENDER_TIME 1 + +#ifdef _EVENT_LOGGING +#define LOGEVENT(...) LOGERR(__VA_ARGS__) +#else +#define LOGEVENT(...) do {} while (0) +#endif + +using namespace rapidxml; + +// Global values +static int gGuiInitialized = 0; +static TWAtomicInt gForceRender; +blanktimer blankTimer; +int ors_read_fd = -1; +static FILE* orsout = NULL; +static float scale_theme_w = 1; +static float scale_theme_h = 1; + +// Needed by pages.cpp too +int gGuiRunning = 0; + +int g_pty_fd = -1; // set by terminal on init +void terminal_pty_read(); + +static int gRecorder = -1; + +extern "C" void gr_write_frame_to_file(int fd); + +static void flip(void) +{ + if (gRecorder != -1) + { + timespec time; + clock_gettime(CLOCK_MONOTONIC, &time); + write(gRecorder, &time, sizeof(timespec)); + gr_write_frame_to_file(gRecorder); + } + gr_flip(); +} + +void rapidxml::parse_error_handler(const char *what, void *where) +{ + fprintf(stderr, "Parser error: %s\n", what); + fprintf(stderr, " Start of string: %s\n",(char *) where); + LOGERR("Error parsing XML file.\n"); + //abort(); +} + +class InputHandler +{ +public: + void init() + { + // these might be read from DataManager in the future + touch_hold_ms = 500; + touch_repeat_ms = 100; + key_hold_ms = 500; + key_repeat_ms = 100; + touch_status = TS_NONE; + key_status = KS_NONE; + state = AS_NO_ACTION; + x = y = 0; + +#ifndef TW_NO_SCREEN_TIMEOUT + { + string seconds; + DataManager::GetValue("tw_screen_timeout_secs", seconds); + blankTimer.setTime(atoi(seconds.c_str())); + blankTimer.resetTimerAndUnblank(); + } +#else + LOGINFO("Skipping screen timeout: TW_NO_SCREEN_TIMEOUT is set\n"); +#endif + } + + // process input events. returns true if any event was received. + bool processInput(int timeout_ms); + + void handleDrag(); + +private: + // timeouts for touch/key hold and repeat + int touch_hold_ms; + int touch_repeat_ms; + int key_hold_ms; + int key_repeat_ms; + + enum touch_status_enum { + TS_NONE = 0, + TS_TOUCH_AND_HOLD = 1, + TS_TOUCH_REPEAT = 2, + }; + + enum key_status_enum { + KS_NONE = 0, + KS_KEY_PRESSED = 1, + KS_KEY_REPEAT = 2, + }; + + enum action_state_enum { + AS_IN_ACTION_AREA = 0, // we've touched a spot with an action + AS_NO_ACTION = 1, // we've touched in an empty area (no action) and ignore remaining events until touch release + }; + touch_status_enum touch_status; + key_status_enum key_status; + action_state_enum state; + int x, y; // x and y coordinates of last touch + struct timeval touchStart; // used to track time for long press / key repeat + + void processHoldAndRepeat(); + void process_EV_REL(input_event& ev); + void process_EV_ABS(input_event& ev); + void process_EV_KEY(input_event& ev); + + void doTouchStart(); +}; + +InputHandler input_handler; + + +bool InputHandler::processInput(int timeout_ms) +{ + input_event ev; + int ret = ev_get(&ev, timeout_ms); + + if (ret < 0) + { + // This path means that we did not get any new touch data, but + // we do not get new touch data if you press and hold on either + // the screen or on a keyboard key or mouse button + if (touch_status || key_status) + processHoldAndRepeat(); + return (ret != -2); // -2 means no more events in the queue + } + + switch (ev.type) + { + case EV_ABS: + process_EV_ABS(ev); + break; + + case EV_REL: + process_EV_REL(ev); + break; + + case EV_KEY: + process_EV_KEY(ev); + break; + } + + if (ev.code != KEY_POWER && ev.code > KEY_RESERVED) + blankTimer.resetTimerAndUnblank(); + + return true; // we got an event, so there might be more in the queue +} + +void InputHandler::processHoldAndRepeat() +{ + HardwareKeyboard *kb = PageManager::GetHardwareKeyboard(); + + // touch and key repeat section + struct timeval curTime; + gettimeofday(&curTime, NULL); + long seconds = curTime.tv_sec - touchStart.tv_sec; + long useconds = curTime.tv_usec - touchStart.tv_usec; + long mtime = ((seconds) * 1000 + useconds / 1000.0) + 0.5; + + if (touch_status == TS_TOUCH_AND_HOLD && mtime > touch_hold_ms) + { + touch_status = TS_TOUCH_REPEAT; + gettimeofday(&touchStart, NULL); + LOGEVENT("TOUCH_HOLD: %d,%d\n", x, y); + PageManager::NotifyTouch(TOUCH_HOLD, x, y); + } + else if (touch_status == TS_TOUCH_REPEAT && mtime > touch_repeat_ms) + { + LOGEVENT("TOUCH_REPEAT: %d,%d\n", x, y); + gettimeofday(&touchStart, NULL); + PageManager::NotifyTouch(TOUCH_REPEAT, x, y); + } + else if (key_status == KS_KEY_PRESSED && mtime > key_hold_ms) + { + LOGEVENT("KEY_HOLD: %d,%d\n", x, y); + gettimeofday(&touchStart, NULL); + key_status = KS_KEY_REPEAT; + kb->KeyRepeat(); + } + else if (key_status == KS_KEY_REPEAT && mtime > key_repeat_ms) + { + LOGEVENT("KEY_REPEAT: %d,%d\n", x, y); + gettimeofday(&touchStart, NULL); + kb->KeyRepeat(); + } +} + +void InputHandler::doTouchStart() +{ + LOGEVENT("TOUCH_START: %d,%d\n", x, y); + if (PageManager::NotifyTouch(TOUCH_START, x, y) > 0) + state = AS_NO_ACTION; + else + state = AS_IN_ACTION_AREA; + touch_status = TS_TOUCH_AND_HOLD; + gettimeofday(&touchStart, NULL); +} + +void InputHandler::process_EV_ABS(input_event& ev) +{ + x = ev.value >> 16; + y = ev.value & 0xFFFF; + + if (ev.code == 0) + { +#ifndef TW_USE_KEY_CODE_TOUCH_SYNC + if (state == AS_IN_ACTION_AREA) + { + LOGEVENT("TOUCH_RELEASE: %d,%d\n", x, y); + PageManager::NotifyTouch(TOUCH_RELEASE, x, y); + } + touch_status = TS_NONE; +#endif + } + else + { + if (!touch_status) + { +#ifndef TW_USE_KEY_CODE_TOUCH_SYNC + doTouchStart(); +#endif + } + else + { + if (state == AS_IN_ACTION_AREA) + { + LOGEVENT("TOUCH_DRAG: %d,%d\n", x, y); + } + } + } +} + +void InputHandler::process_EV_KEY(input_event& ev) +{ + HardwareKeyboard *kb = PageManager::GetHardwareKeyboard(); + + // Handle key-press here + LOGEVENT("TOUCH_KEY: %d\n", ev.code); + // Left mouse button is treated as a touch + if (ev.code == BTN_LEFT) + { + MouseCursor *cursor = PageManager::GetMouseCursor(); + if (ev.value == 1) + { + cursor->GetPos(x, y); + doTouchStart(); + } + else if (touch_status) + { + // Left mouse button was previously pressed and now is + // being released so send a TOUCH_RELEASE + if (state == AS_IN_ACTION_AREA) + { + cursor->GetPos(x, y); + + LOGEVENT("Mouse TOUCH_RELEASE: %d,%d\n", x, y); + PageManager::NotifyTouch(TOUCH_RELEASE, x, y); + } + touch_status = TS_NONE; + } + } + // side mouse button, often used for "back" function + else if (ev.code == BTN_SIDE) + { + if (ev.value == 1) + kb->KeyDown(KEY_BACK); + else + kb->KeyUp(KEY_BACK); + } else if (ev.value != 0) { + // This is a key press +#ifdef TW_USE_KEY_CODE_TOUCH_SYNC + if (ev.code == TW_USE_KEY_CODE_TOUCH_SYNC) { + LOGEVENT("key code %i key press == touch start %i %i\n", TW_USE_KEY_CODE_TOUCH_SYNC, x, y); + doTouchStart(); + return; + } +#endif + if (kb->KeyDown(ev.code)) { + // Key repeat is enabled for this key + key_status = KS_KEY_PRESSED; + touch_status = TS_NONE; + gettimeofday(&touchStart, NULL); + } else { + key_status = KS_NONE; + touch_status = TS_NONE; + } + } else { + // This is a key release + kb->KeyUp(ev.code); + key_status = KS_NONE; + touch_status = TS_NONE; +#ifdef TW_USE_KEY_CODE_TOUCH_SYNC + if (ev.code == TW_USE_KEY_CODE_TOUCH_SYNC) { + LOGEVENT("key code %i key release == touch release %i %i\n", TW_USE_KEY_CODE_TOUCH_SYNC, x, y); + PageManager::NotifyTouch(TOUCH_RELEASE, x, y); + } +#endif + } +} + +void InputHandler::process_EV_REL(input_event& ev) +{ + // Mouse movement + MouseCursor *cursor = PageManager::GetMouseCursor(); + LOGEVENT("EV_REL %d %d\n", ev.code, ev.value); + if (ev.code == REL_X) + cursor->Move(ev.value, 0); + else if (ev.code == REL_Y) + cursor->Move(0, ev.value); + + if (touch_status) { + cursor->GetPos(x, y); + LOGEVENT("Mouse TOUCH_DRAG: %d, %d\n", x, y); + key_status = KS_NONE; + } +} + +void InputHandler::handleDrag() +{ + // This allows us to only send one NotifyTouch event per render + // cycle to reduce overhead and perceived input latency. + static int prevx = 0, prevy = 0; // these track where the last drag notice was so that we don't send duplicate drag notices + if (touch_status && (x != prevx || y != prevy)) { + prevx = x; + prevy = y; + if (PageManager::NotifyTouch(TOUCH_DRAG, x, y) > 0) + state = AS_NO_ACTION; + else + state = AS_IN_ACTION_AREA; + } +} + +static void setup_ors_command() +{ + ors_read_fd = -1; + + unlink(ORS_INPUT_FILE); + if (mkfifo(ORS_INPUT_FILE, 06660) != 0) { + LOGINFO("Unable to mkfifo %s\n", ORS_INPUT_FILE); + return; + } + unlink(ORS_OUTPUT_FILE); + if (mkfifo(ORS_OUTPUT_FILE, 06666) != 0) { + LOGINFO("Unable to mkfifo %s\n", ORS_OUTPUT_FILE); + unlink(ORS_INPUT_FILE); + return; + } + + ors_read_fd = open(ORS_INPUT_FILE, O_RDONLY | O_NONBLOCK); + if (ors_read_fd < 0) { + LOGINFO("Unable to open %s\n", ORS_INPUT_FILE); + unlink(ORS_INPUT_FILE); + unlink(ORS_OUTPUT_FILE); + } +} + +// callback called after a CLI command was executed +static void ors_command_done() +{ + gui_set_FILE(NULL); + fclose(orsout); + orsout = NULL; + + if (DataManager::GetIntValue("tw_page_done") == 0) { + // The select function will return ready to read and the + // read function will return errno 19 no such device unless + // we set everything up all over again. + close(ors_read_fd); + setup_ors_command(); + } +} + +static void ors_command_read() +{ + char command[1024]; + int read_ret = read(ors_read_fd, &command, sizeof(command)); + + if (read_ret > 0) { + command[1022] = '\n'; + command[1023] = '\0'; + LOGINFO("Command '%s' received\n", command); + orsout = fopen(ORS_OUTPUT_FILE, "w"); + if (!orsout) { + close(ors_read_fd); + ors_read_fd = -1; + LOGINFO("Unable to fopen %s\n", ORS_OUTPUT_FILE); + unlink(ORS_INPUT_FILE); + unlink(ORS_OUTPUT_FILE); + return; + } + if (DataManager::GetIntValue("tw_busy") != 0) { + fputs("Failed, operation in progress\n", orsout); + LOGINFO("Command cannot be performed, operation in progress.\n"); + fclose(orsout); + } else { + if (strlen(command) == 11 && strncmp(command, "dumpstrings", 11) == 0) { + gui_set_FILE(orsout); + PageManager::GetResources()->DumpStrings(); + ors_command_done(); + //check to see if we should show backup page for parsing adbbackup partitions + } else if (strlen(command) == 23 && strncmp(command, "adbbackup", 9) == 0) { + gui_set_FILE(orsout); + DataManager::SetValue("tw_action", "twcmd"); + DataManager::SetValue("tw_action_param", command); + DataManager::SetValue("tw_enable_adb_backup", 1); + gui_changePage("backup"); + ors_command_done(); + } else { + // mirror output messages + gui_set_FILE(orsout); + // close orsout and restart listener after command is done + OpenRecoveryScript::Call_After_CLI_Command(ors_command_done); + // run the command in a threaded action... + DataManager::SetValue("tw_action", "twcmd"); + DataManager::SetValue("tw_action_param", command); + // ...and switch back to the current page when finished + std::string currentPage = PageManager::GetCurrentPage(); + DataManager::SetValue("tw_has_action2", "1"); + DataManager::SetValue("tw_action2", "page"); + DataManager::SetValue("tw_action2_param", currentPage); + DataManager::SetValue("tw_action_text1", gui_lookup("running_recovery_commands", "Running Recovery Commands")); + DataManager::SetValue("tw_action_text2", ""); + gui_changePage("singleaction_page"); + // now immediately return to the GUI main loop (the action runs in the background thread) + // put all things that need to be done after the command is finished into ors_command_done, not here + } + } + } +} + +// Get and dispatch input events until it's time to draw the next frame +// This special function will return immediately the first time, but then +// always returns 1/30th of a second (or immediately if called later) from +// the last time it was called +static void loopTimer(int input_timeout_ms) +{ + static timespec lastCall; + static int initialized = 0; + + if (!initialized) + { + clock_gettime(CLOCK_MONOTONIC, &lastCall); + initialized = 1; + return; + } + + do + { + bool got_event = input_handler.processInput(input_timeout_ms); // get inputs but don't send drag notices + timespec curTime; + clock_gettime(CLOCK_MONOTONIC, &curTime); + + timespec diff = TWFunc::timespec_diff(lastCall, curTime); + + // This is really 2 or 30 times per second + // As long as we get events, increase the timeout so we can catch up with input + long timeout = got_event ? 500000000 : 33333333; + + if (diff.tv_sec || diff.tv_nsec > timeout) + { + // int32_t input_time = TWFunc::timespec_diff_ms(lastCall, curTime); + // LOGINFO("loopTimer(): %u ms, count: %u\n", input_time, count); + + lastCall = curTime; + input_handler.handleDrag(); // send only drag notices if needed + return; + } + + // We need to sleep some period time microseconds + //unsigned int sleepTime = 33333 -(diff.tv_nsec / 1000); + //usleep(sleepTime); // removed so we can scan for input + input_timeout_ms = 0; + } while (1); +} + +static int runPages(const char *page_name, const int stop_on_page_done) +{ + DataManager::SetValue("tw_page_done", 0); + DataManager::SetValue("tw_gui_done", 0); + + if (page_name) { + PageManager::SetStartPage(page_name); + gui_changePage(page_name); + } + + gGuiRunning = 1; + + DataManager::SetValue("tw_loaded", 1); + + struct timeval timeout; + fd_set fdset; + int has_data = 0; + + int input_timeout_ms = 0; + int idle_frames = 0; + + for (;;) + { + loopTimer(input_timeout_ms); + if (g_pty_fd > 0) { + // TODO: this is not nice, we should have one central select for input, pty, and ors + FD_ZERO(&fdset); + FD_SET(g_pty_fd, &fdset); + timeout.tv_sec = 0; + timeout.tv_usec = 1; + has_data = select(g_pty_fd+1, &fdset, NULL, NULL, &timeout); + if (has_data > 0) { + terminal_pty_read(); + } + } +#ifndef TW_OEM_BUILD + if (ors_read_fd > 0 && !orsout) { // orsout is non-NULL if a command is still running + FD_ZERO(&fdset); + FD_SET(ors_read_fd, &fdset); + timeout.tv_sec = 0; + timeout.tv_usec = 1; + has_data = select(ors_read_fd+1, &fdset, NULL, NULL, &timeout); + if (has_data > 0) { + ors_command_read(); + } + } +#endif + + if (!gForceRender.get_value()) + { + int ret = PageManager::Update(); + if (ret == 0) + ++idle_frames; + else if (ret == -2) + break; // Theme reload failure + else + idle_frames = 0; + // due to possible animation objects, we need to delay activating the input timeout + input_timeout_ms = idle_frames > 15 ? 1000 : 0; + +#ifndef PRINT_RENDER_TIME + if (ret > 1) + PageManager::Render(); + + if (ret > 0) + flip(); +#else + if (ret > 1) + { + timespec start, end; + int32_t render_t, flip_t; + clock_gettime(CLOCK_MONOTONIC, &start); + PageManager::Render(); + clock_gettime(CLOCK_MONOTONIC, &end); + render_t = TWFunc::timespec_diff_ms(start, end); + + flip(); + clock_gettime(CLOCK_MONOTONIC, &start); + flip_t = TWFunc::timespec_diff_ms(end, start); + + LOGINFO("Render(): %u ms, flip(): %u ms, total: %u ms\n", render_t, flip_t, render_t+flip_t); + } + else if (ret > 0) + flip(); +#endif + } + else + { + gForceRender.set_value(0); + PageManager::Render(); + flip(); + input_timeout_ms = 0; + } + + blankTimer.checkForTimeout(); + if (stop_on_page_done && DataManager::GetIntValue("tw_page_done") != 0) + { + gui_changePage("main"); + break; + } + if (DataManager::GetIntValue("tw_gui_done") != 0) + break; + } + if (ors_read_fd > 0) + close(ors_read_fd); + ors_read_fd = -1; + gGuiRunning = 0; + return 0; +} + +int gui_forceRender(void) +{ + gForceRender.set_value(1); + return 0; +} + +int gui_changePage(std::string newPage) +{ + LOGINFO("Set page: '%s'\n", newPage.c_str()); + PageManager::ChangePage(newPage); + gForceRender.set_value(1); + return 0; +} + +int gui_changeOverlay(std::string overlay) +{ + LOGINFO("Set overlay: '%s'\n", overlay.c_str()); + PageManager::ChangeOverlay(overlay); + gForceRender.set_value(1); + return 0; +} + +std::string gui_parse_text(std::string str) +{ + // This function parses text for DataManager values encompassed by %value% in the XML + // and string resources (%@resource_name%) + size_t pos = 0, next, end; + + while (1) + { + next = str.find("{@", pos); + if (next == std::string::npos) + break; + + end = str.find('}', next + 1); + if (end == std::string::npos) + break; + + std::string var = str.substr(next + 2, (end - next) - 2); + str.erase(next, (end - next) + 1); + + size_t default_loc = var.find('=', 0); + std::string lookup; + if (default_loc == std::string::npos) { + str.insert(next, PageManager::GetResources()->FindString(var)); + } else { + lookup = var.substr(0, default_loc); + std::string default_string = var.substr(default_loc + 1, var.size() - default_loc - 1); + str.insert(next, PageManager::GetResources()->FindString(lookup, default_string)); + } + } + pos = 0; + while (1) + { + next = str.find('%', pos); + if (next == std::string::npos) + return str; + + end = str.find('%', next + 1); + if (end == std::string::npos) + return str; + + // We have a block of data + std::string var = str.substr(next + 1, (end - next) - 1); + str.erase(next, (end - next) + 1); + + if (next + 1 == end) + str.insert(next, 1, '%'); + else + { + std::string value; + if (var.size() > 0 && var[0] == '@') { + // this is a string resource ("%@string_name%") + value = PageManager::GetResources()->FindString(var.substr(1)); + str.insert(next, value); + } + else if (DataManager::GetValue(var, value) == 0) + str.insert(next, value); + } + + pos = next + 1; + } +} + +std::string gui_lookup(const std::string& resource_name, const std::string& default_value) { + return PageManager::GetResources()->FindString(resource_name, default_value); +} + +extern "C" int gui_init(void) +{ + gr_init(); + TWFunc::Set_Brightness(DataManager::GetStrValue("tw_brightness")); + + // load and show splash screen + if (PageManager::LoadPackage("splash", TWRES "splash.xml", "splash")) { + LOGERR("Failed to load splash screen XML.\n"); + } + else { + PageManager::SelectPackage("splash"); + PageManager::Render(); + flip(); + PageManager::ReleasePackage("splash"); + } + + ev_init(); + return 0; +} + +extern "C" int gui_loadResources(void) +{ +#ifndef TW_OEM_BUILD + int check = 0; + DataManager::GetValue(TW_IS_ENCRYPTED, check); + + if (check) + { + if (PageManager::LoadPackage("TWRP", TWRES "ui.xml", "decrypt")) + { + gui_err("base_pkg_err=Failed to load base packages."); + goto error; + } + else + check = 1; + } + + if (check == 0) + { + std::string theme_path; + + theme_path = DataManager::GetSettingsStoragePath(); + if (!PartitionManager.Mount_Settings_Storage(false)) + { + int retry_count = 5; + while (retry_count > 0 && !PartitionManager.Mount_Settings_Storage(false)) + { + usleep(500000); + retry_count--; + } + + if (!PartitionManager.Mount_Settings_Storage(true)) + { + LOGINFO("Unable to mount %s during GUI startup.\n", theme_path.c_str()); + check = 1; + } + } + + theme_path += "/TWRP/theme/ui.zip"; + if (check || PageManager::LoadPackage("TWRP", theme_path, "main")) + { +#endif // ifndef TW_OEM_BUILD + if (PageManager::LoadPackage("TWRP", TWRES "ui.xml", "main")) + { + gui_err("base_pkg_err=Failed to load base packages."); + goto error; + } +#ifndef TW_OEM_BUILD + } + } +#endif // ifndef TW_OEM_BUILD + // Set the default package + PageManager::SelectPackage("TWRP"); + + gGuiInitialized = 1; + return 0; + +error: + LOGERR("An internal error has occurred: unable to load theme.\n"); + gGuiInitialized = 0; + return -1; +} + +extern "C" int gui_loadCustomResources(void) +{ +#ifndef TW_OEM_BUILD + if (!PartitionManager.Mount_Settings_Storage(false)) { + LOGINFO("Unable to mount settings storage during GUI startup.\n"); + return -1; + } + + std::string theme_path = DataManager::GetSettingsStoragePath(); + theme_path += "/TWRP/theme/ui.zip"; + // Check for a custom theme + if (TWFunc::Path_Exists(theme_path)) { + // There is a custom theme, try to load it + if (PageManager::ReloadPackage("TWRP", theme_path)) { + // Custom theme failed to load, try to load stock theme + if (PageManager::ReloadPackage("TWRP", TWRES "ui.xml")) { + gui_err("base_pkg_err=Failed to load base packages."); + goto error; + } + } + } + // Set the default package + PageManager::SelectPackage("TWRP"); +#endif + return 0; + +error: + LOGERR("An internal error has occurred: unable to load theme.\n"); + gGuiInitialized = 0; + return -1; +} + +extern "C" int gui_start(void) +{ + return gui_startPage("main", 1, 0); +} + +extern "C" int gui_startPage(const char *page_name, const int allow_commands, int stop_on_page_done) +{ + if (!gGuiInitialized) + return -1; + + // Set the default package + PageManager::SelectPackage("TWRP"); + + input_handler.init(); +#ifndef TW_OEM_BUILD + if (allow_commands) + { + if (ors_read_fd < 0) + setup_ors_command(); + } else { + if (ors_read_fd >= 0) { + close(ors_read_fd); + ors_read_fd = -1; + } + } +#endif + return runPages(page_name, stop_on_page_done); +} + + +extern "C" void set_scale_values(float w, float h) +{ + scale_theme_w = w; + scale_theme_h = h; +} + +extern "C" int scale_theme_x(int initial_x) +{ + if (scale_theme_w != 1) { + int scaled = (float)initial_x * scale_theme_w; + if (scaled == 0 && initial_x > 0) + return 1; + return scaled; + } + return initial_x; +} + +extern "C" int scale_theme_y(int initial_y) +{ + if (scale_theme_h != 1) { + int scaled = (float)initial_y * scale_theme_h; + if (scaled == 0 && initial_y > 0) + return 1; + return scaled; + } + return initial_y; +} + +extern "C" int scale_theme_min(int initial_value) +{ + if (scale_theme_w != 1 || scale_theme_h != 1) { + if (scale_theme_w < scale_theme_h) + return scale_theme_x(initial_value); + else + return scale_theme_y(initial_value); + } + return initial_value; +} + +extern "C" float get_scale_w() +{ + return scale_theme_w; +} + +extern "C" float get_scale_h() +{ + return scale_theme_h; +} diff --git a/gui/gui.h b/gui/gui.h new file mode 100644 index 000000000..034f1cd92 --- /dev/null +++ b/gui/gui.h @@ -0,0 +1,41 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _GUI_HEADER +#define _GUI_HEADER + +#include <stdio.h> + +int gui_init(); +int gui_loadResources(); +int gui_loadCustomResources(); +int gui_start(); +int gui_startPage(const char* page_name, const int allow_comands, int stop_on_page_done); +void gui_print(const char *fmt, ...); +void gui_print_color(const char *color, const char *fmt, ...); +void gui_set_FILE(FILE* f); + +void set_scale_values(float w, float h); +int scale_theme_x(int initial_x); +int scale_theme_y(int initial_y); +int scale_theme_min(int initial_value); +float get_scale_w(); +float get_scale_h(); + +#endif // _GUI_HEADER + diff --git a/gui/gui.hpp b/gui/gui.hpp new file mode 100644 index 000000000..afcd9b0a9 --- /dev/null +++ b/gui/gui.hpp @@ -0,0 +1,33 @@ +/* + Copyright 2015 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _GUI_HPP_HEADER +#define _GUI_HPP_HEADER + +#include "twmsg.h" + +void gui_msg(const char* text); +void gui_warn(const char* text); +void gui_err(const char* text); +void gui_highlight(const char* text); +void gui_msg(Message msg); + +std::string gui_parse_text(std::string inText); +std::string gui_lookup(const std::string& resource_name, const std::string& default_value); + +#endif //_GUI_HPP_HEADER diff --git a/gui/hardwarekeyboard.cpp b/gui/hardwarekeyboard.cpp new file mode 100644 index 000000000..68be9065d --- /dev/null +++ b/gui/hardwarekeyboard.cpp @@ -0,0 +1,441 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// hardwarekeyboard.cpp - HardwareKeyboard object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../common.h" +} + +#include "../twcommon.h" +#include "objects.hpp" +#include <linux/input.h> + +HardwareKeyboard::HardwareKeyboard() + : mLastKeyChar(0) +{ +} + +HardwareKeyboard::~HardwareKeyboard() +{ +} + +// Map keys to other keys. +static int TranslateKeyCode(int key_code) +{ + switch (key_code) { + case KEY_SLEEP: // Lock key on Asus Transformer hardware keyboard + return KEY_POWER; + } + return key_code; +} + +static int KeyCodeToChar(int key_code, bool shiftkey, bool ctrlkey) +{ + int keyboard = -1; + + switch (key_code) { + case KEY_A: + if (shiftkey) + keyboard = 'A'; + else + keyboard = 'a'; + break; + case KEY_B: + if (shiftkey) + keyboard = 'B'; + else + keyboard = 'b'; + break; + case KEY_C: + if (shiftkey) + keyboard = 'C'; + else + keyboard = 'c'; + break; + case KEY_D: + if (shiftkey) + keyboard = 'D'; + else + keyboard = 'd'; + break; + case KEY_E: + if (shiftkey) + keyboard = 'E'; + else + keyboard = 'e'; + break; + case KEY_F: + if (shiftkey) + keyboard = 'F'; + else + keyboard = 'f'; + break; + case KEY_G: + if (shiftkey) + keyboard = 'G'; + else + keyboard = 'g'; + break; + case KEY_H: + if (shiftkey) + keyboard = 'H'; + else + keyboard = 'h'; + break; + case KEY_I: + if (shiftkey) + keyboard = 'I'; + else + keyboard = 'i'; + break; + case KEY_J: + if (shiftkey) + keyboard = 'J'; + else + keyboard = 'j'; + break; + case KEY_K: + if (shiftkey) + keyboard = 'K'; + else + keyboard = 'k'; + break; + case KEY_L: + if (shiftkey) + keyboard = 'L'; + else + keyboard = 'l'; + break; + case KEY_M: + if (shiftkey) + keyboard = 'M'; + else + keyboard = 'm'; + break; + case KEY_N: + if (shiftkey) + keyboard = 'N'; + else + keyboard = 'n'; + break; + case KEY_O: + if (shiftkey) + keyboard = 'O'; + else + keyboard = 'o'; + break; + case KEY_P: + if (shiftkey) + keyboard = 'P'; + else + keyboard = 'p'; + break; + case KEY_Q: + if (shiftkey) + keyboard = 'Q'; + else + keyboard = 'q'; + break; + case KEY_R: + if (shiftkey) + keyboard = 'R'; + else + keyboard = 'r'; + break; + case KEY_S: + if (shiftkey) + keyboard = 'S'; + else + keyboard = 's'; + break; + case KEY_T: + if (shiftkey) + keyboard = 'T'; + else + keyboard = 't'; + break; + case KEY_U: + if (shiftkey) + keyboard = 'U'; + else + keyboard = 'u'; + break; + case KEY_V: + if (shiftkey) + keyboard = 'V'; + else + keyboard = 'v'; + break; + case KEY_W: + if (shiftkey) + keyboard = 'W'; + else + keyboard = 'w'; + break; + case KEY_X: + if (shiftkey) + keyboard = 'X'; + else + keyboard = 'x'; + break; + case KEY_Y: + if (shiftkey) + keyboard = 'Y'; + else + keyboard = 'y'; + break; + case KEY_Z: + if (shiftkey) + keyboard = 'Z'; + else + keyboard = 'z'; + break; + case KEY_0: + if (shiftkey) + keyboard = ')'; + else + keyboard = '0'; + break; + case KEY_1: + if (shiftkey) + keyboard = '!'; + else + keyboard = '1'; + break; + case KEY_2: + if (shiftkey) + keyboard = '@'; + else + keyboard = '2'; + break; + case KEY_3: + if (shiftkey) + keyboard = '#'; + else + keyboard = '3'; + break; + case KEY_4: + if (shiftkey) + keyboard = '$'; + else + keyboard = '4'; + break; + case KEY_5: + if (shiftkey) + keyboard = '%'; + else + keyboard = '5'; + break; + case KEY_6: + if (shiftkey) + keyboard = '^'; + else + keyboard = '6'; + break; + case KEY_7: + if (shiftkey) + keyboard = '&'; + else + keyboard = '7'; + break; + case KEY_8: + if (shiftkey) + keyboard = '*'; + else + keyboard = '8'; + break; + case KEY_9: + if (shiftkey) + keyboard = '('; + else + keyboard = '9'; + break; + case KEY_SPACE: + keyboard = ' '; + break; + case KEY_BACKSPACE: + keyboard = KEYBOARD_BACKSPACE; + break; + case KEY_TAB: + keyboard = KEYBOARD_TAB; + break; + case KEY_ENTER: + keyboard = KEYBOARD_ACTION; + break; + case KEY_SLASH: + if (shiftkey) + keyboard = '?'; + else + keyboard = '/'; + break; + case KEY_DOT: + if (shiftkey) + keyboard = '>'; + else + keyboard = '.'; + break; + case KEY_COMMA: + if (shiftkey) + keyboard = '<'; + else + keyboard = ','; + break; + case KEY_MINUS: + if (shiftkey) + keyboard = '_'; + else + keyboard = '-'; + break; + case KEY_GRAVE: + if (shiftkey) + keyboard = '~'; + else + keyboard = '`'; + break; + case KEY_EQUAL: + if (shiftkey) + keyboard = '+'; + else + keyboard = '='; + break; + case KEY_LEFTBRACE: + if (shiftkey) + keyboard = '{'; + else + keyboard = '['; + break; + case KEY_RIGHTBRACE: + if (shiftkey) + keyboard = '}'; + else + keyboard = ']'; + break; + case KEY_BACKSLASH: + if (shiftkey) + keyboard = '|'; + else + keyboard = '\\'; + break; + case KEY_SEMICOLON: + if (shiftkey) + keyboard = ':'; + else + keyboard = ';'; + break; + case KEY_APOSTROPHE: + if (shiftkey) + keyboard = '\"'; + else + keyboard = '\''; + break; + +#ifdef _EVENT_LOGGING + default: + LOGERR("Unmapped keycode: %i\n", key_code); + break; +#endif + } + if (ctrlkey) + { + if (keyboard >= 96) + keyboard -= 96; + else + keyboard = -1; + } + return keyboard; +} + +bool HardwareKeyboard::IsKeyDown(int key_code) +{ + std::set<int>::iterator it = mPressedKeys.find(key_code); + return (it != mPressedKeys.end()); +} + +int HardwareKeyboard::KeyDown(int key_code) +{ +#ifdef _EVENT_LOGGING + LOGERR("HardwareKeyboard::KeyDown %i\n", key_code); +#endif + key_code = TranslateKeyCode(key_code); + mPressedKeys.insert(key_code); + + bool ctrlkey = IsKeyDown(KEY_LEFTCTRL) || IsKeyDown(KEY_RIGHTCTRL); + bool shiftkey = IsKeyDown(KEY_LEFTSHIFT) || IsKeyDown(KEY_RIGHTSHIFT); + + int ch = KeyCodeToChar(key_code, shiftkey, ctrlkey); + + if (ch != -1) { + mLastKeyChar = ch; + if (!PageManager::NotifyCharInput(ch)) + return 1; // Return 1 to enable key repeat + } else { + mLastKeyChar = 0; + mLastKey = key_code; + if (!PageManager::NotifyKey(key_code, true)) + return 1; // Return 1 to enable key repeat + } + return 0; +} + +int HardwareKeyboard::KeyUp(int key_code) +{ +#ifdef _EVENT_LOGGING + LOGERR("HardwareKeyboard::KeyUp %i\n", key_code); +#endif + key_code = TranslateKeyCode(key_code); + std::set<int>::iterator itr = mPressedKeys.find(key_code); + if (itr != mPressedKeys.end()) { + mPressedKeys.erase(itr); + PageManager::NotifyKey(key_code, false); + } + return 0; +} + +int HardwareKeyboard::KeyRepeat() +{ +#ifdef _EVENT_LOGGING + LOGERR("HardwareKeyboard::KeyRepeat: %i\n", mLastKeyChar); +#endif + if (mLastKeyChar) + PageManager::NotifyCharInput(mLastKeyChar); + else if (mLastKey) + PageManager::NotifyKey(mLastKey, true); + return 0; +} + +void HardwareKeyboard::ConsumeKeyRelease(int key) +{ + // causes following KeyUp event to suppress notifications + mPressedKeys.erase(key); +} diff --git a/gui/image.cpp b/gui/image.cpp new file mode 100644 index 000000000..2b5c54197 --- /dev/null +++ b/gui/image.cpp @@ -0,0 +1,110 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// image.cpp - GUIImage object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIImage::GUIImage(xml_node<>* node) : GUIObject(node) +{ + mImage = NULL; + mHighlightImage = NULL; + isHighlighted = false; + + if (!node) + return; + + mImage = LoadAttrImage(FindNode(node, "image"), "resource"); + mHighlightImage = LoadAttrImage(FindNode(node, "image"), "highlightresource"); + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, NULL, NULL, &mPlacement); + + if (mImage && mImage->GetResource()) + { + mRenderW = mImage->GetWidth(); + mRenderH = mImage->GetHeight(); + + // Adjust for placement + if (mPlacement != TOP_LEFT && mPlacement != BOTTOM_LEFT) + { + if (mPlacement == CENTER) + mRenderX -= (mRenderW / 2); + else + mRenderX -= mRenderW; + } + if (mPlacement != TOP_LEFT && mPlacement != TOP_RIGHT) + { + if (mPlacement == CENTER) + mRenderY -= (mRenderH / 2); + else + mRenderY -= mRenderH; + } + SetPlacement(TOP_LEFT); + } +} + +int GUIImage::Render(void) +{ + if (!isConditionTrue()) + return 0; + + if (isHighlighted && mHighlightImage && mHighlightImage->GetResource()) { + gr_blit(mHighlightImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + return 0; + } + else if (!mImage || !mImage->GetResource()) + return -1; + + gr_blit(mImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + return 0; +} + +int GUIImage::SetRenderPos(int x, int y, int w, int h) +{ + if (w || h) + return -1; + + mRenderX = x; + mRenderY = y; + return 0; +} + diff --git a/gui/input.cpp b/gui/input.cpp new file mode 100644 index 000000000..8dd981c24 --- /dev/null +++ b/gui/input.cpp @@ -0,0 +1,574 @@ +/* + Copyright 2012 to 2016 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// input.cpp - GUIInput object + +#include <linux/input.h> +#include <pthread.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" + +#define TW_INPUT_NO_UPDATE -1000 // Magic value for HandleTextLocation when no change in scrolling has occurred + +GUIInput::GUIInput(xml_node<>* node) + : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mInputText = NULL; + mAction = NULL; + mBackground = NULL; + mCursor = NULL; + mFont = NULL; + mRendered = false; + HasMask = false; + DrawCursor = false; + isLocalChange = true; + HasAllowed = false; + HasDisabled = false; + cursorX = textWidth = scrollingX = mFontHeight = mFontY = lastX = 0; + mBackgroundX = mBackgroundY = mBackgroundW = mBackgroundH = MinLen = MaxLen = 0; + mCursorLocation = -1; // -1 is always the end of the string + CursorWidth = 3; + ConvertStrToColor("black", &mBackgroundColor); + ConvertStrToColor("white", &mCursorColor); + mValue = ""; + displayValue = ""; + + if (!node) + return; + + // Load text directly from the node + mInputText = new GUIText(node); + // Load action directly from the node + mAction = new GUIAction(node); + + if (mInputText->Render() < 0) + { + delete mInputText; + mInputText = NULL; + } + + // Load the background + child = FindNode(node, "background"); + if (child) + { + mBackground = LoadAttrImage(child, "resource"); + mBackgroundColor = LoadAttrColor(child, "color", mBackgroundColor); + } + if (mBackground && mBackground->GetResource()) + { + mBackgroundW = mBackground->GetWidth(); + mBackgroundH = mBackground->GetHeight(); + } + + // Load the cursor color + child = FindNode(node, "cursor"); + if (child) + { + mCursor = LoadAttrImage(child, "resource"); + mCursorColor = LoadAttrColor(child, "color", mCursorColor); + attr = child->first_attribute("hasfocus"); + if (attr) + { + std::string focus = attr->value(); + SetInputFocus(atoi(focus.c_str())); + } + CursorWidth = LoadAttrIntScaleX(child, "width", CursorWidth); + } + DrawCursor = HasInputFocus; + + // Load the font + child = FindNode(node, "font"); + if (child) + { + mFont = LoadAttrFont(child, "resource"); + mFontHeight = mFont->GetHeight(); + } + + child = FindNode(node, "data"); + if (child) + { + attr = child->first_attribute("name"); + if (attr) + mVariable = attr->value(); + attr = child->first_attribute("default"); + if (attr) + DataManager::SetValue(mVariable, attr->value()); + mMask = LoadAttrString(child, "mask"); + HasMask = !mMask.empty(); + } + + // Load input restrictions + child = FindNode(node, "restrict"); + if (child) + { + MinLen = LoadAttrInt(child, "minlen", MinLen); + MaxLen = LoadAttrInt(child, "maxlen", MaxLen); + AllowedList = LoadAttrString(child, "allow"); + HasAllowed = !AllowedList.empty(); + DisabledList = LoadAttrString(child, "disable"); + HasDisabled = !DisabledList.empty(); + } + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + + if (mInputText && mFontHeight && mFontHeight < (unsigned)mRenderH) { + mFontY = ((mRenderH - mFontHeight) / 2) + mRenderY; + mInputText->SetRenderPos(mRenderX, mFontY); + } else + mFontY = mRenderY; + + if (mInputText) + mInputText->SetMaxWidth(0); +} + +GUIInput::~GUIInput() +{ + delete mInputText; + delete mAction; +} + +void GUIInput::HandleTextLocation(int x) { + mRendered = false; + if (textWidth <= mRenderW) { + if (x != TW_INPUT_NO_UPDATE) + lastX = x; + scrollingX = 0; + return; + } + if (scrollingX + textWidth < mRenderW) { + scrollingX = mRenderW - textWidth; + } + + if (x == TW_INPUT_NO_UPDATE) + return; + + scrollingX += x - lastX; + if (scrollingX > 0) + scrollingX = 0; + else if (scrollingX + textWidth < mRenderW) + scrollingX = mRenderW - textWidth; + lastX = x; +} + +void GUIInput::UpdateDisplayText() { + void* fontResource = NULL; + + if (mFont) { + fontResource = mFont->GetResource(); + } else { + textWidth = 0; + return; + } + + DataManager::GetValue(mVariable, mValue); + if (HasMask) { + int index, string_size = mValue.size(); + string maskedValue; + for (index=0; index<string_size; index++) + maskedValue += mMask; + displayValue = maskedValue; + } else { + displayValue = mValue; + } + + textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource); +} + +void GUIInput::HandleCursorByTouch(int x) { +// Uses x to find mCursorLocation and cursorX + if (displayValue.size() == 0) { + mCursorLocation = -1; + cursorX = mRenderX; + return; + } + + void* fontResource = NULL; + if (mFont) { + fontResource = mFont->GetResource(); + } else { + return; + } + + string cursorString; + unsigned index = 0, displaySize = displayValue.size(); + int prevX = mRenderX + scrollingX; + + for (index = 0; index <= displaySize; index++) { + cursorString = displayValue.substr(0, index); + cursorX = gr_ttf_measureEx(cursorString.c_str(), fontResource) + mRenderX + scrollingX; + if (cursorX > x) { + if (index > 0 && x <= cursorX - ((x - prevX) / 2) && prevX >= mRenderX) { + // This helps make sure that we can place the cursor before the very first char if the first char is + // is fully visible while also still letting us place the cursor after the last char if fully visible + mCursorLocation = index - 1; + cursorX = prevX; + return; + } + mCursorLocation = index; + if (cursorX > mRenderX + mRenderW) { + cursorX = prevX; // This makes sure that the cursor doesn't get placed after the end of the input box + mCursorLocation--; + return; + } + if (cursorX >= mRenderX) { + return; // This makes sure that the cursor doesn't get placed before the beginning of the input box + } + } + prevX = cursorX; + } + mCursorLocation = -1; // x is at or past the end of the string +} + +void GUIInput::HandleCursorByText() { +// Uses mCursorLocation to find cursorX + if (!DrawCursor) + return; + + void* fontResource = NULL; + if (mFont) { + fontResource = mFont->GetResource(); + } else { + return; + } + + int cursorTextWidth = textWidth; // width of text to the left of the cursor + + if (mCursorLocation != -1) { + string cursorDisplay = displayValue; + cursorDisplay.resize(mCursorLocation); + cursorTextWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource); + } + cursorX = mRenderX + cursorTextWidth + scrollingX; + if (cursorX >= mRenderX + mRenderW) { + scrollingX = mRenderW - cursorTextWidth; + cursorX = mRenderX + mRenderW - CursorWidth; + } else if (cursorX < mRenderX) { + scrollingX = cursorTextWidth * -1; + cursorX = mRenderX; + } +} + +int GUIInput::Render(void) +{ + if (!isConditionTrue()) + { + mRendered = false; + return 0; + } + + void* fontResource = NULL; + if (mFont) fontResource = mFont->GetResource(); + + // First step, fill background + gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, 255); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + + // Next, render the background resource (if it exists) + if (mBackground && mBackground->GetResource()) + { + mBackgroundX = mRenderX + ((mRenderW - mBackgroundW) / 2); + mBackgroundY = mRenderY + ((mRenderH - mBackgroundH) / 2); + gr_blit(mBackground->GetResource(), 0, 0, mBackgroundW, mBackgroundH, mBackgroundX, mBackgroundY); + } + + int ret = 0; + + // Render the text + if (mInputText) { + mInputText->SetRenderPos(mRenderX + scrollingX, mFontY); + mInputText->SetText(displayValue); + gr_clip(mRenderX, mRenderY, mRenderW, mRenderH); + ret = mInputText->Render(); + gr_noclip(); + } + if (ret < 0) + return ret; + + if (HasInputFocus && DrawCursor) { + // Render the cursor + gr_color(mCursorColor.red, mCursorColor.green, mCursorColor.blue, 255); + gr_fill(cursorX, mFontY, CursorWidth, mFontHeight); + } + + mRendered = true; + return ret; +} + +int GUIInput::Update(void) +{ + if (!isConditionTrue()) return (mRendered ? 2 : 0); + if (!mRendered) return 2; + + int ret = 0; + + if (mInputText) ret = mInputText->Update(); + if (ret < 0) return ret; + + return ret; +} + +int GUIInput::GetSelection(int x, int y) +{ + if (x < mRenderX || x - mRenderX > mRenderW || y < mRenderY || y - mRenderY > mRenderH) return -1; + return (x - mRenderX); +} + +int GUIInput::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + static int startSelection = -1; + void* fontResource = NULL; + + if (mFont) fontResource = mFont->GetResource(); + + if (!isConditionTrue()) + return -1; + + if (!HasInputFocus) { + if (state != TOUCH_RELEASE) + return 0; // Only change focus if touch releases within the input box + if (GetSelection(x, y) >= 0) { + // When changing focus, we don't scroll or change the cursor location + PageManager::SetKeyBoardFocus(0); + PageManager::NotifyCharInput(0); + SetInputFocus(1); + DrawCursor = true; + mRendered = false; + } + } else { + switch (state) { + case TOUCH_HOLD: + case TOUCH_REPEAT: + break; + case TOUCH_START: + startSelection = GetSelection(x,y); + lastX = x; + DrawCursor = false; + mRendered = false; + break; + + case TOUCH_DRAG: + // Check if we dragged out of the selection window + if (GetSelection(x, y) == -1) { + lastX = 0; + break; + } + + DrawCursor = false; + + // Provide some debounce on initial touches + if (startSelection != -1 && abs(x - lastX) < 6) { + break; + } + + startSelection = -1; + if (lastX != x) + HandleTextLocation(x); + break; + + case TOUCH_RELEASE: + // We've moved the cursor location + mRendered = false; + DrawCursor = true; + HandleCursorByTouch(x); + break; + } + } + return 0; +} + +int GUIInput::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + if (varName == mVariable) { + if (!isLocalChange) { + UpdateDisplayText(); + HandleTextLocation(TW_INPUT_NO_UPDATE); + } else + isLocalChange = false; + return 0; + } + if (varName.empty()) { + UpdateDisplayText(); + HandleTextLocation(TW_INPUT_NO_UPDATE); + HandleCursorByText(); + } + return 0; +} + +int GUIInput::NotifyKey(int key, bool down) +{ + if (!HasInputFocus || !down) + return 1; + + switch (key) + { + case KEY_LEFT: + if (mCursorLocation == 0) + return 0; // we're already at the beginning + if (mCursorLocation == -1) { + if (displayValue.size() == 0) { + cursorX = mRenderX; + return 0; + } + mCursorLocation = displayValue.size() - 1; + } else { + mCursorLocation--; + } + mRendered = false; + HandleCursorByText(); + return 0; + + case KEY_RIGHT: + if (mCursorLocation == -1) + return 0; // we're already at the end + mCursorLocation++; + if ((int)displayValue.size() <= mCursorLocation) + mCursorLocation = -1; + HandleCursorByText(); + mRendered = false; + return 0; + + case KEY_HOME: + case KEY_UP: + if (displayValue.size() == 0) + return 0; + mCursorLocation = 0; + mRendered = false; + cursorX = mRenderX; + return 0; + + case KEY_END: + case KEY_DOWN: + mCursorLocation = -1; + mRendered = false; + HandleCursorByText(); + return 0; + } + + return 1; +} + +int GUIInput::NotifyCharInput(int key) +{ + if (HasInputFocus) { + if (key == KEYBOARD_BACKSPACE) { + //Backspace + if (mValue.size() > 0 && mCursorLocation != 0) { + if (mCursorLocation == -1) { + mValue.resize(mValue.size() - 1); + } else { + mValue.erase(mCursorLocation - 1, 1); + mCursorLocation--; + } + isLocalChange = true; + DataManager::SetValue(mVariable, mValue); + UpdateDisplayText(); + HandleTextLocation(TW_INPUT_NO_UPDATE); + HandleCursorByText(); + } + } else if (key == KEYBOARD_SWIPE_LEFT) { + // Delete all + isLocalChange = true; + if (mCursorLocation == -1) { + DataManager::SetValue (mVariable, ""); + mValue = ""; + textWidth = 0; + mCursorLocation = -1; + } else { + mValue.erase(0, mCursorLocation); + DataManager::SetValue(mVariable, mValue); + mCursorLocation = 0; + } + UpdateDisplayText(); + cursorX = mRenderX; + scrollingX = 0; + mRendered = false; + return 0; + } else if (key >= 32) { + // Regular key + if (HasAllowed && AllowedList.find((char)key) == string::npos) { + return 0; + } + if (HasDisabled && DisabledList.find((char)key) != string::npos) { + return 0; + } + if (MaxLen != 0 && mValue.size() >= MaxLen) { + return 0; + } + if (mCursorLocation == -1) { + mValue += key; + } else { + mValue.insert(mCursorLocation, 1, key); + mCursorLocation++; + } + isLocalChange = true; + DataManager::SetValue(mVariable, mValue); + UpdateDisplayText(); + HandleTextLocation(TW_INPUT_NO_UPDATE); + HandleCursorByText(); + } else if (key == KEYBOARD_ACTION) { + // Action + if (mAction) { + unsigned inputLen = mValue.length(); + if (inputLen < MinLen) + return 0; + else if (MaxLen != 0 && inputLen > MaxLen) + return 0; + else + return (mAction ? mAction->NotifyTouch(TOUCH_RELEASE, mRenderX, mRenderY) : 1); + } + } + return 0; + } else { + if (key == 0) { + // Somewhat ugly hack-ish way to tell the box to redraw after losing focus to remove the cursor + mRendered = false; + return 1; + } + } + return 1; +} diff --git a/gui/keyboard.cpp b/gui/keyboard.cpp new file mode 100644 index 000000000..849cf19d8 --- /dev/null +++ b/gui/keyboard.cpp @@ -0,0 +1,633 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/input.h> +#include <stdlib.h> +#include <string.h> +#include "../data.hpp" + +#include <string> + +extern "C" { +#include "../twcommon.h" +#include "gui.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +bool GUIKeyboard::CtrlActive = false; + +GUIKeyboard::GUIKeyboard(xml_node<>* node) + : GUIObject(node) +{ + int layoutindex, rowindex, keyindex, Xindex, Yindex, keyHeight = 0, keyWidth = 0; + currentKey = NULL; + highlightRenderCount = 0; + hasHighlight = hasCapsHighlight = hasCtrlHighlight = false; + char resource[10], layout[8], row[5], key[6], longpress[7]; + xml_attribute<>* attr; + xml_node<>* child; + xml_node<>* keylayout; + xml_node<>* keyrow; + + for (layoutindex=0; layoutindex<MAX_KEYBOARD_LAYOUTS; layoutindex++) { + layouts[layoutindex].keyboardImg = NULL; + memset(layouts[layoutindex].keys, 0, sizeof(Layout::keys)); + memset(layouts[layoutindex].row_end_y, 0, sizeof(Layout::row_end_y)); + } + + mRendered = false; + currentLayout = 1; + CapsLockOn = false; + + if (!node) return; + + mHighlightColor = LoadAttrColor(FindNode(node, "highlight"), "color", &hasHighlight); + mCapsHighlightColor = LoadAttrColor(FindNode(node, "capshighlight"), "color", &hasCapsHighlight); + mCtrlHighlightColor = LoadAttrColor(FindNode(node, "ctrlhighlight"), "color", &hasCtrlHighlight); + + child = FindNode(node, "keymargin"); + mKeyMarginX = LoadAttrIntScaleX(child, "x", 0); + mKeyMarginY = LoadAttrIntScaleY(child, "y", 0); + + child = FindNode(node, "background"); + mBackgroundColor = LoadAttrColor(child, "color", COLOR(32,32,32,255)); + + child = FindNode(node, "key-alphanumeric"); + mFont = PageManager::GetResources()->FindFont(LoadAttrString(child, "font", "keylabel")); + mFontColor = LoadAttrColor(child, "textcolor", COLOR(255,255,255,255)); + mKeyColorAlphanumeric = LoadAttrColor(child, "color", COLOR(0,0,0,0)); + + child = FindNode(node, "key-other"); + mSmallFont = PageManager::GetResources()->FindFont(LoadAttrString(child, "font", "keylabel-small")); + mFontColorSmall = LoadAttrColor(child, "textcolor", COLOR(192,192,192,255)); + mKeyColorOther = LoadAttrColor(child, "color", COLOR(0,0,0,0)); + + child = FindNode(node, "longpress"); + mLongpressFont = PageManager::GetResources()->FindFont(LoadAttrString(child, "font", "keylabel-longpress")); + mLongpressFontColor = LoadAttrColor(child, "textcolor", COLOR(128,128,128,255)); + LoadPlacement(child, &longpressOffsetX, &longpressOffsetY); + + LoadKeyLabels(node, 0); // load global key labels + + // compatibility ugliness: resources should be specified in the layouts themselves instead + // Load the images for the different layouts + child = FindNode(node, "layout"); + if (child) + { + layoutindex = 1; + strcpy(resource, "resource1"); + attr = child->first_attribute(resource); + while (attr && layoutindex < (MAX_KEYBOARD_LAYOUTS + 1)) { + layouts[layoutindex - 1].keyboardImg = LoadAttrImage(child, resource); + + layoutindex++; + resource[8] = (char)(layoutindex + 48); + attr = child->first_attribute(resource); + } + } + + // Check the first image to get height and width + if (layouts[0].keyboardImg && layouts[0].keyboardImg->GetResource()) + { + mRenderW = layouts[0].keyboardImg->GetWidth(); + mRenderH = layouts[0].keyboardImg->GetHeight(); + } + + // Load all of the layout maps + layoutindex = 1; + strcpy(layout, "layout1"); + keylayout = FindNode(node, layout); + while (keylayout) + { + if (layoutindex > MAX_KEYBOARD_LAYOUTS) { + LOGERR("Too many layouts defined in keyboard.\n"); + return; + } + + LoadKeyLabels(keylayout, layoutindex); // load per-layout key labels + + Layout& lay = layouts[layoutindex - 1]; + + child = keylayout->first_node("keysize"); + keyHeight = LoadAttrIntScaleY(child, "height", 0); + keyWidth = LoadAttrIntScaleX(child, "width", 0); + // compatibility ugliness: capslock="0" means that this is the caps layout. Also it has nothing to do with keysize. + lay.is_caps = (LoadAttrInt(child, "capslock", 1) == 0); + // compatibility ugliness: revert_layout has nothing to do with keysize. + lay.revert_layout = LoadAttrInt(child, "revert_layout", -1); + + rowindex = 1; + Yindex = 0; + strcpy(row, "row1"); + keyrow = keylayout->first_node(row); + while (keyrow) + { + if (rowindex > MAX_KEYBOARD_ROWS) { + LOGERR("Too many rows defined in keyboard.\n"); + return; + } + + Yindex += keyHeight; + lay.row_end_y[rowindex - 1] = Yindex; + + keyindex = 1; + Xindex = 0; + strcpy(key, "key01"); + attr = keyrow->first_attribute(key); + + while (attr) { + if (keyindex > MAX_KEYBOARD_KEYS) { + LOGERR("Too many keys defined in a keyboard row.\n"); + return; + } + + const char* keyinfo = attr->value(); + + if (strlen(keyinfo) == 0) { + LOGERR("No key info on layout%i, row%i, key%dd.\n", layoutindex, rowindex, keyindex); + return; + } + + if (ParseKey(keyinfo, lay.keys[rowindex - 1][keyindex - 1], Xindex, keyWidth, false)) + LOGERR("Invalid key info on layout%i, row%i, key%02i.\n", layoutindex, rowindex, keyindex); + + + // PROCESS LONG PRESS INFO IF EXISTS + sprintf(longpress, "long%02i", keyindex); + attr = keyrow->first_attribute(longpress); + if (attr) { + const char* keyinfo = attr->value(); + + if (strlen(keyinfo) == 0) { + LOGERR("No long press info on layout%i, row%i, long%dd.\n", layoutindex, rowindex, keyindex); + return; + } + + if (ParseKey(keyinfo, lay.keys[rowindex - 1][keyindex - 1], Xindex, keyWidth, true)) + LOGERR("Invalid long press key info on layout%i, row%i, long%02i.\n", layoutindex, rowindex, keyindex); + } + keyindex++; + sprintf(key, "key%02i", keyindex); + attr = keyrow->first_attribute(key); + } + rowindex++; + row[3] = (char)(rowindex + 48); + keyrow = keylayout->first_node(row); + } + layoutindex++; + layout[6] = (char)(layoutindex + 48); + keylayout = FindNode(node, layout); + } + + int x, y; + // Load the placement + LoadPlacement(FindNode(node, "placement"), &x, &y, &mRenderW, &mRenderH); + SetRenderPos(x, y, mRenderW, mRenderH); + return; +} + +GUIKeyboard::~GUIKeyboard() +{ +} + +int GUIKeyboard::ParseKey(const char* keyinfo, Key& key, int& Xindex, int keyWidth, bool longpress) +{ + key.layout = 0; + int keychar = 0; + if (strlen(keyinfo) == 1) { + // This is a single key, simple definition + keychar = keyinfo[0]; + } else { + // This key has extra data: {keywidth}:{what_the_key_does} + keyWidth = scale_theme_x(atoi(keyinfo)); + + const char* ptr = keyinfo; + while (*ptr > 32 && *ptr != ':') + ptr++; + if (*ptr != ':') + return -1; // no colon is an error + ptr++; + + if (*ptr == 0) { // This is an empty area + keychar = 0; + } else if (strlen(ptr) == 1) { // This is the character that this key uses + keychar = *ptr; + } else if (*ptr == 'c') { // This is an ASCII character code: "c:{number}" + keychar = atoi(ptr + 2); + } else if (*ptr == 'k') { // This is a Linux keycode from input.h: "k:{number}" + keychar = -atoi(ptr + 2); + } else if (*ptr == 'l') { // This is a different layout: "layout{number}" + key.layout = atoi(ptr + 6); + } else if (*ptr == 'a') { // This is an action: "action" (the Enter key) + keychar = KEYBOARD_ACTION; + } else + return -1; + } + + if (longpress) { + key.longpresskey = keychar; + } else { + key.key = keychar; + Xindex += keyWidth; + key.end_x = Xindex - 1; + } + + return 0; +} + +void GUIKeyboard::LoadKeyLabels(xml_node<>* parent, int layout) +{ + for (xml_node<>* child = parent->first_node(); child; child = child->next_sibling()) { + std::string name = child->name(); + if (name == "keylabel") { + std::string keydef = LoadAttrString(child, "key", ""); + Key tempkey; + int dummyX; + if (ParseKey(keydef.c_str(), tempkey, dummyX, 0, false) == 0) { + KeyLabel keylabel; + keylabel.key = tempkey.key; + keylabel.layout_from = layout; + keylabel.layout_to = tempkey.layout; + keylabel.text = LoadAttrString(child, "text", ""); + keylabel.image = LoadAttrImage(child, "resource"); + mKeyLabels.push_back(keylabel); + } else { + LOGERR("Ignoring invalid keylabel in layout %d: '%s'.\n", layout, keydef.c_str()); + } + } + } +} + +void GUIKeyboard::DrawKey(Key& key, int keyX, int keyY, int keyW, int keyH) +{ + int keychar = key.key; + if (!keychar && !key.layout) + return; + + // key background + COLOR& c = (keychar >= 32 && keychar < 127) ? mKeyColorAlphanumeric : mKeyColorOther; + gr_color(c.red, c.green, c.blue, c.alpha); + keyX += mKeyMarginX; + keyY += mKeyMarginY; + keyW -= mKeyMarginX * 2; + keyH -= mKeyMarginY * 2; + gr_fill(keyX, keyY, keyW, keyH); + + // key label + FontResource* labelFont = mFont; + string labelText; + ImageResource* labelImage = NULL; + if (keychar > 32 && keychar < 127) { + // TODO: this will eventually need UTF-8 support + labelText = (char) keychar; + if (CtrlActive) { + int ctrlchar = KeyCharToCtrlChar(keychar); + if (ctrlchar != keychar) + labelText = std::string("^") + (char)(ctrlchar + 64); + } + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + } + else { + // search for a special key label + for (std::vector<KeyLabel>::iterator it = mKeyLabels.begin(); it != mKeyLabels.end(); ++it) { + if (it->layout_from > 0 && it->layout_from != currentLayout) + continue; // this label is for another layout + if (it->key == key.key && it->layout_to == key.layout) + { + // found a label + labelText = it->text; + labelImage = it->image; + break; + } + } + labelFont = mSmallFont; + gr_color(mFontColorSmall.red, mFontColorSmall.green, mFontColorSmall.blue, mFontColorSmall.alpha); + } + + if (labelImage) + { + int w = labelImage->GetWidth(); + int h = labelImage->GetHeight(); + int x = keyX + (keyW - w) / 2; + int y = keyY + (keyH - h) / 2; + gr_blit(labelImage->GetResource(), 0, 0, w, h, x, y); + } + else if (!labelText.empty()) + { + void* fontResource = labelFont->GetResource(); + int textW = gr_ttf_measureEx(labelText.c_str(), fontResource); + int textH = labelFont->GetHeight(); + int textX = keyX + (keyW - textW) / 2; + int textY = keyY + (keyH - textH) / 2; + gr_textEx_scaleW(textX, textY, labelText.c_str(), fontResource, keyW, TOP_LEFT, 0); + } + + // longpress key label (only if font is defined) + keychar = key.longpresskey; + if (keychar > 32 && keychar < 127 && mLongpressFont->GetResource()) { + void* fontResource = mLongpressFont->GetResource(); + gr_color(mLongpressFontColor.red, mLongpressFontColor.green, mLongpressFontColor.blue, mLongpressFontColor.alpha); + string text(1, keychar); + int textW = gr_ttf_measureEx(text.c_str(), fontResource); + int textX = keyX + keyW - longpressOffsetX - textW; + int textY = keyY + longpressOffsetY; + gr_textEx_scaleW(textX, textY, text.c_str(), fontResource, keyW, TOP_LEFT, 0); + } +} + +int GUIKeyboard::KeyCharToCtrlChar(int key) +{ + // convert upper and lower case to ctrl chars + // Ctrl+A to Ctrl+_ (we don't support entering null bytes) + if (key >= 65 && key <= 127 && key != 96) + return key & 0x1f; + return key; // pass on others (already ctrl chars, numbers, etc.) unchanged +} + +int GUIKeyboard::Render(void) +{ + if (!isConditionTrue()) + { + mRendered = false; + return 0; + } + + Layout& lay = layouts[currentLayout - 1]; + + bool drawKeys = false; + if (lay.keyboardImg && lay.keyboardImg->GetResource()) + // keyboard is image based + gr_blit(lay.keyboardImg->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + else { + // keyboard is software drawn + // fill background + gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, mBackgroundColor.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + drawKeys = true; + } + + // draw keys + int y1 = 0; + for (int row = 0; row < MAX_KEYBOARD_ROWS; ++row) { + int rowY = mRenderY + y1; + int rowH = lay.row_end_y[row] - y1; + y1 = lay.row_end_y[row]; + int x1 = 0; + for (int col = 0; col < MAX_KEYBOARD_KEYS; ++col) { + Key& key = lay.keys[row][col]; + int keyY = rowY; + int keyH = rowH; + int keyX = mRenderX + x1; + int keyW = key.end_x - x1; + x1 = key.end_x; + + // Draw key for software drawn keyboard + if (drawKeys) + DrawKey(key, keyX, keyY, keyW, keyH); + + // Draw highlight for capslock + if (hasCapsHighlight && lay.is_caps && CapsLockOn && key.layout > 0 && key.layout == lay.revert_layout) { + gr_color(mCapsHighlightColor.red, mCapsHighlightColor.green, mCapsHighlightColor.blue, mCapsHighlightColor.alpha); + gr_fill(keyX, keyY, keyW, keyH); + } + + // Draw highlight for control + if (hasCtrlHighlight && key.key == -KEY_LEFTCTRL && CtrlActive) { + gr_color(mCtrlHighlightColor.red, mCtrlHighlightColor.green, mCtrlHighlightColor.blue, mCtrlHighlightColor.alpha); + gr_fill(keyX, keyY, keyW, keyH); + } + + // Highlight current key + if (hasHighlight && &key == currentKey && highlightRenderCount != 0) { + gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha); + gr_fill(keyX, keyY, keyW, keyH); + } + } + } + + if (!hasHighlight || highlightRenderCount == 0) + mRendered = true; + else if (highlightRenderCount > 0) + highlightRenderCount--; + return 0; +} + +int GUIKeyboard::Update(void) +{ + if (!isConditionTrue()) return (mRendered ? 2 : 0); + if (!mRendered) return 2; + + return 0; +} + +int GUIKeyboard::SetRenderPos(int x, int y, int w, int h) +{ + RenderObject::SetRenderPos(x, y, w, h); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + return 0; +} + +GUIKeyboard::Key* GUIKeyboard::HitTestKey(int x, int y) +{ + if (!IsInRegion(x, y)) + return NULL; + + int rely = y - mRenderY; + int relx = x - mRenderX; + + Layout& lay = layouts[currentLayout - 1]; + + // Find the correct row + int row; + for (row = 0; row < MAX_KEYBOARD_ROWS; ++row) { + if (lay.row_end_y[row] > rely) + break; + } + if (row == MAX_KEYBOARD_ROWS) + return NULL; + + // Find the correct key (column) + int col; + int x1 = 0; + for (col = 0; col < MAX_KEYBOARD_KEYS; ++col) { + Key& key = lay.keys[row][col]; + if (x1 <= relx && relx < key.end_x && (key.key != 0 || key.layout != 0)) { + // This is the key that was pressed! + return &key; + } + x1 = key.end_x; + } + return NULL; +} + +int GUIKeyboard::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + static int was_held = 0, startX = 0; + + if (!isConditionTrue()) return -1; + + switch (state) + { + case TOUCH_START: + was_held = 0; + startX = x; + currentKey = HitTestKey(x, y); + if (currentKey) + highlightRenderCount = -1; + else + highlightRenderCount = 0; + mRendered = false; + break; + + case TOUCH_DRAG: + break; + + case TOUCH_RELEASE: + // TODO: we might want to notify of key releases here + if (x < startX - (mRenderW * 0.5)) { + if (highlightRenderCount != 0) { + highlightRenderCount = 0; + mRendered = false; + } + PageManager::NotifyCharInput(KEYBOARD_SWIPE_LEFT); + return 0; + } else if (x > startX + (mRenderW * 0.5)) { + if (highlightRenderCount != 0) { + highlightRenderCount = 0; + mRendered = false; + } + PageManager::NotifyCharInput(KEYBOARD_SWIPE_RIGHT); + return 0; + } + // fall through + case TOUCH_HOLD: + case TOUCH_REPEAT: + if (!currentKey) { + if (highlightRenderCount != 0) { + highlightRenderCount = 0; + mRendered = false; + } + return 0; + } + + if (highlightRenderCount != 0) { + if (state == TOUCH_RELEASE) + highlightRenderCount = 2; + else + highlightRenderCount = -1; + mRendered = false; + } + + if (HitTestKey(x, y) != currentKey) { + // We dragged off of the starting key + currentKey = NULL; + if (highlightRenderCount != 0) { + highlightRenderCount = 0; + mRendered = false; + } + return 0; + } else { + Key& key = *currentKey; + bool repeatKey = false; + Layout& lay = layouts[currentLayout - 1]; + if (state == TOUCH_RELEASE && was_held == 0) { + DataManager::Vibrate("tw_keyboard_vibrate"); + if (key.layout > 0) { + // Switch layouts + if (lay.is_caps && key.layout == lay.revert_layout && !CapsLockOn) { + CapsLockOn = true; // Set the caps lock + } else { + CapsLockOn = false; // Unset the caps lock and change layouts + currentLayout = key.layout; + } + mRendered = false; + } else if (key.key == KEYBOARD_ACTION) { + // Action + highlightRenderCount = 0; + // Send action notification + PageManager::NotifyCharInput(key.key); + } else if (key.key == -KEY_LEFTCTRL) { + CtrlActive = !CtrlActive; // toggle Control key state + mRendered = false; // render Ctrl key highlight + } else if (key.key != 0) { + // Regular key + if (key.key > 0) { + // ASCII code or character + int keycode = key.key; + if (CtrlActive) { + CtrlActive = false; + mRendered = false; + keycode = KeyCharToCtrlChar(key.key); + } + PageManager::NotifyCharInput(keycode); + } else { + // Linux key code + PageManager::NotifyKey(-key.key, true); + PageManager::NotifyKey(-key.key, false); + } + if (!CapsLockOn && lay.is_caps) { + // caps lock was not set, change layouts + currentLayout = lay.revert_layout; + mRendered = false; + } + } + } else if (state == TOUCH_HOLD) { + was_held = 1; + if (key.longpresskey > 0) { + // Long Press Key + DataManager::Vibrate("tw_keyboard_vibrate"); + PageManager::NotifyCharInput(key.longpresskey); + } + else + repeatKey = true; + } else if (state == TOUCH_REPEAT) { + was_held = 1; + repeatKey = true; + } + if (repeatKey) { + if (key.key == KEYBOARD_BACKSPACE) { + // Repeat backspace + PageManager::NotifyCharInput(key.key); + } + switch (key.key) + { + // Repeat arrows + case -KEY_LEFT: + case -KEY_RIGHT: + case -KEY_UP: + case -KEY_DOWN: + PageManager::NotifyKey(-key.key, true); + PageManager::NotifyKey(-key.key, false); + break; + } + } + } + break; + } + + return 0; +} + +void GUIKeyboard::SetPageFocus(int inFocus) +{ + if (inFocus) + CtrlActive = false; +} diff --git a/gui/listbox.cpp b/gui/listbox.cpp new file mode 100644 index 000000000..05276e8ac --- /dev/null +++ b/gui/listbox.cpp @@ -0,0 +1,246 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <string.h> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" +#include "pages.hpp" + +extern std::vector<language_struct> Language_List; + +GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + mIconSelected = mIconUnselected = NULL; + mUpdate = 0; + isCheckList = isTextParsed = false; + + // Get the icons, if any + child = FindNode(node, "icon"); + if (child) { + mIconSelected = LoadAttrImage(child, "selected"); + mIconUnselected = LoadAttrImage(child, "unselected"); + } + int iconWidth = std::max(mIconSelected->GetWidth(), mIconUnselected->GetWidth()); + int iconHeight = std::max(mIconSelected->GetHeight(), mIconUnselected->GetHeight()); + SetMaxIconSize(iconWidth, iconHeight); + + // Handle the result variable + child = FindNode(node, "data"); + if (child) { + attr = child->first_attribute("name"); + if (attr) + mVariable = attr->value(); + attr = child->first_attribute("default"); + if (attr) + DataManager::SetValue(mVariable, attr->value()); + // Get the currently selected value for the list + DataManager::GetValue(mVariable, currentValue); + if (mVariable == "tw_language") { + std::vector<language_struct>::iterator iter; + for (iter = Language_List.begin(); iter != Language_List.end(); iter++) { + ListItem data; + data.displayName = (*iter).displayvalue; + data.variableValue = (*iter).filename; + data.action = NULL; + if (currentValue == (*iter).filename) { + data.selected = 1; + DataManager::SetValue("tw_language_display", (*iter).displayvalue); + } else + data.selected = 0; + mListItems.push_back(data); + } + } + } + else + allowSelection = false; // allows using listbox as a read-only list or menu + + // Get the data for the list + child = FindNode(node, "listitem"); + if (!child) return; + while (child) { + ListItem item; + + attr = child->first_attribute("name"); + if (!attr) + continue; + // We will parse display names when we get page focus to ensure that translating takes place + item.displayName = attr->value(); + item.variableValue = gui_parse_text(child->value()); + item.selected = (child->value() == currentValue); + item.action = NULL; + xml_node<>* action = child->first_node("action"); + if (action) { + item.action = new GUIAction(action); + allowSelection = true; + } + xml_node<>* variable_name = child->first_node("data"); + if (variable_name) { + attr = variable_name->first_attribute("variable"); + if (attr) { + item.variableName = attr->value(); + item.selected = (DataManager::GetIntValue(item.variableName) != 0); + allowSelection = true; + isCheckList = true; + } + } + + LoadConditions(child, item.mConditions); + + mListItems.push_back(item); + mVisibleItems.push_back(mListItems.size()-1); + + child = child->next_sibling("listitem"); + } +} + +GUIListBox::~GUIListBox() +{ +} + +int GUIListBox::Update(void) +{ + if (!isConditionTrue()) + return 0; + + GUIScrollList::Update(); + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + return 0; +} + +int GUIListBox::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIScrollList::NotifyVarChange(varName, value); + + if (!isConditionTrue()) + return 0; + + // Check to see if the variable that we are using to store the list selected value has been updated + if (varName == mVariable) { + currentValue = value; + mUpdate = 1; + } + + std::vector<size_t> mVisibleItemsOld; + std::swap(mVisibleItemsOld, mVisibleItems); + for (size_t i = 0; i < mListItems.size(); i++) { + ListItem& item = mListItems[i]; + // update per-item visibility condition + bool itemVisible = UpdateConditions(item.mConditions, varName); + if (itemVisible) + mVisibleItems.push_back(i); + + if (isCheckList) + { + if (item.variableName == varName || varName.empty()) { + std::string val; + DataManager::GetValue(item.variableName, val); + item.selected = (val != "0"); + mUpdate = 1; + } + } + else if (varName == mVariable) { + if (item.variableValue == currentValue) { + item.selected = 1; + SetVisibleListLocation(mVisibleItems.empty() ? 0 : mVisibleItems.size()-1); + } else { + item.selected = 0; + } + } + } + + if (mVisibleItemsOld != mVisibleItems) { + mUpdate = 1; // some item's visibility has changed + if (firstDisplayedItem >= (int)mVisibleItems.size()) { + // all items in the view area were removed - make last item visible + SetVisibleListLocation(mVisibleItems.empty() ? 0 : mVisibleItems.size()-1); + } + } + + return 0; +} + +void GUIListBox::SetPageFocus(int inFocus) +{ + GUIScrollList::SetPageFocus(inFocus); + if (inFocus) { + if (!isTextParsed) { + isTextParsed = true; + for (size_t i = 0; i < mListItems.size(); i++) { + ListItem& item = mListItems[i]; + item.displayName = gui_parse_text(item.displayName); + } + } + DataManager::GetValue(mVariable, currentValue); + NotifyVarChange(mVariable, currentValue); + } +} + +size_t GUIListBox::GetItemCount() +{ + return mVisibleItems.size(); +} + +void GUIListBox::RenderItem(size_t itemindex, int yPos, bool selected) +{ + // note: the "selected" parameter above is for the currently touched item + // don't confuse it with the more persistent "selected" flag per list item used below + ListItem& item = mListItems[mVisibleItems[itemindex]]; + ImageResource* icon = item.selected ? mIconSelected : mIconUnselected; + const std::string& text = item.displayName; + + RenderStdItem(yPos, selected, icon, text.c_str()); +} + +void GUIListBox::NotifySelect(size_t item_selected) +{ + if (!isCheckList) { + // deselect all items, even invisible ones + for (size_t i = 0; i < mListItems.size(); i++) { + mListItems[i].selected = 0; + } + } + + ListItem& item = mListItems[mVisibleItems[item_selected]]; + + if (isCheckList) { + int selected = 1 - item.selected; + item.selected = selected; + DataManager::SetValue(item.variableName, selected ? "1" : "0"); + } else { + item.selected = 1; + string str = item.variableValue; // [check] should this set currentValue instead? + DataManager::SetValue(mVariable, str); + } + if (item.action) + item.action->doActions(); + mUpdate = 1; +} diff --git a/gui/mousecursor.cpp b/gui/mousecursor.cpp new file mode 100644 index 000000000..b87cac414 --- /dev/null +++ b/gui/mousecursor.cpp @@ -0,0 +1,165 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +MouseCursor::MouseCursor(int resX, int resY) +{ + ResetData(resX, resY); +} + +MouseCursor::~MouseCursor() +{ +} + +void MouseCursor::ResetData(int resX, int resY) +{ + m_resX = resX; + m_resY = resY; + m_moved = false; + m_speedMultiplier = 2.5f; + m_image = NULL; + m_present = false; + + ConvertStrToColor("red", &m_color); + + SetRenderPos(resX/2, resY/2, 10, 10); +} + +void MouseCursor::LoadData(xml_node<>* node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + child = FindNode(node, "placement"); + if (child) + LoadPlacement(child, &mRenderX, &mRenderY, &mRenderW, &mRenderH); + + child = FindNode(node, "background"); + if (child) + { + m_color = LoadAttrColor(child, "color", m_color); + m_image = LoadAttrImage(child, "resource"); + if (m_image) + { + mRenderW = m_image->GetWidth(); + mRenderH = m_image->GetHeight(); + } + } + + child = FindNode(node, "speed"); + if (child) + { + attr = child->first_attribute("multiplier"); + if (attr) + m_speedMultiplier = atof(attr->value()); + } +} + +int MouseCursor::Render(void) +{ + if (!m_present) + return 0; + + if (m_image) + { + gr_blit(m_image->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + } + else + { + gr_color(m_color.red, m_color.green, m_color.blue, m_color.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mRenderH); + } + return 0; +} + +int MouseCursor::Update(void) +{ + if (m_present != ev_has_mouse()) + { + m_present = ev_has_mouse(); + if (m_present) + SetRenderPos(m_resX/2, m_resY/2); + return 2; + } + + if (m_present && m_moved) + { + m_moved = false; + return 2; + } + return 0; +} + +int MouseCursor::SetRenderPos(int x, int y, int w, int h) +{ + if (x == mRenderX && y == mRenderY) + m_moved = true; + + return RenderObject::SetRenderPos(x, y, w, h); +} + +void MouseCursor::Move(int deltaX, int deltaY) +{ + if (deltaX != 0) + { + mRenderX += deltaX*m_speedMultiplier; + mRenderX = (std::min)(mRenderX, m_resX); + mRenderX = (std::max)(mRenderX, 0); + + m_moved = true; + } + + if (deltaY != 0) + { + mRenderY += deltaY*m_speedMultiplier; + mRenderY = (std::min)(mRenderY, m_resY); + mRenderY = (std::max)(mRenderY, 0); + + m_moved = true; + } +} + +void MouseCursor::GetPos(int& x, int& y) +{ + x = mRenderX; + y = mRenderY; +} diff --git a/gui/object.cpp b/gui/object.cpp new file mode 100644 index 000000000..0cf2ccea6 --- /dev/null +++ b/gui/object.cpp @@ -0,0 +1,224 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// object.cpp - GUIObject base class + +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <string> + +extern "C" { +#include "../twcommon.h" +#include "../variables.h" +} + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" + +GUIObject::GUIObject(xml_node<>* node) +{ + mConditionsResult = true; + if (node) + LoadConditions(node, mConditions); +} + +void GUIObject::LoadConditions(xml_node<>* node, std::vector<Condition>& conditions) +{ + xml_node<>* condition = FindNode(node, "conditions"); + if (condition) condition = FindNode(condition, "condition"); + else condition = FindNode(node, "condition"); + + while (condition) + { + Condition cond; + + cond.mCompareOp = "="; + + xml_attribute<>* attr; + attr = condition->first_attribute("var1"); + if (attr) cond.mVar1 = attr->value(); + + attr = condition->first_attribute("op"); + if (attr) cond.mCompareOp = attr->value(); + + attr = condition->first_attribute("var2"); + if (attr) cond.mVar2 = attr->value(); + + conditions.push_back(cond); + + condition = condition->next_sibling("condition"); + } +} + +GUIObject::~GUIObject() +{ +} + +bool GUIObject::IsConditionVariable(std::string var) +{ + std::vector<Condition>::iterator iter; + for (iter = mConditions.begin(); iter != mConditions.end(); iter++) + { + if (iter->mVar1 == var) + return true; + } + return false; +} + +bool GUIObject::isConditionTrue() +{ + return mConditionsResult; +} + +bool GUIObject::isConditionTrue(Condition* condition) +{ + // This is used to hold the proper value of "true" based on the '!' NOT flag + bool bTrue = true; + + if (condition->mVar1.empty()) + return bTrue; + + if (!condition->mCompareOp.empty() && condition->mCompareOp[0] == '!') + bTrue = false; + + if (condition->mVar2.empty() && condition->mCompareOp != "modified") + { + if (!DataManager::GetStrValue(condition->mVar1).empty()) + return bTrue; + + return !bTrue; + } + + string var1, var2; + if (DataManager::GetValue(condition->mVar1, var1)) + var1 = condition->mVar1; + if (DataManager::GetValue(condition->mVar2, var2)) + var2 = condition->mVar2; + + if (var2.substr(0, 2) == "{@") + // translate resource string in value + var2 = gui_parse_text(var2); + + // This is a special case, we stat the file and that determines our result + if (var1 == "fileexists") + { + struct stat st; + if (stat(var2.c_str(), &st) == 0) + var2 = var1; + else + var2 = "FAILED"; + } + if (var1 == "mounted") + { + if (isMounted(condition->mVar2)) + var2 = var1; + else + var2 = "FAILED"; + } + + if (condition->mCompareOp.find('=') != string::npos && var1 == var2) + return bTrue; + + if (condition->mCompareOp.find('>') != string::npos && (atof(var1.c_str()) > atof(var2.c_str()))) + return bTrue; + + if (condition->mCompareOp.find('<') != string::npos && (atof(var1.c_str()) < atof(var2.c_str()))) + return bTrue; + + if (condition->mCompareOp == "modified") + { + // This is a hack to allow areas to reset the default value + if (var1.empty()) + { + condition->mLastVal = var1; + return !bTrue; + } + + if (var1 != condition->mLastVal) + return bTrue; + } + + return !bTrue; +} + +bool GUIObject::isConditionValid() +{ + return !mConditions.empty(); +} + +int GUIObject::NotifyVarChange(const std::string& varName, const std::string& value __unused) +{ + mConditionsResult = UpdateConditions(mConditions, varName); + return 0; +} + +bool GUIObject::UpdateConditions(std::vector<Condition>& conditions, const std::string& varName) +{ + bool result = true; + + const bool varNameEmpty = varName.empty(); + std::vector<Condition>::iterator iter; + for (iter = conditions.begin(); iter != conditions.end(); ++iter) + { + if (varNameEmpty && iter->mCompareOp == "modified") + { + string val; + + // If this fails, val will not be set, which is perfect + if (DataManager::GetValue(iter->mVar1, val)) + { + DataManager::SetValue(iter->mVar1, ""); + DataManager::GetValue(iter->mVar1, val); + } + iter->mLastVal = val; + } + + if (varNameEmpty || iter->mVar1 == varName || iter->mVar2 == varName) + iter->mLastResult = isConditionTrue(&(*iter)); + + if (!iter->mLastResult) + result = false; + } + return result; +} + +bool GUIObject::isMounted(string vol) +{ + FILE *fp; + char tmpOutput[255]; + + fp = fopen("/proc/mounts", "rt"); + while (fgets(tmpOutput,255,fp) != NULL) + { + char* mnt = tmpOutput; + while (*mnt > 32) mnt++; + while (*mnt > 0 && *mnt <= 32) mnt++; + char* pos = mnt; + while (*pos > 32) pos++; + *pos = 0; + if (vol == mnt) + { + fclose(fp); + return true; + } + } + fclose(fp); + return false; +} diff --git a/gui/objects.hpp b/gui/objects.hpp new file mode 100644 index 000000000..630cf7102 --- /dev/null +++ b/gui/objects.hpp @@ -0,0 +1,1242 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// objects.hpp - Base classes for object manager of GUI + +#ifndef _OBJECTS_HEADER +#define _OBJECTS_HEADER + +#include "rapidxml.hpp" +#include <vector> +#include <string> +#include <map> +#include <set> +#include <time.h> + +using namespace rapidxml; + +#include "../data.hpp" +#include "resources.hpp" +#include "pages.hpp" +#include "../partitions.hpp" +#include "placement.h" + +#ifndef TW_X_OFFSET +#define TW_X_OFFSET 0 +#endif +#ifndef TW_Y_OFFSET +#define TW_Y_OFFSET 0 +#endif +#ifndef TW_W_OFFSET +#define TW_W_OFFSET 0 +#endif +#ifndef TW_H_OFFSET +#define TW_H_OFFSET 0 +#endif + +class RenderObject +{ +public: + RenderObject() { mRenderX = 0; mRenderY = 0; mRenderW = 0; mRenderH = 0; mPlacement = TOP_LEFT; } + virtual ~RenderObject() {} + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void) = 0; + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void) { return 0; } + + // GetRenderPos - Returns the current position of the object + virtual int GetRenderPos(int& x, int& y, int& w, int& h) { x = mRenderX; y = mRenderY; w = mRenderW; h = mRenderH; return 0; } + + // SetRenderPos - Update the position of the object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0) { mRenderX = x; mRenderY = y; if (w || h) { mRenderW = w; mRenderH = h; } return 0; } + + // GetPlacement - Returns the current placement + virtual int GetPlacement(Placement& placement) { placement = mPlacement; return 0; } + + // SetPlacement - Update the current placement + virtual int SetPlacement(Placement placement) { mPlacement = placement; return 0; } + + // SetPageFocus - Notify when a page gains or loses focus + // TODO: This should be named NotifyPageFocus for consistency + virtual void SetPageFocus(int inFocus __unused) { return; } + +protected: + int mRenderX, mRenderY, mRenderW, mRenderH; + Placement mPlacement; +}; + +class ActionObject +{ +public: + ActionObject() { mActionX = 0; mActionY = 0; mActionW = 0; mActionH = 0; } + virtual ~ActionObject() {} + +public: + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state __unused, int x __unused, int y __unused) { return 0; } + + // NotifyKey - Notify of a key press + // Return 0 on success (and consume key), >0 to pass key to next handler, and <0 on error + virtual int NotifyKey(int key __unused, bool down __unused) { return 1; } + + virtual int GetActionPos(int& x, int& y, int& w, int& h) { x = mActionX; y = mActionY; w = mActionW; h = mActionH; return 0; } + + // Return 0 on success, <0 on error + virtual int SetActionPos(int x, int y, int w = 0, int h = 0); + + // IsInRegion - Checks if the request is handled by this object + // Return 1 if this object handles the request, 0 if not + virtual int IsInRegion(int x, int y) { return ((x < mActionX || x >= mActionX + mActionW || y < mActionY || y >= mActionY + mActionH) ? 0 : 1); } + +protected: + int mActionX, mActionY, mActionW, mActionH; +}; + +class GUIObject +{ +public: + GUIObject(xml_node<>* node); + virtual ~GUIObject(); + +public: + bool IsConditionVariable(std::string var); + bool isConditionTrue(); + bool isConditionValid(); + + // NotifyVarChange - Notify of a variable change + // Returns 0 on success, <0 on error + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + +protected: + class Condition + { + public: + Condition() { + mLastResult = true; + } + + std::string mVar1; + std::string mVar2; + std::string mCompareOp; + std::string mLastVal; + bool mLastResult; + }; + + std::vector<Condition> mConditions; + +protected: + static void LoadConditions(xml_node<>* node, std::vector<Condition>& conditions); + static bool isMounted(std::string vol); + static bool isConditionTrue(Condition* condition); + static bool UpdateConditions(std::vector<Condition>& conditions, const std::string& varName); + + bool mConditionsResult; +}; + +class InputObject +{ +public: + InputObject() { HasInputFocus = 0; } + virtual ~InputObject() {} + +public: + // NotifyCharInput - Notify of character input (usually from the onscreen or hardware keyboard) + // Return 0 on success (and consume key), >0 to pass key to next handler, and <0 on error + virtual int NotifyCharInput(int ch __unused) { return 1; } + + virtual int SetInputFocus(int focus) { HasInputFocus = focus; return 1; } + +protected: + int HasInputFocus; +}; + +// Derived Objects +// GUIText - Used for static text +class GUIText : public GUIObject, public RenderObject, public ActionObject +{ +public: + // w and h may be ignored, in which case, no bounding box is applied + GUIText(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // Retrieve the size of the current string (dynamic strings may change per call) + virtual int GetCurrentBounds(int& w, int& h); + + // Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // Set maximum width in pixels + virtual int SetMaxWidth(unsigned width); + + void SetText(string newtext); + +public: + bool isHighlighted; + bool scaleWidth; + unsigned maxWidth; + +protected: + std::string mText; + std::string mLastValue; + COLOR mColor; + COLOR mHighlightColor; + FontResource* mFont; + int mIsStatic; + int mVarChanged; + int mFontHeight; +}; + +// GUIImage - Used for static image +class GUIImage : public GUIObject, public RenderObject +{ +public: + GUIImage(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // SetRenderPos - Update the position of the object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + +public: + bool isHighlighted; + +protected: + ImageResource* mImage; + ImageResource* mHighlightImage; +}; + +// GUIFill - Used for fill colors +class GUIFill : public GUIObject, public RenderObject +{ +public: + GUIFill(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + +protected: + COLOR mColor; +}; + +// GUIAction - Used for standard actions +class GUIAction : public GUIObject, public ActionObject +{ + friend class ActionThread; + +public: + GUIAction(xml_node<>* node); + +public: + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + virtual int NotifyKey(int key, bool down); + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + int doActions(); + +protected: + class Action + { + public: + std::string mFunction; + std::string mArg; + }; + + std::vector<Action> mActions; + std::map<int, bool> mKeys; + +protected: + enum ThreadType { THREAD_NONE, THREAD_ACTION, THREAD_CANCEL }; + + int getKeyByName(std::string key); + int doAction(Action action); + ThreadType getThreadType(const Action& action); + void simulate_progress_bar(void); + int flash_zip(std::string filename, int* wipe_cache); + void reinject_after_flash(); + void operation_start(const string operation_name); + void operation_end(const int operation_status); + time_t Start; + + // map action name to function pointer + typedef int (GUIAction::*execFunction)(std::string); + typedef std::map<std::string, execFunction> mapFunc; + static mapFunc mf; + static std::set<std::string> setActionsRunningInCallerThread; + + // GUI actions + int reboot(std::string arg); + int home(std::string arg); + int key(std::string arg); + int page(std::string arg); + int reload(std::string arg); + int readBackup(std::string arg); + int set(std::string arg); + int clear(std::string arg); + int mount(std::string arg); + int unmount(std::string arg); + int restoredefaultsettings(std::string arg); + int copylog(std::string arg); + int compute(std::string arg); + int setguitimezone(std::string arg); + int overlay(std::string arg); + int queuezip(std::string arg); + int cancelzip(std::string arg); + int queueclear(std::string arg); + int sleep(std::string arg); + int sleepcounter(std::string arg); + int appenddatetobackupname(std::string arg); + int generatebackupname(std::string arg); + int checkpartitionlist(std::string arg); + int getpartitiondetails(std::string arg); + int screenshot(std::string arg); + int setbrightness(std::string arg); + int checkforapp(std::string arg); + + // (originally) threaded actions + int fileexists(std::string arg); + int flash(std::string arg); + int wipe(std::string arg); + int refreshsizes(std::string arg); + int nandroid(std::string arg); + int fixcontexts(std::string arg); + int fixpermissions(std::string arg); + int dd(std::string arg); + int partitionsd(std::string arg); + int installhtcdumlock(std::string arg); + int htcdumlockrestoreboot(std::string arg); + int htcdumlockreflashrecovery(std::string arg); + int cmd(std::string arg); + int terminalcommand(std::string arg); + int killterminal(std::string arg); + int reinjecttwrp(std::string arg); + int checkbackupname(std::string arg); + int decrypt(std::string arg); + int adbsideload(std::string arg); + int adbsideloadcancel(std::string arg); + int openrecoveryscript(std::string arg); + int installsu(std::string arg); + int fixsu(std::string arg); + int decrypt_backup(std::string arg); + int repair(std::string arg); + int resize(std::string arg); + int changefilesystem(std::string arg); + int startmtp(std::string arg); + int stopmtp(std::string arg); + int flashimage(std::string arg); + int cancelbackup(std::string arg); + int checkpartitionlifetimewrites(std::string arg); + int mountsystemtoggle(std::string arg); + int setlanguage(std::string arg); + int togglebacklight(std::string arg); + int twcmd(std::string arg); + int setbootslot(std::string arg); + int installapp(std::string arg); + + int simulate; +}; + +class GUIButton : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUIButton(xml_node<>* node); + virtual ~GUIButton(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // SetPos - Update the position of the render object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + +protected: + GUIImage* mButtonImg; + ImageResource* mButtonIcon; + GUIText* mButtonLabel; + GUIAction* mAction; + int mTextX, mTextY, mTextW, mTextH; + int mIconX, mIconY, mIconW, mIconH; + bool mRendered; + bool hasHighlightColor; + bool renderHighlight; + bool hasFill; + COLOR mFillColor; + COLOR mHighlightColor; + Placement TextPlacement; +}; + +class GUICheckbox: public GUIObject, public RenderObject, public ActionObject +{ +public: + GUICheckbox(xml_node<>* node); + virtual ~GUICheckbox(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // SetPos - Update the position of the render object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + +protected: + ImageResource* mChecked; + ImageResource* mUnchecked; + GUIText* mLabel; + int mTextX, mTextY; + int mCheckX, mCheckY, mCheckW, mCheckH; + int mLastState; + bool mRendered; + std::string mVarName; +}; + +class GUIScrollList : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUIScrollList(xml_node<>* node); + virtual ~GUIScrollList(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + // NotifyVarChange - Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // SetPos - Update the position of the render object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + +protected: + // derived classes need to implement these + // get number of items + virtual size_t GetItemCount() { return 0; } + // render a single item in rect (mRenderX, yPos, mRenderW, actualItemHeight) + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + // an item was selected + virtual void NotifySelect(size_t item_selected __unused) {} + + // render a standard-layout list item with optional icon and text + void RenderStdItem(int yPos, bool selected, ImageResource* icon, const char* text, int iconAndTextH = 0); + + enum { NO_ITEM = (size_t)-1 }; + // returns item index at coordinates or NO_ITEM if there is no item there + size_t HitTestItem(int x, int y); + + // Called by the derived class to set the max icon size so we can calculate the proper actualItemHeight and center smaller icons if the icon size varies + void SetMaxIconSize(int w, int h); + + // This will make sure that the item indicated by list_index is visible on the screen + void SetVisibleListLocation(size_t list_index); + + // Handle scrolling changes for drags and kinetic scrolling + void HandleScrolling(); + + // Returns many full rows the list is capable of displaying + int GetDisplayItemCount(); + + // Returns the size in pixels of a partial item or row size + int GetDisplayRemainder(); + +protected: + // Background + COLOR mBackgroundColor; + ImageResource* mBackground; // background image, if any, automatically centered + + // Header + COLOR mHeaderBackgroundColor; + COLOR mHeaderFontColor; + std::string mHeaderText; // Original header text without parsing any variables + std::string mLastHeaderValue; // Header text after parsing variables + bool mHeaderIsStatic; // indicates if the header is static (no need to check for changes in NotifyVarChange) + int mHeaderH; // actual header height including font, icon, padding, and separator heights + ImageResource* mHeaderIcon; + int mHeaderIconHeight, mHeaderIconWidth; // width and height of the header icon if present + int mHeaderSeparatorH; // Height of the separator between header and list items + COLOR mHeaderSeparatorColor; // color of the header separator + + // Per-item layout + FontResource* mFont; + COLOR mFontColor; + bool hasHighlightColor; // indicates if a highlight color was set + COLOR mHighlightColor; // background row highlight color + COLOR mFontHighlightColor; + int mFontHeight; + int actualItemHeight; // Actual height of each item in pixels including max icon size, font size, and padding + int maxIconWidth, maxIconHeight; // max icon width and height for the list, set by derived class in SetMaxIconSize + int mItemSpacing; // stores the spacing or padding on the y axis, part of the actualItemHeight + int mSeparatorH; // Height of the separator between items + COLOR mSeparatorColor; // color of the separator that is between items + + // Scrollbar + int mFastScrollW; // width of the fastscroll area + int mFastScrollLineW; // width of the line for fastscroll rendering + int mFastScrollRectW; // width of the rectangle for fastscroll + int mFastScrollRectH; // minimum height of the rectangle for fastscroll + COLOR mFastScrollLineColor; + COLOR mFastScrollRectColor; + + // Scrolling and dynamic state + int mFastScrollRectCurrentY; // current top of fastscroll rect relative to list top + int mFastScrollRectCurrentH; // current height of fastscroll rect + int mFastScrollRectTouchY; // offset from top of fastscroll rect where the user initially touched + bool hasScroll; // indicates that we have enough items in the list to scroll + int firstDisplayedItem; // this item goes at the top of the display list - may only be partially visible + int scrollingSpeed; // on a touch release, this is set based on the difference in the y-axis between the last 2 touches and indicates how fast the kinetic scrolling will go + int y_offset; // this is how many pixels offset in the y axis for per pixel scrolling, is always <= 0 and should never be < -actualItemHeight + bool allowSelection; // true if touched item can be selected, false for pure read-only lists and the console + size_t selectedItem; // selected item index after the initial touch, set to -1 if we are scrolling + int touchDebounce; // debounce for touches, minimum of 6 pixels but may be larger calculated based actualItemHeight / 3 + int lastY, last2Y; // last 2 touch locations, used for tracking kinetic scroll speed + int fastScroll; // indicates that the inital touch was inside the fastscroll region - makes for easier fast scrolling as the touches don't have to stay within the fast scroll region and you drag your finger + int mUpdate; // indicates that a change took place and we need to re-render + bool AddLines(std::vector<std::string>* origText, std::vector<std::string>* origColor, size_t* lastCount, std::vector<std::string>* rText, std::vector<std::string>* rColor); +}; + +class GUIFileSelector : public GUIScrollList +{ +public: + GUIFileSelector(xml_node<>* node); + virtual ~GUIFileSelector(); + +public: + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyVarChange - Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); + +protected: + struct FileData { + std::string fileName; + unsigned char fileType; // Uses d_type format from struct dirent + mode_t protection; // Uses mode_t format from stat + uid_t userId; + gid_t groupId; + off_t fileSize; + time_t lastAccess; // Uses time_t format from stat + time_t lastModified; // Uses time_t format from stat + time_t lastStatChange; // Uses time_t format from stat + }; + +protected: + virtual int GetFileList(const std::string folder); + static bool fileSort(FileData d1, FileData d2); + +protected: + std::vector<FileData> mFolderList; + std::vector<FileData> mFileList; + std::string mPathVar; // current path displayed, saved in the data manager + std::string mPathDefault; // default value for the path if none is set in mPathVar + std::string mExtn; // used for filtering the file list, for example, *.zip + std::string mVariable; // set when the user selects an item, pull path like /path/to/foo + std::string mSortVariable; // data manager variable used to change the sorting of files + std::string mSelection; // set when the user selects an item without the full path like selecting /path/to/foo would just be set to foo + int mShowFolders, mShowFiles; // indicates if the list should show folders and/or files + int mShowNavFolders; // indicates if the list should include the "up a level" item and allow you to traverse folders (nav folders are disabled for the restore list, for instance) + static int mSortOrder; // must be static because it is used by the static function fileSort + ImageResource* mFolderIcon; + ImageResource* mFileIcon; + bool updateFileList; +}; + +class GUIListBox : public GUIScrollList +{ +public: + GUIListBox(xml_node<>* node); + virtual ~GUIListBox(); + +public: + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyVarChange - Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); + +protected: + struct ListItem { + std::string displayName; + std::string variableName; + std::string variableValue; + unsigned int selected; + GUIAction* action; + std::vector<Condition> mConditions; + }; + +protected: + std::vector<ListItem> mListItems; + std::vector<size_t> mVisibleItems; // contains indexes in mListItems of visible items only + std::string mVariable; + std::string currentValue; + ImageResource* mIconSelected; + ImageResource* mIconUnselected; + bool isCheckList; + bool isTextParsed; +}; + +class GUIPartitionList : public GUIScrollList +{ +public: + GUIPartitionList(xml_node<>* node); + virtual ~GUIPartitionList(); + +public: + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(); + + // NotifyVarChange - Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); + +protected: + void MatchList(); + void SetPosition(); + +protected: + std::vector<PartitionList> mList; + std::string ListType; + std::string mVariable; + std::string selectedList; + std::string currentValue; + std::string mLastValue; + ImageResource* mIconSelected; + ImageResource* mIconUnselected; + bool updateList; +}; + +class GUITextBox : public GUIScrollList +{ +public: + GUITextBox(xml_node<>* node); + +public: + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyVarChange - Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // ScrollList interface + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); +protected: + + size_t mLastCount; + bool mIsStatic; + std::vector<std::string> mLastValue; // Parsed text - parsed for variables but not word wrapped + std::vector<std::string> mText; // Original text - not parsed for variables and not word wrapped + std::vector<std::string> rText; // Rendered text - what we actually see + +}; + +class GUIConsole : public GUIScrollList +{ +public: + GUIConsole(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // IsInRegion - Checks if the request is handled by this object + // Return 1 if this object handles the request, 0 if not + virtual int IsInRegion(int x, int y); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error (Return error to allow other handlers) + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + // ScrollList interface + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); + + static void Translate_Now(); + static void Clear_For_Retranslation(); +protected: + enum SlideoutState + { + hidden = 0, + visible, + request_hide, + request_show + }; + + ImageResource* mSlideoutImage; + size_t mLastCount; // lines from gConsole that are already split and copied into rConsole + bool scrollToEnd; // true if we want to keep tracking the last line + int mSlideoutX, mSlideoutY, mSlideoutW, mSlideoutH; + int mSlideout; + SlideoutState mSlideoutState; + std::vector<std::string> rConsole; + std::vector<std::string> rConsoleColor; + +protected: + int RenderSlideout(void); + int RenderConsole(void); +}; + +class TerminalEngine; +class GUITerminal : public GUIScrollList, public InputObject +{ +public: + GUITerminal(xml_node<>* node); + +public: + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error (Return error to allow other handlers) + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + // NotifyKey - Notify of a key press + // Return 0 on success (and consume key), >0 to pass key to next handler, and <0 on error + virtual int NotifyKey(int key, bool down); + + // character input + virtual int NotifyCharInput(int ch); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + + // ScrollList interface + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); +protected: + void InitAndResize(); + + TerminalEngine* engine; // non-visual parts of the terminal (text buffer etc.), not owned + int updateCounter; // to track if anything changed in the back-end + bool lastCondition; // to track if the condition became true and we might need to resize the terminal engine +}; + +// GUIAnimation - Used for animations +class GUIAnimation : public GUIObject, public RenderObject +{ +public: + GUIAnimation(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + +protected: + AnimationResource* mAnimation; + int mFrame; + int mFPS; + int mLoop; + int mRender; + int mUpdateCount; +}; + +class GUIProgressBar : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUIProgressBar(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyVarChange - Notify of a variable change + // Returns 0 on success, <0 on error + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + +protected: + ImageResource* mEmptyBar; + ImageResource* mFullBar; + std::string mMinValVar; + std::string mMaxValVar; + std::string mCurValVar; + float mSlide; + float mSlideInc; + int mSlideFrames; + int mLastPos; + +protected: + virtual int RenderInternal(void); // Does the actual render +}; + +class GUISlider : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUISlider(xml_node<>* node); + virtual ~GUISlider(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + +protected: + GUIAction* sAction; + GUIText* sSliderLabel; + ImageResource* sSlider; + ImageResource* sSliderUsed; + ImageResource* sTouch; + int sTouchW, sTouchH; + int sCurTouchX; + int sUpdate; +}; + +// these are ASCII codes reported via NotifyCharInput +// other special keys (arrows etc.) are reported via NotifyKey +#define KEYBOARD_ACTION 13 // CR +#define KEYBOARD_BACKSPACE 8 // Backspace +#define KEYBOARD_TAB 9 // Tab +#define KEYBOARD_SWIPE_LEFT 21 // Ctrl+U to delete line, same as in readline (used by shell etc.) +#define KEYBOARD_SWIPE_RIGHT 11 // Ctrl+K, same as in readline + +class GUIKeyboard : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUIKeyboard(xml_node<>* node); + virtual ~GUIKeyboard(); + +public: + virtual int Render(void); + virtual int Update(void); + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + virtual void SetPageFocus(int inFocus); + +protected: + struct Key + { + int key; // positive: ASCII/Unicode code; negative: Linux key code (KEY_*) + int longpresskey; + int end_x; + int layout; + }; + int ParseKey(const char* keyinfo, Key& key, int& Xindex, int keyWidth, bool longpress); + void LoadKeyLabels(xml_node<>* parent, int layout); + void DrawKey(Key& key, int keyX, int keyY, int keyW, int keyH); + int KeyCharToCtrlChar(int key); + + enum { + MAX_KEYBOARD_LAYOUTS = 5, + MAX_KEYBOARD_ROWS = 9, + MAX_KEYBOARD_KEYS = 20 + }; + struct Layout + { + ImageResource* keyboardImg; + Key keys[MAX_KEYBOARD_ROWS][MAX_KEYBOARD_KEYS]; + int row_end_y[MAX_KEYBOARD_ROWS]; + bool is_caps; + int revert_layout; + }; + Layout layouts[MAX_KEYBOARD_LAYOUTS]; + + struct KeyLabel + { + int key; // same as in struct Key + int layout_from; // 1-based; 0 for labels that apply to all layouts + int layout_to; // same as Key.layout + string text; // key label text + ImageResource* image; // image (overrides text if defined) + }; + std::vector<KeyLabel> mKeyLabels; + + // Find key at screen coordinates + Key* HitTestKey(int x, int y); + + bool mRendered; + std::string mVariable; + int currentLayout; + bool CapsLockOn; + static bool CtrlActive; // all keyboards share a common Control key state so that the Control key can be on a separate keyboard instance + int highlightRenderCount; + Key* currentKey; + bool hasHighlight, hasCapsHighlight, hasCtrlHighlight; + COLOR mHighlightColor; + COLOR mCapsHighlightColor; + COLOR mCtrlHighlightColor; + COLOR mFontColor; // for centered key labels + COLOR mFontColorSmall; // for centered key labels + FontResource* mFont; // for main key labels + FontResource* mSmallFont; // for key labels like "?123" + FontResource* mLongpressFont; // for the small longpress label in the upper right corner + int longpressOffsetX, longpressOffsetY; // distance of the longpress label from the key corner + COLOR mLongpressFontColor; + COLOR mBackgroundColor; // keyboard background color + COLOR mKeyColorAlphanumeric; // key background color + COLOR mKeyColorOther; // key background color + int mKeyMarginX, mKeyMarginY; // space around key boxes - applied to left/right and top/bottom +}; + +// GUIInput - Used for keyboard input +class GUIInput : public GUIObject, public RenderObject, public ActionObject, public InputObject +{ +public: + GUIInput(xml_node<>* node); + virtual ~GUIInput(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + virtual int NotifyKey(int key, bool down); + virtual int NotifyCharInput(int ch); + +protected: + virtual int GetSelection(int x, int y); + + // Handles displaying the text properly when chars are added, deleted, or for scrolling + void HandleTextLocation(int x); + void UpdateDisplayText(); + void HandleCursorByTouch(int x); + void HandleCursorByText(); + +protected: + GUIText* mInputText; + GUIAction* mAction; + ImageResource* mBackground; + ImageResource* mCursor; + FontResource* mFont; + std::string mVariable; + std::string mMask; + std::string mValue; + std::string displayValue; + COLOR mBackgroundColor; + COLOR mCursorColor; + int scrollingX; + int cursorX; // actual x axis location of the cursor + int lastX; + int mCursorLocation; + int mBackgroundX, mBackgroundY, mBackgroundW, mBackgroundH; + int mFontY; + int textWidth; + unsigned mFontHeight; + unsigned CursorWidth; + bool mRendered; + bool HasMask; + bool DrawCursor; + bool isLocalChange; + bool HasAllowed; + bool HasDisabled; + std::string AllowedList; + std::string DisabledList; + unsigned MinLen; + unsigned MaxLen; +}; + +class HardwareKeyboard +{ +public: + HardwareKeyboard(); + virtual ~HardwareKeyboard(); + +public: + // called by the input handler for key events + int KeyDown(int key_code); + int KeyUp(int key_code); + + // called by the input handler when holding a key down + int KeyRepeat(); + + // called by multi-key actions to suppress key-release notifications + void ConsumeKeyRelease(int key); + + bool IsKeyDown(int key_code); +private: + int mLastKey; + int mLastKeyChar; + std::set<int> mPressedKeys; +}; + +class GUISliderValue: public GUIObject, public RenderObject, public ActionObject +{ +public: + GUISliderValue(xml_node<>* node); + virtual ~GUISliderValue(); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // SetPos - Update the position of the render object + // Return 0 on success, <0 on error + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + // Notify of a variable change + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + + // SetPageFocus - Notify when a page gains or loses focus + virtual void SetPageFocus(int inFocus); + +protected: + int measureText(const std::string& str); + int valueFromPct(float pct); + float pctFromValue(int value); + void loadValue(bool force = false); + + std::string mVariable; + int mMax; + int mMin; + int mValue; + char *mValueStr; + float mValuePct; + std::string mMaxStr; + std::string mMinStr; + FontResource *mFont; + GUIText* mLabel; + int mLabelW; + COLOR mTextColor; + COLOR mLineColor; + COLOR mSliderColor; + bool mShowRange; + bool mShowCurr; + int mLineX; + int mLineY; + int mLineH; + int mLinePadding; + int mPadding; + int mSliderY; + int mSliderW; + int mSliderH; + bool mRendered; + int mFontHeight; + GUIAction *mAction; + bool mChangeOnDrag; + int mLineW; + bool mDragging; + ImageResource *mBackgroundImage; + ImageResource *mHandleImage; + ImageResource *mHandleHoverImage; +}; + +class MouseCursor : public RenderObject +{ +public: + MouseCursor(int posX, int posY); + virtual ~MouseCursor(); + + virtual int Render(void); + virtual int Update(void); + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + + void Move(int deltaX, int deltaY); + void GetPos(int& x, int& y); + void LoadData(xml_node<>* node); + void ResetData(int resX, int resY); + +private: + int m_resX; + int m_resY; + bool m_moved; + float m_speedMultiplier; + COLOR m_color; + ImageResource *m_image; + bool m_present; +}; + +class GUIPatternPassword : public GUIObject, public RenderObject, public ActionObject +{ +public: + GUIPatternPassword(xml_node<>* node); + virtual ~GUIPatternPassword(); + +public: + virtual int Render(void); + virtual int Update(void); + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + virtual int NotifyVarChange(const std::string& varName, const std::string& value); + virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); + +protected: + void CalculateDotPositions(); + void ResetActiveDots(); + void ConnectDot(int dot_idx); + void ConnectIntermediateDots(int dot_idx); + void Resize(size_t size); + int InDot(int x, int y); + bool DotUsed(int dot_idx); + std::string GeneratePassphrase(); + void PatternDrawn(); + + struct Dot { + int x; + int y; + bool active; + }; + + std::string mSizeVar; + size_t mGridSize; + + Dot* mDots; + int* mConnectedDots; + size_t mConnectedDotsLen; + int mCurLineX; + int mCurLineY; + bool mTrackingTouch; + bool mNeedRender; + + COLOR mDotColor; + COLOR mActiveDotColor; + COLOR mLineColor; + ImageResource *mDotImage; + ImageResource *mActiveDotImage; + gr_surface mDotCircle; + gr_surface mActiveDotCircle; + int mDotRadius; + int mLineWidth; + + std::string mPassVar; + GUIAction *mAction; + int mUpdate; +}; + + +// Helper APIs +xml_node<>* FindNode(xml_node<>* parent, const char* nodename, int depth = 0); +std::string LoadAttrString(xml_node<>* element, const char* attrname, const char* defaultvalue = ""); +int LoadAttrInt(xml_node<>* element, const char* attrname, int defaultvalue = 0); +int LoadAttrIntScaleX(xml_node<>* element, const char* attrname, int defaultvalue = 0); +int LoadAttrIntScaleY(xml_node<>* element, const char* attrname, int defaultvalue = 0); +COLOR LoadAttrColor(xml_node<>* element, const char* attrname, bool* found_color, COLOR defaultvalue = COLOR(0,0,0,0)); +COLOR LoadAttrColor(xml_node<>* element, const char* attrname, COLOR defaultvalue = COLOR(0,0,0,0)); +FontResource* LoadAttrFont(xml_node<>* element, const char* attrname); +ImageResource* LoadAttrImage(xml_node<>* element, const char* attrname); +AnimationResource* LoadAttrAnimation(xml_node<>* element, const char* attrname); +bool LoadPlacement(xml_node<>* node, int* x, int* y, int* w = NULL, int* h = NULL, Placement* placement = NULL); + +#endif // _OBJECTS_HEADER diff --git a/gui/pages.cpp b/gui/pages.cpp new file mode 100644 index 000000000..bf6c6921c --- /dev/null +++ b/gui/pages.cpp @@ -0,0 +1,1697 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// pages.cpp - Source to manage GUI base objects + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> +#include <dirent.h> +#include "../twrp-functions.hpp" +#include "../partitions.hpp" + +#include <string> +#include <algorithm> + +extern "C" { +#include "../twcommon.h" +#include "../minzip/SysUtil.h" +#include "../minzip/Zip.h" +#include "gui.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "blanktimer.hpp" + +// version 2 requires theme to handle power button as action togglebacklight +#define TW_THEME_VERSION 2 + +#define TW_THEME_VER_ERR -2 + +extern int gGuiRunning; + +std::map<std::string, PageSet*> PageManager::mPageSets; +PageSet* PageManager::mCurrentSet; +MouseCursor *PageManager::mMouseCursor = NULL; +HardwareKeyboard *PageManager::mHardwareKeyboard = NULL; +bool PageManager::mReloadTheme = false; +std::string PageManager::mStartPage = "main"; +std::vector<language_struct> Language_List; + +int tw_x_offset = 0; +int tw_y_offset = 0; +int tw_w_offset = 0; +int tw_h_offset = 0; + +// Helper routine to convert a string to a color declaration +int ConvertStrToColor(std::string str, COLOR* color) +{ + // Set the default, solid black + memset(color, 0, sizeof(COLOR)); + color->alpha = 255; + + // Translate variables + DataManager::GetValue(str, str); + + // Look for some defaults + if (str == "black") return 0; + else if (str == "white") { color->red = color->green = color->blue = 255; return 0; } + else if (str == "red") { color->red = 255; return 0; } + else if (str == "green") { color->green = 255; return 0; } + else if (str == "blue") { color->blue = 255; return 0; } + + // At this point, we require an RGB(A) color + if (str[0] != '#') + return -1; + + str.erase(0, 1); + + int result; + if (str.size() >= 8) { + // We have alpha channel + string alpha = str.substr(6, 2); + result = strtol(alpha.c_str(), NULL, 16); + color->alpha = result & 0x000000FF; + str.resize(6); + result = strtol(str.c_str(), NULL, 16); + color->red = (result >> 16) & 0x000000FF; + color->green = (result >> 8) & 0x000000FF; + color->blue = result & 0x000000FF; + } else { + result = strtol(str.c_str(), NULL, 16); + color->red = (result >> 16) & 0x000000FF; + color->green = (result >> 8) & 0x000000FF; + color->blue = result & 0x000000FF; + } + return 0; +} + +// Helper APIs +xml_node<>* FindNode(xml_node<>* parent, const char* nodename, int depth /* = 0 */) +{ + if (!parent) + return NULL; + + xml_node<>* child = parent->first_node(nodename); + if (child) + return child; + + if (depth == 10) { + LOGERR("Too many style loops detected.\n"); + return NULL; + } + + xml_node<>* style = parent->first_node("style"); + if (style) { + while (style) { + if (!style->first_attribute("name")) { + LOGERR("No name given for style.\n"); + continue; + } else { + std::string name = style->first_attribute("name")->value(); + xml_node<>* node = PageManager::FindStyle(name); + + if (node) { + // We found the style that was named + xml_node<>* stylenode = FindNode(node, nodename, depth + 1); + if (stylenode) + return stylenode; + } + } + style = style->next_sibling("style"); + } + } else { + // Search for stylename in the parent node <object type="foo" style="foo2"> + xml_attribute<>* attr = parent->first_attribute("style"); + // If no style is found anywhere else and the node wasn't found in the object itself + // as a special case we will search for a style that uses the same style name as the + // object type, so <object type="button"> would search for a style named "button" + if (!attr) + attr = parent->first_attribute("type"); + // if there's no attribute type, the object type must be the element name + std::string stylename = attr ? attr->value() : parent->name(); + xml_node<>* node = PageManager::FindStyle(stylename); + if (node) { + xml_node<>* stylenode = FindNode(node, nodename, depth + 1); + if (stylenode) + return stylenode; + } + } + return NULL; +} + +std::string LoadAttrString(xml_node<>* element, const char* attrname, const char* defaultvalue) +{ + if (!element) + return defaultvalue; + + xml_attribute<>* attr = element->first_attribute(attrname); + return attr ? attr->value() : defaultvalue; +} + +int LoadAttrInt(xml_node<>* element, const char* attrname, int defaultvalue) +{ + string value = LoadAttrString(element, attrname); + // resolve variables + DataManager::GetValue(value, value); + return value.empty() ? defaultvalue : atoi(value.c_str()); +} + +int LoadAttrIntScaleX(xml_node<>* element, const char* attrname, int defaultvalue) +{ + return scale_theme_x(LoadAttrInt(element, attrname, defaultvalue)); +} + +int LoadAttrIntScaleY(xml_node<>* element, const char* attrname, int defaultvalue) +{ + return scale_theme_y(LoadAttrInt(element, attrname, defaultvalue)); +} + +COLOR LoadAttrColor(xml_node<>* element, const char* attrname, bool* found_color, COLOR defaultvalue) +{ + string value = LoadAttrString(element, attrname); + *found_color = !value.empty(); + // resolve variables + DataManager::GetValue(value, value); + COLOR ret = defaultvalue; + if (ConvertStrToColor(value, &ret) == 0) + return ret; + else + return defaultvalue; +} + +COLOR LoadAttrColor(xml_node<>* element, const char* attrname, COLOR defaultvalue) +{ + bool found_color = false; + return LoadAttrColor(element, attrname, &found_color, defaultvalue); +} + +FontResource* LoadAttrFont(xml_node<>* element, const char* attrname) +{ + std::string name = LoadAttrString(element, attrname, ""); + if (name.empty()) + return NULL; + else + return PageManager::GetResources()->FindFont(name); +} + +ImageResource* LoadAttrImage(xml_node<>* element, const char* attrname) +{ + std::string name = LoadAttrString(element, attrname, ""); + if (name.empty()) + return NULL; + else + return PageManager::GetResources()->FindImage(name); +} + +AnimationResource* LoadAttrAnimation(xml_node<>* element, const char* attrname) +{ + std::string name = LoadAttrString(element, attrname, ""); + if (name.empty()) + return NULL; + else + return PageManager::GetResources()->FindAnimation(name); +} + +bool LoadPlacement(xml_node<>* node, int* x, int* y, int* w /* = NULL */, int* h /* = NULL */, Placement* placement /* = NULL */) +{ + if (!node) + return false; + + if (node->first_attribute("x")) + *x = LoadAttrIntScaleX(node, "x") + tw_x_offset; + + if (node->first_attribute("y")) + *y = LoadAttrIntScaleY(node, "y") + tw_y_offset; + + if (w && node->first_attribute("w")) + *w = LoadAttrIntScaleX(node, "w"); + + if (h && node->first_attribute("h")) + *h = LoadAttrIntScaleY(node, "h"); + + if (placement && node->first_attribute("placement")) + *placement = (Placement) LoadAttrInt(node, "placement"); + + return true; +} + +int ActionObject::SetActionPos(int x, int y, int w, int h) +{ + if (x < 0 || y < 0) + return -1; + + mActionX = x; + mActionY = y; + if (w || h) + { + mActionW = w; + mActionH = h; + } + return 0; +} + +Page::Page(xml_node<>* page, std::vector<xml_node<>*> *templates) +{ + mTouchStart = NULL; + + // We can memset the whole structure, because the alpha channel is ignored + memset(&mBackground, 0, sizeof(COLOR)); + + // With NULL, we make a console-only display + if (!page) + { + mName = "console"; + + GUIConsole* element = new GUIConsole(NULL); + mRenders.push_back(element); + mActions.push_back(element); + return; + } + + if (page->first_attribute("name")) + mName = page->first_attribute("name")->value(); + else + { + LOGERR("No page name attribute found!\n"); + return; + } + + LOGINFO("Loading page %s\n", mName.c_str()); + + // This is a recursive routine for template handling + ProcessNode(page, templates, 0); +} + +Page::~Page() +{ + for (std::vector<GUIObject*>::iterator itr = mObjects.begin(); itr != mObjects.end(); ++itr) + delete *itr; +} + +bool Page::ProcessNode(xml_node<>* page, std::vector<xml_node<>*> *templates, int depth) +{ + if (depth == 10) + { + LOGERR("Page processing depth has exceeded 10. Failing out. This is likely a recursive template.\n"); + return false; + } + + for (xml_node<>* child = page->first_node(); child; child = child->next_sibling()) + { + std::string type = child->name(); + + if (type == "background") { + mBackground = LoadAttrColor(child, "color", COLOR(0,0,0,0)); + continue; + } + + if (type == "object") { + // legacy format : <object type="..."> + xml_attribute<>* attr = child->first_attribute("type"); + type = attr ? attr->value() : "*unspecified*"; + } + + if (type == "text") + { + GUIText* element = new GUIText(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "image") + { + GUIImage* element = new GUIImage(child); + mObjects.push_back(element); + mRenders.push_back(element); + } + else if (type == "fill") + { + GUIFill* element = new GUIFill(child); + mObjects.push_back(element); + mRenders.push_back(element); + } + else if (type == "action") + { + GUIAction* element = new GUIAction(child); + mObjects.push_back(element); + mActions.push_back(element); + } + else if (type == "console") + { + GUIConsole* element = new GUIConsole(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "terminal") + { + GUITerminal* element = new GUITerminal(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + mInputs.push_back(element); + } + else if (type == "button") + { + GUIButton* element = new GUIButton(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "checkbox") + { + GUICheckbox* element = new GUICheckbox(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "fileselector") + { + GUIFileSelector* element = new GUIFileSelector(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "animation") + { + GUIAnimation* element = new GUIAnimation(child); + mObjects.push_back(element); + mRenders.push_back(element); + } + else if (type == "progressbar") + { + GUIProgressBar* element = new GUIProgressBar(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "slider") + { + GUISlider* element = new GUISlider(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "slidervalue") + { + GUISliderValue *element = new GUISliderValue(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "listbox") + { + GUIListBox* element = new GUIListBox(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "keyboard") + { + GUIKeyboard* element = new GUIKeyboard(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "input") + { + GUIInput* element = new GUIInput(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + mInputs.push_back(element); + } + else if (type == "partitionlist") + { + GUIPartitionList* element = new GUIPartitionList(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "patternpassword") + { + GUIPatternPassword* element = new GUIPatternPassword(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "textbox") + { + GUITextBox* element = new GUITextBox(child); + mObjects.push_back(element); + mRenders.push_back(element); + mActions.push_back(element); + } + else if (type == "template") + { + if (!templates || !child->first_attribute("name")) + { + LOGERR("Invalid template request.\n"); + } + else + { + std::string name = child->first_attribute("name")->value(); + xml_node<>* node; + bool node_found = false; + + // We need to find the correct template + for (std::vector<xml_node<>*>::iterator itr = templates->begin(); itr != templates->end(); itr++) { + node = (*itr)->first_node("template"); + + while (node) + { + if (!node->first_attribute("name")) + continue; + + if (name == node->first_attribute("name")->value()) + { + if (!ProcessNode(node, templates, depth + 1)) + return false; + else { + node_found = true; + break; + } + } + if (node_found) + break; + node = node->next_sibling("template"); + } + // [check] why is there no if (node_found) here too? + } + } + } + else + { + LOGERR("Unknown object type: %s.\n", type.c_str()); + } + } + return true; +} + +int Page::Render(void) +{ + // Render background + gr_color(mBackground.red, mBackground.green, mBackground.blue, mBackground.alpha); + gr_fill(0, 0, gr_fb_width(), gr_fb_height()); + + // Render remaining objects + std::vector<RenderObject*>::iterator iter; + for (iter = mRenders.begin(); iter != mRenders.end(); iter++) + { + if ((*iter)->Render()) + LOGERR("A render request has failed.\n"); + } + return 0; +} + +int Page::Update(void) +{ + int retCode = 0; + + std::vector<RenderObject*>::iterator iter; + for (iter = mRenders.begin(); iter != mRenders.end(); iter++) + { + int ret = (*iter)->Update(); + if (ret < 0) + LOGERR("An update request has failed.\n"); + else if (ret > retCode) + retCode = ret; + } + + return retCode; +} + +int Page::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + // By default, return 1 to ignore further touches if nobody is listening + int ret = 1; + + // Don't try to handle a lack of handlers + if (mActions.size() == 0) + return ret; + + // We record mTouchStart so we can pass all the touch stream to the same handler + if (state == TOUCH_START) + { + std::vector<ActionObject*>::reverse_iterator iter; + // We work backwards, from top-most element to bottom-most element + for (iter = mActions.rbegin(); iter != mActions.rend(); iter++) + { + if ((*iter)->IsInRegion(x, y)) + { + mTouchStart = (*iter); + ret = mTouchStart->NotifyTouch(state, x, y); + if (ret >= 0) + break; + mTouchStart = NULL; + } + } + } + else if (state == TOUCH_RELEASE && mTouchStart != NULL) + { + ret = mTouchStart->NotifyTouch(state, x, y); + mTouchStart = NULL; + } + else if ((state == TOUCH_DRAG || state == TOUCH_HOLD || state == TOUCH_REPEAT) && mTouchStart != NULL) + { + ret = mTouchStart->NotifyTouch(state, x, y); + } + return ret; +} + +int Page::NotifyKey(int key, bool down) +{ + std::vector<ActionObject*>::reverse_iterator iter; + + int ret = 1; + // We work backwards, from top-most element to bottom-most element + for (iter = mActions.rbegin(); iter != mActions.rend(); iter++) + { + ret = (*iter)->NotifyKey(key, down); + if (ret == 0) + return 0; + if (ret < 0) { + LOGERR("An action handler has returned an error\n"); + ret = 1; + } + } + return ret; +} + +int Page::NotifyCharInput(int ch) +{ + std::vector<InputObject*>::reverse_iterator iter; + + // We work backwards, from top-most element to bottom-most element + for (iter = mInputs.rbegin(); iter != mInputs.rend(); iter++) + { + int ret = (*iter)->NotifyCharInput(ch); + if (ret == 0) + return 0; + else if (ret < 0) + LOGERR("A char input handler has returned an error\n"); + } + return 1; +} + +int Page::SetKeyBoardFocus(int inFocus) +{ + std::vector<InputObject*>::reverse_iterator iter; + + // We work backwards, from top-most element to bottom-most element + for (iter = mInputs.rbegin(); iter != mInputs.rend(); iter++) + { + int ret = (*iter)->SetInputFocus(inFocus); + if (ret == 0) + return 0; + else if (ret < 0) + LOGERR("An input focus handler has returned an error\n"); + } + return 1; +} + +void Page::SetPageFocus(int inFocus) +{ + // Render remaining objects + std::vector<RenderObject*>::iterator iter; + for (iter = mRenders.begin(); iter != mRenders.end(); iter++) + (*iter)->SetPageFocus(inFocus); + + return; +} + +int Page::NotifyVarChange(std::string varName, std::string value) +{ + std::vector<GUIObject*>::iterator iter; + for (iter = mObjects.begin(); iter != mObjects.end(); ++iter) + { + if ((*iter)->NotifyVarChange(varName, value)) + LOGERR("An action handler errored on NotifyVarChange.\n"); + } + return 0; +} + + +// transient data for loading themes +struct LoadingContext +{ + ZipArchive* zip; // zip to load theme from, or NULL for the stock theme + std::set<std::string> filenames; // to detect cyclic includes + std::string basepath; // if zip is NULL, base path to load includes from with trailing slash, otherwise empty + std::vector<xml_document<>*> xmldocs; // all loaded xml docs + std::vector<char*> xmlbuffers; // text buffers with xml content + std::vector<xml_node<>*> styles; // refer to <styles> nodes inside xmldocs + std::vector<xml_node<>*> templates; // refer to <templates> nodes inside xmldocs + + LoadingContext() + { + zip = NULL; + } + + ~LoadingContext() + { + // free all xml buffers + for (std::vector<char*>::iterator it = xmlbuffers.begin(); it != xmlbuffers.end(); ++it) + free(*it); + } + +}; + +// for FindStyle +LoadingContext* PageManager::currentLoadingContext = NULL; + + +PageSet::PageSet() +{ + mResources = new ResourceManager; + mCurrentPage = NULL; + + set_scale_values(1, 1); // Reset any previous scaling values +} + +PageSet::~PageSet() +{ + mOverlays.clear(); + for (std::vector<Page*>::iterator itr = mPages.begin(); itr != mPages.end(); ++itr) + delete *itr; + + delete mResources; +} + +int PageSet::Load(LoadingContext& ctx, const std::string& filename) +{ + bool isMain = ctx.xmlbuffers.empty(); // if we have no files yet, remember that this is the main XML file + + if (!ctx.filenames.insert(filename).second) + // ignore already loaded files to prevent crash with cyclic includes + return 0; + + // load XML into buffer + char* xmlbuffer = PageManager::LoadFileToBuffer(filename, ctx.zip); + if (!xmlbuffer) + return -1; // error already displayed by LoadFileToBuffer + ctx.xmlbuffers.push_back(xmlbuffer); + + // parse XML + xml_document<>* doc = new xml_document<>(); + doc->parse<0>(xmlbuffer); + ctx.xmldocs.push_back(doc); + + xml_node<>* root = doc->first_node("recovery"); + if (!root) + root = doc->first_node("install"); + if (!root) { + LOGERR("Unknown root element in %s\n", filename.c_str()); + return -1; + } + + if (isMain) { + int rc = LoadDetails(ctx, root); + if (rc != 0) + return rc; + } + + LOGINFO("Loading resources...\n"); + xml_node<>* child = root->first_node("resources"); + if (child) + mResources->LoadResources(child, ctx.zip, "theme"); + + LOGINFO("Loading variables...\n"); + child = root->first_node("variables"); + if (child) + LoadVariables(child); + + LOGINFO("Loading mouse cursor...\n"); + child = root->first_node("mousecursor"); + if (child) + PageManager::LoadCursorData(child); + + LOGINFO("Loading pages...\n"); + child = root->first_node("templates"); + if (child) + ctx.templates.push_back(child); + + child = root->first_node("styles"); + if (child) + ctx.styles.push_back(child); + + // Load pages + child = root->first_node("pages"); + if (child) { + if (LoadPages(ctx, child)) { + LOGERR("PageSet::Load returning -1\n"); + return -1; + } + } + + // process includes recursively + child = root->first_node("include"); + if (child) { + xml_node<>* include = child->first_node("xmlfile"); + while (include != NULL) { + xml_attribute<>* attr = include->first_attribute("name"); + if (!attr) { + LOGERR("Skipping include/xmlfile with no name\n"); + continue; + } + + string filename = ctx.basepath + attr->value(); + LOGINFO("Including file: %s...\n", filename.c_str()); + int rc = Load(ctx, filename); + if (rc != 0) + return rc; + + include = include->next_sibling("xmlfile"); + } + } + + return 0; +} + +void PageSet::MakeEmergencyConsoleIfNeeded() +{ + if (mPages.empty()) { + mCurrentPage = new Page(NULL, NULL); // fallback console page + // TODO: since removal of non-TTF fonts, the emergency console doesn't work without a font, which might be missing too + mPages.push_back(mCurrentPage); + } +} + +int PageSet::LoadLanguage(char* languageFile, ZipArchive* package) +{ + xml_document<> lang; + xml_node<>* parent; + xml_node<>* child; + std::string resource_source; + int ret = 0; + + if (languageFile) { + printf("parsing languageFile\n"); + lang.parse<0>(languageFile); + printf("parsing languageFile done\n"); + } else { + return -1; + } + + parent = lang.first_node("language"); + if (!parent) { + LOGERR("Unable to locate language node in language file.\n"); + lang.clear(); + return -1; + } + + child = parent->first_node("display"); + if (child) { + DataManager::SetValue("tw_language_display", child->value()); + resource_source = child->value(); + } else { + LOGERR("language file does not have a display value set\n"); + DataManager::SetValue("tw_language_display", "Not Set"); + resource_source = languageFile; + } + + child = parent->first_node("resources"); + if (child) + mResources->LoadResources(child, package, resource_source); + else + ret = -1; + DataManager::SetValue("tw_backup_name", gui_lookup("auto_generate", "(Auto Generate)")); + lang.clear(); + return ret; +} + +int PageSet::LoadDetails(LoadingContext& ctx, xml_node<>* root) +{ + xml_node<>* child = root->first_node("details"); + if (child) { + int theme_ver = 0; + xml_node<>* themeversion = child->first_node("themeversion"); + if (themeversion && themeversion->value()) { + theme_ver = atoi(themeversion->value()); + } else { + LOGINFO("No themeversion in theme.\n"); + } + if (theme_ver != TW_THEME_VERSION) { + LOGINFO("theme version from xml: %i, expected %i\n", theme_ver, TW_THEME_VERSION); + if (ctx.zip) { + gui_err("theme_ver_err=Custom theme version does not match TWRP version. Using stock theme."); + return TW_THEME_VER_ERR; + } else { + gui_print_color("warning", "Stock theme version does not match TWRP version.\n"); + } + } + xml_node<>* resolution = child->first_node("resolution"); + if (resolution) { + LOGINFO("Checking resolution...\n"); + xml_attribute<>* width_attr = resolution->first_attribute("width"); + xml_attribute<>* height_attr = resolution->first_attribute("height"); + xml_attribute<>* noscale_attr = resolution->first_attribute("noscaling"); + if (width_attr && height_attr && !noscale_attr) { + int width = atoi(width_attr->value()); + int height = atoi(height_attr->value()); + int offx = 0, offy = 0; +#ifdef TW_ROUND_SCREEN + xml_node<>* roundscreen = child->first_node("roundscreen"); + if (roundscreen) { + LOGINFO("TW_ROUND_SCREEN := true, using round screen XML settings.\n"); + xml_attribute<>* offx_attr = roundscreen->first_attribute("offset_x"); + xml_attribute<>* offy_attr = roundscreen->first_attribute("offset_y"); + if (offx_attr) { + offx = atoi(offx_attr->value()); + } + if (offy_attr) { + offy = atoi(offy_attr->value()); + } + } +#endif + if (width != 0 && height != 0) { + float scale_w = (((float)gr_fb_width() + (float)tw_w_offset) - ((float)offx * 2.0)) / (float)width; + float scale_h = (((float)gr_fb_height() + (float)tw_h_offset) - ((float)offy * 2.0)) / (float)height; +#ifdef TW_ROUND_SCREEN + float scale_off_w = ((float)gr_fb_width() + (float)tw_w_offset) / (float)width; + float scale_off_h = ((float)gr_fb_height() + (float)tw_h_offset) / (float)height; + tw_x_offset = offx * scale_off_w; + tw_y_offset = offy * scale_off_h; +#endif + if (scale_w != 1 || scale_h != 1) { + LOGINFO("Scaling theme width %fx and height %fx, offsets x: %i y: %i w: %i h: %i\n", + scale_w, scale_h, tw_x_offset, tw_y_offset, tw_w_offset, tw_h_offset); + set_scale_values(scale_w, scale_h); + } + } + } else { + LOGINFO("XML does not contain width and height, no scaling will be applied\n"); + } + } else { + LOGINFO("XML contains no resolution tag, no scaling will be applied.\n"); + } + } else { + LOGINFO("XML contains no details tag, no scaling will be applied.\n"); + } + + return 0; +} + +int PageSet::SetPage(std::string page) +{ + Page* tmp = FindPage(page); + if (tmp) + { + if (mCurrentPage) mCurrentPage->SetPageFocus(0); + mCurrentPage = tmp; + mCurrentPage->SetPageFocus(1); + mCurrentPage->NotifyVarChange("", ""); + return 0; + } + else + { + LOGERR("Unable to locate page (%s)\n", page.c_str()); + } + return -1; +} + +int PageSet::SetOverlay(Page* page) +{ + if (page) { + if (mOverlays.size() >= 10) { + LOGERR("Too many overlays requested, max is 10.\n"); + return -1; + } + + std::vector<Page*>::iterator iter; + for (iter = mOverlays.begin(); iter != mOverlays.end(); iter++) { + if ((*iter)->GetName() == page->GetName()) { + mOverlays.erase(iter); + // SetOverlay() is (and should stay) the only function which + // adds to mOverlays. Then, each page can appear at most once. + break; + } + } + + page->SetPageFocus(1); + page->NotifyVarChange("", ""); + + if (!mOverlays.empty()) + mOverlays.back()->SetPageFocus(0); + + mOverlays.push_back(page); + } else { + if (!mOverlays.empty()) { + mOverlays.back()->SetPageFocus(0); + mOverlays.pop_back(); + if (!mOverlays.empty()) + mOverlays.back()->SetPageFocus(1); + else if (mCurrentPage) + mCurrentPage->SetPageFocus(1); // Just in case somehow the regular page lost focus, we'll set it again + } + } + return 0; +} + +const ResourceManager* PageSet::GetResources() +{ + return mResources; +} + +Page* PageSet::FindPage(std::string name) +{ + std::vector<Page*>::iterator iter; + + for (iter = mPages.begin(); iter != mPages.end(); iter++) + { + if (name == (*iter)->GetName()) + return (*iter); + } + return NULL; +} + +int PageSet::LoadVariables(xml_node<>* vars) +{ + xml_node<>* child; + xml_attribute<> *name, *value, *persist; + int p; + + child = vars->first_node("variable"); + while (child) + { + name = child->first_attribute("name"); + value = child->first_attribute("value"); + persist = child->first_attribute("persist"); + if (name && value) + { + if (strcmp(name->value(), "tw_x_offset") == 0) { + tw_x_offset = atoi(value->value()); + child = child->next_sibling("variable"); + continue; + } + if (strcmp(name->value(), "tw_y_offset") == 0) { + tw_y_offset = atoi(value->value()); + child = child->next_sibling("variable"); + continue; + } + if (strcmp(name->value(), "tw_w_offset") == 0) { + tw_w_offset = atoi(value->value()); + child = child->next_sibling("variable"); + continue; + } + if (strcmp(name->value(), "tw_h_offset") == 0) { + tw_h_offset = atoi(value->value()); + child = child->next_sibling("variable"); + continue; + } + p = persist ? atoi(persist->value()) : 0; + string temp = value->value(); + string valstr = gui_parse_text(temp); + + if (valstr.find("+") != string::npos) { + string val1str = valstr; + val1str = val1str.substr(0, val1str.find('+')); + string val2str = valstr; + val2str = val2str.substr(val2str.find('+') + 1, string::npos); + int val1 = atoi(val1str.c_str()); + int val2 = atoi(val2str.c_str()); + int val = val1 + val2; + + DataManager::SetValue(name->value(), val, p); + } else if (valstr.find("-") != string::npos) { + string val1str = valstr; + val1str = val1str.substr(0, val1str.find('-')); + string val2str = valstr; + val2str = val2str.substr(val2str.find('-') + 1, string::npos); + int val1 = atoi(val1str.c_str()); + int val2 = atoi(val2str.c_str()); + int val = val1 - val2; + + DataManager::SetValue(name->value(), val, p); + } else { + DataManager::SetValue(name->value(), valstr, p); + } + } + + child = child->next_sibling("variable"); + } + return 0; +} + +int PageSet::LoadPages(LoadingContext& ctx, xml_node<>* pages) +{ + xml_node<>* child; + + if (!pages) + return -1; + + child = pages->first_node("page"); + while (child != NULL) + { + Page* page = new Page(child, &ctx.templates); + if (page->GetName().empty()) + { + LOGERR("Unable to process load page\n"); + delete page; + } + else + { + mPages.push_back(page); + } + child = child->next_sibling("page"); + } + if (mPages.size() > 0) + return 0; + return -1; +} + +int PageSet::IsCurrentPage(Page* page) +{ + return ((mCurrentPage && mCurrentPage == page) ? 1 : 0); +} + +std::string PageSet::GetCurrentPage() const +{ + return mCurrentPage ? mCurrentPage->GetName() : ""; +} + +int PageSet::Render(void) +{ + int ret; + + ret = (mCurrentPage ? mCurrentPage->Render() : -1); + if (ret < 0) + return ret; + + std::vector<Page*>::iterator iter; + + for (iter = mOverlays.begin(); iter != mOverlays.end(); iter++) { + ret = ((*iter) ? (*iter)->Render() : -1); + if (ret < 0) + return ret; + } + return ret; +} + +int PageSet::Update(void) +{ + int ret; + + ret = (mCurrentPage ? mCurrentPage->Update() : -1); + if (ret < 0 || ret > 1) + return ret; + + std::vector<Page*>::iterator iter; + + for (iter = mOverlays.begin(); iter != mOverlays.end(); iter++) { + ret = ((*iter) ? (*iter)->Update() : -1); + if (ret < 0) + return ret; + } + return ret; +} + +int PageSet::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!mOverlays.empty()) + return mOverlays.back()->NotifyTouch(state, x, y); + + return (mCurrentPage ? mCurrentPage->NotifyTouch(state, x, y) : -1); +} + +int PageSet::NotifyKey(int key, bool down) +{ + if (!mOverlays.empty()) + return mOverlays.back()->NotifyKey(key, down); + + return (mCurrentPage ? mCurrentPage->NotifyKey(key, down) : -1); +} + +int PageSet::NotifyCharInput(int ch) +{ + if (!mOverlays.empty()) + return mOverlays.back()->NotifyCharInput(ch); + + return (mCurrentPage ? mCurrentPage->NotifyCharInput(ch) : -1); +} + +int PageSet::SetKeyBoardFocus(int inFocus) +{ + if (!mOverlays.empty()) + return mOverlays.back()->SetKeyBoardFocus(inFocus); + + return (mCurrentPage ? mCurrentPage->SetKeyBoardFocus(inFocus) : -1); +} + +int PageSet::NotifyVarChange(std::string varName, std::string value) +{ + std::vector<Page*>::iterator iter; + + for (iter = mOverlays.begin(); iter != mOverlays.end(); iter++) + (*iter)->NotifyVarChange(varName, value); + + return (mCurrentPage ? mCurrentPage->NotifyVarChange(varName, value) : -1); +} + +void PageSet::AddStringResource(std::string resource_source, std::string resource_name, std::string value) +{ + mResources->AddStringResource(resource_source, resource_name, value); +} + +char* PageManager::LoadFileToBuffer(std::string filename, ZipArchive* package) { + size_t len; + char* buffer = NULL; + + if (!package) { + // We can try to load the XML directly... + LOGINFO("PageManager::LoadFileToBuffer loading filename: '%s' directly\n", filename.c_str()); + struct stat st; + if (stat(filename.c_str(),&st) != 0) { + // This isn't always an error, sometimes we request files that don't exist. + return NULL; + } + + len = (size_t)st.st_size; + + buffer = (char*) malloc(len + 1); + if (!buffer) { + LOGERR("PageManager::LoadFileToBuffer failed to malloc\n"); + return NULL; + } + + int fd = open(filename.c_str(), O_RDONLY); + if (fd == -1) { + LOGERR("PageManager::LoadFileToBuffer failed to open '%s' - (%s)\n", filename.c_str(), strerror(errno)); + free(buffer); + return NULL; + } + + if (read(fd, buffer, len) < 0) { + LOGERR("PageManager::LoadFileToBuffer failed to read '%s' - (%s)\n", filename.c_str(), strerror(errno)); + free(buffer); + close(fd); + return NULL; + } + close(fd); + } else { + LOGINFO("PageManager::LoadFileToBuffer loading filename: '%s' from zip\n", filename.c_str()); + const ZipEntry* zipentry = mzFindZipEntry(package, filename.c_str()); + if (zipentry == NULL) { + LOGERR("Unable to locate '%s' in zip file\n", filename.c_str()); + return NULL; + } + + // Allocate the buffer for the file + len = mzGetZipEntryUncompLen(zipentry); + buffer = (char*) malloc(len + 1); + if (!buffer) + return NULL; + + if (!mzExtractZipEntryToBuffer(package, zipentry, (unsigned char*) buffer)) { + LOGERR("Unable to extract '%s'\n", filename.c_str()); + free(buffer); + return NULL; + } + } + // NULL-terminate the string + buffer[len] = 0x00; + return buffer; +} + +void PageManager::LoadLanguageListDir(string dir) { + if (!TWFunc::Path_Exists(dir)) { + LOGERR("LoadLanguageListDir '%s' path not found\n", dir.c_str()); + return; + } + + DIR *d = opendir(dir.c_str()); + struct dirent *p; + + if (d == NULL) { + LOGERR("LoadLanguageListDir error opening dir: '%s', %s\n", dir.c_str(), strerror(errno)); + return; + } + + while ((p = readdir(d))) { + if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..") || strlen(p->d_name) < 5) + continue; + + string file = p->d_name; + if (file.substr(strlen(p->d_name) - 4) != ".xml") + continue; + string path = dir + p->d_name; + string file_no_extn = file.substr(0, strlen(p->d_name) - 4); + struct language_struct language_entry; + language_entry.filename = file_no_extn; + char* xmlFile = PageManager::LoadFileToBuffer(dir + p->d_name, NULL); + if (xmlFile == NULL) { + LOGERR("LoadLanguageListDir unable to load '%s'\n", language_entry.filename.c_str()); + continue; + } + xml_document<> *doc = new xml_document<>(); + doc->parse<0>(xmlFile); + + xml_node<>* parent = doc->first_node("language"); + if (!parent) { + LOGERR("Invalid language XML file '%s'\n", language_entry.filename.c_str()); + } else { + xml_node<>* child = parent->first_node("display"); + if (child) { + language_entry.displayvalue = child->value(); + } else { + LOGERR("No display value for '%s'\n", language_entry.filename.c_str()); + language_entry.displayvalue = language_entry.filename; + } + Language_List.push_back(language_entry); + } + doc->clear(); + delete doc; + free(xmlFile); + } + closedir(d); +} + +void PageManager::LoadLanguageList(ZipArchive* package) { + Language_List.clear(); + if (TWFunc::Path_Exists(TWRES "customlanguages")) + TWFunc::removeDir(TWRES "customlanguages", true); + if (package) { + TWFunc::Recursive_Mkdir(TWRES "customlanguages"); + struct utimbuf timestamp = { 1217592000, 1217592000 }; // 8/1/2008 default + mzExtractRecursive(package, "languages", TWRES "customlanguages/", ×tamp, NULL, NULL, NULL); + LoadLanguageListDir(TWRES "customlanguages/"); + } else { + LoadLanguageListDir(TWRES "languages/"); + } + + std::sort(Language_List.begin(), Language_List.end()); +} + +void PageManager::LoadLanguage(string filename) { + string actual_filename; + if (TWFunc::Path_Exists(TWRES "customlanguages/" + filename + ".xml")) + actual_filename = TWRES "customlanguages/" + filename + ".xml"; + else + actual_filename = TWRES "languages/" + filename + ".xml"; + char* xmlFile = PageManager::LoadFileToBuffer(actual_filename, NULL); + if (xmlFile == NULL) + LOGERR("Unable to load '%s'\n", actual_filename.c_str()); + else { + mCurrentSet->LoadLanguage(xmlFile, NULL); + free(xmlFile); + } + PartitionManager.Translate_Partition_Display_Names(); +} + +int PageManager::LoadPackage(std::string name, std::string package, std::string startpage) +{ + std::string mainxmlfilename = package; + ZipArchive zip; + char* languageFile = NULL; + char* baseLanguageFile = NULL; + PageSet* pageSet = NULL; + int ret; + MemMapping map; + + mReloadTheme = false; + mStartPage = startpage; + + // init the loading context + LoadingContext ctx; + + // Open the XML file + LOGINFO("Loading package: %s (%s)\n", name.c_str(), package.c_str()); + if (package.size() > 4 && package.substr(package.size() - 4) != ".zip") + { + LOGINFO("Load XML directly\n"); + tw_x_offset = TW_X_OFFSET; + tw_y_offset = TW_Y_OFFSET; + tw_w_offset = TW_W_OFFSET; + tw_h_offset = TW_H_OFFSET; + if (name != "splash") { + LoadLanguageList(NULL); + languageFile = LoadFileToBuffer(TWRES "languages/en.xml", NULL); + } + ctx.basepath = TWRES; + } + else + { + LOGINFO("Loading zip theme\n"); + tw_x_offset = 0; + tw_y_offset = 0; + tw_w_offset = 0; + tw_h_offset = 0; + if (!TWFunc::Path_Exists(package)) + return -1; + if (sysMapFile(package.c_str(), &map) != 0) { + LOGERR("Failed to map '%s'\n", package.c_str()); + goto error; + } + if (mzOpenZipArchive(map.addr, map.length, &zip)) { + LOGERR("Unable to open zip archive '%s'\n", package.c_str()); + sysReleaseMap(&map); + goto error; + } + ctx.zip = &zip; + mainxmlfilename = "ui.xml"; + LoadLanguageList(ctx.zip); + languageFile = LoadFileToBuffer("languages/en.xml", ctx.zip); + baseLanguageFile = LoadFileToBuffer(TWRES "languages/en.xml", NULL); + } + + // Before loading, mCurrentSet must be the loading package so we can find resources + pageSet = mCurrentSet; + mCurrentSet = new PageSet(); + + if (baseLanguageFile) { + mCurrentSet->LoadLanguage(baseLanguageFile, NULL); + free(baseLanguageFile); + } + + if (languageFile) { + mCurrentSet->LoadLanguage(languageFile, ctx.zip); + free(languageFile); + } + + // Load and parse the XML and all includes + currentLoadingContext = &ctx; // required to find styles + ret = mCurrentSet->Load(ctx, mainxmlfilename); + currentLoadingContext = NULL; + + if (ret == 0) { + mCurrentSet->SetPage(startpage); + mPageSets.insert(std::pair<std::string, PageSet*>(name, mCurrentSet)); + } else { + if (ret != TW_THEME_VER_ERR) + LOGERR("Package %s failed to load.\n", name.c_str()); + } + + // reset to previous pageset + mCurrentSet = pageSet; + + if (ctx.zip) { + mzCloseZipArchive(ctx.zip); + sysReleaseMap(&map); + } + return ret; + +error: + // Sometimes we get here without a real error + if (ctx.zip) { + mzCloseZipArchive(ctx.zip); + sysReleaseMap(&map); + } + return -1; +} + +PageSet* PageManager::FindPackage(std::string name) +{ + std::map<std::string, PageSet*>::iterator iter; + + iter = mPageSets.find(name); + if (iter != mPageSets.end()) + return (*iter).second; + + LOGERR("Unable to locate package %s\n", name.c_str()); + return NULL; +} + +PageSet* PageManager::SelectPackage(std::string name) +{ + LOGINFO("Switching packages (%s)\n", name.c_str()); + PageSet* tmp; + + tmp = FindPackage(name); + if (tmp) + { + mCurrentSet = tmp; + mCurrentSet->MakeEmergencyConsoleIfNeeded(); + mCurrentSet->NotifyVarChange("", ""); + } + else + LOGERR("Unable to find package.\n"); + + return mCurrentSet; +} + +int PageManager::ReloadPackage(std::string name, std::string package) +{ + std::map<std::string, PageSet*>::iterator iter; + + mReloadTheme = false; + + iter = mPageSets.find(name); + if (iter == mPageSets.end()) + return -1; + + if (mMouseCursor) + mMouseCursor->ResetData(gr_fb_width(), gr_fb_height()); + + PageSet* set = (*iter).second; + mPageSets.erase(iter); + + if (LoadPackage(name, package, mStartPage) != 0) + { + LOGINFO("Failed to load package '%s'.\n", package.c_str()); + mPageSets.insert(std::pair<std::string, PageSet*>(name, set)); + return -1; + } + if (mCurrentSet == set) + SelectPackage(name); + delete set; + GUIConsole::Translate_Now(); + return 0; +} + +void PageManager::ReleasePackage(std::string name) +{ + std::map<std::string, PageSet*>::iterator iter; + + iter = mPageSets.find(name); + if (iter == mPageSets.end()) + return; + + PageSet* set = (*iter).second; + mPageSets.erase(iter); + delete set; + if (set == mCurrentSet) + mCurrentSet = NULL; + return; +} + +int PageManager::RunReload() { + int ret_val = 0; + std::string theme_path; + + if (!mReloadTheme) + return 0; + + mReloadTheme = false; + theme_path = DataManager::GetSettingsStoragePath(); + if (PartitionManager.Mount_By_Path(theme_path.c_str(), 1) < 0) { + LOGERR("Unable to mount %s during gui_reload_theme function.\n", theme_path.c_str()); + ret_val = 1; + } + + theme_path += "/TWRP/theme/ui.zip"; + if (ret_val != 0 || ReloadPackage("TWRP", theme_path) != 0) + { + // Loading the custom theme failed - try loading the stock theme + LOGINFO("Attempting to reload stock theme...\n"); + if (ReloadPackage("TWRP", TWRES "ui.xml")) + { + LOGERR("Failed to load base packages.\n"); + ret_val = 1; + } + } + if (ret_val == 0) { + if (DataManager::GetStrValue("tw_language") != "en.xml") { + LOGINFO("Loading language '%s'\n", DataManager::GetStrValue("tw_language").c_str()); + LoadLanguage(DataManager::GetStrValue("tw_language")); + } + } + + // This makes the console re-translate + GUIConsole::Clear_For_Retranslation(); + + return ret_val; +} + +void PageManager::RequestReload() { + mReloadTheme = true; +} + +void PageManager::SetStartPage(const std::string& page_name) { + mStartPage = page_name; +} + +int PageManager::ChangePage(std::string name) +{ + DataManager::SetValue("tw_operation_state", 0); + int ret = (mCurrentSet ? mCurrentSet->SetPage(name) : -1); + return ret; +} + +std::string PageManager::GetCurrentPage() +{ + return mCurrentSet ? mCurrentSet->GetCurrentPage() : ""; +} + +int PageManager::ChangeOverlay(std::string name) +{ + if (name.empty()) + return mCurrentSet->SetOverlay(NULL); + else + { + Page* page = mCurrentSet ? mCurrentSet->FindPage(name) : NULL; + return mCurrentSet->SetOverlay(page); + } +} + +const ResourceManager* PageManager::GetResources() +{ + return (mCurrentSet ? mCurrentSet->GetResources() : NULL); +} + +int PageManager::IsCurrentPage(Page* page) +{ + return (mCurrentSet ? mCurrentSet->IsCurrentPage(page) : 0); +} + +int PageManager::Render(void) +{ + if (blankTimer.isScreenOff()) + return 0; + + int res = (mCurrentSet ? mCurrentSet->Render() : -1); + if (mMouseCursor) + mMouseCursor->Render(); + return res; +} + +HardwareKeyboard *PageManager::GetHardwareKeyboard() +{ + if (!mHardwareKeyboard) + mHardwareKeyboard = new HardwareKeyboard(); + return mHardwareKeyboard; +} + +xml_node<>* PageManager::FindStyle(std::string name) +{ + if (!currentLoadingContext) + { + LOGERR("FindStyle works only while loading a theme.\n"); + return NULL; + } + + for (std::vector<xml_node<>*>::iterator itr = currentLoadingContext->styles.begin(); itr != currentLoadingContext->styles.end(); itr++) { + xml_node<>* node = (*itr)->first_node("style"); + + while (node) { + if (!node->first_attribute("name")) + continue; + + if (name == node->first_attribute("name")->value()) + return node; + node = node->next_sibling("style"); + } + } + return NULL; +} + +MouseCursor *PageManager::GetMouseCursor() +{ + if (!mMouseCursor) + mMouseCursor = new MouseCursor(gr_fb_width(), gr_fb_height()); + return mMouseCursor; +} + +void PageManager::LoadCursorData(xml_node<>* node) +{ + if (!mMouseCursor) + mMouseCursor = new MouseCursor(gr_fb_width(), gr_fb_height()); + + mMouseCursor->LoadData(node); +} + +int PageManager::Update(void) +{ + if (blankTimer.isScreenOff()) + return 0; + + if (RunReload()) + return -2; + + int res = (mCurrentSet ? mCurrentSet->Update() : -1); + + if (mMouseCursor) + { + int c_res = mMouseCursor->Update(); + if (c_res > res) + res = c_res; + } + return res; +} + +int PageManager::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + return (mCurrentSet ? mCurrentSet->NotifyTouch(state, x, y) : -1); +} + +int PageManager::NotifyKey(int key, bool down) +{ + return (mCurrentSet ? mCurrentSet->NotifyKey(key, down) : -1); +} + +int PageManager::NotifyCharInput(int ch) +{ + return (mCurrentSet ? mCurrentSet->NotifyCharInput(ch) : -1); +} + +int PageManager::SetKeyBoardFocus(int inFocus) +{ + return (mCurrentSet ? mCurrentSet->SetKeyBoardFocus(inFocus) : -1); +} + +int PageManager::NotifyVarChange(std::string varName, std::string value) +{ + return (mCurrentSet ? mCurrentSet->NotifyVarChange(varName, value) : -1); +} + +void PageManager::AddStringResource(std::string resource_source, std::string resource_name, std::string value) +{ + if (mCurrentSet) + mCurrentSet->AddStringResource(resource_source, resource_name, value); +} + +extern "C" void gui_notifyVarChange(const char *name, const char* value) +{ + if (!gGuiRunning) + return; + + PageManager::NotifyVarChange(name, value); +} diff --git a/gui/pages.h b/gui/pages.h new file mode 100644 index 000000000..d407162a2 --- /dev/null +++ b/gui/pages.h @@ -0,0 +1,7 @@ +#ifndef _PAGES_HEADER +#define _PAGES_HEADER + +void gui_notifyVarChange(const char *name, const char* value); + +#endif // _PAGES_HEADER + diff --git a/gui/pages.hpp b/gui/pages.hpp new file mode 100644 index 000000000..1e71b10e0 --- /dev/null +++ b/gui/pages.hpp @@ -0,0 +1,212 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// pages.hpp - Base classes for page manager of GUI + +#ifndef _PAGES_HEADER_HPP +#define _PAGES_HEADER_HPP + +#include "../minzip/Zip.h" +#include <vector> +#include <map> +#include <string> +#include "rapidxml.hpp" +#include "gui.hpp" +using namespace rapidxml; + +enum TOUCH_STATE { + TOUCH_START = 0, + TOUCH_DRAG = 1, + TOUCH_RELEASE = 2, + TOUCH_HOLD = 3, + TOUCH_REPEAT = 4 +}; + +struct COLOR { + unsigned char red; + unsigned char green; + unsigned char blue; + unsigned char alpha; + COLOR() : red(0), green(0), blue(0), alpha(0) {} + COLOR(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255) + : red(r), green(g), blue(b), alpha(a) {} +}; + +struct language_struct { + std::string filename; + std::string displayvalue; +}; + +inline bool operator < (const language_struct& language1, const language_struct& language2) +{ + return language1.displayvalue < language2.displayvalue; +} + +extern std::vector<language_struct> Language_List; + +// Utility Functions +int ConvertStrToColor(std::string str, COLOR* color); +int gui_forceRender(void); +int gui_changePage(std::string newPage); +int gui_changeOverlay(std::string newPage); + +class Resource; +class ResourceManager; +class RenderObject; +class ActionObject; +class InputObject; +class MouseCursor; +class GUIObject; +class HardwareKeyboard; + +class Page +{ +public: + Page(xml_node<>* page, std::vector<xml_node<>*> *templates); + virtual ~Page(); + + std::string GetName(void) { return mName; } + +public: + virtual int Render(void); + virtual int Update(void); + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + virtual int NotifyKey(int key, bool down); + virtual int NotifyCharInput(int ch); + virtual int SetKeyBoardFocus(int inFocus); + virtual int NotifyVarChange(std::string varName, std::string value); + virtual void SetPageFocus(int inFocus); + +protected: + std::string mName; + std::vector<GUIObject*> mObjects; + std::vector<RenderObject*> mRenders; + std::vector<ActionObject*> mActions; + std::vector<InputObject*> mInputs; + + ActionObject* mTouchStart; + COLOR mBackground; + +protected: + bool ProcessNode(xml_node<>* page, std::vector<xml_node<>*> *templates, int depth); +}; + +struct LoadingContext; + +class PageSet +{ +public: + PageSet(); + virtual ~PageSet(); + +public: + int Load(LoadingContext& ctx, const std::string& filename); + int LoadLanguage(char* languageFile, ZipArchive* package); + void MakeEmergencyConsoleIfNeeded(); + + Page* FindPage(std::string name); + int SetPage(std::string page); + int SetOverlay(Page* page); + const ResourceManager* GetResources(); + + // Helper routine for identifing if we're the current page + int IsCurrentPage(Page* page); + std::string GetCurrentPage() const; + + // These are routing routines + int Render(void); + int Update(void); + int NotifyTouch(TOUCH_STATE state, int x, int y); + int NotifyKey(int key, bool down); + int NotifyCharInput(int ch); + int SetKeyBoardFocus(int inFocus); + int NotifyVarChange(std::string varName, std::string value); + + void AddStringResource(std::string resource_source, std::string resource_name, std::string value); + +protected: + int LoadDetails(LoadingContext& ctx, xml_node<>* root); + int LoadPages(LoadingContext& ctx, xml_node<>* pages); + int LoadVariables(xml_node<>* vars); + +protected: + ResourceManager* mResources; + std::vector<Page*> mPages; + Page* mCurrentPage; + std::vector<Page*> mOverlays; // Special case for popup dialogs and the lock screen +}; + +class PageManager +{ +public: + // Used by GUI + static char* LoadFileToBuffer(std::string filename, ZipArchive* package); + static void LoadLanguageList(ZipArchive* package); + static void LoadLanguage(std::string filename); + static int LoadPackage(std::string name, std::string package, std::string startpage); + static PageSet* SelectPackage(std::string name); + static int ReloadPackage(std::string name, std::string package); + static void ReleasePackage(std::string name); + static int RunReload(); + static void RequestReload(); + static void SetStartPage(const std::string& page_name); + + // Used for actions and pages + static int ChangePage(std::string name); + static int ChangeOverlay(std::string name); + static const ResourceManager* GetResources(); + static std::string GetCurrentPage(); + + // Helper to identify if a particular page is the active page + static int IsCurrentPage(Page* page); + + // These are routing routines + static int Render(void); + static int Update(void); + static int NotifyTouch(TOUCH_STATE state, int x, int y); + static int NotifyKey(int key, bool down); + static int NotifyCharInput(int ch); + static int SetKeyBoardFocus(int inFocus); + static int NotifyVarChange(std::string varName, std::string value); + + static MouseCursor *GetMouseCursor(); + static void LoadCursorData(xml_node<>* node); + + static HardwareKeyboard *GetHardwareKeyboard(); + + static xml_node<>* FindStyle(std::string name); + static void AddStringResource(std::string resource_source, std::string resource_name, std::string value); + +protected: + static PageSet* FindPackage(std::string name); + static void LoadLanguageListDir(std::string dir); + static void Translate_Partition(const char* path, const char* resource_name, const char* default_value); + static void Translate_Partition(const char* path, const char* resource_name, const char* default_value, const char* storage_resource_name, const char* storage_default_value); + static void Translate_Partition_Display_Names(); + +protected: + static std::map<std::string, PageSet*> mPageSets; + static PageSet* mCurrentSet; + static MouseCursor *mMouseCursor; + static HardwareKeyboard *mHardwareKeyboard; + static bool mReloadTheme; + static std::string mStartPage; + static LoadingContext* currentLoadingContext; +}; + +#endif // _PAGES_HEADER_HPP diff --git a/gui/partitionlist.cpp b/gui/partitionlist.cpp new file mode 100644 index 000000000..c85339152 --- /dev/null +++ b/gui/partitionlist.cpp @@ -0,0 +1,283 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <string.h> +#include <sys/stat.h> +#include <dirent.h> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" +#include "../partitions.hpp" + +GUIPartitionList::GUIPartitionList(xml_node<>* node) : GUIScrollList(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mIconSelected = mIconUnselected = NULL; + mUpdate = 0; + updateList = false; + + child = FindNode(node, "icon"); + if (child) + { + mIconSelected = LoadAttrImage(child, "selected"); + mIconUnselected = LoadAttrImage(child, "unselected"); + } + + // Handle the result variable + child = FindNode(node, "data"); + if (child) + { + attr = child->first_attribute("name"); + if (attr) + mVariable = attr->value(); + attr = child->first_attribute("selectedlist"); + if (attr) + selectedList = attr->value(); + } + + int iconWidth = std::max(mIconSelected->GetWidth(), mIconUnselected->GetWidth()); + int iconHeight = std::max(mIconSelected->GetHeight(), mIconUnselected->GetHeight()); + SetMaxIconSize(iconWidth, iconHeight); + + child = FindNode(node, "listtype"); + if (child && (attr = child->first_attribute("name"))) { + ListType = attr->value(); + updateList = true; + } else { + mList.clear(); + LOGERR("No partition listtype specified for partitionlist GUI element\n"); + return; + } +} + +GUIPartitionList::~GUIPartitionList() +{ +} + +int GUIPartitionList::Update(void) +{ + if (!isConditionTrue()) + return 0; + + // Check for changes in mount points if the list type is mount and update the list and render if needed + if (ListType == "mount") { + int listSize = mList.size(); + for (int i = 0; i < listSize; i++) { + if (PartitionManager.Is_Mounted_By_Path(mList.at(i).Mount_Point) && !mList.at(i).selected) { + mList.at(i).selected = 1; + mUpdate = 1; + } else if (!PartitionManager.Is_Mounted_By_Path(mList.at(i).Mount_Point) && mList.at(i).selected) { + mList.at(i).selected = 0; + mUpdate = 1; + } + } + } + + GUIScrollList::Update(); + + if (updateList) { + // Completely update the list if needed -- Used primarily for + // restore as the list for restore will change depending on what + // partitions were backed up + mList.clear(); + PartitionManager.Get_Partition_List(ListType, &mList); + SetVisibleListLocation(0); + updateList = false; + mUpdate = 1; + if (ListType == "backup" || ListType == "flashimg") + MatchList(); + } + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + + return 0; +} + +int GUIPartitionList::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIScrollList::NotifyVarChange(varName, value); + + if (!isConditionTrue()) + return 0; + + if (varName == mVariable && !mUpdate) + { + if (ListType == "storage") { + currentValue = value; + SetPosition(); + } else if (ListType == "backup") { + MatchList(); + } else if (ListType == "restore") { + updateList = true; + SetVisibleListLocation(0); + } + + mUpdate = 1; + return 0; + } + return 0; +} + +void GUIPartitionList::SetPageFocus(int inFocus) +{ + GUIScrollList::SetPageFocus(inFocus); + if (inFocus) { + if (ListType == "storage" || ListType == "flashimg") { + DataManager::GetValue(mVariable, currentValue); + SetPosition(); + } + updateList = true; + mUpdate = 1; + } +} + +void GUIPartitionList::MatchList(void) { + int i, listSize = mList.size(); + string variablelist, searchvalue; + size_t pos; + + DataManager::GetValue(mVariable, variablelist); + + for (i = 0; i < listSize; i++) { + searchvalue = mList.at(i).Mount_Point + ";"; + pos = variablelist.find(searchvalue); + if (pos != string::npos) { + mList.at(i).selected = 1; + } else { + mList.at(i).selected = 0; + } + } +} + +void GUIPartitionList::SetPosition() { + int listSize = mList.size(); + + SetVisibleListLocation(0); + for (int i = 0; i < listSize; i++) { + if (mList.at(i).Mount_Point == currentValue) { + mList.at(i).selected = 1; + SetVisibleListLocation(i); + } else { + mList.at(i).selected = 0; + } + } +} + +size_t GUIPartitionList::GetItemCount() +{ + return mList.size(); +} + +void GUIPartitionList::RenderItem(size_t itemindex, int yPos, bool selected) +{ + // note: the "selected" parameter above is for the currently touched item + // don't confuse it with the more persistent "selected" flag per list item used below + ImageResource* icon = mList.at(itemindex).selected ? mIconSelected : mIconUnselected; + const std::string& text = mList.at(itemindex).Display_Name; + + RenderStdItem(yPos, selected, icon, text.c_str()); +} + +void GUIPartitionList::NotifySelect(size_t item_selected) +{ + if (item_selected < mList.size()) { + int listSize = mList.size(); + if (ListType == "mount") { + if (!mList.at(item_selected).selected) { + if (PartitionManager.Mount_By_Path(mList.at(item_selected).Mount_Point, true)) { + mList.at(item_selected).selected = 1; + PartitionManager.Add_MTP_Storage(mList.at(item_selected).Mount_Point); + mUpdate = 1; + } + } else { + if (PartitionManager.UnMount_By_Path(mList.at(item_selected).Mount_Point, true)) { + mList.at(item_selected).selected = 0; + mUpdate = 1; + } + } + } else if (!mVariable.empty()) { + if (ListType == "storage") { + int i; + std::string str = mList.at(item_selected).Mount_Point; + bool update_size = false; + TWPartition* Part = PartitionManager.Find_Partition_By_Path(str); + if (Part == NULL) { + LOGERR("Unable to locate partition for '%s'\n", str.c_str()); + return; + } + if (!Part->Is_Mounted() && Part->Removable) + update_size = true; + if (!Part->Mount(true)) { + // Do Nothing + } else if (update_size && !Part->Update_Size(true)) { + // Do Nothing + } else { + for (i=0; i<listSize; i++) + mList.at(i).selected = 0; + + if (update_size) { + char free_space[255]; + sprintf(free_space, "%llu", Part->Free / 1024 / 1024); + mList.at(item_selected).Display_Name = Part->Storage_Name + " ("; + mList.at(item_selected).Display_Name += free_space; + mList.at(item_selected).Display_Name += "MB)"; + } + mList.at(item_selected).selected = 1; + mUpdate = 1; + + DataManager::SetValue(mVariable, str); + } + } else { + if (ListType == "flashimg") { // only one item can be selected for flashing images + for (int i=0; i<listSize; i++) + mList.at(i).selected = 0; + } + if (mList.at(item_selected).selected) + mList.at(item_selected).selected = 0; + else + mList.at(item_selected).selected = 1; + + int i; + string variablelist; + for (i=0; i<listSize; i++) { + if (mList.at(i).selected) { + variablelist += mList.at(i).Mount_Point + ";"; + } + } + + mUpdate = 1; + if (selectedList.empty()) + DataManager::SetValue(mVariable, variablelist); + else + DataManager::SetValue(selectedList, variablelist); + } + } + } +} diff --git a/gui/patternpassword.cpp b/gui/patternpassword.cpp new file mode 100644 index 000000000..c31737f32 --- /dev/null +++ b/gui/patternpassword.cpp @@ -0,0 +1,487 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/types.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> +#include <sstream> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" +#include "../twrp-functions.hpp" +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIPatternPassword::GUIPatternPassword(xml_node<>* node) + : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + // 3x3 is the default. + mGridSize = 3; + mDots = new Dot[mGridSize * mGridSize]; + mConnectedDots = new int[mGridSize * mGridSize]; + + ResetActiveDots(); + mTrackingTouch = false; + mNeedRender = true; + + ConvertStrToColor("blue", &mDotColor); + ConvertStrToColor("white", &mActiveDotColor); + ConvertStrToColor("blue", &mLineColor); + + mDotImage = mActiveDotImage = NULL; + mDotCircle = mActiveDotCircle = NULL; + mDotRadius = 50; + mLineWidth = 35; + + mAction = NULL; + mUpdate = 0; + + if (!node) + return; + + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH, &mPlacement); + + mAction = new GUIAction(node); + + child = FindNode(node, "dot"); + if (child) + { + mDotColor = LoadAttrColor(child, "color", mDotColor); + mActiveDotColor = LoadAttrColor(child, "activecolor", mActiveDotColor); + mDotRadius = LoadAttrIntScaleX(child, "radius", mDotRadius); + + mDotImage = LoadAttrImage(child, "image"); + mActiveDotImage = LoadAttrImage(child, "activeimage"); + } + + child = FindNode(node, "line"); + if (child) + { + mLineColor = LoadAttrColor(child, "color", mLineColor); + mLineWidth = LoadAttrIntScaleX(child, "width", mLineWidth); + } + + child = FindNode(node, "data"); + if (child) + mPassVar = LoadAttrString(child, "name", ""); + + child = FindNode(node, "size"); + if (child) { + mSizeVar = LoadAttrString(child, "name", ""); + + // Use the configured default, if set. + size_t size = LoadAttrInt(child, "default", mGridSize); + Resize(size); + } + + if (!mDotImage || !mDotImage->GetResource() || !mActiveDotImage || !mActiveDotImage->GetResource()) + { + mDotCircle = gr_render_circle(mDotRadius, mDotColor.red, mDotColor.green, mDotColor.blue, mDotColor.alpha); + mActiveDotCircle = gr_render_circle(mDotRadius/2, mActiveDotColor.red, mActiveDotColor.green, mActiveDotColor.blue, mActiveDotColor.alpha); + } + else + mDotRadius = mDotImage->GetWidth()/2; + + SetRenderPos(mRenderX, mRenderY, mRenderW, mRenderH); +} + +GUIPatternPassword::~GUIPatternPassword() +{ + delete mDotImage; + delete mActiveDotImage; + delete mAction; + + delete[] mDots; + delete[] mConnectedDots; + + if (mDotCircle) + gr_free_surface(mDotCircle); + + if (mActiveDotCircle) + gr_free_surface(mActiveDotCircle); +} + +void GUIPatternPassword::ResetActiveDots() +{ + mConnectedDotsLen = 0; + mCurLineX = mCurLineY = -1; + for (size_t i = 0; i < mGridSize * mGridSize; ++i) + mDots[i].active = false; +} + +int GUIPatternPassword::SetRenderPos(int x, int y, int w, int h) +{ + mRenderX = x; + mRenderY = y; + + if (w || h) + { + mRenderW = w; + mRenderH = h; + + mAction->SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + } + + CalculateDotPositions(); + return 0; +} + +void GUIPatternPassword::CalculateDotPositions(void) +{ + const int num_gaps = mGridSize - 1; + const int step_x = (mRenderW - mDotRadius*2) / num_gaps; + const int step_y = (mRenderH - mDotRadius*2) / num_gaps; + int x = mRenderX; + int y = mRenderY; + + /* Order is important for keyphrase generation: + * + * 0 1 2 3 ... n-1 + * n n+1 n+2 n+3 ... 2n-1 + * 2n 2n+1 2n+2 2n+3 ... 3n-1 + * 3n 3n+1 3n+2 3n+3 ... 4n-1 + * : : : : + * n*n-1 + */ + + for (size_t r = 0; r < mGridSize; ++r) + { + for (size_t c = 0; c < mGridSize; ++c) + { + mDots[mGridSize*r + c].x = x; + mDots[mGridSize*r + c].y = y; + x += step_x; + } + x = mRenderX; + y += step_y; + } +} + +int GUIPatternPassword::Render(void) +{ + if (!isConditionTrue()) + return 0; + + gr_color(mLineColor.red, mLineColor.green, mLineColor.blue, mLineColor.alpha); + for (size_t i = 1; i < mConnectedDotsLen; ++i) { + const Dot& dp = mDots[mConnectedDots[i-1]]; + const Dot& dc = mDots[mConnectedDots[i]]; + gr_line(dp.x + mDotRadius, dp.y + mDotRadius, dc.x + mDotRadius, dc.y + mDotRadius, mLineWidth); + } + + if (mConnectedDotsLen > 0 && mTrackingTouch) { + const Dot& dc = mDots[mConnectedDots[mConnectedDotsLen-1]]; + gr_line(dc.x + mDotRadius, dc.y + mDotRadius, mCurLineX, mCurLineY, mLineWidth); + } + + for (size_t i = 0; i < mGridSize * mGridSize; ++i) { + if (mDotCircle) { + gr_blit(mDotCircle, 0, 0, gr_get_width(mDotCircle), gr_get_height(mDotCircle), mDots[i].x, mDots[i].y); + if (mDots[i].active) { + gr_blit(mActiveDotCircle, 0, 0, gr_get_width(mActiveDotCircle), gr_get_height(mActiveDotCircle), mDots[i].x + mDotRadius/2, mDots[i].y + mDotRadius/2); + } + } else { + if (mDots[i].active) { + gr_blit(mActiveDotImage->GetResource(), 0, 0, mActiveDotImage->GetWidth(), mActiveDotImage->GetHeight(), + mDots[i].x + (mDotRadius - mActiveDotImage->GetWidth()/2), mDots[i].y + (mDotRadius - mActiveDotImage->GetHeight()/2)); + } else { + gr_blit(mDotImage->GetResource(), 0, 0, mDotImage->GetWidth(), mDotImage->GetHeight(), mDots[i].x, mDots[i].y); + } + } + } + return 0; +} + +int GUIPatternPassword::Update(void) +{ + if (!isConditionTrue()) + return 0; + + int res = mNeedRender ? 2 : 1; + mNeedRender = false; + return res; +} + +void GUIPatternPassword::Resize(size_t n) { + if (mGridSize == n) + return; + + delete[] mDots; + delete[] mConnectedDots; + + mGridSize = n; + mDots = new Dot[n*n]; + mConnectedDots = new int[n*n]; + + ResetActiveDots(); + CalculateDotPositions(); + mTrackingTouch = false; + mNeedRender = true; +} + +static int pow(int x, int i) +{ + int result = 1; + if (i<0) + return 0; + while(i-- > 0) + result *= x; + return result; +} + +static bool IsInCircle(int x, int y, int ox, int oy, int r) +{ + return pow(x - ox, 2) + pow(y - oy, 2) <= pow(r, 2); +} + +int GUIPatternPassword::InDot(int x, int y) +{ + for (size_t i = 0; i < mGridSize * mGridSize; ++i) { + if (IsInCircle(x, y, mDots[i].x + mDotRadius, mDots[i].y + mDotRadius, mDotRadius*3)) + return i; + } + return -1; +} + +bool GUIPatternPassword::DotUsed(int dot_idx) +{ + for (size_t i = 0; i < mConnectedDotsLen; ++i) { + if (mConnectedDots[i] == dot_idx) + return true; + } + return false; +} + +void GUIPatternPassword::ConnectDot(int dot_idx) +{ + if (mConnectedDotsLen >= mGridSize * mGridSize) + { + LOGERR("mConnectedDots in GUIPatternPassword has overflown!\n"); + return; + } + + mConnectedDots[mConnectedDotsLen++] = dot_idx; + mDots[dot_idx].active = true; +} + +void GUIPatternPassword::ConnectIntermediateDots(int next_dot_idx) +{ + if (mConnectedDotsLen == 0) + return; + + const int prev_dot_idx = mConnectedDots[mConnectedDotsLen-1]; + + int px = prev_dot_idx % mGridSize; + int py = prev_dot_idx / mGridSize; + + int nx = next_dot_idx % mGridSize; + int ny = next_dot_idx / mGridSize; + + /* + * We connect all dots that are in a straight line between the previous dot + * and the next one. This is simple for 3x3, but is more complicated for + * larger grids. + * + * Weirdly, Android doesn't do the logical thing when it comes to connecting + * dots between two points. Rather than simply adding all points that lie + * on the line between the start and end points, it instead only connects + * dots that are adjacent in only three directions -- horizontal, vertical + * and diagonal (45°). + * + * So we can just iterate over the correct axes, taking care to ensure that + * the order in which the intermediate points are added to the pattern is + * correct. + */ + + int x = px; + int y = py; + + int Dx = (nx > px) ? 1 : -1; + int Dy = (ny > py) ? 1 : -1; + + // Vertical lines. + if (px == nx) + Dx = 0; + + // Horizontal lines. + else if (py == ny) + Dy = 0; + + // Diagonal lines (|∆x| = |∆y|). + else if (abs(px - nx) == abs(py - ny)) + ; + + // No valid intermediate dots. + else + return; + + // Iterate along axis, adding dots in the correct order. + while ((Dy == 0 || y != ny - Dy) && (Dx == 0 || x != nx - Dx)) { + x += Dx; + y += Dy; + + int idx = mGridSize * y + x; + if (!DotUsed(idx)) + ConnectDot(idx); + } +} + +int GUIPatternPassword::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + switch (state) + { + case TOUCH_START: + { + const int dot_idx = InDot(x, y); + if (dot_idx == -1) + break; + + mTrackingTouch = true; + ResetActiveDots(); + ConnectDot(dot_idx); + DataManager::Vibrate("tw_button_vibrate"); + mCurLineX = x; + mCurLineY = y; + mNeedRender = true; + break; + } + case TOUCH_DRAG: + { + if (!mTrackingTouch) + break; + + const int dot_idx = InDot(x, y); + if (dot_idx != -1 && !DotUsed(dot_idx)) + { + ConnectIntermediateDots(dot_idx); + ConnectDot(dot_idx); + DataManager::Vibrate("tw_button_vibrate"); + } + + mCurLineX = x; + mCurLineY = y; + mNeedRender = true; + break; + } + case TOUCH_RELEASE: + { + if (!mTrackingTouch) + break; + + mNeedRender = true; + mTrackingTouch = false; + PatternDrawn(); + ResetActiveDots(); + break; + } + default: + break; + } + return 0; +} + +int GUIPatternPassword::NotifyVarChange(const std::string& varName, const std::string& value) +{ + if (!isConditionTrue()) + return 0; + + if (varName == mSizeVar) { + Resize(atoi(value.c_str())); + mUpdate = true; + } + return 0; +} + +static unsigned int getSDKVersion(void) { + unsigned int sdkver = 23; + string sdkverstr = TWFunc::System_Property_Get("ro.build.version.sdk"); + if (!sdkverstr.empty()) { + sdkver = (unsigned int)strtoull(sdkverstr.c_str(), NULL, 10); + sdkver = (sdkver != 0) ? sdkver : 23; + } + LOGINFO("sdk version is %u\n", sdkver); + return sdkver; +} + +std::string GUIPatternPassword::GeneratePassphrase() +{ + char pattern[mConnectedDotsLen]; + for (size_t i = 0; i < mConnectedDotsLen; i++) { + pattern[i] = (char) mConnectedDots[i]; + } + + std::stringstream pass; + char buffer[3] = {0}; + + if ((mGridSize == 3) || (getSDKVersion() >= 23)) { + // Marshmallow uses a consistent method + for (size_t i = 0; i < mConnectedDotsLen; i++) { + buffer[0] = (pattern[i] & 0xff) + '1'; + pass << std::string(buffer); + } + } else { + /* + * Okay, rant time for pre-Marshmallow ROMs. + * It turns out that Android and CyanogenMod have *two* separate methods + * for generating passphrases from patterns. This is a legacy issue, as + * Android only supports 3x3 grids, and so we need to support both. + * Luckily, CyanogenMod is in the same boat as us and needs to support + * Android's 3x3 encryption style. + * + * In order to generate a 3x3 passphrase, add 1 to each dot index + * and concatenate the string representation of the integers. No + * padding should be added. + * + * For *all* other NxN passphrases (until a 16x16 grid comes along), + * they are generated by taking "%.2x" for each dot index and + * concatenating the results (without adding 1). + */ + for (size_t i = 0; i < mConnectedDotsLen; i++) { + snprintf(buffer, 3, "%.2x", pattern[i] & 0xff); + pass << std::string(buffer); + } + } + + return pass.str(); +} + +void GUIPatternPassword::PatternDrawn() +{ + if (!mPassVar.empty() && mConnectedDotsLen > 0) + DataManager::SetValue(mPassVar, GeneratePassphrase()); + + if (mAction) + mAction->doActions(); +} diff --git a/gui/placement.h b/gui/placement.h new file mode 100644 index 000000000..02079e8eb --- /dev/null +++ b/gui/placement.h @@ -0,0 +1,32 @@ +/* + Copyright 2015 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __PLACEMENT_H +#define __PLACEMENT_H + +enum Placement { + TOP_LEFT = 0, + TOP_RIGHT = 1, + BOTTOM_LEFT = 2, + BOTTOM_RIGHT = 3, + CENTER = 4, + CENTER_X_ONLY = 5, + TEXT_ONLY_RIGHT = 6, +}; + +#endif // __PLACEMENT_H diff --git a/gui/progressbar.cpp b/gui/progressbar.cpp new file mode 100644 index 000000000..56ce48091 --- /dev/null +++ b/gui/progressbar.cpp @@ -0,0 +1,244 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// progressbar.cpp - GUIProgressBar object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIProgressBar::GUIProgressBar(xml_node<>* node) : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mEmptyBar = NULL; + mFullBar = NULL; + mLastPos = 0; + mSlide = 0.0; + mSlideInc = 0.0; + + if (!node) + { + LOGERR("GUIProgressBar created without XML node\n"); + return; + } + + child = FindNode(node, "resource"); + if (child) + { + mEmptyBar = LoadAttrImage(child, "empty"); + mFullBar = LoadAttrImage(child, "full"); + } + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY); + + // Load the data + child = FindNode(node, "data"); + if (child) + { + mMinValVar = LoadAttrString(child, "min"); + mMaxValVar = LoadAttrString(child, "max"); + mCurValVar = LoadAttrString(child, "name"); + } + + mRenderW = mEmptyBar->GetWidth(); + mRenderH = mEmptyBar->GetHeight(); +} + +int GUIProgressBar::Render(void) +{ + if (!isConditionTrue()) + return 0; + + // This handles making sure timing updates occur + Update(); + return RenderInternal(); +} + +int GUIProgressBar::RenderInternal(void) +{ + if (!mEmptyBar || !mEmptyBar->GetResource()) + return -1; + + if (!mFullBar || !mFullBar->GetResource()) + return -1; + + gr_blit(mEmptyBar->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + gr_blit(mFullBar->GetResource(), 0, 0, mLastPos, mRenderH, mRenderX, mRenderY); + return 0; +} + +int GUIProgressBar::Update(void) +{ + if (!isConditionTrue()) + return 0; + + std::string str; + int min, max, cur, pos; + + if (mMinValVar.empty()) + min = 0; + else + { + str.clear(); + if (atoi(mMinValVar.c_str()) != 0) + str = mMinValVar; + else + DataManager::GetValue(mMinValVar, str); + min = atoi(str.c_str()); + } + + if (mMaxValVar.empty()) + max = 100; + else + { + str.clear(); + if (atoi(mMaxValVar.c_str()) != 0) + str = mMaxValVar; + else + DataManager::GetValue(mMaxValVar, str); + max = atoi(str.c_str()); + } + + str.clear(); + DataManager::GetValue(mCurValVar, str); + cur = atoi(str.c_str()); + + // Do slide, if needed + if (mSlideFrames) + { + mSlide += mSlideInc; + mSlideFrames--; + if (cur != (int) mSlide) + { + cur = (int) mSlide; + DataManager::SetValue(mCurValVar, cur); + } + } + + // Normalize to 0 + max -= min; + cur -= min; + min = 0; + + if (cur < min) + cur = min; + if (cur > max) + cur = max; + + if (max == 0) + pos = 0; + else + pos = (cur * mRenderW) / max; + + if (pos == mLastPos) + return 0; + + mLastPos = pos; + + if (RenderInternal() != 0) + return -1; + return 2; +} + +int GUIProgressBar::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + if (!isConditionTrue()) + return 0; + + static int nextPush = 0; + + if (varName.empty()) + { + nextPush = 0; + mLastPos = 0; + mSlide = 0.0; + mSlideInc = 0.0; + return 0; + } + + if (varName == "ui_progress_portion" || varName == "ui_progress_frames") + { + std::string str; + int cur; + + if (mSlideFrames) + { + mSlide += (mSlideInc * mSlideFrames); + cur = (int) mSlide; + DataManager::SetValue(mCurValVar, cur); + mSlideFrames = 0; + } + + if (nextPush) + { + mSlide += nextPush; + cur = (int) mSlide; + DataManager::SetValue(mCurValVar, cur); + nextPush = 0; + } + + if (varName == "ui_progress_portion") mSlide = atof(value.c_str()); + else + { + mSlideFrames = atol(value.c_str()); + if (mSlideFrames == 0) + { + // We're just holding this progress until the next push + nextPush = mSlide; + } + } + + if (mSlide > 0 && mSlideFrames > 0) + { + // Get the current position + str.clear(); + DataManager::GetValue(mCurValVar, str); + cur = atoi(str.c_str()); + + mSlideInc = (float) mSlide / (float) mSlideFrames; + mSlide = cur; + } + } + return 0; +} diff --git a/gui/rapidxml.hpp b/gui/rapidxml.hpp new file mode 100644 index 000000000..33a886014 --- /dev/null +++ b/gui/rapidxml.hpp @@ -0,0 +1,2616 @@ +#ifndef RAPIDXML_HPP_INCLUDED +#define RAPIDXML_HPP_INCLUDED + +#define RAPIDXML_NO_EXCEPTIONS + +// Copyright (C) 2006, 2009 Marcin Kalicinski +// Version 1.13 +// Revision $DateTime: 2009/05/13 01:46:17 $ +//! \file rapidxml.hpp This file contains rapidxml parser and DOM implementation + +// If standard library is disabled, user must provide implementations of required functions and typedefs +#if !defined(RAPIDXML_NO_STDLIB) + #include <cstdlib> // For std::size_t + #include <cassert> // For assert + #include <new> // For placement new +#endif + +// On MSVC, disable "conditional expression is constant" warning (level 4). +// This warning is almost impossible to avoid with certain types of templated code +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable:4127) // Conditional expression is constant +#endif + +/////////////////////////////////////////////////////////////////////////// +// RAPIDXML_PARSE_ERROR + +#if defined(RAPIDXML_NO_EXCEPTIONS) + +#define RAPIDXML_PARSE_ERROR(what, where) { parse_error_handler(what, where); assert(0); } + +namespace rapidxml +{ + //! When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, + //! this function is called to notify user about the error. + //! It must be defined by the user. + //! <br><br> + //! This function cannot return. If it does, the results are undefined. + //! <br><br> + //! A very simple definition might look like that: + //! <pre> + //! void %rapidxml::%parse_error_handler(const char *what, void *where) + //! { + //! std::cout << "Parse error: " << what << "\n"; + //! std::abort(); + //! } + //! </pre> + //! \param what Human readable description of the error. + //! \param where Pointer to character data where error was detected. + void parse_error_handler(const char *what, void *where); +} + +#else + +#include <exception> // For std::exception + +#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where) + +namespace rapidxml +{ + + //! Parse error exception. + //! This exception is thrown by the parser when an error occurs. + //! Use what() function to get human-readable error message. + //! Use where() function to get a pointer to position within source text where error was detected. + //! <br><br> + //! If throwing exceptions by the parser is undesirable, + //! it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included. + //! This will cause the parser to call rapidxml::parse_error_handler() function instead of throwing an exception. + //! This function must be defined by the user. + //! <br><br> + //! This class derives from <code>std::exception</code> class. + class parse_error: public std::exception + { + + public: + + //! Constructs parse error + parse_error(const char *what, void *where) + : m_what(what) + , m_where(where) + { + } + + //! Gets human readable description of error. + //! \return Pointer to null terminated description of the error. + virtual const char *what() const throw() + { + return m_what; + } + + //! Gets pointer to character data where error happened. + //! Ch should be the same as char type of xml_document that produced the error. + //! \return Pointer to location within the parsed string where error occured. + template<class Ch> + Ch *where() const + { + return reinterpret_cast<Ch *>(m_where); + } + + private: + + const char *m_what; + void *m_where; + + }; +} + +#endif + +/////////////////////////////////////////////////////////////////////////// +// Pool sizes + +#ifndef RAPIDXML_STATIC_POOL_SIZE + // Size of static memory block of memory_pool. + // Define RAPIDXML_STATIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value. + // No dynamic memory allocations are performed by memory_pool until static memory is exhausted. + #define RAPIDXML_STATIC_POOL_SIZE (64 * 1024) +#endif + +#ifndef RAPIDXML_DYNAMIC_POOL_SIZE + // Size of dynamic memory block of memory_pool. + // Define RAPIDXML_DYNAMIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value. + // After the static block is exhausted, dynamic blocks with approximately this size are allocated by memory_pool. + #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024) +#endif + +#ifndef RAPIDXML_ALIGNMENT + // Memory allocation alignment. + // Define RAPIDXML_ALIGNMENT before including rapidxml.hpp if you want to override the default value, which is the size of pointer. + // All memory allocations for nodes, attributes and strings will be aligned to this value. + // This must be a power of 2 and at least 1, otherwise memory_pool will not work. + #define RAPIDXML_ALIGNMENT sizeof(void *) +#endif + +namespace rapidxml +{ + // Forward declarations + template<class Ch> class xml_node; + template<class Ch> class xml_attribute; + template<class Ch> class xml_document; + + //! Enumeration listing all node types produced by the parser. + //! Use xml_node::type() function to query node type. + enum node_type + { + node_document, //!< A document node. Name and value are empty. + node_element, //!< An element node. Name contains element name. Value contains text of first data node. + node_data, //!< A data node. Name is empty. Value contains data text. + node_cdata, //!< A CDATA node. Name is empty. Value contains data text. + node_comment, //!< A comment node. Name is empty. Value contains comment text. + node_declaration, //!< A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes. + node_doctype, //!< A DOCTYPE node. Name is empty. Value contains DOCTYPE text. + node_pi //!< A PI node. Name contains target. Value contains instructions. + }; + + /////////////////////////////////////////////////////////////////////// + // Parsing flags + + //! Parse flag instructing the parser to not create data nodes. + //! Text of first data node will still be placed in value of parent element, unless rapidxml::parse_no_element_values flag is also specified. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_no_data_nodes = 0x1; + + //! Parse flag instructing the parser to not use text of first data node as a value of parent element. + //! Can be combined with other flags by use of | operator. + //! Note that child data nodes of element node take precendence over its value when printing. + //! That is, if element has one or more child data nodes <em>and</em> a value, the value will be ignored. + //! Use rapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements. + //! <br><br> + //! See xml_document::parse() function. + const int parse_no_element_values = 0x2; + + //! Parse flag instructing the parser to not place zero terminators after strings in the source text. + //! By default zero terminators are placed, modifying source text. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_no_string_terminators = 0x4; + + //! Parse flag instructing the parser to not translate entities in the source text. + //! By default entities are translated, modifying source text. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_no_entity_translation = 0x8; + + //! Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters. + //! By default, UTF-8 handling is enabled. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_no_utf8 = 0x10; + + //! Parse flag instructing the parser to create XML declaration node. + //! By default, declaration node is not created. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_declaration_node = 0x20; + + //! Parse flag instructing the parser to create comments nodes. + //! By default, comment nodes are not created. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_comment_nodes = 0x40; + + //! Parse flag instructing the parser to create DOCTYPE node. + //! By default, doctype node is not created. + //! Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_doctype_node = 0x80; + + //! Parse flag instructing the parser to create PI nodes. + //! By default, PI nodes are not created. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_pi_nodes = 0x100; + + //! Parse flag instructing the parser to validate closing tag names. + //! If not set, name inside closing tag is irrelevant to the parser. + //! By default, closing tags are not validated. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_validate_closing_tags = 0x200; + + //! Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes. + //! By default, whitespace is not trimmed. + //! This flag does not cause the parser to modify source text. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_trim_whitespace = 0x400; + + //! Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character. + //! Trimming of leading and trailing whitespace of data is controlled by rapidxml::parse_trim_whitespace flag. + //! By default, whitespace is not normalized. + //! If this flag is specified, source text will be modified. + //! Can be combined with other flags by use of | operator. + //! <br><br> + //! See xml_document::parse() function. + const int parse_normalize_whitespace = 0x800; + + // Compound flags + + //! Parse flags which represent default behaviour of the parser. + //! This is always equal to 0, so that all other flags can be simply ored together. + //! Normally there is no need to inconveniently disable flags by anding with their negated (~) values. + //! This also means that meaning of each flag is a <i>negation</i> of the default setting. + //! For example, if flag name is rapidxml::parse_no_utf8, it means that utf-8 is <i>enabled</i> by default, + //! and using the flag will disable it. + //! <br><br> + //! See xml_document::parse() function. + const int parse_default = 0; + + //! A combination of parse flags that forbids any modifications of the source text. + //! This also results in faster parsing. However, note that the following will occur: + //! <ul> + //! <li>names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends</li> + //! <li>entities will not be translated</li> + //! <li>whitespace will not be normalized</li> + //! </ul> + //! See xml_document::parse() function. + const int parse_non_destructive = parse_no_string_terminators | parse_no_entity_translation; + + //! A combination of parse flags resulting in fastest possible parsing, without sacrificing important data. + //! <br><br> + //! See xml_document::parse() function. + const int parse_fastest = parse_non_destructive | parse_no_data_nodes; + + //! A combination of parse flags resulting in largest amount of data being extracted. + //! This usually results in slowest parsing. + //! <br><br> + //! See xml_document::parse() function. + const int parse_full = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags; + + /////////////////////////////////////////////////////////////////////// + // Internals + + //! \cond internal + namespace internal + { + + // Struct that contains lookup tables for the parser + // It must be a template to allow correct linking (because it has static data members, which are defined in a header file). + template<int Dummy> + struct lookup_tables + { + static const unsigned char lookup_whitespace[256]; // Whitespace table + static const unsigned char lookup_node_name[256]; // Node name table + static const unsigned char lookup_text[256]; // Text table + static const unsigned char lookup_text_pure_no_ws[256]; // Text table + static const unsigned char lookup_text_pure_with_ws[256]; // Text table + static const unsigned char lookup_attribute_name[256]; // Attribute name table + static const unsigned char lookup_attribute_data_1[256]; // Attribute data table with single quote + static const unsigned char lookup_attribute_data_1_pure[256]; // Attribute data table with single quote + static const unsigned char lookup_attribute_data_2[256]; // Attribute data table with double quotes + static const unsigned char lookup_attribute_data_2_pure[256]; // Attribute data table with double quotes + static const unsigned char lookup_digits[256]; // Digits + static const unsigned char lookup_upcase[256]; // To uppercase conversion table for ASCII characters + }; + + // Find length of the string + template<class Ch> + inline std::size_t measure(const Ch *p) + { + const Ch *tmp = p; + while (*tmp) + ++tmp; + return tmp - p; + } + + // Compare strings for equality + template<class Ch> + inline bool compare(const Ch *p1, std::size_t size1, const Ch *p2, std::size_t size2, bool case_sensitive) + { + if (size1 != size2) + return false; + if (case_sensitive) + { + for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2) + if (*p1 != *p2) + return false; + } + else + { + for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2) + if (lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p1)] != lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p2)]) + return false; + } + return true; + } + } + //! \endcond + + /////////////////////////////////////////////////////////////////////// + // Memory pool + + //! This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation. + //! In most cases, you will not need to use this class directly. + //! However, if you need to create nodes manually or modify names/values of nodes, + //! you are encouraged to use memory_pool of relevant xml_document to allocate the memory. + //! Not only is this faster than allocating them by using <code>new</code> operator, + //! but also their lifetime will be tied to the lifetime of document, + //! possibly simplyfing memory management. + //! <br><br> + //! Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool. + //! You can also call allocate_string() function to allocate strings. + //! Such strings can then be used as names or values of nodes without worrying about their lifetime. + //! Note that there is no <code>free()</code> function -- all allocations are freed at once when clear() function is called, + //! or when the pool is destroyed. + //! <br><br> + //! It is also possible to create a standalone memory_pool, and use it + //! to allocate nodes, whose lifetime will not be tied to any document. + //! <br><br> + //! Pool maintains <code>RAPIDXML_STATIC_POOL_SIZE</code> bytes of statically allocated memory. + //! Until static memory is exhausted, no dynamic memory allocations are done. + //! When static memory is exhausted, pool allocates additional blocks of memory of size <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> each, + //! by using global <code>new[]</code> and <code>delete[]</code> operators. + //! This behaviour can be changed by setting custom allocation routines. + //! Use set_allocator() function to set them. + //! <br><br> + //! Allocations for nodes, attributes and strings are aligned at <code>RAPIDXML_ALIGNMENT</code> bytes. + //! This value defaults to the size of pointer on target architecture. + //! <br><br> + //! To obtain absolutely top performance from the parser, + //! it is important that all nodes are allocated from a single, contiguous block of memory. + //! Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably. + //! If required, you can tweak <code>RAPIDXML_STATIC_POOL_SIZE</code>, <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> and <code>RAPIDXML_ALIGNMENT</code> + //! to obtain best wasted memory to performance compromise. + //! To do it, define their values before rapidxml.hpp file is included. + //! \param Ch Character type of created nodes. + template<class Ch = char> + class memory_pool + { + + public: + + //! \cond internal + typedef void *(alloc_func)(std::size_t); // Type of user-defined function used to allocate memory + typedef void (free_func)(void *); // Type of user-defined function used to free memory + //! \endcond + + //! Constructs empty pool with default allocator functions. + memory_pool() + : m_alloc_func(0) + , m_free_func(0) + { + init(); + } + + //! Destroys pool and frees all the memory. + //! This causes memory occupied by nodes allocated by the pool to be freed. + //! Nodes allocated from the pool are no longer valid. + ~memory_pool() + { + clear(); + } + + //! Allocates a new node from the pool, and optionally assigns name and value to it. + //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. + //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function + //! will call rapidxml::parse_error_handler() function. + //! \param type Type of node to create. + //! \param name Name to assign to the node, or 0 to assign no name. + //! \param value Value to assign to the node, or 0 to assign no value. + //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string. + //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string. + //! \return Pointer to allocated node. This pointer will never be NULL. + xml_node<Ch> *allocate_node(node_type type, + const Ch *name = 0, const Ch *value = 0, + std::size_t name_size = 0, std::size_t value_size = 0) + { + void *memory = allocate_aligned(sizeof(xml_node<Ch>)); + xml_node<Ch> *node = new(memory) xml_node<Ch>(type); + if (name) + { + if (name_size > 0) + node->name(name, name_size); + else + node->name(name); + } + if (value) + { + if (value_size > 0) + node->value(value, value_size); + else + node->value(value); + } + return node; + } + + //! Allocates a new attribute from the pool, and optionally assigns name and value to it. + //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. + //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function + //! will call rapidxml::parse_error_handler() function. + //! \param name Name to assign to the attribute, or 0 to assign no name. + //! \param value Value to assign to the attribute, or 0 to assign no value. + //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string. + //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string. + //! \return Pointer to allocated attribute. This pointer will never be NULL. + xml_attribute<Ch> *allocate_attribute(const Ch *name = 0, const Ch *value = 0, + std::size_t name_size = 0, std::size_t value_size = 0) + { + void *memory = allocate_aligned(sizeof(xml_attribute<Ch>)); + xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>; + if (name) + { + if (name_size > 0) + attribute->name(name, name_size); + else + attribute->name(name); + } + if (value) + { + if (value_size > 0) + attribute->value(value, value_size); + else + attribute->value(value); + } + return attribute; + } + + //! Allocates a char array of given size from the pool, and optionally copies a given string to it. + //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. + //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function + //! will call rapidxml::parse_error_handler() function. + //! \param source String to initialize the allocated memory with, or 0 to not initialize it. + //! \param size Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated. + //! \return Pointer to allocated char array. This pointer will never be NULL. + Ch *allocate_string(const Ch *source = 0, std::size_t size = 0) + { + assert(source || size); // Either source or size (or both) must be specified + if (size == 0) + size = internal::measure(source) + 1; + Ch *result = static_cast<Ch *>(allocate_aligned(size * sizeof(Ch))); + if (source) + for (std::size_t i = 0; i < size; ++i) + result[i] = source[i]; + return result; + } + + //! Clones an xml_node and its hierarchy of child nodes and attributes. + //! Nodes and attributes are allocated from this memory pool. + //! Names and values are not cloned, they are shared between the clone and the source. + //! Result node can be optionally specified as a second parameter, + //! in which case its contents will be replaced with cloned source node. + //! This is useful when you want to clone entire document. + //! \param source Node to clone. + //! \param result Node to put results in, or 0 to automatically allocate result node + //! \return Pointer to cloned node. This pointer will never be NULL. + xml_node<Ch> *clone_node(const xml_node<Ch> *source, xml_node<Ch> *result = 0) + { + // Prepare result node + if (result) + { + result->remove_all_attributes(); + result->remove_all_nodes(); + result->type(source->type()); + } + else + result = allocate_node(source->type()); + + // Clone name and value + result->name(source->name(), source->name_size()); + result->value(source->value(), source->value_size()); + + // Clone child nodes and attributes + for (xml_node<Ch> *child = source->first_node(); child; child = child->next_sibling()) + result->append_node(clone_node(child)); + for (xml_attribute<Ch> *attr = source->first_attribute(); attr; attr = attr->next_attribute()) + result->append_attribute(allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size())); + + return result; + } + + //! Clears the pool. + //! This causes memory occupied by nodes allocated by the pool to be freed. + //! Any nodes or strings allocated from the pool will no longer be valid. + void clear() + { + while (m_begin != m_static_memory) + { + char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin; + if (m_free_func) + m_free_func(m_begin); + else + delete[] m_begin; + m_begin = previous_begin; + } + init(); + } + + //! Sets or resets the user-defined memory allocation functions for the pool. + //! This can only be called when no memory is allocated from the pool yet, otherwise results are undefined. + //! Allocation function must not return invalid pointer on failure. It should either throw, + //! stop the program, or use <code>longjmp()</code> function to pass control to other place of program. + //! If it returns invalid pointer, results are undefined. + //! <br><br> + //! User defined allocation functions must have the following forms: + //! <br><code> + //! <br>void *allocate(std::size_t size); + //! <br>void free(void *pointer); + //! </code><br> + //! \param af Allocation function, or 0 to restore default function + //! \param ff Free function, or 0 to restore default function + void set_allocator(alloc_func *af, free_func *ff) + { + assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet + m_alloc_func = af; + m_free_func = ff; + } + + private: + + struct header + { + char *previous_begin; + }; + + void init() + { + m_begin = m_static_memory; + m_ptr = align(m_begin); + m_end = m_static_memory + sizeof(m_static_memory); + } + + char *align(char *ptr) + { + std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1)); + return ptr + alignment; + } + + char *allocate_raw(std::size_t size) + { + // Allocate + void *memory; + if (m_alloc_func) // Allocate memory using either user-specified allocation function or global operator new[] + { + memory = m_alloc_func(size); + assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp + } + else + { + memory = new char[size]; +#ifdef RAPIDXML_NO_EXCEPTIONS + if (!memory) // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc + RAPIDXML_PARSE_ERROR("out of memory", 0); +#endif + } + return static_cast<char *>(memory); + } + + void *allocate_aligned(std::size_t size) + { + // Calculate aligned pointer + char *result = align(m_ptr); + + // If not enough memory left in current pool, allocate a new pool + if (result + size > m_end) + { + // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE) + std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE; + if (pool_size < size) + pool_size = size; + + // Allocate + std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size; // 2 alignments required in worst case: one for header, one for actual allocation + char *raw_memory = allocate_raw(alloc_size); + + // Setup new pool in allocated memory + char *pool = align(raw_memory); + header *new_header = reinterpret_cast<header *>(pool); + new_header->previous_begin = m_begin; + m_begin = raw_memory; + m_ptr = pool + sizeof(header); + m_end = raw_memory + alloc_size; + + // Calculate aligned pointer again using new pool + result = align(m_ptr); + } + + // Update pool and return aligned pointer + m_ptr = result + size; + return result; + } + + char *m_begin; // Start of raw memory making up current pool + char *m_ptr; // First free byte in current pool + char *m_end; // One past last available byte in current pool + char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory + alloc_func *m_alloc_func; // Allocator function, or 0 if default is to be used + free_func *m_free_func; // Free function, or 0 if default is to be used + }; + + /////////////////////////////////////////////////////////////////////////// + // XML base + + //! Base class for xml_node and xml_attribute implementing common functions: + //! name(), name_size(), value(), value_size() and parent(). + //! \param Ch Character type to use + template<class Ch = char> + class xml_base + { + + public: + + /////////////////////////////////////////////////////////////////////////// + // Construction & destruction + + // Construct a base with empty name, value and parent + xml_base() + : m_name(0) + , m_value(0) + , m_parent(0) + { + } + + /////////////////////////////////////////////////////////////////////////// + // Node data access + + //! Gets name of the node. + //! Interpretation of name depends on type of node. + //! Note that name will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse. + //! <br><br> + //! Use name_size() function to determine length of the name. + //! \return Name of node, or empty string if node has no name. + Ch *name() const + { + return m_name ? m_name : nullstr(); + } + + //! Gets size of node name, not including terminator character. + //! This function works correctly irrespective of whether name is or is not zero terminated. + //! \return Size of node name, in characters. + std::size_t name_size() const + { + return m_name ? m_name_size : 0; + } + + //! Gets value of node. + //! Interpretation of value depends on type of node. + //! Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse. + //! <br><br> + //! Use value_size() function to determine length of the value. + //! \return Value of node, or empty string if node has no value. + Ch *value() const + { + return m_value ? m_value : nullstr(); + } + + //! Gets size of node value, not including terminator character. + //! This function works correctly irrespective of whether value is or is not zero terminated. + //! \return Size of node value, in characters. + std::size_t value_size() const + { + return m_value ? m_value_size : 0; + } + + /////////////////////////////////////////////////////////////////////////// + // Node modification + + //! Sets name of node to a non zero-terminated string. + //! See \ref ownership_of_strings. + //! <br><br> + //! Note that node does not own its name or value, it only stores a pointer to it. + //! It will not delete or otherwise free the pointer on destruction. + //! It is reponsibility of the user to properly manage lifetime of the string. + //! The easiest way to achieve it is to use memory_pool of the document to allocate the string - + //! on destruction of the document the string will be automatically freed. + //! <br><br> + //! Size of name must be specified separately, because name does not have to be zero terminated. + //! Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated). + //! \param name Name of node to set. Does not have to be zero terminated. + //! \param size Size of name, in characters. This does not include zero terminator, if one is present. + void name(const Ch *name, std::size_t size) + { + m_name = const_cast<Ch *>(name); + m_name_size = size; + } + + //! Sets name of node to a zero-terminated string. + //! See also \ref ownership_of_strings and xml_node::name(const Ch *, std::size_t). + //! \param name Name of node to set. Must be zero terminated. + void name(const Ch *name) + { + this->name(name, internal::measure(name)); + } + + //! Sets value of node to a non zero-terminated string. + //! See \ref ownership_of_strings. + //! <br><br> + //! Note that node does not own its name or value, it only stores a pointer to it. + //! It will not delete or otherwise free the pointer on destruction. + //! It is reponsibility of the user to properly manage lifetime of the string. + //! The easiest way to achieve it is to use memory_pool of the document to allocate the string - + //! on destruction of the document the string will be automatically freed. + //! <br><br> + //! Size of value must be specified separately, because it does not have to be zero terminated. + //! Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated). + //! <br><br> + //! If an element has a child node of type node_data, it will take precedence over element value when printing. + //! If you want to manipulate data of elements using values, use parser flag rapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser. + //! \param value value of node to set. Does not have to be zero terminated. + //! \param size Size of value, in characters. This does not include zero terminator, if one is present. + void value(const Ch *value, std::size_t size) + { + m_value = const_cast<Ch *>(value); + m_value_size = size; + } + + //! Sets value of node to a zero-terminated string. + //! See also \ref ownership_of_strings and xml_node::value(const Ch *, std::size_t). + //! \param value Vame of node to set. Must be zero terminated. + void value(const Ch *value) + { + this->value(value, internal::measure(value)); + } + + /////////////////////////////////////////////////////////////////////////// + // Related nodes access + + //! Gets node parent. + //! \return Pointer to parent node, or 0 if there is no parent. + xml_node<Ch> *parent() const + { + return m_parent; + } + + protected: + + // Return empty string + static Ch *nullstr() + { + static Ch zero = Ch('\0'); + return &zero; + } + + Ch *m_name; // Name of node, or 0 if no name + Ch *m_value; // Value of node, or 0 if no value + std::size_t m_name_size; // Length of node name, or undefined of no name + std::size_t m_value_size; // Length of node value, or undefined if no value + xml_node<Ch> *m_parent; // Pointer to parent node, or 0 if none + + }; + + //! Class representing attribute node of XML document. + //! Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base). + //! Note that after parse, both name and value of attribute will point to interior of source text used for parsing. + //! Thus, this text must persist in memory for the lifetime of attribute. + //! \param Ch Character type to use. + template<class Ch = char> + class xml_attribute: public xml_base<Ch> + { + + friend class xml_node<Ch>; + + public: + + /////////////////////////////////////////////////////////////////////////// + // Construction & destruction + + //! Constructs an empty attribute with the specified type. + //! Consider using memory_pool of appropriate xml_document if allocating attributes manually. + xml_attribute() + { + } + + /////////////////////////////////////////////////////////////////////////// + // Related nodes access + + //! Gets document of which attribute is a child. + //! \return Pointer to document that contains this attribute, or 0 if there is no parent document. + xml_document<Ch> *document() const + { + if (xml_node<Ch> *node = this->parent()) + { + while (node->parent()) + node = node->parent(); + return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0; + } + else + return 0; + } + + //! Gets previous attribute, optionally matching attribute name. + //! \param name Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found attribute, or 0 if not found. + xml_attribute<Ch> *previous_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_attribute<Ch> *attribute = m_prev_attribute; attribute; attribute = attribute->m_prev_attribute) + if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) + return attribute; + return 0; + } + else + return this->m_parent ? m_prev_attribute : 0; + } + + //! Gets next attribute, optionally matching attribute name. + //! \param name Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found attribute, or 0 if not found. + xml_attribute<Ch> *next_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_attribute<Ch> *attribute = m_next_attribute; attribute; attribute = attribute->m_next_attribute) + if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) + return attribute; + return 0; + } + else + return this->m_parent ? m_next_attribute : 0; + } + + private: + + xml_attribute<Ch> *m_prev_attribute; // Pointer to previous sibling of attribute, or 0 if none; only valid if parent is non-zero + xml_attribute<Ch> *m_next_attribute; // Pointer to next sibling of attribute, or 0 if none; only valid if parent is non-zero + + }; + + /////////////////////////////////////////////////////////////////////////// + // XML node + + //! Class representing a node of XML document. + //! Each node may have associated name and value strings, which are available through name() and value() functions. + //! Interpretation of name and value depends on type of the node. + //! Type of node can be determined by using type() function. + //! <br><br> + //! Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. + //! Thus, this text must persist in the memory for the lifetime of node. + //! \param Ch Character type to use. + template<class Ch = char> + class xml_node: public xml_base<Ch> + { + + public: + + /////////////////////////////////////////////////////////////////////////// + // Construction & destruction + + //! Constructs an empty node with the specified type. + //! Consider using memory_pool of appropriate document to allocate nodes manually. + //! \param type Type of node to construct. + xml_node(node_type type) + : m_type(type) + , m_first_node(0) + , m_first_attribute(0) + { + } + + /////////////////////////////////////////////////////////////////////////// + // Node data access + + //! Gets type of node. + //! \return Type of node. + node_type type() const + { + return m_type; + } + + /////////////////////////////////////////////////////////////////////////// + // Related nodes access + + //! Gets document of which node is a child. + //! \return Pointer to document that contains this node, or 0 if there is no parent document. + xml_document<Ch> *document() const + { + xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this); + while (node->parent()) + node = node->parent(); + return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0; + } + + //! Gets first child node, optionally matching node name. + //! \param name Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found child, or 0 if not found. + xml_node<Ch> *first_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling()) + if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive)) + return child; + return 0; + } + else + return m_first_node; + } + + //! Gets last child node, optionally matching node name. + //! Behaviour is undefined if node has no children. + //! Use first_node() to test if node has children. + //! \param name Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found child, or 0 if not found. + xml_node<Ch> *last_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + assert(m_first_node); // Cannot query for last child if node has no children + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_node<Ch> *child = m_last_node; child; child = child->previous_sibling()) + if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive)) + return child; + return 0; + } + else + return m_last_node; + } + + //! Gets previous sibling node, optionally matching node name. + //! Behaviour is undefined if node has no parent. + //! Use parent() to test if node has a parent. + //! \param name Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found sibling, or 0 if not found. + xml_node<Ch> *previous_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + assert(this->m_parent); // Cannot query for siblings if node has no parent + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_node<Ch> *sibling = m_prev_sibling; sibling; sibling = sibling->m_prev_sibling) + if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive)) + return sibling; + return 0; + } + else + return m_prev_sibling; + } + + //! Gets next sibling node, optionally matching node name. + //! Behaviour is undefined if node has no parent. + //! Use parent() to test if node has a parent. + //! \param name Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found sibling, or 0 if not found. + xml_node<Ch> *next_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + assert(this->m_parent); // Cannot query for siblings if node has no parent + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling) + if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive)) + return sibling; + return 0; + } + else + return m_next_sibling; + } + + //! Gets first attribute of node, optionally matching attribute name. + //! \param name Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found attribute, or 0 if not found. + xml_attribute<Ch> *first_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute) + if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) + return attribute; + return 0; + } + else + return m_first_attribute; + } + + //! Gets last attribute of node, optionally matching attribute name. + //! \param name Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero + //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string + //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters + //! \return Pointer to found attribute, or 0 if not found. + xml_attribute<Ch> *last_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const + { + if (name) + { + if (name_size == 0) + name_size = internal::measure(name); + for (xml_attribute<Ch> *attribute = m_last_attribute; attribute; attribute = attribute->m_prev_attribute) + if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) + return attribute; + return 0; + } + else + return m_first_attribute ? m_last_attribute : 0; + } + + /////////////////////////////////////////////////////////////////////////// + // Node modification + + //! Sets type of node. + //! \param type Type of node to set. + void type(node_type type) + { + m_type = type; + } + + /////////////////////////////////////////////////////////////////////////// + // Node manipulation + + //! Prepends a new child node. + //! The prepended child becomes the first child, and all existing children are moved one position back. + //! \param child Node to prepend. + void prepend_node(xml_node<Ch> *child) + { + assert(child && !child->parent() && child->type() != node_document); + if (first_node()) + { + child->m_next_sibling = m_first_node; + m_first_node->m_prev_sibling = child; + } + else + { + child->m_next_sibling = 0; + m_last_node = child; + } + m_first_node = child; + child->m_parent = this; + child->m_prev_sibling = 0; + } + + //! Appends a new child node. + //! The appended child becomes the last child. + //! \param child Node to append. + void append_node(xml_node<Ch> *child) + { + assert(child && !child->parent() && child->type() != node_document); + if (first_node()) + { + child->m_prev_sibling = m_last_node; + m_last_node->m_next_sibling = child; + } + else + { + child->m_prev_sibling = 0; + m_first_node = child; + } + m_last_node = child; + child->m_parent = this; + child->m_next_sibling = 0; + } + + //! Inserts a new child node at specified place inside the node. + //! All children after and including the specified node are moved one position back. + //! \param where Place where to insert the child, or 0 to insert at the back. + //! \param child Node to insert. + void insert_node(xml_node<Ch> *where, xml_node<Ch> *child) + { + assert(!where || where->parent() == this); + assert(child && !child->parent() && child->type() != node_document); + if (where == m_first_node) + prepend_node(child); + else if (where == 0) + append_node(child); + else + { + child->m_prev_sibling = where->m_prev_sibling; + child->m_next_sibling = where; + where->m_prev_sibling->m_next_sibling = child; + where->m_prev_sibling = child; + child->m_parent = this; + } + } + + //! Removes first child node. + //! If node has no children, behaviour is undefined. + //! Use first_node() to test if node has children. + void remove_first_node() + { + assert(first_node()); + xml_node<Ch> *child = m_first_node; + m_first_node = child->m_next_sibling; + if (child->m_next_sibling) + child->m_next_sibling->m_prev_sibling = 0; + else + m_last_node = 0; + child->m_parent = 0; + } + + //! Removes last child of the node. + //! If node has no children, behaviour is undefined. + //! Use first_node() to test if node has children. + void remove_last_node() + { + assert(first_node()); + xml_node<Ch> *child = m_last_node; + if (child->m_prev_sibling) + { + m_last_node = child->m_prev_sibling; + child->m_prev_sibling->m_next_sibling = 0; + } + else + m_first_node = 0; + child->m_parent = 0; + } + + //! Removes specified child from the node + // \param where Pointer to child to be removed. + void remove_node(xml_node<Ch> *where) + { + assert(where && where->parent() == this); + assert(first_node()); + if (where == m_first_node) + remove_first_node(); + else if (where == m_last_node) + remove_last_node(); + else + { + where->m_prev_sibling->m_next_sibling = where->m_next_sibling; + where->m_next_sibling->m_prev_sibling = where->m_prev_sibling; + where->m_parent = 0; + } + } + + //! Removes all child nodes (but not attributes). + void remove_all_nodes() + { + for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling) + node->m_parent = 0; + m_first_node = 0; + } + + //! Prepends a new attribute to the node. + //! \param attribute Attribute to prepend. + void prepend_attribute(xml_attribute<Ch> *attribute) + { + assert(attribute && !attribute->parent()); + if (first_attribute()) + { + attribute->m_next_attribute = m_first_attribute; + m_first_attribute->m_prev_attribute = attribute; + } + else + { + attribute->m_next_attribute = 0; + m_last_attribute = attribute; + } + m_first_attribute = attribute; + attribute->m_parent = this; + attribute->m_prev_attribute = 0; + } + + //! Appends a new attribute to the node. + //! \param attribute Attribute to append. + void append_attribute(xml_attribute<Ch> *attribute) + { + assert(attribute && !attribute->parent()); + if (first_attribute()) + { + attribute->m_prev_attribute = m_last_attribute; + m_last_attribute->m_next_attribute = attribute; + } + else + { + attribute->m_prev_attribute = 0; + m_first_attribute = attribute; + } + m_last_attribute = attribute; + attribute->m_parent = this; + attribute->m_next_attribute = 0; + } + + //! Inserts a new attribute at specified place inside the node. + //! All attributes after and including the specified attribute are moved one position back. + //! \param where Place where to insert the attribute, or 0 to insert at the back. + //! \param attribute Attribute to insert. + void insert_attribute(xml_attribute<Ch> *where, xml_attribute<Ch> *attribute) + { + assert(!where || where->parent() == this); + assert(attribute && !attribute->parent()); + if (where == m_first_attribute) + prepend_attribute(attribute); + else if (where == 0) + append_attribute(attribute); + else + { + attribute->m_prev_attribute = where->m_prev_attribute; + attribute->m_next_attribute = where; + where->m_prev_attribute->m_next_attribute = attribute; + where->m_prev_attribute = attribute; + attribute->m_parent = this; + } + } + + //! Removes first attribute of the node. + //! If node has no attributes, behaviour is undefined. + //! Use first_attribute() to test if node has attributes. + void remove_first_attribute() + { + assert(first_attribute()); + xml_attribute<Ch> *attribute = m_first_attribute; + if (attribute->m_next_attribute) + { + attribute->m_next_attribute->m_prev_attribute = 0; + } + else + m_last_attribute = 0; + attribute->m_parent = 0; + m_first_attribute = attribute->m_next_attribute; + } + + //! Removes last attribute of the node. + //! If node has no attributes, behaviour is undefined. + //! Use first_attribute() to test if node has attributes. + void remove_last_attribute() + { + assert(first_attribute()); + xml_attribute<Ch> *attribute = m_last_attribute; + if (attribute->m_prev_attribute) + { + attribute->m_prev_attribute->m_next_attribute = 0; + m_last_attribute = attribute->m_prev_attribute; + } + else + m_first_attribute = 0; + attribute->m_parent = 0; + } + + //! Removes specified attribute from node. + //! \param where Pointer to attribute to be removed. + void remove_attribute(xml_attribute<Ch> *where) + { + assert(first_attribute() && where->parent() == this); + if (where == m_first_attribute) + remove_first_attribute(); + else if (where == m_last_attribute) + remove_last_attribute(); + else + { + where->m_prev_attribute->m_next_attribute = where->m_next_attribute; + where->m_next_attribute->m_prev_attribute = where->m_prev_attribute; + where->m_parent = 0; + } + } + + //! Removes all attributes of node. + void remove_all_attributes() + { + for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute) + attribute->m_parent = 0; + m_first_attribute = 0; + } + + private: + + /////////////////////////////////////////////////////////////////////////// + // Restrictions + + // No copying + xml_node(const xml_node &); + void operator =(const xml_node &); + + /////////////////////////////////////////////////////////////////////////// + // Data members + + // Note that some of the pointers below have UNDEFINED values if certain other pointers are 0. + // This is required for maximum performance, as it allows the parser to omit initialization of + // unneded/redundant values. + // + // The rules are as follows: + // 1. first_node and first_attribute contain valid pointers, or 0 if node has no children/attributes respectively + // 2. last_node and last_attribute are valid only if node has at least one child/attribute respectively, otherwise they contain garbage + // 3. prev_sibling and next_sibling are valid only if node has a parent, otherwise they contain garbage + + node_type m_type; // Type of node; always valid + xml_node<Ch> *m_first_node; // Pointer to first child node, or 0 if none; always valid + xml_node<Ch> *m_last_node; // Pointer to last child node, or 0 if none; this value is only valid if m_first_node is non-zero + xml_attribute<Ch> *m_first_attribute; // Pointer to first attribute of node, or 0 if none; always valid + xml_attribute<Ch> *m_last_attribute; // Pointer to last attribute of node, or 0 if none; this value is only valid if m_first_attribute is non-zero + xml_node<Ch> *m_prev_sibling; // Pointer to previous sibling of node, or 0 if none; this value is only valid if m_parent is non-zero + xml_node<Ch> *m_next_sibling; // Pointer to next sibling of node, or 0 if none; this value is only valid if m_parent is non-zero + + }; + + /////////////////////////////////////////////////////////////////////////// + // XML document + + //! This class represents root of the DOM hierarchy. + //! It is also an xml_node and a memory_pool through public inheritance. + //! Use parse() function to build a DOM tree from a zero-terminated XML text string. + //! parse() function allocates memory for nodes and attributes by using functions of xml_document, + //! which are inherited from memory_pool. + //! To access root node of the document, use the document itself, as if it was an xml_node. + //! \param Ch Character type to use. + template<class Ch = char> + class xml_document: public xml_node<Ch>, public memory_pool<Ch> + { + + public: + + //! Constructs empty XML document + xml_document() + : xml_node<Ch>(node_document) + { + } + + //! Parses zero-terminated XML string according to given flags. + //! Passed string will be modified by the parser, unless rapidxml::parse_non_destructive flag is used. + //! The string must persist for the lifetime of the document. + //! In case of error, rapidxml::parse_error exception will be thrown. + //! <br><br> + //! If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning. + //! Make sure that data is zero-terminated. + //! <br><br> + //! Document can be parsed into multiple times. + //! Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool. + //! \param text XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser. + template<int Flags> + void parse(Ch *text) + { + assert(text); + + // Remove current contents + this->remove_all_nodes(); + this->remove_all_attributes(); + + // Parse BOM, if any + parse_bom<Flags>(text); + + // Parse children + while (1) + { + // Skip whitespace before node + skip<whitespace_pred, Flags>(text); + if (*text == 0) + break; + + // Parse and append new child + if (*text == Ch('<')) + { + ++text; // Skip '<' + if (xml_node<Ch> *node = parse_node<Flags>(text)) + this->append_node(node); + } + else + RAPIDXML_PARSE_ERROR("expected <", text); + } + + } + + //! Clears the document by deleting all nodes and clearing the memory pool. + //! All nodes owned by document pool are destroyed. + void clear() + { + this->remove_all_nodes(); + this->remove_all_attributes(); + memory_pool<Ch>::clear(); + } + + private: + + /////////////////////////////////////////////////////////////////////// + // Internal character utility functions + + // Detect whitespace character + struct whitespace_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)]; + } + }; + + // Detect node name character + struct node_name_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)]; + } + }; + + // Detect attribute name character + struct attribute_name_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)]; + } + }; + + // Detect text character (PCDATA) + struct text_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)]; + } + }; + + // Detect text character (PCDATA) that does not require processing + struct text_pure_no_ws_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)]; + } + }; + + // Detect text character (PCDATA) that does not require processing + struct text_pure_with_ws_pred + { + static unsigned char test(Ch ch) + { + return internal::lookup_tables<0>::lookup_text_pure_with_ws[static_cast<unsigned char>(ch)]; + } + }; + + // Detect attribute value character + template<Ch Quote> + struct attribute_value_pred + { + static unsigned char test(Ch ch) + { + if (Quote == Ch('\'')) + return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)]; + if (Quote == Ch('\"')) + return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)]; + return 0; // Should never be executed, to avoid warnings on Comeau + } + }; + + // Detect attribute value character + template<Ch Quote> + struct attribute_value_pure_pred + { + static unsigned char test(Ch ch) + { + if (Quote == Ch('\'')) + return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)]; + if (Quote == Ch('\"')) + return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)]; + return 0; // Should never be executed, to avoid warnings on Comeau + } + }; + + // Insert coded character, using UTF8 or 8-bit ASCII + template<int Flags> + static void insert_coded_character(Ch *&text, unsigned long code) + { + if (Flags & parse_no_utf8) + { + // Insert 8-bit ASCII character + // Todo: possibly verify that code is less than 256 and use replacement char otherwise? + text[0] = static_cast<unsigned char>(code); + text += 1; + } + else + { + // Insert UTF8 sequence + if (code < 0x80) // 1 byte sequence + { + text[0] = static_cast<unsigned char>(code); + text += 1; + } + else if (code < 0x800) // 2 byte sequence + { + text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[0] = static_cast<unsigned char>(code | 0xC0); + text += 2; + } + else if (code < 0x10000) // 3 byte sequence + { + text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[0] = static_cast<unsigned char>(code | 0xE0); + text += 3; + } + else if (code < 0x110000) // 4 byte sequence + { + text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6; + text[0] = static_cast<unsigned char>(code | 0xF0); + text += 4; + } + else // Invalid, only codes up to 0x10FFFF are allowed in Unicode + { + RAPIDXML_PARSE_ERROR("invalid numeric character entity", text); + } + } + } + + // Skip characters until predicate evaluates to true + template<class StopPred, int Flags> + static void skip(Ch *&text) + { + Ch *tmp = text; + while (StopPred::test(*tmp)) + ++tmp; + text = tmp; + } + + // Skip characters until predicate evaluates to true while doing the following: + // - replacing XML character entity references with proper characters (' & " < > &#...;) + // - condensing whitespace sequences to single space character + template<class StopPred, class StopPredPure, int Flags> + static Ch *skip_and_expand_character_refs(Ch *&text) + { + // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip + if (Flags & parse_no_entity_translation && + !(Flags & parse_normalize_whitespace) && + !(Flags & parse_trim_whitespace)) + { + skip<StopPred, Flags>(text); + return text; + } + + // Use simple skip until first modification is detected + skip<StopPredPure, Flags>(text); + + // Use translation skip + Ch *src = text; + Ch *dest = src; + while (StopPred::test(*src)) + { + // If entity translation is enabled + if (!(Flags & parse_no_entity_translation)) + { + // Test if replacement is needed + if (src[0] == Ch('&')) + { + switch (src[1]) + { + + // & ' + case Ch('a'): + if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';')) + { + *dest = Ch('&'); + ++dest; + src += 5; + continue; + } + if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';')) + { + *dest = Ch('\''); + ++dest; + src += 6; + continue; + } + break; + + // " + case Ch('q'): + if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';')) + { + *dest = Ch('"'); + ++dest; + src += 6; + continue; + } + break; + + // > + case Ch('g'): + if (src[2] == Ch('t') && src[3] == Ch(';')) + { + *dest = Ch('>'); + ++dest; + src += 4; + continue; + } + break; + + // < + case Ch('l'): + if (src[2] == Ch('t') && src[3] == Ch(';')) + { + *dest = Ch('<'); + ++dest; + src += 4; + continue; + } + break; + + // &#...; - assumes ASCII + case Ch('#'): + if (src[2] == Ch('x')) + { + unsigned long code = 0; + src += 3; // Skip &#x + while (1) + { + unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)]; + if (digit == 0xFF) + break; + code = code * 16 + digit; + ++src; + } + insert_coded_character<Flags>(dest, code); // Put character in output + } + else + { + unsigned long code = 0; + src += 2; // Skip &# + while (1) + { + unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)]; + if (digit == 0xFF) + break; + code = code * 10 + digit; + ++src; + } + insert_coded_character<Flags>(dest, code); // Put character in output + } + if (*src == Ch(';')) + ++src; + else + RAPIDXML_PARSE_ERROR("expected ;", src); + continue; + + // Something else + default: + // Ignore, just copy '&' verbatim + break; + + } + } + } + + // If whitespace condensing is enabled + if (Flags & parse_normalize_whitespace) + { + // Test if condensing is needed + if (whitespace_pred::test(*src)) + { + *dest = Ch(' '); ++dest; // Put single space in dest + ++src; // Skip first whitespace char + // Skip remaining whitespace chars + while (whitespace_pred::test(*src)) + ++src; + continue; + } + } + + // No replacement, only copy character + *dest++ = *src++; + + } + + // Return new end + text = src; + return dest; + + } + + /////////////////////////////////////////////////////////////////////// + // Internal parsing functions + + // Parse BOM, if any + template<int Flags> + void parse_bom(Ch *&text) + { + // UTF-8? + if (static_cast<unsigned char>(text[0]) == 0xEF && + static_cast<unsigned char>(text[1]) == 0xBB && + static_cast<unsigned char>(text[2]) == 0xBF) + { + text += 3; // Skup utf-8 bom + } + } + + // Parse XML declaration (<?xml...) + template<int Flags> + xml_node<Ch> *parse_xml_declaration(Ch *&text) + { + // If parsing of declaration is disabled + if (!(Flags & parse_declaration_node)) + { + // Skip until end of declaration + while (text[0] != Ch('?') || text[1] != Ch('>')) + { + if (!text[0]) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + text += 2; // Skip '?>' + return 0; + } + + // Create declaration + xml_node<Ch> *declaration = this->allocate_node(node_declaration); + + // Skip whitespace before attributes or ?> + skip<whitespace_pred, Flags>(text); + + // Parse declaration attributes + parse_node_attributes<Flags>(text, declaration); + + // Skip ?> + if (text[0] != Ch('?') || text[1] != Ch('>')) + RAPIDXML_PARSE_ERROR("expected ?>", text); + text += 2; + + return declaration; + } + + // Parse XML comment (<!--...) + template<int Flags> + xml_node<Ch> *parse_comment(Ch *&text) + { + // If parsing of comments is disabled + if (!(Flags & parse_comment_nodes)) + { + // Skip until end of comment + while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>')) + { + if (!text[0]) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + text += 3; // Skip '-->' + return 0; // Do not produce comment node + } + + // Remember value start + Ch *value = text; + + // Skip until end of comment + while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>')) + { + if (!text[0]) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + + // Create comment node + xml_node<Ch> *comment = this->allocate_node(node_comment); + comment->value(value, text - value); + + // Place zero terminator after comment value + if (!(Flags & parse_no_string_terminators)) + *text = Ch('\0'); + + text += 3; // Skip '-->' + return comment; + } + + // Parse DOCTYPE + template<int Flags> + xml_node<Ch> *parse_doctype(Ch *&text) + { + // Remember value start + Ch *value = text; + + // Skip to > + while (*text != Ch('>')) + { + // Determine character type + switch (*text) + { + + // If '[' encountered, scan for matching ending ']' using naive algorithm with depth + // This works for all W3C test files except for 2 most wicked + case Ch('['): + { + ++text; // Skip '[' + int depth = 1; + while (depth > 0) + { + switch (*text) + { + case Ch('['): ++depth; break; + case Ch(']'): --depth; break; + case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text); return 0; + } + ++text; + } + break; + } + + // Error on end of text + case Ch('\0'): + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + + // Other character, skip it + default: + ++text; + + } + } + + // If DOCTYPE nodes enabled + if (Flags & parse_doctype_node) + { + // Create a new doctype node + xml_node<Ch> *doctype = this->allocate_node(node_doctype); + doctype->value(value, text - value); + + // Place zero terminator after value + if (!(Flags & parse_no_string_terminators)) + *text = Ch('\0'); + + text += 1; // skip '>' + return doctype; + } + else + { + text += 1; // skip '>' + return 0; + } + + } + + // Parse PI + template<int Flags> + xml_node<Ch> *parse_pi(Ch *&text) + { + // If creation of PI nodes is enabled + if (Flags & parse_pi_nodes) + { + // Create pi node + xml_node<Ch> *pi = this->allocate_node(node_pi); + + // Extract PI target name + Ch *name = text; + skip<node_name_pred, Flags>(text); + if (text == name) + RAPIDXML_PARSE_ERROR("expected PI target", text); + pi->name(name, text - name); + + // Skip whitespace between pi target and pi + skip<whitespace_pred, Flags>(text); + + // Remember start of pi + Ch *value = text; + + // Skip to '?>' + while (text[0] != Ch('?') || text[1] != Ch('>')) + { + if (*text == Ch('\0')) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + + // Set pi value (verbatim, no entity expansion or whitespace normalization) + pi->value(value, text - value); + + // Place zero terminator after name and value + if (!(Flags & parse_no_string_terminators)) + { + pi->name()[pi->name_size()] = Ch('\0'); + pi->value()[pi->value_size()] = Ch('\0'); + } + + text += 2; // Skip '?>' + return pi; + } + else + { + // Skip to '?>' + while (text[0] != Ch('?') || text[1] != Ch('>')) + { + if (*text == Ch('\0')) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + text += 2; // Skip '?>' + return 0; + } + } + + // Parse and append data + // Return character that ends data. + // This is necessary because this character might have been overwritten by a terminating 0 + template<int Flags> + Ch parse_and_append_data(xml_node<Ch> *node, Ch *&text, Ch *contents_start) + { + // Backup to contents start if whitespace trimming is disabled + if (!(Flags & parse_trim_whitespace)) + text = contents_start; + + // Skip until end of data + Ch *value = text, *end; + if (Flags & parse_normalize_whitespace) + end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text); + else + end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text); + + // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after > + if (Flags & parse_trim_whitespace) + { + if (Flags & parse_normalize_whitespace) + { + // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end + if (*(end - 1) == Ch(' ')) + --end; + } + else + { + // Backup until non-whitespace character is found + while (whitespace_pred::test(*(end - 1))) + --end; + } + } + + // If characters are still left between end and value (this test is only necessary if normalization is enabled) + // Create new data node + if (!(Flags & parse_no_data_nodes)) + { + xml_node<Ch> *data = this->allocate_node(node_data); + data->value(value, end - value); + node->append_node(data); + } + + // Add data to parent node if no data exists yet + if (!(Flags & parse_no_element_values)) + if (*node->value() == Ch('\0')) + node->value(value, end - value); + + // Place zero terminator after value + if (!(Flags & parse_no_string_terminators)) + { + Ch ch = *text; + *end = Ch('\0'); + return ch; // Return character that ends data; this is required because zero terminator overwritten it + } + + // Return character that ends data + return *text; + } + + // Parse CDATA + template<int Flags> + xml_node<Ch> *parse_cdata(Ch *&text) + { + // If CDATA is disabled + if (Flags & parse_no_data_nodes) + { + // Skip until end of cdata + while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>')) + { + if (!text[0]) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + text += 3; // Skip ]]> + return 0; // Do not produce CDATA node + } + + // Skip until end of cdata + Ch *value = text; + while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>')) + { + if (!text[0]) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + + // Create new cdata node + xml_node<Ch> *cdata = this->allocate_node(node_cdata); + cdata->value(value, text - value); + + // Place zero terminator after value + if (!(Flags & parse_no_string_terminators)) + *text = Ch('\0'); + + text += 3; // Skip ]]> + return cdata; + } + + // Parse element node + template<int Flags> + xml_node<Ch> *parse_element(Ch *&text) + { + // Create element node + xml_node<Ch> *element = this->allocate_node(node_element); + + // Extract element name + Ch *name = text; + skip<node_name_pred, Flags>(text); + if (text == name) + RAPIDXML_PARSE_ERROR("expected element name", text); + element->name(name, text - name); + + // Skip whitespace between element name and attributes or > + skip<whitespace_pred, Flags>(text); + + // Parse attributes, if any + parse_node_attributes<Flags>(text, element); + + // Determine ending type + if (*text == Ch('>')) + { + ++text; + parse_node_contents<Flags>(text, element); + } + else if (*text == Ch('/')) + { + ++text; + if (*text != Ch('>')) + RAPIDXML_PARSE_ERROR("expected >", text); + ++text; + } + else + RAPIDXML_PARSE_ERROR("expected >", text); + + // Place zero terminator after name + if (!(Flags & parse_no_string_terminators)) + element->name()[element->name_size()] = Ch('\0'); + + // Return parsed element + return element; + } + + // Determine node type, and parse it + template<int Flags> + xml_node<Ch> *parse_node(Ch *&text) + { + // Parse proper node type + switch (text[0]) + { + + // <... + default: + // Parse and append element node + return parse_element<Flags>(text); + + // <?... + case Ch('?'): + ++text; // Skip ? + if ((text[0] == Ch('x') || text[0] == Ch('X')) && + (text[1] == Ch('m') || text[1] == Ch('M')) && + (text[2] == Ch('l') || text[2] == Ch('L')) && + whitespace_pred::test(text[3])) + { + // '<?xml ' - xml declaration + text += 4; // Skip 'xml ' + return parse_xml_declaration<Flags>(text); + } + else + { + // Parse PI + return parse_pi<Flags>(text); + } + + // <!... + case Ch('!'): + + // Parse proper subset of <! node + switch (text[1]) + { + + // <!- + case Ch('-'): + if (text[2] == Ch('-')) + { + // '<!--' - xml comment + text += 3; // Skip '!--' + return parse_comment<Flags>(text); + } + break; + + // <![ + case Ch('['): + if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && + text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('[')) + { + // '<![CDATA[' - cdata + text += 8; // Skip '![CDATA[' + return parse_cdata<Flags>(text); + } + break; + + // <!D + case Ch('D'): + if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && + text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && + whitespace_pred::test(text[8])) + { + // '<!DOCTYPE ' - doctype + text += 9; // skip '!DOCTYPE ' + return parse_doctype<Flags>(text); + } + + } // switch + + // Attempt to skip other, unrecognized node types starting with <! + ++text; // Skip ! + while (*text != Ch('>')) + { + if (*text == 0) { + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return 0; + } + ++text; + } + ++text; // Skip '>' + return 0; // No node recognized + + } + } + + // Parse contents of the node - children, data etc. + template<int Flags> + void parse_node_contents(Ch *&text, xml_node<Ch> *node) + { + // For all children and text + while (1) + { + // Skip whitespace between > and node contents + Ch *contents_start = text; // Store start of node contents before whitespace is skipped + skip<whitespace_pred, Flags>(text); + Ch next_char = *text; + + // After data nodes, instead of continuing the loop, control jumps here. + // This is because zero termination inside parse_and_append_data() function + // would wreak havoc with the above code. + // Also, skipping whitespace after data nodes is unnecessary. + after_data_node: + + // Determine what comes next: node closing, child node, data node, or 0? + switch (next_char) + { + + // Node closing or child node + case Ch('<'): + if (text[1] == Ch('/')) + { + // Node closing + text += 2; // Skip '</' + if (Flags & parse_validate_closing_tags) + { + // Skip and validate closing tag name + Ch *closing_name = text; + skip<node_name_pred, Flags>(text); + if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true)) + RAPIDXML_PARSE_ERROR("invalid closing tag name", text); + } + else + { + // No validation, just skip name + skip<node_name_pred, Flags>(text); + } + // Skip remaining whitespace after node name + skip<whitespace_pred, Flags>(text); + if (*text != Ch('>')) + RAPIDXML_PARSE_ERROR("expected >", text); + ++text; // Skip '>' + return; // Node closed, finished parsing contents + } + else + { + // Child node + ++text; // Skip '<' + if (xml_node<Ch> *child = parse_node<Flags>(text)) + node->append_node(child); + } + break; + + // End of data - error + case Ch('\0'): + RAPIDXML_PARSE_ERROR("unexpected end of data", text); + return; + + // Data node + default: + next_char = parse_and_append_data<Flags>(node, text, contents_start); + goto after_data_node; // Bypass regular processing after data nodes + + } + } + } + + // Parse XML attributes of the node + template<int Flags> + void parse_node_attributes(Ch *&text, xml_node<Ch> *node) + { + // For all attributes + while (attribute_name_pred::test(*text)) + { + // Extract attribute name + Ch *name = text; + ++text; // Skip first character of attribute name + skip<attribute_name_pred, Flags>(text); + if (text == name) + RAPIDXML_PARSE_ERROR("expected attribute name", name); + + // Create new attribute + xml_attribute<Ch> *attribute = this->allocate_attribute(); + attribute->name(name, text - name); + node->append_attribute(attribute); + + // Skip whitespace after attribute name + skip<whitespace_pred, Flags>(text); + + // Skip = + if (*text != Ch('=')) + RAPIDXML_PARSE_ERROR("expected =", text); + ++text; + + // Add terminating zero after name + if (!(Flags & parse_no_string_terminators)) + attribute->name()[attribute->name_size()] = 0; + + // Skip whitespace after = + skip<whitespace_pred, Flags>(text); + + // Skip quote and remember if it was ' or " + Ch quote = *text; + if (quote != Ch('\'') && quote != Ch('"')) + RAPIDXML_PARSE_ERROR("expected ' or \"", text); + ++text; + + // Extract attribute value and expand char refs in it + Ch *value = text, *end; + const int AttFlags = Flags & ~parse_normalize_whitespace; // No whitespace normalization in attributes + if (quote == Ch('\'')) + end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text); + else + end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text); + + // Set attribute value + attribute->value(value, end - value); + + // Make sure that end quote is present + if (*text != quote) + RAPIDXML_PARSE_ERROR("expected ' or \"", text); + ++text; // Skip quote + + // Add terminating zero after value + if (!(Flags & parse_no_string_terminators)) + attribute->value()[attribute->value_size()] = 0; + + // Skip whitespace after attribute value + skip<whitespace_pred, Flags>(text); + } + } + + }; + + //! \cond internal + namespace internal + { + + // Whitespace (space \n \r \t) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_whitespace[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, // 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1 + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F + }; + + // Node name (anything but space \n \r \t / > ? \0) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_node_name[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Text (i.e. PCDATA) (anything but < \0) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_text[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Text (i.e. PCDATA) that does not require processing when ws normalization is disabled + // (anything but < \0 &) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_text_pure_no_ws[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Text (i.e. PCDATA) that does not require processing when ws normalizationis is enabled + // (anything but < \0 & space \n \r \t) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_text_pure_with_ws[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Attribute name (anything but space \n \r \t / < > = ? ! \0) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_attribute_name[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Attribute data with single quote (anything but ' \0) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Attribute data with single quote that does not require processing (anything but ' \0 &) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1_pure[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Attribute data with double quote (anything but " \0) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Attribute data with double quote that does not require processing (anything but " \0 &) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2_pure[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F + }; + + // Digits (dec and hex, 255 denotes end of numeric character reference) + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_digits[256] = + { + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 0 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 1 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 2 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,255,255,255,255,255,255, // 3 + 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 4 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 5 + 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 6 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 7 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 8 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 9 + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // A + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // B + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // C + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // D + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // E + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 // F + }; + + // Upper case conversion + template<int Dummy> + const unsigned char lookup_tables<Dummy>::lookup_upcase[256] = + { + // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A B C D E F + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 0 + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, // 1 + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, // 2 + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // 3 + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 4 + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, // 5 + 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 6 + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123,124,125,126,127, // 7 + 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, // 8 + 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, // 9 + 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, // A + 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, // B + 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, // C + 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, // D + 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, // E + 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 // F + }; + } + //! \endcond + +} + +// Undefine internal macros +#undef RAPIDXML_PARSE_ERROR + +// On MSVC, restore warnings state +#ifdef _MSC_VER + #pragma warning(pop) +#endif + +#endif diff --git a/gui/remaining.txt b/gui/remaining.txt new file mode 100644 index 000000000..298ee90ad --- /dev/null +++ b/gui/remaining.txt @@ -0,0 +1,4 @@ +* Confirmation of action +* Multi-String Variables +* String Box + diff --git a/gui/resources.cpp b/gui/resources.cpp new file mode 100644 index 000000000..bd71d50b0 --- /dev/null +++ b/gui/resources.cpp @@ -0,0 +1,469 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// resource.cpp - Source to manage GUI resources + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <string> +#include <sstream> +#include <iostream> +#include <iomanip> +#include <fcntl.h> + +#include "../minzip/Zip.h" +extern "C" { +#include "../twcommon.h" +#include "gui.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +#define TMP_RESOURCE_NAME "/tmp/extract.bin" + +Resource::Resource(xml_node<>* node, ZipArchive* pZip __unused) +{ + if (node && node->first_attribute("name")) + mName = node->first_attribute("name")->value(); +} + +int Resource::ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile) +{ + if (!pZip) + return -1; + + std::string src = folderName + "/" + fileName + fileExtn; + + const ZipEntry* binary = mzFindZipEntry(pZip, src.c_str()); + if (binary == NULL) { + return -1; + } + + unlink(destFile.c_str()); + int fd = creat(destFile.c_str(), 0666); + if (fd < 0) + return -1; + + int ret = 0; + if (!mzExtractZipEntryToFile(pZip, binary, fd)) + ret = -1; + + close(fd); + return ret; +} + +void Resource::LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface) +{ + int rc = 0; + if (ExtractResource(pZip, "images", file, ".png", TMP_RESOURCE_NAME) == 0) + { + rc = res_create_surface(TMP_RESOURCE_NAME, surface); + unlink(TMP_RESOURCE_NAME); + } + else if (ExtractResource(pZip, "images", file, "", TMP_RESOURCE_NAME) == 0) + { + // JPG includes the .jpg extension in the filename so extension should be blank + rc = res_create_surface(TMP_RESOURCE_NAME, surface); + unlink(TMP_RESOURCE_NAME); + } + else if (!pZip) + { + // File name in xml may have included .png so try without adding .png + rc = res_create_surface(file.c_str(), surface); + } + if (rc != 0) + LOGINFO("Failed to load image from %s%s, error %d\n", file.c_str(), pZip ? " (zip)" : "", rc); +} + +void Resource::CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect) +{ + if (!source) { + *destination = NULL; + return; + } + if (get_scale_w() != 0 && get_scale_h() != 0) { + float scale_w = get_scale_w(), scale_h = get_scale_h(); + if (retain_aspect) { + if (scale_w < scale_h) + scale_h = scale_w; + else + scale_w = scale_h; + } + if (res_scale_surface(source, destination, scale_w, scale_h)) { + LOGINFO("Error scaling image, using regular size.\n"); + *destination = source; + } + } else { + *destination = source; + } +} + +FontResource::FontResource(xml_node<>* node, ZipArchive* pZip) + : Resource(node, pZip) +{ + origFontSize = 0; + origFont = NULL; + LoadFont(node, pZip); +} + +void FontResource::LoadFont(xml_node<>* node, ZipArchive* pZip) +{ + std::string file; + xml_attribute<>* attr; + + mFont = NULL; + if (!node) + return; + + attr = node->first_attribute("filename"); + if (!attr) + return; + + file = attr->value(); + + if (file.size() >= 4 && file.compare(file.size()-4, 4, ".ttf") == 0) + { + int font_size = 0; + + if (origFontSize != 0) { + attr = node->first_attribute("scale"); + if (attr == NULL) + return; + font_size = origFontSize * atoi(attr->value()) / 100; + } else { + attr = node->first_attribute("size"); + if (attr == NULL) + return; + font_size = scale_theme_min(atoi(attr->value())); + origFontSize = font_size; + } + + int dpi = 300; + + attr = node->first_attribute("dpi"); + if (attr) + dpi = atoi(attr->value()); + + // we can't use TMP_RESOURCE_NAME here because the ttf subsystem is caching the name and scaling needs to reload the font + std::string tmpname = "/tmp/" + file; + if (ExtractResource(pZip, "fonts", file, "", tmpname) == 0) + { + mFont = gr_ttf_loadFont(tmpname.c_str(), font_size, dpi); + } + else + { + file = std::string(TWRES "fonts/") + file; + mFont = gr_ttf_loadFont(file.c_str(), font_size, dpi); + } + } + else + { + LOGERR("Non-TTF fonts are no longer supported.\n"); + } +} + +void FontResource::DeleteFont() { + if (mFont) + gr_ttf_freeFont(mFont); + mFont = NULL; + if (origFont) + gr_ttf_freeFont(origFont); + origFont = NULL; +} + +void FontResource::Override(xml_node<>* node, ZipArchive* pZip) { + if (!origFont) { + origFont = mFont; + } else if (mFont) { + gr_ttf_freeFont(mFont); + mFont = NULL; + } + LoadFont(node, pZip); +} + +FontResource::~FontResource() +{ + DeleteFont(); +} + +ImageResource::ImageResource(xml_node<>* node, ZipArchive* pZip) + : Resource(node, pZip) +{ + std::string file; + gr_surface temp_surface = NULL; + + mSurface = NULL; + if (!node) { + LOGERR("ImageResource node is NULL\n"); + return; + } + + if (node->first_attribute("filename")) + file = node->first_attribute("filename")->value(); + else { + LOGERR("No filename specified for image resource.\n"); + return; + } + + bool retain_aspect = (node->first_attribute("retainaspect") != NULL); + // the value does not matter, if retainaspect is present, we assume that we want to retain it + LoadImage(pZip, file, &temp_surface); + CheckAndScaleImage(temp_surface, &mSurface, retain_aspect); +} + +ImageResource::~ImageResource() +{ + if (mSurface) + res_free_surface(mSurface); +} + +AnimationResource::AnimationResource(xml_node<>* node, ZipArchive* pZip) + : Resource(node, pZip) +{ + std::string file; + int fileNum = 1; + + if (!node) + return; + + if (node->first_attribute("filename")) + file = node->first_attribute("filename")->value(); + else { + LOGERR("No filename specified for image resource.\n"); + return; + } + + bool retain_aspect = (node->first_attribute("retainaspect") != NULL); + // the value does not matter, if retainaspect is present, we assume that we want to retain it + for (;;) + { + std::ostringstream fileName; + fileName << file << std::setfill ('0') << std::setw (3) << fileNum; + + gr_surface surface, temp_surface = NULL; + LoadImage(pZip, fileName.str(), &temp_surface); + CheckAndScaleImage(temp_surface, &surface, retain_aspect); + if (surface) { + mSurfaces.push_back(surface); + fileNum++; + } else + break; // Done loading animation images + } +} + +AnimationResource::~AnimationResource() +{ + std::vector<gr_surface>::iterator it; + + for (it = mSurfaces.begin(); it != mSurfaces.end(); ++it) + res_free_surface(*it); + + mSurfaces.clear(); +} + +FontResource* ResourceManager::FindFont(const std::string& name) const +{ + for (std::vector<FontResource*>::const_iterator it = mFonts.begin(); it != mFonts.end(); ++it) + if (name == (*it)->GetName()) + return *it; + return NULL; +} + +ImageResource* ResourceManager::FindImage(const std::string& name) const +{ + for (std::vector<ImageResource*>::const_iterator it = mImages.begin(); it != mImages.end(); ++it) + if (name == (*it)->GetName()) + return *it; + return NULL; +} + +AnimationResource* ResourceManager::FindAnimation(const std::string& name) const +{ + for (std::vector<AnimationResource*>::const_iterator it = mAnimations.begin(); it != mAnimations.end(); ++it) + if (name == (*it)->GetName()) + return *it; + return NULL; +} + +std::string ResourceManager::FindString(const std::string& name) const +{ + if (this != NULL) { + std::map<std::string, string_resource_struct>::const_iterator it = mStrings.find(name); + if (it != mStrings.end()) + return it->second.value; + LOGERR("String resource '%s' not found. No default value.\n", name.c_str()); + PageManager::AddStringResource("NO DEFAULT", name, "[" + name + ("]")); + } else { + LOGINFO("String resources not loaded when looking for '%s'. No default value.\n", name.c_str()); + } + return "[" + name + ("]"); +} + +std::string ResourceManager::FindString(const std::string& name, const std::string& default_string) const +{ + if (this != NULL) { + std::map<std::string, string_resource_struct>::const_iterator it = mStrings.find(name); + if (it != mStrings.end()) + return it->second.value; + LOGERR("String resource '%s' not found. Using default value.\n", name.c_str()); + PageManager::AddStringResource("DEFAULT", name, default_string); + } else { + LOGINFO("String resources not loaded when looking for '%s'. Using default value.\n", name.c_str()); + } + return default_string; +} + +void ResourceManager::DumpStrings() const +{ + if (this == NULL) { + gui_print("No string resources\n"); + return; + } + std::map<std::string, string_resource_struct>::const_iterator it; + gui_print("Dumping all strings:\n"); + for (it = mStrings.begin(); it != mStrings.end(); it++) + gui_print("source: %s: '%s' = '%s'\n", it->second.source.c_str(), it->first.c_str(), it->second.value.c_str()); + gui_print("Done dumping strings\n"); +} + +ResourceManager::ResourceManager() +{ +} + +void ResourceManager::AddStringResource(std::string resource_source, std::string resource_name, std::string value) +{ + string_resource_struct res; + res.source = resource_source; + res.value = value; + mStrings[resource_name] = res; +} + +void ResourceManager::LoadResources(xml_node<>* resList, ZipArchive* pZip, std::string resource_source) +{ + if (!resList) + return; + + for (xml_node<>* child = resList->first_node(); child; child = child->next_sibling()) + { + std::string type = child->name(); + if (type == "resource") { + // legacy format : <resource type="..."> + xml_attribute<>* attr = child->first_attribute("type"); + type = attr ? attr->value() : "*unspecified*"; + } + + bool error = false; + if (type == "font") + { + FontResource* res = new FontResource(child, pZip); + if (res->GetResource()) + mFonts.push_back(res); + else { + error = true; + delete res; + } + } + else if (type == "fontoverride") + { + if (mFonts.size() != 0 && child && child->first_attribute("name")) { + string FontName = child->first_attribute("name")->value(); + size_t font_count = mFonts.size(), i; + bool found = false; + + for (i = 0; i < font_count; i++) { + if (mFonts[i]->GetName() == FontName) { + mFonts[i]->Override(child, pZip); + found = true; + break; + } + } + if (!found) { + LOGERR("Unable to locate font '%s' for override.\n", FontName.c_str()); + } + } else if (mFonts.size() != 0) + LOGERR("Unable to locate font name for type fontoverride.\n"); + } + else if (type == "image") + { + ImageResource* res = new ImageResource(child, pZip); + if (res->GetResource()) + mImages.push_back(res); + else { + error = true; + delete res; + } + } + else if (type == "animation") + { + AnimationResource* res = new AnimationResource(child, pZip); + if (res->GetResourceCount()) + mAnimations.push_back(res); + else { + error = true; + delete res; + } + } + else if (type == "string") + { + if (xml_attribute<>* attr = child->first_attribute("name")) { + string_resource_struct res; + res.source = resource_source; + res.value = child->value(); + mStrings[attr->value()] = res; + } else + error = true; + } + else + { + LOGERR("Resource type (%s) not supported.\n", type.c_str()); + error = true; + } + + if (error) + { + std::string res_name; + if (child->first_attribute("name")) + res_name = child->first_attribute("name")->value(); + if (res_name.empty() && child->first_attribute("filename")) + res_name = child->first_attribute("filename")->value(); + + if (!res_name.empty()) { + LOGERR("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); + } else + LOGERR("Resource type (%s) failed to load\n", type.c_str()); + } + } +} + +ResourceManager::~ResourceManager() +{ + for (std::vector<FontResource*>::iterator it = mFonts.begin(); it != mFonts.end(); ++it) + delete *it; + + for (std::vector<ImageResource*>::iterator it = mImages.begin(); it != mImages.end(); ++it) + delete *it; + + for (std::vector<AnimationResource*>::iterator it = mAnimations.begin(); it != mAnimations.end(); ++it) + delete *it; +} diff --git a/gui/resources.hpp b/gui/resources.hpp new file mode 100644 index 000000000..2d3067667 --- /dev/null +++ b/gui/resources.hpp @@ -0,0 +1,136 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// resources.hpp - Base classes for resource management of GUI + +#ifndef _RESOURCE_HEADER +#define _RESOURCE_HEADER + +#include <string> +#include <vector> +#include <map> +#include "rapidxml.hpp" + +struct ZipArchive; + +extern "C" { +#include "../minuitwrp/minui.h" +} + +// Base Objects +class Resource +{ +public: + Resource(xml_node<>* node, ZipArchive* pZip); + virtual ~Resource() {} + +public: + std::string GetName() { return mName; } + +private: + std::string mName; + +protected: + static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile); + static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface); + static void CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect); +}; + +class FontResource : public Resource +{ +public: + FontResource(xml_node<>* node, ZipArchive* pZip); + virtual ~FontResource(); + +public: + void* GetResource() { return this ? mFont : NULL; } + int GetHeight() { return gr_ttf_getMaxFontHeight(this ? mFont : NULL); } + void Override(xml_node<>* node, ZipArchive* pZip); + +protected: + void* mFont; + +private: + void LoadFont(xml_node<>* node, ZipArchive* pZip); + void DeleteFont(); + +private: + int origFontSize; + void* origFont; +}; + +class ImageResource : public Resource +{ +public: + ImageResource(xml_node<>* node, ZipArchive* pZip); + virtual ~ImageResource(); + +public: + gr_surface GetResource() { return this ? mSurface : NULL; } + int GetWidth() { return gr_get_width(this ? mSurface : NULL); } + int GetHeight() { return gr_get_height(this ? mSurface : NULL); } + +protected: + gr_surface mSurface; +}; + +class AnimationResource : public Resource +{ +public: + AnimationResource(xml_node<>* node, ZipArchive* pZip); + virtual ~AnimationResource(); + +public: + gr_surface GetResource() { return (!this || mSurfaces.empty()) ? NULL : mSurfaces.at(0); } + gr_surface GetResource(int entry) { return (!this || mSurfaces.empty()) ? NULL : mSurfaces.at(entry); } + int GetWidth() { return gr_get_width(this ? GetResource() : NULL); } + int GetHeight() { return gr_get_height(this ? GetResource() : NULL); } + int GetResourceCount() { return mSurfaces.size(); } + +protected: + std::vector<gr_surface> mSurfaces; +}; + +class ResourceManager +{ +public: + ResourceManager(); + virtual ~ResourceManager(); + void AddStringResource(std::string resource_source, std::string resource_name, std::string value); + void LoadResources(xml_node<>* resList, ZipArchive* pZip, std::string resource_source); + +public: + FontResource* FindFont(const std::string& name) const; + ImageResource* FindImage(const std::string& name) const; + AnimationResource* FindAnimation(const std::string& name) const; + std::string FindString(const std::string& name) const; + std::string FindString(const std::string& name, const std::string& default_string) const; + void DumpStrings() const; + +private: + struct string_resource_struct { + std::string value; + std::string source; + }; + std::vector<FontResource*> mFonts; + std::vector<ImageResource*> mImages; + std::vector<AnimationResource*> mAnimations; + std::map<std::string, string_resource_struct> mStrings; +}; + +#endif // _RESOURCE_HEADER diff --git a/gui/scrolllist.cpp b/gui/scrolllist.cpp new file mode 100644 index 000000000..7540356bf --- /dev/null +++ b/gui/scrolllist.cpp @@ -0,0 +1,652 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <string.h> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" +#include "../data.hpp" + +const float SCROLLING_SPEED_DECREMENT = 0.9; // friction +const int SCROLLING_FLOOR = 2; // minimum pixels for scrolling to stop + +GUIScrollList::GUIScrollList(xml_node<>* node) : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + firstDisplayedItem = mItemSpacing = mFontHeight = mSeparatorH = y_offset = scrollingSpeed = 0; + maxIconWidth = maxIconHeight = mHeaderIconHeight = mHeaderIconWidth = 0; + mHeaderSeparatorH = mHeaderH = actualItemHeight = 0; + mHeaderIsStatic = false; + mBackground = mHeaderIcon = NULL; + mFont = NULL; + mFastScrollW = mFastScrollLineW = mFastScrollRectW = mFastScrollRectH = 0; + mFastScrollRectCurrentY = mFastScrollRectCurrentH = mFastScrollRectTouchY = 0; + lastY = last2Y = fastScroll = 0; + mUpdate = 0; + touchDebounce = 6; + ConvertStrToColor("black", &mBackgroundColor); + ConvertStrToColor("black", &mHeaderBackgroundColor); + ConvertStrToColor("black", &mSeparatorColor); + ConvertStrToColor("black", &mHeaderSeparatorColor); + ConvertStrToColor("white", &mFontColor); + ConvertStrToColor("white", &mHeaderFontColor); + ConvertStrToColor("white", &mFastScrollLineColor); + ConvertStrToColor("white", &mFastScrollRectColor); + hasHighlightColor = false; + allowSelection = true; + selectedItem = NO_ITEM; + + // Load header text + // note: node can be NULL for the emergency console + child = node ? node->first_node("text") : NULL; + if (child) mHeaderText = child->value(); + // Simple way to check for static state + mLastHeaderValue = gui_parse_text(mHeaderText); + mHeaderIsStatic = (mLastHeaderValue == mHeaderText); + + mHighlightColor = LoadAttrColor(FindNode(node, "highlight"), "color", &hasHighlightColor); + + child = FindNode(node, "background"); + if (child) + { + mBackground = LoadAttrImage(child, "resource"); + mBackgroundColor = LoadAttrColor(child, "color"); + } + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH); + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + + // Load the font, and possibly override the color + child = FindNode(node, "font"); + if (child) + { + mFont = LoadAttrFont(child, "resource"); + mFontColor = LoadAttrColor(child, "color"); + mFontHighlightColor = LoadAttrColor(child, "highlightcolor", mFontColor); + mItemSpacing = LoadAttrIntScaleY(child, "spacing"); + } + + // Load the separator if it exists + child = FindNode(node, "separator"); + if (child) + { + mSeparatorColor = LoadAttrColor(child, "color"); + mSeparatorH = LoadAttrIntScaleY(child, "height"); + } + + // Fast scroll + child = FindNode(node, "fastscroll"); + if (child) + { + mFastScrollLineColor = LoadAttrColor(child, "linecolor"); + mFastScrollRectColor = LoadAttrColor(child, "rectcolor"); + + mFastScrollW = LoadAttrIntScaleX(child, "w"); + mFastScrollLineW = LoadAttrIntScaleX(child, "linew"); + mFastScrollRectW = LoadAttrIntScaleX(child, "rectw"); + mFastScrollRectH = LoadAttrIntScaleY(child, "recth"); + } + + // Retrieve the line height + mFontHeight = mFont->GetHeight(); + actualItemHeight = mFontHeight + mItemSpacing + mSeparatorH; + + // Load the header if it exists + child = FindNode(node, "header"); + if (child) + { + mHeaderH = mFontHeight; + mHeaderIcon = LoadAttrImage(child, "icon"); + mHeaderBackgroundColor = LoadAttrColor(child, "background", mBackgroundColor); + mHeaderFontColor = LoadAttrColor(child, "textcolor", mFontColor); + mHeaderSeparatorColor = LoadAttrColor(child, "separatorcolor", mSeparatorColor); + mHeaderSeparatorH = LoadAttrIntScaleY(child, "separatorheight", mSeparatorH); + + if (mHeaderIcon && mHeaderIcon->GetResource()) + { + mHeaderIconWidth = mHeaderIcon->GetWidth(); + mHeaderIconHeight = mHeaderIcon->GetHeight(); + if (mHeaderIconHeight > mHeaderH) + mHeaderH = mHeaderIconHeight; + if (mHeaderIconWidth > maxIconWidth) + maxIconWidth = mHeaderIconWidth; + } + + mHeaderH += mItemSpacing + mHeaderSeparatorH; + if (mHeaderH < actualItemHeight) + mHeaderH = actualItemHeight; + } + + if (actualItemHeight / 3 > 6) + touchDebounce = actualItemHeight / 3; +} + +GUIScrollList::~GUIScrollList() +{ +} + +void GUIScrollList::SetMaxIconSize(int w, int h) +{ + if (w > maxIconWidth) + maxIconWidth = w; + if (h > maxIconHeight) + maxIconHeight = h; + if (maxIconHeight > mFontHeight) { + actualItemHeight = maxIconHeight + mItemSpacing + mSeparatorH; + if (mHeaderH > 0 && actualItemHeight > mHeaderH) + mHeaderH = actualItemHeight; + } +} + +void GUIScrollList::SetVisibleListLocation(size_t list_index) +{ + // This will make sure that the item indicated by list_index is visible on the screen + size_t lines = GetDisplayItemCount(); + + if (list_index <= (unsigned)firstDisplayedItem) { + // list_index is above the currently displayed items, put the selected item at the very top + firstDisplayedItem = list_index; + y_offset = 0; + } else if (list_index >= firstDisplayedItem + lines) { + // list_index is below the currently displayed items, put the selected item at the very bottom + firstDisplayedItem = list_index - lines + 1; + if (GetDisplayRemainder() != 0) { + // There's a partial row displayed, set the scrolling offset so that the selected item really is at the very bottom + firstDisplayedItem--; + y_offset = GetDisplayRemainder() - actualItemHeight; + } else { + // There's no partial row so zero out the offset + y_offset = 0; + } + if (firstDisplayedItem < 0) + firstDisplayedItem = 0; + } + scrollingSpeed = 0; // stop kinetic scrolling on setting visible location + mUpdate = 1; +} + +int GUIScrollList::Render(void) +{ + if (!isConditionTrue()) + return 0; + + // First step, fill background + gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, mBackgroundColor.alpha); + gr_fill(mRenderX, mRenderY + mHeaderH, mRenderW, mRenderH - mHeaderH); + + // don't paint outside of the box + gr_clip(mRenderX, mRenderY, mRenderW, mRenderH); + + // Next, render the background resource (if it exists) + if (mBackground && mBackground->GetResource()) + { + int BackgroundW = mBackground->GetWidth(); + int BackgroundH = mBackground->GetHeight(); + int BackgroundX = mRenderX + ((mRenderW - BackgroundW) / 2); + int BackgroundY = mRenderY + ((mRenderH - BackgroundH) / 2); + gr_blit(mBackground->GetResource(), 0, 0, BackgroundW, BackgroundH, BackgroundX, BackgroundY); + } + + // This tells us how many full lines we can actually render + size_t lines = GetDisplayItemCount(); + + size_t listSize = GetItemCount(); + int listW = mRenderW; // this is only used for the separators - the list items are rendered in the full width of the list + + if (listSize <= lines) { + hasScroll = false; + scrollingSpeed = 0; + lines = listSize; + y_offset = 0; + } else { + hasScroll = true; + listW -= mFastScrollW; // space for fast scroll + lines++; + if (lines < listSize) + lines++; + } + + int yPos = mRenderY + mHeaderH + y_offset; + + // render all visible items + for (size_t line = 0; line < lines; line++) + { + size_t itemindex = line + firstDisplayedItem; + if (itemindex >= listSize) + break; + + RenderItem(itemindex, yPos, itemindex == selectedItem); + + // Add the separator + gr_color(mSeparatorColor.red, mSeparatorColor.green, mSeparatorColor.blue, mSeparatorColor.alpha); + gr_fill(mRenderX, yPos + actualItemHeight - mSeparatorH, listW, mSeparatorH); + + // Move the yPos + yPos += actualItemHeight; + } + + // Render the Header (last so that it overwrites the top most row for per pixel scrolling) + yPos = mRenderY; + if (mHeaderH > 0) { + // First step, fill background + gr_color(mHeaderBackgroundColor.red, mHeaderBackgroundColor.green, mHeaderBackgroundColor.blue, mHeaderBackgroundColor.alpha); + gr_fill(mRenderX, mRenderY, mRenderW, mHeaderH); + + int IconOffsetX = 0; + + // render the icon if it exists + if (mHeaderIcon && mHeaderIcon->GetResource()) + { + gr_blit(mHeaderIcon->GetResource(), 0, 0, mHeaderIconWidth, mHeaderIconHeight, mRenderX + ((mHeaderIconWidth - maxIconWidth) / 2), (yPos + (int)((mHeaderH - mHeaderIconHeight) / 2))); + IconOffsetX = maxIconWidth; + } + + // render the text + gr_color(mHeaderFontColor.red, mHeaderFontColor.green, mHeaderFontColor.blue, mHeaderFontColor.alpha); + gr_textEx_scaleW(mRenderX + IconOffsetX + 5, yPos + (int)(mHeaderH / 2), mLastHeaderValue.c_str(), mFont->GetResource(), mRenderW, TEXT_ONLY_RIGHT, 0); + + // Add the separator + gr_color(mHeaderSeparatorColor.red, mHeaderSeparatorColor.green, mHeaderSeparatorColor.blue, mHeaderSeparatorColor.alpha); + gr_fill(mRenderX, yPos + mHeaderH - mHeaderSeparatorH, mRenderW, mHeaderSeparatorH); + } + + // reset clipping + gr_noclip(); + + // render fast scroll + if (hasScroll) { + int fWidth = mRenderW - listW; + int fHeight = mRenderH - mHeaderH; + int centerX = listW + mRenderX + fWidth / 2; + + // first determine the total list height and where we are in the list + int totalHeight = GetItemCount() * actualItemHeight; // total height of the full list in pixels + int topPos = firstDisplayedItem * actualItemHeight - y_offset; + + // now scale it proportionally to the scrollbar height + int boxH = fHeight * fHeight / totalHeight; // proportional height of the displayed portion + boxH = std::max(boxH, mFastScrollRectH); // but keep a minimum height + int boxY = (fHeight - boxH) * topPos / (totalHeight - fHeight); // pixels relative to top of list + int boxW = mFastScrollRectW; + + int x = centerX - boxW / 2; + int y = mRenderY + mHeaderH + boxY; + + // line above and below box (needs to be split because box can be transparent) + gr_color(mFastScrollLineColor.red, mFastScrollLineColor.green, mFastScrollLineColor.blue, mFastScrollLineColor.alpha); + gr_fill(centerX - mFastScrollLineW / 2, mRenderY + mHeaderH, mFastScrollLineW, boxY); + gr_fill(centerX - mFastScrollLineW / 2, y + boxH, mFastScrollLineW, fHeight - boxY - boxH); + + // box + gr_color(mFastScrollRectColor.red, mFastScrollRectColor.green, mFastScrollRectColor.blue, mFastScrollRectColor.alpha); + gr_fill(x, y, boxW, boxH); + + mFastScrollRectCurrentY = boxY; + mFastScrollRectCurrentH = boxH; + } + mUpdate = 0; + return 0; +} + +void GUIScrollList::RenderItem(size_t itemindex __unused, int yPos, bool selected) +{ + RenderStdItem(yPos, selected, NULL, "implement RenderItem!"); +} + +void GUIScrollList::RenderStdItem(int yPos, bool selected, ImageResource* icon, const char* text, int iconAndTextH) +{ + if (hasHighlightColor && selected) { + // Highlight the item background of the selected item + gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha); + gr_fill(mRenderX, yPos, mRenderW, actualItemHeight); + } + + if (selected) { + // Use the highlight color for the font + gr_color(mFontHighlightColor.red, mFontHighlightColor.green, mFontHighlightColor.blue, mFontHighlightColor.alpha); + } else { + // Set the color for the font + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + } + + if (!iconAndTextH) + iconAndTextH = actualItemHeight; + + // render icon + if (icon && icon->GetResource()) { + int iconH = icon->GetHeight(); + int iconW = icon->GetWidth(); + int iconY = yPos + (iconAndTextH - iconH) / 2; + int iconX = mRenderX + (maxIconWidth - iconW) / 2; + gr_blit(icon->GetResource(), 0, 0, iconW, iconH, iconX, iconY); + } + + // render label text + int textX = mRenderX + maxIconWidth + 5; + int textY = yPos + (iconAndTextH / 2); + gr_textEx_scaleW(textX, textY, text, mFont->GetResource(), mRenderW, TEXT_ONLY_RIGHT, 0); +} + +int GUIScrollList::Update(void) +{ + if (!isConditionTrue()) + return 0; + + if (!mHeaderIsStatic) { + std::string newValue = gui_parse_text(mHeaderText); + if (mLastHeaderValue != newValue) { + mLastHeaderValue = newValue; + mUpdate = 1; + } + } + + // Handle kinetic scrolling + // maximum number of items to scroll per update + float maxItemsScrolledPerFrame = std::max(2.5, float(GetDisplayItemCount() / 4) + 0.5); + + int maxScrollDistance = actualItemHeight * maxItemsScrolledPerFrame; + int oldScrollingSpeed = scrollingSpeed; + if (scrollingSpeed == 0) { + // Do nothing + return 0; + } else if (scrollingSpeed > 0) { + if (scrollingSpeed < maxScrollDistance) + y_offset += scrollingSpeed; + else + y_offset += maxScrollDistance; + scrollingSpeed *= SCROLLING_SPEED_DECREMENT; + if (scrollingSpeed == oldScrollingSpeed) + --scrollingSpeed; + } else if (scrollingSpeed < 0) { + if (abs(scrollingSpeed) < maxScrollDistance) + y_offset += scrollingSpeed; + else + y_offset -= maxScrollDistance; + scrollingSpeed *= SCROLLING_SPEED_DECREMENT; + if (scrollingSpeed == oldScrollingSpeed) + ++scrollingSpeed; + } + if (abs(scrollingSpeed) < SCROLLING_FLOOR) + scrollingSpeed = 0; + HandleScrolling(); + mUpdate = 1; + + return 0; +} + +size_t GUIScrollList::HitTestItem(int x __unused, int y) +{ + // We only care about y position + if (y < mRenderY || y - mRenderY <= mHeaderH || y - mRenderY > mRenderH) + return NO_ITEM; + + int startSelection = (y - mRenderY - mHeaderH); + + // Locate the correct item + size_t actualSelection = firstDisplayedItem; + int selectY = y_offset; + while (selectY + actualItemHeight < startSelection) { + selectY += actualItemHeight; + actualSelection++; + } + + if (actualSelection < GetItemCount()) + return actualSelection; + + return NO_ITEM; +} + +int GUIScrollList::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + switch (state) + { + case TOUCH_START: + if (hasScroll && x >= mRenderX + mRenderW - mFastScrollW) { + fastScroll = 1; // Initial touch is in the fast scroll region + int fastScrollBoxTop = mFastScrollRectCurrentY + mRenderY + mHeaderH; + int fastScrollBoxBottom = fastScrollBoxTop + mFastScrollRectCurrentH; + if (y >= fastScrollBoxTop && y < fastScrollBoxBottom) + // user grabbed the fastscroll bar + // try to keep the initially touched part of the scrollbar under the finger + mFastScrollRectTouchY = y - fastScrollBoxTop; + else + // user tapped outside the fastscroll bar + // center fastscroll rect on the initial touch position + mFastScrollRectTouchY = mFastScrollRectCurrentH / 2; + } + + if (scrollingSpeed != 0) { + selectedItem = NO_ITEM; // this allows the user to tap the list to stop the scrolling without selecting the item they tap + scrollingSpeed = 0; // stop scrolling on a new touch + } else if (!fastScroll && allowSelection) { + // find out which item the user touched + selectedItem = HitTestItem(x, y); + } + if (selectedItem != NO_ITEM) + mUpdate = 1; + lastY = last2Y = y; + break; + + case TOUCH_DRAG: + if (fastScroll) + { + int relY = y - mRenderY - mHeaderH; // touch position relative to window + int windowH = mRenderH - mHeaderH; + int totalHeight = GetItemCount() * actualItemHeight; // total height of the full list in pixels + + // calculate new top position of the fastscroll bar relative to window + int newY = relY - mFastScrollRectTouchY; + // keep it fully inside the list + newY = std::min(std::max(newY, 0), windowH - mFastScrollRectCurrentH); + + // now compute the new scroll position for the list + int newTopPos = newY * (totalHeight - windowH) / (windowH - mFastScrollRectCurrentH); // new top pixel of list + newTopPos = std::min(newTopPos, totalHeight - windowH); // account for rounding errors + firstDisplayedItem = newTopPos / actualItemHeight; + y_offset = - newTopPos % actualItemHeight; + + selectedItem = NO_ITEM; + mUpdate = 1; + scrollingSpeed = 0; // prevent kinetic scrolling when using fast scroll + break; + } + + // Provide some debounce on initial touches + if (selectedItem != NO_ITEM && abs(y - lastY) < touchDebounce) { + mUpdate = 1; + break; + } + + selectedItem = NO_ITEM; // nothing is selected because we dragged too far + // Handle scrolling + if (hasScroll) { + y_offset += y - lastY; // adjust the scrolling offset based on the difference between the starting touch and the current touch + last2Y = lastY; // keep track of previous y locations so that we can tell how fast to scroll for kinetic scrolling + lastY = y; // update last touch to the current touch so we can tell how far and what direction we scroll for the next touch event + + HandleScrolling(); + } else + y_offset = 0; + mUpdate = 1; + break; + + case TOUCH_RELEASE: + if (fastScroll) + mUpdate = 1; // get rid of touch effects on the fastscroll bar + fastScroll = 0; + if (selectedItem != NO_ITEM) { + // We've selected an item! + NotifySelect(selectedItem); + mUpdate = 1; + + DataManager::Vibrate("tw_button_vibrate"); + selectedItem = NO_ITEM; + } else { + // Start kinetic scrolling + scrollingSpeed = lastY - last2Y; + if (abs(scrollingSpeed) < touchDebounce) + scrollingSpeed = 0; + } + case TOUCH_REPEAT: + case TOUCH_HOLD: + break; + } + return 0; +} + +void GUIScrollList::HandleScrolling() +{ + // handle dragging downward, scrolling upward + // the offset should always be <= 0 and > -actualItemHeight, adjust the first display row and offset as needed + while (firstDisplayedItem && y_offset > 0) { + firstDisplayedItem--; + y_offset -= actualItemHeight; + } + if (firstDisplayedItem == 0 && y_offset > 0) { + y_offset = 0; // user kept dragging downward past the top of the list, so always reset the offset to 0 since we can't scroll any further in this direction + scrollingSpeed = 0; // stop kinetic scrolling + } + + // handle dragging upward, scrolling downward + int totalSize = GetItemCount(); + int lines = GetDisplayItemCount(); // number of full lines our list can display at once + int bottom_offset = GetDisplayRemainder() - actualItemHeight; // extra display area that can display a partial line for per pixel scrolling + + // the offset should always be <= 0 and > -actualItemHeight, adjust the first display row and offset as needed + while (firstDisplayedItem + lines + (bottom_offset ? 1 : 0) < totalSize && abs(y_offset) > actualItemHeight) { + firstDisplayedItem++; + y_offset += actualItemHeight; + } + // Check if we dragged too far, set the list at the bottom and adjust offset as needed + if (bottom_offset != 0 && firstDisplayedItem + lines + 1 >= totalSize && y_offset <= bottom_offset) { + firstDisplayedItem = totalSize - lines - 1; + y_offset = bottom_offset; + scrollingSpeed = 0; // stop kinetic scrolling + } else if (firstDisplayedItem + lines >= totalSize && y_offset < 0) { + firstDisplayedItem = totalSize - lines; + y_offset = 0; + scrollingSpeed = 0; // stop kinetic scrolling + } +} + +int GUIScrollList::GetDisplayItemCount() +{ + return (mRenderH - mHeaderH) / (actualItemHeight); +} + +int GUIScrollList::GetDisplayRemainder() +{ + return (mRenderH - mHeaderH) % actualItemHeight; +} + +int GUIScrollList::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + if (!isConditionTrue()) + return 0; + + if (!mHeaderIsStatic) { + std::string newValue = gui_parse_text(mHeaderText); + if (mLastHeaderValue != newValue) { + mLastHeaderValue = newValue; + firstDisplayedItem = 0; + y_offset = 0; + scrollingSpeed = 0; // stop kinetic scrolling on variable changes + mUpdate = 1; + } + } + return 0; +} + +int GUIScrollList::SetRenderPos(int x, int y, int w /* = 0 */, int h /* = 0 */) +{ + mRenderX = x; + mRenderY = y; + if (w || h) + { + mRenderW = w; + mRenderH = h; + } + SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); + mUpdate = 1; + return 0; +} + +void GUIScrollList::SetPageFocus(int inFocus) +{ + if (inFocus) { + NotifyVarChange("", ""); // This forces a check for the header text + scrollingSpeed = 0; // stop kinetic scrolling on page changes + mUpdate = 1; + } +} + +bool GUIScrollList::AddLines(std::vector<std::string>* origText, std::vector<std::string>* origColor, size_t* lastCount, std::vector<std::string>* rText, std::vector<std::string>* rColor) +{ + if (*lastCount == origText->size()) + return false; // nothing to add + + size_t prevCount = *lastCount; + *lastCount = origText->size(); + + // Due to word wrap, figure out what / how the newly added text needs to be added to the render vector that is word wrapped + // Note, that multiple consoles on different GUI pages may be different widths or use different fonts, so the word wrapping + // may different in different console windows + for (size_t i = prevCount; i < *lastCount; i++) { + string curr_line = origText->at(i); + string curr_color; + if (origColor) + curr_color = origColor->at(i); + for (;;) { + size_t line_char_width = gr_ttf_maxExW(curr_line.c_str(), mFont->GetResource(), mRenderW); + if (line_char_width < curr_line.size()) { + //string left = curr_line.substr(0, line_char_width); + size_t wrap_pos = curr_line.find_last_of(" ,./:-_;", line_char_width - 1); + if (wrap_pos == string::npos) + wrap_pos = line_char_width; + else if (wrap_pos < line_char_width - 1) + wrap_pos++; + rText->push_back(curr_line.substr(0, wrap_pos)); + if (origColor) + rColor->push_back(curr_color); + curr_line = curr_line.substr(wrap_pos); + /* After word wrapping, delete any leading spaces. Note that the word wrapping is not smart enough to know not + * to wrap in the middle of something like ... so some of the ... could appear on the following line. */ + curr_line.erase(0, curr_line.find_first_not_of(" ")); + } else { + rText->push_back(curr_line); + if (origColor) + rColor->push_back(curr_color); + break; + } + } + } + return true; +} diff --git a/gui/slider.cpp b/gui/slider.cpp new file mode 100644 index 000000000..ed5c615ce --- /dev/null +++ b/gui/slider.cpp @@ -0,0 +1,220 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// slider.cpp - GUISlider object +// Pulled & ported from https://raw.github.com/agrabren/RecoverWin/master/gui/slider.cpp + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> +#include "../data.hpp" + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUISlider::GUISlider(xml_node<>* node) : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + sAction = NULL; + sSliderLabel = NULL; + sSlider = NULL; + sSliderUsed = NULL; + sTouch = NULL; + sTouchW = 20; + + if (!node) + { + LOGERR("GUISlider created without XML node\n"); + return; + } + + // Load the resources + child = FindNode(node, "resource"); + if (child) + { + sSlider = LoadAttrImage(child, "base"); + sSliderUsed = LoadAttrImage(child, "used"); + sTouch = LoadAttrImage(child, "touch"); + } + + // Load the text label + sSliderLabel = new GUIText(node); + if (sSliderLabel->Render() < 0) + { + delete sSliderLabel; + sSliderLabel = NULL; + } + + // Load the placement + Placement TextPlacement = CENTER; + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH, &TextPlacement); + + mRenderW = sSlider->GetWidth(); + mRenderH = sSlider->GetHeight(); + if (TextPlacement == CENTER || TextPlacement == CENTER_X_ONLY) { + mRenderX = mRenderX - (mRenderW / 2); + if (TextPlacement == CENTER) { + mRenderY = mRenderY - (mRenderH / 2); + } + } + if (sSliderLabel) { + int sTextX = mRenderX + (mRenderW / 2); + int w, h; + sSliderLabel->GetCurrentBounds(w, h); + int sTextY = mRenderY + ((mRenderH - h) / 2); + sSliderLabel->SetRenderPos(sTextX, sTextY); + sSliderLabel->SetMaxWidth(mRenderW); + } + if (sTouch && sTouch->GetResource()) + { + sTouchW = sTouch->GetWidth(); // Width of the "touch image" that follows the touch (arrow) + sTouchH = sTouch->GetHeight(); // Height of the "touch image" that follows the touch (arrow) + } + + //LOGINFO("mRenderW: %i mTouchW: %i\n", mRenderW, mTouchW); + mActionX = mRenderX; + mActionY = mRenderY; + mActionW = mRenderW; + mActionH = mRenderH; + + sAction = new GUIAction(node); + + sCurTouchX = mRenderX; + sUpdate = 1; +} + +GUISlider::~GUISlider() +{ + delete sAction; + delete sSliderLabel; +} + +int GUISlider::Render(void) +{ + if (!isConditionTrue()) + return 0; + + if (!sSlider || !sSlider->GetResource()) + return -1; + + // Draw the slider + gr_blit(sSlider->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + + // Draw the used + if (sSliderUsed && sSliderUsed->GetResource() && sCurTouchX > mRenderX) + gr_blit(sSliderUsed->GetResource(), 0, 0, sCurTouchX - mRenderX, mRenderH, mRenderX, mRenderY); + + // Draw the touch icon + if (sTouch && sTouch->GetResource()) + gr_blit(sTouch->GetResource(), 0, 0, sTouchW, sTouchH, sCurTouchX, (mRenderY + ((mRenderH - sTouchH) / 2))); + + if (sSliderLabel) { + int ret = sSliderLabel->Render(); + if (ret < 0) return ret; + } + + sUpdate = 0; + return 0; +} + +int GUISlider::Update(void) +{ + if (!isConditionTrue()) + return 0; + + if (sUpdate) + return 2; + return 0; +} + +int GUISlider::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + static bool dragging = false; + + switch (state) + { + case TOUCH_START: + if (x >= mRenderX && x <= mRenderX + sTouchW && + y >= mRenderY && y <= mRenderY + mRenderH) + { + sCurTouchX = x - (sTouchW / 2); + if (sCurTouchX < mRenderX) + sCurTouchX = mRenderX; + dragging = true; + } + break; + + case TOUCH_DRAG: + if (!dragging) + return 0; + if (y < mRenderY - sTouchH || y > mRenderY + (sTouchH * 2)) + { + sCurTouchX = mRenderX; + dragging = false; + sUpdate = 1; + break; + } + sCurTouchX = x - (sTouchW / 2); + if (sCurTouchX < mRenderX) + sCurTouchX = mRenderX; + if (sCurTouchX > mRenderX + mRenderW - sTouchW) + sCurTouchX = mRenderX + mRenderW - sTouchW; + sUpdate = 1; + break; + + case TOUCH_RELEASE: + if (!dragging) + return 0; + + if (sCurTouchX >= mRenderX + mRenderW - sTouchW) { + DataManager::Vibrate("tw_button_vibrate"); + sAction->doActions(); + } + + sCurTouchX = mRenderX; + dragging = false; + sUpdate = 1; + case TOUCH_REPEAT: + case TOUCH_HOLD: + break; + } + return 0; +} diff --git a/gui/slidervalue.cpp b/gui/slidervalue.cpp new file mode 100644 index 000000000..6f007e23b --- /dev/null +++ b/gui/slidervalue.cpp @@ -0,0 +1,440 @@ +/* + Copyright 2017 TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// slidervalue.cpp - GUISliderValue object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUISliderValue::GUISliderValue(xml_node<>* node) : GUIObject(node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + mMin = 0; + mMax = 100; + mValue = 0; + mLineH = 2; + mLinePadding = 10; + mSliderW = 5; + mSliderH = 30; + mLineX = 0; + mLineY = 0; + mValueStr = NULL; + mAction = NULL; + mShowCurr = true; + mShowRange = false; + mChangeOnDrag = false; + mRendered = false; + mBackgroundImage = NULL; + mHandleImage = NULL; + mHandleHoverImage = NULL; + mDragging = false; + + mLabel = NULL; + ConvertStrToColor("white", &mTextColor); + ConvertStrToColor("white", &mLineColor); + ConvertStrToColor("blue", &mSliderColor); + + if (!node) + { + LOGERR("GUISliderValue created without XML node\n"); + return; + } + + mLabel = new GUIText(node); + if (mLabel->Render() < 0) + { + delete mLabel; + mLabel = NULL; + } + + mAction = new GUIAction(node); + + child = FindNode(node, "font"); + if (child) + { + mFont = LoadAttrFont(child, "resource"); + mTextColor = LoadAttrColor(child, "color", mTextColor); + } + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW); + + child = FindNode(node, "colors"); + if (child) + { + mLineColor = LoadAttrColor(child, "line"); + mSliderColor = LoadAttrColor(child, "slider"); + } + + child = FindNode(node, "resource"); + if (child) + { + mBackgroundImage = LoadAttrImage(child, "background"); + mHandleImage = LoadAttrImage(child, "handle"); + mHandleHoverImage = LoadAttrImage(child, "handlehover"); + } + + child = FindNode(node, "data"); + if (child) + { + attr = child->first_attribute("variable"); + if (attr) + mVariable = attr->value(); + + attr = child->first_attribute("min"); + if (attr) + { + mMinStr = gui_parse_text(attr->value()); + mMin = atoi(mMinStr.c_str()); + } + + attr = child->first_attribute("max"); + if (attr) + { + mMaxStr = gui_parse_text(attr->value()); + mMax = atoi(mMaxStr.c_str()); + } + + if (mMin > mMax) + mMin = mMax; + + attr = child->first_attribute("default"); + if (attr) + { + string parsevalue = gui_parse_text(attr->value()); + int def = atoi(parsevalue.c_str()); + + if (def < mMin) + def = mMin; + else if (def > mMax) + def = mMax; + DataManager::SetValue(mVariable, def); + } + + attr = child->first_attribute("showrange"); + if (attr) + mShowRange = atoi(attr->value()); + + attr = child->first_attribute("showcurr"); + if (attr) + mShowCurr = atoi(attr->value()); + + attr = child->first_attribute("changeondrag"); + if (attr) + mChangeOnDrag = atoi(attr->value()); + } + + child = FindNode(node, "dimensions"); + if (child) + { + mLineH = LoadAttrIntScaleY(child, "lineh", mLineH); + mLinePadding = LoadAttrIntScaleX(child, "linepadding", mLinePadding); + mSliderW = LoadAttrIntScaleX(child, "sliderw", mSliderW); + mSliderH = LoadAttrIntScaleY(child, "sliderh", mSliderH); + } + + mFontHeight = mFont->GetHeight(); + + if (mShowCurr) + { + int maxLen = std::max(strlen(mMinStr.c_str()), strlen(mMaxStr.c_str())); + mValueStr = new char[maxLen+1]; + } + + loadValue(true); + + if (mShowRange) + { + int textW = std::max(measureText(mMaxStr), measureText(mMinStr)); + mLinePadding += textW; + } + + SetRenderPos(mRenderX, mRenderY, mRenderW); +} + +GUISliderValue::~GUISliderValue() +{ + delete mLabel; + delete mAction; + delete[] mValueStr; +} + +void GUISliderValue::loadValue(bool force) +{ + if (!mVariable.empty()) + { + int value = DataManager::GetIntValue(mVariable); + if (mValue == value && !force) + return; + + mValue = value; + } + + mValue = std::max(mValue, mMin); + mValue = std::min(mValue, mMax); + mValuePct = pctFromValue(mValue); + mRendered = false; +} + +int GUISliderValue::SetRenderPos(int x, int y, int w, int h) +{ + mRenderX = x; + mRenderY = y; + if (w || h) + { + mRenderW = w; + mRenderH = h; + } + + mRenderH = mSliderH; + if (mShowCurr) + mRenderH += mFontHeight; + + if (mLabel) + { + int lw, lh; + mLabel->GetCurrentBounds(lw, lh); + int textX = mRenderX + (mRenderW/2 - lw/2); + + mLabel->SetRenderPos(textX, mRenderY); + + y += lh; + mRenderH += lh; + } + + mSliderY = y; + + mActionX = mRenderX; + mActionY = mRenderY; + mActionW = mRenderW; + mActionH = mRenderH; + + if (mBackgroundImage && mBackgroundImage->GetResource()) + { + mLineW = mBackgroundImage->GetWidth(); + mLineH = mBackgroundImage->GetHeight(); + } + else + mLineW = mRenderW - (mLinePadding * 2); + + mLineY = y + (mSliderH/2 - mLineH/2); + mLineX = mRenderX + (mRenderW/2 - mLineW/2); + + return 0; +} + +int GUISliderValue::measureText(const std::string& str) +{ + void* fontResource = NULL; + if (mFont) fontResource = mFont->GetResource(); + + return gr_ttf_measureEx(str.c_str(), fontResource); +} + +int GUISliderValue::Render(void) +{ + if (!isConditionTrue()) + { + mRendered = false; + return 0; + } + + if (mLabel) + { + int w, h; + mLabel->GetCurrentBounds(w, h); + if (w != mLabelW) { + mLabelW = w; + int textX = mRenderX + (mRenderW/2 - mLabelW/2); + mLabel->SetRenderPos(textX, mRenderY); + } + int res = mLabel->Render(); + if (res < 0) + return res; + } + + // line + if (mBackgroundImage && mBackgroundImage->GetResource()) + { + gr_blit(mBackgroundImage->GetResource(), 0, 0, mLineW, mLineH, mLineX, mLineY); + } + else + { + gr_color(mLineColor.red, mLineColor.green, mLineColor.blue, mLineColor.alpha); + gr_fill(mLineX, mLineY, mLineW, mLineH); + } + + // slider + uint32_t sliderX = mLineX + (mValuePct*(mLineW - mSliderW))/100; + + if (mHandleImage && mHandleImage->GetResource()) + { + gr_surface s = mHandleImage->GetResource(); + if (mDragging && mHandleHoverImage && mHandleHoverImage->GetResource()) + s = mHandleHoverImage->GetResource(); + gr_blit(s, 0, 0, mSliderW, mSliderH, sliderX, mLineY + (mLineH/2 - mSliderH/2)); + } + else + { + gr_color(mSliderColor.red, mSliderColor.green, mSliderColor.blue, mSliderColor.alpha); + gr_fill(sliderX, mSliderY, mSliderW, mSliderH); + } + + void *fontResource = NULL; + if (mFont) fontResource = mFont->GetResource(); + gr_color(mTextColor.red, mTextColor.green, mTextColor.blue, mTextColor.alpha); + if (mShowRange) + { + int rangeY = (mLineY - mLineH/2) - mFontHeight/2; + gr_textEx_scaleW(mRenderX + mPadding/2, rangeY, mMinStr.c_str(), fontResource, mRenderW, TOP_LEFT, 0); + gr_textEx_scaleW(mLineX + mLineW + mPadding/2, rangeY, mMaxStr.c_str(), fontResource, mRenderW, TOP_LEFT, 0); + } + + if (mValueStr && mShowCurr) + { + sprintf(mValueStr, "%d", mValue); + int textW = measureText(mValueStr); + gr_textEx_scaleW(mRenderX + (mRenderW/2 - textW/2), mSliderY+mSliderH, mValueStr, fontResource, mRenderW, TOP_LEFT, 0); + } + + mRendered = true; + return 0; +} + +int GUISliderValue::Update(void) +{ + if (!isConditionTrue()) + return mRendered ? 2 : 0; + if (!mRendered) + return 2; + + if (mLabel) + return mLabel->Update(); + return 0; +} + +int GUISliderValue::valueFromPct(float pct) +{ + int range = abs(mMax - mMin); + return mMin + (pct * range) / 100; +} + +float GUISliderValue::pctFromValue(int value) +{ + return float((value - mMin) * 100) / abs(mMax - mMin); +} + +int GUISliderValue::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + switch (state) + { + case TOUCH_START: + if (x >= mLineX && x <= mLineX + mLineW && + y >= mRenderY && y <= mRenderY + mRenderH) + { + mDragging = true; + } + // no break + case TOUCH_DRAG: + { + if (!mDragging) return 0; + + x = std::max(mLineX + mSliderW/2, x); + x = std::min(mLineX + mLineW - mSliderW/2, x); + + mValuePct = float(((x - (mLineX + mSliderW/2)) * 100) / (mLineW - mSliderW)); + int newVal = valueFromPct(mValuePct); + if (newVal != mValue) { + mRendered = false; + mValue = newVal; + if (mChangeOnDrag) { + if (!mVariable.empty()) + DataManager::SetValue(mVariable, mValue); + if (mAction) + mAction->doActions(); + } + } + break; + } + case TOUCH_RELEASE: + { + if (!mDragging) return 0; + mDragging = false; + + if (!mVariable.empty()) + DataManager::SetValue(mVariable, mValue); + if (mAction) + mAction->doActions(); + break; + } + case TOUCH_REPEAT: + case TOUCH_HOLD: + break; + } + return 0; +} + +int GUISliderValue::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + if (mLabel) + mLabel->NotifyVarChange(varName, value); + if (varName == mVariable) { + int newVal = atoi(value.c_str()); + if (newVal != mValue) { + mValue = newVal; + mValuePct = pctFromValue(mValue); + mRendered = false; + } + } + return 0; +} + +void GUISliderValue::SetPageFocus(int inFocus) +{ + if (inFocus) + loadValue(); +} diff --git a/gui/terminal.cpp b/gui/terminal.cpp new file mode 100644 index 000000000..fe80fb097 --- /dev/null +++ b/gui/terminal.cpp @@ -0,0 +1,906 @@ +/* + Copyright 2016 _that/TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// terminal.cpp - GUITerminal object + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <unistd.h> +#include <termio.h> + +#include <string> +#include <cctype> +#include <linux/input.h> +#include <sys/wait.h> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +#if 0 +#define debug_printf printf +#else +#define debug_printf(...) +#endif + +extern int g_pty_fd; // in gui.cpp where the select is + +/* +Pseudoterminal handler. +*/ +class Pseudoterminal +{ +public: + Pseudoterminal() : fdMaster(0), pid(0) + { + } + + bool started() const { return pid > 0; } + + bool start() + { + fdMaster = getpt(); + if (fdMaster < 0) { + LOGERR("Error %d on getpt()\n", errno); + return false; + } + + if (unlockpt(fdMaster) != 0) { + LOGERR("Error %d on unlockpt()\n", errno); + return false; + } + + pid = fork(); + if (pid < 0) { + LOGERR("fork failed for pty, error %d\n", errno); + close(fdMaster); + pid = 0; + return false; + } + else if (pid) { + // child started, now someone needs to periodically read from fdMaster + // and write it to the terminal + // this currently works through gui.cpp calling terminal_pty_read below + g_pty_fd = fdMaster; + return true; + } + else { + int fdSlave = open(ptsname(fdMaster), O_RDWR); + close(fdMaster); + runSlave(fdSlave); + } + // we can't get here + LOGERR("impossible error in pty\n"); + return false; + } + + void runSlave(int fdSlave) + { + dup2(fdSlave, 0); // PTY becomes standard input (0) + dup2(fdSlave, 1); // PTY becomes standard output (1) + dup2(fdSlave, 2); // PTY becomes standard error (2) + + // Now the original file descriptor is useless + close(fdSlave); + + // Make the current process a new session leader + if (setsid() == (pid_t)-1) + LOGERR("setsid failed: %d\n", errno); + + // As the child is a session leader, set the controlling terminal to be the slave side of the PTY + // (Mandatory for programs like the shell to make them manage correctly their outputs) + ioctl(0, TIOCSCTTY, 1); + + execl("/sbin/sh", "sh", NULL); + _exit(127); + } + + int read(char* buffer, size_t size) + { + if (!started()) { + LOGERR("someone tried to read from pty, but it was not started\n"); + return -1; + } + int rc = ::read(fdMaster, buffer, size); + debug_printf("pty read: %d bytes\n", rc); + if (rc < 0) { + // assume child has died (usual errno when shell exits seems to be EIO == 5) + if (errno != EIO) + LOGERR("pty read failed: %d\n", errno); + stop(); + } + return rc; + } + + int write(const char* buffer, size_t size) + { + if (!started()) { + LOGERR("someone tried to write to pty, but it was not started\n"); + return -1; + } + int rc = ::write(fdMaster, buffer, size); + debug_printf("pty write: %d bytes -> %d\n", size, rc); + if (rc < 0) { + LOGERR("pty write failed: %d\n", errno); + // assume child has died + stop(); + } + return rc; + } + + template<size_t n> + inline int write(const char (&literal)[n]) + { + return write(literal, n-1); + } + + void resize(int xChars, int yChars, int w, int h) + { + struct winsize ws; + ws.ws_row = yChars; + ws.ws_col = xChars; + ws.ws_xpixel = w; + ws.ws_ypixel = h; + if (ioctl(fdMaster, TIOCSWINSZ, &ws) < 0) + LOGERR("failed to set window size, error %d\n", errno); + } + + void stop() + { + if (!started()) { + LOGERR("someone tried to stop pty, but it was not started\n"); + return; + } + close(fdMaster); + g_pty_fd = fdMaster = -1; + int status; + waitpid(pid, &status, WNOHANG); // avoid zombies but don't hang if the child is still alive and we got here due to some error + pid = 0; + } + +private: + int fdMaster; + pid_t pid; +}; + +// UTF-8 decoder +// Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de> +// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +const uint32_t UTF8_ACCEPT = 0; +const uint32_t UTF8_REJECT = 1; + +static const uint8_t utf8d[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df + 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef + 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff + 0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2 + 1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4 + 1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6 + 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8 +}; + +uint32_t inline utf8decode(uint32_t* state, uint32_t* codep, uint32_t byte) +{ + uint32_t type = utf8d[byte]; + + *codep = (*state != UTF8_ACCEPT) ? + (byte & 0x3fu) | (*codep << 6) : + (0xff >> type) & (byte); + + *state = utf8d[256 + *state*16 + type]; + return *state; +} +// end of UTF-8 decoder + +// Append a UTF-8 codepoint to string s +size_t utf8add(std::string& s, uint32_t cp) +{ + if (cp < 0x7f) { + s += cp; + return 1; + } + else if (cp < 0x7ff) { + s += (0xc0 | (cp >> 6)); + s += (0x80 | (cp & 0x3f)); + return 2; + } + else if (cp < 0xffff) { + s += (0xe0 | (cp >> 12)); + s += (0x80 | ((cp >> 6) & 0x3f)); + s += (0x80 | (cp & 0x3f)); + return 3; + } + else if (cp < 0x1fffff) { + s += (0xf0 | (cp >> 18)); + s += (0x80 | ((cp >> 12) & 0x3f)); + s += (0x80 | ((cp >> 6) & 0x3f)); + s += (0x80 | (cp & 0x3f)); + return 4; + } + return 0; +} + +/* +TerminalEngine is the terminal back-end, dealing with the text buffer and attributes +and with communicating with the pty. +It does not care about visual things like rendering, fonts, windows etc. +The idea is that 0 to n GUITerminal instances (e.g. on different pages) can connect +to one TerminalEngine to interact with the terminal, and that the TerminalEngine +survives things like page changes or even theme reloads. +*/ +class TerminalEngine +{ +public: +#if 0 // later + struct Attributes + { + COLOR fgcolor; // TODO: what about palette? + COLOR bgcolor; + // could add bold, underline, blink, etc. + }; + + struct AttributeRange + { + size_t start; // start position inside text (in bytes) + Attributes a; + }; +#endif + typedef uint32_t CodePoint; // Unicode code point + + // A line of text, optimized for rendering and storage in the buffer + struct Line + { + std::string text; // in UTF-8 format +// std::vector<AttributeRange> attrs; + Line() {} + size_t utf8forward(size_t start) const + { + if (start >= text.size()) + return start; + uint32_t u8state = 0, u8cp = 0; + size_t i = start; + uint32_t rc; + do { + rc = utf8decode(&u8state, &u8cp, (unsigned char)text[i]); + ++i; + } while (rc != UTF8_ACCEPT && rc != UTF8_REJECT && i < text.size()); + return i; + } + + std::string substr(size_t start, size_t n) const + { + size_t i = 0; + for (; start && i < text.size(); i = utf8forward(i)) + --start; + size_t s = i; + for (; n && i < text.size(); i = utf8forward(i)) + --n; + return text.substr(s, i - s); + } + size_t length() const + { + size_t n = 0; + for (size_t i = 0; i < text.size(); i = utf8forward(i)) + ++n; + return n; + } + }; + + // A single character cell with a Unicode code point + struct Cell + { + Cell() : cp(' ') {} + Cell(CodePoint cp) : cp(cp) {} + CodePoint cp; +// Attributes a; + }; + + // A line of text, optimized for editing single characters + struct UnpackedLine + { + std::vector<Cell> cells; + void eraseFrom(size_t x) + { + if (cells.size() > x) + cells.erase(cells.begin() + x, cells.end()); + } + + void eraseTo(size_t x) + { + if (x > 0) + cells.erase(cells.begin(), cells.begin() + x); + } + }; + + TerminalEngine() + { + // the default size will be overwritten by the GUI window when the size is known + width = 40; + height = 10; + + clear(); + updateCounter = 0; + state = kStateGround; + utf8state = utf8codepoint = 0; + } + + void setSize(int xChars, int yChars, int w, int h) + { + width = xChars; + height = yChars; + if (pty.started()) + pty.resize(width, height, w, h); + debug_printf("setSize: %d*%d chars, %d*%d pixels\n", xChars, yChars, w, h); + } + + void initPty() + { + if (!pty.started()) + { + pty.start(); + pty.resize(width, height, 0, 0); + } + } + + void readPty() + { + char buffer[1024]; + int rc = pty.read(buffer, sizeof(buffer)); + debug_printf("readPty: %d bytes\n", rc); + if (rc < 0) + output("\r\nChild process exited.\r\n"); // TODO: maybe exit terminal here + else + for (int i = 0; i < rc; ++i) + output(buffer[i]); + } + + void clear() + { + cursorX = cursorY = 0; + lines.clear(); + setY(0); + unpackLine(0); + ++updateCounter; + } + + void output(const char *buf) + { + for (const char* p = buf; *p; ++p) + output(*p); + } + + void output(const char ch) + { + char debug[2]; debug[0] = ch; debug[1] = 0; + debug_printf("output: %d %s\n", (int)ch, (ch >= ' ' && ch < 127) ? debug : ch == 27 ? "esc" : ""); + if (ch < 32) { + // always process control chars, even after incomplete UTF-8 fragments + processC0(ch); + if (utf8state != UTF8_ACCEPT) + { + debug_printf("Terminal: incomplete UTF-8 fragment before control char ignored, codepoint=%u ch=%d\n", utf8codepoint, (int)ch); + utf8state = UTF8_ACCEPT; + } + return; + } + uint32_t rc = utf8decode(&utf8state, &utf8codepoint, (unsigned char)ch); + if (rc == UTF8_ACCEPT) + processCodePoint(utf8codepoint); + else if (rc == UTF8_REJECT) { + debug_printf("Terminal: invalid UTF-8 sequence ignored, codepoint=%u ch=%d\n", utf8codepoint, (int)ch); + utf8state = UTF8_ACCEPT; + } + // else we need to read more bytes to assemble a codepoint + } + + bool inputChar(int ch) + { + debug_printf("inputChar: %d\n", ch); + initPty(); // reinit just in case it died before + // encode the char as UTF-8 and send it to the pty + std::string c; + utf8add(c, (uint32_t)ch); + pty.write(c.c_str(), c.size()); + return true; + } + + bool inputKey(int key) + { + debug_printf("inputKey: %d\n", key); + switch (key) + { + case KEY_UP: pty.write("\e[A"); break; + case KEY_DOWN: pty.write("\e[B"); break; + case KEY_RIGHT: pty.write("\e[C"); break; + case KEY_LEFT: pty.write("\e[D"); break; + case KEY_HOME: pty.write("\eOH"); break; + case KEY_END: pty.write("\eOF"); break; + case KEY_INSERT: pty.write("\e[2~"); break; + case KEY_DELETE: pty.write("\e[3~"); break; + case KEY_PAGEUP: pty.write("\e[5~"); break; + case KEY_PAGEDOWN: pty.write("\e[6~"); break; + // TODO: other keys + default: + return false; + } + return true; + } + + size_t getLinesCount() const { return lines.size(); } + const Line& getLine(size_t n) { if (unpackedY == n) packLine(); return lines[n]; } + int getCursorX() const { return cursorX; } + int getCursorY() const { return cursorY; } + int getUpdateCounter() const { return updateCounter; } + + void setX(int x) + { + x = min(width, max(x, 0)); + cursorX = x; + ++updateCounter; + } + + void setY(int y) + { + //y = min(height, max(y, 0)); + y = max(y, 0); + cursorY = y; + while (lines.size() <= (size_t) y) + lines.push_back(Line()); + ++updateCounter; + } + + void up(int n = 1) { setY(cursorY - n); } + void down(int n = 1) { setY(cursorY + n); } + void left(int n = 1) { setX(cursorX - n); } + void right(int n = 1) { setX(cursorX + n); } + +private: + void packLine() + { + std::string& s = lines[unpackedY].text; + s.clear(); + for (size_t i = 0; i < unpackedLine.cells.size(); ++i) { + Cell& c = unpackedLine.cells[i]; + utf8add(s, c.cp); + // later: if attributes changed, add attributes + } + } + + void unpackLine(size_t y) + { + uint32_t u8state = 0, u8cp = 0; + std::string& s = lines[y].text; + unpackedLine.cells.clear(); + for (size_t i = 0; i < s.size(); ++i) { + uint32_t rc = utf8decode(&u8state, &u8cp, (unsigned char)s[i]); + if (rc == UTF8_ACCEPT) + unpackedLine.cells.push_back(Cell(u8cp)); + } + if (unpackedLine.cells.size() < (size_t)width) + unpackedLine.cells.resize(width); + unpackedY = y; + } + + void ensureUnpacked(size_t y) + { + if (unpackedY != y) + { + packLine(); + unpackLine(y); + } + } + + void processC0(char ch) + { + switch (ch) + { + case 7: // BEL + DataManager::Vibrate("tw_button_vibrate"); + break; + case 8: // BS + left(); + break; + case 9: // HT + // TODO: this might be totally wrong + right(); + while (cursorX % 8 != 0 && cursorX < width) + right(); + break; + case 10: // LF + case 11: // VT + case 12: // FF + down(); + break; + case 13: // CR + setX(0); + break; + case 24: // CAN + case 26: // SUB + state = kStateGround; + ctlseq.clear(); + break; + case 27: // ESC + state = kStateEsc; + ctlseq.clear(); + break; + } + } + + void processCodePoint(CodePoint cp) + { + ++updateCounter; + debug_printf("codepoint: %u\n", cp); + if (cp == 0x9b) // CSI + { + state = kStateCsi; + ctlseq.clear(); + return; + } + switch (state) + { + case kStateGround: + processChar(cp); + break; + case kStateEsc: + processEsc(cp); + break; + case kStateCsi: + processControlSequence(cp); + break; + } + } + + void processChar(CodePoint cp) + { + ensureUnpacked(cursorY); + // extend unpackedLine if needed, write ch into cell + if (unpackedLine.cells.size() <= (size_t)cursorX) + unpackedLine.cells.resize(cursorX+1); + unpackedLine.cells[cursorX].cp = cp; + + right(); + if (cursorX >= width) + { + // TODO: configurable line wrapping + // TODO: don't go down immediately but only on next char? + down(); + setX(0); + } + // TODO: update all GUI objects that display this terminal engine + } + + void processEsc(CodePoint cp) + { + switch (cp) { + case 'c': // TODO: Reset + break; + case 'D': // Line feed + down(); + break; + case 'E': // Newline + setX(0); + down(); + break; + case '[': // CSI + state = kStateCsi; + ctlseq.clear(); + break; + case ']': // TODO: OSC state + default: + state = kStateGround; + } + } + + void processControlSequence(CodePoint cp) + { + if (cp >= 0x40 && cp <= 0x7e) { + ctlseq += cp; + execControlSequence(ctlseq); + ctlseq.clear(); + state = kStateGround; + return; + } + if (isdigit(cp) || cp == ';' /* || (ch >= 0x3c && ch <= 0x3f) */) { + ctlseq += cp; + // state = kStateCsiParam; + return; + } + } + + static int parseArg(std::string& s, int defaultvalue) + { + if (s.empty() || !isdigit(s[0])) + return defaultvalue; + int value = atoi(s.c_str()); + size_t pos = s.find(';'); + s.erase(0, pos != std::string::npos ? pos+1 : std::string::npos); + return value; + } + + void execControlSequence(std::string ctlseq) + { + // assert(!ctlseq.empty()); + if (ctlseq == "6n") { + // CPR - cursor position report + char answer[20]; + sprintf(answer, "\e[%d;%dR", cursorY, cursorX); + pty.write(answer, strlen(answer)); + return; + } + char f = *ctlseq.rbegin(); + // if (f == '?') ... private mode + switch (f) + { + // case '@': // ICH - insert character + case 'A': // CUU - cursor up + up(parseArg(ctlseq, 1)); + break; + case 'B': // CUD - cursor down + case 'e': // VPR - line position forward + down(parseArg(ctlseq, 1)); + break; + case 'C': // CUF - cursor right + case 'a': // HPR - character position forward + right(parseArg(ctlseq, 1)); + break; + case 'D': // CUB - cursor left + left(parseArg(ctlseq, 1)); + break; + case 'E': // CNL - cursor next line + down(parseArg(ctlseq, 1)); + setX(0); + break; + case 'F': // CPL - cursor preceding line + up(parseArg(ctlseq, 1)); + setX(0); + break; + case 'G': // CHA - cursor character absolute + setX(parseArg(ctlseq, 1)-1); + break; + case 'H': // CUP - cursor position + // TODO: consider scrollback area + setY(parseArg(ctlseq, 1)-1); + setX(parseArg(ctlseq, 1)-1); + break; + case 'J': // ED - erase in page + { + int param = parseArg(ctlseq, 0); + ensureUnpacked(cursorY); + switch (param) { + default: + case 0: + unpackedLine.eraseFrom(cursorX); + if (lines.size() > (size_t)cursorY+1) + lines.erase(lines.begin() + cursorY+1, lines.end()); + break; + case 1: + unpackedLine.eraseTo(cursorX); + if (cursorY > 0) { + lines.erase(lines.begin(), lines.begin() + cursorY-1); + cursorY = 0; + } + break; + case 2: // clear + case 3: // clear incl scrollback + clear(); + break; + } + } + break; + case 'K': // EL - erase in line + { + int param = parseArg(ctlseq, 0); + ensureUnpacked(cursorY); + switch (param) { + default: + case 0: + unpackedLine.eraseFrom(cursorX); + break; + case 1: + unpackedLine.eraseTo(cursorX); + break; + case 2: + unpackedLine.cells.clear(); + break; + } + } + break; + // case 'L': // IL - insert line + + default: + debug_printf("unknown ctlseq: '%s'\n", ctlseq.c_str()); + break; + } + } + +private: + int cursorX, cursorY; // 0-based, char based. TODO: decide how to handle scrollback + int width, height; // window size in chars + std::vector<Line> lines; // the text buffer + UnpackedLine unpackedLine; // current line for editing + size_t unpackedY; // number of current line + int updateCounter; // changes whenever terminal could require redraw + + Pseudoterminal pty; + enum { kStateGround, kStateEsc, kStateCsi } state; + + // for accumulating a full UTF-8 character from individual bytes + uint32_t utf8state; + uint32_t utf8codepoint; + + // for accumulating a control sequence after receiving CSI + std::string ctlseq; +}; + +// The one and only terminal engine for now +TerminalEngine gEngine; + +void terminal_pty_read() +{ + gEngine.readPty(); +} + + +GUITerminal::GUITerminal(xml_node<>* node) : GUIScrollList(node) +{ + allowSelection = false; // terminal doesn't support list item selections + lastCondition = false; + + if (!node) { + mRenderX = 0; + mRenderY = 0; + mRenderW = gr_fb_width(); + mRenderH = gr_fb_height(); + } + + engine = &gEngine; + updateCounter = 0; +} + +int GUITerminal::Update(void) +{ + if (!isConditionTrue()) { + lastCondition = false; + return 0; + } + + if (lastCondition == false) { + lastCondition = true; + // we're becoming visible, so we might need to resize the terminal content + InitAndResize(); + } + + if (updateCounter != engine->getUpdateCounter()) { + // try to keep the cursor in view + SetVisibleListLocation(engine->getCursorY()); + updateCounter = engine->getUpdateCounter(); + } + + GUIScrollList::Update(); + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + return 0; +} + +// NotifyTouch - Notify of a touch event +// Return 0 on success, >0 to ignore remainder of touch, and <0 on error +int GUITerminal::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + if (!isConditionTrue()) + return -1; + + // TODO: grab focus correctly + // TODO: fix focus handling in PageManager and GUIInput + SetInputFocus(1); + debug_printf("Terminal: SetInputFocus\n"); + return GUIScrollList::NotifyTouch(state, x, y); + // TODO later: allow cursor positioning by touch (simulate mouse click?) + // http://stackoverflow.com/questions/5966903/how-to-get-mousemove-and-mouseclick-in-bash + // will likely not work with Busybox anyway +} + +int GUITerminal::NotifyKey(int key, bool down) +{ + if (!HasInputFocus) + return 1; + if (down) + if (engine->inputKey(key)) + mUpdate = 1; + return 0; +} + +// character input +int GUITerminal::NotifyCharInput(int ch) +{ + if (engine->inputChar(ch)) + mUpdate = 1; + return 0; +} + +size_t GUITerminal::GetItemCount() +{ + return engine->getLinesCount(); +} + +void GUITerminal::RenderItem(size_t itemindex, int yPos, bool selected) +{ + const TerminalEngine::Line& line = engine->getLine(itemindex); + + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + // later: handle attributes here + + // render text + const char* text = line.text.c_str(); + gr_textEx_scaleW(mRenderX, yPos, text, mFont->GetResource(), mRenderW, TOP_LEFT, 0); + + if (itemindex == (size_t) engine->getCursorY()) { + // render cursor + int cursorX = engine->getCursorX(); + std::string leftOfCursor = line.substr(0, cursorX); + int x = gr_ttf_measureEx(leftOfCursor.c_str(), mFont->GetResource()); + // note that this single character can be a UTF-8 sequence + std::string atCursor = (size_t)cursorX < line.length() ? line.substr(cursorX, 1) : " "; + int w = gr_ttf_measureEx(atCursor.c_str(), mFont->GetResource()); + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + gr_fill(mRenderX + x, yPos, w, actualItemHeight); + gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, mBackgroundColor.alpha); + gr_textEx_scaleW(mRenderX + x, yPos, atCursor.c_str(), mFont->GetResource(), mRenderW, TOP_LEFT, 0); + } +} + +void GUITerminal::NotifySelect(size_t item_selected) +{ + // do nothing - terminal ignores selections +} + +void GUITerminal::InitAndResize() +{ + // make sure the shell is started + engine->initPty(); + // send window resize + int charWidth = gr_ttf_measureEx("N", mFont->GetResource()); + engine->setSize(mRenderW / charWidth, GetDisplayItemCount(), mRenderW, mRenderH); +} + +void GUITerminal::SetPageFocus(int inFocus) +{ + if (inFocus && isConditionTrue()) { + // TODO: grab focus correctly, this hack grabs focus and insists that the terminal be the focus regardless of other elements + // It's highly unlikely that there will be any other visible input elements on the page anyway... + SetInputFocus(1); + InitAndResize(); + } +} diff --git a/gui/text.cpp b/gui/text.cpp new file mode 100644 index 000000000..61940ff9f --- /dev/null +++ b/gui/text.cpp @@ -0,0 +1,186 @@ +/* + Copyright 2012 to 2016 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// text.cpp - GUIText object + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/reboot.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <time.h> +#include <unistd.h> +#include <stdlib.h> + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUIText::GUIText(xml_node<>* node) + : GUIObject(node) +{ + mFont = NULL; + mIsStatic = 1; + mVarChanged = 0; + mFontHeight = 0; + maxWidth = 0; + scaleWidth = true; + isHighlighted = false; + mText = ""; + + if (!node) + return; + + // Load colors + mColor = LoadAttrColor(node, "color", COLOR(0,0,0,255)); + mHighlightColor = LoadAttrColor(node, "highlightcolor", mColor); + + // Load the font, and possibly override the color + mFont = LoadAttrFont(FindNode(node, "font"), "resource"); + if (!mFont) + return; + mColor = LoadAttrColor(FindNode(node, "font"), "color", mColor); + mHighlightColor = LoadAttrColor(FindNode(node, "font"), "highlightcolor", mColor); + + // Load the placement + LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH, &mPlacement); + + xml_node<>* child = FindNode(node, "text"); + if (child) mText = child->value(); + + child = FindNode(node, "noscaling"); + if (child) { + scaleWidth = false; + } else { + if (mPlacement == TOP_LEFT || mPlacement == BOTTOM_LEFT) { + maxWidth = gr_fb_width() - mRenderX; + } else if (mPlacement == TOP_RIGHT || mPlacement == BOTTOM_RIGHT) { + maxWidth = mRenderX; + } else if (mPlacement == CENTER || mPlacement == CENTER_X_ONLY) { + if (mRenderX < gr_fb_width() / 2) { + maxWidth = mRenderX * 2; + } else { + maxWidth = (gr_fb_width() - mRenderX) * 2; + } + } + } + + // Simple way to check for static state + mLastValue = gui_parse_text(mText); + if (mLastValue != mText) mIsStatic = 0; + + mFontHeight = mFont->GetHeight(); +} + +int GUIText::Render(void) +{ + if (!isConditionTrue()) + return 0; + + void* fontResource = NULL; + if (mFont) + fontResource = mFont->GetResource(); + else + return -1; + + mLastValue = gui_parse_text(mText); + + mVarChanged = 0; + + if (isHighlighted) + gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha); + else + gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha); + + gr_textEx_scaleW(mRenderX, mRenderY, mLastValue.c_str(), fontResource, maxWidth, mPlacement, scaleWidth); + + return 0; +} + +int GUIText::Update(void) +{ + if (!isConditionTrue()) + return 0; + + static int updateCounter = 3; + + // This hack just makes sure we update at least once a minute for things like clock and battery + if (updateCounter) updateCounter--; + else + { + mVarChanged = 1; + updateCounter = 3; + } + + if (mIsStatic || !mVarChanged) + return 0; + + std::string newValue = gui_parse_text(mText); + if (mLastValue == newValue) + return 0; + else + mLastValue = newValue; + return 2; +} + +int GUIText::GetCurrentBounds(int& w, int& h) +{ + void* fontResource = NULL; + + if (mFont) + fontResource = mFont->GetResource(); + + h = mFontHeight; + mLastValue = gui_parse_text(mText); + w = gr_ttf_measureEx(mLastValue.c_str(), fontResource); + return 0; +} + +int GUIText::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIObject::NotifyVarChange(varName, value); + + mVarChanged = 1; + return 0; +} + +int GUIText::SetMaxWidth(unsigned width) +{ + maxWidth = width; + if (!maxWidth) + scaleWidth = false; + mVarChanged = 1; + return 0; +} + +void GUIText::SetText(string newtext) +{ + mText = newtext; +} diff --git a/gui/textbox.cpp b/gui/textbox.cpp new file mode 100644 index 000000000..2c7d09f99 --- /dev/null +++ b/gui/textbox.cpp @@ -0,0 +1,120 @@ +/* + Copyright 2015 bigbiff/Dees_Troy/_that TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// textbox.cpp - GUITextBox object + +#include <string> + +extern "C" { +#include "../twcommon.h" +} +#include "../minuitwrp/minui.h" + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUITextBox::GUITextBox(xml_node<>* node) : GUIScrollList(node) +{ + xml_node<>* child; + + mLastCount = 0; + mIsStatic = true; + + allowSelection = false; // textbox doesn't support list item selections + + child = FindNode(node, "color"); + if (child) + { + mFontColor = LoadAttrColor(child, "foreground", mFontColor); + mBackgroundColor = LoadAttrColor(child, "background", mBackgroundColor); + //mScrollColor = LoadAttrColor(child, "scroll", mScrollColor); + } + child = FindNode(node, "text"); + while (child) { + string txt = child->value(); + mText.push_back(txt); + string lookup = gui_parse_text(txt); + if (lookup != txt) + mIsStatic = false; + mLastValue.push_back(lookup); + child = child->next_sibling("text"); + } +} + +int GUITextBox::Update(void) +{ + if (AddLines(&mLastValue, NULL, &mLastCount, &rText, NULL)) { + // someone added new text + // at least the scrollbar must be updated, even if the new lines are currently not visible + mUpdate = 1; + } + + GUIScrollList::Update(); + + if (mUpdate) { + mUpdate = 0; + if (Render() == 0) + return 2; + } + return 0; +} + +size_t GUITextBox::GetItemCount() +{ + return rText.size(); +} + +void GUITextBox::RenderItem(size_t itemindex, int yPos, bool selected __unused) +{ + // Set the color for the font + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, mFontColor.alpha); + + // render text + const char* text = rText[itemindex].c_str(); + gr_textEx_scaleW(mRenderX, yPos, text, mFont->GetResource(), mRenderW, TOP_LEFT, 0); +} + +void GUITextBox::NotifySelect(size_t item_selected __unused) +{ + // do nothing - textbox ignores selections +} + +int GUITextBox::NotifyVarChange(const std::string& varName, const std::string& value) +{ + GUIScrollList::NotifyVarChange(varName, value); + + if (!isConditionTrue() || mIsStatic) + return 0; + + // Check to see if the variable exists in mText + for (size_t i = 0; i < mText.size(); i++) { + string lookup = gui_parse_text(mText.at(i)); + if (lookup != mText.at(i)) { + mLastValue.at(i) = lookup; + mUpdate = 1; + // There are ways to improve efficiency here, but I am not + // sure if we will even use this feature in the stock theme + // at all except for language translation. If we start using + // variables in textboxes in the stock theme, we can circle + // back and make improvements here. + mLastCount = 0; + rText.clear(); + } + } + return 0; +} diff --git a/gui/theme/common/fonts/DroidSansMono.ttf b/gui/theme/common/fonts/DroidSansMono.ttf Binary files differnew file mode 100644 index 000000000..4085cee84 --- /dev/null +++ b/gui/theme/common/fonts/DroidSansMono.ttf diff --git a/gui/theme/common/fonts/RobotoCondensed-Regular.ttf b/gui/theme/common/fonts/RobotoCondensed-Regular.ttf Binary files differnew file mode 100644 index 000000000..b9fc49c95 --- /dev/null +++ b/gui/theme/common/fonts/RobotoCondensed-Regular.ttf diff --git a/gui/theme/common/images/progress_empty.png b/gui/theme/common/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..1a7471e44 --- /dev/null +++ b/gui/theme/common/images/progress_empty.png diff --git a/gui/theme/common/images/progress_fill.png b/gui/theme/common/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..7f4121fe5 --- /dev/null +++ b/gui/theme/common/images/progress_fill.png diff --git a/gui/theme/common/landscape.xml b/gui/theme/common/landscape.xml new file mode 100644 index 000000000..6d544833f --- /dev/null +++ b/gui/theme/common/landscape.xml @@ -0,0 +1,5178 @@ +<?xml version="1.0"?> +<recovery> + <styles> + <style name="text_l"> + <font resource="font_l" color="%text_color%"/> + </style> + + <style name="text_m"> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="text_m_accent"> + <font resource="font_m" color="%accent_color%"/> + </style> + + <style name="text_m_fail"> + <font resource="font_m" color="%text_fail_color%"/> + </style> + + <style name="text_s"> + <font resource="font_s" color="%text_color%"/> + </style> + + <style name="input"> + <background color="%background_color%"/> + <cursor color="%accent_color%" hasfocus="1" width="%input_line_width%"/> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="checkbox"> + <font resource="font_m" color="%text_color%"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </style> + + <style name="radiobutton"> + <font resource="font_m" color="%text_color%"/> + <image checked="radio_true" unchecked="radio_false"/> + </style> + + <style name="main_button"> + <highlight color="%highlight_color%"/> + <font resource="font_l" color="%text_button_color%"/> + <image resource="main_button"/> + </style> + + <style name="main_button_m"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button"/> + </style> + + <style name="main_button_half_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_width"/> + </style> + + <style name="main_button_half_width_low"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_width_low"/> + </style> + + <style name="button_third_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="tab_3"/> + </style> + + <style name="button_quarter_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="tab_4"/> + </style> + + <style name="sort_asc"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="sort_asc"/> + </style> + + <style name="sort_desc"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="sort_desc"/> + </style> + + <style name="sort_empty"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="sort_empty"/> + </style> + + <style name="fab"> + <highlight color="%highlight_color%"/> + <placement x="%indent_right%" y="%row21a_y%" placement="1"/> + <font resource="font_m" color="%button_text_color%"/> + </style> + + <style name="tab"> + <highlight color="%highlight_color%"/> + <fill color="%accent_color%"/> + <font resource="font_s" color="%text_button_color%"/> + </style> + + <style name="console"> + <fastscroll rectcolor="%accent_color%" w="%fastscroll_w%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <color foreground="%text_color%" background="%background_color%" scroll="%background_color%"/> + <font resource="fixed"/> + </style> + + <style name="terminal"> + <fastscroll linecolor="%transparent%" rectcolor="%accent_color%" w="%fastscroll_w%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <background color="%background_color%"/> + <font resource="fixed" spacing="3" color="%text_color%"/> + </style> + + <style name="fileselector"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <sort name="tw_gui_sort_order"/> + <icon folder="folder" file="file"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="listbox"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <icon selected="radio_true" unselected="radio_false"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="scrolllist"> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%"/> + </style> + + <style name="partitionlist"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="partitionlist_storage"> + <highlight color="%fileselector_highlight_color%"/> + <placement x="%dialog_content_x%" y="%row4_y%" w="%content_overlay_width%" h="%partitionlist_storage_height%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="radio_true" unselected="radio_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="slider"> + <placement x="%col2_x_right%" y="%row17a_y%"/> + <font resource="font_m" color="%text_color%"/> + <resource base="slider" used="slider_used" touch="slider_touch"/> + </style> + + <style name="slider_centered"> + <placement x="%center_x%" y="%row17a_y%"/> + <font resource="font_m" color="%text_color%"/> + <resource base="slider" used="slider_used" touch="slider_touch"/> + </style> + + <style name="slidervalue"> + <resource handle="handle"/> + <font resource="font_m" color="%text_color%"/> + <colors line="%fileselector_linecolor%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + </style> + + <style name="patternpassword"> + <size name="tw_gui_pattern_grid_size" default="3"/> + </style> + </styles> + + <pages> + <page name="main"> + <action> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="main2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@twrp_header=Team Win Recovery Project}</text> + </text> + + <text style="text_m"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_version%</text> + </text> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@install_btn=Install}</text> + <actions> + <action function="queueclear"/> + <action function="set">tw_selectimage=0</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row2_y%"/> + <text>{@wipe_btn=Wipe}</text> + <action function="page">wipe</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6a_y%"/> + <text>{@backup_btn=Backup}</text> + <action function="page">backup</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row6a_y%"/> + <text>{@restore_btn=Restore}</text> + <action function="page">restore</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@mount_btn=Mount}</text> + <action function="page">mount</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row11_y%"/> + <text>{@settings_btn=Settings}</text> + <action function="page">settings</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@advanced_btn=Advanced}</text> + <action function="page">advanced</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@reboot_btn=Reboot}</text> + <action function="page">reboot</action> + </button> + </page> + + <page name="install"> + <template name="page"/> + + <text style="text_l"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_l"> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_image_hdr=Install Image}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@select_file_from_storage=Select File from %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%col1_x_left%" y="%row1a_y%" w="%fileselector_install_folder_width%" h="%fileselector_install_height%"/> + <text>{@file_selector_folders_hdr=Folders}</text> + <filter folders="1" files="0"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="select"/> + </fileselector> + + <fileselector> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col2_x_left%" y="%row1a_y%" w="%fileselector_install_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".zip" folders="0" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <fileselector> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%col2_x_left%" y="%row1a_y%" w="%fileselector_install_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".img" folders="0" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <button style="main_button_half_width_low"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col_button_right%" y="%row13a_y%"/> + <text>{@install_image_btn=Install Image}</text> + <actions> + <action function="set">tw_selectimage=1</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button_half_width_low"> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%col_button_right%" y="%row13a_y%"/> + <text>{@install_zip_btn=Install Zip}</text> + <actions> + <action function="set">tw_selectimage=0</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row16a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=install</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="0"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <actions> + <action function="queuezip"/> + <action function="page">flash_confirm</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="1"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <action function="page">flashimage_confirm</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_confirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@zip_queue_count=%tw_zip_queue_count% of max of 10 Files queued}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@zip_warn1=This operation may install incompatible}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@zip_warn2=software and render your device unusable.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@zip_back_cancel=Press back to cancel adding this zip.}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row8_y%"/> + <text>{@folder=Folder:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row9_y%"/> + <text>%tw_zip_location%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row12_y%"/> + <text>%tw_file%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row8_y%"/> + <text>{@options=Options:}</text> + </text> + + <checkbox> + <placement x="%col1_x_right%" y="%row9_y%"/> + <text>{@zip_sig_chk=Zip signature verification}</text> + <data variable="tw_signed_zip_verify"/> + </checkbox> + + <checkbox> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%col1_x_right%" y="%row10a_y%"/> + <text>{@inject_twrp_chk=Inject TWRP after install}</text> + <data variable="tw_inject_after_zip"/> + </checkbox> + + <checkbox> + <placement x="%col1_x_right%" y="%row12_y%"/> + <text>{@install_reboot_chk=Reboot after installation is complete}</text> + <data variable="tw_install_reboot"/> + </checkbox> + + <button style="main_button_half_width"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@zip_add_btn=Add more Zips}</text> + <action function="page">install</action> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@zip_clear_btn=Clear Zip Queue}</text> + <actions> + <action function="queueclear"/> + <action function="page">install</action> + </actions> + </button> + + <slider> + <text>{@swipe_flash=Swipe to confirm Flash}</text> + <action function="flash">flash_zip</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="cancelzip"/> + <action function="page">install</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_zip"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_count_hdr=Install Zip %tw_zip_index% of %tw_zip_queue_count%}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_file%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <action function="page">flash_done</action> + </action> + </page> + + <page name="flash_done"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@failed=Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@successful=Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@wipe_cache_dalvik_btn=Wipe cache/dalvik}</text> + <actions> + <action function="set">tw_back=flash_done</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=/cache</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=wipe</action> + <action function="set">tw_action2_param=dalvik</action> + <action function="set">tw_text1={@wipe_cache_dalvik_confirm=Wipe Cache & Dalvik?}</action> + <action function="set">tw_action_text1={@wiping_cache_dalvik=Wiping Cache & Dalvik...}</action> + <action function="set">tw_complete_text1={@wipe_cache_dalvik_complete=Cache & Dalvik Wipe Complete}</action> + <action function="set">tw_slider_text={@swipe_wipe=Swipe to Wipe}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_install_reboot" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + <condition var1="tw_reboot_system" var2="1"/> + </conditions> + <actions> + <action function="set">tw_sleep=%tw_sleep_total%</action> + <action function="page">flash_sleep_and_reboot</action> + </actions> + </action> + </page> + + <page name="flash_sleep_and_reboot"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@install_reboot=Rebooting in %tw_sleep% second(s)}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_width"> + <condition var1="tw_sleep" op=">" var2="0"/> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_install_reboot=0</action> + <action function="page">flash_done</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_sleep" var2="tw_sleep_total"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <action function="sleepcounter">%tw_sleep_total%</action> + </action> + + <action> + <conditions> + <condition var1="tw_sleep" var2="0"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <actions> + <action function="sleep">50000</action> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </action> + </page> + + <page name="flashimage_confirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_image_hdr=Install Image}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@install_sel_target=Select Target Partition}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row8_y%"/> + <text>{@folder=Folder:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row9_y%"/> + <text>%tw_zip_location%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row12_y%"/> + <text>%tw_file%</text> + </text> + + <partitionlist> + <placement x="%col1_x_right%" y="%row7a_y%" w="%content_half_width%" h="%partitionlist_flashimage_height%"/> + <icon selected="radio_true" unselected="radio_false"/> + <text>{@flash_image_select=Select Partition to Flash Image:}</text> + <data name="tw_flash_partition"/> + <listtype name="flashimg"/> + </partitionlist> + + <slider> + <text>{@swipe_flash=Swipe to confirm Flash}</text> + <actions> + <action function="set">tw_back=flashimage_confirm</action> + <action function="set">tw_action=flashimage</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@flashing_image=Flashing Image...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@image_flashed=Image Flashed}</action> + <action function="page">action_page</action> + </actions> + <action function="flashimage"/> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="clear_vars"> + <action> + <action function="set">tw_operation_state=0</action> + <action function="set">tw_text1=</action> + <action function="set">tw_text2=</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1=</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_action_param=</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action2=</action> + <action function="set">tw_action2_param=</action> + <action function="set">tw_has_cancel=0</action> + <action function="set">tw_cancel_action=</action> + <action function="set">tw_cancel_param=</action> + <action function="set">tw_show_exclamation=0</action> + <action function="set">tw_show_reboot=0</action> + <action function="page">%tw_clear_destination%</action> + </action> + </page> + + <page name="reboot_system_routine"> + <action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=system</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </action> + </page> + + <page name="confirm_action"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text/> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_text1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_text2%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>%tw_text3%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_text4%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider style="slider_centered"> + <text>%tw_slider_text%</text> + <action function="page">action_page</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="action_page"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_action_text1%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_width"> + <condition var1="tw_has_cancel" var2="1"/> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="%tw_cancel_action%">%tw_cancel_param%</action> + </button> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="singleaction_page"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_action_text1%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_page_done=1</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="action_complete"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_complete_text1%</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@failed=Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@successful=Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@back_btn=Back}</text> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="filecheck"> + <action> + <action function="fileexists">%tw_filecheck%</action> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_fileexists=1</action> + <action function="page">%tw_existpage%</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="1"/> + </conditions> + <actions> + <action function="set">tw_fileexists=0</action> + <action function="page">%tw_notexistpage%</action> + </actions> + </action> + </page> + + <page name="rebootcheck"> + <action> + <condition var1="tw_backup_system_size" op=">=" var2="%tw_min_system%"/> + <action function="page">appcheck</action> + </action> + + <action> + <condition var1="tw_backup_system_size" op="<" var2="%tw_min_system%"/> + <action function="page">confirm_action</action> + </action> + </page> + + <page name="appcheck"> + <action> + <condition var1="tw_app_prompt" var2="1"/> + <action function="checkforapp"></action> + </action> + + <action> + <condition var1="tw_app_prompt" op="!=" var2="1"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="1"/> + <action function="page">rebootapp</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="2"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + </page> + + <page name="wipe"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@factory_reset_hdr=Factory Reset}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@factory_reset1=Wipes Data, Cache, and Dalvik}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@factory_reset2=(not including internal storage)}</text> + </text> + + <text style="text_m_accent"> + <conditions> + <condition var1="tw_has_android_secure" var2="1"/> + <condition var1="fileexists" var2="/and-sec"/> + </conditions> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@android_secure=Android Secure}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_sdext_partition" var2="1"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@sdext=SD-EXT}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@factory_reset3=Most of the time this is}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@factory_reset4=the only wipe that you need.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row10_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <button style="main_button_half_width"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@advanced_wipe_btn=Advanced Wipe}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">advancedwipe</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@format_data_btn=Format Data}</text> + <action function="page">formatdata</action> + </button> + + <button style="main_button_half_width"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_has_data_media" var2="0"/> + </conditions> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@wipe_enc_btn=Wipe Encryption}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@wipe_enc_confirm=Wipe Encryption from Data?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="set">tw_slider_text={@swipe_format_data=Swipe to Format Data}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <slider> + <text>{@swipe_factory_reset=Swipe to Factory Reset}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=data</action> + <action function="set">tw_action_text1={@factory_resetting=Factory Reset...}</action> + <action function="set">tw_complete_text1={@factory_reset_complete=Factory Reset Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="advancedwipe"> + <template name="page"/> + + <action> + <action function="set">tw_wipe_list=</action> + </action> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@advanced_wipe_hdr=Advanced Wipe}</text> + </text> + + <partitionlist> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <text>{@sel_part_wipe=Select Partitions to Wipe:}</text> + <data name="tw_wipe_list"/> + <listtype name="wipe"/> + </partitionlist> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%col2_x_left%" y="%row14a_y%" placement="5"/> + <text>{@invalid_part_sel=Invalid partition selection}</text> + </text> + + <button style="main_button_m"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@repair_change_btn=Repair or Change File System}</text> + <actions> + <action function="checkpartitionlist">tw_wipe_list</action> + <action function="page">checkpartitionlist</action> + </actions> + </button> + + <slider> + <text>{@swipe_wipe=Swipe to Wipe}</text> + <actions> + <action function="set">tw_back=advancedwipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=LIST</action> + <action function="set">tw_text1={@wipe_sel_confirm=Wipe Selected Partition(s)?}</action> + <action function="set">tw_action_text1={@wiping_part=Wiping Partition(s)...}</action> + <action function="set">tw_complete_text1={@wipe_complete=Wipe Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe</action> + </action> + </page> + + <page name="formatdata"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@format_data_hdr=Format Data}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@format_data_lcp1=Format Data will wipe all of your apps, backups, pictures, videos, media, and}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@format_data_lcp2=removes encryption on internal storage.}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_has_adopted_storage" var2="1"/> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@format_data_adopted=Including Adopted Storage}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@format_data_undo=This cannot be undone.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@yes_continue=Type yes to continue. Press back to cancel.}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row8_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_confirm_formatdata%</text> + <data name="tw_confirm_formatdata"/> + <restrict minlen="3" maxlen="3" allow="yes"/> + <action function="page">formatdata_confirm</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row9_y" w="%content_width%" h="input_line_width"/> + </fill> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe</action> + </action> + </page> + + <page name="formatdata_confirm"> + <action> + <condition var1="tw_confirm_formatdata" op="=" var2="yes"/> + <actions> + <action function="set">tw_back=formatdata</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="page">action_page</action> + </actions> + </action> + + <action> + <condition var1="tw_confirm_formatdata" op="!=" var2="yes"/> + <action function="page">formatdata</action> + </action> + </page> + + <page name="checkpartitionlist"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">partitionoptions</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">advancedwipe</action> + </actions> + </action> + </page> + + <page name="partitionoptions"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_opt_hdr=Partition Options for: %tw_partition_name%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_mount_point=Mount Point: %tw_partition_mount_point%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_curr_fs=File system: %tw_partition_file_system%}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="1"/> + <placement x="%col2_x_left%" y="%row5_y%"/> + <text>{@part_present_yes=Present: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="0"/> + <placement x="%col2_x_left%" y="%row5_y%"/> + <text>{@part_present_no=Present: No}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="1"/> + <placement x="%col1_x_right%" y="%row5_y%"/> + <text>{@part_removable_yes=Removable: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="0"/> + <placement x="%col1_x_right%" y="%row5_y%"/> + <text>{@part_removable_no=Removable: No}</text> + </text> + + <text style="text_m"> + <placement x="%col2_x_left%" y="%row7_y%"/> + <text>{@part_size=Size: %tw_partition_size%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row7_y%"/> + <text>{@part_used=Used: %tw_partition_used%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col2_x_left%" y="%row9_y%"/> + <text>{@part_free=Free: %tw_partition_free%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row9_y%"/> + <text>{@part_backup_size=Backup Size: %tw_partition_backup_size%MB}</text> + </text> + + <button style="main_button_half_width"> + <condition var1="tw_partition_can_resize" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@resize_btn=Resize File System}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=resize</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=getpartitiondetails</action> + <action function="set">tw_action2_param=tw_wipe_list</action> + <action function="set">tw_text1={@resize_confirm=Resize %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@resizing=Resizing...}</action> + <action function="set">tw_complete_text1={@resize_complete=Resize Complete}</action> + <action function="set">tw_slider_text={@swipe_resize=Swipe to Resize}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_can_repair" op="=" var2="1"/> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@repair_btn=Repair File System}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=repair</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@repair_confirm=Repair %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@repairing=Repairing...}</action> + <action function="set">tw_complete_text1={@repair_complete=Repair Complete}</action> + <action function="set">tw_slider_text={@swipe_repair=Swipe to Repair}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@change_fs_btn=Change File System}</text> + <action function="page">selectfilesystem</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advancedwipe</action> + </action> + </page> + + <page name="refreshfilesystem"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">selectfilesystem</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="set">tw_wipe_list=</action> + <action function="page">advancedwipe</action> + </actions> + </action> + </page> + + <page name="selectfilesystem"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@change_fs_for_hdr=Change File System for: %tw_partition_name%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_mount_point=Mount Point: %tw_partition_mount_point%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_curr_fs=File system: %tw_partition_file_system%}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@change_fs_warn1=Some ROMs or kernels may not support some}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@change_fs_warn2=file systems. Proceed with caution!}</text> + </text> + + <button style="main_button_half_width"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>EXT2</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext2</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT2</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%col2_x_left%" y="%row11_y%"/> + <text>EXT3</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext3</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT3</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%center_x%" y="%row11_y%"/> + <text>EXT4</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext4</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT4</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_vfat" op="=" var2="1"/> + <placement x="%col2_x_right%" y="%row11_y%"/> + <text>FAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=vfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=FAT</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_exfat" op="=" var2="1"/> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>exFAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=exfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=exFAT</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_partition_f2fs" op="=" var2="1"/> + <placement x="%center_x%" y="%row15a_y%"/> + <text>F2FS</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=f2fs</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=F2FS</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partitionoptions</action> + </action> + </page> + + <page name="backup"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row3_y%"/> + <text>%tw_backup_name%</text> + </text> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_half_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="col1_x_left" y="%row2_y%" w="%content_half_width%" h="%navbar_height%"/> + <fill color="%transparent%"/> + <actions> + <action function="set">tw_fileexists=0</action> + <action function="page">backupname1</action> + </actions> + </button> + + <partitionlist> + <placement x="%col1_x_left%" y="%row4a_y%" w="%content_half_width%" h="%partitionlist_backup_height%"/> + <text>{@sel_part_backup=Select Partitions to Backup:}</text> + <data name="tw_backup_list"/> + <listtype name="backup"/> + </partitionlist> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row2_y%"/> + <text>{@encryption=Encryption:}</text> + </text> + + <text style="text_m"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%col1_x_right%" y="%row3_y%"/> + <text>{@enc_disabled=disabled - set a password to enable}</text> + </text> + + <text style="text_m"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%col1_x_right%" y="%row3_y%"/> + <text>{@enc_enabled=enabled}</text> + </text> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_right%" y="row4_y" w="%content_half_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="col1_x_right" y="%row2_y%" w="%content_half_width%" h="%navbar_height%"/> + <fill color="%transparent%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row5_y%"/> + <text>{@options=Options:}</text> + </text> + + <checkbox> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@enable_backup_comp_chk=Enable compression}</text> + <data variable="tw_use_compression"/> + </checkbox> + + <checkbox> + <placement x="%col1_x_right%" y="%row7a_y%"/> + <text>{@skip_md5_backup_chk=Skip MD5 generation during backup}</text> + <data variable="tw_skip_md5_generate"/> + </checkbox> + + <checkbox> + <placement x="%col1_x_right%" y="%row9_y%"/> + <text>{@disable_backup_space_chk=Disable free space check before backup}</text> + <data variable="tw_disable_free_space"/> + </checkbox> + + <button style="main_button_half_width"> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=backup</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@refresh_sizes_btn=Refresh Sizes}</text> + <actions> + <action function="refreshsizes"/> + <action function="page">backup</action> + </actions> + </button> + + <slider> + <text>{@swipe_backup=Swipe to Backup}</text> + <action function="page">backup_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="backupname1"> + <action> + <condition var1="tw_backup_name" op="=" var2="{@auto_generate=(Auto Generate)}"/> + <action function="generatebackupname"/> + </action> + + <action> + <action function="page">backupname2</action> + </action> + </page> + + <page name="backupname2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_name%</text> + <data name="tw_backup_name"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_name%</action> + <action function="set">tw_existpage=backupname2</action> + <action function="set">tw_notexistpage=backup</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_half_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="row4_y" w="%content_half_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup</action> + </actions> + </button> + + <button style="main_button_half_width_low"> + <placement x="%date_button_x%" y="%row5_y%"/> + <text>{@append_date_btn=Append Date}</text> + <action function="appenddatetobackupname"/> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup</action> + </actions> + </action> + </page> + + <page name="backupencryption"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row2_y%"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_right%" y="%row2_input_y%" w="%content_half_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display%</text> + <data name="tw_backup_password" mask="*" maskvariable="tw_backup_encrypt_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">backupencryption2</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_right%" y="row4_y" w="%content_half_width%" h="input_line_width"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%col1_x_right%" y="row4_y" w="%content_half_width%" h="input_line_width"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@pass_not_match=Passwords do not match!}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%center_x%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backup</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="backupencryption2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row2_y%"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_right%" y="%row2_input_y%" w="%content_half_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display2%</text> + <data name="tw_backup_password2" mask="*" maskvariable="tw_backup_encrypt_display2"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">checkbackuppassword</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_right%" y="row4_y" w="%content_half_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@enter_pass2=Enter Password again:}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%center_x%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backup</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="checkbackuppassword"> + <action> + <condition var1="tw_backup_password2" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=1</action> + <action function="page">backup</action> + </actions> + </action> + + <action> + <condition var1="tw_backup_password2" op="!=" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_password_not_match=1</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backupencryption</action> + </actions> + </action> + </page> + + <page name="backup_run"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_operation%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_partition% Partition</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m_accent"> + <placement x="%progress_text_x%" y="%progress_text_y%"/> + <text>{@progress=Progress:}</text> + </text> + + <text style="text_m"> + <placement x="%progress_text_x%" y="%row17_y%"/> + <text>%tw_file_progress%</text> + </text> + + <text style="text_m"> + <placement x="%progress_text_x%" y="%row18_y%"/> + <text>%tw_size_progress%</text> + </text> + + <button style="main_button_half_width"> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="cancelbackup"/> + </button> + + <action> + <action function="nandroid">backup</action> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="0"/> + <actions> + <action function="set">tw_back=backup</action> + <action function="set">tw_complete_text1={@backup_complete=Backup Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="1"/> + <actions> + <action function="set">tw_back=backup</action> + <action function="set">tw_complete_text1={@backup_cancel=Backup Cancelled}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + </page> + + <page name="restore"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_sel_store_hdr=Select Backup from %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_quarter_width%" h="%fileselector_install_height%"/> + <text>{@restore_sel_pack_fs=Select Package to Restore:}</text> + <filter folders="1" files="0" nav="0"/> + <path name="tw_backups_folder"/> + <data name="tw_restore" default=""/> + <selection name="tw_restore_name"/> + </fileselector> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row16a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <action> + <condition var1="tw_restore" op="modified"/> + <actions> + <action function="readBackup"/> + <action function="page">restore_read</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="restore_read"> + <action> + <condition var1="tw_restore_encrypted" var2="1"/> + <actions> + <action function="set">tw_password_fail=0</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <condition var1="tw_restore_encrypted" var2="0"/> + <actions> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_decrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_enc_backup_hdr=Encrypted Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_restore_display%</text> + <data name="tw_restore_password" mask="*" maskvariable="tw_restore_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">try_restore_decrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row5_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="row5_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="%row5_y%"/> + <text>{@restore_dec_fail=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore</action> + </actions> + </button> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row6_y%"/> + <text>{@del_backup_btn=Delete Backup}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete=Swipe to Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore</action> + </action> + </page> + + <page name="try_restore_decrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_try_decrypt=Encrypted Backup - Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt_backup"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_select"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_backup_date=Backup made on %tw_restore_file_date%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row3_y%"/> + <text>%tw_restore_name%</text> + </text> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="col1_x_left" y="%row2_y%" w="%content_width%" h="%navbar_height%"/> + <fill color="%transparent%"/> + <actions> + <action function="set">tw_backup_rename=%tw_restore_name%</action> + <action function="set">tw_fileexists=0</action> + <action function="page">renamebackup</action> + </actions> + </button> + + <partitionlist> + <placement x="%col1_x_left%" y="%row4a_y%" w="%content_half_width%" h="%partitionlist_backup_height%"/> + <text>{@restore_sel_part=Select Partitions to Restore:}</text> + <data name="tw_restore_list" selectedlist="tw_restore_selected"/> + <listtype name="restore"/> + </partitionlist> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row5_y%"/> + <text>{@options=Options:}</text> + </text> + + <checkbox> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@restore_enable_md5_chk=Enable MD5 Verification of Backup Files}</text> + <data variable="tw_skip_md5_check"/> + </checkbox> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@del_backup_btn=Delete Backup}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete=Swipe to Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <slider> + <text>{@swipe_restore=Swipe to Restore}</text> + <action function="page">restore_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore</action> + </action> + </page> + + <page name="renamebackup"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@rename_backup_hdr=Rename Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_rename%</text> + <data name="tw_backup_rename"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && mv "%tw_restore_name%" "%tw_backup_rename%"</action> + <action function="set">tw_text1={@rename_backup_confirm=Rename Backup?}</action> + <action function="set">tw_text2={@rename_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@renaming_backup=Renaming Backup...}</action> + <action function="set">tw_complete_text1={@rename_backup_complete=Backup Rename Complete}</action> + <action function="set">tw_slider_text={@swipe_to_rename=Swipe to Rename}</action> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_rename%</action> + <action function="set">tw_existpage=renamebackup</action> + <action function="set">tw_notexistpage=confirm_action</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">restore_select</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore_select</action> + </action> + </page> + + <page name="restore_run"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_operation% %tw_partition%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m_accent"> + <placement x="%progress_text_x%" y="%progress_text_y%"/> + <text>{@progress=Progress:}</text> + </text> + + <text style="text_m"> + <placement x="%progress_text_x%" y="%row18_y%"/> + <text>%tw_size_progress%</text> + </text> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_back=restore_select</action> + <action function="set">tw_complete_text1={@restore_complete=Restore Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <action function="nandroid">restore</action> + </action> + </page> + + <page name="mount"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <partitionlist> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_width%" h="%partitionlist_mount_height%"/> + <text>{@mount_sel_part=Select Partitions to Mount:}</text> + <listtype name="mount"/> + </partitionlist> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="=" var2="0"/> + <placement x="%col1_x_left%" y="%row14_y%" textplacement="6"/> + <text>{@mount_sys_ro_chk=Mount system partition read-only}</text> + <image resource="checkbox_false"/> + <action function="mountsystemtoggle">1</action> + </button> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="!=" var2="0"/> + <placement x="%col1_x_left%" y="%row14_y%" textplacement="6"/> + <text>{@mount_sys_ro_chk=Mount system partition read-only}</text> + <image resource="checkbox_true"/> + <actions> + <action function="set">tw_lifetime_writes=2</action> + <action function="page">system_readonly_check</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_has_usb_storage" var2="1"/> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@mount_usb_storage_btn=Mount USB Storage}</text> + <action function="page">usb_mount</action> + </button> + + <button style="main_button_half_width"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_is_decrypted" var2="0"/> + </conditions> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@decrypt_data_btn=Decrypt Data}</text> + <action function="page">decrypt</action> + </button> + + <button style="main_button_half_width"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=mount</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <button style="main_button_half_width"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="0"/> + </conditions> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@enable_mtp_btn=Enable MTP}</text> + <action function="startmtp"/> + </button> + + <button style="main_button_half_width"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="1"/> + </conditions> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@disable_mtp_btn=Disable MTP}</text> + <action function="stopmtp"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="usb_mount"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@usb_storage_hdr=USB Storage}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@usb_stor_mnt1=USB Storage Mounted}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@usb_stor_mnt2=Be sure to safely remove your device}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@usb_stor_mnt3=from your computer before unmounting!}</text> + </text> + + <button style="main_button_half_width"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@unmount_btn=Unmount}</text> + <action function="page">usb_umount</action> + </button> + + <action> + <action function="mount">usb</action> + <action function="set">tw_busy=1</action> + </action> + </page> + + <page name="usb_umount"> + <action> + <action function="unmount">usb</action> + </action> + + <action> + <action function="page">mount</action> + <action function="set">tw_busy=0</action> + </action> + </page> + + <page name="system_readonly_check"> + <action> + <action function="checkpartitionlifetimewrites">/system</action> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="1"/> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="page">mount</action> + </actions> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="0"/> + <actions> + <action function="set">tw_back=mount</action> + <action function="page">system_readonly</action> + </actions> + </action> + </page> + + <page name="reboot"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <button style="main_button"> + <condition var1="tw_reboot_system" var2="1"/> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@rb_system_btn=System}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_poweroff" var2="1"/> + <placement x="%center_x%" y="%row2_y%"/> + <text>{@rb_poweroff_btn=Power Off}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=poweroff</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_ospo=sure you wish to power off?}</action> + <action function="set">tw_action_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_complete_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_slider_text={@swipe_power_off=Swipe to Power Off}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_recovery" var2="1"/> + <placement x="%col1_x_left%" y="%row6a_y%"/> + <text>{@rb_recovery_btn=Recovery}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=recovery</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_bootloader" var2="1"/> + <placement x="%center_x%" y="%row6a_y%"/> + <text>{@rb_bootloader_btn=Bootloader}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=bootloader</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_download_mode" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@rb_download_btn=Download}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=download</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="rebootapp"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@reboot_install_app_hdr=Install TWRP App?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@reboot_install_app1=Would you like to install the Official TWRP App?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@reboot_install_app2=The app can check for new TWRP versions.}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row5_y%"/> + <text>{@reboot_install_app_prompt_install=Prompt to install TWRP app if not installed}</text> + <data variable="tw_app_prompt"/> + </checkbox> + + <checkbox> + <condition var1="tw_mount_system_ro" var2="0"/> + <placement x="%indent%" y="%row7_y%"/> + <text>{@reboot_install_app_system=Install as a System App}</text> + <data variable="tw_app_install_system"/> + </checkbox> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="reboot">%tw_reboot_param%</action> + </button> + + <slider> + <text>{@swipe_to_install_app=Swipe to Install TWRP App}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=installapp</action> + <action function="set">tw_action_text1={@reboot_installing_app=Installing App...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=reboot</action> + <action function="set">tw_action2_param=%tw_reboot_param%</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">reboot</action> + </actions> + </action> + </page> + + <page name="system_readonly"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@sys_ro_hdr=Unmodified System Partition}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@sys_ro_keep=Keep System Read only?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@sys_rol1=TWRP can leave your system partition unmodified to make it easier for you to take official updates.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@sys_rol2=TWRP will be unable to prevent the stock ROM from replacing TWRP and will not offer to root your device.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@sys_rol3=Installing zips or performing adb operations may still modify the system partition.}</text> + </text> + + <checkbox> + <condition var1="tw_is_encrypted" var2="0"/> + <placement x="%col1_x_left%" y="%row14_y%"/> + <text>{@sys_ro_never_show_chk=Never show this screen during boot again}</text> + <data variable="tw_never_show_system_ro_page"/> + </checkbox> + + <button style="main_button_half_width"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@sys_ro_keep_ro_btn=Keep Read Only}</text> + <actions> + <action function="mountsystemtoggle">1</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + + <slider> + <text>{@swipe_allow_mod=Swipe to Allow Modifications}</text> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </slider> + </page> + + <page name="settings"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@settings_gen_hdr=General Settings}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="0" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox style="scrolllist"> + <placement x="%col1_x_left%" y="%row3a_y%" w="%content_half_width%" h="%listbox_settings_height%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <listitem name="{@zip_sig_chk=Zip signature verification}"> + <data variable="tw_signed_zip_verify"/> + </listitem> + <listitem name="{@install_reboot_chk=Reboot after installation is complete}"> + <data variable="tw_install_reboot"/> + </listitem> + <listitem name="{@use_rmrf_chk=Use rm -rf instead of formatting}"> + <data variable="tw_rm_rf"/> + </listitem> + <listitem name="{@disable_backup_space_chk=Disable free space check before backup}"> + <data variable="tw_disable_free_space"/> + </listitem> + <listitem name="{@skip_md5_backup_chk=Skip MD5 generation during backup}"> + <data variable="tw_skip_md5_generate"/> + </listitem> + <listitem name="{@restore_enable_md5_chk=Enable MD5 verification of backup files}"> + <data variable="tw_skip_md5_check"/> + </listitem> + <listitem name="{@use24clock_chk=Use 24-hour clock}"> + <data variable="tw_military_time"/> + </listitem> + <listitem name="{@reboot_install_app_prompt_install=Prompt to install TWRP app on every reboot}"> + <data variable="tw_app_prompt"/> + </listitem> + <listitem name="{@simact_chk=Simulate actions for theme testing}"> + <data variable="tw_simulate_actions"/> + </listitem> + <listitem name="{@simfail_chk=Simulate failure for actions}"> + <condition var1="tw_simulate_actions" var2="1"/> + <data variable="tw_simulate_fail"/> + </listitem> + </listbox> + + <checkbox> + <placement x="%col1_x_right%" y="%row3a_y%"/> + <text>{@rev_navbar_chk=Reversed navbar layout}</text> + <data variable="tw_samsung_navbar"/> + </checkbox> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" op="!=" var2="0"/> + <placement x="%col1_x_right%" y="%row5_y%" textplacement="6"/> + <text>{@ctr_navbar_rdo=Center navbar buttons}</text> + <image resource="radio_false"/> + <action function="set">tw_navbar_button_position=0</action> + </button> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" var2="0"/> + <placement x="%col1_x_right%" y="%row5_y%" textplacement="6"/> + <text>{@ctr_navbar_rdo=Center navbar buttons}</text> + <image resource="radio_true"/> + <action function="set">tw_navbar_button_position=0</action> + </button> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" op="!=" var2="1"/> + <placement x="%col1_x_right%" y="%row6a_y%" textplacement="6"/> + <text>{@lft_navbar_rdo=Left align navbar buttons}</text> + <image resource="radio_false"/> + <action function="set">tw_navbar_button_position=1</action> + </button> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" var2="1"/> + <placement x="%col1_x_right%" y="%row6a_y%" textplacement="6"/> + <text>{@lft_navbar_rdo=Left align navbar buttons}</text> + <image resource="radio_true"/> + <action function="set">tw_navbar_button_position=1</action> + </button> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" op="!=" var2="2"/> + <placement x="%col1_x_right%" y="%row8_y%" textplacement="6"/> + <text>{@rht_navbar_rdo=Right align navbar buttons}</text> + <image resource="radio_false"/> + <action function="set">tw_navbar_button_position=2</action> + </button> + + <button style="radiobutton"> + <condition var1="tw_navbar_button_position" var2="2"/> + <placement x="%col1_x_right%" y="%row8_y%" textplacement="6"/> + <text>{@rht_navbar_rdo=Right align navbar buttons}</text> + <image resource="radio_true"/> + <action function="set">tw_navbar_button_position=2</action> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@restore_defaults_btn=Restore Defaults}</text> + <action function="restoredefaultsettings"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_timezone"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@time_zone_hdr=Time Zone}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col2_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox> + <placement x="%col1_x_left%" y="%row3_y%" w="%content_half_width%" h="%listbox_timezone_height%"/> + <text>{@sel_tz_list=Select Time Zone:}</text> + <data name="tw_time_zone_guisel"/> + <listitem name="{@utcm11=(UTC -11) Samoa, Midway Island}">BST11;BDT</listitem> + <listitem name="{@utcm10=(UTC -10) Hawaii}">HST10;HDT</listitem> + <listitem name="{@utcm9=(UTC -9) Alaska}">AST9;ADT</listitem> + <listitem name="{@utcm8=(UTC -8) Pacific Time}">PST8;PDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm7=(UTC -7) Mountain Time}">MST7;MDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm6=(UTC -6) Central Time}">CST6;CDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm5=(UTC -5) Eastern Time}">EST5;EDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm4=(UTC -4) Atlantic Time}">AST4;ADT</listitem> + <listitem name="{@utcm3=(UTC -3) Brazil, Buenos Aires}">GRNLNDST3;GRNLNDDT</listitem> + <listitem name="{@utcm2=(UTC -2) Mid-Atlantic}">FALKST2;FALKDT</listitem> + <listitem name="{@utcm1=(UTC -1) Azores, Cape Verde}">AZOREST1;AZOREDT</listitem> + <listitem name="{@utc0=(UTC 0) London, Dublin, Lisbon}">GMT0;BST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp1=(UTC +1) Berlin, Brussels, Paris}">CET-1;CEST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp2=(UTC +2) Athens, Istanbul, South Africa}">WET-2;WET,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp3=(UTC +3) Moscow, Baghdad}">SAUST-3;SAUDT</listitem> + <listitem name="{@utcp4=(UTC +4) Abu Dhabi, Tbilisi, Muscat}">WST-4;WDT</listitem> + <listitem name="{@utcp5=(UTC +5) Yekaterinburg, Islamabad}">PAKST-5;PAKDT</listitem> + <listitem name="{@utcp6=(UTC +6) Almaty, Dhaka, Colombo}">TASHST-6;TASHDT</listitem> + <listitem name="{@utcp7=(UTC +7) Bangkok, Hanoi, Jakarta}">THAIST-7;THAIDT</listitem> + <listitem name="{@utcp8=(UTC +8) Beijing, Singapore, Hong Kong}">TAIST-8;TAIDT</listitem> + <listitem name="{@utcp9=(UTC +9) Tokyo, Seoul, Yakutsk}">JST-9;JSTDT</listitem> + <listitem name="{@utcp10=(UTC +10) Eastern Australia, Guam}">EET-10;EETDT</listitem> + <listitem name="{@utcp11=(UTC +11) Vladivostok, Solomon Islands}">MET-11;METDT</listitem> + <listitem name="{@utcp12=(UTC +12) Auckland, Wellington, Fiji}">NZST-12;NZDT</listitem> + </listbox> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row3a_y%"/> + <text>{@sel_tz_offset=Select Offset (usually 0): %tw_time_zone_guioffset%}</text> + </text> + + <button style="button_quarter_width"> + <placement x="%col1_x_right%" y="%row5_y%"/> + <text>{@tz_offset_none=None}</text> + <action function="set">tw_time_zone_guioffset=0</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x_right%" y="%row5_y%"/> + <text>{@tz_offset_15=15}</text> + <action function="set">tw_time_zone_guioffset=15</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x_right%" y="%row5_y%"/> + <text>{@tz_offset_30=30}</text> + <action function="set">tw_time_zone_guioffset=30</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x_right%" y="%row5_y%"/> + <text>{@tz_offset_45=45}</text> + <action function="set">tw_time_zone_guioffset=45</action> + </button> + + <checkbox> + <placement x="%col1_x_right%" y="%row7_y%"/> + <font resource="font_m" color="%text_color%"/> + <text>{@use_dst_chk=Use daylight savings time (DST)}</text> + <data variable="tw_time_zone_guidst"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </checkbox> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%col1_x_right%" y="%row9_y%"/> + <text>{@curr_tz=Current Time Zone: %tw_time_zone%}</text> + </text> + + <button> + <highlight color="%highlight_color%"/> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <font resource="font_m" color="%text_button_color%"/> + <text>{@set_tz_btn=Set Time Zone}</text> + <image resource="main_button_half_width"/> + <action function="setguitimezone"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_screen"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@settings_screen_hdr=Screen Settings}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col3_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <button> + <placement x="%col1_x_left%" y="%row3a_y%" textplacement="6"/> + <font resource="font_m" color="%text_color%"/> + <condition var1="tw_screen_timeout_secs" op="=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_false"/> + <action function="set">tw_screen_timeout_secs=60</action> + </button> + + <button> + <placement x="%col1_x_left%" y="%row3a_y%" textplacement="6"/> + <font resource="font_m" color="%text_color%"/> + <condition var1="tw_screen_timeout_secs" op="!=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_true"/> + <action function="set">tw_screen_timeout_secs=0</action> + </button> + + <slidervalue> + <condition var1="tw_screen_timeout_secs" op="!=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <placement x="col1_x_left" y="%row5_y%" w="%content_width%"/> + <text>{@screen_to_slider=Screen timeout in seconds:}</text> + <data variable="tw_screen_timeout_secs" min="15" max="300"/> + </slidervalue> + + <slidervalue> + <condition var1="tw_has_brightnesss_file" var2="1"/> + <placement x="col1_x_left" y="%row10_y%" w="%content_width%"/> + <text>{@screen_bright_slider=Brightness: %tw_brightness_pct%%}</text> + <data variable="tw_brightness_pct" min="10" max="100"/> + <actions> + <action function="set">tw_brightness=%tw_brightness_max%</action> + <action function="compute">tw_brightness*%tw_brightness_pct%</action> + <action function="compute">tw_brightness/100</action> + <action function="setbrightness">%tw_brightness%</action> + </actions> + </slidervalue> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_vibration"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@vibration_hdr=Vibration}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col4_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <slidervalue> + <placement x="col1_x_left" y="%row4_y%" w="%content_width%"/> + <text>{@button_vibration=Button Vibration:}</text> + <data variable="tw_button_vibrate" min="0" max="300"/> + </slidervalue> + + <slidervalue> + <placement x="col1_x_left" y="%row9_y%" w="%content_width%"/> + <text>{@kb_vibration=Keyboard Vibration:}</text> + <data variable="tw_keyboard_vibrate" min="0" max="300"/> + </slidervalue> + + <slidervalue> + <placement x="col1_x_left" y="%row14_y%" w="%content_width%"/> + <text>{@act_vibration=Action Vibration:}</text> + <data variable="tw_action_vibrate" min="0" max="500"/> + </slidervalue> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_language"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@language_hdr=Language - %tw_language_display%}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col5_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox> + <placement x="%col1_x_left%" y="%row3_y%" w="%content_half_width%" h="%listbox_timezone_height%"/> + <text>{@select_language=Select Language:}</text> + <icon selected="radio_true" unselected="radio_false" /> + <data name="tw_language" /> + </listbox> + + <button> + <highlight color="%highlight_color%"/> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <font resource="font_m" color="%text_button_color%"/> + <text>{@set_language_btn=Set Language}</text> + <image resource="main_button_half_width"/> + <action function="setlanguage"></action> + </button> + + <action> + <touch key="home" /> + <action function="page">main</action> + </action> + + <action> + <touch key="back" /> + <action function="page">settings</action> + </action> + </page> + + <page name="copylog"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@copying_log=Copy Logs to SD Card}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row4_y%"/> + <text>{@include_kernel_log=Include Kernel Log}</text> + <data variable="tw_include_kernel_log" value="1"/> + </checkbox> + + <slider> + <text>{@copying_log=Copy Logs to SD Card}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=copylog</action> + <action function="set">tw_action_text1={@copying_log=Copy Logs to SD Card}</action> + <action function="set">tw_complete_text1={@copy_log_complete=Logs Copy Completed}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="page">advanced</action> + </actions> + </action> + </page> + + <page name="advanced"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@copy_log_btn=Copy Log}</text> + <action function="page">copylog</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row2_y%"/> + <text>{@fix_context_btn=Fix Contexts}</text> + <action function="page">fixcontexts</action> + </button> + + <button style="main_button"> + <condition var1="tw_allow_partition_sdcard" var2="1"/> + <placement x="%col1_x_left%" y="%row6a_y%"/> + <text>{@part_sd_btn=Partition SD Card}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcardsel</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row6a_y%"/> + <text>{@file_manager_btn=File Manager}</text> + <action function="page">filemanagerlist</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@terminal_btn=Terminal}</text> + <action function="page">terminalcommand</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row11_y%"/> + <text>{@reload_theme_btn=Reload Theme}</text> + <action function="reload"/> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row15a_y%"/> + <text>{@adb_sideload_btn=ADB Sideload}</text> + <action function="page">sideload</action> + </button> + + <button style="main_button"> + <condition var1="tw_show_dumlock" var2="1"/> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@dumlock_btn=HTC Dumlock}</text> + <action function="page">htcdumlock</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@inject_twrp_btn=Inject TWRP}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=reinjecttwrp</action> + <action function="set">tw_text1={@inject_twrp_confirm=Re-Inject TWRP?}</action> + <action function="set">tw_action_text1={@injecting_twrp=Re-Injecting TWRP...}</action> + <action function="set">tw_complete_text1={@inject_twrp_complete=TWRP Injection Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="partsdcardsel"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_sd_hdr=Partition SD Card}</text> + </text> + + <partitionlist> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_width%" h="%partitionlist_mount_height%"/> + <text>{@sel_storage_list=Select Storage}</text> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%center_x%" y="%row14_y%" placement="5"/> + <text>{@invalid_partsd_sel=You must select a removable device}</text> + </text> + + <button style="main_button_half_width"> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="getpartitiondetails">tw_storage_path</action> + <action function="page">partsdcardcheck</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="partsdcardcheck"> + <action> + <condition var1="tw_partition_removable" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcard</action> + </actions> + </action> + + <action> + <condition var1="tw_partition_removable" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">partsdcardsel</action> + </actions> + </action> + </page> + + <page name="partsdcard"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@part_sd_ext_sz=EXT Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_sdext_size%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x_left%" y="%row5_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_sdext_size-256</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x_right%" y="%row5_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_sdext_size+256</action> + </button> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row9_y%" placement="5"/> + <text>{@part_sd_swap_sz=Swap Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row10_y%" placement="5"/> + <text>%tw_swap_size%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x_left%" y="%row9_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_swap_size-64</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x_right%" y="%row9_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_swap_size+64</action> + </button> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row13_y%" placement="5"/> + <text>{@file_system=File System:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row14_y%" placement="5"/> + <text>%tw_sdpart_file_system%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x_left%" y="%row13_y%"/> + <text>EXT3</text> + <action function="set">tw_sdpart_file_system=ext3</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x_right%" y="%row13_y%"/> + <text>EXT4</text> + <action function="set">tw_sdpart_file_system=ext4</action> + </button> + + <slider style="slider_centered"> + <text>{@swipe_part_sd=Swipe to Partition}</text> + <action function="page">partsdcardaction</action> + <actions> + <action function="set">tw_back=partsdcard</action> + <action function="set">tw_action=partitionsd</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=set</action> + <action function="set">tw_action2_param=tw_zip_location=/sdcard</action> + <action function="set">tw_action_text1={@partitioning_sd=Partitioning SD Card...}</action> + <action function="set">tw_action_text2={@partitioning_sd2=This will take a few minutes.}</action> + <action function="set">tw_complete_text1={@part_sd_complete=Partitioning Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partsdcardsel</action> + </action> + </page> + + <page name="htcdumlock"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@dumlock_hdr=HTC Dumlock}</text> + </text> + + <button style="main_button_m"> + <placement x="%col2_x_left%" y="%row2_y%"/> + <text>{@dumlock_restore_btn=Restore Original Boot}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockrestoreboot</action> + <action function="set">tw_text1={@dumlock_restore_confirm=Restore original boot image?}</action> + <action function="set">tw_action_text1={@dumlock_restoring=Restoring Original Boot...}</action> + <action function="set">tw_complete_text1={@dumlock_restore_complete=Restore Original Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_m"> + <placement x="%col2_x_left%" y="%row6a_y%"/> + <text>{@dumlock_reflash_btn=Reflash Recovery}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockreflashrecovery</action> + <action function="set">tw_text1={@dumlock_reflash_confirm=Reflash recovery to boot?}</action> + <action function="set">tw_action_text1={@dumlock_reflashing=Flashing recovery to boot...}</action> + <action function="set">tw_complete_text1={@dumlock_reflash_complete=Recovery Flash to Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_m"> + <placement x="%col2_x_left%" y="%row11_y%"/> + <text>{@dumlock_install_btn=Install HTC Dumlock}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=installhtcdumlock</action> + <action function="set">tw_text1={@dumlock_install_confirm=Install HTC dumlock files to ROM?}</action> + <action function="set">tw_action_text1={@dumlock_installing=Installing HTC Dumlock...}</action> + <action function="set">tw_complete_text1={@dumlock_install_complete=HTC Dumlock Install Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="lock"> + <background color="%semi_transparent%"/> + + <image> + <image resource="unlock_icon"/> + <placement x="%center_x%" y="%row8_y%" placement="4"/> + </image> + + <slider style="slider_centered"> + <text>{@swipe_to_unlock=Swipe to Unlock}</text> + <action function="overlay"/> + </slider> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + </page> + + <page name="filemanagerlist"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_sel_file=Select a File or Folder}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_quarter_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location1%</text> + <filter folders="1" files="1"/> + <path name="tw_file_location1" default="/"/> + <data name="tw_filename1"/> + <selection name="tw_selection1"/> + </fileselector> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row16a_y%"/> + <text>{@fm_sel_curr_folder=Select Current Folder}</text> + <actions> + <action function="set">tw_filename1=tw_file_location1</action> + <action function="set">tw_fm_isfolder=1</action> + <action function="set">tw_fm_type={@fm_type_folder=Folder}</action> + <action function="page">filemanageroptions</action> + </actions> + </button> + + <action> + <actions> + <action function="set">tw_fm_type={@fm_type_file=File}</action> + <action function="set">tw_fm_isfolder=0</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + + <action> + <condition var1="tw_filename1" op="modified"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanageroptions"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_choose_act=Choose Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@fm_selected=%tw_fm_type% selected:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row3_y%"/> + <text>%tw_filename1%</text> + </text> + + <button style="main_button_half_width"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@fm_copy_file_btn=Copy File}</text> + <actions> + <action function="set">tw_filemanager_command=cp</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@fm_copy_folder_btn=Copy Folder}</text> + <actions> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && cp -R</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row11_y%"/> + <text>{@fm_move_btn=Move}</text> + <actions> + <action function="set">tw_filemanager_command=mv</action> + <action function="set">tw_fm_text1={@fm_moving=Moving}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@fm_chmod755_btn=chmod 755}</text> + <actions> + <action function="set">tw_filemanager_command=chmod 755</action> + <action function="set">tw_fm_text1={@fm_chmod755ing=chmod 755}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@fm_chmod_btn=chmod}</text> + <actions> + <action function="set">tw_filemanager_rename=0000</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerchmod</action> + </actions> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_right%" y="%row11_y%"/> + <text>{@fm_delete_btn=Delete}</text> + <actions> + <action function="set">tw_filemanager_command=rm -rf</action> + <action function="set">tw_fm_text1={@fm_deleting=Deleting}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%center_x%" y="%row11_y%"/> + <text>{@fm_rename_file_btn=Rename File}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=mv</action> + <action function="page">filemanagerrenamefile</action> + </actions> + </button> + + <button style="main_button_half_width"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%center_x%" y="%row11_y%"/> + <text>{@fm_rename_folder_btn=Rename Folder}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && mv</action> + <action function="page">filemanagerrenamefolder</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanagerlist</action> + </action> + </page> + + <page name="choosedestinationfolder"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_sel_dest=Select Destination Folder}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%col1_x_left%" y="%row1a_y%" w="%content_quarter_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location2%</text> + <filter folders="1" files="0"/> + <path name="tw_file_location2" default="/"/> + <data name="tw_filename2"/> + <selection name="tw_selection2"/> + </fileselector> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row16a_y%"/> + <text>{@fm_sel_curr_folder=Select Current Folder}</text> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_file_location2%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefile"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3="%tw_file_location1%/%tw_filemanager_rename%"</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefolder"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_filemanager_rename%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerchmod"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_set_perms_hdr=Set Permissions}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@fm_perms=Permissions:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="3" maxlen="4" allow="0123456789"/> + <actions> + <action function="set">tw_filemanager_command=chmod %tw_filemanager_rename%</action> + <action function="set">tw_fm_text1=chmod %tw_filemanager_rename%</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerconfirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_fm_text1%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_filename1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_fm_text2%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_fm_text3%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider style="slider_centered"> + <text>{@swipe_to_confirm=Swipe to Confirm}</text> + <action function="page">filemanageraction</action> + </slider> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="filemanageraction"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_fm_text1%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_back=filemanagerlist</action> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_include_text3" var2="0"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%"</action> + </action> + + <action> + <condition var1="tw_include_text3" var2="1"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%" "%tw_fm_text3%"</action> + </action> + </page> + + <page name="decrypt"> + <template name="page"/> + + <action> + <condition var1="tw_crypto_pwtype" var2="2"/> + <action function="page">decrypt_pattern</action> + </action> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@decrypt_data_enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_crypto_display%</text> + <data name="tw_crypto_password" mask="*" maskvariable="tw_crypto_display"/> + <restrict minlen="1" maxlen="254"/> + <action function="page">trydecrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row5_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="row5_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="%row5_y%"/> + <text>{@decrypt_data_failed=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_width_low"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + + <button style="main_button_half_width_low"> + <placement x="%indent_right%" y="%row6_y%" placement="1"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + + <template name="keyboardtemplate"/> + </page> + + <page name="decrypt_pattern"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col2_x_left%" y="%row2_y%" placement="5"/> + <text>{@decrypt_data_enter_pattern=Enter Pattern.}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col2_x_left%" y="%row3_y%" placement="5"/> + <text>{@decrypt_data_failed_pattern=Pattern failed, please try again!}</text> + </text> + + <patternpassword> + <placement x="%pattern_x%" y="%row4a_y%" w="%pattern_size%" h="%pattern_size%"/> + <dot color="%fileselector_linecolor%" activecolor="%accent_color%" radius="%pattern_dot_dia%"/> + <line color="%fileselector_linecolor%" width="%pattern_line_w%"/> + <data name="tw_crypto_password"/> + <action function="page">trydecrypt</action> + </patternpassword> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>3x3</text> + <action function="set">tw_gui_pattern_grid_size=3</action> + </button> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>4x4</text> + <action function="set">tw_gui_pattern_grid_size=4</action> + </button> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>5x5</text> + <action function="set">tw_gui_pattern_grid_size=5</action> + </button> + + <button style="main_button_half_width_low"> + <placement x="%col_button_right%" y="%row10a_y%"/> + <text>6x6</text> + <action function="set">tw_gui_pattern_grid_size=6</action> + </button> + + <button style="main_button_half_width"> + <placement x="%col1_x_right%" y="%row15a_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + + <button style="main_button_half_width"> + <placement x="%col2_x_right%" y="%row15a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + </page> + + <page name="trydecrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_trying=Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </action> + </page> + + <page name="terminalcommand"> + <template name="page"/> + + <fill color="%background_color%"> + <placement x="0" y="%status_height%" w="%screen_width%" h="%header_height%"/> + </fill> + + <terminal> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%row3_header_y%" w="%screen_width%" h="%terminal_s_height%"/> + </terminal> + + <terminal> + <condition var1="tw_hide_kb" var2="1"/> + <placement x="0" y="%row3_header_y%" w="%screen_width%" h="%terminal_l_height%"/> + </terminal> + + <template name="keyboardterminaltemplate"/> + + <object type="fill" color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%" /> + </object> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <placement x="%home_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <placement x="%home_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="page">main</action> + <action function="set">tw_hide_kb=0</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="page">advanced</action> + <action function="set">tw_hide_kb=0</action> + </actions> + </action> + + <object type="action"> + <touch key="power+voldown" /> + <action function="screenshot" /> + </object> + </page> + + <page name="sideload"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@adb_sideload_hdr=ADB Sideload}</text> + </text> + + <checkbox> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>{@sideload_wipe_dalvik_chk=Wipe Dalvik Cache}</text> + <data variable="tw_wipe_dalvik"/> + </checkbox> + + <checkbox> + <placement x="%col1_x_left%" y="%row3a_y%"/> + <text>{@sideload_wipe_cache_chk=Wipe Cache}</text> + <data variable="tw_wipe_cache"/> + </checkbox> + + <slider style="slider_centered"> + <text>{@swipe_to_sideload=Swipe to Start Sideload}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=adbsideload</action> + <action function="set">tw_action_text1={@sideload_confirm=ADB Sideload}</action> + <action function="set">tw_action_text2={@sideload_usage=Usage: adb sideload filename.zip}</action> + <action function="set">tw_complete_text1={@sideload_complete=ADB Sideload Complete}</action> + <action function="set">tw_has_cancel=1</action> + <action function="set">tw_show_reboot=1</action> + <action function="set">tw_cancel_action=adbsideloadcancel</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="fixcontexts"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fix_contexts_hdr=Fix Contexts}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@fix_contexts_note1=Note: Fixing contexts is rarely needed.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@fix_contexts_note2=Fixing SELinux Contexts may cause}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@fix_contexts_note3=your device to not boot properly.}</text> + </text> + + <slider style="slider_centered"> + <text>{@swipe_to_fix_contexts=Swipe to Fix Contexts}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=fixcontexts</action> + <action function="set">tw_action_text1={@fixing_contexts=Fixing Contexts...}</action> + <action function="set">tw_complete_text1={@fix_contexts_complete=Fix Contexts Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="installsu"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@su_hdr=SuperSU Check}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@su_note1=Your device does not appear to be rooted.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@su_note2=Install SuperSU now?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@su_note3=This will root your device.}</text> + </text> + + <button style="main_button_half_width"> + <placement x="%col2_x_left%" y="%row15a_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="set">tw_page_done=1</action> + </button> + + <slider> + <text>{@swipe_su_to_install=Swipe to Install}</text> + <actions> + <action function="set">tw_action=installsu</action> + <action function="set">tw_action_text1={@su_installing=Installing SuperSU}</action> + <action function="set">tw_action_text2=</action> + <action function="page">singleaction_page</action> + </actions> + </slider> + </page> + + <page name="slideout"> + <fill color="%background_color%"> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="%slideout_bg_height%"/> + </fill> + + <console> + <placement x="%col1_x_left%" y="%slideout_y%" w="%content_width%" h="%slideout_height%"/> + </console> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + <action function="overlay"/> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="select_storage"> + <fill color="%semi_transparent%"> + <placement x="0" y="0" w="%screen_width%" h="%screen_height%"/> + </fill> + + <fill color="%background_color%"> + <placement x="%col2_x_left%" y="row4_y" w="%dialog_width%" h="%dialog_height%"/> + </fill> + + <partitionlist style="partitionlist_storage"> + <text>{@sel_storage_list=Select Storage}</text> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <button style="button_third_width"> + <placement x="%dialog_button_x%" y="%row13_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="overlay"/> + <action function="page">clear_vars</action> + </actions> + </button> + + <fill color="#000000"> + <placement x="0" y="navbar_y" w="%screen_width%" h="%navbar_height"/> + </fill> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <placement x="%home_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <placement x="%home_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="select_language"> + <fill color="%semi_transparent%"> + <placement x="0" y="0" w="%screen_width%" h="%screen_height%"/> + </fill> + + <fill color="%background_color%"> + <placement x="%col2_x_left%" y="row4_y" w="%dialog_width%" h="%dialog_height%"/> + </fill> + + <listbox> + <placement x="%dialog_content_x%" y="%row4_y%" w="%content_overlay_width%" h="%partitionlist_storage_height%"/> + <text>{@select_language=Select Language:}</text> + <icon selected="radio_true" unselected="radio_false" /> + <data name="tw_language" /> + </listbox> + + <button style="button_third_width"> + <placement x="%dialog_button_x%" y="%row13_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="overlay"/> + <action function="setlanguage"></action> + </actions> + </button> + + <fill color="#000000"> + <placement x="0" y="navbar_y" w="%screen_width%" h="%navbar_height"/> + </fill> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <placement x="%home_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <placement x="%home_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="console" /> + <condition var1="tw_busy" var2="0" /> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2" /> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + </pages> +</recovery> diff --git a/gui/theme/common/languages/cz.xml b/gui/theme/common/languages/cz.xml new file mode 100644 index 000000000..83cd0b2cf --- /dev/null +++ b/gui/theme/common/languages/cz.xml @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Czech</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">Systém</string> + <string name="system_image">Obraz systému</string> + <string name="vendor">Dodavatel</string> + <string name="vendor_image">Obrázek dodavatela</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="sdcard">SD karta</string> + <string name="internal">Interní úložiště</string> + <string name="microsd">Mikro SD karta</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Přijaté data</string> + <string name="adopted_storage">Přijaté úložiště</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Baterie: %tw_battery%</string> + <string name="sort_by_name">Seřadit podle názvu</string> + <string name="sort_by_date">Seřadit podle datumu</string> + <string name="sort_by_size">Seřadit podle velikosti</string> + <string name="sort_by_name_only">Název</string> + <string name="sort_by_date_only">Datum</string> + <string name="sort_by_size_only">Velikost</string> + <string name="tab_general">VŠEOBECNÉ</string> + <string name="tab_options">MOŽNOSTI</string> + <string name="tab_backup">ZÁLOHOVÁNÍ</string> + <string name="tab_time_zone">ČASOVÉ PÁSMO</string> + <string name="tab_screen">OBRAZOVKA</string> + <string name="tab_vibration">VIBRACE</string> + <string name="tab_language">JAZYK</string> + <string name="install_btn">Instalovat</string> + <string name="wipe_btn">Vymazat</string> + <string name="backup_btn">Zálohovat</string> + <string name="restore_btn">Obnovit</string> + <string name="mount_btn">Připojit</string> + <string name="settings_btn">Nastavení</string> + <string name="advanced_btn">Rozšířené</string> + <string name="reboot_btn">Restartovat</string> + <string name="files_btn">Soubory</string> + <string name="copy_log_btn">Kopírovat log</string> + <string name="select_type_hdr">Vyberte typ</string> + <string name="install_zip_hdr">Instalovat Zip</string> + <string name="install_zip_btn">Instalovat Zip</string> + <string name="install_image_hdr">Instalovat obraz</string> + <string name="install_image_btn">Instalovat obraz</string> + <string name="install_select_file_hdr">Vybrat soubor</string> + <string name="file_selector_folders_hdr">Složky</string> + <string name="select_file_from_storage">Vyberte soubor z: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Instalovat</string> + <string name="select_storage_hdr">Vyberte úložiště</string> + <string name="select_storage_btn">Vyberte úložiště</string> + <string name="queue_hdr">Řada</string> + <string name="zip_queue_count">%tw_zip_queue_count% / max 10 souborů v řadě</string> + <string name="zip_queue_count_s">Soubor %tw_zip_queue_count% z 10:</string> + <string name="zip_warn1">Tato operace může nainstalovat nekompatibilní</string> + <string name="zip_warn2">software a znefunkčnit zařízení.</string> + <string name="zip_back_cancel">Stlačte Nazpět pro zrušení přidání zip.</string> + <string name="zip_back_clear">Stlačte Nazpět pro vyčištění seznamu.</string> + <string name="folder">Adresář:</string> + <string name="file">Soubor:</string> + <string name="zip_sig_chk">Verifikace podpisu zip</string> + <string name="inject_twrp_chk">Vložit TWRP po instalaci</string> + <string name="options_hdr">Nastavení</string> + <string name="confirm_flash_hdr">Potvrdit flash</string> + <string name="zip_queue">Řada:</string> + <string name="options">Nastavení:</string> + <string name="swipe_confirm"> Potvrdit</string> + <string name="zip_add_btn">Přidat víc Zip</string> + <string name="zip_clear_btn">Vyčistit seznam Zip</string> + <string name="install_zip_count_hdr">Nainstaluj Zip %tw_zip_index% z %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Instalace Zip: %tw_file%</string> + <string name="failed">Neúspěšné</string> + <string name="successful">Úspěšné</string> + <string name="install_failed">Instalace selhala</string> + <string name="install_successful">Instalace se podařila</string> + <string name="wipe_cache_dalvik_btn">Vymazat cache/dalvik</string> + <string name="reboot_system_btn">Restartovat systém</string> + <string name="install_sel_target">Vyberte cílový oddíl</string> + <string name="flash_image_select">Vyberte cílový oddíl pro zápis obrazu:</string> + <string name="target_partition">Cílový oddíl:</string> + <string name="flashing_image">Zapisování obrazu...</string> + <string name="image_flashed">Obraz zapsaný</string> + <string name="wipe_cache_dalvik_confirm">Smazat cache & dalvik?</string> + <string name="wiping_cache_dalvik">Mazání cache & dalvik...</string> + <string name="wipe_cache_dalvik_complete">Vymazání cache & dalvik dokončeno</string> + <string name="swipe_wipe">Potáhnout pro vymazání</string> + <string name="swipe_wipe_s"> Vymazání</string> + <string name="no_os1">Není nainstalovaný OS! Jste si</string> + <string name="no_osrb">si jistý, že chcete restart?</string> + <string name="no_ospo">si jistý, že chcete vypnout zařízení?</string> + <string name="rebooting">Restartování...</string> + <string name="swipe_reboot">Potáhnout pro restart</string> + <string name="swipe_reboot_s"> Restart</string> + <string name="swipe_flash">Potáhnout pro potvrzení zápisu</string> + <string name="confirm_action">Potvrdit akci</string> + <string name="back_cancel">Pro zrušení stlačte tlačítko nazpět.</string> + <string name="cancel_btn">Zrušit</string> + <string name="wipe_hdr">Vymazat</string> + <string name="factory_reset_hdr">Tovární nastavení</string> + <string name="factory_reset_btn">Tovární nastavení</string> + <string name="factory_reset1">Vymazat Data, Cache a Dalvik</string> + <string name="factory_reset2">(nezahrnuje vnitřní paměť)</string> + <string name="factory_reset3">Většinou je</string> + <string name="factory_reset4">potřebné jen vymazaní.</string> + <string name="factory_resetting">Tovární nastavení...</string> + <string name="advanced_wipe_hdr">Rozšířené vymazání</string> + <string name="advanced_wipe_btn">Rozšířené vymazání</string> + <string name="wipe_enc_confirm">Vymazat šifrovaní z Data?</string> + <string name="formatting_data">Formátuji Data...</string> + <string name="swipe_format_data">Swipe pro volbu Formátovat Data</string> + <string name="swipe_format_data_s"> Formátovat Data</string> + <string name="factory_reset_complete">Tovární nastavení ukončené</string> + <string name="sel_part_hdr">Vyberte oddíly</string> + <string name="wipe_sel_confirm">Vymazat vybraný(é) oddíl(y)?</string> + <string name="wiping_part">Vymazávání oddílu(ů)...</string> + <string name="wipe_complete">Vymazávání dokončeno</string> + <string name="sel_part_wipe">Vyberte oddíly na vymazání:</string> + <string name="invalid_part_sel">Neplatný výběr oddílu</string> + <string name="format_data_hdr">Formátovat Data</string> + <string name="format_data_btn">Formátovat Data</string> + <string name="format_data_ptr1">Formátování Data vymaže všechny aplikace,</string> + <string name="format_data_ptr2">zálohy, fotky, videa, hudbu</string> + <string name="format_data_ptr3">a vymaže enkrypci vnitřní paměťi.</string> + <string name="format_data_adopted">Zahrnuje adoptovanou paměť</string> + <string name="format_data_lcp1">Formátování Data vymaže všechny aplikace, zálohy, fotografie, videa, hudbu</string> + <string name="format_data_lcp2">a vymaže enkrypci vnitřní paměťi.</string> + <string name="format_data_wtc1">Formátování Data vymaže všechny aplikace,</string> + <string name="format_data_wtc2">zálohy a hudbu. Tento proces je nevratný.</string> + <string name="format_data_undo">Toto je nevratné.</string> + <string name="format_data_complete">Formátování Data je hotové</string> + <string name="yes_continue">Napiš \"yes\" pro pokračování. Stlač nazpět pro zrušení.</string> + <string name="part_opt_hdr">Možnosti pro: %tw_partition_name%</string> + <string name="sel_act_hdr">Vyber akci</string> + <string name="file_sys_opt">Nastavení souborového systému</string> + <string name="partition">Oddíly: %tw_partition_name%</string> + <string name="part_mount_point">Mount point: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Souborový systém: %tw_partition_file_system%</string> + <string name="part_prosent_yes">Přítomný: Ano</string> + <string name="part_prosent_no">Přítomný: Ne</string> + <string name="part_removable_yes">Vyměnitelný: Ano</string> + <string name="part_removable_no">Vyměnitelný: Ne</string> + <string name="part_size">Velikost: %tw_partition_size%MB</string> + <string name="part_used">Použité: %tw_partition_used%MB</string> + <string name="part_free">Volné: %tw_partition_free%MB</string> + <string name="part_backup_size">Velikost zálohy: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Natáhnout souborový systém</string> + <string name="resize_btn_s">Natáhnout</string> + <string name="resize_confirm">Natáhnout %tw_partition_name%?</string> + <string name="resizing">Natahuji...</string> + <string name="resize_complete">Natažení dokončeno</string> + <string name="swipe_resize">Potáhni pro natažení</string> + <string name="swipe_resize_s"> Natáhnout</string> + <string name="repair_btn">Opravit souborový systém</string> + <string name="repair_btn_s">Oprava</string> + <string name="repair_confirm">Opravit %tw_partition_name%?</string> + <string name="repairing">Opravování...</string> + <string name="repair_complete">Oprava ukončená</string> + <string name="swipe_repair">Potáhnout pro opravu</string> + <string name="swipe_repair_s"> Oprava</string> + <string name="change_fs_btn">Změnit souborový systém</string> + <string name="change_fs_btn_s">Změnit</string> + <string name="change_fs_for_hdr">Změnit souborový systém pro: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Oddíl: %tw_partition_name% > Zvolte souborový systém</string> + <string name="change_fs_warn1">Některé ROM nebo jádra nemusí podporovat některé</string> + <string name="change_fs_warn2">souborové systémy. Pokračujte opatrně!</string> + <string name="change_fs_confirm">Změnit %tw_partition_name%?</string> + <string name="formatting">Formátovaní...</string> + <string name="format_complete">Formátovaní dokončeno</string> + <string name="swipe_change_fs">Potáhnout pro změnu</string> + <string name="swipe_change_s"> Změna</string> + <string name="back_btn">Nazpět</string> + <string name="wipe_enc_btn">Vymazat šifrování</string> + <string name="swipe_factory_reset">Potáhnout pro tovární nastavení</string> + <string name="repair_change_btn">Opravit nebo změnit souborový systém</string> + <string name="storage_hdr">Úložiště: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Záloha</string> + <string name="backup_confirm_hdr">Potvrdit zálohu</string> + <string name="encryption_tab">ŠIFROVÁNÍ</string> + <string name="encryption">Šifrování:</string> + <string name="name">Název:</string> + <string name="sel_part_backup">Vybrat oddíly do zálohy:</string> + <string name="storage">Paměť:</string> + <string name="enc_disabled">zakázané - pro povolení zadejte heslo</string> + <string name="enc_enabled">povolené</string> + <string name="enable_backup_comp_chk">Povolit kompresi</string> + <string name="skip_md5_backup_chk">Vynechat generovaní MD5 během zálohy</string> + <string name="disable_backup_space_chk">Nekontrolovat volné místo</string> + <string name="refresh_sizes_btn">Obnovit velikosti</string> + <string name="swipe_backup">Potáhnout pro zálohu</string> + <string name="append_date_btn">Připojit datum</string> + <string name="backup_name_exists">Záloha se stejným názvem už existuje!</string> + <string name="encrypt_backup">Šifrovat zálohu?</string> + <string name="enter_pass">Zadajte heslo:</string> + <string name="enter_pass2">Zopakujte heslo:</string> + <string name="pass_not_match">Hesla se nezhodují!</string> + <string name="partitions">Oddíly:</string> + <string name="disabled">Zakázané</string> + <string name="enabled">Povolené</string> + <string name="backup_name_hdr">Pojmenování zálohy</string> + <string name="progress">Příběh:</string> + <string name="backup_complete">Zálohovaní je dokončeno</string> + <string name="restore_hdr">Obnova</string> + <string name="sel_backup_hdr">Vyberte zálohu</string> + <string name="restore_sel_store_hdr">Vyberte zálohu z %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Vyberte balíček pro obnovu:</string> + <string name="restore_enc_backup_hdr">Šifrovaná záloha</string> + <string name="restore_dec_fail">Heslo je nesprávne, zkuste to znova!</string> + <string name="del_backup_btn">Smazat zálohu</string> + <string name="del_backup_confirm">Smazat zálohu?</string> + <string name="del_backup_confirm2">Toto je nevratné!</string> + <string name="deleting_backup">Vymazávaní zálohy...</string> + <string name="backup_deleted">Vymazání zálohy dokončeno</string> + <string name="swipe_delete">Potáhnout pro smazání</string> + <string name="swipe_delete_s"> Vymazat</string> + <string name="restore_try_decrypt">Šifrovaná záloha - pokus o dešifrovaní</string> + <string name="restore_try_decrypt_s">Pokus o dešifrovaní</string> + <string name="restore_backup_date">Záloha hotová %tw_restore_file_date%</string> + <string name="restore_sel_part">Vybrat oddíl pro obnovu:</string> + <string name="restore_enable_md5_chk">Povolit kontrolu MD5 na zálohovaných souborech</string> + <string name="restore_complete">Obnova dokočená</string> + <string name="swipe_restore">Potáhnout pro obnovu</string> + <string name="swipe_restore_s"> Obnovit</string> + <string name="rename_backup_hdr">Přejmenovat zálohu</string> + <string name="rename_backup_confirm">Přejmenovat zálohu?</string> + <string name="rename_backup_confirm2">Toto je nevratné!</string> + <string name="renaming_backup">Přejmenovávaní zálohy...</string> + <string name="rename_backup_complete">Přejmenování zálohy dokončeno</string> + <string name="swipe_to_rename">Potáhnutím přejmenovat</string> + <string name="swipe_rename"> Přejmenovat</string> + <string name="confirm_hdr">Potvrdit</string> + <string name="mount_hdr">Připojit</string> + <string name="mount_sel_part">Vybrat oddíly pro připojení:</string> + <string name="mount_sys_ro_chk">Připojit oddíly v režimu čtení</string> + <string name="mount_sys_ro_s_chk">Připojit systém v režimu na čtení</string> + <string name="decrypt_data_btn">Dekryptovat Data</string> + <string name="disable_mtp_btn">Zakázat MTP</string> + <string name="enable_mtp_btn">Povolit MTP</string> + <string name="mount_usb_storage_btn">Připoj. ukl. prostor USB</string> + <string name="usb_storage_hdr">Ukládací prostor USB</string> + <string name="usb_stor_mnt1">Ukládací prostor USB připojený</string> + <string name="usb_stor_mnt2">Ujistěte se, že jste zařízení odebrali</string> + <string name="usb_stor_mnt3">z počítače před odpojením!</string> + <string name="unmount_btn">Odpojit</string> + <string name="rb_system_btn">Systém</string> + <string name="rb_poweroff_btn">Vypnout</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Stáhnout</string> + <string name="turning_off">Vypínání...</string> + <string name="swipe_power_off">Potáhnout pro vypnutí</string> + <string name="swipe_power_off_s">Vypnout</string> + <string name="sys_ro_hdr">Nezměněný systémový oddíl</string> + <string name="sys_ro_keep">Ponechat Systém v režimu na čtení?</string> + <string name="sys_rop1">TWRP může ponechat váš systémový oddíl nezměněný</string> + <string name="sys_rop2">což zjednoduší instalaci oficiálních aktualizací.</string> + <string name="sys_rop3">TWRP nezabrání tuctové ROMky</string> + <string name="sys_rop4">přepsat TWRP a nebude nabízet rootování zařízení.</string> + <string name="sys_rop5">Instalovaní Zip nebo operace přes adb můžu stále</string> + <string name="sys_rop6">modifikovat systémový oddíl.</string> + <string name="sys_rol1">TWRP může ponechat váš systémový oddíl nezměněný což zjednoduší instalaci oficiálních aktualizací.</string> + <string name="sys_rol2">TWRP nezabrání tuctové ROMce přepsat TWRP a nebude nabízet rootování zařízení.</string> + <string name="sys_rol3">Instalování Zip nebo operace přes adb můžou stále modifikovat systémový oddíl.</string> + <string name="sys_ro_never_show_chk">Nikdy víc nezobrazovat tuto obrazovku po startu</string> + <string name="sys_ro_keep_ro_btn">Ponechat v režimu na čtení</string> + <string name="swipe_allow_mod">Potáhnout pro povolení změn</string> + <string name="swipe_allow_mod_s">Povolit změny</string> + <string name="settings_hdr">Nastavení</string> + <string name="settings_gen_hdr">Všeobecné</string> + <string name="settings_gen_s_hdr">Všeobecné</string> + <string name="settings_gen_btn">Všeobecné</string> + <string name="use_rmrf_chk">Použít rm -rf namísto naformátování</string> + <string name="use24clock_chk">Používat 24-hodin</string> + <string name="rev_navbar_chk">Převrácené uspořádaní lišty</string> + <string name="simact_chk">Simulovat akce pro testovaní téma</string> + <string name="simfail_chk">Simulovat neúspěchy akcí</string> + <string name="ctr_navbar_rdo">Centrovat tlačítka navigace</string> + <string name="lft_navbar_rdo">Zarovnat tlačítka navigace vlevo</string> + <string name="rht_navbar_rdo">Zarovnat tlačítka navigace vpravo</string> + <string name="restore_defaults_btn">Obnovit předvolené</string> + <string name="settings_tz_btn">Časové pásmo</string> + <string name="settings_screen_btn">Obrazovka</string> + <string name="settings_screen_bright_btn">Jas obrazovky</string> + <string name="settings_vibration_btn">Vibrovat</string> + <string name="settings_language_btn">Jazyk</string> + <string name="time_zone_hdr">Časové pásmo</string> + <string name="sel_tz_list">Vyberte časové pásmo:</string> + <string name="utcm11">(UTC -11) Samoa, Midwayské ostrovy</string> + <string name="utcm10">(UTC -10) Havaj</string> + <string name="utcm9">(UTC -9) Aljaška</string> + <string name="utcm8">(UTC -8) Tichomořský čas</string> + <string name="utcm7">(UTC -7) Západní (Horský) čas USA, Arizona</string> + <string name="utcm6">(UTC -6) Centrální čas USA, Mexiko</string> + <string name="utcm5">(UTC -5) Východní čas USA, Indiana</string> + <string name="utcm4">(UTC -4) Atlantický čas, Caracas</string> + <string name="utcm3">(UTC -3) Brazílie, Buenos Aires</string> + <string name="utcm2">(UTC -2) Středoatlantický čas</string> + <string name="utcm1">(UTC -1) Azory, Cape Verde</string> + <string name="utc0">(UTC 0) Greenwichský čas, Londýn, Dublin, Lisabon</string> + <string name="utcp1">(UTC +1) Stredoevropský čas, Praha, Berlín, Brusel, Paříž</string> + <string name="utcp2">(UTC +2) Atény, Istanbul, Minsk, Káhira</string> + <string name="utcp3">(UTC +3) Moskva, Bagdád, Teherán</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Islamabád, Karáčí, Jekaterinsburg</string> + <string name="utcp6">(UTC +6) Astana, Colombo, Dhakar</string> + <string name="utcp7">(UTC +7) Bangkok, Džakarta, Hanoj</string> + <string name="utcp8">(UTC +8) Peking, Hong Kong, Singapur</string> + <string name="utcp9">(UTC +9) Jakutsk, Tokyo, Soul</string> + <string name="utcp10">(UTC +10) Vladivostok, Sydney, Guam</string> + <string name="utcp11">(UTC +11) Magadan, Šalamounovy ostrovy</string> + <string name="utcp12">(UTC +12) Wellington, Fidži, Kamčatka</string> + <string name="sel_tz_offset">Zvolte odchylku (obyčejně 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Žádná</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Použít letní čas (DST)</string> + <string name="curr_tz">Aktuální časové pásmo: %tw_time_zone%</string> + <string name="curr_tz_s">Aktuální časové pásmo:</string> + <string name="set_tz_btn">Nastav časové pásmo</string> + <string name="settings_screen_hdr">Obrazovka</string> + <string name="settings_screen_timeout_hdr">Vypnutí obrazovky</string> + <string name="enable_timeout_chk">Povolit vypnutí obrazovky</string> + <string name="screen_to_slider">Vypnutí obrazovky v sekundách:</string> + <string name="screen_to_slider_s">Vypnutí obrazovky v sekundách (0=zakázané): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Nastavení vypnutí obrazovky nedostupné</string> + <string name="screen_bright_slider">Jas: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Nastavení jasu nedostupné</string> + <string name="vibration_hdr">Vibrovat</string> + <string name="button_vibration_hdr">Vibrovat při stláčení</string> + <string name="kb_vibration_hdr">Vibrovat při psaní</string> + <string name="act_vibration_hdr">Vibrovat při akci</string> + <string name="button_vibration">Vibrovat při stláčení:</string> + <string name="kb_vibration">Vibrovat při psaní:</string> + <string name="act_vibration">Vibrovat při akci:</string> + <string name="select_language">Výběr jazyka:</string> + <string name="sel_lang_btn">Výběr jazyka</string> + <string name="set_language_btn">Nastavit jazyk</string> + <string name="advanced_hdr">Rozšířené</string> + <string name="copy_log_confirm">Kopírovat log na SD kartu?</string> + <string name="copying_log">Kopírování logu na SD kartu...</string> + <string name="copy_log_complete">Kopírování logu dokončeno</string> + <string name="part_sd_btn">Rozdělit SD kartu</string> + <string name="part_sd_s_btn">SD karta</string> + <string name="file_manager_btn">Souborový manažer</string> + <string name="language_hdr">Jazyk</string> + <string name="terminal_btn">Terminál</string> + <string name="reload_theme_btn">Načítat téma</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Vložit TWRP</string> + <string name="inject_twrp_confirm">Znova vložit TWRP?</string> + <string name="injecting_twrp">Znova vkladám TWRP...</string> + <string name="inject_twrp_complete">Vložení TWRP dokončeno</string> + <string name="swipe_to_confirm">Potáhnout pro potvrzení</string> + <string name="part_sd_hdr">Rozdělit SD kartu</string> + <string name="invalid_partsd_sel">Musíte zvolit odstranitelné zařízení</string> + <string name="part_sd_lose">Přijdete o všechny soubory na vložené SD kartě!</string> + <string name="part_sd_undo">Toto je nevratná akce!</string> + <string name="part_sd_ext_sz">Velikost EXT:</string> + <string name="part_sd_swap_sz">Velikost Swap:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Souborový systém:</string> + <string name="swipe_part_sd">Potáhnutím rozdělit</string> + <string name="swipe_part_sd_s">Rozdělení</string> + <string name="partitioning_sd">Dělím SD kartu...</string> + <string name="partitioning_sd2">Toto potrvá několik minut.</string> + <string name="part_sd_complete">Rozdělení kompletní</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Onbovit původní boot</string> + <string name="dumlock_restore_confirm">Obnovit původní obraz boot?</string> + <string name="dumlock_restoring">Obnovování původního bootu...</string> + <string name="dumlock_restore_complete">Obnova původního bootu dokončená</string> + <string name="dumlock_reflash_btn">Přepsání recovery</string> + <string name="dumlock_reflash_confirm">Přepsat recovery při startu?</string> + <string name="dumlock_reflashing">Přepisování recovery při startu...</string> + <string name="dumlock_reflash_complete">Přepsání recovery při startu dokončeno</string> + <string name="dumlock_install_btn">Instalovat HTC Dumlock</string> + <string name="dumlock_install_confirm">Instalovat soubory HTC Dumlock do ROM?</string> + <string name="dumlock_installing">Instalace HTC Dumlock...</string> + <string name="dumlock_install_complete">Instalace HTC Dumlock dokončená</string> + <string name="swipe_to_unlock">Potáhnutím odemknout</string> + <string name="swipe_unlock"> Odemknout</string> + <string name="fm_hdr">Souborový manažer</string> + <string name="fm_sel_file">Vyberte soubor nebo adresář</string> + <string name="fm_type_folder">Adresář</string> + <string name="fm_type_file">Soubor</string> + <string name="fm_choose_act">Zvolte akci</string> + <string name="fm_selected">Zvolené %tw_fm_type%:</string> + <string name="fm_copy_btn">Kopíruj</string> + <string name="fm_copy_file_btn">Kopírovat soubor</string> + <string name="fm_copy_folder_btn">Kopírovat adresář</string> + <string name="fm_copying">Kopírování</string> + <string name="fm_move_btn">Přesunout</string> + <string name="fm_moving">Přesouvání</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Vymazat</string> + <string name="fm_deleting">Vymazávání</string> + <string name="fm_rename_btn">Přejmenovat</string> + <string name="fm_rename_file_btn">Přejmenovat soubor</string> + <string name="fm_rename_folder_btn">Přejmenovat adresář</string> + <string name="fm_renaming">Přejmenovávání</string> + <string name="fm_sel_dest">Vyberte cílový adresář</string> + <string name="fm_sel_curr_folder">Vyberte současný adresář</string> + <string name="fm_rename_hdr">Přejmenovat</string> + <string name="fm_set_perms_hdr">Nastavit práva</string> + <string name="fm_perms">Práva:</string> + <string name="fm_complete">Operace na souboru dokončená</string> + <string name="decrypt_data_hdr">Dešifrovat data</string> + <string name="decrypt_data_enter_pass">Zadejte heslo.</string> + <string name="decrypt_data_enter_pattern">Zadejte vzor.</string> + <string name="decrypt_data_trying">Pokus o dešifrování</string> + <string name="term_hdr">Příkaz terminálu</string> + <string name="term_s_hdr">Terminál</string> + <string name="term_kill_btn">ZABÍT</string> + <string name="term_sel_folder_hdr">Navigovat do počátečního adresáře</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Vymazat dalvik cache</string> + <string name="sideload_wipe_cache_chk">Vymazat cache</string> + <string name="swipe_to_sideload">Potáhnout pro spuštění sideload</string> + <string name="swipe_sideload"> Start</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Použití: adb sideload název.zip</string> + <string name="sideload_complete">ADB Sideload dokončený</string> + <string name="reboot_hdr">Restart</string> + <string name="su_hdr">Kontrola SuperSU</string> + <string name="su_note1">Vaše zařízení se netváří jako rootnuté.</string> + <string name="su_note2">Instalovat SuperSU nyní?</string> + <string name="su_note3">Toto rootne vaše zařízení.</string> + <string name="su_cancel">Neinstalovat</string> + <string name="swipe_su_to_install">Potáhnutím nainstalovat</string> + <string name="swipe_su_install"> Instalovat</string> + <string name="su_installing">Instalace SuperSU</string> + <string name="sel_storage_list">Vyberte úložiště</string> + <string name="ok_btn">OK</string> + <string name="no_kernel_selinux">Kernel nemá podporu pro čtení obsahu SELinux.</string> + <string name="full_selinux">Plná podpora SELinux.</string> + <string name="no_selinux">Bez podpory SELinux (chybí libselinux).</string> + <string name="mtp_enabled">MTP povolené</string> + <string name="mtp_crash">MTP selhalo, MTP nebude spuštěné při startu.</string> + <string name="decrypt_success">Úspešně dešifrované s přednastaveným heslem.</string> + <string name="unable_to_decrypt">Nelze dešifrovat s přednastaveným heslem. Možná budete muset naformátovat Data.</string> + <string name="generating_md51">Generuje se MD5</string> + <string name="generating_md52"> *Generuje se Md5...</string> + <string name="md5_created"> *MD5 vygenerované.</string> + <string name="md5_error"> * chyba MD5!</string> + <string name="md5_compute_error"> * chyba při výpočtu MD5.</string> + <string name="current_date">(Aktuální datum)</string> + <string name="auto_generate">(Generovat automaticky)</string> + <string name="unable_to_locate_partition">Nelze najít oddíl \'{1}\' pro výpočet zálohy.</string> + <string name="no_partition_selected">Žádné oddíly vybrané na zálohování.</string> + <string name="total_partitions_backup"> * Počet oddílů označených na zálohování: {1}</string> + <string name="total_backup_size"> * Konečná velikost zálohy: {1}MB</string> + <string name="available_space"> * Zůstatek místa: {1}MB</string> + <string name="unable_locate_storage">Nelze najít úložiště.</string> + <string name="no_space">Nedostatek místa na úložišti.</string> + <string name="backup_started">[ZÁLOHOVÁNÍ ZAČALO]</string> + <string name="backup_folder"> * Adresář zálohy: {1}</string> + <string name="fail_backup_folder">Nelze vytvořit adresář zálohy.</string> + <string name="avg_backup_fs">Průměrná míra zálohování souborových systémů: {1} MB/sek</string> + <string name="avg_backup_img">Průměrná míra zálohování disků: {1} MB/sek</string> + <string name="total_backed_size">[{1} MB ZÁLOH DOHROMADY]</string> + <string name="backup_completed">[ZÁLOHA DOKONČENÁ ZA {1} SEKUND]</string> + <string name="restore_started">[ZAČÁTEK OBNOVY]</string> + <string name="restore_folder">Obnovit adresář: \'{1}\'</string> + <string name="verifying_md5">Kontrolování MD5</string> + <string name="skip_md5">Vynechání kontroly MD5 na základě uživatelského nastavení.</string> + <string name="calc_restore">Počítání detailů obnovy...</string> + <string name="restore_read_only">Nelze obnovit {1} -- připojené jen na čtení.</string> + <string name="restore_unable_locate">Nelze najít oddíl \'{1}\' pro obnovu.</string> + <string name="no_part_restore">Žádné oddíly nebyly vybrané pro obnovu.</string> + <string name="restore_part_count">Obnova {1} oddílů...</string> + <string name="total_restore_size">Velikost obnovy je spolu {1}MB</string> + <string name="updating_system_details">Obnovování detailů systému</string> + <string name="restore_completed">[OBNOVA DOKONČENÁ ZA {1} SEKUND]</string> + <string name="error_opening_strerr">Chyba při otvírání: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Nelze najít oddíl podle názvu zálohy: \'{1}\'</string> + <string name="unable_find_part_path">Nelze najít oddíl na cestě \'{1}\'</string> + <string name="update_part_details">Obnova detailů oddílů...</string> + <string name="update_part_details_done">...hotovo</string> + <string name="wiping_dalvik">Vymazávání adresářů dalvik cache...</string> + <string name="cleaned">Vyčištěné: {1}...</string> + <string name="dalvik_done">-- Vyčištění adresáře Dalvik cache bylo dokončeno!</string> + <string name="no_andsec">Žádné zabezpečené android oddíly nebyly nalezeny.</string> + <string name="unable_to_locate">{1} nelze najít.</string> + <string name="wiping_datamedia">Vymazávání interního úložiště -- /data/media...</string> + <string name="unable_to_mount">{1} nelze připojit</string> + <string name="unable_to_mount_internal">Nelze připojit interní úložiště</string> + <string name="unable_to_mount_storage">Nelze připojit úložiště</string> + <string name="fail_decrypt">Nelze dešifrovat data.</string> + <string name="no_crypto_support">Tato verze byla zkompilovaná bez podpory šifrování.</string> + <string name="decrypt_success_dev">Data byly úspěšne dešifrované, nový block device: \'{1}\'</string> + <string name="done">Hotovo.</string> + <string name="start_partition_sd">Dělení SD karty...</string> + <string name="partition_sd_locate">Nelze najít zařízení na rozdělení.</string> + <string name="ext_swap_size">Velikost EXT + Swap je větší jako velikost SD-karty.</string> + <string name="remove_part_table">Vymazávání tabulky rozdělení...</string> + <string name="unable_rm_part">Nelze vymazat tabulku rozdělení.</string> + <string name="create_part">Vytváření oddílu {1}...</string> + <string name="unable_to_create_part">oddíl {1} nelze vytvořit.</string> + <string name="format_sdext_as">Formátování sd-ext jako {1}...</string> + <string name="part_complete">Rozdělení dokončeno.</string> + <string name="unable_to_open">Nelze otevřít \'{1}\'.</string> + <string name="mtp_already_enabled">MTP je už povolené</string> + <string name="mtp_fail">Nelze povolit MTP</string> + <string name="no_mtp">Podpora MTP není zahrnutá</string> + <string name="image_flash_start">[ZÁPIS OBRAZU SPUŠTĚNÝ]</string> + <string name="img_to_flash">Obraz na zápis: \'{1}\'</string> + <string name="flash_unable_locate">Nelze najít oddíl \'{1}\' pro zápis.</string> + <string name="no_part_flash">Na zápis nebyly zvolené žádné oddíly.</string> + <string name="too_many_flash">Na zápis je zvolených příliš mnoho oddílů.</string> + <string name="invalid_flash">Zvolený oddíl je nesprávný pro zápis.</string> + <string name="flash_done">[ZÁPIS OBRAZU DOKONČENÝ]</string> + <string name="wiping">Mazání {1}</string> + <string name="repair_not_exist">{1} neexistuje! Oprava nemožná!</string> + <string name="repairing_using">Oprava {1} pomocí {2}...</string> + <string name="unable_repair">Nelze opravit {1}.</string> + <string name="mount_data_footer">Nelze připojit /data a nelze najít parametry šifrování.</string> + <string name="create_folder_strerr">Adresář \'{1}\' nelze vytvořit ({2}).</string> + <string name="fail_mount">Nelze připojit \'{1}\' ({2})</string> + <string name="fail_unmount">Nelze odpojit \'{1}\' ({2})</string> + <string name="cannot_resize">Nelze natáhnout {1}.</string> + <string name="repair_resize">Opravování {1} před natáhnutím.</string> + <string name="unable_resize">Nelze natáhnout {1}.</string> + <string name="no_md5_found">Soubor MD5 se nenašel pro \'{1}\'. Prosím zvolte Vypnout kontrolu MD5 během obnovy.</string> + <string name="md5_fail_match">MD5 neodpovídá souboru \'{1}\'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Nelze dešifrovat soubor tar \'{1}\'</string> + <string name="format_data_msg">Měli by jste restartovat recovery aby jste mohli znova používat /data.</string> + <string name="format_data_err">Nelze formátovat pro zrušení šifrování.</string> + <string name="formatting_using">Formátování {1} použitím {2}...</string> + <string name="unable_to_wipe">Nelze vymazat {1}.</string> + <string name="cannot_wipe">Oddíl {1} se nedá vymazat.</string> + <string name="remove_all">Vymazání všech souborů v \'{1}\'</string> + <string name="wiping_data">Vymazaní Data bez vymazání /data/media...</string> + <string name="backing_up">Zálohování {1}...</string> + <string name="backing">Zálohování</string> + <string name="backup_size">Velikost zálohy pro \'{1}\' je 0 bajtů.</string> + <string name="datamedia_fs_restore">UPOZORNĚNÍ: Tato záloha /data byla vytvořená pomocí systému souborů {1}! Záloha nebude bootovat pokud se nezmění nazpět na {1}.</string> + <string name="restoring">Obnovování {1}...</string> + <string name="restoring_hdr">Obnovování</string> + <string name="recreate_folder_err">Nelze vytvořit adresář {1}.</string> + <string name="img_size_err">Velikost obrazu je větší než cílové zařízení</string> + <string name="flashing">Zapisování {1}...</string> + <string name="backup_folder_set">Adresář záloh nastavený na: \'{1}\'</string> + <string name="locate_backup_err">Zálohu \'{1}\' nelze najít</string> + <string name="set_restore_opt">Nastavení možností obnovy: \'{1}\':</string> + <string name="md5_check_skip">Vynechání kontroly MD5 zapnuté</string> + <string name="ors_encrypt_restore_err">Nelze použít OpenRecoveryScript na obnovu zašifrované zálohy.</string> + <string name="mounting">Připojení</string> + <string name="unmounting">Odpojení</string> + <string name="mounted">\'{1}\' připojený</string> + <string name="unmounted">\'{1}\' odpojený</string> + <string name="setting">Nastavení \'{1}\' na \'{2}\'</string> + <string name="setting_empty">Nastavení \'{1}\' na prázdné</string> + <string name="making_dir1">Vytváření adresáře</string> + <string name="making_dir2">Vytváření adresáře: \'{1}\'</string> + <string name="running_command">Spouštění příkazu</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Spouštění funkce ADB sideload...</string> + <string name="need_new_adb">pro použití sideload na toto zařízení potřebujete ADB 1.0.32 nebo novší.</string> + <string name="no_pwd">Heslo nebylo poskytnuté.</string> + <string name="done_ors">Vykonávání skriptu dokončeno</string> + <string name="injecttwrp">Vkládání TWRP do obrazu boot...</string> + <string name="zip_err">Chyba při instalaci zip souboru \'{1}\'</string> + <string name="installing_zip">Instalace zip souboru \'{1}\'</string> + <string name="select_backup_opt">Nastavení možností zálohy:</string> + <string name="comprossion_on">Komprese zapnutá</string> + <string name="md5_off">Generovaní MD5 vypnuté</string> + <string name="backup_fail">Zálohování selhalo</string> + <string name="backup_clean">Zálohování selhalo. Čistění adresáře záloh.</string> + <string name="running_recovery_commands">Spouštění příkazů recovery</string> + <string name="recovery_commands_complete">Příkazy recovery dokončeno</string> + <string name="running_ors">Spouštění OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript dokončený</string> + <string name="no_updater_binary">Nelze nájít \'{1}\' v souboru zip.</string> + <string name="check_for_md5">Kontrola MD5 souboru...</string> + <string name="fail_sysmap">Nelze namapovat soubor \'{1}\'</string> + <string name="verify_zip_sig">Ověřování podpisu zip souboru...</string> + <string name="verify_zip_fail">Ověřování podpisu zip souboru selhalo!</string> + <string name="verify_zip_done">Podpis souboru zip úspešně ověřený.</string> + <string name="zip_corrupt">Soubor zip je poškozený!</string> + <string name="no_md5">Vynechání kontroly MD5: soubor s MD5 nenalezen</string> + <string name="md5_fail">MD5 nesedí</string> + <string name="md5_match">MD5 sedí</string> + <string name="pid_signal">Proces {1} skončil se signálem: {2}</string> + <string name="pid_error">Proces {1} skončil s CHYBOU: {2}</string> + <string name="install_dumlock">Instalování HTC Dumlock do systému...</string> + <string name="dumlock_restore">Obnovování původního bootu...</string> + <string name="dumlock_reflash">Zapisování recovery do bootu...</string> + <string name="run_script">Běh skriptu {1}...</string> + <string name="rename_stock">Přejmenovaný tuctový recovery soubor v /systém pro zabránění přepsání TWRP tuctovou ROM.</string> + <string name="split_backup">Rozdělení zálohy do více archívů...</string> + <string name="backup_error">Chyba při vytváření zálohy.</string> + <string name="restore_error">Chyba během procesu obnovy.</string> + <string name="split_thread">Rozdělení ID vlákna {1} do archívu {2}</string> + <string name="file_progress">%llu z %llu souborů, %i%%</string> + <string name="size_progress">%lluMB z %lluMB, %i%%</string> + <string name="decrypt_cmd">Pokus o dešifrování datového oddílu přez příkazový řádek.</string> + <string name="base_pkg_err">Nepodařilo se načíst základní balíčky.</string> + <string name="simulating">Simulování akcí...</string> + <string name="backup_cancel">Zálohování přerušeno</string> + <string name="config_twrp">Konfigurování TWRP...</string> + <string name="config_twrp_err">Nelze konfigurovat TWRP s tímto jádrem.</string> + <string name="copy_log">Recovery log zkopírovaný do {1}.</string> + <string name="max_queue">Dosažený maximální počet zip v seznamu!</string> + <string name="min_queue">Dosažený minimální počet zip v seznamu!</string> + <string name="screenshot_saved">Snímek obrazovky byl uložen do {1}</string> + <string name="screenshot_err">Nelze udělat snímek obrazovky!</string> + <string name="zip_wipe_cache">Jeden nebo víc zip souborů vyžádalo smazaní cache -- Vymazání cache nyní.</string> + <string name="and_sec_wipe_err">Nelze vymazat android secure</string> + <string name="dalvik_wipe_err">Nelze vymazat dalvik</string> + <string name="auto_gen">(Generovat automaticky)</string> + <string name="curr_date">(Aktuální datum)</string> + <string name="backup_name_len">Název zálohy je příliš dlouhý.</string> + <string name="backup_name_invalid">Název zálohy \'{1}\' obsahuje neplatný znak: \'{1}\'</string> + <string name="no_real_sdcard">Toto zařízení nemá skutečnou SD kartu! Přerušuji!</string> + <string name="cancel_sideload">Ruším ADB sideload...</string> + <string name="change_fs_err">Chyba při změně souborového systému.</string> + <string name="theme_ver_err">Téma vlastní verze nesedí s verzí TWRP. Použije se tuctové téma.</string> + </resources> +</language> diff --git a/gui/theme/common/languages/de.xml b/gui/theme/common/languages/de.xml new file mode 100644 index 000000000..8e8bf4bf3 --- /dev/null +++ b/gui/theme/common/languages/de.xml @@ -0,0 +1,695 @@ +<?xml version="1.0"?> + +<language> + <display>Deutsch</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">System-Image</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor-Image</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data (ohne /data/media)</string> + <string name="sdcard">SD-Karte</string> + <string name="internal">Interner Speicher</string> + <string name="microsd">Micro SD-Karte</string> + <string name="usbotg">USB-OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Eingegliederte Daten-Partition</string> + <string name="adopted_storage">Eingegliederte Storage-Partition</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Akku: %tw_battery%</string> + <string name="sort_by_name">Nach Namen sortieren</string> + <string name="sort_by_date">Nach Datum sortieren</string> + <string name="sort_by_size">Nach Größe sortieren</string> + <string name="sort_by_name_only">Name</string> + <string name="sort_by_date_only">Datum</string> + <string name="sort_by_size_only">Größe</string> + <string name="tab_general">ALLGEMEIN</string> + <string name="tab_options">OPTIONEN</string> + <string name="tab_backup">SICHERUNG</string> + <string name="tab_time_zone">ZEITZONE</string> + <string name="tab_screen">BILDSCHIRM</string> + <string name="tab_vibration">VIBRATION</string> + <string name="tab_language">SPRACHE</string> + + <string name="install_btn">Installieren</string> + <string name="wipe_btn">Löschen</string> + <string name="backup_btn">Sichern</string> + <string name="restore_btn">Wiederherstellen</string> + <string name="mount_btn">Einhängen</string> + <string name="settings_btn">Einstellungen</string> + <string name="advanced_btn">Erweitert</string> + <string name="reboot_btn">Neustart</string> + <string name="files_btn">Dateien</string> + <string name="copy_log_btn">Log kopieren</string> + <string name="select_type_hdr">Typ wählen</string> + <string name="install_zip_hdr">ZIP installieren</string> + <string name="install_zip_btn">ZIP installieren</string> + <string name="install_image_hdr">Image installieren</string> + <string name="install_image_btn">Image installieren</string> + <string name="install_select_file_hdr">Datei auswählen</string> + <string name="file_selector_folders_hdr">Ordner</string> + <string name="select_file_from_storage">Speicher: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Installieren</string> + <string name="select_storage_hdr">Speicher auswählen</string> + <string name="select_storage_btn">Speicher auswählen</string> + <string name="queue_hdr">Einreihen</string> + <string name="zip_queue_count">%tw_zip_queue_count% von 10 Dateien eingereiht</string> + <string name="zip_queue_count_s">File %tw_zip_queue_count% von 10:</string> + <string name="zip_warn1">Dieser Vorgang kann möglicherweise inkompatible</string> + <string name="zip_warn2">Software installieren und das Gerät unbrauchbar machen.</string> + <string name="zip_back_cancel">Zurück-Taste drücken, um den Vorgang abzubrechen.</string> + <string name="zip_back_clear">Zurück-Taste drücken, um Warteschlange zu löschen.</string> + <string name="folder">Ordner:</string> + <string name="file">Datei:</string> + <string name="zip_sig_chk">ZIP-Signaturprüfung</string> + <string name="inject_twrp_chk">TWRP nach der Installation injizieren</string> + <string name="install_reboot_chk">Automatischer Neustart nach Installation</string> + <string name="options_hdr">Einstellungen</string> + <string name="confirm_flash_hdr">Flashvorgang bestätigen</string> + <string name="zip_queue">Warteschlange:</string> + <string name="options">Einstellungen:</string> + <string name="swipe_confirm">Bestätigen</string> + <string name="zip_add_btn">Mehr ZIPs hinzufügen</string> + <string name="zip_clear_btn">ZIP-Stapel löschen</string> + <string name="install_zip_count_hdr">Installiere ZIP %tw_zip_index% von %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Installiere ZIP: %tw_file%</string> + <string name="failed">Fehlgeschlagen</string> + <string name="successful">Erfolgreich</string> + <string name="install_failed">Installation fehlgeschlagen</string> + <string name="install_successful">Installation erfolgreich</string> + <string name="wipe_cache_dalvik_btn">Cache/Dalvik löschen</string> + <string name="reboot_system_btn">System neustarten</string> + <string name="install_sel_target">Ziel-Partition auswählen</string> + <string name="flash_image_select">Partition wählen, um das Image zu einzuspielen:</string> + <string name="target_partition">Ziel-Partition:</string> + <string name="flashing_image">Spiele Image ein...</string> + <string name="image_flashed">Image eingespielt</string> + <string name="wipe_cache_dalvik_confirm">Cache & Dalvik löschen?</string> + <string name="wiping_cache_dalvik">Lösche Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Cache & Dalvik gelöscht</string> + <string name="swipe_wipe">Löschen bestätigen</string> + <string name="swipe_wipe_s">Löschen</string> + <string name="no_os1">Kein OS installiert! Sind Sie</string> + <string name="no_osrb">sicher, dass Sie neu starten möchten?</string> + <string name="no_ospo">sicher, dass Sie ausschalten möchten?</string> + <string name="rebooting">Neustart...</string> + <string name="swipe_reboot">Neustart bestätigen</string> + <string name="swipe_reboot_s">Neustart</string> + <string name="reboot_install_app_hdr">TWRP App installieren?</string> + <string name="reboot_install_app1">Soll die offizielle TWRP App installiert werden?</string> + <string name="reboot_install_app2">Die App kann nach neuen TWRP-Versionen suchen.</string> + <string name="reboot_install_app_prompt_install">Fragen, ob TWRP App installiert werden soll</string> + <string name="reboot_install_app_system">Als System-App installieren</string> + <string name="reboot_installing_app">Installiere App...</string> + <string name="swipe_to_install_app">TWRP App installieren</string> + <string name="swipe_flash">Installation bestätigen</string> + <string name="confirm_action">Aktion bestätigen</string> + <string name="back_cancel">Zurück-Taste drücken, um den Vorgang abzubrechen.</string> + <string name="cancel_btn">Abbruch</string> + <string name="wipe_hdr">Löschen</string> + <string name="factory_reset_hdr">Werkseinstellungen herstellen</string> + <string name="factory_reset_btn">Werkseinstellungen</string> + <string name="factory_reset1">Löscht Daten, Cache und Dalvik</string> + <string name="factory_reset2">(ohne internen Speicher)</string> + <string name="factory_reset3">Diese Lösch-Aktion ist in der Regel</string> + <string name="factory_reset4">die einzige die benötigt wird.</string> + <string name="factory_resetting">Werkseinstellungen herstellen...</string> + <string name="advanced_wipe_hdr">Erweitertes Löschen</string> + <string name="advanced_wipe_btn">Erweitertes Löschen</string> + <string name="wipe_enc_confirm">Verschlüsselung der Daten-Partition enfernen?</string> + <string name="formatting_data">Data wird formatiert...</string> + <string name="swipe_format_data">Daten-Partition formatieren</string> + <string name="swipe_format_data_s">Formatieren </string> + <string name="factory_reset_complete">Werkseinstellungen wiederhergestellt</string> + <string name="sel_part_hdr">Partitionen auswählen</string> + <string name="wipe_sel_confirm">Ausgewählte Partition(en) löschen?</string> + <string name="wiping_part">Lösche Partition(en)...</string> + <string name="wipe_complete">Löschen abgeschlossen </string> + <string name="sel_part_wipe">Partitionen zum Löschen auswählen:</string> + <string name="invalid_part_sel">Ungültige Partitionsauswahl</string> + <string name="format_data_hdr">Daten-Partition formatieren</string> + <string name="format_data_btn">Daten formatieren</string> + <string name="format_data_ptr1">Formatieren der Daten-Partition löscht alle Apps,</string> + <string name="format_data_ptr2">Sicherungen, Bilder, Videos, sowie Medien und</string> + <string name="format_data_ptr3">entfernt die Verschlüsselung des internen Speichers.</string> + <string name="format_data_adopted">Betrifft auch die eingegliederte Storage-Partition.</string> + <string name="format_data_lcp1">Formatieren der Daten-Partition löscht alle Apps, Sicherungen, Bilder, Videos, sowie Medien und</string> + <string name="format_data_lcp2">entfernt die Verschlüsselung des internen Speichers.</string> + <string name="format_data_wtc1">Formatieren der Daten-Partition löscht alle Apps,</string> + <string name="format_data_wtc2">Sicherungen und Medien. Endgültig!</string> + <string name="format_data_undo">Dies kann nicht rückgängig gemacht werden.</string> + <string name="format_data_complete">Formatierung der Daten-Partition abgeschlossen</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">"yes" eingeben um fortzufahren. Zurück drücken um abzubrechen.</string> + <string name="part_opt_hdr">Optionen für %tw_partition_name%-Partition</string> + <string name="sel_act_hdr">Aktion auswählen</string> + <string name="file_sys_opt">Dateisystem-Optionen</string> + <string name="partition">Partition: %tw_partition_name%</string> + <string name="part_mount_point">Einhängepunkt: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Dateisystem: %tw_partition_file_system%</string> + <string name="part_present_yes">Vorhanden: Ja</string> + <string name="part_present_no">Vorhanden: Nein</string> + <string name="part_removable_yes">Wechselbar: Ja</string> + <string name="part_removable_no">Wechselbar: Nein</string> + <string name="part_size">Größe: %tw_partition_size%MB</string> + <string name="part_used">Verwendet: %tw_partition_used%MB</string> + <string name="part_free">Frei: %tw_partition_free%MB</string> + <string name="part_backup_size">Backup-Größe: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Größe ändern</string> + <string name="resize_btn_s">Größe ändern</string> + <string name="resize_confirm">Größe von %tw_partition_name% ändern?</string> + <string name="resizing">Ändere Größe...</string> + <string name="resize_complete">Größenänderung abgeschlossen</string> + <string name="swipe_resize">Größenänderung bestätigen</string> + <string name="swipe_resize_s">Größe ändern</string> + <string name="repair_btn">Dateisystem reparieren</string> + <string name="repair_btn_s">Reparatur</string> + <string name="repair_confirm">Repariere %tw_partition_name%?</string> + <string name="repairing">Reparieren...</string> + <string name="repair_complete">Reparatur abgeschlossen</string> + <string name="swipe_repair">Partition reparieren</string> + <string name="swipe_repair_s">Reparieren</string> + <string name="change_fs_btn">Dateisystem ändern</string> + <string name="change_fs_btn_s">Ändern</string> + <string name="change_fs_for_hdr">Dateisystem für %tw_partition_name% ändern</string> + <string name="change_fs_for_hdr_s">Partition: %tw_partition_name% > Dateisystem auswählen</string> + <string name="change_fs_warn1">Einige ROMs oder Kernel unterstützen möglicherweise manche</string> + <string name="change_fs_warn2">Dateisysteme nicht. Überlegt handeln!</string> + <string name="change_fs_confirm">%tw_partition_name% ändern?</string> + <string name="formatting">Formatierung...</string> + <string name="format_complete">Formatieren abgeschlossen</string> + <string name="swipe_change_fs">Dateisystem ändern</string> + <string name="swipe_change_s">Ändern</string> + <string name="back_btn">Zurück</string> + <string name="wipe_enc_btn">Verschlüsselung entfernen</string> + <string name="swipe_factory_reset">Werkseinstellungen herstellen</string> + <string name="repair_change_btn">Dateisystem reparieren oder ändern</string> + <string name="storage_hdr">Speicher: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Sicherung</string> + <string name="backup_confirm_hdr">Sicherung bestätigen</string> + <string name="encryption_tab">VERSCHLÜSSELUNG</string> + <string name="encryption">Verschlüsselung:</string> + <string name="name">Name:</string> + <string name="sel_part_backup">Zu sichernde Partitionen auswählen:</string> + <string name="storage">Speicherort:</string> + <string name="enc_disabled">deaktiviert - Passwort festlegen um zu aktivieren</string> + <string name="enc_enabled">aktiviert</string> + <string name="enable_backup_comp_chk">Komprimierung aktivieren</string> + <string name="skip_md5_backup_chk">MD5-Erstellung für die Sicherung überspringen</string> + <string name="disable_backup_space_chk">Prüfung auf freien Speicher deaktivieren</string> + <string name="current_boot_slot">Aktiver Slot: %tw_active_slot%</string> + <string name="boot_slot_a">Slot A</string> + <string name="boot_slot_b">Slot B</string> + <string name="changing_boot_slot">Wechsle Boot Slot</string> + <string name="changing_boot_slot_complete">Boot Slot gewechselt</string> + <string name="refresh_sizes_btn">Größen aktualisieren</string> + <string name="swipe_backup">Sicherung erstellen</string> + <string name="append_date_btn">Datum anhängen</string> + <string name="backup_name_exists">Eine Sicherung mit diesem Namen existiert bereits!</string> + <string name="encrypt_backup">Sicherung verschlüsseln?</string> + <string name="enter_pass">Passwort eingeben:</string> + <string name="enter_pass2">Passwort erneut eingeben:</string> + <string name="pass_not_match">Die Passwörter stimmen nicht überein!</string> + <string name="partitions">Partitionen:</string> + <string name="disabled">Deaktiviert</string> + <string name="enabled">Aktiviert</string> + <string name="backup_name_hdr">Sicherung benennen</string> + <string name="progress">Fortschritt:</string> + <string name="backup_complete">Sicherung abgeschlossen</string> + <string name="restore_hdr">Wiederherstellen</string> + <string name="sel_backup_hdr">Sicherung auswählen</string> + <string name="restore_sel_store_hdr">Speicher: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Wiederherzustellende Sicherung:</string> + <string name="restore_enc_backup_hdr">Verschlüsselte Sicherung</string> + <string name="restore_dec_fail">Passwort falsch, bitte erneut versuchen!</string> + <string name="del_backup_btn">Sicherung löschen</string> + <string name="del_backup_confirm">Sicherung löschen?</string> + <string name="del_backup_confirm2">Dies kann nicht rückgängig gemacht werden!</string> + <string name="deleting_backup">Sicherung wird gelöscht...</string> + <string name="backup_deleted">Sicherung gelöscht</string> + <string name="swipe_delete">Löschen bestätigen</string> + <string name="swipe_delete_s">Löschen</string> + <string name="restore_try_decrypt">Verschlüsselte Sicherung - Versuche Entschlüsselung</string> + <string name="restore_try_decrypt_s">Versuche Entschlüsselung</string> + <string name="restore_backup_date">Sicherung am %tw_restore_file_date% erstellt</string> + <string name="restore_sel_part">Wiederherzustellende Partitionen:</string> + <string name="restore_enable_md5_chk">MD5-Prüfung von Sicherungs-Dateien aktivieren</string> + <string name="restore_complete">Wiederherstellen abgeschlossen</string> + <string name="swipe_restore">Sicherung wiederherstellen</string> + <string name="swipe_restore_s">Wiederherstellen</string> + <string name="rename_backup_hdr">Sicherung umbenennen</string> + <string name="rename_backup_confirm">Sicherung umbenennen?</string> + <string name="rename_backup_confirm2">Dies kann nicht rückgängig gemacht werden!</string> + <string name="renaming_backup">Sicherung wird umbenannt...</string> + <string name="rename_backup_complete">Sicherung umbenannt</string> + <string name="swipe_to_rename">Name ändern</string> + <string name="swipe_rename">Umbenennen</string> + <string name="confirm_hdr">Bestätigen</string> + <string name="mount_hdr">Einhängen</string> + <string name="mount_sel_part">Einzuhängende Partitionen:</string> + <string name="mount_sys_ro_chk">System-Partition schreibgeschützt einhängen</string> + <string name="mount_sys_ro_s_chk">System nur lesend</string> + <string name="decrypt_data_btn">Daten-Partition entschlüsseln</string> + <string name="disable_mtp_btn">MTP deaktivieren</string> + <string name="enable_mtp_btn">MTP aktivieren</string> + <string name="mount_usb_storage_btn">USB-Speicher einhängen</string> + <string name="usb_storage_hdr">USB-Speicher</string> + <string name="usb_stor_mnt1">USB-Speicher eingehängt</string> + <string name="usb_stor_mnt2">Funktion "USB-Speicher auswerfen" auf Computer</string> + <string name="usb_stor_mnt3">ausführen, bevor die Verbindung getrennt wird!</string> + <string name="unmount_btn">Auswerfen</string> + <string name="rb_system_btn">System</string> + <string name="rb_poweroff_btn">Ausschalten</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">Ausschalten...</string> + <string name="swipe_power_off">Gerät ausschalten</string> + <string name="swipe_power_off_s">Ausschalten</string> + <string name="sys_ro_hdr">Unveränderte Systempartition</string> + <string name="sys_ro_keep">System-Partition schreibgeschützt einhängen?</string> + <string name="sys_rop1">TWRP kann die System Partition unverändert lassen,</string> + <string name="sys_rop2">um das Aufspielen offizieller Updates zu erleichtern.</string> + <string name="sys_rop3">Jedoch kann dann das Hersteller-ROM TWRP wieder</string> + <string name="sys_rop4">überschreiben und TWRP kann keinen Root-Zugriff einrichten.</string> + <string name="sys_rop5">Das Installieren von ZIPs oder ADB-Vorgänge könnten jedoch</string> + <string name="sys_rop6">trotzdem die System-Partition verändern.</string> + <string name="sys_rol1">TWRP kann die System-Partition unverändert lassen, um das Aufspielen offizieller Updates zu erleichtern.</string> + <string name="sys_rol2">Jedoch kann dann das Hersteller-ROM TWRP wieder überschreiben und TWRP kann keinen Root-Zugriff einrichten.</string> + <string name="sys_rol3">Das Installieren von ZIPs oder ADB-Vorgänge könnten jedoch trotzdem die System-Partition verändern.</string> + <string name="sys_ro_never_show_chk">Diesen Bildschirm nicht mehr anzeigen</string> + <string name="sys_ro_keep_ro_btn">Nur-Lesend belassen</string> + <string name="swipe_allow_mod">Veränderungen zulassen</string> + <string name="swipe_allow_mod_s">Zulassen</string> + <string name="settings_hdr">Einstellungen</string> + <string name="settings_gen_hdr">Allgemein</string> + <string name="settings_gen_s_hdr">Allgemein</string> + <string name="settings_gen_btn">Allgemein</string> + <string name="use_rmrf_chk">rekursiv löschen anstatt formatieren</string> + <string name="use24clock_chk">24-Stunden-Format</string> + <string name="rev_navbar_chk">Navigationsleiste umkehren</string> + <string name="simact_chk">Benutzeraktionen für Design-Test simulieren</string> + <string name="simfail_chk">Fehlschlag von Benutzeraktionen simulieren</string> + <string name="ctr_navbar_rdo">Navigationsleisten-Schaltflächen zentrieren</string> + <string name="lft_navbar_rdo">Navigationsleisten-Schaltflächen linksbündig</string> + <string name="rht_navbar_rdo">Navigationsleisten-Schaltflächen rechtsbündig</string> + <string name="restore_defaults_btn">Standard herstellen</string> + <string name="settings_tz_btn">Zeitzone</string> + <string name="settings_screen_btn">Bildschirm</string> + <string name="settings_screen_bright_btn">Helligkeit</string> + <string name="settings_vibration_btn">Vibration</string> + <string name="settings_language_btn">Sprache</string> + <string name="time_zone_hdr">Zeitzone</string> + <string name="sel_tz_list">Zeitzone auswählen:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Midwayinseln</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time (USA)</string> + <string name="utcm6">(UTC -6) Central Time (USA)</string> + <string name="utcm5">(UTC -5) Eastern Time (USA)</string> + <string name="utcm4">(UTC -4) Atlantic Time (USA)</string> + <string name="utcm3">(UTC -3) Brasilien, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mittelatlantik</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lissabon</string> + <string name="utcp1">(UTC +1) Berlin, Brüssel, Paris</string> + <string name="utcp2">(UTC +2) Athen, Istanbul, Südafrika</string> + <string name="utcp3">(UTC +3) Moskau, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tiflis, Muscat</string> + <string name="utcp5">(UTC +5) Ekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Peking, Singapur, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokio, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Ostaustralien, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Salomonen</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fidschi</string> + <string name="sel_tz_offset">Zeitverschiebung: %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Keine</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Sommerzeit verwenden</string> + <string name="curr_tz">Aktuelle Zeitzone: %tw_time_zone%</string> + <string name="curr_tz_s">Aktuelle Zeitzone:</string> + <string name="set_tz_btn">Zeitzone einstellen</string> + <string name="settings_screen_hdr">Bildschirm</string> + <string name="settings_screen_timeout_hdr">Bildschirm-Timeout</string> + <string name="enable_timeout_chk">Bildschirm automatisch ausschalten</string> + <string name="screen_to_slider">Zeit bis zum Ausschalten (in Sekunden):</string> + <string name="screen_to_slider_s">Ausschalten nach %tw_screen_timeout_secs% Sekunden (0 = deaktiviert): </string> + <string name="screen_to_na">Bildschirm-Abschaltung nicht verfügbar</string> + <string name="screen_bright_slider">Helligkeit: %tw_brightness_pct% %</string> + <string name="screen_bright_na">Helligkeit nicht verfügbar</string> + <string name="vibration_hdr">Vibration</string> + <string name="button_vibration_hdr">Tasten-Vibration</string> + <string name="kb_vibration_hdr">Tastatur-Vibration</string> + <string name="act_vibration_hdr">Aktion-Vibration</string> + <string name="button_vibration">Tasten-Vibration:</string> + <string name="kb_vibration">Tastatur-Vibration:</string> + <string name="act_vibration">Aktion-Vibration:</string> + <string name="select_language">Sprache auswählen:</string> + <string name="sel_lang_btn">Sprache auswählen</string> + <string name="set_language_btn">Sprache einstellen</string> + <string name="advanced_hdr">Erweitert</string> + <string name="copy_log_confirm">Log auf SD-Karte kopieren?</string> + <string name="copying_log">Kopiere Log auf SD-Karte...</string> + <string name="copy_log_complete">Log erfolgreich kopiert</string> + <string name="fix_context_btn">SELinux Kontexte</string> + <string name="part_sd_btn">SD-Karte partitionieren</string> + <string name="part_sd_s_btn">SD-Karte</string> + <string name="file_manager_btn">Dateimanager</string> + <string name="language_hdr">Sprache</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Theme neu laden</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP injizieren</string> + <string name="inject_twrp_confirm">TWRP wieder injizieren?</string> + <string name="injecting_twrp">TWRP wird wieder injiziert...</string> + <string name="inject_twrp_complete">TWRP-Injektion abgeschlossen</string> + <string name="swipe_to_confirm">Aktion bestätigen</string> + <string name="part_sd_hdr">SD-Karte partitionieren</string> + <string name="invalid_partsd_sel">Es muss ein Wechseldatenträger ausgewählt sein!</string> + <string name="part_sd_lose">Es werden alle Dateien von der SD-Karte gelöscht!</string> + <string name="part_sd_undo">Diese Aktion kann nicht rückgängig gemacht werden!</string> + <string name="part_sd_ext_sz">EXT Grösse:</string> + <string name="part_sd_swap_sz">Grösse der Auslagerungsdatei:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Dateisystem:</string> + <string name="swipe_part_sd">SD-Karte partitionieren</string> + <string name="swipe_part_sd_s">Partitionieren</string> + <string name="partitioning_sd">Partitioniere SD-Karte...</string> + <string name="partitioning_sd2">Dies wird einige Minuten dauern.</string> + <string name="part_sd_complete">Partitionierung abgeschlossen</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Orginale Boot-Partition wiederherstellen</string> + <string name="dumlock_restore_confirm">Orginales Image der Boot-Partition wiederherstellen?</string> + <string name="dumlock_restoring">Stelle originale Boot-Partition wieder her...</string> + <string name="dumlock_restore_complete">Wiederherstellen der orginalen Boot-Partition abgeschlossen</string> + <string name="dumlock_reflash_btn">Recovery erneut einspielen</string> + <string name="dumlock_reflash_confirm">Recovery in Boot-Partition einspielen?</string> + <string name="dumlock_reflashing">Spiele Recovery in Boot-Partition ein...</string> + <string name="dumlock_reflash_complete">Einspielen der Recovery in die Boot-Partition abgeschlossen</string> + <string name="dumlock_install_btn">HTC Dumlock installieren</string> + <string name="dumlock_install_confirm">HTC Dumlock Dateien ins ROM installieren?</string> + <string name="dumlock_installing">Installiere HTC Dumlock...</string> + <string name="dumlock_install_complete">HTC Dumlock Installation abgeschlossen</string> + <string name="swipe_to_unlock">Bildschirm entsperren</string> + <string name="swipe_unlock">Entsperren</string> + <string name="fm_hdr">Dateimanager</string> + <string name="fm_sel_file">Datei oder Ordner auswählen</string> + <string name="fm_type_folder">Ordner</string> + <string name="fm_type_file">Datei</string> + <string name="fm_choose_act">Aktion auswählen</string> + <string name="fm_selected">%tw_fm_type%:</string> + <string name="fm_copy_btn">Kopieren</string> + <string name="fm_copy_file_btn">Datei kopieren</string> + <string name="fm_copy_folder_btn">Ordner kopieren</string> + <string name="fm_copying">Kopiere</string> + <string name="fm_move_btn">Verschieben</string> + <string name="fm_moving">Verschiebe</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Löschen</string> + <string name="fm_deleting">Wird gelöscht</string> + <string name="fm_rename_btn">Umbenennen</string> + <string name="fm_rename_file_btn">Datei umbennen</string> + <string name="fm_rename_folder_btn">Ordner umbenennen</string> + <string name="fm_renaming">Umbenennen</string> + <string name="fm_sel_dest">Zielordner auswählen</string> + <string name="fm_sel_curr_folder">Aktuellen Ordner auswählen</string> + <string name="fm_rename_hdr">Umbenennen</string> + <string name="fm_set_perms_hdr">Berechtigungen setzen</string> + <string name="fm_perms">Berechtigungen:</string> + <string name="fm_complete">Dateivorgang beendet</string> + <string name="decrypt_data_hdr">Daten-Partition entschlüsseln</string> + <string name="decrypt_data_enter_pass">Passwort eingeben:</string> + <string name="decrypt_data_failed">Passwort falsch, bitte erneut versuchen!</string> + <string name="decrypt_data_failed_pattern">Muster falsch, bitte erneut versuchen!</string> + <string name="decrypt_data_enter_pattern">Muster eingeben.</string> + <string name="decrypt_data_trying">Versuche Entschlüsselung</string> + <string name="term_hdr">Terminal</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">BEENDEN</string> + <string name="term_sel_folder_hdr">Zum Stamm-Ordner navigieren</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Dalvik Cache löschen</string> + <string name="sideload_wipe_cache_chk">Cache löschen</string> + <string name="swipe_to_sideload">ADB Sideload starten</string> + <string name="swipe_sideload">Start</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Syntax: adb sideload Dateiname.zip</string> + <string name="sideload_complete">ADB Sideload abgeschlossen</string> + <string name="fix_contexts_hdr">SELinux Kontexte</string> + <string name="fix_contexts_note1">Das Korrigieren der Kontexte wird selten benötigt!</string> + <string name="fix_contexts_note2">Das Korrigieren der SELinux-Kontexte kann</string> + <string name="fix_contexts_note3">Startprobleme verursachen.</string> + <string name="swipe_to_fix_contexts">SELinux-Kontexte korrigieren</string> + <string name="swipe_fix_contexts">Korrigieren</string> + <string name="fixing_contexts">Korrigiere Kontexte...</string> + <string name="fix_contexts_complete">Korrektur der Kontexte abgeschlossen</string> + <string name="reboot_hdr">Neustart</string> + <string name="su_hdr">SuperSU-Check</string> + <string name="su_note1">Anscheinend besteht kein Root-Zugriff auf das Gerät.</string> + <string name="su_note2">SuperSU jetzt installieren?</string> + <string name="su_note3">Dies wird Root-Zugriff auf dem Gerät einrichten.</string> + <string name="su_cancel">Nicht installieren</string> + <string name="swipe_su_to_install">Installation starten</string> + <string name="swipe_su_install">Installieren</string> + <string name="su_installing">Installiere SuperSU</string> + <string name="sel_storage_list">Speicher auswählen</string> + <string name="ok_btn">OK</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Dieser Kernel hat keine Leseunterstützung für SELinux-Kontexte.</string> + <string name="full_selinux">Volle SELinux-Unterstützung ist vorhanden.</string> + <string name="no_selinux">Keine SELinux-Unterstützung vorhanden (kein libselinux).</string> + <string name="mtp_enabled">MTP aktiviert</string> + <string name="mtp_crash">MTP abgestürzt, MTP wird künftig während Bootvorgang nicht gestartet.</string> + <string name="decrypt_success">Erfolgreich mit dem Standardpasswort entschlüsselt.</string> + <string name="unable_to_decrypt">Entschlüsselung mit Standardpasswort nicht möglich. Eventuell muss die Daten-Partition formatiert werden.</string> + <string name="generating_md51">Generiere MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * generiere MD5...</string> + <string name="md5_created"> * MD5 erstellt.</string> + <string name="md5_error"> * MD5-Fehler!</string> + <string name="md5_compute_error"> * Fehler bei MD5-Berechnung.</string> + <string name="current_date">(Aktuelles Datum)</string> + <string name="auto_generate">(Automatisch generiert)</string> + <string name="unable_to_locate_partition">Kann '{1}' Partition für Sicherungsberechnungen nicht finden.</string> + <string name="no_partition_selected">Keine Partitionen für die Sicherung ausgewählt.</string> + <string name="total_partitions_backup"> * Anzahl der zu sichernden Partitionen: {1}</string> + <string name="total_backup_size"> * Gesamtgröße aller Daten: {1}MB</string> + <string name="available_space"> * Verfügbare Speicherplatz: {1}MB</string> + <string name="unable_locate_storage">Kann Sicherungsgerät nicht finden.</string> + <string name="no_space">Zu wenig freier Speicherplatz.</string> + <string name="backup_started">[SICHERUNG GESTARTET]</string> + <string name="backup_folder"> * Ordner für Sicherung: {1}</string> + <string name="fail_backup_folder">Ordner für Sicherung konnte nicht erstellt werden.</string> + <string name="avg_backup_fs">Durchschnittliche Sicherungsgeschwindigkeit für Dateisysteme: {1} MB/sek</string> + <string name="avg_backup_img">Durchschnittliche Sicherungsgeschwindigkeit für abgebildete Laufwerke: {1} MB/sek</string> + <string name="total_backed_size">[INSGESAMT {1} MB GESICHERT]</string> + <string name="backup_completed">[SICHERUNG ABGESCHLOSSEN IN {1} SEKUNDEN]</string> + <string name="restore_started">[WIEDERHERSTELLEN GESTARTET]</string> + <string name="restore_folder">Wiederherstellen aus Ordner: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} fertiggestellt ({2} Sekunden)]</string> + <string name="verifying_md5">Überprüfe MD5</string> + <string name="skip_md5">Überspringe MD5-Prüfung aufgrund Benutzereinstellungen.</string> + <string name="calc_restore">Berechne Wiederherstellungsinformationen...</string> + <string name="restore_read_only">Kann {1} nicht wiederherstellen -- Partition schreibgeschützt.</string> + <string name="restore_unable_locate">Kann wiederherzustellende '{1}'-Partition nicht finden.</string> + <string name="no_part_restore">Keine Partitionen zur Wiederherstellung ausgewählt.</string> + <string name="restore_part_count">{1} Partitionen wiederherstellen...</string> + <string name="total_restore_size">Insgesamt wiederherzustellen: {1}MB</string> + <string name="updating_system_details">Aktualisieren der System-Details</string> + <string name="restore_completed">[WIEDERHERSTELLEN ABGESCHLOSSEN IN {1} SEKUNDEN]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Fehler beim Öffnen: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Partition nicht anhand des Sicherungsnamens ermittelbar: '{1}'</string> + <string name="unable_find_part_path">Partition für Pfad '{1}' nicht gefunden</string> + <string name="update_part_details">Partitions-Informationen werden aktualisiert...</string> + <string name="update_part_details_done">...Fertig</string> + <string name="wiping_dalvik">Dalvik Cache-Verzeichnisse bereinigen...</string> + <string name="cleaned">Bereinigt: {1}...</string> + <string name="dalvik_done">-- Dalvik Cache-Verzeichnisse bereinigt!</string> + <string name="no_andsec">Keine "Android Secure"-Partitionen gefunden.</string> + <string name="unable_to_locate">{1} nicht gefunden.</string> + <string name="wiping_datamedia">Lösche internen Speicher -- /data/media...</string> + <string name="unable_to_mount">Kann {1} nicht einhängen</string> + <string name="unable_to_mount_internal">Kann internen Speicher nicht einhängen</string> + <string name="unable_to_mount_storage">Kann Speicher nicht einhängen</string> + <string name="fail_decrypt">Entschlüsselung der Daten-Partition fehlgeschlagen.</string> + <string name="no_crypto_support">In diese Version wurde keine Krypto-Unterstützung eingebunden.</string> + <string name="decrypt_success_dev">Erfolgreich entschlüsselt, neues Blockgerät: '{1}'</string> + <string name="decrypt_success_nodev">Erfolgreich entschlüsseltd</string> + <string name="done">Abgeschlossen.</string> + <string name="start_partition_sd">Partitioniere SD Karte...</string> + <string name="partition_sd_locate">Zu partitionierendes Gerät nicht gefunden.</string> + <string name="ext_swap_size">EXT + Auslagerung ist grösser als die SD-Karte.</string> + <string name="remove_part_table">Entferne Partitionstabelle...</string> + <string name="unable_rm_part">Partitionstabelle kann nicht entfernt werden.</string> + <string name="create_part">Erstelle {1}-Partition...</string> + <string name="unable_to_create_part">{1}-Partition kann nicht erstellt werden.</string> + <string name="format_sdext_as">Formatiere sd-ext als {1}...</string> + <string name="part_complete">Partitionierung abgeschlossen.</string> + <string name="unable_to_open">'{1}' kann nicht geöffnet werden.</string> + <string name="mtp_already_enabled">MTP bereits aktiviert</string> + <string name="mtp_fail">Fehler beim Aktivieren von MTP</string> + <string name="no_mtp">MTP-Unterstützung nicht integriert</string> + <string name="image_flash_start">[IMAGE-DATEI WIRD AUFGESPIELT]</string> + <string name="img_to_flash">Aufzuspielendes Image: '{1}'</string> + <string name="flash_unable_locate">'{1}'-Partition wurde nicht gefunden.</string> + <string name="no_part_flash">Keine Partitionen ausgewählt.</string> + <string name="too_many_flash">Zu viele Partitionen ausgewählt.</string> + <string name="invalid_flash">Ungültige Partitions-Auswahl.</string> + <string name="flash_done">[IMAGE EINSPIELEN ABGESCHLOSSEN]</string> + <string name="wiping">Lösche {1}</string> + <string name="repair_not_exist">{1} existiert nicht! Reparieren nicht möglich!</string> + <string name="repairing_using">Reparatur von {1} mit {2}...</string> + <string name="unable_repair">{1} kann nicht repariert werden.</string> + <string name="mount_data_footer">/data konnte nicht eingehängt werden und Krypto-Signatur wurde nicht gefunden.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Ordner '{1}' konnte nicht angelegt werden ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">'{1}' konnte nicht eingehängt werden ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">'{1}' konnte nicht eingehängt werden ({2})</string> + <string name="cannot_resize">Größe von {1} kann nicht geändert werden.</string> + <string name="repair_resize">{1} wird repariert. Danach wird die Größe geändert.</string> + <string name="unable_resize">Größe von {1} kann nicht geändert werden.</string> + <string name="no_md5_found">Keine MD5-Datei für '{1}' gefunden. Bitte MD5-Prüfung für Wiederherstellung deaktivieren.</string> + <string name="md5_fail_match">MD5-Prüfung für '{1}' fehlgeschlagen.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">TAR-Datei '{1}' konnte nicht entschlüsselt werden.</string> + <string name="format_data_msg">Ein Neustart von TWRP kann notwendig sein, damit /data wieder verwendet werden kann.</string> + <string name="format_data_err">Formatierung zum Entfernen der Verschlüsselung kann nicht durchgeführt werden.</string> + <string name="formatting_using">Formatiere {1} mit {2}...</string> + <string name="unable_to_wipe">{1} kann nicht gelöscht werden.</string> + <string name="cannot_wipe">Partition {1} kann nicht gelöscht werden.</string> + <string name="remove_all">Entferne alle Dateien unter '{1}'</string> + <string name="wiping_data">Lösche Daten, aber verschone internen Speicher...</string> + <string name="backing_up">Sichere {1}...</string> + <string name="backup_storage_warning">Backups of {1} do not include any files in internal storage such as pictures or downloads.</string> + <string name="backing">Sichere</string> + <string name="backup_size">Sicherung von '{1}' hat 0 Byte.</string> + <string name="datamedia_fs_restore">WARNUNG: Diese Sicherung wurde mit dem Dateisystem {1} erstellt! Es kann sein, dass wieder zu {1} gewechselt werden muss, damit das Gerät nach der Wiederherstellung auch startet.</string> + <string name="restoring">Wiederherstellung läuft</string> + <string name="restoring_hdr">Wiederherstellung läuft</string> + <string name="recreate_folder_err">Ordner {1} kann nicht wiederhergestellt werden.</string> + <string name="img_size_err">Image ist zu groß für das Gerät</string> + <string name="flashing">Einspielen von {1}...</string> + <string name="backup_folder_set"> * Ordner für Sicherung: {1}</string> + <string name="locate_backup_err">Sicherung '{1}' nicht gefunden</string> + <string name="set_restore_opt">Setze Wiederherstellungs-Optionen: '{1}':</string> + <string name="md5_check_skip">MD5-Prüfung ist deaktiviert</string> + <string name="ors_encrypt_restore_err">Eine verschlüsselte Sicherung kann nicht per OpenRecoveryScript wiederhergestellt werden.</string> + <string name="mounting">Einhängen</string> + <string name="unmounting">Auswerfen</string> + <string name="mounted">'{1}' eingehängt</string> + <string name="unmounted">'{1}' ausgeworfen</string> + <string name="setting">Setze '{1}' auf '{2}'</string> + <string name="setting_empty">Setze '{1}' auf leer</string> + <string name="making_dir1">Erstelle Verzeichnis</string> + <string name="making_dir2">Erstelle Verzeichnis: '{1}'</string> + <string name="running_command">Führe Befehl aus</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Starte ADB Sideload...</string> + <string name="need_new_adb">Für dieses Gerät wird ADB 1.0.32 oder neuer benötigt.</string> + <string name="no_pwd">Kein Passwort angegeben.</string> + <string name="done_ors">Skript wurde verarbeitet</string> + <string name="injecttwrp">Injiziere TWRP in das Boot-Image...</string> + <string name="zip_err">Fehler beim Installieren von ZIP '{1}'</string> + <string name="installing_zip">Installiere Zip '{1}'</string> + <string name="select_backup_opt">Setze Sicherungs-Optionen:</string> + <string name="compression_on">Komprimierung ist aktiviert</string> + <string name="md5_off">MD5-Generierung ist deaktiviert</string> + <string name="backup_fail">Sicherung fehlgeschlagen</string> + <string name="backup_clean">Sicherung fehlgeschlagen, bereinige Sicherungs-Verzeichnis</string> + <string name="running_recovery_commands">Führe Recovery-Befehle aus</string> + <string name="recovery_commands_complete">Recovery-Befehle ausgeführt</string> + <string name="running_ors">Führe OpenRecoveryScript aus</string> + <string name="ors_complete">OpenRecoveryScript ausgeführt</string> + <string name="invalid_zip_format">Invalid zip file format!</string> + <string name="check_for_md5">Suche nach MD5-Datei...</string> + <string name="fail_sysmap">'{1}' kann nicht zugeordnet werden</string> + <string name="verify_zip_sig">Überprüfe ZIP-Signatur...</string> + <string name="verify_zip_fail">Prüfung der ZIP-Signatur fehlgeschlagen!</string> + <string name="verify_zip_done">Prüfung der ZIP-Signatur erfolgreich.</string> + <string name="zip_corrupt">ZIP-Datei ist beschädigt!</string> + <string name="no_md5">MD5-Prüfung übersprungen: keine MD5-Datei gefunden</string> + <string name="md5_fail">MD5 stimmt nicht überein</string> + <string name="md5_match">MD5 stimmt überein</string> + <string name="pid_signal">Prozess {1} endete mit Meldung: {2}</string> + <string name="pid_error">Prozess {1} endete mit FEHLER: {2}</string> + <string name="install_dumlock">Installiere HTC Dumlock in System-Partition...</string> + <string name="dumlock_restore">Stelle originale Boot-Partition wieder her...</string> + <string name="dumlock_reflash">Recovery auf Boot-Partition einspielen...</string> + <string name="run_script">Führe {1}-Skript aus...</string> + <string name="rename_stock">Hersteller-Recovery in "/system" wurde umbenannt, damit das Hersteller-ROM TWRP nicht überschreibt.</string> + <string name="split_backup">Sicherungs-Datei wird in mehrere Archive aufgeteilt...</string> + <string name="backup_error">Fehler beim Erstellen der Sicherung.</string> + <string name="restore_error">Fehler während der Wiederherstellung.</string> + <string name="split_thread">Teile Thread-ID {1} in Archiv {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu von %llu Dateien, %i%%</string> + <string name="size_progress">%lluMB von %lluMB, %i%%</string> + <string name="decrypt_cmd">Versuche die Daten-Partition per Kommandozeile zu entschlüsseln.</string> + <string name="base_pkg_err">Basis-Pakete konnten nicht geladen werden.</string> + <string name="simulating">Simuliere Aktionen...</string> + <string name="backup_cancel">Sicherung abgebrochen</string> + <string name="config_twrp">Konfiguriere TWRP...</string> + <string name="config_twrp_err">Konfigurieren von TWRP mit diesem Kernel nicht möglich.</string> + <string name="copy_log">Recovery-Log wurde nach {1} kopiert.</string> + <string name="max_queue">Maximale Anzahl an ZIP-Dateien erreicht!</string> + <string name="min_queue">Minimale Anzahl an ZIP-Dateien erreicht!</string> + <string name="screenshot_saved">Bildschirmfoto gespeichert unter {1}</string> + <string name="screenshot_err">Bildschirmfoto konnte nicht erstellt werden!</string> + <string name="zip_wipe_cache">Eine oder mehrere ZIP-Dateien wollen den Cache löschen -- Lösche Cache jetzt.</string> + <string name="and_sec_wipe_err">Android Secure kann nicht gelöscht werden</string> + <string name="dalvik_wipe_err">Löschen von Dalvik fehlgeschlagen</string> + <string name="auto_gen">(automatisch erstellt)</string> + <string name="curr_date">(aktuelles Datum)</string> + <string name="backup_name_len">Der Name der Sicherung ist zu lang.</string> + <string name="backup_name_invalid">Sicherungs-Name '{1}' enthält ungültige Zeichen: '{1}'</string> + <string name="no_real_sdcard">Dieses Gerät verwendet keine SD-Karte! Abbruch!</string> + <string name="cancel_sideload">ADB Sideload wird abgebrochen...</string> + <string name="change_fs_err">Fehler beim Ändern des Dateisystems.</string> + <string name="theme_ver_err">Theme-Version inkompatibel zu TWRP-Version. Standard-Theme wird verwendet.</string> + <string name="up_a_level">(Übergeordneter Ordner)</string> + <string name="install_reboot"version="2">Neustart in %tw_sleep% Sekunden</string> + <string name="adbbackup_error">Fehler während ADB Backup. Abbruch..."</string> + <string name="adbbackup_control_error">Kein Zugriff auf ADB Control Channel</string> + <string name="twrp_adbbu_option">--twrp option wird für ADB Backup benötigt</string> + <string name="partition_not_found">Pfad: {1} wurde nicht in Partitionsliste gefunden</string> + <string name="copy_kernel_log">Kernel-Log wurde nach {1} kopiert</string> + <string name="include_kernel_log">Zusätzlich Kernel-Log kopieren</string> + <string name="unable_set_boot_slot">Fehler während Wechsel zu Slot {1}</string> + </resources> +</language> diff --git a/gui/theme/common/languages/el.xml b/gui/theme/common/languages/el.xml new file mode 100644 index 000000000..7ec4d15a7 --- /dev/null +++ b/gui/theme/common/languages/el.xml @@ -0,0 +1,652 @@ +<?xml version="1.0"?> +<language> + <display>Ελληνικά</display> + <resources> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + <string name="system">Σύστημα</string> + <string name="system_image">Εικόνα Συστήματος</string> + <string name="vendor">Προμηθευτής</string> + <string name="vendor_image">Εικόνα Προμηθευτή</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Μνήμη cache</string> + <string name="data">Data</string> + <string name="sdcard">Κάρτα SD</string> + <string name="internal">Εσωτερικός χώρος αποθήκευσης</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Εγκεκριμένα δεδομένα</string> + <string name="adopted_storage">Εγκεκριμένος Αποθ. Χώρος</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Μπαταρία: %tw_battery%</string> + <string name="sort_by_name">Ταξινόμηση κατά όνομα</string> + <string name="sort_by_date">Ταξινόμηση κατά ημερομηνία</string> + <string name="sort_by_size">Ταξινόμηση κατά μέγεθος</string> + <string name="sort_by_name_only">Όνομα</string> + <string name="sort_by_date_only">Ημ/νία</string> + <string name="sort_by_size_only">Μέγεθος</string> + <string name="tab_general">ΓΕΝΙΚΑ</string> + <string name="tab_options">ΡΥΘΜΙΣΕΙΣ</string> + <string name="tab_backup">ΑΝΤΙΓΡ. ΑΣΦΑΛ.</string> + <string name="tab_time_zone">ΖΩΝΗ ΩΡΑΣ</string> + <string name="tab_screen">ΟΘΟΝΗ</string> + <string name="tab_vibration">ΔΟΝΗΣΗ</string> + <string name="tab_language">ΓΛΩΣΣΑ</string> + <string name="install_btn">Εγκατάσταση</string> + <string name="wipe_btn">Εκαθάριση</string> + <string name="backup_btn">Αντίγρ. ασφαλ.</string> + <string name="restore_btn">Επαναφορά</string> + <string name="mount_btn">Προσάρτηση</string> + <string name="settings_btn">Ρυθμίσεις</string> + <string name="advanced_btn">Προηγμένες</string> + <string name="reboot_btn">Επανεκκίνηση</string> + <string name="files_btn">Αρχεία</string> + <string name="copy_log_btn">Αντιγρ. αρχείου καταγραφής</string> + <string name="select_type_hdr">Επιλέξτε τύπο</string> + <string name="install_zip_hdr">Εγατάσταση Zip</string> + <string name="install_zip_btn">Εγατάσταση Zip</string> + <string name="install_image_hdr">Εγκατάσταση εικόνας</string> + <string name="install_image_btn">Εγκατάσταση εικόνας</string> + <string name="install_select_file_hdr">Επιλέξτε Αρχείο</string> + <string name="file_selector_folders_hdr">Φάκελοι</string> + <string name="select_file_from_storage">Επιλέξτε αρχείο από %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Εγκατάσταση</string> + <string name="select_storage_hdr">Επιλέξτε Αποθ. χώρο</string> + <string name="select_storage_btn">Επιλέξτε Αποθ. χώρο</string> + <string name="queue_hdr">Ουρά</string> + <string name="zip_queue_count">%tw_zip_queue_count% το μέγιστο 10 αρχεία στην ουρά</string> + <string name="zip_queue_count_s">Αρχεία %tw_zip_queue_count% από 10:</string> + <string name="zip_warn1">Αυτή η λειτουργία μπορεί να εγκαταστήσει μη συμβατό</string> + <string name="zip_warn2">λογισμικό και να αχρηστεύσει τη συσκευή σας.</string> + <string name="zip_back_cancel">Πιέστε το πλήκτρο πίσω για να ακυρώσετε την προσθήκη του zip.</string> + <string name="zip_back_clear">Πατήστε το κουμπί πίσω για να καθαρήσετε την ουρά.</string> + <string name="folder">Φάκελος:</string> + <string name="file">Αρχείο:</string> + <string name="zip_sig_chk">Επαλήθευση της υπογραφής Zip</string> + <string name="inject_twrp_chk">Εισάγωγή TWRP μετά την εγκατάσταση</string> + <string name="install_reboot_chk">Εππανεκίνηση μετά την εγκατάσταση</string> + <string name="options_hdr">Ρυθμίσεις</string> + <string name="confirm_flash_hdr">Επιβεβαίωση Flash</string> + <string name="zip_queue">Ουρά:</string> + <string name="options">Ρυθμίσεις:</string> + <string name="swipe_confirm"> Επιβεβαιώστε</string> + <string name="zip_add_btn">Προσθ. περισσότερα zip</string> + <string name="zip_clear_btn">Εκκαθάριση ουράς Zip</string> + <string name="install_zip_count_hdr">Εγκαταστήστε Zip %tw_zip_index% από %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Εγκατάσταση Zip: %tw_file%</string> + <string name="failed">Απέτυχε</string> + <string name="successful">Επιτυχής</string> + <string name="install_failed">Η εγκατάσταση απέτυχε</string> + <string name="install_successful">Επιτυχής εγκατάσταση</string> + <string name="wipe_cache_dalvik_btn">Εκκαθάριση cache/dalvik</string> + <string name="reboot_system_btn">Επανεκ. συστήματος</string> + <string name="install_sel_target">Επιλέξτε Διαμέρισμα</string> + <string name="flash_image_select">Επιλέξτε Διαμέρισμα για Flash εικόνας:</string> + <string name="target_partition">Διαμέρισμα:</string> + <string name="flashing_image">Εγγραφή εικόνας...</string> + <string name="image_flashed">Η εικόνα εγγράφηκε</string> + <string name="wipe_cache_dalvik_confirm">Εκκαθάριση Cache & Dalvik;</string> + <string name="wiping_cache_dalvik">Εκκαθάριση Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Η Εκκαθάριση Cache & Dalvik ολοκληρώθηκε</string> + <string name="swipe_wipe">Σύρετε για εκαθάριση</string> + <string name="swipe_wipe_s"> Εκαθάριση</string> + <string name="no_os1">Κανένα λειτουργικό σύστημα εγκατεστημένο! Είστε</string> + <string name="no_osrb">σίγουροι ότι θέλετε να κάνετε επανεκκίνηση;</string> + <string name="no_ospo">σίγουροι ότι θέλετε να κάνετε απενεργοποίηση;</string> + <string name="rebooting">Επανεκκίνηση...</string> + <string name="swipe_reboot">Σύρετε για Επανεκκίνηση</string> + <string name="swipe_reboot_s"> Επανεκκίνηση</string> + <string name="swipe_flash">Σύρετε για Εγατάσταση</string> + <string name="confirm_action">Επιβεβαίωση ενέργειας</string> + <string name="back_cancel">Πατήστε το κουμπί πίσω για να ακυρώσετε.</string> + <string name="cancel_btn">Άκυρο</string> + <string name="wipe_hdr">Εκαθάριση</string> + <string name="factory_reset_hdr">Επαναφορά εργοστασιακών ρυθμίσεων</string> + <string name="factory_reset_btn">Επαναφορά εργοστασιακών ρυθμίσεων</string> + <string name="factory_reset1">Εκαθάριση Data, Cache και Dalvik</string> + <string name="factory_reset2">(εξαιρέσει εσωτερική αποθήκευσης)</string> + <string name="factory_reset3">Στις περισσότερες περιπτώσεις αυτή είναι</string> + <string name="factory_reset4">η μόνη εκκαθάριση που χρειάζεστε.</string> + <string name="factory_resetting">Επαναφορά εργοστασιακών ρυθμίσεων...</string> + <string name="advanced_wipe_hdr">Σύνθετη Εκκαθάριση</string> + <string name="advanced_wipe_btn">Σύνθετη Εκκαθάριση</string> + <string name="wipe_enc_confirm">Εκκαθάριση κρυπτογράφηση από τα Δεδομένα;</string> + <string name="formatting_data">Διαμόρφωση Δεδομένων...</string> + <string name="swipe_format_data">Σύρετε για Διαμόρφ. Δεδομ.</string> + <string name="swipe_format_data_s"> Διαμόρφ Δεδομ.</string> + <string name="factory_reset_complete">Επαναφορά εργοστασιακών ρυθμίσεων ολοκληρώθηκε</string> + <string name="sel_part_hdr">Επιλέξτε Τομέα(είς)</string> + <string name="wipe_sel_confirm">Εκκαθάριση επιλεγμένου(ων) τομέα(ων);</string> + <string name="wiping_part">Εκκαθάριση Τομέα(ων)...</string> + <string name="wipe_complete">Η εκκαθάριση ολοκληρώθηκε</string> + <string name="sel_part_wipe">Επιλέξτε Τομείς για Εκκαθάριση:</string> + <string name="invalid_part_sel">Μη έγκυρη επιλογή Τομέα</string> + <string name="format_data_hdr">Διαμόρφωση Δεδομένων</string> + <string name="format_data_btn">Διαμόρφωση Δεδομένων</string> + <string name="format_data_ptr1">Η Διαμόρφωση Δεδομένων θα διαγράψει όλες τις εφαρμογές,</string> + <string name="format_data_ptr2">αντίγραφα ασφαλείας, φωτογραφίες, βίντεο, πολυμέσα και</string> + <string name="format_data_ptr3">αφαιρεί την κρυπτογράφηση στον εσωτερικό χώρο αποθήκευσης.</string> + <string name="format_data_adopted">Including Adopted Storage</string> + <string name="format_data_lcp1">Η Διαμόρφωση Δεδομένων θα διαγράψει όλες τις εφαρμογές, αντίγραφα ασφαλείας, φωτογραφίες, βίντεο, πολυμέσα και</string> + <string name="format_data_lcp2">αφαιρεί την κρυπτογράφηση στον εσωτερικό χώρο αποθήκευσης.</string> + <string name="format_data_wtc1">Η Διαμόρφωση Δεδομένων θα διαγράψει όλες τις εφαρμογές,</string> + <string name="format_data_wtc2">αντίγραφα ασφαλείας και πολυμέσα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.</string> + <string name="format_data_undo">Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.</string> + <string name="format_data_complete">Η Διαμόρφωση Δεδομένων ολοκληρώθηκε</string> + <string name="yes_continue">Πληκτρολογήστε Yes για να συνεχίσετε. Πιέστε το πλήκτρο πίσω για να ακυρώσετε.</string> + <string name="part_opt_hdr">Ρυθμίσεις Τομέα: %tw_partition_name%</string> + <string name="sel_act_hdr">Επιλέξτε ενέργεια</string> + <string name="file_sys_opt">Επιλογές των αρχείων συστήματος</string> + <string name="partition">Τομέας: %tw_partition_name%</string> + <string name="part_mount_point">Σημείο προσάρτησης: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Αρχεία Σύστηματος: %tw_partition_file_system%</string> + <string name="part_present_yes">Παρόν: Ναι</string> + <string name="part_present_no">Παρόν: Όχι</string> + <string name="part_removable_yes">Αφαιρούμενο: Ναι</string> + <string name="part_removable_no">Αφαιρούμενο: Όχι</string> + <string name="part_size">Μέγεθος: %tw_partition_size%MB</string> + <string name="part_used">Χρησιμοποιούνται: %tw_partition_used%MB</string> + <string name="part_free">Ελεύθερα: %tw_partition_free%MB</string> + <string name="part_backup_size">Μέγεθος του αντιγράφου ασφαλείας: %tw_partition_backup_size% MB</string> + <string name="resize_btn">Αλλάξετε το μέγεθος του Αρχείων Συστήματος</string> + <string name="resize_btn_s">Αλλαγή μεγέθους</string> + <string name="resize_confirm">Αλλαγή μεγέθους %tw_partition_name%;</string> + <string name="resizing">Αλλαγή μεγέθους...</string> + <string name="resize_complete">Η αλλαγή μεγέθους ολοκληρώθηκε</string> + <string name="swipe_resize">Σύρετε για αλλαγή μεγέθους</string> + <string name="swipe_resize_s"> Αλλαγή μεγέθους</string> + <string name="repair_btn">Επιδιόρθ. Αρχ. Συστήματος</string> + <string name="repair_btn_s">Επιδιόρθωση</string> + <string name="repair_confirm">Επιδιόρθωση %tw_partition_name%;</string> + <string name="repairing">Επιδιόρθωση...</string> + <string name="repair_complete">Η επιδιόρθωση ολοκληρώθηκε</string> + <string name="swipe_repair">Σύρετε για Επιδιόρθωση</string> + <string name="swipe_repair_s"> Επιδιόρθωση</string> + <string name="change_fs_btn">Αλλαγή Αρχ. Συστήματος</string> + <string name="change_fs_btn_s">Αλλαγή</string> + <string name="change_fs_for_hdr">Αλλαγή Αρχείου Συστήματος για: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Τομέας: %tw_partition_name% > επιλέξετε Αρχεία Συστήματος</string> + <string name="change_fs_warn1">Κάποια ROM ή kernels μπορεί να μην υποστηρίζουν κάποια</string> + <string name="change_fs_warn2">αρχεία συστήματος. Συνεχίστε με προσοχή!</string> + <string name="change_fs_confirm">Αλλαγή %tw_partition_name%;</string> + <string name="formatting">Διαμόρφωση...</string> + <string name="format_complete">Η Διαμόρφωση ολοκληρώθηκε</string> + <string name="swipe_change_fs">Σύρετε για Αλλαγή</string> + <string name="swipe_change_s"> Αλλαγή</string> + <string name="back_btn">Πίσω</string> + <string name="wipe_enc_btn">Εκκαθάριση Κρυπτογράφησης</string> + <string name="swipe_factory_reset">Σύρετε για Επαναφ. εργοστ. ρυθμ.</string> + <string name="repair_change_btn">Επιδιόρθωση ή Αλλαγή Αρχείων Συστήματος</string> + <string name="storage_hdr">Αποθ. χώρος: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Αντίγραφα ασφαλείας</string> + <string name="backup_confirm_hdr">Επιβεβαίωση Αντιγράφων Ασφαλείας</string> + <string name="encryption_tab">ΚΡΥΠΤΟΓΑΦΗΣΗ</string> + <string name="encryption">Κρυπτογράφηση:</string> + <string name="name">Όνομα:</string> + <string name="sel_part_backup">Επιλέξτε Τομείς για αντίγραφα ασφαλείας:</string> + <string name="storage">Αποθ. χώρος:</string> + <string name="enc_disabled">απενεργοποιημένο - ορίσετε έναν κωδικό για να ενεργοποιήσετε</string> + <string name="enc_enabled">ενεργοποιημένο</string> + <string name="enable_backup_comp_chk">Ενεργοποιήσετε τη συμπίεση</string> + <string name="skip_md5_backup_chk">Παράλ. δημιουργ. MD5 κατά την δημ. αντιγρ. ασφ.</string> + <string name="disable_backup_space_chk">Απενεργοποίηση Ελέγχου Ελεύθερου Χώρου</string> + <string name="refresh_sizes_btn">Ανανέωση Μεγεθών</string> + <string name="swipe_backup">Σύρετε για δημιουργ. Αντιγρ. Ασφαλ.</string> + <string name="append_date_btn">Προσαρτημένη Ημ/νία</string> + <string name="backup_name_exists">Ένα αντίγραφο ασφαλείας με αυτό το όνομα υπάρχει ήδη!</string> + <string name="encrypt_backup">Κρυπτογράφηση αντιγράφων ασφαλείας;</string> + <string name="enter_pass">Εισάγετε κωδικό:</string> + <string name="enter_pass2">Εισάγετε τον κωδικό ξανά:</string> + <string name="pass_not_match">Οι κωδικοί πρόσβασης δεν ταιριάζουν!</string> + <string name="partitions">Τομείς:</string> + <string name="disabled">Απενεργοποιημένο</string> + <string name="enabled">Ενεργοποιημένο</string> + <string name="backup_name_hdr">Ορίστε όνομα Αντίγραφου Ασφαλείας</string> + <string name="progress">Πρόοδος:</string> + <string name="backup_complete">Αντίγραφο Ασφαλείας Δημιουργήθηκε</string> + <string name="restore_hdr">Επαναφορά</string> + <string name="sel_backup_hdr">Επιλέξτε αντίγραφα ασφαλείας</string> + <string name="restore_sel_store_hdr">Επιλέξτε αρχείο από %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Επιλέξτε πακέτο Επαναφοράς:</string> + <string name="restore_enc_backup_hdr">Κρυπτογραφημένο αντίγραφο ασφαλείας</string> + <string name="restore_dec_fail">Κωδικός απέτυχε, παρακαλώ προσπαθήστε ξανά!</string> + <string name="del_backup_btn">Διαγραφή αντιγράφου ασφαλείας</string> + <string name="del_backup_confirm">Διαγραφή αντιγράφου ασφαλείας;</string> + <string name="del_backup_confirm2">Αυτή η ενέργεια δεν μπορεί να αναιρεθεί!</string> + <string name="deleting_backup">Διαγραφή αντιγράφων ασφαλείας...</string> + <string name="backup_deleted">Το αντίγραφο ασφαλείας διαγράφηκε</string> + <string name="swipe_delete">Σύρετε για διαγραφή</string> + <string name="swipe_delete_s"> Διαγραφή</string> + <string name="restore_try_decrypt">Κρυπτογραφημένο Αντίγραφο Ασφαλείας - Προσπάθεια Αποκρυπτογράφησης</string> + <string name="restore_try_decrypt_s">Προσπάθεια αποκρυπτογράφησης</string> + <string name="restore_backup_date">Το Αντίγραφο ασφαλείας δημιουργήθηκε στο %tw_restore_file_date%</string> + <string name="restore_sel_part">Επιλέξτε Τομείς για Επαναφορά:</string> + <string name="restore_enable_md5_chk">Ενεργ. την επαλήθευση MD5 στα αντίγρ. ασφαλ.</string> + <string name="restore_complete">Η Eπαναφορά ολοκληρώθηκε</string> + <string name="swipe_restore">Σύρετε για Eπαναφορά</string> + <string name="swipe_restore_s"> Επαναφορά</string> + <string name="rename_backup_hdr">Μετονομασία αντιγράφου ασφαλείας</string> + <string name="rename_backup_confirm">Μετονομασία αντιγράφου ασφαλείας;</string> + <string name="rename_backup_confirm2">Αυτή η ενέργεια δεν μπορεί να αναιρεθεί!</string> + <string name="renaming_backup">Μετονομασία αντίγραφου ασφαλείας...</string> + <string name="rename_backup_complete">Η Μετονομασία Αντ. Ασφαλ. Ολοκληρώθηκε</string> + <string name="swipe_to_rename">Σύρετε για Μεταονομασία</string> + <string name="swipe_rename"> Μετονομασία</string> + <string name="confirm_hdr">Επιβεβαίωση</string> + <string name="mount_hdr">Προσάρτηση</string> + <string name="mount_sel_part">Επιλέξτε Τομείς για Προσάρτηση:</string> + <string name="mount_sys_ro_chk">Ορισμός του τομέα συστήματος μόνο για ανάγνωση</string> + <string name="mount_sys_ro_s_chk">Τοποθέτηση Συστήματος σε RO</string> + <string name="decrypt_data_btn">Αποκρυπτογράφηση δεδομένων</string> + <string name="disable_mtp_btn">Απενεργοποίηση MTP</string> + <string name="enable_mtp_btn">Ενεργοποίηση MTP</string> + <string name="mount_usb_storage_btn">Προσάρτ. αποθ. χώρου USB</string> + <string name="usb_storage_hdr">Εξ. χώρος USB</string> + <string name="usb_stor_mnt1">Εξ. χώρος USB προσαρτήθηκε</string> + <string name="usb_stor_mnt2">Βεβαιωθείτε ότι θα αφαιρέσετε με ασφάλεια τη συσκευή σας</string> + <string name="usb_stor_mnt3">από τον υπολογιστή σας πριν από την αποπροσάρτηση!</string> + <string name="unmount_btn">Αποπροσάρτηση</string> + <string name="rb_system_btn">Σύστημα</string> + <string name="rb_poweroff_btn">Απενεργοποίηση</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Λήψη</string> + <string name="turning_off">Απενεργοποίηση...</string> + <string name="swipe_power_off">Σύρετε για Απενεργοποίηση</string> + <string name="swipe_power_off_s">Απενεργοποίηση</string> + <string name="sys_ro_hdr">Τομέας συστήματος χωρίς τροποποιήσεις</string> + <string name="sys_ro_keep">Κρατήστε το σύστημα για ανάγνωση μόνο;</string> + <string name="sys_rop1">Το TWRP μπορεί να αφήσει τον τομέα συστήματος μη τροποποιημένο</string> + <string name="sys_rop2">ώστε να κάνει ευκολότερο για σας να λάβετε επίσημες ενημερώσεις.</string> + <string name="sys_rop3">Το TWRP δεν θα είναι σε θέση να αποτρέψει το λειτουργικό</string> + <string name="sys_rop4">να αντικαταστήσει το TWRP και δεν θα προσφέρουν τη δυνατότητα root στη συσκευή σας.</string> + <string name="sys_rop5">Η εγκατάσταση zip ή η εκτέλεση εντολών adb μπορούν να</string> + <string name="sys_rop6">τροποποιήσουν το διαμέρισμα του συστήματος.</string> + <string name="sys_rol1">Το TWRP μπορεί να αφήσει τον τομέα συστήματος μη τροποποιημένο ώστε να κάνει ευκολότερο για σας να λάβετε επίσημες ενημερώσεις.</string> + <string name="sys_rol2">Το TWRP δεν θα είναι σε θέση να αποτρέψει το λειτουργικό να αντικαταστήσει το TWRP και δεν θα προσφέρουν τη δυνατότητα root στη συσκευή σας.</string> + <string name="sys_rol3">Η Εγκατάσταση zip ή η εκτέλεση εργασιών adb μπορούν να τροποποιήσουν το διαμέρισμα του συστήματος.</string> + <string name="sys_ro_never_show_chk">Μην εμφανιστεί ξανά αυτή η οθόνη κατά την εκκίνηση</string> + <string name="sys_ro_keep_ro_btn">Διατήρηση Ανάγνωσης Μόνο</string> + <string name="swipe_allow_mod">Σύρετε για να Επιτρέψετε τις Τροποποιήσεις</string> + <string name="swipe_allow_mod_s">Επιτρέψτε τροποποιήσεις</string> + <string name="settings_hdr">Ρυθμίσεις</string> + <string name="settings_gen_hdr">Γενικές Ρυθμίσεις</string> + <string name="settings_gen_s_hdr">Γενικά</string> + <string name="settings_gen_btn">Γενικά</string> + <string name="use_rmrf_chk">Χρήση rm -rf αντί για διαμόρφωση</string> + <string name="use24clock_chk">Χρήση 24-ωρης μορφής ώρας</string> + <string name="rev_navbar_chk">Αντεστραμμένη navbar διάταξης</string> + <string name="simact_chk">Προσομοιώση ενεργειών για τη δοκιμή θέματος</string> + <string name="simfail_chk">Προσομοίωση αποτυχίας για δράσεις</string> + <string name="ctr_navbar_rdo">Κεντρική στοίχιση navbar κουμπιών</string> + <string name="lft_navbar_rdo">Αριστερή στοίχιση navbar κουμπιών</string> + <string name="rht_navbar_rdo">Δεξιά στοίχιση navbar κουμπιών</string> + <string name="restore_defaults_btn">Επαναφ. Προεπιλεγμ.</string> + <string name="settings_tz_btn">Ζώνη Ώρας</string> + <string name="settings_screen_btn">Οθόνη</string> + <string name="settings_screen_bright_btn">Φωτεινότητα οθόνης</string> + <string name="settings_vibration_btn">Δόνηση</string> + <string name="settings_language_btn">Γλώσσα</string> + <string name="time_zone_hdr">Ζώνη Ώρας</string> + <string name="sel_tz_list">Επιλέξτε ζώνη ώρας:</string> + <string name="utcm11">(UTC -11) Σαμόα, Midway Island</string> + <string name="utcm10">(UTC -10) Χαβάη</string> + <string name="utcm9">(UTC -9) Αλάσκα</string> + <string name="utcm8">(UTC -8) Ώρα Ειρηνικού</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Κεντρική ώρα</string> + <string name="utcm5">(UTC -5) Ανατολική ώρα</string> + <string name="utcm4">(UTC -4) Ώρα Ατλαντικού</string> + <string name="utcm3">(UTC -3) Βραζιλία, Μπουένος Άϊρες</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Αζόρες, Νήσοι Πράσινου Ακρωτηρίου</string> + <string name="utc0">(UTC 0) Λονδίνο, Δουβλίνο, Λισαβόνα</string> + <string name="utcp1">(UTC + 1) Βερολίνο, Βρυξέλλες, Παρίσι</string> + <string name="utcp2">(UTC + 2) Αθήνα, Κωνσταντινούπολη, Νότια Αφρική</string> + <string name="utcp3">(UTC + 3) Μόσχα, Βαγδάτη</string> + <string name="utcp4">(UTC + 4) Αμπού Ντάμπι, Τιφλίδα, Μοσχάτο</string> + <string name="utcp5">(UTC + 5) Αικατερινούπολη, Ισλαμαμπάντ</string> + <string name="utcp6">(UTC + 6) Αλμάτι, Ντάκα, Κολόμπο</string> + <string name="utcp7">(UTC + 7) Μπανγκόκ, Ανόι, Τζακάρτα</string> + <string name="utcp8">(UTC + 8) Πεκίνο, Σιγκαπούρη, Hong Kong</string> + <string name="utcp9">(UTC + 9) Τόκιο, Σεούλ, Γιακούτσκ</string> + <string name="utcp10">(UTC + 10) Ανατολική Αυστραλία, Γκουάμ</string> + <string name="utcp11">(UTC + 11) Βλαδιβοστόκ, Νησιά Σολομώντα</string> + <string name="utcp12">(UTC + 12) Όκλαντ, Γουέλινγκτον, Φίτζι</string> + <string name="sel_tz_offset">Επιλέξτε μετατόπιση (συνήθως 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Κανένα</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Χρησιμοποιήστε τη θερινή ώρα (DST)</string> + <string name="curr_tz">Τρέχουσα ζώνης ώρας: %tw_time_zone%</string> + <string name="curr_tz_s">Τρέχουσα ζώνης ώρας:</string> + <string name="set_tz_btn">Ορισμός ζώνης ώρας</string> + <string name="settings_screen_hdr">Ρυθμίσεις οθόνης</string> + <string name="settings_screen_timeout_hdr">Χρονικό όριο οθόνης</string> + <string name="enable_timeout_chk">Ενεργοποίηση χρονικού ορίου οθόνης</string> + <string name="screen_to_slider">Χρονικό όριο οθόνης σε δευτερόλεπτα:</string> + <string name="screen_to_slider_s">Χρονικό όριο οθόνης σε δευτερόλεπτα (0 = απενεργοποιημένο): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Η ρύθμιση χρονικού ορίου οθόνης δεν είναι διαθέσιμη</string> + <string name="screen_bright_slider">Φωτεινότητα: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Η ρύθμιση φωτεινότητας δεν είναι διαθέσιμη</string> + <string name="vibration_hdr">Δόνηση</string> + <string name="button_vibration_hdr">Δόνηση Κουμπιού</string> + <string name="kb_vibration_hdr">Δόνηση Πληκτρολογίου</string> + <string name="act_vibration_hdr">Δόνηση Ενέργειας</string> + <string name="button_vibration">Δόνηση Κουμπιού:</string> + <string name="kb_vibration">Δόνηση Πληκτρολογίου:</string> + <string name="act_vibration">Δόνηση Ενέργειας:</string> + <string name="select_language">Επιλέξτε γλώσσα:</string> + <string name="sel_lang_btn">Ορισμός γλώσσας</string> + <string name="set_language_btn">Ρύθμιση γλώσσας</string> + <string name="advanced_hdr">Προηγμένες</string> + <string name="copy_log_confirm">Αντιγραφή Log στην κάρτα SD;</string> + <string name="copying_log">Αντιγραφή Log στην κάρτα SD...</string> + <string name="copy_log_complete">Η Αντιγραφή Log Ολοκληρώθηκε</string> + <string name="fix_context_btn">Διορθ. περιεχομ.</string> + <string name="part_sd_btn">Τομέας κάρτας SD</string> + <string name="part_sd_s_btn">Κάρτα SD</string> + <string name="file_manager_btn">Διαχείρ. αρχείων</string> + <string name="language_hdr">Γλώσσα</string> + <string name="terminal_btn">Τερματικό</string> + <string name="reload_theme_btn">Εκ νέου φόρτ. θέματ.</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Εισαγωγή TWRP</string> + <string name="inject_twrp_confirm">Επανεισαγωγή TWRP;</string> + <string name="injecting_twrp">Επανεισαγωγή TWRP...</string> + <string name="inject_twrp_complete">Εισαγωγή TWRP ολοκληρώθηκε</string> + <string name="swipe_to_confirm">Σύρετε για επιβεβαιώσετε</string> + <string name="part_sd_hdr">Τομέας κάρτας SD</string> + <string name="invalid_partsd_sel">Πρέπει να επιλέξετε μία αφαιρ. συσκευή</string> + <string name="part_sd_lose">Θα χάσετε όλα τα αρχεία στην κάρτα SD!</string> + <string name="part_sd_undo">Αυτή η ενέργεια δεν μπορεί να αναιρεθεί!</string> + <string name="part_sd_ext_sz">Μέγεθος EXT:</string> + <string name="part_sd_swap_sz">Αλλαγή Μεγέθους:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Σύστημα αρχείων:</string> + <string name="swipe_part_sd">Σύρετε για Διαχωρισμό</string> + <string name="swipe_part_sd_s">Τομέας</string> + <string name="partitioning_sd">Διαχώριση κάρτας SD...</string> + <string name="partitioning_sd2">Αυτό θα διαρκέσει μερικά λεπτά.</string> + <string name="part_sd_complete">Η Διαχώριση ολοκληρώθηκε</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Επαναφέρετε το Αρχικό Boot</string> + <string name="dumlock_restore_confirm">Επαναφορά την αρχικής εικόνας boot;</string> + <string name="dumlock_restoring">Επαναφορά του Αρχικού Boot...</string> + <string name="dumlock_restore_complete">Επαναφορά του Αρχικού Boot Ολοκληρώθηκε</string> + <string name="dumlock_reflash_btn">Επανεγγραφή Recovery</string> + <string name="dumlock_reflash_confirm">Επανεγγραφή Recovery στο boot;</string> + <string name="dumlock_reflashing">Εγγραφή recovery στο boot...</string> + <string name="dumlock_reflash_complete">Η Εγγραφή Recovery στο Boot Ολοκληρώθηκε</string> + <string name="dumlock_install_btn">Εγκατάσταση του HTC Dumlock</string> + <string name="dumlock_install_confirm">Εγκατάσταση αρχείων HTC dumlock στο λειτουργικό;</string> + <string name="dumlock_installing">Εγκατάσταση του HTC Dumlock...</string> + <string name="dumlock_install_complete">Η εγκατάσταση HTC Dumlock Ολοκληρώθηκε</string> + <string name="swipe_to_unlock">Σύρετε για ξεκλείδωμα</string> + <string name="swipe_unlock"> Ξεκλείδωμα</string> + <string name="fm_hdr">Διαχείριση αρχείων</string> + <string name="fm_sel_file">Επιλέξτε ένα αρχείο ή φάκελο</string> + <string name="fm_type_folder">Φάκελος</string> + <string name="fm_type_file">Αρχείο</string> + <string name="fm_choose_act">Επιλέξτε ενέργεια</string> + <string name="fm_selected">%tw_fm_type% επιλέχθηκεί:</string> + <string name="fm_copy_btn">Αντιγραφή</string> + <string name="fm_copy_file_btn">Αντιγραφή αρχείου</string> + <string name="fm_copy_folder_btn">Αντιγραφή φακέλου</string> + <string name="fm_copying">Αντιγραφή</string> + <string name="fm_move_btn">Μετακίνηση</string> + <string name="fm_moving">Μετακίνηση</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Διαγραφή</string> + <string name="fm_deleting">Διαγραφή</string> + <string name="fm_rename_btn">Μετονομασία</string> + <string name="fm_rename_file_btn">Μετονοσία αρχείου</string> + <string name="fm_rename_folder_btn">Μετονομασία φακέλου</string> + <string name="fm_renaming">Μετονομασία</string> + <string name="fm_sel_dest">Επιλέξτε φάκελο προορισμού</string> + <string name="fm_sel_curr_folder">Επιλέξτε τρέχοντα φάκελο</string> + <string name="fm_rename_hdr">Μετονομασία</string> + <string name="fm_set_perms_hdr">Ορισμός δικαιωμάτων</string> + <string name="fm_perms">Δικαιώματα:</string> + <string name="fm_complete">Η Λειτουργία Αρχείου Ολοκληρώθηκε</string> + <string name="decrypt_data_hdr">Αποκρυπτογράφηση δεδομένων</string> + <string name="decrypt_data_enter_pass">Εισάγετε Κωδικό</string> + <string name="decrypt_data_failed">Κωδικός απέτυχε, παρακαλώ προσπαθήστε ξανά!</string> + <string name="decrypt_data_failed_pattern">Το Μοτίβο απέτυχε, παρακαλώ προσπαθήστε ξανά!</string> + <string name="decrypt_data_enter_pattern">Εισαγάγετε το μοτίβο.</string> + <string name="decrypt_data_trying">Προσπάθεια αποκρυπτογράφησης</string> + <string name="term_hdr">Εντολή τερματικού</string> + <string name="term_s_hdr">Τερματικό</string> + <string name="term_kill_btn">ΤΕΡΜΑΤΙΣΕ</string> + <string name="term_sel_folder_hdr">Περιηγηθείτε στον αρχικό φάκελο</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Εκκαθάριση Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Εκκαθάριση Cache</string> + <string name="swipe_to_sideload">Σύρετε για Sideload</string> + <string name="swipe_sideload"> Έναρξη</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Χρήση: adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload ολοκληρώθηκε</string> + <string name="fix_contexts_hdr">Διορθώσετε τα δικαιώματα</string> + <string name="fix_contexts_note1">Σημείωση: Διόρθωση δικαιωμάτων, σπάνια χρειάζεται.</string> + <string name="fix_contexts_note2">Η διόρθωση περιεχομένων SELinux μπορεί να</string> + <string name="fix_contexts_note3">κάνει την συσκευή σας να μην ξεκινάει σωστά.</string> + <string name="swipe_to_fix_contexts">Σύρετε για Διόρθωση Δικαιωμάτων</string> + <string name="swipe_fix_contexts"> Διορθ. δικαιώμ.</string> + <string name="fixing_contexts">Διόρθωση δικαιωμάτων...</string> + <string name="fix_contexts_complete">Η Διόρθωση δικαιωμάτων ολοκληρώθηκε</string> + <string name="reboot_hdr">Επανεκκίνηση</string> + <string name="su_hdr">Έλεγχος SuperSU</string> + <string name="su_note1">Η συσκευή σας δεν φαίνεται να έχει root.</string> + <string name="su_note2">Εγκατάσταση SuperSU τώρα;</string> + <string name="su_note3">Αυτό κάνει root στην συσκευή σας.</string> + <string name="su_cancel">Μην εγκαταστήσετε</string> + <string name="swipe_su_to_install">Σύρετε για εγκατάσταση</string> + <string name="swipe_su_install"> Εγκατάσταση</string> + <string name="su_installing">Εγκατάσταση SuperSU</string> + <string name="sel_storage_list">Επιλέξτε Αποθ. χώρο</string> + <string name="ok_btn">OΚ</string> + <string name="no_kernel_selinux">Το Kernel δεν υποστηρίζει την ανάγνωση περιεχομένων SELinux.</string> + <string name="full_selinux">Υπάρχει πλήρης υποστήριξη SELinux.</string> + <string name="no_selinux">Δεν υπάρχει υποστήριξη SELinux (libselinux).</string> + <string name="mtp_enabled">MTP ενεργοποιημένο</string> + <string name="mtp_crash">MTP συνετρίβη, δεν αρχίζει το MTP κατά την εκκίνηση.</string> + <string name="decrypt_success">Αποκρυπτογραφήθηκε με επιτυχία με τον προεπιλεγμένο κωδικό.</string> + <string name="unable_to_decrypt">Δεν είναι δυνατή η αποκρυπτογράφηση με τον προεπιλεγμένο κωδικός. Ίσως χρειαστεί να εκτελέσετε εκκαθάριση δεδομένων.</string> + <string name="generating_md51">Δημιουργία MD5</string> + <string name="generating_md52"> * Δημιουργία md5...</string> + <string name="md5_created"> * MD5 δημιουργήθηκε.</string> + <string name="md5_error"> * Σφάλμα MD5!</string> + <string name="md5_compute_error"> * Σφάλμα υπολογισμού MD5.</string> + <string name="current_date">(Τρέχουσα ημερομηνία)</string> + <string name="auto_generate">(Αυτόματη δημιουργία)</string> + <string name="unable_to_locate_partition">Δεν μπορεί να εντοπιστεί ο '{1}' τομέας για υπολογισμούς αντ. ασφαλ.</string> + <string name="no_partition_selected">Δεν επιλέχθηκαν τομείς για αντίγραφο ασφαλείας.</string> + <string name="total_partitions_backup"> * Συνολικός αριθμός διαμερισμάτων για να δημιουργήσετε αντίγραφα ασφαλείας: {1}</string> + <string name="total_backup_size"> * Συνολικό μέγεθος όλων των δεδομένων: {1}MB</string> + <string name="available_space"> * Διαθέσιμος χώρος: {1}MB</string> + <string name="unable_locate_storage">Δεν μπορεί να εντοπίσετεί ο αποθ. χώρος.</string> + <string name="no_space">Ανεπαρκής χώρος στην αποθ. χώρο.</string> + <string name="backup_started">[ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΓΡ. ΑΣΦΑΛ.]</string> + <string name="backup_folder"> * Κάντε φάκελο αντιγτ. ασφ.: {1}</string> + <string name="fail_backup_folder">Απέτυχε δημιουργίας φακέλου αντιγρ. ασφ.</string> + <string name="avg_backup_fs">Μέσος ρυθμός αντιγρ. ασφ. αρχείων συστήματος: {1} MB/δευτερ.</string> + <string name="avg_backup_img">Μέσος ρυθμός αντιγρ. ασφ. εικονικών μονάδων: {1} MB/δευτερ.</string> + <string name="total_backed_size">[{1} MB ΣΥΝΟΛΙΚΑ ΑΝΤΙΓΡΑΦΑΚΑΝ]</string> + <string name="backup_completed">[ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΓΡ. ΑΣΦ. ΟΛΟΚΛΗΡΩΘΗΚΕ ΣΕ {1} ΔΕΥΤΕΡΟΛΕΠΤΑ]</string> + <string name="restore_started">[ΕΠΑΝΑΦΟΡΑ ΞΕΚΙΗΣΕ]</string> + <string name="restore_folder">Επαναφορά φακέλου: '{1}'</string> + <string name="restore_part_done">[{1} ολοκληρώθηκαν ({2} δευτερόλεπτα)]</string> + <string name="verifying_md5">Επαλήθευση MD5</string> + <string name="skip_md5">Παράλειψη ελέγχου MD5 βάση τις ρυθμίσεις χρήστη.</string> + <string name="calc_restore">Υπολογισμός λεπτομερειών επαναφοράς...</string> + <string name="restore_read_only">Δεν είναι δυνατό να επαναφέρετε {1} -- τοποθέτηση μόνο για ανάγνωση.</string> + <string name="restore_unable_locate">Δεν εντοπίζετε το διαμέρισμα «{1}» για αποκατάσταση.</string> + <string name="no_part_restore">Δεν επιλέχθηκαν τομείς για επαναφορά.</string> + <string name="restore_part_count">Επαναφορά {1} τομέων...</string> + <string name="total_restore_size">Το συνολικό μέγεθος επαναφοράς είναι {1}MB</string> + <string name="updating_system_details">Ενημέρωση λεπτομερειών συστήματος</string> + <string name="restore_completed">[ΕΠΑΝΑΦΟΡΑ ΟΛΟΚΛΗΡΩΝΕΤΕ ΣΕ {1} ΔΕΥΤΕΡΟΛΕΠΤΑ]</string> + <string name="error_opening_strerr">Σφάλμα κατά το άνοιγμα: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Δεν εντοπίστηκε διαμέρισμα από το όνομα του αντίγραφου ασφαλείας: '{1}'</string> + <string name="unable_find_part_path">Δεν μπόρεσε να βρεθεί ο τομέας για τη διαδρομή '{1}'</string> + <string name="update_part_details">Ενημέρωση λεπτομερειών Τομέα...</string> + <string name="update_part_details_done">...ολοκληρώθηκε</string> + <string name="wiping_dalvik">Εκκαθάριση Καταλόγων Dalvik Cache...</string> + <string name="cleaned">Καθαρίστηκαν: {1}...</string> + <string name="dalvik_done">-- Οι κατάλογοι Dalvik Cache, Διαγράφηκαν!</string> + <string name="no_andsec">Δεν βρέθηκαν τομείς android secure.</string> + <string name="unable_to_locate">Δεν μπορεί να εντοπιστεί {1}.</string> + <string name="wiping_datamedia">Εκκαθάριση εσωτ. χώρου αποθ. -- /data/media...</string> + <string name="unable_to_mount">Αδύνατη προσάρτηση {1}</string> + <string name="unable_to_mount_internal">Αδύνατη προσάρτηση του internal_storage</string> + <string name="unable_to_mount_storage">Αδύνατη προσάρτηση του χώρου αποθ.</string> + <string name="fail_decrypt">Απέτυχε η αποκρυπτογράφηση δεδομένων.</string> + <string name="no_crypto_support">Δεν έχει μεταγλωττιστεί υποστήριξη κρυπτογράφησης σε αυτό το build.</string> + <string name="decrypt_success_dev">Τα δεδομένα αποκρυπτογραφήθηκαν, νέο μπλοκάρισμα συσκευής: '{1}'</string> + <string name="done">Έγινε.</string> + <string name="start_partition_sd">Διαχώριση κάρτας SD...</string> + <string name="partition_sd_locate">Δεν μπορείτε να εντοπίσετε η συσκευή για διαχωρισμό.</string> + <string name="ext_swap_size">EXT + Αλλαγή μεγέθους είναι μεγαλύτερο από το μέγεθος της κάρτας sd.</string> + <string name="remove_part_table">Κατάργηση πίνακα τομέων...</string> + <string name="unable_rm_part">Δεν είναι δυνατή η κατάργηση του πίνακα τομέων.</string> + <string name="create_part">Δημιουργία {1} τομέα...</string> + <string name="unable_to_create_part">Δεν είναι δυνατή η δημιουργία τομέα {1}.</string> + <string name="format_sdext_as">Διαμόρφωση sd-ext ως {1}...</string> + <string name="part_complete">Η Διαχώριση ολοκληρώθηκε.</string> + <string name="unable_to_open">Δεν είναι δυνατό το άνοιγμα '{1}'.</string> + <string name="mtp_already_enabled">Το MTP ενεργοποιήθηκε ήδη</string> + <string name="mtp_fail">Αποτυχία ενεργοποιήσεις MTP</string> + <string name="no_mtp">Δεν περιλαμβάνεται η υποστήριξη MTP</string> + <string name="image_flash_start">[ΕΓΓΡΑΦΗ ΕΙΚΟΝΑΣ ΞΕΚΙΝΗΣΕ]</string> + <string name="img_to_flash">Εικόνα για εγγραφή: '{1}'</string> + <string name="flash_unable_locate">Δεν μπορεί να εντοπιστεί ο '{1}' τομέας για εγγραφή.</string> + <string name="no_part_flash">Δεν επιλέχθηκαν τομείς για εγγραφή.</string> + <string name="too_many_flash">Έχουν επιλεγεί πολύ τομείς για εγγραφή.</string> + <string name="invalid_flash">Μη έγκυρη εγγραφή τομέα που καθορίζεται.</string> + <string name="flash_done">[ΕΓΓΡΑΦΗ ΕΙΚΟΝΑΣ ΟΛΟΚΛΗΡΩΘΗΚΕ]</string> + <string name="wiping">Εκκαθάριση {1}</string> + <string name="repair_not_exist">{1} δεν υπάρχει! Δεν μπορεί να επιδιορθώσει!</string> + <string name="repairing_using">Επιδιόρθωση {1} χρήση {2}...</string> + <string name="unable_repair">Δεν είναι δυνατή η επιδιόρθωση {1}.</string> + <string name="mount_data_footer">Δεν μπόρεσε να προσαρτηθεί το /data και είναι αδύνατη η εύρεση του κρύπτο υποσέλιδου.</string> + <string name="create_folder_strerr">Δεν μπόρεσε να δημιουργήσει '{1}' το φάκελο ({2}).</string> + <string name="fail_mount">Αποτυχία προσάρτησης '{1}' ({2})</string> + <string name="fail_unmount">Αποτυχία αποπροσάρτησης '{1}' ({2})</string> + <string name="cannot_resize">Δεν μπορεί να αλλαχθεί το μέγεθος {1}.</string> + <string name="repair_resize">Επιδιόρθωση {1} πριν την αλλαγή μεγέθους.</string> + <string name="unable_resize">Δεν είναι δυνατή η αλλαγή μεγέθους {1}.</string> + <string name="no_md5_found">Δεν βρέθηκε MD5 αρχείο για το '{1}'. Παρακαλώ απεπηλέξτε την επαλήθευση MD5 για επαναφορά.</string> + <string name="md5_fail_match">Το MD5 απέτυχε να ταυτίσει με το '{1}'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Αποτυχία αποκρυπτογράφησης του αρχείου tar '{1}'</string> + <string name="format_data_msg">Ίσως χρειαστεί να επανεκκινήσετε στο recovery για να ξαναχρησιμοποιήσετε το /data.</string> + <string name="format_data_err">Αδύνατη η διαμόρφωση για να καταργήσετε την κρυπτογράφηση.</string> + <string name="formatting_using">Διαμόρφωση {1} χρησιμοποιόντας {2}...</string> + <string name="unable_to_wipe">Αδυναμία εκκαθάρισης {1}.</string> + <string name="cannot_wipe">Ο Τομέας {1} δεν μπορεί να εκκαθαριστεί.</string> + <string name="remove_all">Διαγραφή όλων των αρχείων στο '{1}'</string> + <string name="wiping_data">Εκκαθάριση δεδομένων χωρίς την εκκαθάριση του /data/media ...</string> + <string name="backing_up">Δημιουργία Αντιγρ. Ασφαλ. {1}...</string> + <string name="backing">Δημιουργία Αντιγρ. Ασφαλ.</string> + <string name="backup_size">Μέγεθος αρχείο αντιγρ. ασφ. για το «{1}» είναι 0 bytes.</string> + <string name="datamedia_fs_restore">Προειδοποίηση: Αυτό το αντίγραφο ασφαλείας /data έγινε με το σύστημα αρχείων {1}! Η δημιουργία αντιγράφων ασφαλείας ενδέχεται να μην εκκίνηση, εκτός και αν επιστρέψετε στο {1}.</string> + <string name="restoring">Επαναφορά {1}...</string> + <string name="restoring_hdr">Επαναφορά</string> + <string name="recreate_folder_err">Δεν είναι δυνατή η ανασύνθεση του φακέλου {1}.</string> + <string name="img_size_err">Το μέγεθος της εικόνας είναι μεγαλύτερο από την συσκευή προορισμού</string> + <string name="flashing">Εγγραφή {1}...</string> + <string name="backup_folder_set">Φάκελος αντιγρ. ασφ. ορίστηκε το '{1}'</string> + <string name="locate_backup_err">Δεν μπόρεσενα εντοπιστεί το αντιγρ. ασφ. '{1}'</string> + <string name="set_restore_opt">Ρύθμιση επιλογών επαναφοράς: '{1}':</string> + <string name="md5_check_skip">Η παράλειψη ελέγχου MD5 είναι ενεργή</string> + <string name="ors_encrypt_restore_err">Δεν μπορεί να χρησιμοποιηθεί το OpenRecoveryScript για να επαναφέρετε ένα κρυπτογραφημένο αντίγραφο ασφαλείας.</string> + <string name="mounting">Προσάρτηση</string> + <string name="unmounting">Αποπροσάρτηση</string> + <string name="mounted">Προσαρτήθηκε '{1}'</string> + <string name="unmounted">Αποπροσαρτήθηκε '{1}'</string> + <string name="setting">Ρύθμιση '{1}' για '{2}'</string> + <string name="setting_empty">Ρύθμιση '{1}' για άδειασμα</string> + <string name="making_dir1">Δημιουργία φακέλου</string> + <string name="making_dir2">Δημιουργία φακέλου: '{1}'</string> + <string name="running_command">Εκτέλεση Εντολής</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Εκτέλεση ADB sideload...</string> + <string name="need_new_adb">Χρειάζεστε adb 1.0.32 ή νεότερο για sideload σε αυτήν τη συσκευή.</string> + <string name="no_pwd">Δεν παρέχεται κωδικός.</string> + <string name="done_ors">Έγινε επεξεργασία του αρχείου script</string> + <string name="injecttwrp">Εισαγωγή TWRP στην εικόνα εκκίνησης...</string> + <string name="zip_err">Σφάλμα κατά την εγκατάσταση του zip '{1}'</string> + <string name="installing_zip">Εγκατάσταση αρχείου zip '{1}'</string> + <string name="select_backup_opt">Ρύθμιση της δημιουργίας αντιγράφων ασφαλείας:</string> + <string name="compression_on">Η συμπίεση είναι ενεργή</string> + <string name="md5_off">Η δημιουργία MD5 είναι απενεργοποιημένη</string> + <string name="backup_fail">Η δημιουργία Αντίγραφου Ασφαλείας απέτυχε</string> + <string name="backup_clean">Η δημιουργία Αντίγρ. Ασφαλ. απέτυχε. Εκκαθάριση φακέλου.</string> + <string name="running_recovery_commands">Εκτέλεση Eντολών Recovery</string> + <string name="recovery_commands_complete">Οι Εντολές Recovery Ολοκληρώθηκαν</string> + <string name="running_ors">Εκτέλεση OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript Ολοκληρώθηκε</string> + <string name="no_updater_binary">Δεν βρέθηκε το '{1}' στο αρχείο zip.</string> + <string name="check_for_md5">Έλεγχος για MD5 αρχείο...</string> + <string name="fail_sysmap">Αποτυχία αντιστ. αρχείου '{1}'</string> + <string name="verify_zip_sig">Επαλήθευση υπογραφής zip...</string> + <string name="verify_zip_fail">Η επαλήθευση της υπογραφής zip απέτυχε!</string> + <string name="verify_zip_done">Η επαλήθευση της υπογραφής zip ολοκληρώθηκε.</string> + <string name="zip_corrupt">Το αρχείο zip είναι κατεστραμμένο!</string> + <string name="no_md5">Παράλειψη ελέγχου MD5: δεν βρέθηκε αρχείο MD5</string> + <string name="md5_fail">Τα MD5 δεν ταυτίζονται</string> + <string name="md5_match">Τα MD5 ταυτίζονται</string> + <string name="pid_signal">{1} διαδικασία τερματίστηκε με σήμα: {2}</string> + <string name="pid_error">{1} διαδικασία τερματίστηκε με ΣΦΑΛΜΑ: {2}</string> + <string name="install_dumlock">Εγκατάσταση HTC Dumlock στο σύστημα...</string> + <string name="dumlock_restore">Επαναφορά του Αρχικού Boot...</string> + <string name="dumlock_reflash">Επανεγγραφή recovery στο boot...</string> + <string name="run_script">Εκτέλεση {1} script...</string> + <string name="rename_stock">Μετονομασία αρχικού recovery στο /system για να αποτρέψετε την αντικατάσταση του TWRP από το λειτουργικό.</string> + <string name="split_backup">Σπάσιμο αντίγραφου ασφαλείας σε πολλαπλά αρχεία...</string> + <string name="backup_error">Σφάλμα κατά τη δημιουργία αντιγράφων ασφαλείας.</string> + <string name="restore_error">Σφάλμα κατά τη διαδικασία επαναφοράς.</string> + <string name="split_thread">Διάσπαση thread ID {1} στο αρχείο {2}</string> + <string name="file_progress">%llu από %llu αρχεία, %i%%</string> + <string name="size_progress">%lluMB από %lluMB, %i%%</string> + <string name="decrypt_cmd">Προσπάθεια αποκρυπτογράφησης τομέα δεδομένων μέσω της γραμμής εντολών.</string> + <string name="base_pkg_err">Απέτυχε η φόρτωση των βασικών πακέτων.</string> + <string name="simulating">Προσομοίωση ενεργειών...</string> + <string name="backup_cancel">Δημιουργία αντιγρ. ασφ. ακυρώθηκε</string> + <string name="config_twrp">Ρύθμιση παραμέτρων TWRP...</string> + <string name="config_twrp_err">Αδύνατη ρύθμιση TWRP με αυτό το kernel.</string> + <string name="copy_log">Αντιγραφή καταγραφής αποκατάστασης στο {1}.</string> + <string name="max_queue">Μέγιστος αριθμός zip!</string> + <string name="min_queue">Ελάχιστος αριθμός zip!</string> + <string name="screenshot_saved">Το στιγμιότυπο αποθηκεύτηκε στο {1}</string> + <string name="screenshot_err">Απέτυχε η λήψη στιγμιότυπου οθόνης!</string> + <string name="zip_wipe_cache">Ένα ή περισσότερα zip ζήτησε εκκαθάριση cache -- Εκκαθάριση cache τώρα.</string> + <string name="and_sec_wipe_err">Αποτυχία εκκαθάρισης android secure</string> + <string name="dalvik_wipe_err">Αποτυχία εκκαθάρισης dalvik</string> + <string name="auto_gen">(Αυτόματη δημιουργία)</string> + <string name="curr_date">(Τρέχουσα ημερομηνία)</string> + <string name="backup_name_len">Το όνομα του αντίγραφου ασφαλείας είναι πολύ μεγάλο.</string> + <string name="backup_name_invalid">Το όνομα αντ. ασφ. '{1}' περιέχει μη έγκυρους χαρακτήρες: '{1}'</string> + <string name="no_real_sdcard">Αυτή η συσκευή δεν έχει πραγματική κάρτα SD! Ματαίωση!</string> + <string name="cancel_sideload">Ακύρωση ADB sideload...</string> + <string name="change_fs_err">Σφάλμα στην αλλαγή αρχείων συστήματος.</string> + <string name="theme_ver_err">Η έκδοση του θέματος δεν ταιριάζει με αυτή του TWRP. Χρήση προεπιλεγμένου θέματος.</string> + <string name="up_a_level">(προηγ. επίπεδο)</string> + <string name="install_reboot">Επανεκκίνηση σε 5 δευτ.</string> + </resources> +</language>
\ No newline at end of file diff --git a/gui/theme/common/languages/en.xml b/gui/theme/common/languages/en.xml new file mode 100644 index 000000000..c14c3466e --- /dev/null +++ b/gui/theme/common/languages/en.xml @@ -0,0 +1,696 @@ +<?xml version="1.0"?> + +<language> + <display>English</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">System Image</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor Image</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data (excl. storage)</string> + <string name="sdcard">SDCard</string> + <string name="internal">Internal Storage</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted Storage</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Battery: %tw_battery%</string> + <string name="sort_by_name">Sort by Name</string> + <string name="sort_by_date">Sort by Date</string> + <string name="sort_by_size">Sort by Size</string> + <string name="sort_by_name_only">Name</string> + <string name="sort_by_date_only">Date</string> + <string name="sort_by_size_only">Size</string> + <string name="tab_general">GENERAL</string> + <string name="tab_options">OPTIONS</string> + <string name="tab_backup">BACKUP</string> + <string name="tab_time_zone">TIME ZONE</string> + <string name="tab_screen">SCREEN</string> + <string name="tab_vibration">VIBRATION</string> + <string name="tab_language">LANGUAGE</string> + + <string name="install_btn">Install</string> + <string name="wipe_btn">Wipe</string> + <string name="backup_btn">Backup</string> + <string name="restore_btn">Restore</string> + <string name="mount_btn">Mount</string> + <string name="settings_btn">Settings</string> + <string name="advanced_btn">Advanced</string> + <string name="reboot_btn">Reboot</string> + <string name="files_btn">Files</string> + <string name="copy_log_btn">Copy Log</string> + <string name="select_type_hdr">Select Type</string> + <string name="install_zip_hdr">Install Zip</string> + <string name="install_zip_btn">Install Zip</string> + <string name="install_image_hdr">Install Image</string> + <string name="install_image_btn">Install Image</string> + <string name="install_select_file_hdr">Select File</string> + <string name="file_selector_folders_hdr">Folders</string> + <string name="select_file_from_storage">Select File from %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Install</string> + <string name="select_storage_hdr">Select Storage</string> + <string name="select_storage_btn">Select Storage</string> + <string name="queue_hdr">Queue</string> + <string name="zip_queue_count">%tw_zip_queue_count% of max of 10 Files queued</string> + <string name="zip_queue_count_s">File %tw_zip_queue_count% of 10:</string> + <string name="zip_warn1">This operation may install incompatible</string> + <string name="zip_warn2">software and render your device unusable.</string> + <string name="zip_back_cancel">Press back to cancel adding this zip.</string> + <string name="zip_back_clear">Press back button to clear the queue.</string> + <string name="folder">Folder:</string> + <string name="file">File:</string> + <string name="zip_sig_chk">Zip signature verification</string> + <string name="inject_twrp_chk">Inject TWRP after install</string> + <string name="install_reboot_chk">Reboot after installation is complete</string> + <string name="options_hdr">Options</string> + <string name="confirm_flash_hdr">Confirm Flash</string> + <string name="zip_queue">Queue:</string> + <string name="options">Options:</string> + <string name="swipe_confirm"> Confirm</string> + <string name="zip_add_btn">Add more Zips</string> + <string name="zip_clear_btn">Clear Zip Queue</string> + <string name="install_zip_count_hdr">Install Zip %tw_zip_index% of %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Installing Zip: %tw_file%</string> + <string name="failed">Failed</string> + <string name="successful">Successful</string> + <string name="install_failed">Installation Failed</string> + <string name="install_successful">Installation Successful</string> + <string name="wipe_cache_dalvik_btn">Wipe cache/dalvik</string> + <string name="reboot_system_btn">Reboot System</string> + <string name="install_sel_target">Select Target Partition</string> + <string name="flash_image_select">Select Partition to Flash Image:</string> + <string name="target_partition">Target Partition:</string> + <string name="flashing_image">Flashing Image...</string> + <string name="image_flashed">Image Flashed</string> + <string name="wipe_cache_dalvik_confirm">Wipe Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Wiping Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Cache & Dalvik Wipe Complete</string> + <string name="swipe_wipe">Swipe to Wipe</string> + <string name="swipe_wipe_s"> Wipe</string> + <string name="no_os1">No OS Installed! Are you</string> + <string name="no_osrb">sure you wish to reboot?</string> + <string name="no_ospo">sure you wish to power off?</string> + <string name="rebooting">Rebooting...</string> + <string name="swipe_reboot">Swipe to Reboot</string> + <string name="swipe_reboot_s"> Reboot</string> + <string name="reboot_install_app_hdr">Install TWRP App?</string> + <string name="reboot_install_app1">Would you like to install the Official TWRP App?</string> + <string name="reboot_install_app2">The app can check for new TWRP versions.</string> + <string name="reboot_install_app_prompt_install">Prompt to install TWRP app if not installed</string> + <string name="reboot_install_app_system">Install as a System App</string> + <string name="reboot_installing_app">Installing App...</string> + <string name="swipe_to_install_app">Swipe to Install TWRP App</string> + <string name="swipe_flash">Swipe to confirm Flash</string> + <string name="confirm_action">Confirm Action</string> + <string name="back_cancel">Press back button to cancel.</string> + <string name="cancel_btn">Cancel</string> + <string name="wipe_hdr">Wipe</string> + <string name="factory_reset_hdr">Factory Reset</string> + <string name="factory_reset_btn">Factory Reset</string> + <string name="factory_reset1">Wipes Data, Cache, and Dalvik</string> + <string name="factory_reset2">(not including internal storage)</string> + <string name="factory_reset3">Most of the time this is</string> + <string name="factory_reset4">the only wipe that you need.</string> + <string name="factory_resetting">Factory Reset...</string> + <string name="advanced_wipe_hdr">Advanced Wipe</string> + <string name="advanced_wipe_btn">Advanced Wipe</string> + <string name="wipe_enc_confirm">Wipe Encryption from Data?</string> + <string name="formatting_data">Formatting Data...</string> + <string name="swipe_format_data">Swipe to Format Data</string> + <string name="swipe_format_data_s"> Format Data</string> + <string name="factory_reset_complete">Factory Reset Complete</string> + <string name="sel_part_hdr">Select Partitions</string> + <string name="wipe_sel_confirm">Wipe Selected Partition(s)?</string> + <string name="wiping_part">Wiping Partition(s)...</string> + <string name="wipe_complete">Wipe Complete</string> + <string name="sel_part_wipe">Select Partitions to Wipe:</string> + <string name="invalid_part_sel">Invalid partition selection</string> + <string name="format_data_hdr">Format Data</string> + <string name="format_data_btn">Format Data</string> + <string name="format_data_ptr1">Format Data will wipe all of your apps,</string> + <string name="format_data_ptr2">backups, pictures, videos, media, and</string> + <string name="format_data_ptr3">removes encryption on internal storage.</string> + <string name="format_data_adopted">Including Adopted Storage</string> + <string name="format_data_lcp1">Format Data will wipe all of your apps, backups, pictures, videos, media, and</string> + <string name="format_data_lcp2">removes encryption on internal storage.</string> + <string name="format_data_wtc1">Format Data will wipe all of your apps,</string> + <string name="format_data_wtc2">backups and media. This cannot be undone.</string> + <string name="format_data_undo">This cannot be undone.</string> + <string name="format_data_complete">Data Format Complete</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Type yes to continue. Press back to cancel.</string> + <string name="part_opt_hdr">Partition Options for: %tw_partition_name%</string> + <string name="sel_act_hdr">Select Action</string> + <string name="file_sys_opt">File System Options</string> + <string name="partition">Partition: %tw_partition_name%</string> + <string name="part_mount_point">Mount Point: %tw_partition_mount_point%</string> + <string name="part_curr_fs">File system: %tw_partition_file_system%</string> + <string name="part_present_yes">Present: Yes</string> + <string name="part_present_no">Present: No</string> + <string name="part_removable_yes">Removable: Yes</string> + <string name="part_removable_no">Removable: No</string> + <string name="part_size">Size: %tw_partition_size%MB</string> + <string name="part_used">Used: %tw_partition_used%MB</string> + <string name="part_free">Free: %tw_partition_free%MB</string> + <string name="part_backup_size">Backup Size: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Resize File System</string> + <string name="resize_btn_s">Resize</string> + <string name="resize_confirm">Resize %tw_partition_name%?</string> + <string name="resizing">Resizing...</string> + <string name="resize_complete">Resize Complete</string> + <string name="swipe_resize">Swipe to Resize</string> + <string name="swipe_resize_s"> Resize</string> + <string name="repair_btn">Repair File System</string> + <string name="repair_btn_s">Repair</string> + <string name="repair_confirm">Repair %tw_partition_name%?</string> + <string name="repairing">Repairing...</string> + <string name="repair_complete">Repair Complete</string> + <string name="swipe_repair">Swipe to Repair</string> + <string name="swipe_repair_s"> Repair</string> + <string name="change_fs_btn">Change File System</string> + <string name="change_fs_btn_s">Change</string> + <string name="change_fs_for_hdr">Change File System for: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partition: %tw_partition_name% > Select File System</string> + <string name="change_fs_warn1">Some ROMs or kernels may not support some</string> + <string name="change_fs_warn2">file systems. Proceed with caution!</string> + <string name="change_fs_confirm">Change %tw_partition_name%?</string> + <string name="formatting">Formatting...</string> + <string name="format_complete">Format Complete</string> + <string name="swipe_change_fs">Swipe to Change</string> + <string name="swipe_change_s"> Change</string> + <string name="back_btn">Back</string> + <string name="wipe_enc_btn">Wipe Encryption</string> + <string name="swipe_factory_reset">Swipe to Factory Reset</string> + <string name="repair_change_btn">Repair or Change File System</string> + <string name="storage_hdr">Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Backup</string> + <string name="backup_confirm_hdr">Confirm Backup</string> + <string name="encryption_tab">ENCRYPTION</string> + <string name="encryption">Encryption:</string> + <string name="name">Name:</string> + <string name="sel_part_backup">Select Partitions to Backup:</string> + <string name="storage">Storage:</string> + <string name="enc_disabled">disabled - set a password to enable</string> + <string name="enc_enabled">enabled</string> + <string name="enable_backup_comp_chk">Enable compression</string> + <string name="skip_md5_backup_chk">Skip MD5 generation during backup</string> + <string name="disable_backup_space_chk" version="2">Disable free space check before backup</string> + <string name="current_boot_slot">Current Slot: %tw_active_slot%</string> + <string name="boot_slot_a">Slot A</string> + <string name="boot_slot_b">Slot B</string> + <string name="changing_boot_slot">Changing Boot Slot</string> + <string name="changing_boot_slot_complete">Changing Boot Slot Complete</string> + <string name="refresh_sizes_btn">Refresh Sizes</string> + <string name="swipe_backup">Swipe to Backup</string> + <string name="append_date_btn">Append Date</string> + <string name="backup_name_exists">A backup with that name already exists!</string> + <string name="encrypt_backup">Encrypt your Backup?</string> + <string name="enter_pass">Enter Password:</string> + <string name="enter_pass2">Enter Password Again:</string> + <string name="pass_not_match">Passwords do not match!</string> + <string name="partitions">Partitions:</string> + <string name="disabled">Disabled</string> + <string name="enabled">Enabled</string> + <string name="backup_name_hdr">Set Backup Name</string> + <string name="progress">Progress:</string> + <string name="backup_complete">Backup Complete</string> + <string name="restore_hdr">Restore</string> + <string name="sel_backup_hdr">Select Backup</string> + <string name="restore_sel_store_hdr">Select Backup from %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Select Package to Restore:</string> + <string name="restore_enc_backup_hdr">Encrypted Backup</string> + <string name="restore_dec_fail">Password failed, please try again!</string> + <string name="del_backup_btn">Delete Backup</string> + <string name="del_backup_confirm">Delete Backup?</string> + <string name="del_backup_confirm2">This cannot be undone!</string> + <string name="deleting_backup">Deleting Backup...</string> + <string name="backup_deleted">Backup Delete Complete</string> + <string name="swipe_delete">Swipe to Delete</string> + <string name="swipe_delete_s"> Delete</string> + <string name="restore_try_decrypt">Encrypted Backup - Trying Decryption</string> + <string name="restore_try_decrypt_s">Trying Decryption</string> + <string name="restore_backup_date">Backup made on %tw_restore_file_date%</string> + <string name="restore_sel_part">Select Partitions to Restore:</string> + <string name="restore_enable_md5_chk">Enable MD5 Verification of Backup Files</string> + <string name="restore_complete">Restore Complete</string> + <string name="swipe_restore">Swipe to Restore</string> + <string name="swipe_restore_s"> Restore</string> + <string name="rename_backup_hdr">Rename Backup</string> + <string name="rename_backup_confirm">Rename Backup?</string> + <string name="rename_backup_confirm2">This cannot be undone!</string> + <string name="renaming_backup">Renaming Backup...</string> + <string name="rename_backup_complete">Backup Rename Complete</string> + <string name="swipe_to_rename">Swipe to Rename</string> + <string name="swipe_rename"> Rename</string> + <string name="confirm_hdr">Confirm</string> + <string name="mount_hdr">Mount</string> + <string name="mount_sel_part">Select Partitions to Mount:</string> + <string name="mount_sys_ro_chk">Mount system partition read-only</string> + <string name="mount_sys_ro_s_chk">Mount System RO</string> + <string name="decrypt_data_btn">Decrypt Data</string> + <string name="disable_mtp_btn">Disable MTP</string> + <string name="enable_mtp_btn">Enable MTP</string> + <string name="mount_usb_storage_btn">Mount USB Storage</string> + <string name="usb_storage_hdr">USB Storage</string> + <string name="usb_stor_mnt1">USB Storage Mounted</string> + <string name="usb_stor_mnt2">Be sure to safely remove your device</string> + <string name="usb_stor_mnt3">from your computer before unmounting!</string> + <string name="unmount_btn">Unmount</string> + <string name="rb_system_btn">System</string> + <string name="rb_poweroff_btn">Power Off</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">Turning Off...</string> + <string name="swipe_power_off">Swipe to Power Off</string> + <string name="swipe_power_off_s">Power Off</string> + <string name="sys_ro_hdr">Unmodified System Partition</string> + <string name="sys_ro_keep">Keep System Read only?</string> + <string name="sys_rop1">TWRP can leave your system partition unmodified</string> + <string name="sys_rop2">to make it easier for you to take official updates.</string> + <string name="sys_rop3">TWRP will be unable to prevent the stock ROM from</string> + <string name="sys_rop4">replacing TWRP and will not offer to root your device.</string> + <string name="sys_rop5">Installing zips or performing adb operations may still</string> + <string name="sys_rop6">modify the system partition.</string> + <string name="sys_rol1">TWRP can leave your system partition unmodified to make it easier for you to take official updates.</string> + <string name="sys_rol2">TWRP will be unable to prevent the stock ROM from replacing TWRP and will not offer to root your device.</string> + <string name="sys_rol3">Installing zips or performing adb operations may still modify the system partition.</string> + <string name="sys_ro_never_show_chk">Never show this screen during boot again</string> + <string name="sys_ro_keep_ro_btn">Keep Read Only</string> + <string name="swipe_allow_mod">Swipe to Allow Modifications</string> + <string name="swipe_allow_mod_s">Allow Modifications</string> + <string name="settings_hdr">Settings</string> + <string name="settings_gen_hdr">General</string> + <string name="settings_gen_s_hdr">General</string> + <string name="settings_gen_btn">General</string> + <string name="use_rmrf_chk">Use rm -rf instead of formatting</string> + <string name="use24clock_chk">Use 24-hour clock</string> + <string name="rev_navbar_chk">Reversed navbar layout</string> + <string name="simact_chk">Simulate actions for theme testing</string> + <string name="simfail_chk">Simulate failure for actions</string> + <string name="ctr_navbar_rdo">Center navbar buttons</string> + <string name="lft_navbar_rdo">Left align navbar buttons</string> + <string name="rht_navbar_rdo">Right align navbar buttons</string> + <string name="restore_defaults_btn">Restore Defaults</string> + <string name="settings_tz_btn">Time Zone</string> + <string name="settings_screen_btn">Screen</string> + <string name="settings_screen_bright_btn">Screen Brightness</string> + <string name="settings_vibration_btn">Vibration</string> + <string name="settings_language_btn">Language</string> + <string name="time_zone_hdr">Time Zone</string> + <string name="sel_tz_list">Select Time Zone:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Central Time</string> + <string name="utcm5">(UTC -5) Eastern Time</string> + <string name="utcm4">(UTC -4) Atlantic Time</string> + <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbon</string> + <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string> + <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string> + <string name="utcp3">(UTC +3) Moscow, Baghdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Eastern Australia, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Select Offset (usually 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">None</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Use daylight savings time (DST)</string> + <string name="curr_tz">Current Time Zone: %tw_time_zone%</string> + <string name="curr_tz_s">Current Time Zone:</string> + <string name="set_tz_btn">Set Time Zone</string> + <string name="settings_screen_hdr">Screen</string> + <string name="settings_screen_timeout_hdr">Screen Timeout</string> + <string name="enable_timeout_chk">Enable screen timeout</string> + <string name="screen_to_slider">Screen timeout in seconds:</string> + <string name="screen_to_slider_s">Screen timeout in seconds (0=disabled): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Screen timeout setting unavailable</string> + <string name="screen_bright_slider">Brightness: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Brightness setting unavailable</string> + <string name="vibration_hdr">Vibration</string> + <string name="button_vibration_hdr">Button Vibration</string> + <string name="kb_vibration_hdr">Keyboard Vibration</string> + <string name="act_vibration_hdr">Action Vibration</string> + <string name="button_vibration">Button Vibration:</string> + <string name="kb_vibration">Keyboard Vibration:</string> + <string name="act_vibration">Action Vibration:</string> + <string name="select_language">Select Language:</string> + <string name="sel_lang_btn">Select Language</string> + <string name="set_language_btn">Set Language</string> + <string name="advanced_hdr">Advanced</string> + <string name="copy_log_confirm">Copy Log to SD Card?</string> + <string name="copying_log" version="2">Copying Logs to SD Card...</string> + <string name="copy_log_complete" version="2">Logs Copy Complete</string> + <string name="fix_context_btn">Fix Contexts</string> + <string name="part_sd_btn">Partition SD Card</string> + <string name="part_sd_s_btn">SD Card</string> + <string name="file_manager_btn">File Manager</string> + <string name="language_hdr">Language</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Reload Theme</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Inject TWRP</string> + <string name="inject_twrp_confirm">Re-Inject TWRP?</string> + <string name="injecting_twrp">Re-Injecting TWRP...</string> + <string name="inject_twrp_complete">TWRP Injection Complete</string> + <string name="swipe_to_confirm">Swipe to Confirm</string> + <string name="part_sd_hdr">Partition SD Card</string> + <string name="invalid_partsd_sel">You must select a removable device</string> + <string name="part_sd_lose">You will lose all files on your SD card!</string> + <string name="part_sd_undo">This action cannot be undone!</string> + <string name="part_sd_ext_sz">EXT Size:</string> + <string name="part_sd_swap_sz">Swap Size:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">File System:</string> + <string name="swipe_part_sd">Swipe to Partition</string> + <string name="swipe_part_sd_s">Partition</string> + <string name="partitioning_sd">Partitioning SD Card...</string> + <string name="partitioning_sd2">This will take a few minutes.</string> + <string name="part_sd_complete">Partitioning Complete</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Restore Original Boot</string> + <string name="dumlock_restore_confirm">Restore original boot image?</string> + <string name="dumlock_restoring">Restoring Original Boot...</string> + <string name="dumlock_restore_complete">Restore Original Boot Complete</string> + <string name="dumlock_reflash_btn">Reflash Recovery</string> + <string name="dumlock_reflash_confirm">Reflash recovery to boot?</string> + <string name="dumlock_reflashing">Flashing recovery to boot...</string> + <string name="dumlock_reflash_complete">Recovery Flash to Boot Complete</string> + <string name="dumlock_install_btn">Install HTC Dumlock</string> + <string name="dumlock_install_confirm">Install HTC dumlock files to ROM?</string> + <string name="dumlock_installing">Installing HTC Dumlock...</string> + <string name="dumlock_install_complete">HTC Dumlock Install Complete</string> + <string name="swipe_to_unlock">Swipe to Unlock</string> + <string name="swipe_unlock"> Unlock</string> + <string name="fm_hdr">File Manager</string> + <string name="fm_sel_file">Select a File or Folder</string> + <string name="fm_type_folder">Folder</string> + <string name="fm_type_file">File</string> + <string name="fm_choose_act">Choose Action</string> + <string name="fm_selected">%tw_fm_type% selected:</string> + <string name="fm_copy_btn">Copy</string> + <string name="fm_copy_file_btn">Copy File</string> + <string name="fm_copy_folder_btn">Copy Folder</string> + <string name="fm_copying">Copying</string> + <string name="fm_move_btn">Move</string> + <string name="fm_moving">Moving</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Delete</string> + <string name="fm_deleting">Deleting</string> + <string name="fm_rename_btn">Rename</string> + <string name="fm_rename_file_btn">Rename File</string> + <string name="fm_rename_folder_btn">Rename Folder</string> + <string name="fm_renaming">Renaming</string> + <string name="fm_sel_dest">Select Destination Folder</string> + <string name="fm_sel_curr_folder">Select Current Folder</string> + <string name="fm_rename_hdr">Rename</string> + <string name="fm_set_perms_hdr">Set Permissions</string> + <string name="fm_perms">Permissions:</string> + <string name="fm_complete">File Operation Complete</string> + <string name="decrypt_data_hdr">Decrypt Data</string> + <string name="decrypt_data_enter_pass">Enter Password.</string> + <string name="decrypt_data_failed">Password failed, please try again!</string> + <string name="decrypt_data_failed_pattern">Pattern failed, please try again!</string> + <string name="decrypt_data_enter_pattern">Enter Pattern.</string> + <string name="decrypt_data_trying">Trying Decryption</string> + <string name="decrypt_data_vold_os_missing">Missing files needed for vold decrypt: {1}</string> + <string name="term_hdr">Terminal Command</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">KILL</string> + <string name="term_sel_folder_hdr">Browse to Starting Folder</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Wipe Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Wipe Cache</string> + <string name="swipe_to_sideload">Swipe to Start Sideload</string> + <string name="swipe_sideload"> Start</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Usage: adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload Complete</string> + <string name="fix_contexts_hdr">Fix Contexts</string> + <string name="fix_contexts_note1">Note: Fixing contexts is rarely needed.</string> + <string name="fix_contexts_note2">Fixing SELinux Contexts may cause</string> + <string name="fix_contexts_note3">your device to not boot properly.</string> + <string name="swipe_to_fix_contexts">Swipe to Fix Contexts</string> + <string name="swipe_fix_contexts"> Fix Contexts</string> + <string name="fixing_contexts">Fixing Contexts...</string> + <string name="fix_contexts_complete">Fix Contexts Complete</string> + <string name="reboot_hdr">Reboot</string> + <string name="su_hdr">SuperSU Check</string> + <string name="su_note1">Your device does not appear to be rooted.</string> + <string name="su_note2">Install SuperSU now?</string> + <string name="su_note3">This will root your device.</string> + <string name="su_cancel">Do Not Install</string> + <string name="swipe_su_to_install">Swipe to Install</string> + <string name="swipe_su_install"> Install</string> + <string name="su_installing">Installing SuperSU</string> + <string name="sel_storage_list">Select Storage</string> + <string name="ok_btn">OK</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Kernel does not have support for reading SELinux contexts.</string> + <string name="full_selinux">Full SELinux support is present.</string> + <string name="no_selinux">No SELinux support (no libselinux).</string> + <string name="mtp_enabled">MTP Enabled</string> + <string name="mtp_crash">MTP Crashed, not starting MTP on boot.</string> + <string name="decrypt_success">Successfully decrypted with default password.</string> + <string name="unable_to_decrypt">Unable to decrypt with default password. You may need to perform a Format Data.</string> + <string name="generating_md51">Generating MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * Generating md5...</string> + <string name="md5_created"> * MD5 Created.</string> + <string name="md5_error"> * MD5 Error!</string> + <string name="md5_compute_error"> * Error computing MD5.</string> + <string name="current_date">(Current Date)</string> + <string name="auto_generate">(Auto Generate)</string> + <string name="unable_to_locate_partition">Unable to locate '{1}' partition for backup calculations.</string> + <string name="no_partition_selected">No partitions selected for backup.</string> + <string name="total_partitions_backup"> * Total number of partitions to back up: {1}</string> + <string name="total_backup_size"> * Total size of all data: {1}MB</string> + <string name="available_space"> * Available space: {1}MB</string> + <string name="unable_locate_storage">Unable to locate storage device.</string> + <string name="no_space">Not enough free space on storage.</string> + <string name="backup_started">[BACKUP STARTED]</string> + <string name="backup_folder"> * Backup Folder: {1}</string> + <string name="fail_backup_folder">Failed to make backup folder.</string> + <string name="avg_backup_fs">Average backup rate for file systems: {1} MB/sec</string> + <string name="avg_backup_img">Average backup rate for imaged drives: {1} MB/sec</string> + <string name="total_backed_size">[{1} MB TOTAL BACKED UP]</string> + <string name="backup_completed">[BACKUP COMPLETED IN {1} SECONDS]</string> + <string name="restore_started">[RESTORE STARTED]</string> + <string name="restore_folder">Restore folder: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} done ({2} seconds)]</string> + <string name="verifying_md5">Verifying MD5</string> + <string name="skip_md5">Skipping MD5 check based on user setting.</string> + <string name="calc_restore">Calculating restore details...</string> + <string name="restore_read_only">Cannot restore {1} -- mounted read only.</string> + <string name="restore_unable_locate">Unable to locate '{1}' partition for restoring.</string> + <string name="no_part_restore">No partitions selected for restore.</string> + <string name="restore_part_count">Restoring {1} partitions...</string> + <string name="total_restore_size">Total restore size is {1}MB</string> + <string name="updating_system_details">Updating System Details</string> + <string name="restore_completed">[RESTORE COMPLETED IN {1} SECONDS]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Error opening: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Unable to locate partition by backup name: '{1}'</string> + <string name="unable_find_part_path">Unable to find partition for path '{1}'</string> + <string name="update_part_details">Updating partition details...</string> + <string name="update_part_details_done">...done</string> + <string name="wiping_dalvik">Wiping Dalvik Cache Directories...</string> + <string name="cleaned">Cleaned: {1}...</string> + <string name="dalvik_done">-- Dalvik Cache Directories Wipe Complete!</string> + <string name="no_andsec">No android secure partitions found.</string> + <string name="unable_to_locate">Unable to locate {1}.</string> + <string name="wiping_datamedia">Wiping internal storage -- /data/media...</string> + <string name="unable_to_mount">Unable to mount {1}</string> + <string name="unable_to_mount_internal">Unable to mount internal_storage</string> + <string name="unable_to_mount_storage">Unable to mount storage</string> + <string name="fail_decrypt">Failed to decrypt data.</string> + <string name="no_crypto_support">No crypto support was compiled into this build.</string> + <string name="decrypt_success_dev">Data successfully decrypted, new block device: '{1}'</string> + <string name="decrypt_success_nodev">Data successfully decrypted</string> + <string name="done">Done.</string> + <string name="start_partition_sd">Partitioning SD Card...</string> + <string name="partition_sd_locate">Unable to locate device to partition.</string> + <string name="ext_swap_size">EXT + Swap size is larger than sdcard size.</string> + <string name="remove_part_table">Removing partition table...</string> + <string name="unable_rm_part">Unable to remove partition table.</string> + <string name="create_part">Creating {1} partition...</string> + <string name="unable_to_create_part">Unable to create {1} partition.</string> + <string name="format_sdext_as">Formatting sd-ext as {1}...</string> + <string name="part_complete">Partitioning complete.</string> + <string name="unable_to_open">Unable to open '{1}'.</string> + <string name="mtp_already_enabled">MTP already enabled</string> + <string name="mtp_fail">Failed to enable MTP</string> + <string name="no_mtp">MTP support not included</string> + <string name="image_flash_start">[IMAGE FLASH STARTED]</string> + <string name="img_to_flash">Image to flash: '{1}'</string> + <string name="flash_unable_locate">Unable to locate '{1}' partition for flashing.</string> + <string name="no_part_flash">No partitions selected for flashing.</string> + <string name="too_many_flash">Too many partitions selected for flashing.</string> + <string name="invalid_flash">Invalid flash partition specified.</string> + <string name="flash_done">[IMAGE FLASH COMPLETED]</string> + <string name="wiping">Wiping {1}</string> + <string name="repair_not_exist">{1} does not exist! Cannot repair!</string> + <string name="repairing_using">Repairing {1} using {2}...</string> + <string name="unable_repair">Unable to repair {1}.</string> + <string name="mount_data_footer">Could not mount /data and unable to find crypto footer.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Can not create '{1}' folder ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">Failed to mount '{1}' ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">Failed to unmount '{1}' ({2})</string> + <string name="cannot_resize">Cannot resize {1}.</string> + <string name="repair_resize">Repairing {1} before resizing.</string> + <string name="unable_resize">Unable to resize {1}.</string> + <string name="no_md5_found">No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.</string> + <string name="md5_fail_match">MD5 failed to match on '{1}'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Failed to decrypt tar file '{1}'</string> + <string name="format_data_msg">You may need to reboot recovery to be able to use /data again.</string> + <string name="format_data_err">Unable to format to remove encryption.</string> + <string name="formatting_using">Formatting {1} using {2}...</string> + <string name="unable_to_wipe">Unable to wipe {1}.</string> + <string name="cannot_wipe">Partition {1} cannot be wiped.</string> + <string name="remove_all">Removing all files under '{1}'</string> + <string name="wiping_data">Wiping data without wiping /data/media ...</string> + <string name="backing_up">Backing up {1}...</string> + <string name="backup_storage_warning">Backups of {1} do not include any files in internal storage such as pictures or downloads.</string> + <string name="backing">Backing Up</string> + <string name="backup_size">Backup file size for '{1}' is 0 bytes.</string> + <string name="datamedia_fs_restore">WARNING: This /data backup was made with {1} file system! The backup may not boot unless you change back to {1}.</string> + <string name="restoring">Restoring {1}...</string> + <string name="restoring_hdr">Restoring</string> + <string name="recreate_folder_err">Unable to recreate {1} folder.</string> + <string name="img_size_err">Size of image is larger than target device</string> + <string name="flashing">Flashing {1}...</string> + <string name="backup_folder_set">Backup folder set to '{1}'</string> + <string name="locate_backup_err">Unable to locate backup '{1}'</string> + <string name="set_restore_opt">Setting restore options: '{1}':</string> + <string name="md5_check_skip">MD5 check skip is on</string> + <string name="ors_encrypt_restore_err">Unable to use OpenRecoveryScript to restore an encrypted backup.</string> + <string name="mounting">Mounting</string> + <string name="unmounting">Unmounting</string> + <string name="mounted">Mounted '{1}'</string> + <string name="unmounted">Unmounted '{1}'</string> + <string name="setting">Setting '{1}' to '{2}'</string> + <string name="setting_empty">Setting '{1}' to empty</string> + <string name="making_dir1">Making Directory</string> + <string name="making_dir2">Making directory: '{1}'</string> + <string name="running_command">Running Command</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Starting ADB sideload feature...</string> + <string name="need_new_adb">You need adb 1.0.32 or newer to sideload to this device.</string> + <string name="no_pwd">No password provided.</string> + <string name="done_ors">Done processing script file</string> + <string name="injecttwrp">Injecting TWRP into boot image...</string> + <string name="zip_err">Error installing zip file '{1}'</string> + <string name="installing_zip">Installing zip file '{1}'</string> + <string name="select_backup_opt">Setting backup options:</string> + <string name="compression_on">Compression is on</string> + <string name="md5_off">MD5 Generation is off</string> + <string name="backup_fail">Backup Failed</string> + <string name="backup_clean">Backup Failed. Cleaning Backup Folder.</string> + <string name="running_recovery_commands">Running Recovery Commands</string> + <string name="recovery_commands_complete">Recovery Commands Complete</string> + <string name="running_ors">Running OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript Complete</string> + <string name="invalid_zip_format">Invalid zip file format!</string> + <string name="check_for_md5">Checking for MD5 file...</string> + <string name="fail_sysmap">Failed to map file '{1}'</string> + <string name="verify_zip_sig">Verifying zip signature...</string> + <string name="verify_zip_fail">Zip signature verification failed!</string> + <string name="verify_zip_done">Zip signature verified successfully.</string> + <string name="zip_corrupt">Zip file is corrupt!</string> + <string name="no_md5">Skipping MD5 check: no MD5 file found</string> + <string name="md5_fail">MD5 does not match</string> + <string name="md5_match">MD5 matched</string> + <string name="pid_signal">{1} process ended with signal: {2}</string> + <string name="pid_error">{1} process ended with ERROR: {2}</string> + <string name="install_dumlock">Installing HTC Dumlock to system...</string> + <string name="dumlock_restore">Restoring original boot...</string> + <string name="dumlock_reflash">Reflashing recovery to boot...</string> + <string name="run_script">Running {1} script...</string> + <string name="rename_stock">Renamed stock recovery file in /system to prevent the stock ROM from replacing TWRP.</string> + <string name="split_backup">Breaking backup file into multiple archives...</string> + <string name="backup_error">Error creating backup.</string> + <string name="restore_error">Error during restore process.</string> + <string name="split_thread">Splitting thread ID {1} into archive {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu of %llu files, %i%%</string> + <string name="size_progress">%lluMB of %lluMB, %i%%</string> + <string name="decrypt_cmd">Attempting to decrypt data partition via command line.</string> + <string name="base_pkg_err">Failed to load base packages.</string> + <string name="simulating">Simulating actions...</string> + <string name="backup_cancel">Backup Cancelled</string> + <string name="config_twrp">Configuring TWRP...</string> + <string name="config_twrp_err">Unable to configure TWRP with this kernel.</string> + <string name="copy_log">Copied recovery log to {1}.</string> + <string name="max_queue">Maximum zip queue reached!</string> + <string name="min_queue">Minimum zip queue reached!</string> + <string name="screenshot_saved">Screenshot was saved to {1}</string> + <string name="screenshot_err">Failed to take a screenshot!</string> + <string name="zip_wipe_cache">One or more zip requested a cache wipe -- Wiping cache now.</string> + <string name="and_sec_wipe_err">Unable to wipe android secure</string> + <string name="dalvik_wipe_err">Failed to wipe dalvik</string> + <string name="auto_gen">(Auto Generate)</string> + <string name="curr_date">(Current Date)</string> + <string name="backup_name_len">Backup name is too long.</string> + <string name="backup_name_invalid">Backup name '{1}' contains invalid character: '{1}'</string> + <string name="no_real_sdcard">This device does not have a real SD Card! Aborting!</string> + <string name="cancel_sideload">Cancelling ADB sideload...</string> + <string name="change_fs_err">Error changing file system.</string> + <string name="theme_ver_err">Custom theme version does not match TWRP version. Using stock theme.</string> + <string name="up_a_level">(Up A Level)</string> + <string name="install_reboot" version="2">Rebooting in %tw_sleep% second(s)</string> + <string name="adbbackup_error">Error with ADB Backup. Quitting..."</string> + <string name="adbbackup_control_error">Cannot write to adb control channel</string> + <string name="twrp_adbbu_option">--twrp option is required to enable twrp adb backup</string> + <string name="partition_not_found">path: {1} not found in partititon list</string> + <string name="copy_kernel_log">Copied kernel log to {1}</string> + <string name="include_kernel_log">Include Kernel Log</string> + <string name="unable_set_boot_slot">Error changing bootloader boot slot to {1}</string> + </resources> +</language> diff --git a/gui/theme/common/languages/es.xml b/gui/theme/common/languages/es.xml new file mode 100644 index 000000000..6fd693906 --- /dev/null +++ b/gui/theme/common/languages/es.xml @@ -0,0 +1,655 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Spanish</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">Sistema</string> + <string name="system_image">Imagen del Sistema</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Imagen del Vendor</string> + <string name="boot">Inicio</string> + <string name="recovery">Recovery</string> + <string name="cache">Caché</string> + <string name="data">Datos</string> + <string name="sdcard">Tarjeta SD</string> + <string name="internal">Memoria Interna</string> + <string name="microsd">Tarjeta Micro SD</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Caché</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Datos adoptados</string> + <string name="adopted_storage">Memoria adoptada</string> + <string name="twrp_header">Proyecto Team Win Recovery</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Batería: %tw_battery%</string> + <string name="sort_by_name">Ordenar por Nombre</string> + <string name="sort_by_date">Ordenar por Fecha</string> + <string name="sort_by_size">Ordenar por Tamaño</string> + <string name="sort_by_name_only">Nombre</string> + <string name="sort_by_date_only">Fecha</string> + <string name="sort_by_size_only">Tamaño</string> + <string name="tab_general">GENERAL</string> + <string name="tab_options">OPCIONES</string> + <string name="tab_backup">COPIA DE SEGURIDAD</string> + <string name="tab_time_zone">ZONA HORARIA</string> + <string name="tab_screen">PANTALLA</string> + <string name="tab_vibration">VIBRACIÓN</string> + <string name="tab_language">LENGUAJE</string> + <string name="install_btn">Instalar</string> + <string name="wipe_btn">Limpiar</string> + <string name="backup_btn">Copia de seguridad</string> + <string name="restore_btn">Restaurar</string> + <string name="mount_btn">Montar</string> + <string name="settings_btn">Ajustes</string> + <string name="advanced_btn">Avanzado</string> + <string name="reboot_btn">Reinicio</string> + <string name="files_btn">Archivos</string> + <string name="copy_log_btn">Copiar Log</string> + <string name="select_type_hdr">Seleccionar Tipo</string> + <string name="install_zip_hdr">Instalar Zip</string> + <string name="install_zip_btn">Instalar Zip</string> + <string name="install_image_hdr">Instalar Imagen</string> + <string name="install_image_btn">Instalar Imagen</string> + <string name="install_select_file_hdr">Seleccionar Archivo</string> + <string name="file_selector_folders_hdr">Carpetas</string> + <string name="select_file_from_storage">Seleccionar Archivo desde %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">Carga archivo por ADB</string> + <string name="install_hdr">Instalar</string> + <string name="select_storage_hdr">Seleccionar Almacenamiento</string> + <string name="select_storage_btn">Seleccionar Almacenamiento</string> + <string name="queue_hdr">Cola</string> + <string name="zip_queue_count">%tw_zip_queue_count% de un máximo de 10 archivos en cola</string> + <string name="zip_queue_count_s">Archivo %tw_zip_queue_count% de 10:</string> + <string name="zip_warn1">Esta operación podría instalar software</string> + <string name="zip_warn2">incompatible y dejar tu dispositivo inutilizable.</string> + <string name="zip_back_cancel">Pulsa el botón de atrás para cancelar el añadir este zip.</string> + <string name="zip_back_clear">Pulsa el botón de atrás para limpiar la cola.</string> + <string name="folder">Carpeta:</string> + <string name="file">Archivo:</string> + <string name="zip_sig_chk">Verificar la firma del archivo</string> + <string name="inject_twrp_chk">Injectar TWRP después de instalar</string> + <string name="install_reboot_chk">Reiniciar después de completar la instalación</string> + <string name="options_hdr">Opciones</string> + <string name="confirm_flash_hdr">Confirmar el Flasheo</string> + <string name="zip_queue">Cola:</string> + <string name="options">Opciones:</string> + <string name="swipe_confirm"> Confirmar</string> + <string name="zip_add_btn">Añadir más Zips</string> + <string name="zip_clear_btn">Limpiar cola de Zips</string> + <string name="install_zip_count_hdr">Instalar Zip %tw_zip_index% de %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Instalando Zip: %tw_file%</string> + <string name="failed">Fallido</string> + <string name="successful">Éxito</string> + <string name="install_failed">Instalación Fallida</string> + <string name="install_successful">Instalación Exitosa</string> + <string name="wipe_cache_dalvik_btn">Limpiar caché/dalvik</string> + <string name="reboot_system_btn">Reiniciar Sistema</string> + <string name="install_sel_target">Seleccionar Partición de Destino</string> + <string name="flash_image_select">Seleccionar Partición para Flashear Imagen:</string> + <string name="target_partition">Partición de Destino:</string> + <string name="flashing_image">Flasheando Imagen...</string> + <string name="image_flashed">Image Flashed</string> + <string name="wipe_cache_dalvik_confirm">Limpiar Caché & Dalvik?</string> + <string name="wiping_cache_dalvik">Limpiando Caché & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Caché & Dalvik Limpieza Completa</string> + <string name="swipe_wipe">Desliza para Limpiar</string> + <string name="swipe_wipe_s"> Limpiar</string> + <string name="no_os1">¡No hay SO Instalado!</string> + <string name="no_osrb">¿Estás seguro de que quieres reiniciar?</string> + <string name="no_ospo">¿Estás seguro de que quieres apagar?</string> + <string name="rebooting">Reiniciando…</string> + <string name="swipe_reboot">Desliza para Reiniciar</string> + <string name="swipe_reboot_s"> Reiniciar</string> + <string name="swipe_flash">Desliza para confirmar el Flasheo</string> + <string name="confirm_action">Confirmar Acción</string> + <string name="back_cancel">Pulsa el botón atrás para cancelar.</string> + <string name="cancel_btn">Cancelar</string> + <string name="wipe_hdr">Limpiar</string> + <string name="factory_reset_hdr">Restablecimiento de Fábrica</string> + <string name="factory_reset_btn">Restablecimiento de Fábrica</string> + <string name="factory_reset1">Limpiar Datos, Caché y Dalvik</string> + <string name="factory_reset2">(no incluye almacenamiento interno)</string> + <string name="factory_reset3">La mayoría de las veces esta es</string> + <string name="factory_reset4">la única limpieza que necesitas.</string> + <string name="factory_resetting">Restablecimiento de Fábrica...</string> + <string name="advanced_wipe_hdr">Limpieza Avanzada</string> + <string name="advanced_wipe_btn">Limpieza Avanzada</string> + <string name="wipe_enc_confirm">¿Quitar la encriptación de Datos?</string> + <string name="formatting_data">Formateando Datos...</string> + <string name="swipe_format_data">Desliza para Formatear Datos</string> + <string name="swipe_format_data_s"> Formatear Datos</string> + <string name="factory_reset_complete">Restablecimiento de Fábrica Completo</string> + <string name="sel_part_hdr">Seleccionar Partición(es)</string> + <string name="wipe_sel_confirm">Limpiar Partición(es) Seleccionadas?</string> + <string name="wiping_part">Limpiando Partición(es)...</string> + <string name="wipe_complete">Limpieza Completa</string> + <string name="sel_part_wipe">Seleccionar Partición(es) a Limpiar:</string> + <string name="invalid_part_sel">Selección de partición inválida</string> + <string name="format_data_hdr">Formatear Datos</string> + <string name="format_data_btn">Formatear Datos</string> + <string name="format_data_ptr1">Formatear Datos eliminará todas tus aplicaciones,</string> + <string name="format_data_ptr2">copias de seguridad, imágenes, vídeos, media y</string> + <string name="format_data_ptr3">quita la encriptación del almacenamiento interno.</string> + <string name="format_data_adopted">Incluyendo Almacenamiento Adoptado</string> + <string name="format_data_lcp1">Formatear Datos elimina todas tus aplicaciones, copias de seguridad, imágenes, vídeos, media, y</string> + <string name="format_data_lcp2">quita la encriptación del almacenamiento interno.</string> + <string name="format_data_wtc1">Formatear Datos limpiará todas tus aplicaciones,</string> + <string name="format_data_wtc2">copias de seguridad y media. Esto no se puede deshacer.</string> + <string name="format_data_undo">Esto no se puede deshacer.</string> + <string name="format_data_complete">Formateo de Datos Completo</string> + <string name="yes_continue">Escribe sí para continuar. Pulsa atrás para cancelar.</string> + <string name="part_opt_hdr">Opciones de Partición para: %tw_partition_name%</string> + <string name="sel_act_hdr">Seleccionar Acción</string> + <string name="file_sys_opt">Opciones de Sistema de Archivos</string> + <string name="partition">Partición: %tw_partition_name%</string> + <string name="part_mount_point">Opción de Montaje: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Sistema de archivo: %tw_partition_file_system%</string> + <string name="part_present_yes">Presente: Sí</string> + <string name="part_present_no">Presente: No</string> + <string name="part_removable_yes">Extraíble: Sí</string> + <string name="part_removable_no">Extraíble: No</string> + <string name="part_size">Tamaño: %tw_partition_size%MB</string> + <string name="part_used">En uso: %tw_partition_used%MB</string> + <string name="part_free">Libre: %tw_partition_free%MB</string> + <string name="part_backup_size">Tamaño copia de seguridad: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Cambiar el tamaño del Sistema de Archivos</string> + <string name="resize_btn_s">Cambiar tamaño</string> + <string name="resize_confirm">Cambiar tamaño %tw_partition_name%?</string> + <string name="resizing">Cambiando el tamaño...</string> + <string name="resize_complete">Cambio de tamaño completo</string> + <string name="swipe_resize">Desliza para Cambiar el tamaño</string> + <string name="swipe_resize_s"> Cambiar tamaño</string> + <string name="repair_btn">Reparar Sistema de Archivos</string> + <string name="repair_btn_s">Reparar</string> + <string name="repair_confirm">Reparar %tw_partition_name%?</string> + <string name="repairing">Reparando...</string> + <string name="repair_complete">Reparación Completa</string> + <string name="swipe_repair">Desliza para Reparar</string> + <string name="swipe_repair_s"> Reparar</string> + <string name="change_fs_btn">Cambiar el Sistema de Archivos</string> + <string name="change_fs_btn_s">Cambio</string> + <string name="change_fs_for_hdr">Cambiar Sistema de Archivos a: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partición: %tw_partition_name% > Seleccionar Sistema de Archivos</string> + <string name="change_fs_warn1">Algunas ROMs o kernels quizás no soporten algunos</string> + <string name="change_fs_warn2">sistemas de archivos. Procede con cautela!</string> + <string name="change_fs_confirm">Cambiar %tw_partition_name%?</string> + <string name="formatting">Formateando...</string> + <string name="format_complete">Formateo Completo</string> + <string name="swipe_change_fs">Desliza para Cambiar</string> + <string name="swipe_change_s"> Cambiar</string> + <string name="back_btn">Atrás</string> + <string name="wipe_enc_btn">Limpiar Encriptación</string> + <string name="swipe_factory_reset">Desliza para Restablecer de Fábrica</string> + <string name="repair_change_btn">Reparar ó Cambiar Sistema de Archivos</string> + <string name="storage_hdr">Almacenamiento: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Copia de Seguridad</string> + <string name="backup_confirm_hdr">Confirmar Copia de Seguridad</string> + <string name="encryption_tab">ENCRIPTACIÓN</string> + <string name="encryption">Encriptación:</string> + <string name="name">Nombre:</string> + <string name="sel_part_backup">Seleccionar Partición(es) para Copia de Seguridad:</string> + <string name="storage">Almacenamiento:</string> + <string name="enc_disabled">desactivado - establezca una contraseña para activar</string> + <string name="enc_enabled">activado</string> + <string name="enable_backup_comp_chk">Habilitar compresión</string> + <string name="skip_md5_backup_chk">Saltar generación MD5 durante respaldo</string> + <string name="disable_backup_space_chk">Desactivar comprobación de Espacio Libre</string> + <string name="refresh_sizes_btn">Refrescar Tamaños</string> + <string name="swipe_backup">Desliza para Respaldar</string> + <string name="append_date_btn">Ajustar Fecha</string> + <string name="backup_name_exists">Ya existe una copia de seguridad con este nombre.</string> + <string name="encrypt_backup">Cifrar tú Copia de seguridad?</string> + <string name="enter_pass">Introducir tú contraseña:</string> + <string name="enter_pass2">Introducir tú contraseña de nuevo:</string> + <string name="pass_not_match">Las Contraseñas no coinciden!</string> + <string name="partitions">Particiones:</string> + <string name="disabled">Desactivado</string> + <string name="enabled">Activado</string> + <string name="backup_name_hdr">Establecer nombre de copia de seguridad</string> + <string name="progress">Progreso:</string> + <string name="backup_complete">¡Copia de seguridad completa!</string> + <string name="restore_hdr">Restaurar</string> + <string name="sel_backup_hdr">Selecciona la Copia de Seguridad</string> + <string name="restore_sel_store_hdr">Seleccionar Copia de Seguridad de %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Selecciona el Paquete para Restaurar:</string> + <string name="restore_enc_backup_hdr">Copia de Seguridad Cifrada</string> + <string name="restore_dec_fail">¡Contraseña incorrecta, inténtelo de nuevo!</string> + <string name="del_backup_btn">Eliminar Copia de seguridad</string> + <string name="del_backup_confirm">Eliminar Copia de Seguridad?</string> + <string name="del_backup_confirm2">Esto no se puede deshacer!</string> + <string name="deleting_backup">Eliminando Copia de Seguridad...</string> + <string name="backup_deleted">Eliminar Copia de Seguridad Completado</string> + <string name="swipe_delete">Desliza para Eliminar</string> + <string name="swipe_delete_s"> Eliminar</string> + <string name="restore_try_decrypt">Copia de seguridad cifrada - Intentando Desencriptarla</string> + <string name="restore_try_decrypt_s">Intentando Desencriptarla</string> + <string name="restore_backup_date">Copia de seguridad creada en %tw_restore_file_date%</string> + <string name="restore_sel_part">Selecciona las Particiones para Restaurar:</string> + <string name="restore_enable_md5_chk">Activar Verificación MD5 de la copia de seguridad</string> + <string name="restore_complete">Restauración Completa</string> + <string name="swipe_restore">Desliza para Restaurar</string> + <string name="swipe_restore_s"> Restaurar</string> + <string name="rename_backup_hdr">Renombrar Copia de Seguridad</string> + <string name="rename_backup_confirm">Renombrar Copia de Seguridad?</string> + <string name="rename_backup_confirm2">Esto no se puede Deshacer!</string> + <string name="renaming_backup">Renombrando Copia de Seguridad...</string> + <string name="rename_backup_complete">Renombrar Copia de Seguridad Completado</string> + <string name="swipe_to_rename">Desliza para Renombrar</string> + <string name="swipe_rename"> Renombrar</string> + <string name="confirm_hdr">Confirmar</string> + <string name="mount_hdr">Montar</string> + <string name="mount_sel_part">Selecciona las Particiones para Montar:</string> + <string name="mount_sys_ro_chk">Montar partición de sistema en modo lectura</string> + <string name="mount_sys_ro_s_chk">Montar System RO</string> + <string name="decrypt_data_btn">Desencritar Data</string> + <string name="disable_mtp_btn">Desactivar MTP</string> + <string name="enable_mtp_btn">Activar MTP</string> + <string name="mount_usb_storage_btn">Montar Almacenamiento USB</string> + <string name="usb_storage_hdr">Almacenamiento USB</string> + <string name="usb_stor_mnt1">Almacenamiento USB Montado</string> + <string name="usb_stor_mnt2">¡Asegúrese de retirar de forma segura el dispositivo</string> + <string name="usb_stor_mnt3">de el ordenador antes de desmontar!</string> + <string name="unmount_btn">Desmontar</string> + <string name="rb_system_btn">Sistema</string> + <string name="rb_poweroff_btn">Apagar</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Descarga</string> + <string name="turning_off">Apagando...</string> + <string name="swipe_power_off">Deslice para Apagar</string> + <string name="swipe_power_off_s">Apagar</string> + <string name="sys_ro_hdr">Particion de sistema sin modificar</string> + <string name="sys_ro_keep">Mantener Sitema solo lectura</string> + <string name="sys_rop1">TWRP puede dejar sin modificar la partición del sistema</string> + <string name="sys_rop2">para que sea más fácil para usted instalar actualizaciones oficiales.</string> + <string name="sys_rop3">TWRP será incapaz de impedir que la stock ROM</string> + <string name="sys_rop4">sustituya TWRP y no ofrecerá rootear su dispositivo.</string> + <string name="sys_rop5">Instalación de zips o la realización de operaciones adb aún puede</string> + <string name="sys_rop6">modificar la partición del sistema.</string> + <string name="sys_rol1">TWRP puede dejar sin modificar la partición del sistema para que sea más fácil para usted instalar actualizaciones oficiales.</string> + <string name="sys_rol2">TWRP será incapaz de impedir que la stock ROM sustituya TWRP y no ofrecerá rootear su dispositivo.</string> + <string name="sys_rol3">Instalación de zips o la realización de operaciones adb aún puede modificar la partición del sistema.</string> + <string name="sys_ro_never_show_chk">No mostrar nunca más esta pantalla durante el inicio</string> + <string name="sys_ro_keep_ro_btn">Mantener modo lectura</string> + <string name="swipe_allow_mod">Deslice para Permitir Modificaciones</string> + <string name="swipe_allow_mod_s">Permitir Modificaciones</string> + <string name="settings_hdr">Ajustes</string> + <string name="settings_gen_hdr">General</string> + <string name="settings_gen_s_hdr">General</string> + <string name="settings_gen_btn">General</string> + <string name="use_rmrf_chk">Usar rm -rf en lugar de formateo</string> + <string name="use24clock_chk">Usar reloj 24-horas </string> + <string name="rev_navbar_chk">Invertir posición de la barra de navegacion</string> + <string name="simact_chk">Simulate actions for theme testing</string> + <string name="simfail_chk">Simular fallos de acciones</string> + <string name="ctr_navbar_rdo">Centrar Botones de la barra de navegacion</string> + <string name="lft_navbar_rdo">Diseño de barra de navegación Invertida izquirda</string> + <string name="rht_navbar_rdo">Diseño de barra de navegación Invertida derecha</string> + <string name="restore_defaults_btn">Restore Defaults</string> + <string name="settings_tz_btn">Zona Horaria</string> + <string name="settings_screen_btn">Pantalla</string> + <string name="settings_screen_bright_btn">Brillo de Pantalla</string> + <string name="settings_vibration_btn">Vibración</string> + <string name="settings_language_btn">Idioma</string> + <string name="time_zone_hdr">Zona Horaria</string> + <string name="sel_tz_list">Seleccione Zona Horaria:</string> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Central Time</string> + <string name="utcm5">(UTC -5) Eastern Time</string> + <string name="utcm4">(UTC -4) Atlantic Time</string> + <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbon</string> + <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string> + <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string> + <string name="utcp3">(UTC +3) Moscow, Baghdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Eastern Australia, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Selecciona Variación (usualmente 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Ninguno</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Utilizar el horario de verano (DST)</string> + <string name="curr_tz">Zona Horaria Actual: %tw_time_zone%</string> + <string name="curr_tz_s">Zona Horaria Actual:</string> + <string name="set_tz_btn">Establecer Zona Horaria</string> + <string name="settings_screen_hdr">Pantalla</string> + <string name="settings_screen_timeout_hdr">Tiempo de espera de pantalla</string> + <string name="enable_timeout_chk">Activar tiempo de espera de pantalla</string> + <string name="screen_to_slider">Tiempo de espera de pantalla en segundos:</string> + <string name="screen_to_slider_s">Tiempo de espera de pantalla en segundos (0=disabled): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Ajustes de tiempo de espera de la pantalla no disponibles</string> + <string name="screen_bright_slider">Brillo: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Configuración de brillo no diponible</string> + <string name="vibration_hdr">Vibración</string> + <string name="button_vibration_hdr">Vibración de los Botones</string> + <string name="kb_vibration_hdr">Vibración del Teclado</string> + <string name="act_vibration_hdr">Vibración de Acciones</string> + <string name="button_vibration">Vibración de Botón:</string> + <string name="kb_vibration">Vibración de Teclado:</string> + <string name="act_vibration">Vibración de Acciones:</string> + <string name="select_language">Selecciona Idioma:</string> + <string name="sel_lang_btn">Seleccionar Idioma</string> + <string name="set_language_btn">Establecer Idioma</string> + <string name="advanced_hdr">Avanzado</string> + <string name="copy_log_confirm">Copiar Log a Tarjeta SD?</string> + <string name="copying_log">Copiando Log a Tarjeta SD...</string> + <string name="copy_log_complete">Copia del Log Completada</string> + <string name="fix_context_btn">Reparar Contextos</string> + <string name="part_sd_btn">Particionar Tarjeta SD</string> + <string name="part_sd_s_btn">Tarjeta SD</string> + <string name="file_manager_btn">Administrador de Archivos</string> + <string name="language_hdr">Idioma</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Recargar Tema</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Injectar TWRP</string> + <string name="inject_twrp_confirm">Re-Injectar TWRP?</string> + <string name="injecting_twrp">Re-Injectando TWRP...</string> + <string name="inject_twrp_complete">TWRP Injección Completa</string> + <string name="swipe_to_confirm">Desliza para Confirmar</string> + <string name="part_sd_hdr">Particionar Tarjeta SD</string> + <string name="invalid_partsd_sel">Debes seleccionar un dispositivo extraíble</string> + <string name="part_sd_lose">Perderá todos los archivos de la tarjeta SD!</string> + <string name="part_sd_undo">Esta Acción no se puede Deshacer!</string> + <string name="part_sd_ext_sz">Tamaño de EXT:</string> + <string name="part_sd_swap_sz">Tamaño de Intercambio:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Sistema de Archivos:</string> + <string name="swipe_part_sd">Desliza para Particionar</string> + <string name="swipe_part_sd_s">Particionar</string> + <string name="partitioning_sd">Particionando Tarjeta SD...</string> + <string name="partitioning_sd2">Esto puede tomar unos Minutos.</string> + <string name="part_sd_complete">Particionar Completado</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Restaurar Boot Original</string> + <string name="dumlock_restore_confirm">¿Restaurar imagen de boot original?</string> + <string name="dumlock_restoring">Restaurando boot Original...</string> + <string name="dumlock_restore_complete">Restauración del Boot Original Completado</string> + <string name="dumlock_reflash_btn">Reflashear Recovery</string> + <string name="dumlock_reflash_confirm">¿Reflashear recovery a boot?</string> + <string name="dumlock_reflashing">Flasheando recovery a boot...</string> + <string name="dumlock_reflash_complete">Flasheo del Recovery a Boot Completado</string> + <string name="dumlock_install_btn">Instalar HTC Dumlock</string> + <string name="dumlock_install_confirm">¿Instalar los archivos de HTC dumlock en la ROM?</string> + <string name="dumlock_installing">Instalando HTC Dumlock...</string> + <string name="dumlock_install_complete">Instalación de HTC Dumlock Completada</string> + <string name="swipe_to_unlock">Desliza para Desbloquear</string> + <string name="swipe_unlock"> Desbloquear</string> + <string name="fm_hdr">Administrador de Archivos </string> + <string name="fm_sel_file">Selecciona un Archivo ó Carpeta</string> + <string name="fm_type_folder">Carpeta</string> + <string name="fm_type_file">Archivo</string> + <string name="fm_choose_act">Elija una Acción</string> + <string name="fm_selected">%tw_fm_type% seleccionado:</string> + <string name="fm_copy_btn">Copiar</string> + <string name="fm_copy_file_btn">Copiar Archivo</string> + <string name="fm_copy_folder_btn">Copiar Carpeta</string> + <string name="fm_copying">Copiando</string> + <string name="fm_move_btn">Mover</string> + <string name="fm_moving">Moviendo</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Eliminar</string> + <string name="fm_deleting">Eliminando</string> + <string name="fm_rename_btn">Renombrar</string> + <string name="fm_rename_file_btn">Renombrar Archivo</string> + <string name="fm_rename_folder_btn">Renombrar Carpeta</string> + <string name="fm_renaming">Renombrando</string> + <string name="fm_sel_dest">Selecciona la carpeta de destino</string> + <string name="fm_sel_curr_folder">Selecciona la carpeta actual</string> + <string name="fm_rename_hdr">Renombrar</string> + <string name="fm_set_perms_hdr">Establecer Permisos</string> + <string name="fm_perms">Permisos:</string> + <string name="fm_complete">Operación de Archivo Completado</string> + <string name="decrypt_data_hdr">Desencriptar Datos</string> + <string name="decrypt_data_enter_pass">Introducir Contraseña.</string> + <string name="decrypt_data_failed">Contraseña incorrecta, intente de nuevo!</string> + <string name="decrypt_data_failed_pattern">Patrón incorrecto, intentelo de nuevo!</string> + <string name="decrypt_data_enter_pattern">Introduzca un patrón.</string> + <string name="decrypt_data_trying">Tratando de Desencriptar</string> + <string name="term_hdr">Comando de Terminal</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">MATAR</string> + <string name="term_sel_folder_hdr">Navegar hasta la Carpeta de Inicio</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Limpiar Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Limpiar Cache</string> + <string name="swipe_to_sideload">Desliza para iniciar Sideload</string> + <string name="swipe_sideload"> Comenzar</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Uso: adb sideload nombredearchivo.zip</string> + <string name="sideload_complete">ADB Sideload Completado</string> + <string name="fix_contexts_hdr">Fijar Contextos</string> + <string name="fix_contexts_note1">Nota: La fijación de los contextos rara vez es necesaria.</string> + <string name="fix_contexts_note2">La fijación de Contextos de SELinux puede causar</string> + <string name="fix_contexts_note3">que tú dispositivo no arranque correctamente.</string> + <string name="swipe_to_fix_contexts">Desliza para fijar Contextos</string> + <string name="swipe_fix_contexts"> Fijar Contextos</string> + <string name="fixing_contexts">Fijando Contextos...</string> + <string name="fix_contexts_complete">Fijar Contextos Completado</string> + <string name="reboot_hdr">Reiniciar</string> + <string name="su_hdr">Comprobar SuperSU</string> + <string name="su_note1">Parece que tú dispositivo no esta rooteado.</string> + <string name="su_note2">Instalar SuperSU ahora?</string> + <string name="su_note3">Esto rooteara su dispositivo.</string> + <string name="su_cancel">No instalar</string> + <string name="swipe_su_to_install">Desliza para instalar</string> + <string name="swipe_su_install"> Instalar</string> + <string name="su_installing">Instalado SuperSU</string> + <string name="sel_storage_list">Seleccionar Almacenamiento</string> + <string name="ok_btn">OK</string> + <string name="no_kernel_selinux">Kernel no tiene soporte para la lectura de los contextos de SELinux.</string> + <string name="full_selinux">Soporte completo de SELinux está presente.</string> + <string name="no_selinux">No hay soporte SELinux (no libselinux).</string> + <string name="mtp_enabled">MTP Activado</string> + <string name="mtp_crash">MTP falló, no se iniciará MTP en el arranque.</string> + <string name="decrypt_success">Datos descifrados exitosamente, nuevo dispositivo de bloque: \'{1}\'</string> + <string name="unable_to_decrypt">Incapaz de descifrar con la contraseña actual. Quizás necesites realizar un Formateo de Datos.</string> + <string name="generating_md51">Generando MD5</string> + <string name="generating_md52"> * Generando md5...</string> + <string name="md5_created"> * MD5 Creado.</string> + <string name="md5_error"> * ¡MD5 Error!</string> + <string name="md5_compute_error"> * Error creando MD5.</string> + <string name="current_date">(Fecha Actual)</string> + <string name="auto_generate">(Autogenerar)</string> + <string name="unable_to_locate_partition">Incapaz de localizar la partición’{1}’ para los cálculos de la copia de seguridad.</string> + <string name="no_partition_selected">No se han seleccionado particiones para copia de seguridad.</string> + <string name="total_partitions_backup"> * Número total de particiones para copia de seguridad: {1}</string> + <string name="total_backup_size"> * Tamaño total de todos los datos: {1}MB</string> + <string name="available_space"> * Espacio disponible: {1}MB</string> + <string name="unable_locate_storage">Incapaz de localizar el dispositivo de almacenamiento.</string> + <string name="no_space">No hay suficiente espacio en el almacenamiento.</string> + <string name="backup_started">[COPIA DE SEGURIDAD COMENZADA]</string> + <string name="backup_folder">Carpeta de copia seguridad establecida en \'{1}\'</string> + <string name="fail_backup_folder">Error al crear carpeta de copia de seguridad.</string> + <string name="avg_backup_fs">Tasa media de copia de seguridad para sistemas de archivo: {1} MB/seg</string> + <string name="avg_backup_img">Tasa media de copia de seguridad para imágenes de unidades: {1} MB/seg</string> + <string name="total_backed_size">[{1} MB TOTALES DE COPIA DE SEGURIDAD]</string> + <string name="backup_completed">[COPIA DE SEGURIDAD COMPLETADA EN {1} SEGUNDOS ]</string> + <string name="restore_started">[RESTAURACIÓN COMENZADA]</string> + <string name="restore_folder">Restaurar carpeta: \'{1}\'</string> + <string name="restore_part_done">[{1} completado ({2} segundos)]</string> + <string name="verifying_md5">Verificando MD5</string> + <string name="skip_md5">Saltando checkeo de MD5 basado en ajustes del usuario.</string> + <string name="calc_restore">Calculando detalles de la restauración...</string> + <string name="restore_read_only">No se puede restaurar {1} -- montado en modo leer.</string> + <string name="restore_unable_locate">Incapaz de localizar la partición \'{1}\' para la restauración.</string> + <string name="no_part_restore">No se han seleccionado particiones para restaurar.</string> + <string name="restore_part_count">Restaurando {1} particiones...</string> + <string name="total_restore_size">El tamaño total de restauración es de {1}MB</string> + <string name="updating_system_details">Actualizando Detalles de Sistema</string> + <string name="restore_completed">[RESTAURACIÓN COMPLETADA EN {1} SEGUNDOS]</string> + <string name="error_opening_strerr">Error abriendo: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Incapaz de localizar partición con el nombre de copia de seguridad: \'{1}\'</string> + <string name="unable_find_part_path">Incapaz de encontrar la partición para la dirección \'{1}\'</string> + <string name="update_part_details">Actualizando detalles de la partición…</string> + <string name="update_part_details_done">…hecho</string> + <string name="wiping_dalvik">Limpiando Directorios de Caché de Dalvik...</string> + <string name="cleaned">Limpio: {1}...</string> + <string name="dalvik_done">-- ¡Limpieza de Directorios de Caché de Dalvik Completa!</string> + <string name="no_andsec">No se encontró ninguna partición de android secure.</string> + <string name="unable_to_locate">Incapaz de localizar {1}.</string> + <string name="wiping_datamedia">Limpiando almacenamiento interno -- /data/media...</string> + <string name="unable_to_mount">Incapaz de montar {1}</string> + <string name="unable_to_mount_internal">Incapaz de montar almacenamiento_interno</string> + <string name="unable_to_mount_storage">Incapaz de montar almacenamiento</string> + <string name="fail_decrypt">Error al descifrar datos.</string> + <string name="no_crypto_support">No hay ningún soporte de cifrado compilado en esta compilación.</string> + <string name="decrypt_success_dev">Datos desencriptados satisfactoriamente, nuevo bloque de dispositivo: '{1}'</string> + <string name="done">Hecho.</string> + <string name="start_partition_sd">Particionando tarjeta SD...</string> + <string name="partition_sd_locate">Incapaz de localizar el dispositivo a particionar.</string> + <string name="ext_swap_size">El tamaño de EXT + Swap es más grande que el tamaño de la tarjeta SD.</string> + <string name="remove_part_table">Eliminando tabla de partición...</string> + <string name="unable_rm_part">Incapaz de eliminar la tabla de partición.</string> + <string name="create_part">Creando partición {1}...</string> + <string name="unable_to_create_part">Incapaz de crear partición {1}.</string> + <string name="format_sdext_as">Formateando sd-ext como {1}...</string> + <string name="part_complete">Particionamiento completo.</string> + <string name="unable_to_open">Incapaz de abrir \'{1}\'.</string> + <string name="mtp_already_enabled">MTP ya está habilitado</string> + <string name="mtp_fail">Error al activar MTP</string> + <string name="no_mtp">Soporte a MTP no incluido</string> + <string name="image_flash_start">[FLASHEO DE IMAGEN EMPEZADA]</string> + <string name="img_to_flash">Imagen a flashear: \'{1}\'</string> + <string name="flash_unable_locate">Incapaz de localizar la partición \'{1}\' para flashear.</string> + <string name="no_part_flash">No se ha seleccionado partición para flashear.</string> + <string name="too_many_flash">Demasiadas particiones seleccionadas para flashear.</string> + <string name="invalid_flash">La partición de flasheo especificada es inválida.</string> + <string name="flash_done">[FLASHEO DE IMAGEN COMPLETO]</string> + <string name="wiping">Limpiando {1}</string> + <string name="repair_not_exist">¡{1} no existe! ¡No se puede reparar!</string> + <string name="repairing_using">Reparando {1} usando {2}...</string> + <string name="unable_repair">Incapaz de reparar {1}.</string> + <string name="mount_data_footer">No se pudo montar /data e incapaz de encontrar pie de página de crypto.</string> + <string name="create_folder_strerr">No se pudo crear \'{1}\' en carpeta ({2}).</string> + <string name="fail_mount">Error al desmontar \'{1}\' ({2})</string> + <string name="fail_unmount">Fallo al desmontar '{1}' ({2})</string> + <string name="cannot_resize">No se puede cambiar el tamaño de {1}.</string> + <string name="repair_resize">Reparando {1} antes de cambiar de tamaño.</string> + <string name="unable_resize">Incapaz de cambiar el tamaño de archivo de {1}.</string> + <string name="no_md5_found">No se encuentra archivo md5 para \'{1}\'. Por favor, deselecciona Activar verificación de MD5 para restaurar.</string> + <string name="md5_fail_match">MD5 no coincide en \'{1}\'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Fallo al desencriptar el archivo tar '{1}'</string> + <string name="format_data_msg">Quizás necesites reiniciar el recovery para ser capaz de usar /data de nuevo.</string> + <string name="format_data_err">Incapaz de formatear para remover encriptación.</string> + <string name="formatting_using">Formateando {1} usando {2}...</string> + <string name="unable_to_wipe">Incapaz de limpiar {1}.</string> + <string name="cannot_wipe">Partición {1} no se limpiar.</string> + <string name="remove_all">Eliminando todos los archivos dentro de \'{1}\'</string> + <string name="wiping_data">Limpiando datos sin limpiar /data/media ...</string> + <string name="backing_up">Realizando copia de seguridad {1}...</string> + <string name="backing">Realizando copia de seguridad</string> + <string name="backup_size">El tamaño del archivo \'{1}\' de la copia seguridad es de 0 bytes.</string> + <string name="datamedia_fs_restore">CUIDADO: !Esta copia de seguridad de /data se hizo con el sistema de archivos {1}! La copia de seguridad puede no arrancar a no ser que cambies a {1}.</string> + <string name="restoring">Restaurando {1}...</string> + <string name="restoring_hdr">Restaurando</string> + <string name="recreate_folder_err">Incapaz de recrear la carpeta {1}.</string> + <string name="img_size_err">El tamaño de la imagen es mayor que el tamaño del dispositivo de destino.</string> + <string name="flashing">Flasheando {1}...</string> + <string name="backup_folder_set">Copia de Seguridad establecida en '{1}'</string> + <string name="locate_backup_err">Incapaz de localizar copia de seguridad \'{1}\'</string> + <string name="set_restore_opt">Ajustando opciones de restauración: \'{1}\':</string> + <string name="md5_check_skip">El salto de checkeo de MD5 está activado</string> + <string name="ors_encrypt_restore_err">Incapaz de usar OpenRecoveryScript para restaurar una copia de seguridad encriptada.</string> + <string name="mounting">Montando</string> + <string name="unmounting">Desmontando</string> + <string name="mounted">Montado \'{1}\'</string> + <string name="unmounted">Desmontado \'{1}\'</string> + <string name="setting">Ajustando \'{1}\' a \'{2}\'</string> + <string name="setting_empty">Ajustando \'{1}\' a vacío</string> + <string name="making_dir1">Creando Directorio</string> + <string name="making_dir2">Creando directorio: \'{1}\'</string> + <string name="running_command">Corriendo Comando</string> + <string name="sideload">Carga lateral de ADB</string> + <string name="start_sideload">Empezando carga lateral de ADB...</string> + <string name="need_new_adb">Necesitas de adb 1.0.32 o más nuevo para poder realizar la carga lateral en este dispositivo.</string> + <string name="no_pwd">No se ha proporcionado contraseña.</string> + <string name="done_ors">Procesamiento de comando de archivos hecho</string> + <string name="injecttwrp">Inyectando TWRP en imagen boot...</string> + <string name="zip_err">Error instalando archivo zip \'{1}\'</string> + <string name="installing_zip">Instalando archivo zip '{1}'</string> + <string name="select_backup_opt">Ajustando opciones de copia de seguridad:</string> + <string name="compression_on">La compresión está activada</string> + <string name="md5_off">La generación de MD5 está desactivada</string> + <string name="backup_fail">Copia de seguridad fallida</string> + <string name="backup_clean">La copia de seguridad falló. Limpiando carpeta de la copia de seguridad.</string> + <string name="running_recovery_commands">Corriendo Comandos de Recovery</string> + <string name="recovery_commands_complete">Comandos de Recovery Completos</string> + <string name="running_ors">Corriendo OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript Completo</string> + <string name="no_updater_binary">No fue posible encontrar \'{1}\' en el archivo zip.</string> + <string name="check_for_md5">Buscando archivo MD5...</string> + <string name="fail_sysmap">Error al mapear archivo \'{1}\'</string> + <string name="verify_zip_sig">Verificando firma de zip…</string> + <string name="verify_zip_fail">¡Verificación de firma de Zip fallida!</string> + <string name="verify_zip_done">Firma de Zip verificada exitosamente.</string> + <string name="zip_corrupt">¡Este archivo Zip es corrupto!</string> + <string name="no_md5">Saltando verificación de MD5: no se ha encontrado archivo MD5</string> + <string name="md5_fail">MD5 no coincide</string> + <string name="md5_match">MD5 coincide</string> + <string name="pid_signal">Proceso {1} terminó con señal: {2}</string> + <string name="pid_error">Proceso {1} terminó con ERROR: {2}</string> + <string name="install_dumlock">Instalando HTC Dumlock en el sistema…</string> + <string name="dumlock_restore">Restaurando el boot original...</string> + <string name="dumlock_reflash">Reflasheando el recovery en boot...</string> + <string name="run_script">Ejecutando script {1} ...</string> + <string name="rename_stock">Renombrado stock recovery en /system para prevenir que la ROM stock remplace TWRP.</string> + <string name="split_backup">Dividiendo copia de seguridad en múltiples archivos...</string> + <string name="backup_error">Error creando copia de seguridad.</string> + <string name="restore_error">Error durante el proceso de restauración.</string> + <string name="split_thread">Dividiendo hilo ID {1} en archivo {2}</string> + <string name="file_progress">%llu de %llu archivos, %i%%</string> + <string name="size_progress">%lluMB de %lluMB, %i%%</string> + <string name="decrypt_cmd">Intentando decriptar partición de datos via línea de comandos.</string> + <string name="base_pkg_err">Carga de paquetes básicos fallido.</string> + <string name="simulating">Simulando acciones...</string> + <string name="backup_cancel">Copia de seguridad cancelada.</string> + <string name="config_twrp">Configurando TWRP...</string> + <string name="config_twrp_err">Incapaz de configurar TWRP con este kernel.</string> + <string name="copy_log">Log del recovery copiado en {1}.</string> + <string name="max_queue">¡Máximo de archivos zip en cola alcanzado!</string> + <string name="min_queue">¡Mínimo de archivos zip en cola alcanzado!</string> + <string name="screenshot_saved">Captura de pantalla guardada en {1}</string> + <string name="screenshot_err">¡La captura de pantalla falló!</string> + <string name="zip_wipe_cache">Uno o más archivos zip han pedido una limpieza de caché -- Limpiando caché ahora.</string> + <string name="and_sec_wipe_err">Incapaz de limpiar android secure</string> + <string name="dalvik_wipe_err">¡La limpieza de dalvik falló!</string> + <string name="auto_gen">(Autogenerar)</string> + <string name="curr_date">(Fecha Actual)</string> + <string name="backup_name_len">El nombre de esta copia de seguridad es demasiado largo.</string> + <string name="backup_name_invalid">El nombre de la copia de seguridad \'{1}\' contiene un carácter inválido: \'{1}\'</string> + <string name="no_real_sdcard">¡Este dispositivo no tiene una tarjeta SD real! ¡Abortando!</string> + <string name="cancel_sideload">Cancelando carga lateral ADB...</string> + <string name="change_fs_err">Error cambiando sistema de archivos.</string> + <string name="theme_ver_err">Tema personalizado no coincide con la versión de TWRP. Usando tema stock.</string> + <string name="up_a_level">(Subir Un Nivel)</string> + <string name="install_reboot">Reiniciando en 5 segundos</string> + </resources> +</language> diff --git a/gui/theme/common/languages/fr.xml b/gui/theme/common/languages/fr.xml new file mode 100644 index 000000000..f38446110 --- /dev/null +++ b/gui/theme/common/languages/fr.xml @@ -0,0 +1,651 @@ +<?xml version="1.0"?> +<language> + <display>Français</display> + <resources> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + <string name="system">Système</string> + <string name="system_image">Image Système</string> + <string name="vendor">Fabricant</string> + <string name="vendor_image">Image Fabricant</string> + <string name="boot">Amorçage</string> + <string name="recovery">Récupération</string> + <string name="cache">Cache</string> + <string name="data">Données</string> + <string name="sdcard">Carte SD</string> + <string name="internal">Mémoire interne</string> + <string name="microsd">Carte microSD</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Sécurisé</string> + <string name="dalvik">Cache Dalvik / ART</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Données adoptées</string> + <string name="adopted_storage">Stockage adopté</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU : %tw_cpu_temp% °C</string> + <string name="battery_pct">Batterie : %tw_battery%</string> + <string name="sort_by_name">Trier par nom</string> + <string name="sort_by_date">Trier par Date</string> + <string name="sort_by_size">Trier par taille</string> + <string name="sort_by_name_only">Nom</string> + <string name="sort_by_date_only">Date</string> + <string name="sort_by_size_only">Taile</string> + <string name="tab_general">GÉNÉRAL</string> + <string name="tab_options">OPTIONS</string> + <string name="tab_backup">SAUVEGARDE</string> + <string name="tab_time_zone">FUSEAU HORAIRE</string> + <string name="tab_screen">ÉCRAN</string> + <string name="tab_vibration">VIBRATION</string> + <string name="tab_language">LANGUE</string> + <string name="install_btn">Installer</string> + <string name="wipe_btn">Formater</string> + <string name="backup_btn">Sauvergarder</string> + <string name="restore_btn">Restaurer</string> + <string name="mount_btn">Montage partitions</string> + <string name="settings_btn">Paramètres</string> + <string name="advanced_btn">Paramètres avancé</string> + <string name="reboot_btn">Redémarrer</string> + <string name="files_btn">Fichiers</string> + <string name="copy_log_btn">Copier le journal</string> + <string name="select_type_hdr">Selctionner le type</string> + <string name="install_zip_hdr">Installer le Zip</string> + <string name="install_zip_btn">Installer le Zip</string> + <string name="install_image_hdr">Installer l'Image</string> + <string name="install_image_btn">Installer l'Image</string> + <string name="install_select_file_hdr">Sélectionnez un fichier</string> + <string name="file_selector_folders_hdr">Dossier</string> + <string name="select_file_from_storage">Sélectionnez un fichier dans %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">Transfert via ADB</string> + <string name="install_hdr">Installer</string> + <string name="select_storage_hdr">Sélectionner l'emplacement</string> + <string name="select_storage_btn">Sélectionner l'emplacement</string> + <string name="queue_hdr">Mettre en file d'attente</string> + <string name="zip_queue_count">%tw_zip_queue_count% de max de 10 fichiers en file d'attente</string> + <string name="zip_queue_count_s">Fichier %tw_zip_queue_count% sur 10 :</string> + <string name="zip_warn1">Cette opération pourrait intaller un logiciel</string> + <string name="zip_warn2">incompatible et rendre votre appareil inutilisable.</string> + <string name="zip_back_cancel">Appuyer sur retour pour annuler l'ajout de ce zip.</string> + <string name="zip_back_clear">Appuyer sur retour pour effacer la liste d'attente.</string> + <string name="folder">Dossier :</string> + <string name="file">Fichier :</string> + <string name="zip_sig_chk">Vérification de la signature du Zip</string> + <string name="inject_twrp_chk">Injecter TWRP après l'installation</string> + <string name="options_hdr">Options</string> + <string name="confirm_flash_hdr">Confirmer le Flash</string> + <string name="zip_queue">Mettre en file d'attente :</string> + <string name="options">Options :</string> + <string name="swipe_confirm">Confirmer</string> + <string name="zip_add_btn">Ajouter plus de Zips</string> + <string name="zip_clear_btn">Effacer la liste d'attente des Zips</string> + <string name="install_zip_count_hdr">Installe le Zip %tw_zip_index% sur %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Installe le Zip : %tw_file%</string> + <string name="failed">Échec</string> + <string name="successful">Réussie</string> + <string name="install_failed">Installation échouée</string> + <string name="install_successful">Installation réussie</string> + <string name="wipe_cache_dalvik_btn">Effacer cache/dalvik</string> + <string name="reboot_system_btn">Redémarrer le système</string> + <string name="install_sel_target">Sélectionner la Partition d'installation</string> + <string name="flash_image_select">Sélectionner la partition où écrire l'image :</string> + <string name="target_partition">Partition de destination :</string> + <string name="flashing_image">Image en cours de Flash...</string> + <string name="image_flashed">Image Flashée</string> + <string name="wipe_cache_dalvik_confirm">Effacer Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Effacement du Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Cache & Dalvik Effacés</string> + <string name="swipe_wipe">Glisser pour formater</string> + <string name="swipe_wipe_s">Formater</string> + <string name="no_os1">Aucun système d'exploitation installé ! Êtes-vous</string> + <string name="no_osrb">certain de vouloir redémarrer ?</string> + <string name="no_ospo">certain de vouloir arrêter le système ?</string> + <string name="rebooting">En cours de redémarrage...</string> + <string name="swipe_reboot_s">Redémarrer</string> + <string name="swipe_flash">Glisser pour confirmer le flash</string> + <string name="confirm_action">Confirmer l'action</string> + <string name="back_cancel">Presser retour pour annuler.</string> + <string name="cancel_btn">Annuler</string> + <string name="wipe_hdr">Effacer</string> + <string name="factory_reset_hdr">Retour aux réglages d'usine</string> + <string name="factory_reset_btn">Retour aux réglages d'usine</string> + <string name="factory_reset1">Formater les données, le Cache et Dalvik</string> + <string name="factory_reset2">(ne comprend pas le stockage interne)</string> + <string name="factory_reset3">La plupart du temps il s'agit</string> + <string name="factory_reset4">de la seule chose que vous avez besoin de formater.</string> + <string name="factory_resetting">Réinitialisation d'usine...</string> + <string name="advanced_wipe_hdr">Formatage avancé</string> + <string name="advanced_wipe_btn">Formatage avancé</string> + <string name="wipe_enc_confirm">Effacer le chiffrement des données ?</string> + <string name="formatting_data">Formatage en cours ...</string> + <string name="swipe_format_data">Glisser pour formater les données</string> + <string name="swipe_format_data_s">Formater les données</string> + <string name="factory_reset_complete">Réinitialisation complète</string> + <string name="sel_part_hdr">Sélectionner les Partitions</string> + <string name="wipe_sel_confirm">Formater la (les) partition(s) Sélectionnée(s) ?</string> + <string name="wiping_part">Formatage de la (des) partition(s) en cours...</string> + <string name="wipe_complete">Formatage Terminé</string> + <string name="sel_part_wipe">Sélectionner les Partitions a formater :</string> + <string name="invalid_part_sel">Sélection de partition non valide</string> + <string name="format_data_hdr">Formater les données</string> + <string name="format_data_btn">Formater les données</string> + <string name="format_data_ptr1">Formater les données effacera toutes vos applications,</string> + <string name="format_data_ptr2">sauvegardes, photos, vidéos, media, et</string> + <string name="format_data_ptr3">retirera l'encryption sur le stockage interne.</string> + <string name="format_data_lcp1">Formater les données effacera toutes vos applications, sauvergardes, photos, videos, media, et</string> + <string name="format_data_lcp2">retirera le chiffrement du stockage interne.</string> + <string name="format_data_wtc1">Formater les données effacera toutes vos applications,</string> + <string name="format_data_wtc2">les sauvegardes et les médias. Cette action ne peut pas être annulée.</string> + <string name="format_data_undo">La suppression est irréversible.</string> + <string name="format_data_complete">Formatage des données terminé</string> + <string name="yes_continue">Entrer "yes" pour continuer. Appuyez sur retour pour annuler.</string> + <string name="part_opt_hdr">Options de la partition : %tw_partition_name%</string> + <string name="sel_act_hdr">Sélectionner une action</string> + <string name="file_sys_opt">Options de système de fichiers</string> + <string name="partition">Partition : %tw_partition_name%</string> + <string name="part_mount_point">Point de montage : %tw_partition_mount_point%</string> + <string name="part_curr_fs">Système de fichiers : %tw_partition_file_system%</string> + <string name="part_present_yes">Présent : Oui</string> + <string name="part_present_no">Présent : non</string> + <string name="part_removable_yes">Amovible : Oui</string> + <string name="part_removable_no">Amovible : non</string> + <string name="part_size">Taille : % tw_partition_size % MB</string> + <string name="part_used">Utilisé : % tw_partition_used % MB</string> + <string name="part_free">Libre: % tw_partition_free % MO</string> + <string name="part_backup_size">Taille de la sauvegarde : % tw_partition_backup_size % MB</string> + <string name="resize_btn">Redimensionner le système de fichiers</string> + <string name="resize_btn_s">Redimensionner</string> + <string name="resize_confirm">Redimensionner %tw_partition_name% ?</string> + <string name="resizing">Redimensionnement en cours...</string> + <string name="resize_complete">Redimensionnenent Terminé</string> + <string name="swipe_resize">Glisser pour redimensionner</string> + <string name="swipe_resize_s">Redimensionner</string> + <string name="repair_btn">Réparation du Système de fichier</string> + <string name="repair_btn_s">Réparer</string> + <string name="repair_confirm">Réparer %tw_partition_name% ?</string> + <string name="repairing">Réparation en cours...</string> + <string name="repair_complete">Réparation Terminée</string> + <string name="swipe_repair">Glisser pour réparer</string> + <string name="swipe_repair_s">Réparer</string> + <string name="change_fs_btn">Changer le Système de fichiers</string> + <string name="change_fs_btn_s">Changer</string> + <string name="change_fs_for_hdr">Changer le Système de fichiers pour : %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partition : %tw_partition_name% > sélectionnez le Système de fichiers</string> + <string name="change_fs_warn1">Certains ROMs ou kernels peuvent ne pas supporter certains</string> + <string name="change_fs_warn2">systèmes de fichiers. Procéder avec prudence !</string> + <string name="change_fs_confirm">Changer %tw_partition_name%?</string> + <string name="formatting">Formatage en cours...</string> + <string name="format_complete">Formatage Terminé</string> + <string name="swipe_change_fs">Glisser pour changer</string> + <string name="swipe_change_s">Changer</string> + <string name="back_btn">Retour</string> + <string name="wipe_enc_btn">Effacer le chiffrement</string> + <string name="swipe_factory_reset">Glisser pour restaurer les Paramètres d'usine</string> + <string name="repair_change_btn">Réparer ou Changer le Système de fichiers</string> + <string name="storage_hdr">Stockage : %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Sauvergarder</string> + <string name="backup_confirm_hdr">Confirmer la sauvegarde</string> + <string name="encryption_tab">CHIFFREMENT</string> + <string name="encryption">Chiffrement :</string> + <string name="name">Nom:</string> + <string name="sel_part_backup">Sélectionner les Partitions à sauvegarder :</string> + <string name="storage">Stockage :</string> + <string name="enc_disabled">désactivé - définir un mot de passe pour activer</string> + <string name="enc_enabled">activé</string> + <string name="enable_backup_comp_chk">Activer la compression</string> + <string name="skip_md5_backup_chk">Ne pas générer de MD5 pendant la sauvegarde</string> + <string name="disable_backup_space_chk">Désactiver la vérification de l'espace libre</string> + <string name="refresh_sizes_btn">Actualiser l'espace disponible</string> + <string name="swipe_backup">Glisser pour Sauvegarder</string> + <string name="append_date_btn">Ajouter Date</string> + <string name="backup_name_exists">Une sauvegarde avec ce nom existe déjà !</string> + <string name="encrypt_backup">Chiffrer votre sauvegarde ?</string> + <string name="enter_pass">Entrez un mot de passe :</string> + <string name="enter_pass2">Entrez le mot de passe à nouveau :</string> + <string name="pass_not_match">Les Mots de passe ne correspondent pas !</string> + <string name="partitions">Partitions :</string> + <string name="disabled">Désactivé</string> + <string name="enabled">Activé</string> + <string name="backup_name_hdr">Nom de la sauvegarde</string> + <string name="progress">Progression :</string> + <string name="backup_complete">Sauvegarde terminée</string> + <string name="backup_cancel">Sauvegarde annulée</string> + <string name="restore_hdr">Restaurer</string> + <string name="sel_backup_hdr">Choisir la sauvegarde</string> + <string name="restore_sel_store_hdr">Sélectionner la Sauvegarde dans %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Sélectionner le Package à restaurer :</string> + <string name="restore_enc_backup_hdr">Sauvegarde chiffrée</string> + <string name="restore_dec_fail">Mot de passe incorrect, Veuillez réessayer !</string> + <string name="del_backup_btn">Supprimer la sauvegarde</string> + <string name="del_backup_confirm">Supprimer la sauvegarde ?</string> + <string name="del_backup_confirm2">Cette action ne peut pas être annulée !</string> + <string name="deleting_backup">Suppression de sauvegarde en cours...</string> + <string name="backup_deleted">Suppression de la Sauvegarde Terminée</string> + <string name="swipe_delete">Glisser pour supprimer</string> + <string name="swipe_delete_s">Supprimer</string> + <string name="restore_try_decrypt">Sauvegarde chiffrée - Tentative de décryptage</string> + <string name="restore_try_decrypt_s">Tentative de décryptage</string> + <string name="restore_backup_date">Sauvegarde effectuée sur %tw_restore_file_date%</string> + <string name="restore_sel_part">Sélectionner les Partitions à restaurer :</string> + <string name="restore_enable_md5_chk">Activer la vérification MD5 des fichiers de sauvegarde</string> + <string name="restore_completed">Restauration terminée</string> + <string name="swipe_restore">Glisser pour Restaurer</string> + <string name="swipe_restore_s">Restaurer</string> + <string name="rename_backup_hdr">Renommer la sauvegarde</string> + <string name="rename_backup_confirm">Renommer la sauvegarde ?</string> + <string name="rename_backup_confirm2">Cette action ne peut pas être annulée !</string> + <string name="renaming_backup">Changement du nom de la sauvegarde en cours...</string> + <string name="rename_backup_complete">Sauvegarde Renommée</string> + <string name="swipe_to_rename">Glisser pour Renommer</string> + <string name="swipe_rename">Renommer</string> + <string name="confirm_hdr">Confirmer</string> + <string name="mount_hdr">Monter</string> + <string name="mount_sel_part"></string> + <string name="mount_sel_part">Sélectionner les Partitions à monter :</string> + <string name="mount_sys_ro_chk">Montez la partition système en lecture seule</string> + <string name="mount_sys_ro_s_chk">Monter le Système RO</string> + <string name="decrypt_data_btn">Chiffrer les données</string> + <string name="disable_mtp_btn">Désactiver MTP</string> + <string name="enable_mtp_btn">Activez MTP</string> + <string name="mount_usb_storage_btn">Monter Stockage USB</string> + <string name="usb_storage_hdr">Stockage USB</string> + <string name="usb_stor_mnt1">Stockage USB monté</string> + <string name="usb_stor_mnt2">Veillez à déconnecter votre appareil</string> + <string name="usb_stor_mnt3">de votre ordinateur avant de le libérer !</string> + <string name="unmount_btn">Libérer</string> + <string name="reboot_hdr">Redémarrer</string> + <string name="rb_system_btn">Système</string> + <string name="rb_poweroff_btn">Eteindre</string> + <string name="rb_recovery_btn">Récupération</string> + <string name="rb_bootloader_btn">Amorçage</string> + <string name="rb_download_btn">Télécharger</string> + <string name="turning_off">Arrêt en cours...</string> + <string name="swipe_power_off">Glisser pour éteindre</string> + <string name="swipe_power_off_s">Éteindre</string> + <string name="sys_ro_hdr">Partition système non modifiée</string> + <string name="sys_ro_keep">Conserver le système de fichier en lecture seule ?</string> + <string name="sys_rop1">TWRP peut laisser votre partition système non modifiée</string> + <string name="sys_rop2">pour rendre plus facile les mises à jour officielles.</string> + <string name="sys_rop3">TWRP sera incapable d'empêcher la ROM d'origine</string> + <string name="sys_rop4">de remplacer TWRP et ne pourra pas vous proposer de rooter votre appareil.</string> + <string name="sys_rop5">L'installation de zips ou les opérations via adb peuvent</string> + <string name="sys_rop6">peut-être modifier la partition système.</string> + <string name="sys_rol1">TWRP peut laisser votre partition système non modifiée pour rendre plus facile les mises à jour officielles.</string> + <string name="sys_rol2">TWRP sera incapable d'empêcher la ROM d'origine de remplacer TWRP et ne pourra pas vous proposer de rooter votre appareil.</string> + <string name="sys_rol3">L'installation de zips ou les opérations via adb peuvent peut-être modifier la partition système.</string> + <string name="sys_ro_never_show_chk">Ne plus afficher cet écran lors des prochains démarrages</string> + <string name="sys_ro_keep_ro_btn">Conserver la lecture seule</string> + <string name="swipe_allow_mod">Glisser pour autoriser les modifications</string> + <string name="swipe_allow_mod_s">Autoriser les modifications</string> + <string name="settings_hdr">Paramètres</string> + <string name="settings_gen_hdr">Paramètre généraux</string> + <string name="settings_gen_s_hdr">Général</string> + <string name="settings_gen_btn">Général</string> + <string name="use_rmrf_chk">Utiliser rm -rf au lieu de formater</string> + <string name="use24clock_chk">Utiliser le format d'horloge sur 24 heures</string> + <string name="rev_navbar_chk">Disposition de la barre de navigation inversée</string> + <string name="simact_chk">Simuler des actions pour tester un thème</string> + <string name="simfail_chk">Simuler l'échec des actions</string> + <string name="ctr_navbar_rdo">Centrer les Boutons de la barre de navigation</string> + <string name="lft_navbar_rdo">Aligner les boutons de la barre de navigation à gauche</string> + <string name="rht_navbar_rdo">Aligner les boutons de barre de navigation à droite</string> + <string name="restore_defaults_btn">Rétablir les paramètres par défaut</string> + <string name="settings_tz_btn">Fuseau horaire</string> + <string name="settings_screen_btn">Écran</string> + <string name="settings_screen_bright_btn">Luminosité</string> + <string name="settings_vibration_btn">Vibration</string> + <string name="settings_language_btn">Langue</string> + <string name="time_zone_hdr">Fuseau horaire</string> + <string name="sel_tz_list">Sélectionnez le fuseau horaire :</string> + <string name="utcm11">(UTC -11) Samoa, Îles samoanes</string> + <string name="utcm10">(UTC -10) Hawaï</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Heure du Pacifique</string> + <string name="utcm7">(UTC -7) Heure des Rocheuses</string> + <string name="utcm6">(UTC -6) Heure du Centre</string> + <string name="utcm5">(UTC -5) Heure de l'Est</string> + <string name="utcm4">(UTC -4) Heure de l'Atlantique</string> + <string name="utcm3">(UTC -3) Brésil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Brésil, São Paulo</string> + <string name="utcm1">(UTC -1) Açores, Le Cap-Vert</string> + <string name="utc0">(UTC 0) Londres, Dublin, Lisbonne</string> + <string name="utcp1">(UTC +1) Berlin, Bruxelles, Paris</string> + <string name="utcp2">(UTC +2) Athènes, Istanbul, Afrique du Sud</string> + <string name="utcp3">(UTC +3) Moscou, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilissi, Muscat</string> + <string name="utcp5">(UTC +5) Ekaterinbourg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoï, Djakarta</string> + <string name="utcp8">(UTC +8) Pékin, Singapour, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokyo, Séoul, Iakoutsk</string> + <string name="utcp10">(UTC +10) Australie orientale, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, îles Salomon</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Îles Fidji</string> + <string name="sel_tz_offset">Sélectionner le Décalage (habituellement 0) : %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Aucun</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Utiliser l'heure d'été/hiver (DST)</string> + <string name="curr_tz">Fuseau horaire : %tw_time_zone%</string> + <string name="curr_tz_s">Fuseau horaire :</string> + <string name="set_tz_btn">Régler le fuseau horaire</string> + <string name="settings_screen_hdr">Paramètres d'écran</string> + <string name="settings_screen_timeout_hdr">Mise en veille de l'écan</string> + <string name="enable_timeout_chk">Activer la mise en veille</string> + <string name="screen_to_slider">Délai avant mise en veille :</string> + <string name="screen_to_slider_s">Délai avant mise en veille en secondes (0 = désactivé): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Paramètre de mise en veille non disponible</string> + <string name="screen_bright_slider">Luminosité : %tw_brightness_pct% %</string> + <string name="screen_bright_na">Paramètre de luminosité non disponible</string> + <string name="vibration_hdr">Vibration</string> + <string name="button_vibration_hdr">Vibration des boutons</string> + <string name="kb_vibration_hdr">Vibration du clavier</string> + <string name="act_vibration_hdr">Vibration d'action</string> + <string name="button_vibration">Vibration des boutons :</string> + <string name="kb_vibration">Vibration du clavier :</string> + <string name="act_vibration">Vibration d'action :</string> + <string name="select_language">Choisir la langue :</string> + <string name="set_language_btn">Définir la langue</string> + <string name="advanced_hdr">Paramètres avancés</string> + <string name="copy_log_confirm">Copier les journaux sur carte SD ?</string> + <string name="copying_log">Copie des journaux sur la carte SD en cours...</string> + <string name="copy_log_complete">Copie des journaux Effectuée</string> + <string name="fix_perm_btn">Corriger les autorisations</string> + <string name="fix_perm_s_btn">Corriger les autorisations</string> + <string name="part_sd_btn">Partitionner SD Card</string> + <string name="part_sd_s_btn">Carte SD</string> + <string name="file_manager_btn">Gestionnaire de fichiers</string> + <string name="language_hdr">Langue</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Recharger le thème</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Injecter TWRP</string> + <string name="inject_twrp_confirm">Réinjecter TWRP ?</string> + <string name="injecting_twrp">Réinjection de TWRP en cours...</string> + <string name="inject_twrp_complete">Injection de TWRP Terminée</string> + <string name="swipe_to_confirm">Glisser pour confirmer</string> + <string name="part_sd_hdr">Partitionner la carte SD</string> + <string name="part_sd_lose">Vous allez perdre tous les fichiers sur votre carte SD !</string> + <string name="part_sd_undo">Cette action ne peut pas être annulée !</string> + <string name="part_sd_ext_sz">Taille EXT :</string> + <string name="part_sd_swap_sz">Taille du swap :</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Système de Fichiers :</string> + <string name="swipe_part_sd">Glisser pour Partitionner</string> + <string name="swipe_part_sd_s">Partitionner</string> + <string name="partitioning_sd">Partitionnement de la carte SD en cours...</string> + <string name="partitioning_sd2">Cela va durer quelques minutes.</string> + <string name="part_sd_complete">Partitionnement Terminé</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Restaurer l'image de démarrage originale</string> + <string name="dumlock_restore_confirm">Restaurer l'image de démarrage originale ?</string> + <string name="dumlock_restoring">Restauration de l'image de démarrage originale en cours...</string> + <string name="dumlock_restore_complete">Restauration de l'image de démarrage originale effectué</string> + <string name="dumlock_reflash_btn">Réinstaller le mode de Récupération</string> + <string name="dumlock_reflash_confirm">Réinstaller le mode de Récupération sur le Démarrage ?</string> + <string name="dumlock_reflashing">Réinstallation du mode de Récupération sur Démarrage...</string> + <string name="dumlock_reflash_complete">Réinstallation du mode de Récupération sur Démarrage effectuée</string> + <string name="dumlock_install_btn">Installer HTC Dumlock</string> + <string name="dumlock_install_confirm">Installer les fichiers HTC Dumlock sur la ROM?</string> + <string name="dumlock_installing">Installation de HTC Dumlock...</string> + <string name="dumlock_install_complete">Installation de HTC Dumlock complétée</string> + <string name="swipe_to_unlock">Glisser pour déverrouiller</string> + <string name="swipe_unlock">Dévérrouiller</string> + <string name="fm_hdr">Gestionnaire de fichiers</string> + <string name="fm_sel_file">Sélectionnez un fichier ou un dossier</string> + <string name="fm_type_folder">Dossier</string> + <string name="fm_type_file">Fichier </string> + <string name="fm_choose_act">Choisir une action</string> + <string name="fm_selected">%tw_fm_type% sélectionné:</string> + <string name="fm_copy_btn">Copier</string> + <string name="fm_copy_file_btn">Copier le fichier</string> + <string name="fm_copy_folder_btn">Copier le dossier</string> + <string name="fm_copying">Copie</string> + <string name="fm_move_btn">Déplacer</string> + <string name="fm_moving">Déplacement</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Supprimer</string> + <string name="fm_deleting">Suppression en cours</string> + <string name="fm_rename_btn">Renommer</string> + <string name="fm_rename_file_btn">Renommer le fichier</string> + <string name="fm_rename_folder_btn">Renommer le dossier</string> + <string name="fm_renaming">Renommage en cours</string> + <string name="fm_sel_dest">Sélectionnez le dossier de destination</string> + <string name="fm_sel_curr_folder">Sélectionner le dossier actuel</string> + <string name="fm_rename_hdr">Renommer</string> + <string name="fm_set_perms_hdr">Définir les permissions</string> + <string name="fm_perms">Permissions:</string> + <string name="fm_complete">Opération de fichier complétée</string> + <string name="decrypt_data_hdr">Décrypter les données</string> + <string name="decrypt_data_enter_pass"></string> + <string name="decrypt_data_failed">Mot de passe incorrect, veuillez réessayer!</string> + <string name="decrypt_data_failed_pattern">Échec du schéma, veuillez réessayer!</string> + <string name="decrypt_data_enter_pattern">Entrez le schéma.</string> + <string name="decrypt_data_trying">Tentative de décryptage</string> + <string name="term_hdr">Commande de terminal</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">TUER</string> + <string name="term_sel_folder_hdr">Naviguez jusqu'au dossier de démarrage</string> + <string name="adb_sideload_hdr">Transfert via ADB</string> + <string name="sideload_wipe_dalvik_chk">Effacer le cache Dalvik</string> + <string name="sideload_wipe_cache_chk">Effacer le Cache</string> + <string name="swipe_to_sideload">Glisser pour débuter le transfert</string> + <string name="swipe_sideload">Démarrer</string> + <string name="sideload_confirm">Transfert via ADB</string> + <string name="sideload_usage">Utilisation: adb sideload (nom de fichier.zip)</string> + <string name="sideload_complete">Transfert par ADB complété</string> + <string name="fix_perms_hdr">Réparer les permissions</string> + <string name="fix_perms_note">Note: La réparation des permissions est rarement nécessaire.</string> + <string name="fix_perms_selinux_chk">Réparer aussi les contextes SELinux</string> + <string name="fix_perms_sel_note1">La réparation des contextes SELinux pourrait</string> + <string name="fix_perms_sel_note2">empêcher l'appareil de démarrer correctement.</string> + <string name="swipe_to_fix_perms">Glisser pour réparer les permissions</string> + <string name="swipe_fix_perms">Réparer les permissions</string> + <string name="fixing_perms">Réparation des permissions...</string> + <string name="fix_perms_complete">Réparation des permissions complétée</string> + <string name="reboot_hdr">Redémarrer</string> + <string name="su_hdr">Vérification SuperSU</string> + <string name="su_note1">Votre appareil ne semble pas être rooté.</string> + <string name="su_note2">Installer SuperSU maintenant?</string> + <string name="su_note3">Ceci va rooter votre appareil.</string> + <string name="su_cancel">Ne pas installer</string> + <string name="swipe_su_to_install">Glisser pour installer</string> + <string name="swipe_su_install">Installer</string> + <string name="su_installing">Installation de SuperSU</string> + <string name="sel_storage_list">Sélection du stockage</string> + <string name="ok_btn">OK</string> + <string name="no_kernel_selinux">Le noyau ne supporte pas la lecture des contextes SELinux.</string> + <string name="full_selinux">Le support complet de SELinux est présent.</string> + <string name="no_selinux">Aucun support SELinux (pas de libselinux).</string> + <string name="mtp_enabled">MTP activé</string> + <string name="mtp_crash">MTP a planté, pas de démarrage de MTP à l'allumage.</string> + <string name="rebooting">Redémarrage...</string> + <string name="decrypt_success">Décryption réussie avec le mot de passe par défaut.</string> + <string name="unable_to_decrypt">Incapable de décrypter avec le mot de passe par défaut. Vous devrez peut-être formater la partition Données.</string> + <string name="generating_md51">Génération du MD5</string> + <string name="generating_md52">* Génération du MD5...</string> + <string name="md5_created">* MD5 créé.</string> + <string name="md5_error">* Erreur MD5 !</string> + <string name="md5_compute_error">* Erreur dans le calcul du MD5.</string> + <string name="md5_created">* MD5 créé.</string> + <string name="current_date">(Date du jour)</string> + <string name="auto_generate">(Génération automatisée)</string> + <string name="unable_to_locate_partition">Impossible de localiser la partition '{1}' pour le calcul de la sauvegarde.</string> + <string name="no_partition_selected">Aucune partition sélectionnée pour la sauvegarde.</string> + <string name="total_partitions_backup">* Nombre de partitions à sauvegarder : {1}</string> + <string name="total_backup_size">* Taille totale des données: {1}MB</string> + <string name="available_space">* Espace disponible: {1}MB</string> + <string name="unable_locate_storage">Impossible de trouver le périphérique de stockage.</string> + <string name="no_space">Pas assez d'espace libre.</string> + <string name="backup_started">[SAUVEGARDE COMMENCÉE]</string> + <string name="backup_folder">* Dossier de sauvegarde: {1}</string> + <string name="fail_backup_folder">Échec de la création du dossier de sauvegarde.</string> + <string name="avg_backup_fs">Vitesse moyenne pour les systèmes de fichiers: {1} MB/sec</string> + <string name="avg_backup_img">Vitesse moyenne pour les images de disque: {1} MB/sec</string> + <string name="total_backed_size">[{1} MB TOTAL SAUVEGARDÉES]</string> + <string name="backup_completed">[SAUVEGARDE TERMINÉE EN {1} SECONDES]</string> + <string name="restore_started">[RESTAURATION COMMENCÉE]</string> + <string name="restore_folder">Restauration du dossier: '{1}'</string> + <string name="restore_part_done">[{1} complété ({2} secondes)]</string> + <string name="verifying_md5">Vérification du MD5</string> + <string name="skip_md5">Omission de la vérification des MD5 selon le réglage utilisateur.</string> + <string name="calc_restore">Calcul des détails de la restauration...</string> + <string name="restore_read_only">Impossible de restaurer {1} -- monté en lecture seule.</string> + <string name="restore_unable_locate">Impossible de localiser la partition '{1}' pour la restauration.</string> + <string name="no_part_restore">Aucune partition sélectionnée pour la restauration.</string> + <string name="restore_part_count">Restauration de {1} partitions...</string> + <string name="total_restore_size">Taille totale de la restauration: {1}MB</string> + <string name="updating_system_details">Mise à jour des détails du système</string> + <string name="restore_complete">[RESTAURATION COMPLÉTÉE EN {1} SECONDES]</string> + <string name="error_opening_strerr">Erreur d'ouverture: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Impossible de localiser la partition nommée: '{1}'</string> + <string name="unable_find_part_path">Impossible de trouver la partition pour le chemin '{1}'</string> + <string name="update_part_details">Mise à jour des informations de partition...</string> + <string name="update_part_details_done">...terminé</string> + <string name="wiping_dalvik">Effacement des dossiers du cache Dalvik...</string> + <string name="cleaned">Nettoyé: {1}...</string> + <string name="dalvik_done">-- Effacement des dossiers du cache Dalvik complété!</string> + <string name="no_andsec">Pas de partitions Android sécurisé trouvées.</string> + <string name="unable_to_locate">Impossible de trouver {1}.</string> + <string name="wiping_datamedia">Effacement du stockage interne -- /data/media...</string> + <string name="unable_to_mount">Incapable de monter {1}</string> + <string name="unable_to_mount_internal">Incapable de monter internal_storage</string> + <string name="unable_to_mount_storage">Incapable de monter le stockage</string> + <string name="fail_decrypt">Échec de la décryption des données.</string> + <string name="no_crypto_support">Le support cryptographique n'a pas été inclus dans cette compilation.</string> + <string name="decrypt_success">Données décryptées correctement, nouvel appareil bloc: '{1}'</string> + <string name="done">Terminé.</string> + <string name="start_partition_sd">Partitionnement de la carte SD en cours...</string> + <string name="partition_sd_locate">Incapable de localiser le bloc à partitioner.</string> + <string name="ext_swap_size">EXT + Swap est plus grand que la taille de sdcard.</string> + <string name="remove_part_table">Suppression de table de partition...</string> + <string name="unable_rm_part">Impossible de supprimer la table de partition.</string> + <string name="create_part">Création de la partition {1}...</string> + <string name="unable_to_create_part">Impossible de créer la partition {1}.</string> + <string name="format_sdext_as">Formatage sd-ext en {1}...</string> + <string name="part_complete">Partitionnement terminé.</string> + <string name="unable_to_open">Impossible d'ouvrir '{1}'.</string> + <string name="mtp_already_enabled">MTP déjà activé</string> + <string name="mtp_fail">Échec de l'activation du MTP</string> + <string name="no_mtp">Support MTP non inclus</string> + <string name="image_flash_start">[ÉCRITURE IMAGE COMMENCÉE]</string> + <string name="img_to_flash">Image à écrire: '{1}'</string> + <string name="flash_unable_locate">Impossible de localiser la partition '{1}' pour l'écriture.</string> + <string name="no_part_flash">Pas de partition sélectionnée pour l'écriture.</string> + <string name="too_many_flash">Trop de partitions sélectionnées pour l'écriture.</string> + <string name="invalid_flash">Partition invalide pour l'écriture.</string> + <string name="flash_done">[ÉCRITURE IMAGE COMPLÉTÉE]</string> + <string name="wiping">Effacement {1}</string> + <string name="repair_not_exist">{1} n'existe pas! Incapable de réparer!</string> + <string name="repairing_using">Réparation de {1} à l'aide de {2}...</string> + <string name="unable_repair">Incapable de réparer {1}.</string> + <string name="mount_data_footer">Échec du montage de /data et incapable de trouver la fin du bloc crypto.</string> + <string name="create_folder_strerr">Incapable de créer le dossier '{1}' ({2}).</string> + <string name="fail_mount">Échec du montage '{1}' ({2})</string> + <string name="fail_mount">Échec du démontage '{1}' ({2})</string> + <string name="cannot_resize">Incapable de redimensionner {1}.</string> + <string name="repair_resize">Réparation de {1} avant de redimensionner.</string> + <string name="unable_resize">Incapable de redimensionner {1}.</string> + <string name="no_md5_found">Pas de fichier md5 trouvé pour '{1}'. Veuillez désactiver la vérification MD5 pour effectuer la restauration.</string> + <string name="md5_fail_match">Le MD5 ne correspond pas pour '{1}'.</string> + <string name="md5_matched">Le MD5 correspond pour '{1}'.</string> + <string name="restoring">Restauration en cours</string> + <string name="format_data_msg">Vous aurez peut-être à redémarrer pour pouvoir utiliser /data à nouveau.</string> + <string name="format_data_err">Incapable de formater pour enlever l'encryption.</string> + <string name="formatting_using">Formatage {1} en utilisant {2}...</string> + <string name="unable_to_wipe">Incapable d'effacer {1}.</string> + <string name="remove_all">Supression de tout les fichiers sous '{1}'</string> + <string name="wiping_data">Effacement de /data sauf /data/media...</string> + <string name="backing_up">Sauvegarde {1}...</string> + <string name="backing">Sauvegarde en cours</string> + <string name="backup_size">La taille de la sauvegarde de '{1}' est de 0 octets.</string> + <string name="datamedia_fs_restore">AVERTISSEMENT: Cette sauvegarde de /data a été faite avec un système de fichier {1}! Il est possible que cette restauration ne fonctionne pas correctement sans que vous retourniez au format {1}.</string> + <string name="restoring">Restauration de {1}...</string> + <string name="restoring_hdr">Restauration en cours</string> + <string name="recreate_folder_err">Incapable de recréer le dossier {1}.</string> + <string name="img_size_err">La taille de l'image est plus grande que la cible</string> + <string name="flashing">Écriture de {1}...</string> + <string name="backup_folder">Dossier de sauvegarde à '{1}'</string> + <string name="locate_backup_err">Impossible de localiser la sauvegarde '{1}'</string> + <string name="set_restore_opt">Définition des options de restauration: '{1}':</string> + <string name="md5_check_skip">La vérification MD5 est omise</string> + <string name="ors_encrypt_restore_err">Impossible d'utiliser OpenRecoveryScript pour restaurer une sauvegarde chiffrée.</string> + <string name="mounting">Montage</string> + <string name="unmounting">Démontage</string> + <string name="mounted">Monté la partition '{1}'</string> + <string name="unmounted">Démonté la partition '{1}'</string> + <string name="setting">Réglage de '{1}' à '{2}'</string> + <string name="setting_empty">Réglage de '{1}' à vide</string> + <string name="making_dir1">Création du répertoire</string> + <string name="making_dir2">Création du répertoire: '{1}'</string> + <string name="running_command">Éxécution de la commande</string> + <string name="sideload">Transfert via ADB</string> + <string name="start_sideload">Démarrage de la fonctionalité de transfert par ADB...</string> + <string name="need_new_adb">Vous avez besoin d'adb 1.0.32 ou plus récent pour utiliser le transfert (sideload) sur cet appareil.</string> + <string name="no_pwd">Aucun mot de passe fourni.</string> + <string name="done_ors">Traitement du fichier de script terminé</string> + <string name="injecttwrp">Injection de TWRP dans l'image de démarrage...</string> + <string name="zip_err">Erreur lors de l'installation du fichier zip '{1}'</string> + <string name="installing_zip">Installation du fichier zip '{1}'</string> + <string name="select_backup_opt">Définition des options de sauvegarde:</string> + <string name="compression_on">Compression activée</string> + <string name="md5_off">La génération de MD5 est désactivée</string> + <string name="backup_fail">Échec de la sauvegarde</string> + <string name="backup_complete">Sauvegarde terminée!</string> + <string name="running_recovery_commands">Exécution des commandes de récupération</string> + <string name="recovery_commands_complete">Commandes de récupération complétées</string> + <string name="running_ors">OpenRecoveryScript en cours d'exécution</string> + <string name="ors_complete">OpenRecoveryScript complété</string> + <string name="no_updater_binary">'{1}' introuvable dans le fichier zip.</string> + <string name="check_for_md5">Vérification des fichiers MD5...</string> + <string name="fail_sysmap">Impossible de mapper le fichier '{1}'</string> + <string name="verify_zip_sig">Vérification de la signature du zip...</string> + <string name="verify_zip_fail">Échec de la vérification des signatures du zip!</string> + <string name="verify_zip_done">Signature du zip vérifiée correctement.</string> + <string name="zip_corrupt">Le fichier zip est corrompu!</string> + <string name="no_md5">Pas de vérification MD5: aucun fichier MD5 trouvé</string> + <string name="md5_fail">Le MD5 ne correspond pas</string> + <string name="md5_match">Le MD5 correspond</string> + <string name="pid_signal">Le processus {1} s'est terminé avec le signal: {2}</string> + <string name="pid_error">Le processus {1} s'est terminé avec ERREUR: {2}</string> + <string name="install_dumlock">Installation de HTC Dumlock...</string> + <string name="dumlock_restore">Restauration de l'image de démarrage originale en cours...</string> + <string name="dumlock_reflash">Réécriture de l'image de récupération sur celle de démarrage...</string> + <string name="run_script">Exécution du script {1}...</string> + <string name="rename_stock">Renommé le fichier de récupération original dans /system pour empêcher le système d'exploitation original de remplacer TWRP.</string> + <string name="split_backup">Morcellement des fichiers de sauvegarde en plusieurs archives...</string> + <string name="backup_error">Erreur dans la création de la sauvegarde.</string> + <string name="restore_error">Erreur durant le procédé de restauration.</string> + <string name="split_thread">Division du thread ID {1} en archive {2}</string> + <string name="file_progress">%llu de %llu fichiers, %i%%</string> + <string name="size_progress">%lluMO de %lluMO, %i%%</string> + <string name="decrypt_cmd">Tentative de décryption de la partition de données via la ligne de commande.</string> + <string name="base_pkg_err">Incapable de charger les paquets de base.</string> + <string name="simulating">Simulation des actions...</string> + <string name="backup_cancel">Sauvegarde annulée.</string> + <string name="config_twrp">Configuration de TWRP...</string> + <string name="config_twrp_err">Impossible de configurer TWRP avec ce noyau.</string> + <string name="copy_log">Copié le journal de récupération sur {1}.</string> + <string name="max_queue">File d'attente pour fichiers zip maximale atteinte!</string> + <string name="min_queue">File d'attente pour fichiers zip minimale atteinte!</string> + <string name="screenshot_saved">La capture d'écran a été sauvegardée à {1}</string> + <string name="screenshot_err">Échec de la capture d'écran!</string> + <string name="zip_wipe_cache">Un ou plusieurs zip ont demandé un effacement du cache -- E/n cours maintenant.</string> + <string name="and_sec_wipe_err">Impossible d'effacer "Android Secure"</string> + <string name="dalvik_wipe_err">Échec de l'effacement de Dalvik</string> + <string name="auto_gen">(Génération automatisée)</string> + <string name="curr_date">(Date du jour)</string> + <string name="backup_name_len">Le nom de la sauvegarde est trop long.</string> + <string name="backup_name_invalid">Le nom de la sauvegarde '{1}' contient le caractère non valide: '{1}'</string> + <string name="backup_name_exists">Une sauvegarde avec ce nom existe déjà.</string> + <string name="no_real_sdcard">Cet appareil n'a pas une vraie carte SD! Abandon!</string> + <string name="cancel_sideload">Annulation du transfert par ADB...</string> + <string name="change_fs_err">Erreur lors du changement du système de fichier.</string> + </resources> +</language> diff --git a/gui/theme/common/languages/hu.xml b/gui/theme/common/languages/hu.xml new file mode 100644 index 000000000..77b1ba46d --- /dev/null +++ b/gui/theme/common/languages/hu.xml @@ -0,0 +1,695 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Magyar</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">Rendszer</string> + <string name="system_image">Rendszerkép</string> + <string name="vendor">Gyártó</string> + <string name="vendor_image">Gyártói kép</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Gyorsítótár</string> + <string name="data">Adat</string> + <string name="data_backup">Adat (data/media nélkül)</string> + <string name="sdcard">SD-kártya</string> + <string name="internal">Belső tárhely</string> + <string name="microsd">Mikro SD-kártya</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART-gyorsítótár</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adoptált adatok</string> + <string name="adopted_storage">Adoptált tároló</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Akkumulátor: %tw_battery%</string> + <string name="sort_by_name">Rendezés név szerint</string> + <string name="sort_by_date">Rendezés dátum szerint</string> + <string name="sort_by_size">Rendezés méret szerint</string> + <string name="sort_by_name_only">Név</string> + <string name="sort_by_date_only">Dátum</string> + <string name="sort_by_size_only">Méret</string> + <string name="tab_general">ÁLTALÁNOS</string> + <string name="tab_options">BEÁLLÍTÁSOK</string> + <string name="tab_backup">BIZTONSÁGI MENTÉS</string> + <string name="tab_time_zone">IDŐZÓNA</string> + <string name="tab_screen">KÉPERNYŐ</string> + <string name="tab_vibration">REZGÉS</string> + <string name="tab_language">NYELV</string> + + <string name="install_btn">Telepítés</string> + <string name="wipe_btn">Törlés</string> + <string name="backup_btn">Biztonsági mentés</string> + <string name="restore_btn">Visszaállítás</string> + <string name="mount_btn">Csatolás</string> + <string name="settings_btn">Beállítások</string> + <string name="advanced_btn">Haladó</string> + <string name="reboot_btn">Újraindítás</string> + <string name="files_btn">Fájlok</string> + <string name="copy_log_btn">Napló másolása</string> + <string name="select_type_hdr">Válasszon típust</string> + <string name="install_zip_hdr">Zip telepítése</string> + <string name="install_zip_btn">Zip telepítése</string> + <string name="install_image_hdr">Képfájl telepítése</string> + <string name="install_image_btn">Képfájl telepítése</string> + <string name="install_select_file_hdr">Fájl kiválasztása</string> + <string name="file_selector_folders_hdr">Mappák</string> + <string name="select_file_from_storage">Fájl kiválasztása innen: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Telepítés</string> + <string name="select_storage_hdr">Válasszon tárolót</string> + <string name="select_storage_btn">Válasszon tárolót</string> + <string name="queue_hdr">Várólista</string> + <string name="zip_queue_count">%tw_zip_queue_count% / max 10 fájl a várólistán</string> + <string name="zip_queue_count_s">%tw_zip_queue_count% / 10 fájl:</string> + <string name="zip_warn1">Ez a művelet nem kompatibilis szoftvert telepíthet,</string> + <string name="zip_warn2">és a készüléket használhatatlanná teheti.</string> + <string name="zip_back_cancel">Nyomja meg a vissza gombot a zip hozzáadásának visszavonásához.</string> + <string name="zip_back_clear">Nyomja meg a vissza gombot a várólista törléséhez.</string> + <string name="folder">Mappa:</string> + <string name="file">Fájl:</string> + <string name="zip_sig_chk">Zip aláírás ellenőrzése</string> + <string name="inject_twrp_chk">TWRP injektálása telepítés után</string> + <string name="install_reboot_chk">Újraindítás telepítés vége után</string> + <string name="options_hdr">Beállítások</string> + <string name="confirm_flash_hdr">Flashelés megerősítése</string> + <string name="zip_queue">Várólista:</string> + <string name="options">Beállítások:</string> + <string name="swipe_confirm"> Megerősítés</string> + <string name="zip_add_btn">Több Zip hozzáadása</string> + <string name="zip_clear_btn">Zip várólista törlése</string> + <string name="install_zip_count_hdr">%tw_zip_index% / %tw_zip_queue_count% Zip telepítése</string> + <string name="installing_zip_xml">Zip telepítése: %tw_file%</string> + <string name="failed">Sikertelen</string> + <string name="successful">Sikeres</string> + <string name="install_failed">A telepítés sikertelen</string> + <string name="install_successful">A telepítés sikeres</string> + <string name="wipe_cache_dalvik_btn">Gyorsítótár/dalvik törlése</string> + <string name="reboot_system_btn">Rendszer újraindítása</string> + <string name="install_sel_target">Válassza ki a célpartíciót</string> + <string name="flash_image_select">Kép flasheléséhez vállaszon partíciót:</string> + <string name="target_partition">Célpartíció:</string> + <string name="flashing_image">Kép flashelése...</string> + <string name="image_flashed">Kép flashelve</string> + <string name="wipe_cache_dalvik_confirm">Gyorsítótár & Dalvik törlése?</string> + <string name="wiping_cache_dalvik">Gyorsítótár & Dalvik törlése...</string> + <string name="wipe_cache_dalvik_complete">Gyorsítótár & Dalvik törlése kész</string> + <string name="swipe_wipe">Csúsztasson a törléshez</string> + <string name="swipe_wipe_s"> Törlés</string> + <string name="no_os1">Nincs telepített operációs rendszer!</string> + <string name="no_osrb">Biztosan újra kívánja indítani?</string> + <string name="no_ospo">Biztosan ki szeretné kapcsolni?</string> + <string name="rebooting">Újraindítás...</string> + <string name="swipe_reboot">Csúsztasson az újraindításhoz</string> + <string name="swipe_reboot_s"> Újraindítás</string> + <string name="reboot_install_app_hdr">TWRP alkalmazás telepítése?</string> + <string name="reboot_install_app1">Szeretné telepíteni a hivatalos TWRP alkalmazást?</string> + <string name="reboot_install_app2">Az alkalmazás képes az új TWRP verziók ellenőrzésére.</string> + <string name="reboot_install_app_prompt_install">Azonnal telepítse a TWRP alkalmazást, ha nincs telepítve</string> + <string name="reboot_install_app_system">Telepítés rendszeralkalmazásként</string> + <string name="reboot_installing_app">Alkalmazás telepítése...</string> + <string name="swipe_to_install_app">Csúsztasson a TWRP alkalmazás telepítéséhez</string> + <string name="swipe_flash">Csúsztasson a flashelés megerősítéséhez</string> + <string name="confirm_action">Művelet megerősítése</string> + <string name="back_cancel">Nyomja meg a vissza gombot a megszakításhoz.</string> + <string name="cancel_btn">Mégsem</string> + <string name="wipe_hdr">Törlés</string> + <string name="factory_reset_hdr">Gyári beállítások visszaállítása</string> + <string name="factory_reset_btn">Gyári beállítások visszaállítása</string> + <string name="factory_reset1">Törli az Adatot, Gyorsítótárat, és Dalvikot</string> + <string name="factory_reset2">(nem érinti a belső tárolót)</string> + <string name="factory_reset3">Leggyakrabban ez az</string> + <string name="factory_reset4">amire szüksége van.</string> + <string name="factory_resetting">Gyári beállítások visszaállítása...</string> + <string name="advanced_wipe_hdr">Speciális törlés</string> + <string name="advanced_wipe_btn">Speciális törlés</string> + <string name="wipe_enc_confirm">Törli az adatok titkosítását?</string> + <string name="formatting_data">Adatok formázása...</string> + <string name="swipe_format_data">Csúsztasson az Adatok formázásához</string> + <string name="swipe_format_data_s"> Adatok formázása</string> + <string name="factory_reset_complete">Gyári beállítások visszaállítása kész</string> + <string name="sel_part_hdr">Válassza ki a partíciókat</string> + <string name="wipe_sel_confirm">Törli a kiválasztott partíció(ka)t?</string> + <string name="wiping_part">Partíció(k) törlése...</string> + <string name="wipe_complete">Törlés kész</string> + <string name="sel_part_wipe">Válassza ki a törlendő partíciókat:</string> + <string name="invalid_part_sel">Érvénytelen partíciós kiválasztás</string> + <string name="format_data_hdr">Adatok formázása</string> + <string name="format_data_btn">Adatok formázása</string> + <string name="format_data_ptr1">Adatok formázása törli az összes alkalmazását,</string> + <string name="format_data_ptr2">mentését, képét, videóját, médiáját és</string> + <string name="format_data_ptr3">eltávolítja a titkosítást a belső tárolón.</string> + <string name="format_data_adopted">Beleértve az adoptált tárolót</string> + <string name="format_data_lcp1">Adatok formázása törli az összes alkalmazását, mentését, képét, videóját, médiáját és</string> + <string name="format_data_lcp2">eltávolítja a titkosítást a belső tárolón.</string> + <string name="format_data_wtc1">Adatok formázása törli az összes alkalmazását,</string> + <string name="format_data_wtc2">mentését és médiáját. Nem lehet visszavonni.</string> + <string name="format_data_undo">Ezt nem lehet visszavonni.</string> + <string name="format_data_complete">Adatok formázása kész</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Folytatáshoz gépelje be: yes. Nyomja meg a vissza gombot a megszakításhoz.</string> + <string name="part_opt_hdr">Partíció lehetőségei: %tw_partition_name%</string> + <string name="sel_act_hdr">Válasszon műveletet</string> + <string name="file_sys_opt">Fájlrendszer beállítások</string> + <string name="partition">Partíció: %tw_partition_name%</string> + <string name="part_mount_point">Csatlakoztatási pont: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Fájlrendszer: %tw_partition_file_system%</string> + <string name="part_present_yes">Jelen: igen</string> + <string name="part_present_no">Jelen: nem</string> + <string name="part_removable_yes">Cserélhető: igen</string> + <string name="part_removable_no">Cserélhető: nem</string> + <string name="part_size">Méret: %tw_partition_size%MB</string> + <string name="part_used">Használt: %tw_partition_used%MB</string> + <string name="part_free">Szabad: %tw_partition_free%MB</string> + <string name="part_backup_size">Biztonsági mentés mérete: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Fájlrendszer átméretezése</string> + <string name="resize_btn_s">Átméretezés</string> + <string name="resize_confirm">Átméretezi: %tw_partition_name%?</string> + <string name="resizing">Átméretezés...</string> + <string name="resize_complete">Átméretezés kész</string> + <string name="swipe_resize">Csúsztasson az átméretezéshez</string> + <string name="swipe_resize_s"> Átméretezés</string> + <string name="repair_btn">Fájlrendszer javítása</string> + <string name="repair_btn_s">Javítás</string> + <string name="repair_confirm">Javítja: %tw_partition_name%?</string> + <string name="repairing">Javítás...</string> + <string name="repair_complete">Javítás kész</string> + <string name="swipe_repair">Csúsztasson a javításhoz</string> + <string name="swipe_repair_s"> Javítás</string> + <string name="change_fs_btn">Fájlrendszer módosítása</string> + <string name="change_fs_btn_s">Módosítás</string> + <string name="change_fs_for_hdr">Fájlrendszer módosítása: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partíció: %tw_partition_name% > Válasszon fájlrendszert</string> + <string name="change_fs_warn1">Néhány ROM vagy a kernel nem támogat bizonyos</string> + <string name="change_fs_warn2">fájlrendszert. Óvatosan folytassa!</string> + <string name="change_fs_confirm">Módosítja: %tw_partition_name%?</string> + <string name="formatting">Formázás...</string> + <string name="format_complete">Formázás kész</string> + <string name="swipe_change_fs">Csúsztasson a módosításhoz</string> + <string name="swipe_change_s"> Módosítás</string> + <string name="back_btn">Vissza</string> + <string name="wipe_enc_btn">Titkosítás törlése</string> + <string name="swipe_factory_reset">Csúsztasson a gyári beállítások visszaállításához</string> + <string name="repair_change_btn">Fájlrendszer javítása vagy módosítása</string> + <string name="storage_hdr">Tároló: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Biztonsági mentés</string> + <string name="backup_confirm_hdr">Biztonsági mentés megerősítése</string> + <string name="encryption_tab">TITKOSÍTÁS</string> + <string name="encryption">Titkosítás:</string> + <string name="name">Név:</string> + <string name="sel_part_backup">Válassza ki a menteni kívánt partíciókat:</string> + <string name="storage">Tárhely:</string> + <string name="enc_disabled">letiltva - állítson be jelszót az engedélyezéshez</string> + <string name="enc_enabled">engedélyezve</string> + <string name="enable_backup_comp_chk">Tömörítés engedélyezése</string> + <string name="skip_md5_backup_chk">Mentés közbeni MD5 generálás kihagyása</string> + <string name="disable_backup_space_chk" version="2">Szabad hely ellenőrzésének letiltása</string> + <string name="current_boot_slot">Jelenlegi Slot: %tw_active_slot%</string> + <string name="boot_slot_a">Slot A</string> + <string name="boot_slot_b">Slot B</string> + <string name="changing_boot_slot">Boot Slot váltása</string> + <string name="changing_boot_slot_complete">Boot Slot váltása befejezve</string> + <string name="refresh_sizes_btn">Méretek frissítése</string> + <string name="swipe_backup">Csúsztasson a biztonsági mentéshez</string> + <string name="append_date_btn">Hozzáadás dátuma</string> + <string name="backup_name_exists">Egy biztonsági mentés az adott névvel már létezik!</string> + <string name="encrypt_backup">Biztonsági mentését titkosítani szeretné?</string> + <string name="enter_pass">Adja meg a jelszót:</string> + <string name="enter_pass2">Adja meg a jelszót újra:</string> + <string name="pass_not_match">A jelszavak nem egyeznek!</string> + <string name="partitions">Partíciók:</string> + <string name="disabled">Letiltva</string> + <string name="enabled">Engedélyezve</string> + <string name="backup_name_hdr">Biztonsági mentés nevének beállítása</string> + <string name="progress">Folyamat:</string> + <string name="backup_complete">Biztonsági mentés kész</string> + <string name="restore_hdr">Visszaállítás</string> + <string name="sel_backup_hdr">Biztonsági mentés kiválasztása</string> + <string name="restore_sel_store_hdr">Mentés kiválasztása innen: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Válassza ki a visszaállítandó csomagot:</string> + <string name="restore_enc_backup_hdr">Titkosított biztonsági mentés</string> + <string name="restore_dec_fail">Jelszó hibás, próbálja meg újra!</string> + <string name="del_backup_btn">Biztonsági mentés törlése</string> + <string name="del_backup_confirm">Biztonsági mentés törlése?</string> + <string name="del_backup_confirm2">Ezt nem lehet visszavonni!</string> + <string name="deleting_backup">Biztonsági mentés törlése...</string> + <string name="backup_deleted">Biztonsági mentés törlése kész</string> + <string name="swipe_delete">Csúsztasson a törléshez</string> + <string name="swipe_delete_s"> Törlés</string> + <string name="restore_try_decrypt">Titkosított biztonsági mentés - Dekódolás megpróbálása</string> + <string name="restore_try_decrypt_s">Dekódolás megpróbálása</string> + <string name="restore_backup_date">Biztonsági mentés ideje: %tw_restore_file_date%</string> + <string name="restore_sel_part">Válassza ki a visszaállítandó partíciókat:</string> + <string name="restore_enable_md5_chk">A biztonsági mentési fájlok MD5 ellenőrzésének engedélyezése</string> + <string name="restore_complete">Mentés helyreállítása kész</string> + <string name="swipe_restore">Csúsztasson a visszaállításhoz</string> + <string name="swipe_restore_s"> Visszaállítás</string> + <string name="rename_backup_hdr">Biztonsági mentés átnevezése</string> + <string name="rename_backup_confirm">Biztonsági mentés átnevezése?</string> + <string name="rename_backup_confirm2">Ezt nem lehet visszavonni!</string> + <string name="renaming_backup">Biztonsági mentés átnevezése...</string> + <string name="rename_backup_complete">Biztonsági mentés átnevezése kész</string> + <string name="swipe_to_rename">Csúsztasson az átnevezéshez</string> + <string name="swipe_rename"> Átnevezés</string> + <string name="confirm_hdr">Megerösítés</string> + <string name="mount_hdr">Csatolás</string> + <string name="mount_sel_part">Válassza ki a csatolandó partíciókat:</string> + <string name="mount_sys_ro_chk">Rendszerpartíció csatolása csak olvashatóként</string> + <string name="mount_sys_ro_s_chk">Rendszer csatolása RO</string> + <string name="decrypt_data_btn">Adat dekódolása</string> + <string name="disable_mtp_btn">MTP letiltása</string> + <string name="enable_mtp_btn">MTP engedélyezése</string> + <string name="mount_usb_storage_btn">USB-tár csatolása</string> + <string name="usb_storage_hdr">USB-tár</string> + <string name="usb_stor_mnt1">USB-tár csatolva</string> + <string name="usb_stor_mnt2">Győződjön meg róla, hogy biztonságosan távolítja el az eszközt</string> + <string name="usb_stor_mnt3">a számítógépről való leválasztás előtt!</string> + <string name="unmount_btn">Leválasztás</string> + <string name="rb_system_btn">Rendszer</string> + <string name="rb_poweroff_btn">Kikapcsolás</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download mód</string> + <string name="turning_off">Kikapcsolás...</string> + <string name="swipe_power_off">Csúsztasson a kikapcsoláshoz</string> + <string name="swipe_power_off_s">Kikapcsolás</string> + <string name="sys_ro_hdr">Változatlan rendszerpartíció</string> + <string name="sys_ro_keep">A rendszert továbbra is csak olvashatónak hagyja?</string> + <string name="sys_rop1">TWRP a rendszerpartícióját változatlanul hagyhatja,</string> + <string name="sys_rop2">hogy megkönnyítse a hivatalos frissítéseket.</string> + <string name="sys_rop3">TWRP nem lesz képes megakadályozni a gyári ROM-ot abban,</string> + <string name="sys_rop4">hogy lecserélje a TWRP-t és nem ajánlja fel a rootolást eszközéhez.</string> + <string name="sys_rop5">Zip-ek telepítése, vagy az adb műveletek továbbra is</string> + <string name="sys_rop6">módosítják a rendszer partícióit.</string> + <string name="sys_rol1">TWRP a rendszerpartícióját változatlanul hagyhatja, hogy megkönnyítse a hivatalos frissítéseket.</string> + <string name="sys_rol2">TWRP nem lesz képes megakadályozni a gyári ROM-ot abban, hogy lecserélje a TWRP-t és nem ajánlja fel a rootolást eszközéhez.</string> + <string name="sys_rol3">Zip-ek telepítése, vagy az adb műveletek továbbra is módosítják a rendszer partícióit.</string> + <string name="sys_ro_never_show_chk">Többé ne mutassa ezt a képernyőt</string> + <string name="sys_ro_keep_ro_btn">Csak olvasható megtartása</string> + <string name="swipe_allow_mod">Csúsztasson a módosítások engedélyezéséhez</string> + <string name="swipe_allow_mod_s">Módosítások engedélyezése</string> + <string name="settings_hdr">Beállítások</string> + <string name="settings_gen_hdr">Általános</string> + <string name="settings_gen_s_hdr">Általános</string> + <string name="settings_gen_btn">Általános</string> + <string name="use_rmrf_chk">Az rm -rf használata a formázás helyett</string> + <string name="use24clock_chk">24-órás idő használata</string> + <string name="rev_navbar_chk">Fordított navigációs sáv elrendezés</string> + <string name="simact_chk">Műveletek szimulálása téma teszteléséhez</string> + <string name="simfail_chk">Sikertelen műveletek szimulálása</string> + <string name="ctr_navbar_rdo">Navigációs sáv gombjai középre</string> + <string name="lft_navbar_rdo">Navigációs sáv gombjai balra igazítva</string> + <string name="rht_navbar_rdo">Navigációs sáv gombjai jobbra igazítva</string> + <string name="restore_defaults_btn">Alapértelmezés visszaállítása</string> + <string name="settings_tz_btn">Időzóna</string> + <string name="settings_screen_btn">Képernyő</string> + <string name="settings_screen_bright_btn">Képernyő fényereje</string> + <string name="settings_vibration_btn">Rezgés</string> + <string name="settings_language_btn">Nyelv</string> + <string name="time_zone_hdr">Időzóna</string> + <string name="sel_tz_list">Időzóna választása:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC-11) Szamoa, Midway-szigetek</string> + <string name="utcm10">(UTC-10) Hawaii</string> + <string name="utcm9">(UTC-9) Alaszka</string> + <string name="utcm8">(UTC -8) Csendes-óceáni idő</string> + <string name="utcm7">(UTC-7) Hegyvidéki idő</string> + <string name="utcm6">(UTC -6) Közép idő</string> + <string name="utcm5">(UTC -5) Keleti idő</string> + <string name="utcm4">(UTC -4) Atlanti idő</string> + <string name="utcm3">(UTC -3) Brazília, Buenos Aires</string> + <string name="utcm2">(UTC -2) Közép-Atlanti</string> + <string name="utcm1">(UTC -1) Azori-szigetek, Zöld-foki Köztársaság</string> + <string name="utc0">(UTC 0) London, Dublin, Lisszabon</string> + <string name="utcp1">(UTC +1) Berlin, Brüsszel, Párizs</string> + <string name="utcp2">(UTC +2) Athén, Isztambul, Dél-afrikai Köztársaság</string> + <string name="utcp3">(UTC +3) Moszkva, Bagdad</string> + <string name="utcp4">(UTC +4) Abu-Dzabi, Tbiliszi, Maszkat</string> + <string name="utcp5">(UTC +5) Jekatyerinburg, Iszlámábád</string> + <string name="utcp6">(UTC +6) Almati, Dakka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Peking, Szingapúr, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokió, Szöul, Jakutszk</string> + <string name="utcp10">(UTC +10) Kelet-Ausztrália, Guam</string> + <string name="utcp11">(UTC +11) Vlagyivosztok, Salamon-szigetek</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fidzsi-szigetek</string> + <string name="sel_tz_offset">Válasszon eltolást (általában 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Nincs</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Nyári időszámítás használata (DST)</string> + <string name="curr_tz">Jelenlegi időzóna: %tw_time_zone%</string> + <string name="curr_tz_s">Jelenlegi időzóna:</string> + <string name="set_tz_btn">Időzóna beállítása</string> + <string name="settings_screen_hdr">Képernyő</string> + <string name="settings_screen_timeout_hdr">Képernyő időkorlátja</string> + <string name="enable_timeout_chk">Képernyő időkorlát engedélyezése</string> + <string name="screen_to_slider">Képernyő időkorlát másodpercben:</string> + <string name="screen_to_slider_s">Képernyő időkorlát másodpercben (0=letiltva): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Képernyő időkorlát beállítás nem érhető el</string> + <string name="screen_bright_slider">Fényerő: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Fényerő beállítás nem érhető el</string> + <string name="vibration_hdr">Rezgés</string> + <string name="button_vibration_hdr">Gombok rezgése</string> + <string name="kb_vibration_hdr">Billentyűzet rezgése</string> + <string name="act_vibration_hdr">Művelet rezgése</string> + <string name="button_vibration">Gomb rezgés:</string> + <string name="kb_vibration">Billentyűzet rezgés:</string> + <string name="act_vibration">Művelet rezgés:</string> + <string name="select_language">Nyelv kiválasztása:</string> + <string name="sel_lang_btn">Nyelv kiválasztása</string> + <string name="set_language_btn">Nyelv beállítása</string> + <string name="advanced_hdr">Haladó</string> + <string name="copy_log_confirm">Napló másolása SD-kártyára?</string> + <string name="copying_log" version="2">Napló másolása az SD-kártyára...</string> + <string name="copy_log_complete" version="2">Napló másolása kész</string> + <string name="fix_context_btn">Kontextus javítása</string> + <string name="part_sd_btn">SD-kártya particionálása</string> + <string name="part_sd_s_btn">SD-kártya</string> + <string name="file_manager_btn">Fájlkezelő</string> + <string name="language_hdr">Nyelv</string> + <string name="terminal_btn">Terminál</string> + <string name="reload_theme_btn">Téma újratöltése</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP injektálása</string> + <string name="inject_twrp_confirm">TWRP újrainjektálása?</string> + <string name="injecting_twrp">TWRP újrainjektálása...</string> + <string name="inject_twrp_complete">TWRP injektálása kész</string> + <string name="swipe_to_confirm">Csúsztasson a megerősítéshez</string> + <string name="part_sd_hdr">SD-kártya particionálása</string> + <string name="invalid_partsd_sel">Ki kell választania egy eltávolítható eszközt</string> + <string name="part_sd_lose">Minden fájl el fog veszni az SD-kártyán!</string> + <string name="part_sd_undo">Ez a művelet nem vonható vissza!</string> + <string name="part_sd_ext_sz">EXT méret:</string> + <string name="part_sd_swap_sz">Swap méret:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Fájlrendszer:</string> + <string name="swipe_part_sd">Csúsztasson a particionáláshoz</string> + <string name="swipe_part_sd_s">Particionálás</string> + <string name="partitioning_sd">SD-kártya particionálása...</string> + <string name="partitioning_sd2">Ez néhány percet igénybe vesz.</string> + <string name="part_sd_complete">Particionálás kész</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Eredeti boot visszaállítása</string> + <string name="dumlock_restore_confirm">Visszaállítja az eredeti boot lemezképet?</string> + <string name="dumlock_restoring">Eredeti boot visszaállítása...</string> + <string name="dumlock_restore_complete">Eredeti boot visszaállítása kész</string> + <string name="dumlock_reflash_btn">Recovery újraflashelése</string> + <string name="dumlock_reflash_confirm">Recovery újraflashelése bootba?</string> + <string name="dumlock_reflashing">Recovery újraflashelése bootba...</string> + <string name="dumlock_reflash_complete">Recovery flashelése bootba kész</string> + <string name="dumlock_install_btn">HTC Dumlock telepítése</string> + <string name="dumlock_install_confirm">HTC Dumlock telepítése a ROM-hoz?</string> + <string name="dumlock_installing">HTC Dumlock telepítése...</string> + <string name="dumlock_install_complete">HTC Dumlock telepítése kész</string> + <string name="swipe_to_unlock">Csúsztasson a feloldáshoz</string> + <string name="swipe_unlock"> Feloldás</string> + <string name="fm_hdr">Fájlkezelő</string> + <string name="fm_sel_file">Válasszon fájlt vagy mappát</string> + <string name="fm_type_folder">Mappa</string> + <string name="fm_type_file">Fájl</string> + <string name="fm_choose_act">Válasszon műveletet</string> + <string name="fm_selected">%tw_fm_type% kiválasztva:</string> + <string name="fm_copy_btn">Másolás</string> + <string name="fm_copy_file_btn">Fájl másolása</string> + <string name="fm_copy_folder_btn">Mappa másolása</string> + <string name="fm_copying">Másolás</string> + <string name="fm_move_btn">Áthelyezés</string> + <string name="fm_moving">Áthelyezés</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Törlés</string> + <string name="fm_deleting">Törlés</string> + <string name="fm_rename_btn">Átnevezés</string> + <string name="fm_rename_file_btn">Fájl átnevezése</string> + <string name="fm_rename_folder_btn">Mappa átnevezése</string> + <string name="fm_renaming">Átnevezés</string> + <string name="fm_sel_dest">Válassza ki a célmappát</string> + <string name="fm_sel_curr_folder">Válassza ki az aktuális mappát</string> + <string name="fm_rename_hdr">Átnevezés</string> + <string name="fm_set_perms_hdr">Engedélyek beállítása</string> + <string name="fm_perms">Engedélyek:</string> + <string name="fm_complete">Fájlművelet kész</string> + <string name="decrypt_data_hdr">Adat dekódolása</string> + <string name="decrypt_data_enter_pass">Adja meg a jelszót.</string> + <string name="decrypt_data_enter_pattern">Adja meg a mintát.</string> + <string name="decrypt_data_failed">Helytelen jelszó, próbálja újra!</string> + <string name="decrypt_data_failed_pattern">Helytelen minta, próbálja újra!</string> + <string name="decrypt_data_trying">Dekódolás megpróbálása</string> + <string name="term_hdr">Terminál parancs</string> + <string name="term_s_hdr">Terminál</string> + <string name="term_kill_btn">MEGÖL</string> + <string name="term_sel_folder_hdr">Navigáljon a kezdőmappához</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Dalvik gyorsítótár törlése</string> + <string name="sideload_wipe_cache_chk">Gyorsítótár törlése</string> + <string name="swipe_to_sideload">Csúsztasson a Sideload indításához</string> + <string name="swipe_sideload"> Indítás</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Használat: adb sideload fájlnév.zip</string> + <string name="sideload_complete">ADB Sideload kész</string> + <string name="fix_contexts_hdr">Kontextus javítása</string> + <string name="fix_contexts_note1">Megjegyzés: kontextus javítására ritkán van szükség.</string> + <string name="fix_contexts_note2">SELinux kontextus javítása a készülék</string> + <string name="fix_contexts_note3">nem megfelelő elindulását okozhatja.</string> + <string name="swipe_to_fix_contexts">Csúsztasson a kontextus javításához</string> + <string name="swipe_fix_contexts"> Kontextus javítása</string> + <string name="fixing_contexts">Kontextus javítása...</string> + <string name="fix_contexts_complete">Kontextus javítása kész</string> + <string name="reboot_hdr">Újraindítás</string> + <string name="su_hdr">SuperSU ellenőrzés</string> + <string name="su_note1">A készüléke nem tűnik rootoltnak.</string> + <string name="su_note2">SuperSU telepítése most?</string> + <string name="su_note3">Ez rootolni fogja a készülékét.</string> + <string name="su_cancel">Ne telepítse</string> + <string name="swipe_su_to_install">Csúsztasson a telepítéshez</string> + <string name="swipe_su_install"> Telepítés</string> + <string name="su_installing">SuperSU telepítése</string> + <string name="sel_storage_list">Válasszon tárolót</string> + <string name="ok_btn">OK</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Kernel nem támogatja a SELinux összefüggések olvasását.</string> + <string name="full_selinux">Teljes SELinux támogatás jelen van.</string> + <string name="no_selinux">Nincs SELinux támogatás (nincs libselinux).</string> + <string name="mtp_enabled">MTP engedélyezve</string> + <string name="mtp_crash">MTP összeomlott, MTP nem indul bootoláskor.</string> + <string name="decrypt_success">Sikeresen visszafejtve az alapértelmezett jelszóval.</string> + <string name="unable_to_decrypt">Visszafejtés sikertelen az alapértelmezett jelszóval. Szükség lehet az adatok formázására.</string> + <string name="generating_md51">MD5 generálása</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * MD5 generálása...</string> + <string name="md5_created"> * MD5 létrehozva.</string> + <string name="md5_error"> * MD5 hiba!</string> + <string name="md5_compute_error"> * MD5 számítási hiba.</string> + <string name="current_date">(Aktuális dátum)</string> + <string name="auto_generate">(Automatikus létrehozás)</string> + <string name="unable_to_locate_partition">'{1}' partíció nem található a biztonsági mentési számításokhoz.</string> + <string name="no_partition_selected">Nincs biztonsági mentésre kijelölt partíció.</string> + <string name="total_partitions_backup"> * A biztonsági mentésre jelölt partíciók teljes száma: {1}</string> + <string name="total_backup_size"> * Az összes adat teljes mérete: {1}MB</string> + <string name="available_space"> * A rendelkezésre álló terület: {1}MB</string> + <string name="unable_locate_storage">Nem található tárolóeszköz.</string> + <string name="no_space">Nincs elég szabad hely a tárolón.</string> + <string name="backup_started">[BIZTONSÁGI MENTÉS ELINDÍTVA]</string> + <string name="backup_folder"> * Biztonsági mentés mappa: {1}</string> + <string name="fail_backup_folder">Nem sikerült biztonsági mentés mappát létrehozni.</string> + <string name="avg_backup_fs">Fájlrendszer átlagos mentési sebessége: {1} MB/mp</string> + <string name="avg_backup_img">Lemezképpel rendelkező meghajtók átlagos mentési sebessége: {1} MB/mp</string> + <string name="total_backed_size">[TELJES MENTÉSI MÉRET: {1} MB]</string> + <string name="backup_completed">[BIZTONSÁGI MENTÉS KÉSZ {1} MÁSODPERC ALATT]</string> + <string name="restore_started">[VISSZAÁLLÍTÁS ELINDÍTVA]</string> + <string name="restore_folder">Mappa visszaállítása: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} kész ({2} másodperc)]</string> + <string name="verifying_md5">MD5 ellenőrzése</string> + <string name="skip_md5">MD5 ellenőrzés átugrása felhasználói beállítás alapján.</string> + <string name="calc_restore">Visszaállítási részletek számítása...</string> + <string name="restore_read_only">{1} nem állítható vissza -- csak olvashatóként csatolva.</string> + <string name="restore_unable_locate">Nem található a(z) '{1}' partíció a visszaállításhoz.</string> + <string name="no_part_restore">Nincs partíció kijelölve a visszaállításhoz.</string> + <string name="restore_part_count">{1} partíciók visszaállítása...</string> + <string name="total_restore_size">Teljes visszaállítás mérete: {1}MB</string> + <string name="updating_system_details">Rendszer részleteinek frissítése</string> + <string name="restore_completed">[VISSZAÁLLÍTÁS BEFEJEZŐDÖTT {1} MÁSODPERC ALATT]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Megnyitási hiba: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Nem található partíció a biztonsági mentés neve alapján: '{1}'</string> + <string name="unable_find_part_path">Nem található partíció a(z) '{1}' elérési útnak</string> + <string name="update_part_details">Partíciós adatok frissítése...</string> + <string name="update_part_details_done">...kész</string> + <string name="wiping_dalvik">Dalvik gyorsítótár mappák törlése...</string> + <string name="cleaned">Törölve: {1}...</string> + <string name="dalvik_done">-- Dalvik gyorsítótár mappák törlése kész!</string> + <string name="no_andsec">Nem találhatóak android secure partíciók.</string> + <string name="unable_to_locate">{1} nem található.</string> + <string name="wiping_datamedia">Belső tároló törlése -- /data/media...</string> + <string name="unable_to_mount">{1} nem csatolható</string> + <string name="unable_to_mount_internal">Belső tároló csatolása sikertelen</string> + <string name="unable_to_mount_storage">Tároló csatolása sikertelen</string> + <string name="fail_decrypt">Nem sikerült visszafejteni az adatokat.</string> + <string name="no_crypto_support">Nincs titkosítási támogatás beleépítve ebbe a változatba.</string> + <string name="decrypt_success_dev">Adatok sikeresen visszafejtve, új blokk eszköz: '{1}'</string> + <string name="decrypt_success_nodev">Adatok sikeresen visszafejtve</string> + <string name="done">Kész.</string> + <string name="start_partition_sd">SD-kártya particionálása...</string> + <string name="partition_sd_locate">Nem található eszköz a particionálásra.</string> + <string name="ext_swap_size">EXT + Swap mérete nagyobb az SD-kártya méreténél.</string> + <string name="remove_part_table">Partíciós tábla eltávolítása...</string> + <string name="unable_rm_part">A partíciós tábla eltávolítása sikertelen.</string> + <string name="create_part">{1} partíció létrehozása...</string> + <string name="unable_to_create_part">{1} partíció létrehozása sikertelen.</string> + <string name="format_sdext_as">Sd-ext formázása, mint {1}...</string> + <string name="part_complete">Particionálás kész.</string> + <string name="unable_to_open">'{1}' megnyitása sikertelen.</string> + <string name="mtp_already_enabled">MTP már engedélyezve van</string> + <string name="mtp_fail">MTP engedélyezése sikertelen</string> + <string name="no_mtp">Nem tartalmaz MTP támogatást</string> + <string name="image_flash_start">[KÉP FLASHELÉSE ELINDULT]</string> + <string name="img_to_flash">Kép a flasheléshez: '{1}'</string> + <string name="flash_unable_locate">Nem található a(z) '{1}' partíció a flasheléshez.</string> + <string name="no_part_flash">Nincs kijelölve partíció a flasheléshez.</string> + <string name="too_many_flash">Túl sok partíció kijelölve a flasheléshez.</string> + <string name="invalid_flash">Érvénytelen partíció megjelölve a flasheléshez.</string> + <string name="flash_done">[KÉP FLASHELÉSE KÉSZ]</string> + <string name="wiping">{1} törlése</string> + <string name="repair_not_exist">{1} nem létezik! Nem javítható!</string> + <string name="repairing_using">{1} javítása {2} segítségével...</string> + <string name="unable_repair">{1} nem javítható.</string> + <string name="mount_data_footer">Nem sikerült csatolni az /adat partíciót és a titkosítási lábléc sem található.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">'{1}' mappa létrehozása sikertelen ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">'{1}' csatolása sikertlelen ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">'{1}' leválasztása sikertlelen ({2})</string> + <string name="cannot_resize">{1} átméretezése sikertelen.</string> + <string name="repair_resize">{1} javítása az átméretezés előtt.</string> + <string name="unable_resize">Nem lehet átméretezni: {1}.</string> + <string name="no_md5_found">Nem található MD5 fájl ehhez: '{1}'. Kérjük, a visszaállításhoz szüntesse meg a kijelölést: \"MD5 ellenőrzés engedélyezése\".</string> + <string name="md5_fail_match">MD5 nem egyezik ezzel: '{1}'.</string> + <string name="md5_matched">MD5 egyezik ezzel: '{1}'.</string> + <string name="fail_decrypt_tar">Nem sikerült visszafejteni a(z) '{1}' tar fájlt</string> + <string name="format_data_msg">Lehet, hogy a recovery-be kell újraindítania ahhoz, hogy képes legyen használni az /adat partíciót.</string> + <string name="format_data_err">Nem sikerült formázni a titkosítás eltávolításához.</string> + <string name="formatting_using">{1} formázása {2} segítségével...</string> + <string name="unable_to_wipe">{1} törlése sikertelen.</string> + <string name="cannot_wipe">Nem lehet törölni a(z) {1} partíciót.</string> + <string name="remove_all">'{1}' alatt található összes fájl eltávolítása</string> + <string name="wiping_data">Adatok törlése a /data/media kivételével ...</string> + <string name="backing_up">{1} biztonsági mentése...</string> + <string name="backup_storage_warning">{1} biztonsági mentése nem tartalmaz belső tárhely fájlokat, mint pl. képek vagy letöltések.</string> + <string name="backing">Biztonsági mentés</string> + <string name="backup_size">Az '{1}' biztonsági mentés fájl mérete 0 bájt.</string> + <string name="datamedia_fs_restore">FIGYELMEZTETÉS: ez az /adat biztonsági mentés {1} fájlrendszerrel készült! A biztonsági mentés nem fog bootolni, hacsak nem tér vissza erre: {1}.</string> + <string name="restoring">{1} visszaállítása...</string> + <string name="restoring_hdr">Visszaállítás</string> + <string name="recreate_folder_err">{1} mappa újra létrehozása sikertelen.</string> + <string name="img_size_err">Kép mérete nagyobb, mint a céleszköz</string> + <string name="flashing">{1} flashelése...</string> + <string name="backup_folder_set">Biztonsági mentés mappája beállítva erre: '{1}'</string> + <string name="locate_backup_err">Nem található a(z) '{1}' biztonsági mentés</string> + <string name="set_restore_opt">Visszaállítási beállítások beállítása: '{1}':</string> + <string name="md5_check_skip">MD5 ellenőrzés kihagyása bekapcsolva</string> + <string name="ors_encrypt_restore_err">Nem sikerült az OpenRecoveryScript futtatása egy titkosított biztonsági mentés visszaállításához.</string> + <string name="mounting">Csatolás</string> + <string name="unmounting">Leválasztás</string> + <string name="mounted">'{1}' csatolva</string> + <string name="unmounted">'{1}' leválasztva</string> + <string name="setting">'{1}' beállítása erre: '{2}'</string> + <string name="setting_empty">'{1}' beállítása üres értékre</string> + <string name="making_dir1">Mappa létrehozása</string> + <string name="making_dir2">Mappa létrehozása: '{1}'</string> + <string name="running_command">Parancs futtatása</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">ADB sideload funkció indítása...</string> + <string name="need_new_adb">Adb 1.0.32, vagy frissebbre van szüksége ahhoz, hogy a sideload funkciót használhassa ehhez a készülékhez.</string> + <string name="no_pwd">Nincs megadott jelszó.</string> + <string name="done_ors">Kész feldolgozó script fájl</string> + <string name="injecttwrp">TWRP injektálása a boot lemezképbe...</string> + <string name="zip_err">'{1}' zip fájl telepítési hiba</string> + <string name="installing_zip">'{1}' zip fájl telepítése</string> + <string name="select_backup_opt">Biztonsági mentési beállítások:</string> + <string name="compression_on">Tömörítés bekapcsolva</string> + <string name="md5_off">MD5 generálás kikapcsolva</string> + <string name="backup_fail">Biztonsági mentés készítése sikertelen</string> + <string name="backup_clean">Biztonsági mentés nem sikerült. Mentési mappa tisztítása.</string> + <string name="running_recovery_commands">Recovery parancsok futtatása</string> + <string name="recovery_commands_complete">Recovery parancsok készen vannak</string> + <string name="running_ors">OpenRecoveryScript futtatása</string> + <string name="ors_complete">OpenRecoveryScript kész</string> + <string name="invalid_zip_format">Érvénytelen zip fájlformátum!</string> + <string name="check_for_md5">MD5 fájl ellenőrzése...</string> + <string name="fail_sysmap">'{1}' fájl feltérképezése sikertelen</string> + <string name="verify_zip_sig">Zip aláírás ellenőrzése...</string> + <string name="verify_zip_fail">Zip aláírás ellenőrzése nem sikerült!</string> + <string name="verify_zip_done">Zip aláírás ellenőrzése sikeres.</string> + <string name="zip_corrupt">Zip fájl sérült!</string> + <string name="no_md5">MD5 ellenőrzés kihagyása: nem található MD5 fájl</string> + <string name="md5_fail">MD5 nem egyezik meg</string> + <string name="md5_match">MD5 egyezik</string> + <string name="pid_signal">{1} folyamat véget ért a következő jellel: {2}</string> + <string name="pid_error">{1} folyamat véget ért a következő HIBÁVAL: {2}</string> + <string name="install_dumlock">HTC Dumlock telepítése a rendszerbe...</string> + <string name="dumlock_restore">Eredeti boot visszaállítása...</string> + <string name="dumlock_reflash">Recovery újraflashelése a bootba...</string> + <string name="run_script">{1} script futtatása...</string> + <string name="rename_stock">Gyári recovery fájl a /rendszer partíción átnevezve, annak megakadályozására, hogy a gyári ROM lecserélje TWRP-t.</string> + <string name="split_backup">Biztonsági mentés fájljának tördelése több archívumba...</string> + <string name="backup_error">Hiba a biztonsági mentés létrehozásakor.</string> + <string name="restore_error">Hiba a visszaállítási folyamat közben.</string> + <string name="split_thread">{1} szálazonosító tördelése {2} archívumba</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu / %llu fájl, %i%%</string> + <string name="size_progress">%lluMB / %lluMB, %i%%</string> + <string name="decrypt_cmd">Adatpartíció visszafejtésének megpróbálása parancssor segítségével.</string> + <string name="base_pkg_err">Nem sikerült betölteni az alap csomagokat.</string> + <string name="simulating">Műveletek szimulálása...</string> + <string name="backup_cancel">Biztonsági mentés megszakítva</string> + <string name="config_twrp">TWRP konfigurálása...</string> + <string name="config_twrp_err">TWRP konfigurálása ezzel a kernellel sikertelen.</string> + <string name="copy_log">Recovery napló másolva ide: {1}.</string> + <string name="max_queue">Elérte a Zip várólista maximumát!</string> + <string name="min_queue">Elérte a Zip várólista minimumát!</string> + <string name="screenshot_saved">Képernyőmentés elmentve ide: {1}</string> + <string name="screenshot_err">Képernyőmentés készítése sikertelen!</string> + <string name="zip_wipe_cache">Egy vagy több zip kérte a gyorsítótár törlését - Gyorsítótár törlése most.</string> + <string name="and_sec_wipe_err">Android secure törlése sikertelen</string> + <string name="dalvik_wipe_err">Dalvik törlése nem sikerült</string> + <string name="auto_gen">(Automatikus létrehozás)</string> + <string name="curr_date">(Aktuális dátum)</string> + <string name="backup_name_len">Biztonsági mentés neve túl hosszú.</string> + <string name="backup_name_invalid">'{1}' biztonsági mentés név érvénytelen karaktert tartalmaz: '{1}'</string> + <string name="no_real_sdcard">Ez az eszköz nem rendelkezik igazi SD-kártyával! Megszakítás!</string> + <string name="cancel_sideload">ADB sideload megszakítva...</string> + <string name="change_fs_err">Fájlrendszer módosítási hiba.</string> + <string name="theme_ver_err">Egyéni téma verziója nem egyezik a TWRP verziójával. Gyári téma használata.</string> + <string name="up_a_level">(Egy szinttel feljebb)</string> + <string name="install_reboot" version="2">Újraindítás %tw_sleep% mp múlva</string> + <string name="adbbackup_error">Hiba az ADB Backup során. Kilépés..."</string> + <string name="adbbackup_control_error">Nincs hozzáférés: adb control channel</string> + <string name="twrp_adbbu_option">--twrp opció szükséges az ADB Backup-hoz </string> + <string name="partition_not_found">útvonal: {1} nem található a partíciós listában</string> + <string name="copy_kernel_log">Kernel log másolva: {1}</string> + <string name="include_kernel_log">Emellett Kernel Log másolása</string> + <string name="unable_set_boot_slot">Hiba a boot slot váltása során erre: {1}</string> + </resources> +</language> diff --git a/gui/theme/common/languages/it.xml b/gui/theme/common/languages/it.xml new file mode 100644 index 000000000..b89528328 --- /dev/null +++ b/gui/theme/common/languages/it.xml @@ -0,0 +1,695 @@ +<?xml version="1.0"?> + +<language> + <display>Italiano</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">Immagine System</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Immagine Vendor</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data (escl. archivio)</string> + <string name="sdcard">SDCard</string> + <string name="internal">Archivio interno</string> + <string name="microsd">Micro SD</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Data annessa</string> + <string name="adopted_storage">Archivio annesso</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Batteria: %tw_battery%</string> + <string name="sort_by_name">Ordina per Nome</string> + <string name="sort_by_date">Ordina per Data</string> + <string name="sort_by_size">Ordina per Dimensione</string> + <string name="sort_by_name_only">Nome</string> + <string name="sort_by_date_only">Data</string> + <string name="sort_by_size_only">Dimensione</string> + <string name="tab_general">GENERALE</string> + <string name="tab_options">OPZIONI</string> + <string name="tab_backup">BACKUP</string> + <string name="tab_time_zone">FUSO ORARIO</string> + <string name="tab_screen">SCHERMO</string> + <string name="tab_vibration">VIBRAZIONE</string> + <string name="tab_language">LINGUA</string> + + <string name="install_btn">Installa</string> + <string name="wipe_btn">Pulisci</string> + <string name="backup_btn">Backup</string> + <string name="restore_btn">Ripristina</string> + <string name="mount_btn">Monta</string> + <string name="settings_btn">Impostazioni</string> + <string name="advanced_btn">Avanzate</string> + <string name="reboot_btn">Riavvia</string> + <string name="files_btn">File</string> + <string name="copy_log_btn">Copia Log</string> + <string name="select_type_hdr">Scegli tipologia</string> + <string name="install_zip_hdr">Installa Zip</string> + <string name="install_zip_btn">Installa Zip</string> + <string name="install_image_hdr">Installa Immagine</string> + <string name="install_image_btn">Installa Immagine</string> + <string name="install_select_file_hdr">Seleziona il file</string> + <string name="file_selector_folders_hdr">Cartelle</string> + <string name="select_file_from_storage">Seleziona il file da %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Installa</string> + <string name="select_storage_hdr">Scegli archivio</string> + <string name="select_storage_btn">Scegli archivio</string> + <string name="queue_hdr">Coda</string> + <string name="zip_queue_count">%tw_zip_queue_count% file accodati su un max di 10</string> + <string name="zip_queue_count_s">File %tw_zip_queue_count% di 10:</string> + <string name="zip_warn1">Questa operazione potrebbe installare software</string> + <string name="zip_warn2">incompatibile e rendere il tuo dispositivo inutilizzabile.</string> + <string name="zip_back_cancel">Premi indietro per annullare la selezione di questo file.</string> + <string name="zip_back_clear">Premi indietro per eliminare la coda di Zip.</string> + <string name="folder">Cartella:</string> + <string name="file">File:</string> + <string name="zip_sig_chk">Verifica della firma del file Zip</string> + <string name="inject_twrp_chk">Esegui TWRP Inject dopo l'installazione</string> + <string name="install_reboot_chk">Riavvia dopo che l'installazione è completata</string> + <string name="options_hdr">Opzioni</string> + <string name="confirm_flash_hdr">Conferma installazione</string> + <string name="zip_queue">Coda:</string> + <string name="options">Opzioni:</string> + <string name="swipe_confirm"> Conferma</string> + <string name="zip_add_btn">Aggiungi altri Zip</string> + <string name="zip_clear_btn">Elimina la coda di Zip</string> + <string name="install_zip_count_hdr">Installazione Zip %tw_zip_index% di %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Installazione Zip %tw_file% in corso...</string> + <string name="failed">Operazione fallita</string> + <string name="successful">Operazione riuscita</string> + <string name="install_failed">Installazione fallita</string> + <string name="install_successful">Installazione riuscita</string> + <string name="wipe_cache_dalvik_btn">Pulisci Cache/Dalvik</string> + <string name="reboot_system_btn">Riavvia sistema</string> + <string name="install_sel_target">Scegli partizione</string> + <string name="flash_image_select">Scegli la partizione su cui installare:</string> + <string name="target_partition">Partizione scelta:</string> + <string name="flashing_image">Installazione Immagine...</string> + <string name="image_flashed">Immagine installata</string> + <string name="wipe_cache_dalvik_confirm">Pulire Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Pulizia Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Pulizia Cache & Dalvik completata</string> + <string name="swipe_wipe">Scorri per pulire</string> + <string name="swipe_wipe_s"> Pulisci</string> + <string name="no_os1">Nessun SO installato. Sei</string> + <string name="no_osrb">certo di voler riavviare?</string> + <string name="no_ospo">certo di voler spegnere?</string> + <string name="rebooting">Riavvio...</string> + <string name="swipe_reboot">Scorri per riavviare</string> + <string name="swipe_reboot_s"> Riavvia</string> + <string name="reboot_install_app_hdr">Installazione app di TWRP</string> + <string name="reboot_install_app1">Ti piacerebbe installare l'app ufficiale di TWRP?</string> + <string name="reboot_install_app2">L'app può verificare nuove versioni di TWRP.</string> + <string name="reboot_install_app_prompt_install">Chiedi di installare l'app TWRP se non è installata</string> + <string name="reboot_install_app_system">Installa come app di Sistema</string> + <string name="reboot_installing_app">Installazione dell'app...</string> + <string name="swipe_to_install_app">Scorri per installare l'app</string> + <string name="swipe_flash">Scorri per installare</string> + <string name="confirm_action">Conferma l'azione</string> + <string name="back_cancel">Premi indietro per annullare.</string> + <string name="cancel_btn">Annulla</string> + <string name="wipe_hdr">Pulizia</string> + <string name="factory_reset_hdr">Reset di fabbrica</string> + <string name="factory_reset_btn">Reset di fabbrica</string> + <string name="factory_reset1">Data, Cache e Dalvik saranno puliti</string> + <string name="factory_reset2">(l'archivio interno sarà escluso)</string> + <string name="factory_reset3">La maggior parte delle volte, questo</string> + <string name="factory_reset4">sarà l'unico tipo di pulizia necessario.</string> + <string name="factory_resetting">Reset in corso...</string> + <string name="advanced_wipe_hdr">Pulizia avanzata</string> + <string name="advanced_wipe_btn">Pulizia avanzata</string> + <string name="wipe_enc_confirm">Eliminare la crittografia da Data?</string> + <string name="formatting_data">Formattazione di Data in corso...</string> + <string name="swipe_format_data">Scorri per formattare Data...</string> + <string name="swipe_format_data_s"> Formattazione Data</string> + <string name="factory_reset_complete">Reset di fabbrica completato</string> + <string name="sel_part_hdr">Selezione partizioni</string> + <string name="wipe_sel_confirm">Pulire questa(e) partizione(i)?</string> + <string name="wiping_part">Pulizia partizione(i) in corso...</string> + <string name="wipe_complete">Pulizia completata</string> + <string name="sel_part_wipe">Scegli le partizioni da pulire:</string> + <string name="invalid_part_sel">Scelta non valida</string> + <string name="format_data_hdr">Formattazione Data</string> + <string name="format_data_btn">Formatta Data</string> + <string name="format_data_ptr1">Formattare Data eliminerà tutte le tue app,</string> + <string name="format_data_ptr2">backup, immagini, video e file. Inoltre, la</string> + <string name="format_data_ptr3">crittografia dell'archivio interno sarà rimossa.</string> + <string name="format_data_adopted">Includi Archivio annesso</string> + <string name="format_data_lcp1">Formattare Data eliminerà tutte le app, backup, immagini, video e file.</string> + <string name="format_data_lcp2">Inoltre, la crittografia dell'archivio interno sarà rimossa.</string> + <string name="format_data_wtc1">Formattare Data eliminerà tutte le tue app,</string> + <string name="format_data_wtc2">backup e file. L'operazione è irreversibile.</string> + <string name="format_data_undo">L'operazione è irreversibile.</string> + <string name="format_data_complete">Formattazione di Data completata</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Scrivi yes per continuare. Premi indietro per annullare.</string> + <string name="part_opt_hdr">Opzioni partizione per: %tw_partition_name%</string> + <string name="sel_act_hdr">Scegli azione</string> + <string name="file_sys_opt">Opzioni filesystem</string> + <string name="partition">Partizione: %tw_partition_name%</string> + <string name="part_mount_point">Punto di montaggio: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Filesystem: %tw_partition_file_system%</string> + <string name="part_present_yes">Presente: Sì</string> + <string name="part_present_no">Presente: No</string> + <string name="part_removable_yes">Rimovibile: Sì</string> + <string name="part_removable_no">Rimovibile: No</string> + <string name="part_size">Dimensione: %tw_partition_size%MB</string> + <string name="part_used">Utilizzati: %tw_partition_used%MB</string> + <string name="part_free">Liberi: %tw_partition_free%MB</string> + <string name="part_backup_size">Dimensione backup: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Ridimensiona filesystem</string> + <string name="resize_btn_s">Ridimensiona</string> + <string name="resize_confirm">Ridimensionare %tw_partition_name%?</string> + <string name="resizing">Ridimensionamento in corso...</string> + <string name="resize_complete">Ridimensionamento completato</string> + <string name="swipe_resize">Scorri per ridimensionare</string> + <string name="swipe_resize_s"> Ridimensiona</string> + <string name="repair_btn">Ripara filesystem</string> + <string name="repair_btn_s">Ripara</string> + <string name="repair_confirm">Riparare %tw_partition_name%?</string> + <string name="repairing">Riparazione in corso...</string> + <string name="repair_complete">Riparazione completata</string> + <string name="swipe_repair">Scorri per riparare</string> + <string name="swipe_repair_s"> Ripara</string> + <string name="change_fs_btn">Cambia filesystem</string> + <string name="change_fs_btn_s">Cambia</string> + <string name="change_fs_for_hdr">Cambia il filesystem di: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partizione: %tw_partition_name% > Scegli filesystem</string> + <string name="change_fs_warn1">Alcune ROM o kernel non supportano determinati</string> + <string name="change_fs_warn2">filesystem. Procedi con cautela!</string> + <string name="change_fs_confirm">Modificare %tw_partition_name%?</string> + <string name="formatting">Formattazione in corso...</string> + <string name="format_complete">Formattazione completata</string> + <string name="swipe_change_fs">Scorri per modificare</string> + <string name="swipe_change_s"> Modifica</string> + <string name="back_btn">Indietro</string> + <string name="wipe_enc_btn">Elimina crittografia</string> + <string name="swipe_factory_reset">Scorri per eseguire reset di fabbrica</string> + <string name="repair_change_btn">Ripara o Modifica filesystem</string> + <string name="storage_hdr">Archivio: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Backup</string> + <string name="backup_confirm_hdr">Conferma Backup</string> + <string name="encryption_tab">CRITTOGRAFIA</string> + <string name="encryption">Crittografia:</string> + <string name="name">Nome:</string> + <string name="sel_part_backup">Seleziona le partizioni di cui eseguire un Backup:</string> + <string name="storage">Archivio:</string> + <string name="enc_disabled">disabilitata - imposta una password per abilitarla</string> + <string name="enc_enabled">abilitata</string> + <string name="enable_backup_comp_chk">Abilita compressione</string> + <string name="skip_md5_backup_chk">Salta la generazione di MD5 durante il backup</string> + <string name="disable_backup_space_chk" version="2">Disabilita controllo dello spazio libero prima del backup</string> + <string name="current_boot_slot">Slot attuale: %tw_active_slot%</string> + <string name="boot_slot_a">Slot A</string> + <string name="boot_slot_b">Slot B</string> + <string name="changing_boot_slot">Cambiamento Slot d'avvio</string> + <string name="changing_boot_slot_complete">Cambiamento Slot d'avvio completato</string> + <string name="refresh_sizes_btn">Aggiorna dimensioni</string> + <string name="swipe_backup">Scorri per eseguire il backup</string> + <string name="append_date_btn">Includi la data</string> + <string name="backup_name_exists">Esiste già un backup con lo stesso nome!</string> + <string name="encrypt_backup">Crittografare il backup?</string> + <string name="enter_pass">Inserisci una password:</string> + <string name="enter_pass2">Inserisci nuovamente la password:</string> + <string name="pass_not_match">Le password non corrispondono!</string> + <string name="partitions">Partizioni:</string> + <string name="disabled">Disabilitato</string> + <string name="enabled">Abilitato</string> + <string name="backup_name_hdr">Imposta nome backup</string> + <string name="progress">Avanzamento:</string> + <string name="backup_complete">Backup completato</string> + <string name="restore_hdr">Ripristina backup</string> + <string name="sel_backup_hdr">Scegli backup</string> + <string name="restore_sel_store_hdr">Seleziona un backup da %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Scegli i contenuti da ripristinare:</string> + <string name="restore_enc_backup_hdr">Backup crittografato</string> + <string name="restore_dec_fail">Password errata! Riprova.</string> + <string name="del_backup_btn">Elimina backup</string> + <string name="del_backup_confirm">Eliminare il backup?</string> + <string name="del_backup_confirm2">L'operazione è irreversibile!</string> + <string name="deleting_backup">Eliminazione backup in corso...</string> + <string name="backup_deleted">Eliminazione backup completata</string> + <string name="swipe_delete">Scorri per eliminare</string> + <string name="swipe_delete_s"> Elimina</string> + <string name="restore_try_decrypt">Backup crittografato - tentativo di decriptazione</string> + <string name="restore_try_decrypt_s">Tentativo di decriptazione</string> + <string name="restore_backup_date">Backup creato il %tw_restore_file_date%</string> + <string name="restore_sel_part">Seleziona le partizioni da ripristinare:</string> + <string name="restore_enable_md5_chk">Abilita verifica MD5</string> + <string name="restore_complete">Ripristino completato</string> + <string name="swipe_restore">Scorri per ripristinare</string> + <string name="swipe_restore_s"> Ripristina</string> + <string name="rename_backup_hdr">Rinomina backup</string> + <string name="rename_backup_confirm">Rinominare il backup?</string> + <string name="rename_backup_confirm2">L'operazione è irreversibile!</string> + <string name="renaming_backup">Rinominazione del backup in corso...</string> + <string name="rename_backup_complete">Rinominazione del backup completata</string> + <string name="swipe_to_rename">Scorri per rinominare</string> + <string name="swipe_rename"> Rinomina</string> + <string name="confirm_hdr">Conferma</string> + <string name="mount_hdr">Monta</string> + <string name="mount_sel_part">Seleziona le partizioni da montare:</string> + <string name="mount_sys_ro_chk">Monta la partizione System in sola lettura</string> + <string name="mount_sys_ro_s_chk">Monta System in sola lettura</string> + <string name="decrypt_data_btn">Decripta Data</string> + <string name="disable_mtp_btn">Disabilita MTP</string> + <string name="enable_mtp_btn">Abilita MTP</string> + <string name="mount_usb_storage_btn">Monta archivio USB</string> + <string name="usb_storage_hdr">Archivio USB</string> + <string name="usb_stor_mnt1">Archivio USB montato</string> + <string name="usb_stor_mnt2">Accertati di aver eseguito la rimozione sicura</string> + <string name="usb_stor_mnt3">dal tuo computer prima di smontare l'archivio!</string> + <string name="unmount_btn">Smonta</string> + <string name="rb_system_btn">Sistema</string> + <string name="rb_poweroff_btn">Spegni</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">Spegnimento in corso...</string> + <string name="swipe_power_off">Scorri per spegnere</string> + <string name="swipe_power_off_s">Spegni</string> + <string name="sys_ro_hdr">Partizione System non modificata</string> + <string name="sys_ro_keep">Mantenere System in sola lettura?</string> + <string name="sys_rop1">TWRP può preservare la partizione System dalle modifiche</string> + <string name="sys_rop2">per facilitarti l'installazione di aggiornamenti ufficiali.</string> + <string name="sys_rop3">TWRP non potrà prevenire la sostituzione della Recovery da parte</string> + <string name="sys_rop4">della ROM, e non ti chiederà se desideri ottenere accesso root.</string> + <string name="sys_rop5">Installare Zip o eseguire operazioni mediante adb</string> + <string name="sys_rop6">potrà ugualmente operare modifiche su System.</string> + <string name="sys_rol1">TWRP può preservare la partizione System dalle modifiche per facilitarti l'installazione di aggiornamenti ufficiali.</string> + <string name="sys_rol2">TWRP non potrà prevenire la sostituzione della Recovery da parte della ROM, e non ti chiederà se desideri ottenere accesso root.</string> + <string name="sys_rol3">Installare Zip o eseguire operazioni mediante adb potrà ugualmente operare modifiche su System.</string> + <string name="sys_ro_never_show_chk">Non mostrare più questa schermata all'avvio</string> + <string name="sys_ro_keep_ro_btn">Mantieni sola lettura</string> + <string name="swipe_allow_mod">Scorri per permettere le modifiche</string> + <string name="swipe_allow_mod_s">Permetti modifiche</string> + <string name="settings_hdr">Impostazioni</string> + <string name="settings_gen_hdr">Generale</string> + <string name="settings_gen_s_hdr">Generale</string> + <string name="settings_gen_btn">Generale</string> + <string name="use_rmrf_chk">Usa rm -rf invece di formattare</string> + <string name="use24clock_chk">Usa orologio a 24 ore</string> + <string name="rev_navbar_chk">Rovescia la navbar</string> + <string name="simact_chk">Simula le azioni per il testing dei temi</string> + <string name="simfail_chk">Simula fallimenti per le azioni</string> + <string name="ctr_navbar_rdo">Centra pulsanti della navbar</string> + <string name="lft_navbar_rdo">Allinea pulsanti della navbar a SX</string> + <string name="rht_navbar_rdo">Allinea pulsanti della navbar a DX</string> + <string name="restore_defaults_btn">Ripristina predefinite</string> + <string name="settings_tz_btn">Fuso orario</string> + <string name="settings_screen_btn">Schermo</string> + <string name="settings_screen_bright_btn">Luminosità</string> + <string name="settings_vibration_btn">Vibrazione</string> + <string name="settings_language_btn">Lingua</string> + <string name="time_zone_hdr">Fuso orario</string> + <string name="sel_tz_list">Scegli fuso orario:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Central Time</string> + <string name="utcm5">(UTC -5) Eastern Time</string> + <string name="utcm4">(UTC -4) Atlantic Time</string> + <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbon</string> + <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string> + <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string> + <string name="utcp3">(UTC +3) Moscow, Baghdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Eastern Australia, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Scegli offset (solitamente 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Nessuno</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Usa ora legale</string> + <string name="curr_tz">Fuso orario attuale: %tw_time_zone%</string> + <string name="curr_tz_s">Fuso orario attuale:</string> + <string name="set_tz_btn">Imposta fuso orario</string> + <string name="settings_screen_hdr">Schermo</string> + <string name="settings_screen_timeout_hdr">Timeout schermo</string> + <string name="enable_timeout_chk">Abilita timeout schermo</string> + <string name="screen_to_slider">Timeout in secondi:</string> + <string name="screen_to_slider_s">Timeout in secondi (0=disabilitato): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Impostazione del timeout non disponibile</string> + <string name="screen_bright_slider">Luminosità: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Impostazione luminosità non disponibile</string> + <string name="vibration_hdr">Vibrazione</string> + <string name="button_vibration_hdr">Vibrazione pulsanti</string> + <string name="kb_vibration_hdr">Vibrazione tastiera</string> + <string name="act_vibration_hdr">Vibrazione azioni</string> + <string name="button_vibration">Vibrazione pulsanti:</string> + <string name="kb_vibration">Vibrazione tastiera:</string> + <string name="act_vibration">Vibrazione azioni:</string> + <string name="select_language">Scegli lingua:</string> + <string name="sel_lang_btn">Scegli lingua</string> + <string name="set_language_btn">Imposta lingua</string> + <string name="advanced_hdr">Avanzate</string> + <string name="copy_log_confirm">Copiare il log su scheda SD?</string> + <string name="copying_log" version="2">Copia i log nella scheda SD...</string> + <string name="copy_log_complete" version="2">Copia dei log completata</string> + <string name="fix_context_btn">Ripara contesti</string> + <string name="part_sd_btn">Partiziona SD</string> + <string name="part_sd_s_btn">Scheda SD</string> + <string name="file_manager_btn">File manager</string> + <string name="language_hdr">Lingua</string> + <string name="terminal_btn">Terminale</string> + <string name="reload_theme_btn">Ricarica tema</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP Inject</string> + <string name="inject_twrp_confirm">Eseguire nuovamente TWRP Inject?</string> + <string name="injecting_twrp">Esecuzione di TWRP Inject in corso...</string> + <string name="inject_twrp_complete">TWRP Inject completato</string> + <string name="swipe_to_confirm">Scorri per confermare</string> + <string name="part_sd_hdr">Partiziona scheda SD</string> + <string name="invalid_partsd_sel">Devi selezionare un dispositivo rimovibile</string> + <string name="part_sd_lose">Tutti i file sulla scheda SD andranno perduti!</string> + <string name="part_sd_undo">L'operazione è irreversibile!</string> + <string name="part_sd_ext_sz">Dimensione EXT:</string> + <string name="part_sd_swap_sz">Dimensione Swap:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Filesystem:</string> + <string name="swipe_part_sd">Scorri per partizionare</string> + <string name="swipe_part_sd_s">Partiziona</string> + <string name="partitioning_sd">Partizionamento scheda SD in corso...</string> + <string name="partitioning_sd2">Ci vorranno un paio di minuti.</string> + <string name="part_sd_complete">Partizionamento completato</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Ripristina Boot originale</string> + <string name="dumlock_restore_confirm">Ripristinare l'immagine di Boot originale?</string> + <string name="dumlock_restoring">Ripristino del Boot originale in corso...</string> + <string name="dumlock_restore_complete">Ripristino del Boot originale completato</string> + <string name="dumlock_reflash_btn">Reinstalla Recovery</string> + <string name="dumlock_reflash_confirm">Reinstallare la Recovery in Boot?</string> + <string name="dumlock_reflashing">Installazione Recovery in Boot in corso...</string> + <string name="dumlock_reflash_complete">Installazione della Recovery in Boot completata</string> + <string name="dumlock_install_btn">Installa HTC Dumlock</string> + <string name="dumlock_install_confirm">Installare i file di HTC Dumlock nella ROM?</string> + <string name="dumlock_installing">Installazione di HTC Dumlock in corso...</string> + <string name="dumlock_install_complete">Installazione di HTC Dumlock Install completata</string> + <string name="swipe_to_unlock">Scorri per sbloccare</string> + <string name="swipe_unlock"> Sblocca</string> + <string name="fm_hdr">File manager</string> + <string name="fm_sel_file">Seleziona un file o una cartella</string> + <string name="fm_type_folder">Cartella</string> + <string name="fm_type_file">File</string> + <string name="fm_choose_act">Scegli azione</string> + <string name="fm_selected">%tw_fm_type% selezionato(a):</string> + <string name="fm_copy_btn">Copia</string> + <string name="fm_copy_file_btn">Copia</string> + <string name="fm_copy_folder_btn">Copia</string> + <string name="fm_copying">Copia di</string> + <string name="fm_move_btn">Sposta</string> + <string name="fm_moving">Spostamento di</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755 di</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Elimina</string> + <string name="fm_deleting">Eliminazione di</string> + <string name="fm_rename_btn">Rinomina</string> + <string name="fm_rename_file_btn">Rinomina</string> + <string name="fm_rename_folder_btn">Rinomina</string> + <string name="fm_renaming">Rinominazione di</string> + <string name="fm_sel_dest">Scegli cartella di destinazione</string> + <string name="fm_sel_curr_folder">Scegli cartella attuale</string> + <string name="fm_rename_hdr">Rinomina</string> + <string name="fm_set_perms_hdr">Imposta permessi</string> + <string name="fm_perms">Permessi:</string> + <string name="fm_complete">Operazione completata</string> + <string name="decrypt_data_hdr">Decripta Data</string> + <string name="decrypt_data_enter_pass">Inserisci la password.</string> + <string name="decrypt_data_failed">Password errata! Riprova.</string> + <string name="decrypt_data_failed_pattern">Sequenza errata! Riprova.</string> + <string name="decrypt_data_enter_pattern">Inserisci sequenza di sblocco.</string> + <string name="decrypt_data_trying">Tentativo di decriptazione in corso...</string> + <string name="term_hdr">Terminale</string> + <string name="term_s_hdr">Terminale</string> + <string name="term_kill_btn">TERMINA</string> + <string name="term_sel_folder_hdr">Scegli la cartella d'inizio</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Pulisci la cache Dalvik</string> + <string name="sideload_wipe_cache_chk">Pulisci Cache</string> + <string name="swipe_to_sideload">Scorri per avviare Sideload</string> + <string name="swipe_sideload"> Avvia</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Utilizzo: adb sideload nomefile.zip</string> + <string name="sideload_complete">ADB Sideload completato</string> + <string name="fix_contexts_hdr">Ripristina contesti</string> + <string name="fix_contexts_note1">Nota: il ripristino dei contesti è raramente necessario.</string> + <string name="fix_contexts_note2">Il ripristino dei contesti SELinux può impedire</string> + <string name="fix_contexts_note3">il corretto avvio del tuo dispositivo.</string> + <string name="swipe_to_fix_contexts">Scorri per ripristinare i contesti</string> + <string name="swipe_fix_contexts"> Ripristina contesti</string> + <string name="fixing_contexts">Ripristino dei contesti in corso...</string> + <string name="fix_contexts_complete">Ripristino dei contesti completato</string> + <string name="reboot_hdr">Riavvio</string> + <string name="su_hdr">Verifica SuperSU</string> + <string name="su_note1">Il tuo dispositivo non sembra disporre di accesso root.</string> + <string name="su_note2">Installare SuperSU ora?</string> + <string name="su_note3">Ciò ti garantirà privilegi di root.</string> + <string name="su_cancel">Non installare</string> + <string name="swipe_su_to_install">Scorri per installare</string> + <string name="swipe_su_install"> Installa</string> + <string name="su_installing">Installazione di SuperSU in corso...</string> + <string name="sel_storage_list">Scegli archivio</string> + <string name="ok_btn">OK</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Il kernel non supporta la lettura dei contesti SELinux.</string> + <string name="full_selinux">Supporto per SELinux completo non presente.</string> + <string name="no_selinux">Nessun supporto per SELinux (libselinux assente).</string> + <string name="mtp_enabled">MTP abilitato</string> + <string name="mtp_crash">MTP si è arrestato. Non sarà più inizializzato all'avvio.</string> + <string name="decrypt_success">Decriptazione con password predefinita avvenuta con successo.</string> + <string name="unable_to_decrypt">Impossibile decriptare con password predefinita. Potresti dover formattare Data.</string> + <string name="generating_md51">Generazione MD5 in corso...</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * Generazione MD5 in corso...</string> + <string name="md5_created"> * MD5 creato.</string> + <string name="md5_error"> * Errore nell'MD5!</string> + <string name="md5_compute_error"> * Errore nel calcolo dell'MD5.</string> + <string name="current_date">(Data attuale)</string> + <string name="auto_generate">(Genera automaticamente)</string> + <string name="unable_to_locate_partition">Impossibile localizzare la partizione '{1}' per il calcolo delle dimensioni del backup.</string> + <string name="no_partition_selected">Nessuna partizione selezionata.</string> + <string name="total_partitions_backup"> * Numero di partizioni di cui eseguire il backup: {1}</string> + <string name="total_backup_size"> * Dimensione complessiva: {1}MB</string> + <string name="available_space"> * Spazio disponibile: {1}MB</string> + <string name="unable_locate_storage">Impossibile localizzare l'archivio.</string> + <string name="no_space">Lo spazio libero dell'archivio scelto è insufficiente.</string> + <string name="backup_started">[INIZIO DEL BACKUP]</string> + <string name="backup_folder"> * Cartella dei backup: {1}</string> + <string name="fail_backup_folder">Creazione della cartella dei backup fallita.</string> + <string name="avg_backup_fs">Velocità media di backup del filesystem: {1} MB/sec</string> + <string name="avg_backup_img">Velocità media di backup del drive: {1} MB/sec</string> + <string name="total_backed_size">[DIMENSIONE TOTALE SALVATA: {1} MB]</string> + <string name="backup_completed">[BACKUP COMPLETATO IN {1} SECONDI]</string> + <string name="restore_started">[INIZIO DEL RIPRISTINO]</string> + <string name="restore_folder">Cartella da cui ripristinare: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[Partizione {1} ripristinata ({2} secondi)]</string> + <string name="verifying_md5">Verifica MD5 in corso...</string> + <string name="skip_md5">Saltando la verifica del MD5 in base alle impostazioni stabilite.</string> + <string name="calc_restore">Calcolo dei dettagli del ripristino in corso...</string> + <string name="restore_read_only">Impossibile ripristinare {1} -- partizione montata in sola lettura.</string> + <string name="restore_unable_locate">Impossibile localizzare la partizione '{1}' per il ripristino.</string> + <string name="no_part_restore">Nessuna partizione selezionata per il ripristino.</string> + <string name="restore_part_count">Ripristino di {1} partizioni in corso...</string> + <string name="total_restore_size">Dimensione complessiva da ripristinare: {1}MB</string> + <string name="updating_system_details">Aggiornamento dei dettagli di System...</string> + <string name="restore_completed">[RIPRISTINO COMPLETATO IN {1} SECONDI]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Errore durante l'apertura di: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Impossibile localizzare la partizione dal nome di backup: '{1}'</string> + <string name="unable_find_part_path">Impossibile localizzare la partizione associata al percorso '{1}'</string> + <string name="update_part_details">Aggiornamento dei dettagli della partizione...</string> + <string name="update_part_details_done">...fatto</string> + <string name="wiping_dalvik">Pulizia delle cartelle della cache Dalvik...</string> + <string name="cleaned">Cartella pulita: {1}...</string> + <string name="dalvik_done">-- pulizia delle cartelle della cache Dalvik completata!</string> + <string name="no_andsec">Nessuna partizione Android protetta trovata.</string> + <string name="unable_to_locate">Impossibile localizzare {1}.</string> + <string name="wiping_datamedia">Pulizia dell'archivio interno -- /data/media...</string> + <string name="unable_to_mount">Impossibile montare {1}</string> + <string name="unable_to_mount_internal">Impossibile montare l'archivio interno</string> + <string name="unable_to_mount_storage">Impossibile montare l'archivio</string> + <string name="fail_decrypt">Decriptazione dei dati fallita.</string> + <string name="no_crypto_support">In questa build non è stato integrato alcun supporto per la crittografia.</string> + <string name="decrypt_success_dev">Dati decriptati con successo. Nuovo dispositivo di memoria: '{1}'</string> + <string name="decrypt_success_nodev">Dati decriptati con successo</string> + <string name="done">Fatto.</string> + <string name="start_partition_sd">Partizionamento scheda SD in corso...</string> + <string name="partition_sd_locate">Impossibile localizzare il dispositivo da partizionare.</string> + <string name="ext_swap_size">La dimensione complessiva di EXT e Swap eccede la capacità della scheda SD.</string> + <string name="remove_part_table">Rimozione della tabella delle partizioni in corso...</string> + <string name="unable_rm_part">Impossibile rimuovere la tabella delle partizioni.</string> + <string name="create_part">Creazione della partizione {1} in corso...</string> + <string name="unable_to_create_part">Impossibile creare la partizione {1}.</string> + <string name="format_sdext_as">Formattazione di sd-ext come {1}...</string> + <string name="part_complete">Partizionamento completato.</string> + <string name="unable_to_open">Impossibile aprire '{1}'.</string> + <string name="mtp_already_enabled">MTP è stato già abilitato</string> + <string name="mtp_fail">Impossibile abilitare MTP</string> + <string name="no_mtp">Supporto per MTP non incluso</string> + <string name="image_flash_start">[INIZIO INSTALLAZIONE DELL'IMMAGINE]</string> + <string name="img_to_flash">Immagine da installare: '{1}'</string> + <string name="flash_unable_locate">Impossibile localizzare la partizione '{1}' per l'installazione.</string> + <string name="no_part_flash">Nessuna partizione scelta per l'installazione.</string> + <string name="too_many_flash">Troppe partizioni scelte per l'installazione.</string> + <string name="invalid_flash">La partizione specificata non è valida.</string> + <string name="flash_done">[INSTALLAZIONE COMPLETATA]</string> + <string name="wiping">Pulizia di {1} in corso...</string> + <string name="repair_not_exist">{1} non esiste! Impossibile riparare!</string> + <string name="repairing_using">Riparazione di {1} utilizzando {2}...</string> + <string name="unable_repair">Impossibile riparare {1}.</string> + <string name="mount_data_footer">Impossibile montare la partizione Data. Footer criptato non trovato.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Impossibile creare la cartella '{1}' ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">Impossibile montare '{1}' ({2}).</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">Impossibile smontare '{1}' ({2}).</string> + <string name="cannot_resize">Impossibile ridimensionare {1}.</string> + <string name="repair_resize">Riparazione di {1} prima del ridimensionamento.</string> + <string name="unable_resize">Impossibile ridimensionare {1}.</string> + <string name="no_md5_found">Nessun MD5 trovato per '{1}'. Deseleziona "Abilita verifica MD5" per procedere con il ripristino.</string> + <string name="md5_fail_match">Il valore MD5 non corrisponde per '{1}'.</string> + <string name="md5_matched">MD5 trovato per '{1}'.</string> + <string name="fail_decrypt_tar">Decriptazione fallita per il file Tar '{1}'</string> + <string name="format_data_msg">Potresti dover riavviare la Recovery per accedere nuovamente a Data.</string> + <string name="format_data_err">Impossibile formattare al fine di rimuovere la crittografia.</string> + <string name="formatting_using">Formattazione di {1} tramite {2}...</string> + <string name="unable_to_wipe">Impossibile pulire {1}.</string> + <string name="cannot_wipe">La partizione {1} non può essere pulita.</string> + <string name="remove_all">Eliminazione di tutti i file in '{1}'...</string> + <string name="wiping_data">Pulizia di Data tralasciando /data/media...</string> + <string name="backing_up">Backup di {1} in corso...</string> + <string name="backup_storage_warning">Backup di {1} esso non include nessun file dell'archivio interno come foto o download.</string> + <string name="backing">Backup in corso...</string> + <string name="backup_size">La dimensione del backup di '{1}' è 0 byte.</string> + <string name="datamedia_fs_restore">ATTENZIONE: Il backup di Data è stato fatto mentre il filesystem era {1}! Il dispositivo potrebbe non avviarsi finché non reimposti il filesystem {1}.</string> + <string name="restoring">Ripristino di {1} in corso...</string> + <string name="restoring_hdr">Ripristino in corso...</string> + <string name="recreate_folder_err">Impossibile ripristinare la cartella {1}.</string> + <string name="img_size_err">La dimensione dell'immagine eccede la capacità del dispositivo</string> + <string name="flashing">Installazione di {1}...</string> + <string name="backup_folder_set">Cartella dei backup impostata in '{1}'</string> + <string name="locate_backup_err">Impossibile localizzare il backup '{1}'</string> + <string name="set_restore_opt">Impostazione opzioni di ripristino: '{1}':</string> + <string name="md5_check_skip">Tralascia controllo MD5: attivo</string> + <string name="ors_encrypt_restore_err">Impossibile utilizzare OpenRecoveryScript per ripristinare un backup criptato.</string> + <string name="mounting">Montaggio</string> + <string name="unmounting">Smontaggio</string> + <string name="mounted">'{1}' montata</string> + <string name="unmounted">'{1}' smontata</string> + <string name="setting">Impostazione di '{1}' a '{2}'</string> + <string name="setting_empty">Impostazione di '{1}' a vuoto</string> + <string name="making_dir1">Creazione cartella</string> + <string name="making_dir2">Creazione cartella: '{1}'</string> + <string name="running_command">Esecuzione comando</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Avvio di ADB Sideload...</string> + <string name="need_new_adb">Necessiti di adb 1.0.32 o più recente, per inviare dati tramite Sideload.</string> + <string name="no_pwd">Nessuna password fornita.</string> + <string name="done_ors">Elaborazione script terminata</string> + <string name="injecttwrp">Installazione di TWRP in Boot tramite TWRP Inject...</string> + <string name="zip_err">Errore durante l'installazione dello Zip '{1}'</string> + <string name="installing_zip">Installazione dello Zip '{1}' in corso...</string> + <string name="select_backup_opt">Impostazione opzioni di backup:</string> + <string name="compression_on">La compressione è attiva</string> + <string name="md5_off">La generazione di MD5 è disattiva</string> + <string name="backup_fail">Backup non riuscito</string> + <string name="backup_clean">Backup non riuscito. Pulizia della cartella dei backup in corso...</string> + <string name="running_recovery_commands">Esecuzione dei comandi di ripristino...</string> + <string name="recovery_commands_complete">Esecuzione dei comandi completata</string> + <string name="running_ors">Esecuzione di OpenRecoveryScript...</string> + <string name="ors_complete">Esecuzione di OpenRecoveryScript completata</string> + <string name="invalid_zip_format">File zip non valido!</string> + <string name="check_for_md5">Controllo sull'MD5 in corso...</string> + <string name="fail_sysmap">Impossibile mappare '{1}'</string> + <string name="verify_zip_sig">Verifica della firma dello Zip in corso...</string> + <string name="verify_zip_fail">Verifica della firma non riuscita!</string> + <string name="verify_zip_done">Verifica della firma completata con successo.</string> + <string name="zip_corrupt">Il file Zip è corrotto!</string> + <string name="no_md5">Nessun MD5 trovato: la verifica non sarà eseguita</string> + <string name="md5_fail">L'MD5 non corrisponde</string> + <string name="md5_match">L'MD5 corrisponde</string> + <string name="pid_signal">Il processo {1} è terminato con segnale: {2}</string> + <string name="pid_error">Il processo {1} è terminato con ERRORE: {2}</string> + <string name="install_dumlock">Installazione di HTC Dumlock in System...</string> + <string name="dumlock_restore">Ripristino del Boot originale...</string> + <string name="dumlock_reflash">Reinstallazione della Recovery in Boot...</string> + <string name="run_script">Esecuzione dello script {1}...</string> + <string name="rename_stock">Il file della Recovery stock, in System, è stato rinominato per prevenire la sostituzione di TWRP da paete della ROM.</string> + <string name="split_backup">Divisione del backup in archivi multipli...</string> + <string name="backup_error">Errore nella creazione del backup.</string> + <string name="restore_error">Errore durante il ripristino.</string> + <string name="split_thread">Divisione del thread {1} nell'archivio {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">File %llu di %llu, %i%%</string> + <string name="size_progress">%lluMB di %lluMB, %i%%</string> + <string name="decrypt_cmd">Tentativo di decriptare Data da riga di comando.</string> + <string name="base_pkg_err">Errore nel caricamento dei pacchetti base.</string> + <string name="simulating">Simulazione azioni in corso...</string> + <string name="backup_cancel">Backup annullato</string> + <string name="config_twrp">Configurazione di TWRP in corso...</string> + <string name="config_twrp_err">Impossibile configurare TWRP con questo kernel.</string> + <string name="copy_log">Log della Recovery copiato in {1}.</string> + <string name="max_queue">È stata raggiunta la dimensione massima della coda di Zip!</string> + <string name="min_queue">È stata raggiunta la dimensione minima della coda di Zip!</string> + <string name="screenshot_saved">Lo screenshot è stato salvato in {1}</string> + <string name="screenshot_err">Cattura dello screenshot non riuscita!</string> + <string name="zip_wipe_cache">Uno o più Zip ha richiesto la pulizia della Cache -- La Cache sarà pulita immediatamente.</string> + <string name="and_sec_wipe_err">Impossibile pulire android_secure</string> + <string name="dalvik_wipe_err">Pulizia della cache Dalvik fallita</string> + <string name="auto_gen">(Genera automaticamente)</string> + <string name="curr_date">(Data attuale)</string> + <string name="backup_name_len">Il nome del backup eccede la lunghezza massima.</string> + <string name="backup_name_invalid">Il nome del backup '{1}' contiene uno o più caratteri non validi: '{1}'</string> + <string name="no_real_sdcard">Questo dispositivo non possiede una scheda SD reale! Interruzione immediata!</string> + <string name="cancel_sideload">Annullamento di ADB sideload...</string> + <string name="change_fs_err">Errore nella modifica del filesystem.</string> + <string name="theme_ver_err">La versione del tema personalizzato non corrisponde alla versione di TWRP. Sarà utilizzato il tema predefinito.</string> + <string name="up_a_level">(Livello superiore)</string> + <string name="install_reboot" version="2">Riavvio in %tw_sleep% secondo(i)</string> + <string name="adbbackup_error">Errore con ADB Backup. Abbandono..."</string> + <string name="adbbackup_control_error">Impossibile scrivere nel canale di controllo adb</string> + <string name="twrp_adbbu_option">--twrp opzione richiesta per abilitare twrp adb backup</string> + <string name="partition_not_found">percorso: {1} non trovato nella lista delle partizioni</string> + <string name="copy_kernel_log">Log del kernel copiato in {1}</string> + <string name="include_kernel_log">Includi Log del Kernel</string> + <string name="unable_set_boot_slot">Errore nel cambio slot d'avvio del bootloader in {1}</string> + </resources> +</language> diff --git a/gui/theme/common/languages/nl.xml b/gui/theme/common/languages/nl.xml new file mode 100644 index 000000000..340ce6d24 --- /dev/null +++ b/gui/theme/common/languages/nl.xml @@ -0,0 +1,673 @@ +<?xml version="1.0" encoding="utf-8"?> + +<language> + <display>Dutch</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">Systeem</string> + <string name="system_image">Systeem-Image</string> + <string name="vendor">Leverancier</string> + <string name="vendor_image">Leverancier-Image</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="sdcard">SD Kaart</string> + <string name="internal">Interne opslag</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Geadopteerde Data</string> + <string name="adopted_storage">Geadopteerde Opslag</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% ° C</string> + <string name="battery_pct">Accu: %tw_battery%</string> + <string name="sort_by_name">Sorteer op naam</string> + <string name="sort_by_date">Sorteer op datum</string> + <string name="sort_by_size">Sorteer op grootte</string> + <string name="sort_by_name_only">Naam</string> + <string name="sort_by_date_only">Datum</string> + <string name="sort_by_size_only">Grootte</string> + <string name="tab_general">ALGEMEEN</string> + <string name="tab_options">OPTIES</string> + <string name="tab_backup">BACK-UP</string> + <string name="tab_time_zone">TIJDZONE</string> + <string name="tab_screen">SCHERM</string> + <string name="tab_vibration">TRILLINGEN</string> + <string name="tab_language">TAAL</string> + + <string name="install_btn">Installeren</string> + <string name="wipe_btn">Wissen</string> + <string name="backup_btn">Back-up</string> + <string name="restore_btn">Herstel</string> + <string name="mount_btn">Koppelen</string> + <string name="settings_btn">Instellingen</string> + <string name="advanced_btn">Geavanceerd</string> + <string name="reboot_btn">Herstarten</string> + <string name="files_btn">Bestanden</string> + <string name="copy_log_btn">Log kopiëren</string> + <string name="select_type_hdr">Type selecteren</string> + <string name="install_zip_hdr">Zip installeren</string> + <string name="install_zip_btn">Zip installeren</string> + <string name="install_image_hdr">Image installeren</string> + <string name="install_image_btn">Image installeren</string> + <string name="install_select_file_hdr">Bestand selecteren</string> + <string name="file_selector_folders_hdr">Mappen</string> + <string name="select_file_from_storage">Selecteer bestand in %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Installeren</string> + <string name="select_storage_hdr">Selecteer opslag</string> + <string name="select_storage_btn">Selecteer opslag</string> + <string name="queue_hdr">Wachtrij</string> + <string name="zip_queue_count">%tw_zip_queue_count% van max 10 bestanden in de wachtrij</string> + <string name="zip_queue_count_s">Bestand %tw_zip_queue_count% van 10:</string> + <string name="zip_warn1">Deze toepassing kan niet-compatibele software installeren</string> + <string name="zip_warn2">en je apparaat onbruikbaar maken.</string> + <string name="zip_back_cancel">Klik op terug om het toevoegen van de Zip te annuleren.</string> + <string name="zip_back_clear">Klik op terug om de wachtrij op te schonen.</string> + <string name="folder">Map:</string> + <string name="file">Bestand:</string> + <string name="zip_sig_chk">Verificatie van de ondertekening van de zip</string> + <string name="inject_twrp_chk">TWRP injecteren na installeren</string> + <string name="install_reboot_chk">Herstart nadat de installatie compleet is</string> + <string name="options_hdr">Opties</string> + <string name="confirm_flash_hdr">Flash bevestigen</string> + <string name="zip_queue">Wachtrij:</string> + <string name="options">Instellingen:</string> + <string name="swipe_confirm"> Bevestigen</string> + <string name="zip_add_btn">Meer Zips toevoegen</string> + <string name="zip_clear_btn">Leeg zip wachtrij</string> + <string name="install_zip_count_hdr">Installeer Zip %tw_zip_index% van %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Zip Installeren: %tw_file%</string> + <string name="failed">Mislukt</string> + <string name="successful">Geslaagd</string> + <string name="install_failed">Installatie mislukt</string> + <string name="install_successful">Installatie is geslaagd</string> + <string name="wipe_cache_dalvik_btn">Wis cache / dalvik</string> + <string name="reboot_system_btn">Herstart systeem</string> + <string name="install_sel_target">Selecteer doelpartitie</string> + <string name="flash_image_select">Selecteer partitie om op te installeren:</string> + <string name="target_partition">Doelpartitie:</string> + <string name="flashing_image">Image installeren...</string> + <string name="image_flashed">Image geïnstalleerd</string> + <string name="wipe_cache_dalvik_confirm">Wis Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Cache & Dalvik aan het wissen...</string> + <string name="wipe_cache_dalvik_complete">Cache & Dalvik opschoning afgerond</string> + <string name="swipe_wipe">Veeg om te wissen</string> + <string name="swipe_wipe_s"> Wissen</string> + <string name="no_os1">Geen OS geïnstalleerd! Bent u</string> + <string name="no_osrb">weet u zeker dat u wilt herstarten?</string> + <string name="no_ospo">weet u zeker dat u uw apparaat wilt uitschakelen?</string> + <string name="rebooting">Herstarten...</string> + <string name="swipe_reboot">Veeg om te herstarten</string> + <string name="swipe_reboot_s"> Herstarten</string> + <string name="swipe_flash">Veeg om de installatie te bevestigen</string> + <string name="confirm_action">Bevestig actie</string> + <string name="back_cancel">Klik op terug om te annuleren.</string> + <string name="cancel_btn">Annuleren</string> + <string name="wipe_hdr">Wissen</string> + <string name="factory_reset_hdr">Fabrieksinstellingen</string> + <string name="factory_reset_btn">Fabrieksinstellingen</string> + <string name="factory_reset1">Wist data, cache en Dalvik</string> + <string name="factory_reset2">(Interne opslag niet meegenomen)</string> + <string name="factory_reset3">Merendeel van de tijd dit is</string> + <string name="factory_reset4">de enigste opschoning die nodig is.</string> + <string name="factory_resetting">Fabrieksinstellingen...</string> + <string name="advanced_wipe_hdr">Geavanceerd wissen</string> + <string name="advanced_wipe_btn">Geavanceerd wissen</string> + <string name="wipe_enc_confirm">Encryptie wissen van de data-partitie?</string> + <string name="formatting_data">Data formatteren...</string> + <string name="swipe_format_data">Veeg om Data te formatteren</string> + <string name="swipe_format_data_s"> Data formatteren</string> + <string name="factory_reset_complete">Fabrieksinstellingen hersteld</string> + <string name="sel_part_hdr">Partitie selecteren</string> + <string name="wipe_sel_confirm">Wis geselecteerde partitie(s)?</string> + <string name="wiping_part">Partitie(s) aan het wissen...</string> + <string name="wipe_complete">Wissen voltooid</string> + <string name="sel_part_wipe">Selecteer partities om te wissen:</string> + <string name="invalid_part_sel">Ongeldige partitie selectie</string> + <string name="format_data_hdr">Formatteer Data</string> + <string name="format_data_btn">Formatteer Data</string> + <string name="format_data_ptr1">Het formatteren van Data, verwijderd al uw apps,</string> + <string name="format_data_ptr2">backups, foto\'s, video\'s, media, en</string> + <string name="format_data_ptr3">verwijderd de versleuteling van de interne opslag.</string> + <string name="format_data_adopted">Geadopteerde opslag inbegrepen</string> + <string name="format_data_lcp1">Data formatteren verwijdert alle apps, back-ups, foto\'s, videos, media, en</string> + <string name="format_data_lcp2">verwijderd de versleuteling van de interne opslag.</string> + <string name="format_data_wtc1">Het formatteren van Data, verwijderd al uw apps,</string> + <string name="format_data_wtc2">back-ups en media. Dit kan niet ongedaan worden gemaakt.</string> + <string name="format_data_undo">Dit kan niet ongedaan worden gemaakt.</string> + <string name="format_data_complete">Data formattering voltooid</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Type Yes om door te gaan. Druk op terug om te annuleren.</string> + <string name="part_opt_hdr">Opties voor partitioneren: %tw_partition_name%</string> + <string name="sel_act_hdr">Selecteer Actie</string> + <string name="file_sys_opt">Opties voor bestandssysteem</string> + <string name="partition">Partitie: %tw_partition_name%</string> + <string name="part_mount_point">Koppel Punt: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Bestandssysteem: %tw_partition_file_system%</string> + <string name="part_present_yes">Aanwezig: Ja</string> + <string name="part_present_no">Aanwezig: Nee</string> + <string name="part_removable_yes">Verwijderbaar: Ja</string> + <string name="part_removable_no">Verwijderbaar: Nee</string> + <string name="part_size">Grootte: % tw_partition_size % MB</string> + <string name="part_used">Gebruikt: % tw_partition_used % MB</string> + <string name="part_free">Vrij: % tw_partition_free % MB</string> + <string name="part_backup_size">Back-up grootte: % tw_partition_backup_size % MB</string> + <string name="resize_btn">Bestandssysteem grootte aanpassen</string> + <string name="resize_btn_s">Grootte aanpassen</string> + <string name="resize_confirm">Grootte van %tw_partition_name% aanpassen?</string> + <string name="resizing">Grootte aanpassen...</string> + <string name="resize_complete">Aanpassen voltooid</string> + <string name="swipe_resize">Veeg om de grootte aan te passen</string> + <string name="swipe_resize_s"> Grootte aanpassen</string> + <string name="repair_btn">Bestandssysteem Repareren</string> + <string name="repair_btn_s">Repareren</string> + <string name="repair_confirm">%tw_partition_name% repareren?</string> + <string name="repairing">Aan het repareren...</string> + <string name="repair_complete">Reparartie voltooid</string> + <string name="swipe_repair">Veeg om te repareren</string> + <string name="swipe_repair_s"> Repareren</string> + <string name="change_fs_btn">Bestandssysteem Wijzigen</string> + <string name="change_fs_btn_s">Wijzigen</string> + <string name="change_fs_for_hdr">Bestandssysteem Wijzigen voor: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partitie: %tw_partition_name% > selecteer bestandssysteem</string> + <string name="change_fs_warn1">Sommige ROMs of kernels hebben mogelijk geen ondersteuning voor sommige</string> + <string name="change_fs_warn2">bestandssystemen. Let daar op!</string> + <string name="change_fs_confirm">%tw_partition_name% wijzigen?</string> + <string name="formatting">Formatteren...</string> + <string name="format_complete">Formatteren voltooid</string> + <string name="swipe_change_fs">Veeg om te wijzigen</string> + <string name="swipe_change_s"> Wijzigen</string> + <string name="back_btn">Terug</string> + <string name="wipe_enc_btn">Versleuteling verwijderen</string> + <string name="swipe_factory_reset">Veeg voor Fabrieksinstellingen</string> + <string name="repair_change_btn">Repareer of verander het bestandssysteem</string> + <string name="storage_hdr">Opslag: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Back-up</string> + <string name="backup_confirm_hdr">Back-up bevestigen</string> + <string name="encryption_tab">VERSLEUTELING</string> + <string name="encryption">Versleuteling:</string> + <string name="name">Naam:</string> + <string name="sel_part_backup">Selecteer partities om te back-uppen:</string> + <string name="storage">Opslag:</string> + <string name="enc_disabled">uitgeschakeld - stel een wachtwoord in om in te schakelen</string> + <string name="enc_enabled">ingeschakeld</string> + <string name="enable_backup_comp_chk">Compressie inschakelen</string> + <string name="skip_md5_backup_chk">MD5 generatie tijdens back-up overslaan</string> + <string name="disable_backup_space_chk">Vrije ruimte controle uitschakelen</string> + <string name="refresh_sizes_btn">Grootte vernieuwen</string> + <string name="swipe_backup">Veeg voor back-up</string> + <string name="append_date_btn">Datum toevoegen</string> + <string name="backup_name_exists">Een back-up met die naam bestaat al!</string> + <string name="encrypt_backup">Back-up versleutelen?</string> + <string name="enter_pass">Wachtwoord invoeren:</string> + <string name="enter_pass2">Wachtwoord opnieuw invoeren:</string> + <string name="pass_not_match">Wachtwoorden komen niet overeen!</string> + <string name="partitions">Partities:</string> + <string name="disabled">Uitgeschakeld</string> + <string name="enabled">Ingeschakeld</string> + <string name="backup_name_hdr">Naam van de back-up</string> + <string name="progress">Voortgang:</string> + <string name="backup_complete">Back-up compleet</string> + <string name="restore_hdr">Herstellen</string> + <string name="sel_backup_hdr">Selecteer back-up</string> + <string name="restore_sel_store_hdr">Selecteer back-up van %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Selecteer pakket om te herstellen:</string> + <string name="restore_enc_backup_hdr">Versleutelde back-up</string> + <string name="restore_dec_fail">Wachtwoord is mislukt, probeer het opnieuw!</string> + <string name="del_backup_btn">Back-up verwijderen</string> + <string name="del_backup_confirm">Back-up verwijderen?</string> + <string name="del_backup_confirm2">Dit kan niet ongedaan worden gemaakt!</string> + <string name="deleting_backup">Back-up verwijderen...</string> + <string name="backup_deleted">Verwijderen van back-up voltooid</string> + <string name="swipe_delete">Veeg om te verwijderen</string> + <string name="swipe_delete_s"> Verwijderen</string> + <string name="restore_try_decrypt">Versleutelde back-up - proberen te decoderen</string> + <string name="restore_try_decrypt_s">Decodering proberen</string> + <string name="restore_backup_date">Back-up gemaakt op %tw_restore_file_date%</string> + <string name="restore_sel_part">Selecteer partities om te herstellen:</string> + <string name="restore_enable_md5_chk">MD5 controle van back-up bestanden Inschakelen</string> + <string name="restore_complete">Herstellen voltooid</string> + <string name="swipe_restore">Veeg om te herstellen</string> + <string name="swipe_restore_s"> Herstellen</string> + <string name="rename_backup_hdr">Back-up hernoemen</string> + <string name="rename_backup_confirm">Back-up hernoemen?</string> + <string name="rename_backup_confirm2">Dit kan niet ongedaan worden gemaakt!</string> + <string name="renaming_backup">Back-up hernoemen...</string> + <string name="rename_backup_complete">Back-up hernoemen voltooid</string> + <string name="swipe_to_rename">Veeg om te hernoemen</string> + <string name="swipe_rename"> Hernoem</string> + <string name="confirm_hdr">Bevestig</string> + <string name="mount_hdr">Koppelen</string> + <string name="mount_sel_part">Selecteer partities om te koppelen:</string> + <string name="mount_sys_ro_chk">Systeem partitie als alleen-lezen koppelen</string> + <string name="mount_sys_ro_s_chk">Koppel Systeem RO</string> + <string name="decrypt_data_btn">Gegevens ontsleutelen</string> + <string name="disable_mtp_btn">MTP uitschakelen</string> + <string name="enable_mtp_btn">MTP Inschakelen</string> + <string name="mount_usb_storage_btn">USB-opslag koppelen</string> + <string name="usb_storage_hdr">USB-opslag</string> + <string name="usb_stor_mnt1">USB opslag gekoppeld</string> + <string name="usb_stor_mnt2">Zorg ervoor dat u uw apparaat veilig verwijdert</string> + <string name="usb_stor_mnt3">van de computer voordat u ontkoppeld!</string> + <string name="unmount_btn">Ontkoppelen</string> + <string name="rb_system_btn">Systeem</string> + <string name="rb_poweroff_btn">Uitzetten</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">Uitschakelen...</string> + <string name="swipe_power_off">Veeg om uit te schakelen</string> + <string name="swipe_power_off_s">Uitschakelen</string> + <string name="sys_ro_hdr">Ongewijzigde systeempartitie</string> + <string name="sys_ro_keep">Systeem als alleen lezen houden?</string> + <string name="sys_rop1">TWRP kan je systeempartitie ongewijzigd laten</string> + <string name="sys_rop2">om het verkrijgen van officiële updates makkelijker te maken.</string> + <string name="sys_rop3">TWRP zal niet in staat zijn om te voorkomen dat de originele ROM</string> + <string name="sys_rop4">TRWP vervangt en zal niet aanbieden het device te rooten.</string> + <string name="sys_rop5">Het installeren van zips of adb bewerkingen kunnen nog steeds</string> + <string name="sys_rop6">de systeem partitie wijzigen.</string> + <string name="sys_rol1">TWRP kan je system partitie ongewijzigd laten om het verkrijgen van officiële updates makkelijker te maken.</string> + <string name="sys_rol2">TWRP zal niet kunnen voorkomen dat de originele ROM TWRP vervangt en zal niet aanbieden om uw apparaat te rooten.</string> + <string name="sys_rol3">Het installeren van zips of adb bewerkingen kunnen nog steeds de systeem partitie wijzigen.</string> + <string name="sys_ro_never_show_chk">Dit scherm niet meer weergeven tijdens het opstarten</string> + <string name="sys_ro_keep_ro_btn">Alleen lezen behouden</string> + <string name="swipe_allow_mod">Veeg om modificaties toe te staan</string> + <string name="swipe_allow_mod_s">Wijzigingen toestaan</string> + <string name="settings_hdr">Instellingen</string> + <string name="settings_gen_hdr">Algemeen</string> + <string name="settings_gen_s_hdr">Algemeen</string> + <string name="settings_gen_btn">Algemeen</string> + <string name="use_rmrf_chk">Gebruik rm -rf in plaats van formatteren</string> + <string name="use24clock_chk">Gebruik 24-uurs klok</string> + <string name="rev_navbar_chk">Omgekeerde navbar lay-out</string> + <string name="simact_chk">Simuleren van acties voor het testen van het thema</string> + <string name="simfail_chk">Simuleren van mislukkingen van acties</string> + <string name="ctr_navbar_rdo">Navbar knoppen centreren</string> + <string name="lft_navbar_rdo">Navbar knoppen links uitlijnen</string> + <string name="rht_navbar_rdo">Navbar knoppen rechts uitlijnen</string> + <string name="restore_defaults_btn">Standaardwaarden herstellen</string> + <string name="settings_tz_btn">Tijdzone</string> + <string name="settings_screen_btn">Scherm</string> + <string name="settings_screen_bright_btn">Scherm helderheid</string> + <string name="settings_vibration_btn">Vibratie</string> + <string name="settings_language_btn">Taal</string> + <string name="time_zone_hdr">Tijdzone</string> + <string name="sel_tz_list">Selecteer tijdzone:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Midway-eilanden</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain-time</string> + <string name="utcm6">(UTC -6) Central-time, Mexico</string> + <string name="utcm5">(UTC -5) Eastern-time</string> + <string name="utcm4">(UTC -4) Atlantic-time</string> + <string name="utcm3">(UTC -3) Brazilië, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantische</string> + <string name="utcm1">(UTC -1) Azoren, Kaapverdië</string> + <string name="utc0">(UTC 0) Londen, Dublin, Lissabon</string> + <string name="utcp1">(UTC +1) Berlijn, Brussel, Parijs</string> + <string name="utcp2">(UTC +2) Athene, Istanboel, Zuid-Afrika</string> + <string name="utcp3">(UTC +3) Moskou, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Jekaterinenburg, Islamabad</string> + <string name="utcp6">(UTC +6) Alma-Ata, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokio, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Oost-Australië, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Salomoneilanden</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Compensatie selecteren (meestal 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Geen</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Gebruik zomertijd(DST)</string> + <string name="curr_tz">Huidige tijdzone: %tw_time_zone%</string> + <string name="curr_tz_s">Huidige tijdzone:</string> + <string name="set_tz_btn">Tijdzone instellen</string> + <string name="settings_screen_hdr">Scherm</string> + <string name="settings_screen_timeout_hdr">Scherm Timeout</string> + <string name="enable_timeout_chk">Scherm Timeout inschakelen</string> + <string name="screen_to_slider">Scherm timeout in seconden:</string> + <string name="screen_to_slider_s">Scherm timeout in seconden (0 = uitgeschakeld): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Scherm timeout instelling niet beschikbaar</string> + <string name="screen_bright_slider">Helderheid: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Helderheid instelling niet beschikbaar</string> + <string name="vibration_hdr">Vibratie</string> + <string name="button_vibration_hdr">Knop vibratie</string> + <string name="kb_vibration_hdr">Toetsenbord vibratie</string> + <string name="act_vibration_hdr">Actie vibratie</string> + <string name="button_vibration">Knop vibratie:</string> + <string name="kb_vibration">Toetsenbord vibratie:</string> + <string name="act_vibration">Actie vibratie:</string> + <string name="select_language">Taal selecteren:</string> + <string name="sel_lang_btn">Taal selecteren</string> + <string name="set_language_btn">Taal instellen</string> + <string name="advanced_hdr">Geavanceerd</string> + <string name="copy_log_confirm">Log naar SD-kaart kopiëren?</string> + <string name="copying_log">Log naar SD-kaart kopiëren...</string> + <string name="copy_log_complete">Log kopie voltooid</string> + <string name="fix_context_btn">Context repareren</string> + <string name="part_sd_btn">SD-kaart Partitioneren</string> + <string name="part_sd_s_btn">SD-kaart</string> + <string name="file_manager_btn">Bestandsbeheer</string> + <string name="language_hdr">Taal</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Thema herladen</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP Injecteren</string> + <string name="inject_twrp_confirm">TWRP opnieuw injecteren?</string> + <string name="injecting_twrp">TWRP Opnieuw injecteren...</string> + <string name="inject_twrp_complete">TWRP injectie voltooid</string> + <string name="swipe_to_confirm">Veeg om te bevestigen</string> + <string name="part_sd_hdr">SD-kaart Partitioneren</string> + <string name="invalid_partsd_sel">U moet een verwisselbaar apparaat selecteren</string> + <string name="part_sd_lose">U verliest alle bestanden op uw SD-kaart!</string> + <string name="part_sd_undo">Deze actie kan niet ongedaan gemaakt worden!</string> + <string name="part_sd_ext_sz">EXT-grootte:</string> + <string name="part_sd_swap_sz">Swap grootte:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Bestandsysteem:</string> + <string name="swipe_part_sd">Veeg om te partitioneren</string> + <string name="swipe_part_sd_s">Partitie</string> + <string name="partitioning_sd">SD-kaart partitioneren...</string> + <string name="partitioning_sd2">Dit duurt een paar minuten.</string> + <string name="part_sd_complete">Partitionering voltooid</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Originele boot herstellen</string> + <string name="dumlock_restore_confirm">De originele boot image herstellen?</string> + <string name="dumlock_restoring">Originele boot herstellen...</string> + <string name="dumlock_restore_complete">Originele Boot herstellen voltooid</string> + <string name="dumlock_reflash_btn">Recovery herflashen</string> + <string name="dumlock_reflash_confirm">Recovery naar boot herflashen?</string> + <string name="dumlock_reflashing">Recovery naar boot flashen...</string> + <string name="dumlock_reflash_complete">Recovery naar boot flashen voltooid</string> + <string name="dumlock_install_btn">HTC Dumlock installeren</string> + <string name="dumlock_install_confirm">HTC Dumlock bestanden in de ROM installeren?</string> + <string name="dumlock_installing">HTC Dumlock installeren...</string> + <string name="dumlock_install_complete">HTC Dumlock installatie voltooid</string> + <string name="swipe_to_unlock">Veeg om te ontgrendelen</string> + <string name="swipe_unlock"> Ontgrendelen</string> + <string name="fm_hdr">Bestandsbeheer</string> + <string name="fm_sel_file">Een bestand of map selecteren</string> + <string name="fm_type_folder">Map</string> + <string name="fm_type_file">Bestand</string> + <string name="fm_choose_act">Actie selecteren</string> + <string name="fm_selected">%tw_fm_type% geselecteerd:</string> + <string name="fm_copy_btn">Kopiëer</string> + <string name="fm_copy_file_btn">Bestand kopiëren</string> + <string name="fm_copy_folder_btn">Map kopiëren</string> + <string name="fm_copying">Kopiëren</string> + <string name="fm_move_btn">Verplaatsen</string> + <string name="fm_moving">Verplaatsen</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Verwijder</string> + <string name="fm_deleting">Verwijderen</string> + <string name="fm_rename_btn">Hernoemen</string> + <string name="fm_rename_file_btn">Bestand hernoemen</string> + <string name="fm_rename_folder_btn">Map hernoemen</string> + <string name="fm_renaming">Hernoemen</string> + <string name="fm_sel_dest">Selecteer doelmap</string> + <string name="fm_sel_curr_folder">Selecteer huidige map</string> + <string name="fm_rename_hdr">Hernoemen</string> + <string name="fm_set_perms_hdr">Machtigingen instellen</string> + <string name="fm_perms">Machtigingen:</string> + <string name="fm_complete">Bestandsbewerking gereed</string> + <string name="decrypt_data_hdr">Gegevens decoderen</string> + <string name="decrypt_data_enter_pass">Wachtwoord invoeren.</string> + <string name="decrypt_data_failed">Wachtwoord mislukt, probeer het opnieuw!</string> + <string name="decrypt_data_failed_pattern">Patroon mislukt, probeer het opnieuw!</string> + <string name="decrypt_data_enter_pattern">Patroon invoeren.</string> + <string name="decrypt_data_trying">Ontsleuteling proberen</string> + <string name="term_hdr">Terminal commandos</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">KILL</string> + <string name="term_sel_folder_hdr">Naar begin folder gaan</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Dalvik Cache legen</string> + <string name="sideload_wipe_cache_chk">Cache legen</string> + <string name="swipe_to_sideload">Veeg om sideloaden te beginnen</string> + <string name="swipe_sideload"> Start</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Gebruik: adb sideload bestandsnaam.zip</string> + <string name="sideload_complete">ADB Sideload voltooid</string> + <string name="fix_contexts_hdr">Context repareren</string> + <string name="fix_contexts_note1">Note: Het repareren van de context is zelden nodig.</string> + <string name="fix_contexts_note2">Het repareren van SELinux Contexts kan ervoor</string> + <string name="fix_contexts_note3">zorgen dat uw apparaat niet meer correct opstart.</string> + <string name="swipe_to_fix_contexts">Veeg om Contexts te repareren</string> + <string name="swipe_fix_contexts"> Contexts repareren</string> + <string name="fixing_contexts">Repareren van Contexts...</string> + <string name="fix_contexts_complete">Het repareren van Contexts is gereed</string> + <string name="reboot_hdr">Herstart</string> + <string name="su_hdr">SuperSU Controle</string> + <string name="su_note1">Uw apparaat lijkt niet geroot te zijn.</string> + <string name="su_note2">Installeer SuperSU nu?</string> + <string name="su_note3">Dit zal uw apparaat rooten.</string> + <string name="su_cancel">Installeer niet</string> + <string name="swipe_su_to_install">Veeg om te installeren</string> + <string name="swipe_su_install"> Installeren</string> + <string name="su_installing">Installeren van SuperSU</string> + <string name="sel_storage_list">Selecteer opslag</string> + <string name="ok_btn">Oké</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Kernel heeft geen ondersteuning voor het lezen van SELinux contexten.</string> + <string name="full_selinux">Volledige SELinux ondersteuning is aanwezig.</string> + <string name="no_selinux">Geen SELinux ondersteuning (geen libselinux).</string> + <string name="mtp_enabled">MTP ingeschakeld</string> + <string name="mtp_crash">MTP crashte, MTP niet starten tijdens boot.</string> + <string name="decrypt_success">Succesvol gedecodeerd met standaardwachtwoord.</string> + <string name="unable_to_decrypt">Kan niet decoderen met het standaardwachtwoord. U zal wellicht een Data format moeten uitvoeren.</string> + <string name="generating_md51">MD5 genereren</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * md5 genereren...</string> + <string name="md5_created"> * MD5 gemaakt.</string> + <string name="md5_error"> * MD5 fout!</string> + <string name="md5_compute_error"> * Fout tijdens het genereren van de MD5.</string> + <string name="current_date">(Huidige datum)</string> + <string name="auto_generate">(Automatisch genereren)</string> + <string name="unable_to_locate_partition">Kan partitie \'{1}\' niet vinden voor back-up berekeningen.</string> + <string name="no_partition_selected">Geen partities geselecteerd voor back-up.</string> + <string name="total_partitions_backup"> * Totaal aantal partities voor de back-up: {1}</string> + <string name="total_backup_size"> * Totale omvang van alle gegevens: {1}MB</string> + <string name="available_space"> * Beschikbare ruimte: {1}MB</string> + <string name="unable_locate_storage">Kan opslagapparaat niet vinden.</string> + <string name="no_space">Er is onvoldoende vrije ruimte op de opslag.</string> + <string name="backup_started">[BACK-UP GESTART]</string> + <string name="backup_folder"> * Back-up map: {1}</string> + <string name="fail_backup_folder">Het maken van de back-up folder is mislukt.</string> + <string name="avg_backup_fs">Gemiddelde back-up snelheid voor bestandssystemen: {1} MB/sec</string> + <string name="avg_backup_img">Gemiddelde back-up snelheid voor images: {1} MB/sec</string> + <string name="total_backed_size">[{1} MB TOTALE BACK-UP]</string> + <string name="backup_completed">[BACK-UP VOLTOOID IN {1} SECONDEN]</string> + <string name="restore_started">[HERSTEL BEGONNEN]</string> + <string name="restore_folder">Herstel map: \'{1}\'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} gereed ({2} seconden)]</string> + <string name="verifying_md5">MD5 Controleren</string> + <string name="skip_md5">MD5 controle op basis van gebruikersinstelling overslaan.</string> + <string name="calc_restore">Herstel details berekenen...</string> + <string name="restore_read_only">Kan {1} niet herstellen -- Als alleen lezen gekoppeld.</string> + <string name="restore_unable_locate">Kan \'{1}\' niet vinden voor herstellen.</string> + <string name="no_part_restore">Geen partities geselecteerd om te worden hersteld.</string> + <string name="restore_part_count">{1}-partities herstellen...</string> + <string name="total_restore_size">Totale herstel grootte is {1}MB</string> + <string name="updating_system_details">Systeemgegevens bijwerken</string> + <string name="restore_completed">[HERSTELLEN VOLTOOID IN {1} SECONDEN]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Fout bij het openen: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Kan geen partitie vinden met de naam van de back-up: \'{1}\'</string> + <string name="unable_find_part_path">Kan geen partitie vinden voor pad \'{1}\'</string> + <string name="update_part_details">Partitie gegevens bijwerken...</string> + <string name="update_part_details_done">...gedaan</string> + <string name="wiping_dalvik">Dalvik Cache folders legen...</string> + <string name="cleaned">Schoongemaakt: {1}...</string> + <string name="dalvik_done">--Dalvik Cache mappen legen voltooid!</string> + <string name="no_andsec">Geen beveiligde android partities gevonden.</string> + <string name="unable_to_locate">Kan {1} niet vinden.</string> + <string name="wiping_datamedia">Interne opslag legen --/data/media...</string> + <string name="unable_to_mount">Kan {1} niet koppelen</string> + <string name="unable_to_mount_internal">Kan internal_storage niet koppelen</string> + <string name="unable_to_mount_storage">Kan opslag niet koppelen</string> + <string name="fail_decrypt">Gegevens decoderen mislukt.</string> + <string name="no_crypto_support">Er is geen crypto ondersteuning gecompileerd in deze build.</string> + <string name="decrypt_success_dev">Data succesvol gedecodeerd, nieuw block device: \'{1}\'</string> + <string name="done">Gereed.</string> + <string name="start_partition_sd">SD-kaart partitioneren...</string> + <string name="partition_sd_locate">Kan apparaat om te partitioneren niet vinden.</string> + <string name="ext_swap_size">EXT + Swap grootte zijn groter dan de sd-kaart.</string> + <string name="remove_part_table">Partitie-tabel word verwijderd...</string> + <string name="unable_rm_part">Kan partitie-tabel niet verwijderen.</string> + <string name="create_part">Partitie {1} aanmaken...</string> + <string name="unable_to_create_part">Niet in staat om partitie {1} te maken.</string> + <string name="format_sdext_as">Sd-ext formatteren als {1}...</string> + <string name="part_complete">Partitionering voltooid.</string> + <string name="unable_to_open">Kan \'{1}\' niet openen.</string> + <string name="mtp_already_enabled">MTP al ingeschakeld</string> + <string name="mtp_fail">Kan MTP niet inschakelen</string> + <string name="no_mtp">MTP ondersteuning niet inbegrepen</string> + <string name="image_flash_start">[IMAGE FLASH BEGONNEN]</string> + <string name="img_to_flash">Image om te flashen: \'{1}\'</string> + <string name="flash_unable_locate">Kan partitie \'{1}\' niet vinden om te flashen.</string> + <string name="no_part_flash">Geen partities geselecteerd voor het flashen.</string> + <string name="too_many_flash">Teveel partities geselecteerd voor het flashen.</string> + <string name="invalid_flash">Ongeldige partitie om te flashen opgegeven.</string> + <string name="flash_done">[IMAGE FLASH VOLTOOID]</string> + <string name="wiping">Wissen {1}</string> + <string name="repair_not_exist">{1} bestaat niet! Kan niet herstellen!</string> + <string name="repairing_using">{1} Herstellen met behulp van {2}...</string> + <string name="unable_repair">Niet in staat om {1} te herstellen.</string> + <string name="mount_data_footer">Kan /data niet koppelen en kan de crypto voettekst niet vinden.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Kan map \'{1}\' niet maken ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">Kan \'{1}\' niet koppelen ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">Kan \'{1}\' niet ontkoppelen ({2})</string> + <string name="cannot_resize">Kan het formaat van {1} niet wijzigen.</string> + <string name="repair_resize">Herstellen van {1} vóór het vergroten/verkleinen.</string> + <string name="unable_resize">Kan de grootte van {1} niet wijzigen.</string> + <string name="no_md5_found">Geen md5 bestand gevonden voor \'{1}\'. Gelieve MD5 controle inschakelen uitzetten om te herstellen.</string> + <string name="md5_fail_match">MD5 vergelijken mislukt op \'{1}\'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Het decoderen van tar bestand \'{1}\' is mislukt</string> + <string name="format_data_msg">U zou in recovery moeten herstarten om /data opnieuw te kunnen gebruiken.</string> + <string name="format_data_err">Kan niet formatteren om encryptie te verwijderen.</string> + <string name="formatting_using">{1} formatteren met behulp van {2}...</string> + <string name="unable_to_wipe">Kan niet wissen {1}.</string> + <string name="cannot_wipe">Partitie {1} kan niet gewist worden.</string> + <string name="remove_all">Alle bestanden onder \'{1}\' verwijderen</string> + <string name="wiping_data">Data wissen zonder het wissen van /data/media...</string> + <string name="backing_up">Back-up van {1}...</string> + <string name="backing">Bezig met back-up</string> + <string name="backup_size">Back-up grootte van \'{1}\' is 0 bytes.</string> + <string name="datamedia_fs_restore">Waarschuwing: Deze /data back-up is gemaakt met het {1} bestandssysteem! De back-up kan niet opstarten, tenzij u terug naar {1} gaat.</string> + <string name="restoring">Herstellen van {1}...</string> + <string name="restoring_hdr">Herstellen</string> + <string name="recreate_folder_err">Kan map {1} niet recreëren.</string> + <string name="img_size_err">Grootte van de image is groter dan het doelapparaat</string> + <string name="flashing">Flashen {1}...</string> + <string name="backup_folder_set">Back-up map ingesteld op \'{1}\'</string> + <string name="locate_backup_err">Kan de back-up niet vinden \'{1}\'</string> + <string name="set_restore_opt">Opties voor terugzetten instellen: \'{1}\':</string> + <string name="md5_check_skip">MD5 controle overslaan staat aan</string> + <string name="ors_encrypt_restore_err">Kan OpenRecoveryScript niet gebruiken om een versleutelde back-up te herstellen.</string> + <string name="mounting">Koppelen</string> + <string name="unmounting">Ontkoppelen</string> + <string name="mounted">Gekoppeld \'{1}\'</string> + <string name="unmounted">Ontkoppeld \'{1}\'</string> + <string name="setting">Instellen van \'{1}\' naar \'{2}\'</string> + <string name="setting_empty">Instellen van \'{1}\' naar leeg</string> + <string name="making_dir1">Map maken</string> + <string name="making_dir2">Map: \'{1}\' maken</string> + <string name="running_command">Commando uitvoeren</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">ADB sideload functie wordt gestart...</string> + <string name="need_new_adb">U moet adb 1.0.32 of nieuwer hebben om te sideloaden naar dit apparaat.</string> + <string name="no_pwd">Geen wachtwoord opgegeven.</string> + <string name="done_ors">Scriptbestand verwerking voltooid</string> + <string name="injecttwrp">Injecteren van TWRP in de boot image...</string> + <string name="zip_err">Fout bij het installeren van zip-bestand \'{1}\'</string> + <string name="installing_zip">Installeren van zip-bestand \'{1}\'</string> + <string name="select_backup_opt">Back-up opties instellen:</string> + <string name="compression_on">Compressie staat aan</string> + <string name="md5_off">MD5 Generatie is uitgeschakeld</string> + <string name="backup_fail">Back-up mislukt</string> + <string name="backup_clean">Back-up mislukt. Back-up map schoonmaken.</string> + <string name="running_recovery_commands">Herstel commando\'s uitvoeren</string> + <string name="recovery_commands_complete">Herstel commando\'s voltooien</string> + <string name="running_ors">OpenRecoveryScript is bezig</string> + <string name="ors_complete">OpenRecoveryScript is voltooid</string> + <string name="no_updater_binary">Kan \'{1}\' niet vinden in het zip-bestand.</string> + <string name="check_for_md5">Controle voor een MD5 bestand...</string> + <string name="fail_sysmap">Toewijzen van bestand \'{1}\' is mislukt</string> + <string name="verify_zip_sig">Zip handtekening controleren...</string> + <string name="verify_zip_fail">Zip handtekeningverificatie is mislukt!</string> + <string name="verify_zip_done">De handtekening van de zip met succes geverifieerd.</string> + <string name="zip_corrupt">Zip-bestand is beschadigd!</string> + <string name="no_md5">MD5 controle overslaan: geen MD5 bestand gevonden</string> + <string name="md5_fail">MD5 komt niet overeen</string> + <string name="md5_match">MD5 komt overeen</string> + <string name="pid_signal">{1} proces eindigde met signaal: {2}</string> + <string name="pid_error">{1} proces beëindigd met fout: {2}</string> + <string name="install_dumlock">HTC Dumlock installeren op het systeem...</string> + <string name="dumlock_restore">Originele boot herstellen...</string> + <string name="dumlock_reflash">Recovery herflashen op boot...</string> + <string name="run_script">Script {1} word uitgevoerd...</string> + <string name="rename_stock">Originele recovery bestand hernoemt in /system om te voorkomen dat de ROM TWRP vervangt.</string> + <string name="split_backup">Back-up bestand in meerdere archieven opbreken...</string> + <string name="backup_error">Fout bij het maken van backup.</string> + <string name="restore_error">Fout tijdens herstelproces.</string> + <string name="split_thread">Thread-ID {1} splitsen in archief {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu van %llu bestanden, %i%%</string> + <string name="size_progress">%lluMB van %lluMB, %i%%</string> + <string name="decrypt_cmd">Probeert de data-partitie te decoderen via de command line.</string> + <string name="base_pkg_err">Fout bij het laden van de basispakketten.</string> + <string name="simulating">Acties simuleren...</string> + <string name="backup_cancel">Back-up geannuleerd</string> + <string name="config_twrp">TWRP configureren...</string> + <string name="config_twrp_err">Kan TWRP niet configureren met deze kernel.</string> + <string name="copy_log">Herstel log gekopieerd naar {1}.</string> + <string name="max_queue">Maximale zip wachtrij bereikt!</string> + <string name="min_queue">Minimale zip wachtrij bereikt!</string> + <string name="screenshot_saved">Screenshot is opgeslagen in {1}</string> + <string name="screenshot_err">Screenshot nemen mislukt!</string> + <string name="zip_wipe_cache">Een of meer zips verzochten een cache verwijdering -- Cache nu verwijderen.</string> + <string name="and_sec_wipe_err">Kan android secure niet wissen</string> + <string name="dalvik_wipe_err">Dalvik legen mislukt</string> + <string name="auto_gen">(Automatisch genereren)</string> + <string name="curr_date">(Huidige datum)</string> + <string name="backup_name_len">Back-up naam is te lang.</string> + <string name="backup_name_invalid">Back-up naam \'{1}\' bevat een ongeldig teken: \'{1}\'</string> + <string name="no_real_sdcard">Dit apparaat beschikt niet over een echte SD kaart! Afbreken!</string> + <string name="cancel_sideload">ADB sideload annuleren...</string> + <string name="change_fs_err">Fout tijdens het veranderen van het bestandssysteem.</string> + <string name="theme_ver_err">Aangepaste thema versie komt niet overeen met TWRP versie. Stock thema gebruiken.</string> + <string name="up_a_level">(Niveau omhoog)</string> + <string name="install_reboot">Herstarten in 5 seconden</string> + </resources> +</language> diff --git a/gui/theme/common/languages/pl.xml b/gui/theme/common/languages/pl.xml new file mode 100644 index 000000000..7721421a4 --- /dev/null +++ b/gui/theme/common/languages/pl.xml @@ -0,0 +1,673 @@ +<?xml version="1.0"?> + +<language> + <display>Polish</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">Obraz Systemu</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Obraz Vendor</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="sdcard">Karta SD</string> + <string name="internal">Pamięć Wewnętrzna</string> + <string name="microsd">Karta MicroSD</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted Storage</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Projekt Team Win Recovery</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">Bateria: %tw_battery%</string> + <string name="sort_by_name">Sortuj wg nazwy</string> + <string name="sort_by_date">Sortuj wg daty</string> + <string name="sort_by_size">Sortuj wg rozmiaru</string> + <string name="sort_by_name_only">Nazwa</string> + <string name="sort_by_date_only">Data</string> + <string name="sort_by_size_only">Rozmiar</string> + <string name="tab_general">GŁÓWNE</string> + <string name="tab_options">OPCJE</string> + <string name="tab_backup">KOPIA ZAPASOWA</string> + <string name="tab_time_zone">STREFA CZASOWA</string> + <string name="tab_screen">EKRAN</string> + <string name="tab_vibration">WIBRACJE</string> + <string name="tab_language">JĘZYK</string> + + <string name="install_btn">Instaluj</string> + <string name="wipe_btn">Wyczyść</string> + <string name="backup_btn">Kopia</string> + <string name="restore_btn">Przywróć</string> + <string name="mount_btn">Zamontuj</string> + <string name="settings_btn">Ustawienia</string> + <string name="advanced_btn">Zaawansowane</string> + <string name="reboot_btn">Restart</string> + <string name="files_btn">Pliki</string> + <string name="copy_log_btn">Kopiuj Log</string> + <string name="select_type_hdr">Wybierz Typ</string> + <string name="install_zip_hdr">Instaluj Zip</string> + <string name="install_zip_btn">Instaluj Zip</string> + <string name="install_image_hdr">Instaluj Obraz</string> + <string name="install_image_btn">Instaluj Obraz</string> + <string name="install_select_file_hdr">Wybierz Plik</string> + <string name="file_selector_folders_hdr">Foldery</string> + <string name="select_file_from_storage">Wybierz plik z %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Instaluj</string> + <string name="select_storage_hdr">Wybierz Pamięć</string> + <string name="select_storage_btn">Wybierz Pamięć</string> + <string name="queue_hdr">Kolejka</string> + <string name="zip_queue_count">%tw_zip_queue_count% z max. 10 plików w kolejce</string> + <string name="zip_queue_count_s">Plik %tw_zip_queue_count% z 10:</string> + <string name="zip_warn1">Ta operacja może zainstalować niekompatybilne oprogramowanie</string> + <string name="zip_warn2">i uczynić urządzenie nie nadającym się do użytku.</string> + <string name="zip_back_cancel">Naciśnij wstecz, aby anulować dodawanie tego pliku.</string> + <string name="zip_back_clear">Naciśnij wstecz, aby wyczyścić kolejkę.</string> + <string name="folder">Folder:</string> + <string name="file">Plik:</string> + <string name="zip_sig_chk">Weryfikacja sygnatury pliku zip</string> + <string name="inject_twrp_chk">Zaszczep TWRP po instalacji</string> + <string name="install_reboot_chk">Uruchom ponownie po instalacji</string> + <string name="options_hdr">Opcje</string> + <string name="confirm_flash_hdr">Potwierdź instalację</string> + <string name="zip_queue">Kolejka:</string> + <string name="options">Opcje:</string> + <string name="swipe_confirm"> Potwierdź</string> + <string name="zip_add_btn">Dodaj więcej plików</string> + <string name="zip_clear_btn">Wyczyść kolejkę plików</string> + <string name="install_zip_count_hdr">Zainstaluj plik %tw_zip_index% z %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Instalowanie plików: %tw_file%</string> + <string name="failed">Niepowodzenie</string> + <string name="successful">Sukces</string> + <string name="install_failed">Instalacja nieudana</string> + <string name="install_successful">Instalacja zakończona pomyślnie</string> + <string name="wipe_cache_dalvik_btn">Wyczyść Cache/Dalvik</string> + <string name="reboot_system_btn">Uruchom System</string> + <string name="install_sel_target">Wybierz partycję docelową</string> + <string name="flash_image_select">Wybierz partycję do zainstalowania obrazu:</string> + <string name="target_partition">Partycja docelowa:</string> + <string name="flashing_image">Instalowanie obrazu...</string> + <string name="image_flashed">Obraz zainstalowany</string> + <string name="wipe_cache_dalvik_confirm">Wyczyścić Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Czyszczenie Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Czyszczenie Cache & Dalvik zakończone</string> + <string name="swipe_wipe">Przesuń, aby wyczyścić</string> + <string name="swipe_wipe_s"> Wyczyść</string> + <string name="no_os1">Brak zainstalowanego systemu! Jesteś</string> + <string name="no_osrb">pewien, że chcesz uruchomić urządzenie?</string> + <string name="no_ospo">pewien, że chcesz wyłączyć?</string> + <string name="rebooting">Restartowanie...</string> + <string name="swipe_reboot">Przesuń, aby zrestartować</string> + <string name="swipe_reboot_s"> Zrestartuj</string> + <string name="swipe_flash">Przesuń, aby zainstalować</string> + <string name="confirm_action">Potwierdź czynność</string> + <string name="back_cancel">Naciśnij wstecz, aby anulować.</string> + <string name="cancel_btn">Anuluj</string> + <string name="wipe_hdr">Wyczyść</string> + <string name="factory_reset_hdr">Przywrócenie ustawień fabrycznych</string> + <string name="factory_reset_btn">Przywrócenie ustawień fabrycznych</string> + <string name="factory_reset1">Czyści Data, Cache i Dalvik</string> + <string name="factory_reset2">(nie czyści pamięci wewnętrznej)</string> + <string name="factory_reset3">W większości przypadków jest to</string> + <string name="factory_reset4">jedyne czyszczenie jakiego potrzebujesz.</string> + <string name="factory_resetting">Przywracanie ustawień fabrycznych...</string> + <string name="advanced_wipe_hdr">Zaawansowane czyszczenie</string> + <string name="advanced_wipe_btn">Zaaw. czyszczenie</string> + <string name="wipe_enc_confirm">Usunąć szyfrowanie Data?</string> + <string name="formatting_data">Formatowanie Data...</string> + <string name="swipe_format_data">Przesuń, aby sformatować Data</string> + <string name="swipe_format_data_s"> Sformatuj Data</string> + <string name="factory_reset_complete">Przywracanie ustawień fabrycznych zakończone</string> + <string name="sel_part_hdr">Wybierz partycje</string> + <string name="wipe_sel_confirm">Sformatować wybrane partycje?</string> + <string name="wiping_part">Formatowanie partycji...</string> + <string name="wipe_complete">Formatowanie zakończone</string> + <string name="sel_part_wipe">Partycje do sformatowania:</string> + <string name="invalid_part_sel">Nieprawidłowy wybór partycji</string> + <string name="format_data_hdr">Formatuj Data</string> + <string name="format_data_btn">Formatuj Data</string> + <string name="format_data_ptr1">Formatowanie Data usunie wszystkie aplikacje,</string> + <string name="format_data_ptr2">kopie zapasowe, zdjęcia, filmy, media, oraz</string> + <string name="format_data_ptr3">szyfrowanie pamięci wewnętrznej.</string> + <string name="format_data_adopted">Łącznie z Adopted Storage</string> + <string name="format_data_lcp1">Formatowanie Data usunie wszystkie aplikacje, kopie zapasowe, zdjęcia, filmy, media, oraz</string> + <string name="format_data_lcp2">usuwa szyfrowanie pamięci wewnętrznej.</string> + <string name="format_data_wtc1">Format Data usunie wszystkie aplikacje,</string> + <string name="format_data_wtc2">kopie zapasowe i media. To nieodwracalne.</string> + <string name="format_data_undo">To nieodwracalne.</string> + <string name="format_data_complete">Formatowanie Data zakończone</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Wpisz "yes", by kontynuować. Naciśnij wstecz, aby anulować.</string> + <string name="part_opt_hdr">Opcje partycji dla: %tw_partition_name%</string> + <string name="sel_act_hdr">Wybierz działanie</string> + <string name="file_sys_opt">Opcje systemu plików</string> + <string name="partition">Partycja: %tw_partition_name%</string> + <string name="part_mount_point">Punkt montowania: %tw_partition_mount_point%</string> + <string name="part_curr_fs">System plików: %tw_partition_file_system%</string> + <string name="part_present_yes">Obecna: Tak</string> + <string name="part_present_no">Obecna: Nie</string> + <string name="part_removable_yes">Przenośna: Tak</string> + <string name="part_removable_no">Przenośna: Nie</string> + <string name="part_size">Rozmiar: %tw_partition_size%MB</string> + <string name="part_used">Użyte: %tw_partition_used%MB</string> + <string name="part_free">Wolne: %tw_partition_free%MB</string> + <string name="part_backup_size">Rozmiar kopii zapasowej: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Zmiana rozmiaru systemu plików</string> + <string name="resize_btn_s">Zmień rozmiar</string> + <string name="resize_confirm">Zmienić rozmiar %tw_partition_name%?</string> + <string name="resizing">Zmienianie rozmiaru...</string> + <string name="resize_complete">Zmienianie rozmiaru zakończone</string> + <string name="swipe_resize">Przesuń, aby zmienić rozmiar</string> + <string name="swipe_resize_s"> Zmień rozmiar</string> + <string name="repair_btn">Napraw system plików</string> + <string name="repair_btn_s">Napraw</string> + <string name="repair_confirm">Naprawić %tw_partition_name%?</string> + <string name="repairing">Naprawianie...</string> + <string name="repair_complete">Naprawianie zakończone</string> + <string name="swipe_repair">Przesuń, aby naprawić</string> + <string name="swipe_repair_s"> Napraw</string> + <string name="change_fs_btn">Zmień system plików</string> + <string name="change_fs_btn_s">Zmień</string> + <string name="change_fs_for_hdr">Zmień system plików na: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partycja: %tw_partition_name% > Wybierz system plików</string> + <string name="change_fs_warn1">Niektore ROMy i kernele mogą nie obsługiwac niektórych</string> + <string name="change_fs_warn2">systemów plików. Postępuj ostrożnie!</string> + <string name="change_fs_confirm">Zmienić %tw_partition_name%?</string> + <string name="formatting">Formatowanie...</string> + <string name="format_complete">Formatowanie zakończone</string> + <string name="swipe_change_fs">Przesuń, aby zmienić</string> + <string name="swipe_change_s"> Zmień</string> + <string name="back_btn">Wstecz</string> + <string name="wipe_enc_btn">Usuń szyfrowanie</string> + <string name="swipe_factory_reset">Przesuń, aby wykonać</string> + <string name="repair_change_btn">Napraw lub zmień system plików</string> + <string name="storage_hdr">Pamięć: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Kopia zapasowa</string> + <string name="backup_confirm_hdr">Potwierdź kopię zapasową</string> + <string name="encryption_tab">SZYFROWANIE</string> + <string name="encryption">Szyfrowanie:</string> + <string name="name">Nazwa:</string> + <string name="sel_part_backup">Wybierz partycje do skopiowania:</string> + <string name="storage">Pamięć:</string> + <string name="enc_disabled">wyłączone - ustaw hasło, aby włączyć</string> + <string name="enc_enabled">włączone</string> + <string name="enable_backup_comp_chk">Włącz kompresję</string> + <string name="skip_md5_backup_chk">Pomiń generowanie MD5 kopii zapasowej</string> + <string name="disable_backup_space_chk">Wyłącz sprawdzanie wolnego miejsca</string> + <string name="refresh_sizes_btn">Odśwież rozmiary</string> + <string name="swipe_backup">Przesuń, aby wykonać kopię</string> + <string name="append_date_btn">Dodaj datę</string> + <string name="backup_name_exists">Kopia zapasowa o takiej nazwie już istnieje!</string> + <string name="encrypt_backup">Zaszyfrować kopię zapasową?</string> + <string name="enter_pass">Wpisz hasło:</string> + <string name="enter_pass2">Wpisz hasło ponownie:</string> + <string name="pass_not_match">Hasła się nie zgadzają!</string> + <string name="partitions">Partycje:</string> + <string name="disabled">Wyłączone</string> + <string name="enabled">Włączone</string> + <string name="backup_name_hdr">Ustaw nazwę kopii zapasowej</string> + <string name="progress">Postęp:</string> + <string name="backup_complete">Kopia zapasowa wykonana</string> + <string name="restore_hdr">Przywróć</string> + <string name="sel_backup_hdr">Wybierz kopię zapasową</string> + <string name="restore_sel_store_hdr">Wybierz kopię zapasową z %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Wybierz zestaw do przywrócenia:</string> + <string name="restore_enc_backup_hdr">Szyfrowana kopia</string> + <string name="restore_dec_fail">Hasło nieprawidłowe, spróbuj ponownie!</string> + <string name="del_backup_btn">Usuń kopię zapasową</string> + <string name="del_backup_confirm">Usunąć kopię zapasową?</string> + <string name="del_backup_confirm2">To nieodwracalne!</string> + <string name="deleting_backup">Usuwanie kopii zapasowej...</string> + <string name="backup_deleted">Usuwanie kopii zapasowej zakończone</string> + <string name="swipe_delete">Przesuń, aby usunąć</string> + <string name="swipe_delete_s"> Usuń</string> + <string name="restore_try_decrypt">Kopia zapasowa zaszyfrowana - próbuję rozszyfrować</string> + <string name="restore_try_decrypt_s">Spróbuj rozszyfrować</string> + <string name="restore_backup_date">Kopia zapasowa utworzona %tw_restore_file_date%</string> + <string name="restore_sel_part">Wybierz partycje do przywrócenia:</string> + <string name="restore_enable_md5_chk">Włącz weryfikację MD5 kopii zapasowych</string> + <string name="restore_complete">Przywracanie zakończone</string> + <string name="swipe_restore">Przesuń, aby przywrócić</string> + <string name="swipe_restore_s"> Przywróć</string> + <string name="rename_backup_hdr">Zmień nazwę kopii zapasowej</string> + <string name="rename_backup_confirm">Zmienić nazwę kopii zapasowej?</string> + <string name="rename_backup_confirm2">To nieodwracalne!</string> + <string name="renaming_backup">Zmienianie nazwy kopii zapasowej...</string> + <string name="rename_backup_complete">Zmienianie nazwy kopii zapasowej zakończone</string> + <string name="swipe_to_rename">Przesuń, aby zmienić nazwę</string> + <string name="swipe_rename"> Zmień nazwę</string> + <string name="confirm_hdr">Potwierdź</string> + <string name="mount_hdr">Zamontuj</string> + <string name="mount_sel_part">Wybierz partycje do zamontowania:</string> + <string name="mount_sys_ro_chk">Zamontuj partycję systemową tylko do odczytu</string> + <string name="mount_sys_ro_s_chk">Zamontuj system tylko do odczytu</string> + <string name="decrypt_data_btn">Rozszyfruj Data</string> + <string name="disable_mtp_btn">Wyłącz MTP</string> + <string name="enable_mtp_btn">Włącz MTP</string> + <string name="mount_usb_storage_btn">Zamontuj pamięć USB</string> + <string name="usb_storage_hdr">Pamięć USB</string> + <string name="usb_stor_mnt1">Pamięć USB zamontowana</string> + <string name="usb_stor_mnt2">Pamiętaj, aby bezpiecznie usunąć urządzenie</string> + <string name="usb_stor_mnt3">z komputera przed odmontowaniem!</string> + <string name="unmount_btn">Odmontuj</string> + <string name="rb_system_btn">System</string> + <string name="rb_poweroff_btn">Wyłącz</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">Wyłączanie...</string> + <string name="swipe_power_off">Przesuń, aby wyłączyć</string> + <string name="swipe_power_off_s">Wyłącz</string> + <string name="sys_ro_hdr">Niezmodyfikowana partycja systemowa</string> + <string name="sys_ro_keep">Zachować system tylko do odczytu?</string> + <string name="sys_rop1">TWRP możę pozostawić system niezmodyfikowany,</string> + <string name="sys_rop2">aby ułatwić ci otrzymywanie oficjalnych aktualizacji.</string> + <string name="sys_rop3">TWRP nie może zapobiec przed podmianą recovery przez</string> + <string name="sys_rop4">oficjalny system i nie będzie oferowało rootowania urządzenia.</string> + <string name="sys_rop5">Instalowanie plików i operacje przez ADB mogą wciąż</string> + <string name="sys_rop6">modyfikować partycję systemową.</string> + <string name="sys_rol1">TWRP może pozostawić system niezmodyfikowany, aby ułatwić ci otrzymywanie oficjalnych aktualizacji.</string> + <string name="sys_rol2">TWRP nie może zapobiec przed podmianą recovery przez oficjalny system i nie będzie oferowało rootowania urządzenia.</string> + <string name="sys_rol3">Instalowanie plików i operacje przez ADB mogą wciąż modyfikować partycję systemową.</string> + <string name="sys_ro_never_show_chk">Nie pokazuj tego ekranu ponownie po uruchomieniu</string> + <string name="sys_ro_keep_ro_btn">Tylko do odczytu</string> + <string name="swipe_allow_mod">Przesuń, aby zmodyfikować</string> + <string name="swipe_allow_mod_s">Zezwól na modyfikacje</string> + <string name="settings_hdr">Ustawienia</string> + <string name="settings_gen_hdr">Główne</string> + <string name="settings_gen_s_hdr">Główne</string> + <string name="settings_gen_btn">Główne</string> + <string name="use_rmrf_chk">Używaj rm -rf zamiast formatowania</string> + <string name="use24clock_chk">Użyj 24-godzinnego zegara</string> + <string name="rev_navbar_chk">Odwrócony układ paska nawigacji</string> + <string name="simact_chk">Symuluj akcje do testowania motywów</string> + <string name="simfail_chk">Symuluj niepowodzenia do testów</string> + <string name="ctr_navbar_rdo">Wyśrodkuj przyciski paska nawigacji</string> + <string name="lft_navbar_rdo">Wyrównaj do lewej przyciski paska nawigacyji</string> + <string name="rht_navbar_rdo">Wyrównaj do prawej przyciski paska nawigacyji</string> + <string name="restore_defaults_btn">Przywróć domyślne</string> + <string name="settings_tz_btn">Strefa czasowa</string> + <string name="settings_screen_btn">Ekran</string> + <string name="settings_screen_bright_btn">Jasność ekranu</string> + <string name="settings_vibration_btn">Wibracje</string> + <string name="settings_language_btn">Język</string> + <string name="time_zone_hdr">Strefa czasowa</string> + <string name="sel_tz_list">Wybierz strefę czasową:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Wyspy Midway</string> + <string name="utcm10">(UTC -10) Hawaje</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Czas pacyficzny</string> + <string name="utcm7">(UTC -7) Czas górski</string> + <string name="utcm6">(UTC -6) Czas centralny</string> + <string name="utcm5">(UTC -5) Czas wschodni</string> + <string name="utcm4">(UTC -4) Czas atlantycki</string> + <string name="utcm3">(UTC -3) Brazylia, Buenos Aires</string> + <string name="utcm2">(UTC -2) Wybrzeże Atlantyku</string> + <string name="utcm1">(UTC -1) Azory, Przylądek Zielony</string> + <string name="utc0">(UTC 0) Londyn, Dublin, Lizbona</string> + <string name="utcp1">(UTC +1) Berlin, Bruksela, Paryż, Warszawa</string> + <string name="utcp2">(UTC +2) Ateny, Stambuł, Afryka Południowa</string> + <string name="utcp3">(UTC +3) Moskwa, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Zabi, Tbilisi, Maskat</string> + <string name="utcp5">(UTC +5) Jekaterynburg, Islamabad</string> + <string name="utcp6">(UTC +6) Ałmaty, Dhaka, Kolombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Dżakarta</string> + <string name="utcp8">(UTC +8) Pekin, Singapur, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokio, Seul, Jakuck</string> + <string name="utcp10">(UTC +10) Australia Wschodnia, Guam</string> + <string name="utcp11">(UTC +11) Władywostok, Wyspy Salomona</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fidżi</string> + <string name="sel_tz_offset">Wyrównianie czasu (najczęściej 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Brak</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Użyj czasu letniego (DST)</string> + <string name="curr_tz">Obecna strefa czasowa: %tw_time_zone%</string> + <string name="curr_tz_s">Obecna strefa czasowa:</string> + <string name="set_tz_btn">Ustaw strefę czasową</string> + <string name="settings_screen_hdr">Ekran</string> + <string name="settings_screen_timeout_hdr">Wygaszanie ekranu</string> + <string name="enable_timeout_chk">Włącz wygaszanie ekranu</string> + <string name="screen_to_slider">Wygaszanie ekranu w sekundach:</string> + <string name="screen_to_slider_s">Wygaszanie ekranu w sekundach (0=wyłączone): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Ustawienia wygaszania ekranu niedostępne</string> + <string name="screen_bright_slider">Jasność: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Ustawienia jasności ekranu niedostępne</string> + <string name="vibration_hdr">Wibracje</string> + <string name="button_vibration_hdr">Wibracje przycisków</string> + <string name="kb_vibration_hdr">Wibracje klawiatury</string> + <string name="act_vibration_hdr">Wibracje działań</string> + <string name="button_vibration">Wibracje przycisków:</string> + <string name="kb_vibration">Wibracje klawiatury:</string> + <string name="act_vibration">Wibracje działań:</string> + <string name="select_language">Wybierz język:</string> + <string name="sel_lang_btn">Wybierz język</string> + <string name="set_language_btn">Wybierz język</string> + <string name="advanced_hdr">Zaawansowane</string> + <string name="copy_log_confirm">Skopiować log na kartę SD?</string> + <string name="copying_log">Kopiowanie pliku log na kartę SD...</string> + <string name="copy_log_complete">Kopiowanie pliku log zakończone</string> + <string name="fix_context_btn">Uprawnienia</string> + <string name="part_sd_btn">Partycjonowanie</string> + <string name="part_sd_s_btn">Karta SD</string> + <string name="file_manager_btn">Menedżer Plików</string> + <string name="language_hdr">Język</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Odśwież Motyw</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Zaszczep TWRP</string> + <string name="inject_twrp_confirm">Ponownie zaszczepić TWRP?</string> + <string name="injecting_twrp">Szczepienie TWRP...</string> + <string name="inject_twrp_complete">Szczepienie TWRP zakończone</string> + <string name="swipe_to_confirm">Przesuń, aby potwierdzić</string> + <string name="part_sd_hdr">Partycjonowanie Karty SD</string> + <string name="invalid_partsd_sel">Musisz wybrać urządzenie przenośne</string> + <string name="part_sd_lose">Stracisz wszystkie pliki na Karcie SD!</string> + <string name="part_sd_undo">To nieodwracalne!</string> + <string name="part_sd_ext_sz">Rozmiar EXT:</string> + <string name="part_sd_swap_sz">Rozmiar Swap:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">System plików:</string> + <string name="swipe_part_sd">Przesuń, aby partycjonować</string> + <string name="swipe_part_sd_s">Partycjonuj</string> + <string name="partitioning_sd">Partycjonowanie Karty SD...</string> + <string name="partitioning_sd2">To potrwa parę minut.</string> + <string name="part_sd_complete">Partycjonowanie zakończone</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Przywróć oryginalny Boot</string> + <string name="dumlock_restore_confirm">Przywrócić oryginalny obraz Boot?</string> + <string name="dumlock_restoring">Przywracanie oryginalnego obrazu Boot...</string> + <string name="dumlock_restore_complete">Przywracanie oryginalnego obrazu Boot zakończone</string> + <string name="dumlock_reflash_btn">Reinstaluj Recovery</string> + <string name="dumlock_reflash_confirm">Instalować recovery do boot?</string> + <string name="dumlock_reflashing">Instalowanie recovery do boot...</string> + <string name="dumlock_reflash_complete">Instalowanie recovery do boot zakończone</string> + <string name="dumlock_install_btn">Instaluj HTC Dumlock</string> + <string name="dumlock_install_confirm">Instalować pliki HTC Dumlock do ROMu?</string> + <string name="dumlock_installing">Instalowanie HTC Dumlock...</string> + <string name="dumlock_install_complete">Instalowanie HTC Dumlock zakończone</string> + <string name="swipe_to_unlock">Przesuń, aby odblokować</string> + <string name="swipe_unlock"> Odblokuj</string> + <string name="fm_hdr">Menedżer Plików</string> + <string name="fm_sel_file">Wybierz plik lub folder</string> + <string name="fm_type_folder">Folder</string> + <string name="fm_type_file">Plik</string> + <string name="fm_choose_act">Wybierz działanie</string> + <string name="fm_selected">%tw_fm_type% wybrane:</string> + <string name="fm_copy_btn">Kopiuj</string> + <string name="fm_copy_file_btn">Kopiuj plik</string> + <string name="fm_copy_folder_btn">Kopiuj folder</string> + <string name="fm_copying">Kopiowanie</string> + <string name="fm_move_btn">Przenieś</string> + <string name="fm_moving">Przenoszenie</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Usuń</string> + <string name="fm_deleting">Usuwanie</string> + <string name="fm_rename_btn">Zmień nazwę</string> + <string name="fm_rename_file_btn">Zmień nazwę pliku</string> + <string name="fm_rename_folder_btn">Zmień nazwę folderu</string> + <string name="fm_renaming">Zmienianie nazwy</string> + <string name="fm_sel_dest">Wybierz folder docelowy</string> + <string name="fm_sel_curr_folder">Wybierz bierzący folder</string> + <string name="fm_rename_hdr">Zmień nazwę</string> + <string name="fm_set_perms_hdr">Ustaw uprawnienia</string> + <string name="fm_perms">Uprawnienia:</string> + <string name="fm_complete">Działanie na plikach zakończone</string> + <string name="decrypt_data_hdr">Deszyfrowanie danych</string> + <string name="decrypt_data_enter_pass">Wprowadź hasło.</string> + <string name="decrypt_data_failed">Hasło nieprawidłowe, spróbuj ponownie!</string> + <string name="decrypt_data_failed_pattern">Wzór nieprawidłowy, spróbuj ponownie!</string> + <string name="decrypt_data_enter_pattern">Wprowadź wzór.</string> + <string name="decrypt_data_trying">Próbuję rozszyfrować</string> + <string name="term_hdr">Polecenia Terminala</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">ZABIJ</string> + <string name="term_sel_folder_hdr">Przejdź do folderu startowego</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Wyczyść Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Wyczyść Cache</string> + <string name="swipe_to_sideload">Przesuń, aby włączyć Sideload</string> + <string name="swipe_sideload"> Włącz</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Użycie: adb sideload nazwapliku.zip</string> + <string name="sideload_complete">ADB Sideload zakończone</string> + <string name="fix_contexts_hdr">Naprawa uprawnień</string> + <string name="fix_contexts_note1">Uwaga: Naprawa uprawnień jest rzadko potrzebna.</string> + <string name="fix_contexts_note2">Naprawa uprawnień SELinux może spowodować</string> + <string name="fix_contexts_note3">problemy z włączeniem urządzenia.</string> + <string name="swipe_to_fix_contexts">Przesuń, aby naprawić</string> + <string name="swipe_fix_contexts"> Napraw uprawnienia</string> + <string name="fixing_contexts">Naprawianie uprawnień...</string> + <string name="fix_contexts_complete">Naprawianie uprawnień zakończone</string> + <string name="reboot_hdr">Restart</string> + <string name="su_hdr">Sprawdzanie SuperSU</string> + <string name="su_note1">Twoje urządzenie nie jest zrootowane.</string> + <string name="su_note2">Zainstalować SuperSU teraz?</string> + <string name="su_note3">To zrootuje twoje urządzenie.</string> + <string name="su_cancel">Nie instaluj</string> + <string name="swipe_su_to_install">Przesuń, aby zainstalować</string> + <string name="swipe_su_install"> Instaluj</string> + <string name="su_installing">Instalowanie SuperSU</string> + <string name="sel_storage_list">Wybierz pamięć</string> + <string name="ok_btn">OK</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Kernel nie posiada obsługi odczytu uprawnień SELinux.</string> + <string name="full_selinux">Pełna obsługa SELinux jest dostępna.</string> + <string name="no_selinux">Brak obsługi SELinux (brak libselinux).</string> + <string name="mtp_enabled">MTP Włączone</string> + <string name="mtp_crash">MTP uległo awarii, wyłączczam MTP przy starcie.</string> + <string name="decrypt_success">Pomyślnie rozszyfrowano z domyślnym hasłem.</string> + <string name="unable_to_decrypt">Nie można odszyfrować z domyślnym hasłem. Może trzeba będzie wykonać Format Data.</string> + <string name="generating_md51">Generowanie MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * Generowanie md5...</string> + <string name="md5_created"> * MD5 utworzone.</string> + <string name="md5_error"> * Błąd MD5!</string> + <string name="md5_compute_error"> * Błąd przetwarzania MD5.</string> + <string name="current_date">(Obecna data)</string> + <string name="auto_generate">(Generuj automatycznie)</string> + <string name="unable_to_locate_partition">Nie można zlokalizować partycji '{1}' do obliczenia kopii zapasowej.</string> + <string name="no_partition_selected">Nie wybrano partycji do utworzenia kopii zapasowych.</string> + <string name="total_partitions_backup"> * Łączna liczba partycji do tworzenia kopii zapasowych: {1}</string> + <string name="total_backup_size"> * Łączna wielkość wszystkich danych: {1}MB</string> + <string name="available_space"> * Dostępne miejsce: {1}MB</string> + <string name="unable_locate_storage">Nie można zlokalizować urządzenia magazynującego.</string> + <string name="no_space">Zbyt mało wolnego miejsca w pamięci urządzenia.</string> + <string name="backup_started">[KOPIA ROZPOCZĘTA]</string> + <string name="backup_folder"> * Folder kopii zapasowej: {1}</string> + <string name="fail_backup_folder">Nie udało się utworzyć folderu kopii zapasowej.</string> + <string name="avg_backup_fs">Średnie tempo tworzenia kopii zapasowych systemu plików: {1} MB/sek</string> + <string name="avg_backup_img">Średnie tempo tworzenia kopii zapasowych obrazu dysku: {1} MB/sek</string> + <string name="total_backed_size">[UTWORZONO KOPIĘ {1} MB]</string> + <string name="backup_completed">[KOPIA ZAKOŃCZONA W {1} SEKUND]</string> + <string name="restore_started">[PRZYWRACANIE ROZPOCZĘTE]</string> + <string name="restore_folder">Folder przywracania: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} zakończono ({2} sekund)]</string> + <string name="verifying_md5">Weryfikowanie MD5</string> + <string name="skip_md5">Pomijanie sprawdzania MD5 włączone przez użytkownika.</string> + <string name="calc_restore">Obliczanie danych przywracania...</string> + <string name="restore_read_only">Nie można przywrócić {1} -- zamontowane tylko do odczytu.</string> + <string name="restore_unable_locate">Nie można zlokalizować partycji '{1}' do przywrócenia.</string> + <string name="no_part_restore">Nie wybrano partycji do przywrócenia.</string> + <string name="restore_part_count">Przywracanie {1} partycji...</string> + <string name="total_restore_size">Całkowity rozmiar przywracania {1}MB</string> + <string name="updating_system_details">Aktualizowanie szczegółów systemu</string> + <string name="restore_completed">[PRZYWRACANIE ZAKOŃCZONE W {1} SEKUND]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Błąd otwierania: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Nie można zlokalizować partycji wg nazwy kopii zapasowej: '{1}'</string> + <string name="unable_find_part_path">Nie można zlokalizować partycji dla ścieżki '{1}'</string> + <string name="update_part_details">Aktualizowanie szczegółów partycji...</string> + <string name="update_part_details_done">...ukończono</string> + <string name="wiping_dalvik">Czyszczenie katalogów Dalvik Cache...</string> + <string name="cleaned">Wyczyszczono: {1}...</string> + <string name="dalvik_done">-- Czyszczenie Dalvik Cache zakończone!</string> + <string name="no_andsec">Nie znaleziono partycji android_secure.</string> + <string name="unable_to_locate">Nie można zlokalizować {1}.</string> + <string name="wiping_datamedia">Czyszczenie Pamięci Wewnętrznej -- /data/media...</string> + <string name="unable_to_mount">Nie można zamontować {1}</string> + <string name="unable_to_mount_internal">Nie można zamontować pamięci wewnętrznej</string> + <string name="unable_to_mount_storage">Nie można zamontować pamięci</string> + <string name="fail_decrypt">Niepowodzenie rozszyfrowywania danych.</string> + <string name="no_crypto_support">Brak obsługi crypto w tej kompilacji.</string> + <string name="decrypt_success_dev">Dane pomyślnie rozszyfrowane, nowe urządzenie blokowe: '{1}'</string> + <string name="done">Ukończono.</string> + <string name="start_partition_sd">Partycjonowanie Karty SD...</string> + <string name="partition_sd_locate">Nie można zlokalizować urządzenia do partycjonowania.</string> + <string name="ext_swap_size">Rozmiar EXT + Swap jest większy niż rozmiar Karty SD.</string> + <string name="remove_part_table">Usuwanie tablicy partycji...</string> + <string name="unable_rm_part">Unable to remove partition table.</string> + <string name="create_part">Tworzenie {1} partycji...</string> + <string name="unable_to_create_part">Nie można utworzyć {1} partycji.</string> + <string name="format_sdext_as">Formatowanie SD-EXT jako {1}...</string> + <string name="part_complete">Partycjonowanie zakończone.</string> + <string name="unable_to_open">Nie można otworzyć '{1}'.</string> + <string name="mtp_already_enabled">MTP jest już włączone</string> + <string name="mtp_fail">Nie udało się włączyć MTP</string> + <string name="no_mtp">Wsparcie MTP nieuwzględnione</string> + <string name="image_flash_start">[FLASHOWANIE OBRAZU ROZPOCZĘTE]</string> + <string name="img_to_flash">Obraz do flashowania: '{1}'</string> + <string name="flash_unable_locate">Nie można zlokalizować partycji '{1}' do flashowania.</string> + <string name="no_part_flash">Nie wybrano partycji do flashowania.</string> + <string name="too_many_flash">Zbyt wiele partycji wybranych do flashowania.</string> + <string name="invalid_flash">Wybrano nieprawidłową partycję do flashowania.</string> + <string name="flash_done">[FLASHOWANIE OBRAZU ZAKOŃCZONE]</string> + <string name="wiping">Czyszczenie {1}</string> + <string name="repair_not_exist">{1} nie istnieje! Nie można naprawić!</string> + <string name="repairing_using">Naprawianie {1} przy użyciu {2}...</string> + <string name="unable_repair">Nie udało się naprawić {1}.</string> + <string name="mount_data_footer">Nie można zamontować /data i odnaleźć stopki crypto.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Nie można utworzyć folderu '{1}' {2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">Nie można zamontować '{1}' ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">Nie można odmontować '{1}' ({2})</string> + <string name="cannot_resize">Nie można zmienić rozmiaru {1}.</string> + <string name="repair_resize">Naprawianie {1} przed zmianą rozmiaru.</string> + <string name="unable_resize">Nie można zmienić rozmiaru {1}.</string> + <string name="no_md5_found">Nie znaleziono pliku MD5 '{1}'. Proszę wyłączyć weryfikację MD5, aby przywrócić.</string> + <string name="md5_fail_match">MD5 nie pasuje do '{1}'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Nie udało się odszyfrować pliku tar '{1}'</string> + <string name="format_data_msg">Może być konieczne ponowne uruchomienie recovery, aby móc ponownie użyć /date.</string> + <string name="format_data_err">Nie można sformatować, aby usunąć szyfrowanie.</string> + <string name="formatting_using">Formatowanie {1} przy użyciu {2}...</string> + <string name="unable_to_wipe">Nie można wyczyścić {1}.</string> + <string name="cannot_wipe">Partycja {1} nie może zostać wyczyszczona.</string> + <string name="remove_all">Usuwanie wszystkich plików w '{1}'</string> + <string name="wiping_data">Czyszczenie Data bez /data/media ...</string> + <string name="backing_up">Tworzenie kopii zapasowej {1}...</string> + <string name="backing">Tworzenie kopii zapasowej</string> + <string name="backup_size">Rozmiar kopii zapasowej '{1}' to 0 bajtów.</string> + <string name="datamedia_fs_restore">UWAGA: Ta kopia /data została wykonana w sytemie plików {1}! Kopia może się nie uruchomić jeśli nie wrócisz do {1}.</string> + <string name="restoring">Przywracanie {1}...</string> + <string name="restoring_hdr">Przywracanie</string> + <string name="recreate_folder_err">Nie można odtworzyć {1} folderu.</string> + <string name="img_size_err">Rozmiar obrazu jest większy niż urządzenia docelowego</string> + <string name="flashing">Instalowanie {1}...</string> + <string name="backup_folder_set">'{1}' ustawiony jako folder kopii zapasowych</string> + <string name="locate_backup_err">Nie udało się zlokalizować kopii '{1}'</string> + <string name="set_restore_opt">Ustawienia przywracania: '{1}':</string> + <string name="md5_check_skip">Sprawdzanie MD5 jest włączone</string> + <string name="ors_encrypt_restore_err">Nie można użyć OpenRecoveryScript do przywrócenia zaszyfrowanej kopii zapasowej.</string> + <string name="mounting">Montowanie</string> + <string name="unmounting">Odmontowywanie</string> + <string name="mounted">Zamontowano '{1}'</string> + <string name="unmounted">Odmontowano '{1}'</string> + <string name="setting">Ustawianie '{1}' do '{2}'</string> + <string name="setting_empty">Ustawianie '{1}' jako pusty</string> + <string name="making_dir1">Tworzenie Folderu</string> + <string name="making_dir2">Tworzenie folderu: '{1}'</string> + <string name="running_command">Uruchamianie poleceń</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Uruchomiono funkcję ADB Sideload...</string> + <string name="need_new_adb">Wymagane ADB 1.0.32 lub nowsze, aby użyć sideload na tym urządzeniu.</string> + <string name="no_pwd">Hasło nie zostało podane.</string> + <string name="done_ors">Zakończono przetwarzanie skryptu</string> + <string name="injecttwrp">Zaszczepianie TWRP w obrazie boot...</string> + <string name="zip_err">Błąd instalowania pliku zip '{1}'</string> + <string name="installing_zip">Instalowanie pliku zip '{1}'</string> + <string name="select_backup_opt">Ustawienia kopii zapasowych:</string> + <string name="compression_on">Kompresja jest włączona</string> + <string name="md5_off">Generowanie MD5 jest wyłączone</string> + <string name="backup_fail">Niepowodzenie wykonywania kopii zapasowej</string> + <string name="backup_clean">Niepowodzenie wykonywania kopii zapasowej. Oczyszczanie folderu kopii zapasowej.</string> + <string name="running_recovery_commands">Wykonywanie komend trybu odzyskiwania</string> + <string name="recovery_commands_complete">Ukończono komendy trybu odzyskiwania</string> + <string name="running_ors">Wykonywanie Skryptu OpenRecovery</string> + <string name="ors_complete">Ukończono Skrypt OpenRecovery</string> + <string name="no_updater_binary">Nie można znaleźć '{1}' w pliku zip.</string> + <string name="check_for_md5">Sprawdzanie pliku MD5...</string> + <string name="fail_sysmap">Nieudane mapowanie pliku '{1}'</string> + <string name="verify_zip_sig">Weryfikowanie sygnatury pliku zip...</string> + <string name="verify_zip_fail">Niewłaściwa sygnatura pliku zip!</string> + <string name="verify_zip_done">Sygnatura pliku zip zweryfikowana pomyślnie.</string> + <string name="zip_corrupt">Plik zip uszkodzony!</string> + <string name="no_md5">Pomijanie sprawdzania MD5: brak pliku MD5</string> + <string name="md5_fail">MD5 niezgodne</string> + <string name="md5_match">MD5 zgodne</string> + <string name="pid_signal">Proces {1} zakończony z sygnałem: {2}</string> + <string name="pid_error">Proces {1} zakończony z błędem: {2}</string> + <string name="install_dumlock">Instalowanie HTC Dumlock do systemu...</string> + <string name="dumlock_restore">Przywracanie oryginalnego obrazu boot...</string> + <string name="dumlock_reflash">Reinstalowanie recovery do boot...</string> + <string name="run_script">Uruchomiono skrypt {1}...</string> + <string name="rename_stock">Zmieniono nazwę stock recovery w /system w celu uniknięcia podmiany TWRP przez stock ROM.</string> + <string name="split_backup">Dzielenie pliku kopii zapasowej na wiele plików...</string> + <string name="backup_error">Błąd podczas tworzenia kopii zapasowej.</string> + <string name="restore_error">Błąd podczas procesu przywracania.</string> + <string name="split_thread">Dzielenie {1} na {2} archiwa</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu z %llu plików, %i%%</string> + <string name="size_progress">%lluMB z %lluMB, %i%%</string> + <string name="decrypt_cmd">Próba odszyfrowania partycji danych poprzez linię poleceń.</string> + <string name="base_pkg_err">Nie udało się załadować pakietów podstawowych.</string> + <string name="simulating">Symulowanie działań...</string> + <string name="backup_cancel">Anulowano wykonywanie kopii zapasowej</string> + <string name="config_twrp">Konfigurowanie TWRP...</string> + <string name="config_twrp_err">Nie można skonfigurować TWRP z tym kernelem.</string> + <string name="copy_log">Skopiowano log recovery do {1}.</string> + <string name="max_queue">Maksymalna kolejka plików osiągnięta!</string> + <string name="min_queue">Minimalna kolejka plików osiągnięta!</string> + <string name="screenshot_saved">Zrzut ekranu zapisany do {1}</string> + <string name="screenshot_err">Niepowodzenie wykonywania zrzutu ekranu!</string> + <string name="zip_wipe_cache">Jeden lub więcej plików wymaga czyszczenia Cache -- Czyszczę Cache.</string> + <string name="and_sec_wipe_err">Nie można wyczyścić android secure</string> + <string name="dalvik_wipe_err">Błąd czyszczenia Dalvik</string> + <string name="auto_gen">(Generuj automatycznie)</string> + <string name="curr_date">(Aktualna data)</string> + <string name="backup_name_len">Nazwa kopii zapasowej jest zbyt długa.</string> + <string name="backup_name_invalid">Nazwa kopii zapasowej '{1}' zawiera niedozwolony znak: '{1}'</string> + <string name="no_real_sdcard">To urządzenie nie ma karty SD! Przerywanie...</string> + <string name="cancel_sideload">Anulowanie ADB sideload...</string> + <string name="change_fs_err">Niepowodzenie zmiany systemu plików.</string> + <string name="theme_ver_err">Wersja niestandardowego motywu nie zgadza się z wersją TWRP. Użyto domyślnego motywu.</string> + <string name="up_a_level">(Cofnij)</string> + <string name="install_reboot">Ponowne uruchomienie za 5 sekund</string> + </resources> +</language>
\ No newline at end of file diff --git a/gui/theme/common/languages/pt_BR.xml b/gui/theme/common/languages/pt_BR.xml new file mode 100644 index 000000000..f747631cb --- /dev/null +++ b/gui/theme/common/languages/pt_BR.xml @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Portuguese (Brazilian)</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">Sistema</string> + <string name="system_image">Imagem do sistema</string> + <string name="vendor">Fornecedor</string> + <string name="vendor_image">Imagem do fornecedor</string> + <string name="boot">Inicio</string> + <string name="recovery">Recuperação</string> + <string name="cache">Cache</string> + <string name="data">Dados</string> + <string name="sdcard">SDCard</string> + <string name="internal">Armazenamento interno</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Seguro</string> + <string name="dalvik">Dalvik / Cache de arte</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Dados adotados</string> + <string name="adopted_storage">Armazenamento adotado</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% ° C</string> + <string name="battery_pct">Bateria: %tw_battery%</string> + <string name="sort_by_name">Ordenar por nome</string> + <string name="sort_by_date">Ordenar por data</string> + <string name="sort_by_size">Ordenar por tamanho</string> + <string name="sort_by_name_only">Nome</string> + <string name="sort_by_date_only">Data</string> + <string name="sort_by_size_only">Tamanho</string> + <string name="tab_general">GERAL</string> + <string name="tab_options">OPÇÕES</string> + <string name="tab_backup">CÓPIA DE SEGURANÇA</string> + <string name="tab_time_zone">FUSO HORÁRIO</string> + <string name="tab_screen">TELA</string> + <string name="tab_vibration">VIBRAÇÃO</string> + <string name="tab_language">LÍNGUA</string> + <string name="install_btn">Instalar</string> + <string name="wipe_btn">Apagar a memória</string> + <string name="backup_btn">Cópia de segurança</string> + <string name="restore_btn">Restaurar</string> + <string name="mount_btn">Monte</string> + <string name="settings_btn">Configurações</string> + <string name="advanced_btn">Avançado</string> + <string name="reboot_btn">Reiniciar</string> + <string name="files_btn">Arquivos</string> + <string name="copy_log_btn">Log da cópia</string> + <string name="select_type_hdr">Selecione o tipo</string> + <string name="install_zip_hdr">Instalar o Zip</string> + <string name="install_zip_btn">Instalar o Zip</string> + <string name="install_image_hdr">Imagem de instalação</string> + <string name="install_image_btn">Imagem de instalação</string> + <string name="install_select_file_hdr">Selecione o arquivo</string> + <string name="file_selector_folders_hdr">Pastas</string> + <string name="select_file_from_storage">Selecione o arquivo de %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Instalar</string> + <string name="select_storage_hdr">Selecionar armazenamento</string> + <string name="select_storage_btn">Selecionar armazenamento</string> + <string name="queue_hdr">Lista</string> + <string name="zip_queue_count">%tw_zip_queue_count% de máximo de 10 arquivos na fila</string> + <string name="zip_queue_count_s">Arquivo %tw_zip_queue_count% de 10:</string> + <string name="zip_warn1">Esta operação pode instalar incompatível</string> + <string name="zip_warn2">software e tornar seu aparelho inutilizável.</string> + <string name="zip_back_cancel">Pressione para cancelar a adicionar este postal.</string> + <string name="zip_back_clear">Pressione o botão voltar para limpar a fila.</string> + <string name="folder">Pasta:</string> + <string name="file">Arquivo:</string> + <string name="zip_sig_chk">Verificação de assinatura do arquivo zipado</string> + <string name="inject_twrp_chk">Injetar TWRP após a instalação</string> + <string name="options_hdr">Opções</string> + <string name="confirm_flash_hdr">Confirmar o Flash</string> + <string name="zip_queue">Lista:</string> + <string name="options">Opcões:</string> + <string name="swipe_confirm"> Confirmar</string> + <string name="zip_add_btn">Adicionar mais Zips</string> + <string name="zip_clear_btn">Limpar fila de Zip</string> + <string name="install_zip_count_hdr">Instalar o Zip %tw_zip_index% de %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Instalar o Zip: %tw_file%</string> + <string name="failed">Falhou</string> + <string name="successful">Sucesso</string> + <string name="install_failed">Instalação falhou</string> + <string name="install_successful">Instalação bem sucedida</string> + <string name="wipe_cache_dalvik_btn">Limpe o cache/dalvik</string> + <string name="reboot_system_btn">Reiniciar o sistema</string> + <string name="install_sel_target">Selecione a partição de destino</string> + <string name="flash_image_select">Selecione a partição para Flash imagem:</string> + <string name="target_partition">Partição de destino:</string> + <string name="flashing_image">Piscando a imagem...</string> + <string name="image_flashed">Um flash de imagem</string> + <string name="wipe_cache_dalvik_confirm">Limpe o Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Limpando o Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Cache de & Dalvik limpar completas</string> + <string name="swipe_wipe">Deslize para limpar</string> + <string name="swipe_wipe_s"> Limpe</string> + <string name="no_os1">Sem OS instalado! Você é</string> + <string name="no_osrb">tem certeza que deseja reiniciar?</string> + <string name="no_ospo">claro que gostaria de poder fora?</string> + <string name="rebooting">Reiniciando...</string> + <string name="swipe_reboot">Deslize para reiniciar</string> + <string name="swipe_reboot_s"> Reiniciar</string> + <string name="swipe_flash">Deslize para confirmar Flash</string> + <string name="confirm_action">Confirmar a ação</string> + <string name="back_cancel">Pressione o botão voltar para cancelar.</string> + <string name="cancel_btn">Cancelar</string> + <string name="wipe_hdr">Apagar a memória</string> + <string name="factory_reset_hdr">Reset de fábrica</string> + <string name="factory_reset_btn">Reset de fábrica</string> + <string name="factory_reset1">Apaga dados, Cache e Dalvik</string> + <string name="factory_reset2">(não incluindo armazenamento interno)</string> + <string name="factory_reset3">Na maioria das vezes isto é</string> + <string name="factory_reset4">a única limpeza que você precisa.</string> + <string name="factory_resetting">Reset de fábrica...</string> + <string name="advanced_wipe_hdr">Limpeza avançada</string> + <string name="advanced_wipe_btn">Limpeza avançada</string> + <string name="wipe_enc_confirm">Limpe a criptografia de dados?</string> + <string name="formatting_data">Formatação de dados...</string> + <string name="swipe_format_data">Deslize para formatar dados</string> + <string name="swipe_format_data_s"> Formato de dados</string> + <string name="factory_reset_complete">Reset de fábrica completa</string> + <string name="sel_part_hdr">Selecione as partições</string> + <string name="wipe_sel_confirm">Limpar partição (s) selecionada (s)?</string> + <string name="wiping_part">Limpar partição (s)...</string> + <string name="wipe_complete">Limpeza completa</string> + <string name="sel_part_wipe">Selecione as partições para limpeza:</string> + <string name="invalid_part_sel">Seleção de partição inválida</string> + <string name="format_data_hdr">Formatação de dados</string> + <string name="format_data_btn">Formatação de dados</string> + <string name="format_data_ptr1">Formatar dados limpará todos seus aplicativos</string> + <string name="format_data_ptr2">os backups, mídia, fotos, vídeos e</string> + <string name="format_data_ptr3">remove a criptografia no armazenamento interno.</string> + <string name="format_data_adopted">Incluindo o armazenamento adotado</string> + <string name="format_data_lcp1">Formatar dados limpará todos seus apps, backups, fotos, vídeos, mídia, e</string> + <string name="format_data_lcp2">remove a criptografia no armazenamento interno.</string> + <string name="format_data_wtc1">Formatar dados limpará todos seus aplicativos,</string> + <string name="format_data_wtc2">cópia de segurança e mídia. Isto não pode ser desfeito.</string> + <string name="format_data_undo">Isto não pode ser desfeito.</string> + <string name="format_data_complete">Formatação de dados completa</string> + <string name="yes_continue">Digite Sim para continuar. Pressione para cancelar.</string> + <string name="part_opt_hdr">Partição de opções para: %tw_partition_name%</string> + <string name="sel_act_hdr">Selecionar Ação</string> + <string name="file_sys_opt">Opções de sistema de arquivo</string> + <string name="partition">Partição: %tw_partition_name%</string> + <string name="part_mount_point">Ponto de montagem: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Sistema de arquivos: %tw_partition_file_system%</string> + <string name="part_present_yes">Presente: Sim</string> + <string name="part_present_no">Presente: não</string> + <string name="part_removable_yes">Removível: Sim</string> + <string name="part_removable_no">Removível: não</string> + <string name="part_size">Tamanho: % tw_partition_size % MB</string> + <string name="part_used">Usado: % tw_partition_used % MB</string> + <string name="part_free">Livre: % tw_partition_free % MB</string> + <string name="part_backup_size">Tamanho do backup: % tw_partition_backup_size % MB</string> + <string name="resize_btn">Redimensionar o sistema de arquivos</string> + <string name="resize_btn_s">Redimensionar</string> + <string name="resize_confirm">Redimensionar o %tw_partition_name%?</string> + <string name="resizing">Redimensionamento...</string> + <string name="resize_complete">Redimensionamento completo</string> + <string name="swipe_resize">Deslize para redimensionar</string> + <string name="swipe_resize_s"> Redimensionar</string> + <string name="repair_btn">Reparação de sistema de arquivos</string> + <string name="repair_btn_s">Reparar</string> + <string name="repair_confirm">%tw_partition_name% de reparação?</string> + <string name="repairing">Reparando...</string> + <string name="repair_complete">Reparo completo</string> + <string name="swipe_repair">Deslize para reparar</string> + <string name="swipe_repair_s"> Reparação</string> + <string name="change_fs_btn">Mudança de sistema de arquivos</string> + <string name="change_fs_btn_s">Modificar</string> + <string name="change_fs_for_hdr">Alterar o sistema de arquivos para: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Partição: %tw_partition_name% > selecione sistema de arquivos</string> + <string name="change_fs_warn1">Algumas ROMs ou kernel pode não oferecer suporte a alguns</string> + <string name="change_fs_warn2">sistemas de arquivos. Proceda com cautela!</string> + <string name="change_fs_confirm">Mudar %tw_partition_name%?</string> + <string name="formatting">Formatação...</string> + <string name="format_complete">Formatação completa</string> + <string name="swipe_change_fs">Deslize para a mudança</string> + <string name="swipe_change_s"> Mudança</string> + <string name="back_btn">Retornar</string> + <string name="wipe_enc_btn">Limpe a criptografia</string> + <string name="swipe_factory_reset">Deslize para o Reset de fábrica</string> + <string name="repair_change_btn">Reparação ou mudança de sistema de arquivos</string> + <string name="storage_hdr">Armazenamento: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Cópia de segurança</string> + <string name="backup_confirm_hdr">Confirmar a Cópia de Segurança</string> + <string name="encryption_tab">CRIPTOGRAFIA</string> + <string name="encryption">Criptografia:</string> + <string name="name">Nome:</string> + <string name="sel_part_backup">Selecione as partições de Cópia de Segurança:</string> + <string name="storage">Armazenamento:</string> + <string name="enc_disabled">desativado - definir uma senha para habilitar</string> + <string name="enc_enabled">ativado</string> + <string name="enable_backup_comp_chk">Habilitar a compactação</string> + <string name="skip_md5_backup_chk">Geração de Skip MD5 durante a cópia de segurança</string> + <string name="disable_backup_space_chk">Desativar a verificação de espaço livre</string> + <string name="refresh_sizes_btn">Atualizar os tamanhos</string> + <string name="swipe_backup">Deslize para a Cópia de Segurança</string> + <string name="append_date_btn">Acrescentar a data</string> + <string name="backup_name_exists">Uma Cópia de Segurança com esse nome já existe!</string> + <string name="encrypt_backup">Criptografar sua cópia de segurança?</string> + <string name="enter_pass">Digite a senha:</string> + <string name="enter_pass2">Digite a senha novamente:</string> + <string name="pass_not_match">As senhas digitadas não conferem!</string> + <string name="partitions">Partições:</string> + <string name="disabled">Desabilitar</string> + <string name="enabled">Ativado</string> + <string name="backup_name_hdr">Nome do conjunto de Backup</string> + <string name="progress">Progresso:</string> + <string name="backup_complete">Cópia de segurança concluído</string> + <string name="restore_hdr">Restaurar</string> + <string name="sel_backup_hdr">Selecione a cópia de segurança</string> + <string name="restore_sel_store_hdr">Selecione a cópia de segurança de %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Selecione o pacote para restaurar:</string> + <string name="restore_enc_backup_hdr">Cópia de segurança criptografada</string> + <string name="restore_dec_fail">Senha falhou, por favor tente novamente!</string> + <string name="del_backup_btn">Excluir Cópia de Segurança</string> + <string name="del_backup_confirm">Excluir Cópia de Segurança?</string> + <string name="del_backup_confirm2">Isto não pode ser desfeito!</string> + <string name="deleting_backup">Exclusão de Cópia de Segurança...</string> + <string name="backup_deleted">Exclusão de Cópia de Segurança completa</string> + <string name="swipe_delete">Deslize para excluir</string> + <string name="swipe_delete_s"> Excluir</string> + <string name="restore_try_decrypt">Cópia de Segurança criptografada - tentando descriptografia</string> + <string name="restore_try_decrypt_s">Tentando a descriptografia</string> + <string name="restore_backup_date">Cópia de Segurança feita em %tw_restore_file_date%</string> + <string name="restore_sel_part">Selecione partições a restaurar:</string> + <string name="restore_enable_md5_chk">Habilitar verificação de MD5 dos arquivos de Cópia de Segurança</string> + <string name="restore_complete">Restauração completa</string> + <string name="swipe_restore">Deslize para restaurar</string> + <string name="swipe_restore_s"> Restauração</string> + <string name="rename_backup_hdr">Renomear a Cópia de Segurança</string> + <string name="rename_backup_confirm">Renomear a Cópia de Segurança?</string> + <string name="rename_backup_confirm2">Isto não pode ser desfeito!</string> + <string name="renaming_backup">Renomear a Cópia de Segurança...</string> + <string name="rename_backup_complete">Renomear a Cópia de Segurança completa</string> + <string name="swipe_to_rename">Deslize para renomear</string> + <string name="swipe_rename"> Renomear</string> + <string name="confirm_hdr">Confirme</string> + <string name="mount_hdr">Monte</string> + <string name="mount_sel_part">Selecione as partições para montagem:</string> + <string name="mount_sys_ro_chk">Montar a partição de sistema somente leitura</string> + <string name="mount_sys_ro_s_chk">Sistema de montagem RO</string> + <string name="decrypt_data_btn">Descriptografar dados</string> + <string name="disable_mtp_btn">Desabilitar o MTP</string> + <string name="enable_mtp_btn">Habilitar o MTP</string> + <string name="mount_usb_storage_btn">Montar armazenamento USB</string> + <string name="usb_storage_hdr">Armazenamento USB</string> + <string name="usb_stor_mnt1">Armazenamento USB montado</string> + <string name="usb_stor_mnt2">Não se esqueça de remover com segurança seu dispositivo</string> + <string name="usb_stor_mnt3">do seu computador antes de desmontar!</string> + <string name="unmount_btn">Desmonte</string> + <string name="rb_system_btn">Sistema</string> + <string name="rb_poweroff_btn">Desligar</string> + <string name="rb_recovery_btn">Recuperação</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Baixar</string> + <string name="turning_off">Desligar...</string> + <string name="swipe_power_off">Deslize para desligar</string> + <string name="swipe_power_off_s">Desligar</string> + <string name="sys_ro_hdr">Partição do sistema não modificado</string> + <string name="sys_ro_keep">Manter o sistema apenas leitura?</string> + <string name="sys_rop1">TWRP pode deixar sua partição do sistema não modificada</string> + <string name="sys_rop2">para tornar mais fácil para você tomar atualizações oficiais.</string> + <string name="sys_rop3">TWRP será incapaz de impedir o stock ROM de</string> + <string name="sys_rop4">substituindo TWRP e não oferecerá a raiz do seu dispositivo.</string> + <string name="sys_rop5">Instalar zips ou executar operações adb pode ainda</string> + <string name="sys_rop6">modifica a partição do sistema.</string> + <string name="sys_rol1">TWRP pode deixar sua partição do sistema não-modificada para torná-lo mais fácil para você tomar atualizações oficiais.</string> + <string name="sys_rol2">TWRP será incapaz de impedir que o stock ROM substituindo TWRP e não oferecerá a raiz do seu dispositivo.</string> + <string name="sys_rol3">Instalar zips ou executar operações adb ainda pode modificar a partição do sistema.</string> + <string name="sys_ro_never_show_chk">Nunca mostrar esta tela durante a inicialização de novo</string> + <string name="sys_ro_keep_ro_btn">Manter apenas leitura</string> + <string name="swipe_allow_mod">Deslize para permitir modificações</string> + <string name="swipe_allow_mod_s">Permitir modificações</string> + <string name="settings_hdr">Configurações</string> + <string name="settings_gen_hdr">Geral</string> + <string name="settings_gen_s_hdr">Geral</string> + <string name="settings_gen_btn">Geral</string> + <string name="use_rmrf_chk">Usar o rm -rf em vez de formatação</string> + <string name="use24clock_chk">Relógio 24 horas de uso</string> + <string name="rev_navbar_chk">Layout de barra invertida</string> + <string name="simact_chk">Simular ações para tema de teste</string> + <string name="simfail_chk">Simular falha para ações</string> + <string name="ctr_navbar_rdo">Botões de barra de navegação do centro</string> + <string name="lft_navbar_rdo">Alinhar à esquerda os botões de navegação</string> + <string name="rht_navbar_rdo">Bem, alinhar botões da barra de navegação</string> + <string name="restore_defaults_btn">Restaurar padrões</string> + <string name="settings_tz_btn">Fuso Horário</string> + <string name="settings_screen_btn">Tela</string> + <string name="settings_screen_bright_btn">Brilho da tela</string> + <string name="settings_vibration_btn">Vibração</string> + <string name="settings_language_btn">Idioma</string> + <string name="time_zone_hdr">Fuso Horário</string> + <string name="sel_tz_list">Selecione o Fuso Horário:</string> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Havaí</string> + <string name="utcm9">(UTC -9) Alasca</string> + <string name="utcm8">(UTC -8) Hora do Pacífico</string> + <string name="utcm7">(UTC -7) Tempo de Mountain</string> + <string name="utcm6">(UTC -6) Horário central</string> + <string name="utcm5">(UTC -5) Hora do leste</string> + <string name="utcm4">(UTC -4) Horário do Atlântico</string> + <string name="utcm3">(UTC -3) Brasil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Açores, Cabo Verde</string> + <string name="utc0">(UTC 0) Londres, Dublin, Lisboa</string> + <string name="utcp1">(UTC + 1) Berlim, Bruxelas, Paris</string> + <string name="utcp2">(UTC + 2) Atenas, Istambul, África do Sul</string> + <string name="utcp3">(UTC + 3) Moscou, Bagdá</string> + <string name="utcp4">(UTC + 4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC + 5) Ecaterimburgo, Islamabad</string> + <string name="utcp6">(UTC + 6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC + 7) Bangcoc, Hanói, Jacarta</string> + <string name="utcp8">(UTC + 8) Beijing, Singapura, Hong Kong</string> + <string name="utcp9">(UTC + 9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC + 10) Austrália oriental, Guam</string> + <string name="utcp11">(UTC + 11) Vladivostok, Ilhas Salomão</string> + <string name="utcp12">(UTC + 12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Selecione o deslocamento (geralmente 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Nenhum</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Use o horário de Verão (DST)</string> + <string name="curr_tz">Fuso horário atual: %tw_time_zone%</string> + <string name="curr_tz_s">Fuso horário atual:</string> + <string name="set_tz_btn">Definir fuso horário</string> + <string name="settings_screen_hdr">Tela</string> + <string name="settings_screen_timeout_hdr">Tempo limite da Tela</string> + <string name="enable_timeout_chk">Habilitar tempo de tela</string> + <string name="screen_to_slider">Tempo limite de tela em segundos:</string> + <string name="screen_to_slider_s">Tempo limite de tela em segundos (0 = desativado): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Tempo limite de tela configuração indisponível</string> + <string name="screen_bright_slider">Brilho: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Configuração de brilho não está disponível</string> + <string name="vibration_hdr">Vibração</string> + <string name="button_vibration_hdr">Botão de vibração</string> + <string name="kb_vibration_hdr">Vibração de teclado</string> + <string name="act_vibration_hdr">Ação de vibração</string> + <string name="button_vibration">Botão de vibração:</string> + <string name="kb_vibration">Vibração de teclado:</string> + <string name="act_vibration">Ação de vibração:</string> + <string name="select_language">Selecionar idioma:</string> + <string name="sel_lang_btn">Selecionar idioma</string> + <string name="set_language_btn">Definir idioma</string> + <string name="advanced_hdr">Avançado</string> + <string name="copy_log_confirm">Copiar o Log para o cartão SD?</string> + <string name="copying_log">Copiar o Log para o cartão SD...</string> + <string name="copy_log_complete">Cópia de registro completo</string> + <string name="part_sd_btn">Cartão SD de partição</string> + <string name="part_sd_s_btn">Cartão SD</string> + <string name="file_manager_btn">Gerenciador de Arquivos</string> + <string name="language_hdr">Idioma</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Tema carregado</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Injetar TWRP</string> + <string name="inject_twrp_confirm">Re-injetar TWRP?</string> + <string name="injecting_twrp">Re-injetar TWRP...</string> + <string name="inject_twrp_complete">TWRP injeção completa</string> + <string name="swipe_to_confirm">Deslize para confirmar</string> + <string name="part_sd_hdr">Cartão SD de partição</string> + <string name="invalid_partsd_sel">Você deve selecionar um dispositivo removível</string> + <string name="part_sd_lose">Você vai perder todos os arquivos no cartão SD!</string> + <string name="part_sd_undo">Esta ação não pode ser desfeita!</string> + <string name="part_sd_ext_sz">Tamanho EXT:</string> + <string name="part_sd_swap_sz">Tamanho de swap:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Sistema de arquivos:</string> + <string name="swipe_part_sd">Deslize para particionar</string> + <string name="swipe_part_sd_s">Partição</string> + <string name="partitioning_sd">Particionando o cartão SD...</string> + <string name="partitioning_sd2">Isso levará alguns minutos.</string> + <string name="part_sd_complete">Particionamento completo</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Restaurar a Inicialização Original</string> + <string name="dumlock_restore_confirm">Restaurar a imagem de inicialização original?</string> + <string name="dumlock_restoring">Restauração de inicialização Original...</string> + <string name="dumlock_restore_complete">Restauração completa de inicialização Original</string> + <string name="dumlock_reflash_btn">Reflash recuperação</string> + <string name="dumlock_reflash_confirm">Reflash recuperação para arrancar?</string> + <string name="dumlock_reflashing">Reflash recuperação para arrancar...</string> + <string name="dumlock_reflash_complete">Flash de recuperação de inicialização completa</string> + <string name="dumlock_install_btn">Instalar o HTC Dumlock</string> + <string name="dumlock_install_confirm">Instalar HTC dumlock arquivos de ROM?</string> + <string name="dumlock_installing">Instalando o HTC Dumlock...</string> + <string name="dumlock_install_complete">HTC Dumlock instalação completa</string> + <string name="swipe_to_unlock">Deslize para desbloquear</string> + <string name="swipe_unlock"> Desbloquear</string> + <string name="fm_hdr">Gerenciador de arquivos</string> + <string name="fm_sel_file">Selecione um arquivo ou pasta</string> + <string name="fm_type_folder">Pasta</string> + <string name="fm_type_file">Arquivo</string> + <string name="fm_choose_act">Escolha uma Ação</string> + <string name="fm_selected">%tw_fm_type% selecionado:</string> + <string name="fm_copy_btn">Cópia</string> + <string name="fm_copy_file_btn">Copiar arquivo</string> + <string name="fm_copy_folder_btn">Copiar pasta</string> + <string name="fm_copying">Copiando</string> + <string name="fm_move_btn">Mover</string> + <string name="fm_moving">Movendo</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Excluir</string> + <string name="fm_deleting">Excluíndo</string> + <string name="fm_rename_btn">Renomear</string> + <string name="fm_rename_file_btn">Renomear arquivo</string> + <string name="fm_rename_folder_btn">Renomear Pasta</string> + <string name="fm_renaming">Renomeando</string> + <string name="fm_sel_dest">Selecione a pasta de destino</string> + <string name="fm_sel_curr_folder">Selecione a pasta atual</string> + <string name="fm_rename_hdr">Renomear</string> + <string name="fm_set_perms_hdr">Definir permissões</string> + <string name="fm_perms">Permissões:</string> + <string name="fm_complete">Operação de arquivo completo</string> + <string name="decrypt_data_hdr">Descriptografar dados</string> + <string name="decrypt_data_enter_pass">Digite a senha.</string> + <string name="decrypt_data_enter_pattern">Digite padrão.</string> + <string name="decrypt_data_trying">Tentando a descriptografia</string> + <string name="term_hdr">Comando no terminal</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">MATAR</string> + <string name="term_sel_folder_hdr">Navegue até a pasta a começar</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Limpe Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Limpe o Cache</string> + <string name="swipe_to_sideload">Deslize para começar Sideload</string> + <string name="swipe_sideload"> Início</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Uso: adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload completa</string> + <string name="reboot_hdr">Reiniciar</string> + <string name="su_hdr">Seleção de Super Usuário</string> + <string name="su_note1">Seu dispositivo não aparece para ser enraizado.</string> + <string name="su_note2">Instalar Super Usuário agora?</string> + <string name="su_note3">Isto enraizará seu dispositivo.</string> + <string name="su_cancel">Não instale</string> + <string name="swipe_su_to_install">Deslize para instalar</string> + <string name="swipe_su_install"> Instalar</string> + <string name="su_installing">Instalação Super Usuário</string> + <string name="sel_storage_list">Selecionar armazenamento</string> + <string name="ok_btn">OK</string> + <string name="no_kernel_selinux">Kernel não tem suporte para leitura de contextos do SELinux.</string> + <string name="full_selinux">Suporte completo do SELinux está presente.</string> + <string name="no_selinux">Não há suporte SELinux (não libselinux).</string> + <string name="mtp_enabled">MTP-habilitado</string> + <string name="mtp_crash">MTP caiu, não começando MTP na inicialização.</string> + <string name="decrypt_success">Com êxito descriptografada com a senha padrão.</string> + <string name="unable_to_decrypt">Não é possível descriptografar com senha padrão. Você pode precisar executar um formato de dados.</string> + <string name="generating_md51">Gerar o MD5</string> + <string name="generating_md52"> * Gerar o md5...</string> + <string name="md5_created"> * MD5 criado.</string> + <string name="md5_error"> * MD5 erro!</string> + <string name="md5_compute_error"> * Erro MD5 de computação.</string> + <string name="current_date">(Data atual)</string> + <string name="auto_generate">(Auto gerar)</string> + <string name="unable_to_locate_partition">Não é possível localizar a partição \'{1}\' para cálculos de cópia de segurança.</string> + <string name="no_partition_selected">Sem partições selecionadas para a cópia de segurança.</string> + <string name="total_partitions_backup"> * Total número de partições de cópia de segurança: {1}</string> + <string name="total_backup_size"> * O tamanho total de todos os dados: {1}MB</string> + <string name="available_space"> * Espaço disponível: {1}MB</string> + <string name="unable_locate_storage">Não é possível localizar o dispositivo de armazenamento.</string> + <string name="no_space">Não há suficiente espaço livre no armazenamento.</string> + <string name="backup_started">[CÓPIA DE SEGURANÇA COMEÇADO]</string> + <string name="backup_folder"> * Cópia de segurança da pasta: {1}</string> + <string name="fail_backup_folder">Não conseguiu fazer a pasta de cópia de segurança.</string> + <string name="avg_backup_fs">Taxa média da cópia de segurança para sistemas de arquivo: {1} MB/seg</string> + <string name="avg_backup_img">Taxa média de cópia de segurança para drives de imagens: {1} MB/seg</string> + <string name="total_backed_size">[{1} MB TOTAL CÓPIA DE SEGURANÇA]</string> + <string name="backup_completed">[CÓPIA DE SEGURANÇA CONCLUÍDO EM {1} SEGUNDOS]</string> + <string name="restore_started">[RESTAURAÇÃO COMEÇADA]</string> + <string name="restore_folder">Restaurar a pasta: \'{1}\'</string> + <string name="verifying_md5">Verificando o MD5</string> + <string name="skip_md5">Saltando de verificação MD5 com base na configuração de usuário.</string> + <string name="calc_restore">Cálculo de restauração de detalhes...</string> + <string name="restore_read_only">Não é possível restaurar {1}..--montada somente leitura.</string> + <string name="restore_unable_locate">Não é possível localizar a partição \'{1}\' para restaurar.</string> + <string name="no_part_restore">Sem partições selecionadas para restauração.</string> + <string name="restore_part_count">Restaurando partições {1}...</string> + <string name="total_restore_size">Tamanho total da restauração é {1}MB</string> + <string name="updating_system_details">Detalhes do sistema de atualização</string> + <string name="restore_completed">[RESTAURAÇÃO COMPLETADA EM {1} SEGUNDOS]</string> + <string name="error_opening_strerr">Erro ao abrir: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Não é possível localizar a partição pelo nome da cópia de segurança: \'{1}\'</string> + <string name="unable_find_part_path">Não é possível localizar a partição para o caminho \'{1}\'</string> + <string name="update_part_details">Atualização de partição de detalhes...</string> + <string name="update_part_details_done">... feito</string> + <string name="wiping_dalvik">Limpando diretórios Dalvik Cache...</string> + <string name="cleaned">Limpeza: {1}...</string> + <string name="dalvik_done">-Limpado completamente diretórios Dalvik Cache!</string> + <string name="no_andsec">Não encontradas partições seguras android.</string> + <string name="unable_to_locate">Não é possível localizar o {1}.</string> + <string name="wiping_datamedia">Limpando o armazenamento interno... /data/media...</string> + <string name="unable_to_mount">Incapaz de montar {1}</string> + <string name="unable_to_mount_internal">Incapaz de montar memória interna</string> + <string name="unable_to_mount_storage">Incapaz de montar o armazenamento</string> + <string name="fail_decrypt">Falha ao descriptografar os dados.</string> + <string name="no_crypto_support">Não há suporte para criptografia compilada para esta compilação.</string> + <string name="decrypt_success_dev">Dados descriptografados com sucesso, o novo dispositivo de bloco: \'{1}\'</string> + <string name="done">Concluído.</string> + <string name="start_partition_sd">Particionando o cartão SD...</string> + <string name="partition_sd_locate">Não é possível localizar o dispositivo para a partição.</string> + <string name="ext_swap_size">EXT + Swap tamanho é maior do que o tamanho do sdcard.</string> + <string name="remove_part_table">Remoção de tabela de partição...</string> + <string name="unable_rm_part">Não é possível remover a tabela de partição.</string> + <string name="create_part">Criando a partição de {1}...</string> + <string name="unable_to_create_part">Não é possível criar partição de {1}.</string> + <string name="format_sdext_as">Formatando sd-ext como {1}...</string> + <string name="part_complete">Particionamento completo.</string> + <string name="unable_to_open">Não é possível abrir \'{1}\'.</string> + <string name="mtp_already_enabled">MTP já habilitado</string> + <string name="mtp_fail">Falha ao ativar o MTP</string> + <string name="no_mtp">Suporte MTP não incluído</string> + <string name="image_flash_start">[IMAGEM FLASH COMEÇADO]</string> + <string name="img_to_flash">Imagem a piscar: \'{1}\'</string> + <string name="flash_unable_locate">Não é possível localizar a partição \'{1}\' para piscar.</string> + <string name="no_part_flash">Sem partições seleccionadas para piscar.</string> + <string name="too_many_flash">Muitas partições selecionadas para piscar.</string> + <string name="invalid_flash">Partição especificada inválida para flash.</string> + <string name="flash_done">[IMAGEM FLASH CONCLUÍDO]</string> + <string name="wiping">Limpando {1}</string> + <string name="repair_not_exist">{1} não existe! Não pode reparar!</string> + <string name="repairing_using">Reparação de {1} usando {2}...</string> + <string name="unable_repair">Não é possível reparar {1}.</string> + <string name="mount_data_footer">Não poderia montar /data e incapaz de encontrar o rodapé de criptografia.</string> + <string name="create_folder_strerr">Não foi possível criar a pasta \'{1}\' ({2}).</string> + <string name="fail_mount">Falha ao montar \'{1}\' ({2})</string> + <string name="fail_unmount">Falha ao montar \'{1}\' ({2})</string> + <string name="cannot_resize">Não é possível redimensionar {1}.</string> + <string name="repair_resize">Reparação de {1} antes de redimensionamento.</string> + <string name="unable_resize">Não é possível redimensionar {1}.</string> + <string name="no_md5_found">Nenhum arquivo md5 foi encontrado para \'{1}\'. Por favor, cancelar a seleção de verificação MD5 habilitar para restaurar.</string> + <string name="md5_fail_match">MD5 não conseguiram corresponder na \'{1}\'.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Falha ao descriptografar arquivo tar \'{1}\'</string> + <string name="format_data_msg">Você pode precisar reiniciar recuperação para ser capaz de usar /data novamente.</string> + <string name="format_data_err">Não é possível formatar para remover a criptografia.</string> + <string name="formatting_using">Formatação {1} usando {2}...</string> + <string name="unable_to_wipe">Não é possível limpar {1}.</string> + <string name="cannot_wipe">Partição {1} não pode ser apagada.</string> + <string name="remove_all">Remover todos os arquivos em \'{1}\'</string> + <string name="wiping_data">Limpando os dados sem limpar /data/media...</string> + <string name="backing_up">Cópia de Segurança de {1}...</string> + <string name="backing">Fazendo cópia de segurança</string> + <string name="backup_size">Tamanho do arquivo de cópia de segurança para \'{1}\' é 0 bytes.</string> + <string name="datamedia_fs_restore">Aviso: Essa cópia de segurança /data foi feita com o sistema de arquivos de {1}! A cópia de segurança não pode arrancar a menos que você muda de volta para {1}.</string> + <string name="restoring">Restauração de {1}...</string> + <string name="restoring_hdr">Restaurando</string> + <string name="recreate_folder_err">Não é possível recriar a pasta de {1}.</string> + <string name="img_size_err">Tamanho da imagem é maior do que o dispositivo de destino</string> + <string name="flashing">Piscando {1}...</string> + <string name="backup_folder_set">Pasta da cópia de segurança definida como \'{1}\'</string> + <string name="locate_backup_err">Não é possível localizar a cópia de segurança \'{1}\'</string> + <string name="set_restore_opt">Definir opções de restauração: \'{1}\':</string> + <string name="md5_check_skip">Ignorar verificação de MD5 é na</string> + <string name="ors_encrypt_restore_err">Não é possível usar OpenRecoveryScript para restaurar uma cópia de segurança criptografada.</string> + <string name="mounting">Montando</string> + <string name="unmounting">Desmontando</string> + <string name="mounted">Montada \'{1}\'</string> + <string name="unmounted">Desmontado \'{1}\'</string> + <string name="setting">Configuração \'{1}\' para \'{2}\'</string> + <string name="setting_empty">Configuração \'{1}\' para o vazio</string> + <string name="making_dir1">Fazendo o diretório</string> + <string name="making_dir2">Fazendo o diretório: \'{1}\'</string> + <string name="running_command">Executando o comando</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Iniciado sideload ADB característica...</string> + <string name="need_new_adb">Você precisa adb 1.0.32 ou mais recente para sideload para este dispositivo.</string> + <string name="no_pwd">Nenhuma senha fornecida.</string> + <string name="done_ors">Arquivo de script de processamento feito</string> + <string name="injecttwrp">Injetando TWRP na imagem de inicialização...</string> + <string name="zip_err">Erro ao instalar o arquivo zip \'{1}\'</string> + <string name="installing_zip">Instalando o arquivo zip \'{1}\'</string> + <string name="select_backup_opt">Definir opções da cópia de segurança:</string> + <string name="compression_on">Compressão é na</string> + <string name="md5_off">Geração de MD5 está fora</string> + <string name="backup_fail">Cópia de segurança falhou</string> + <string name="backup_clean">Falha de backup. Limpar a pasta de Backup.</string> + <string name="running_recovery_commands">Executando comandos de recuperação</string> + <string name="recovery_commands_complete">Comandos de recuperação completa</string> + <string name="running_ors">OpenRecoveryScript em execução</string> + <string name="ors_complete">OpenRecoveryScript completa</string> + <string name="no_updater_binary">Não foi possível encontrar \'{1}\' no arquivo zip.</string> + <string name="check_for_md5">Verificação de arquivo MD5...</string> + <string name="fail_sysmap">Falha ao mapear o arquivo \'{1}\'</string> + <string name="verify_zip_sig">Verificar a assinatura do zip...</string> + <string name="verify_zip_fail">Falha de verificação de assinatura do arquivo zip!</string> + <string name="verify_zip_done">Assinatura zip é verificada com êxito.</string> + <string name="zip_corrupt">O arquivo zip está corrompido!</string> + <string name="no_md5">Saltando de verificação MD5: nenhum arquivo MD5 encontrado</string> + <string name="md5_fail">Não coincide com MD5</string> + <string name="md5_match">Correspondência de MD5</string> + <string name="pid_signal">{1} processo terminou com sinal: {2}</string> + <string name="pid_error">{1} processo terminou com erro: {2}</string> + <string name="install_dumlock">Instalação HTC Dumlock sistema...</string> + <string name="dumlock_restore">Restauração de inicialização Original...</string> + <string name="dumlock_reflash">Regravando recuperação para arrancar...</string> + <string name="run_script">Executando o script {1}...</string> + <string name="rename_stock">Renomeado o arquivo de recuperação das ações em / / sistema para impedir que o stock ROM substituindo TWRP.</string> + <string name="split_backup">Quebrando o arquivo de cópia de segurança em vários arquivos...</string> + <string name="backup_error">Erro ao criar a cópia de segurança.</string> + <string name="restore_error">Erro durante o processo de restauração.</string> + <string name="split_thread">Dividindo o segmento ID {1} em {2} de arquivo</string> + <string name="file_progress">%llu de arquivos %llu, %i%%</string> + <string name="size_progress">%lluMB de %lluMB, %i%%</string> + <string name="decrypt_cmd">A tentativa de decifrar a partição de dados via linha de comando.</string> + <string name="base_pkg_err">Falha ao carregar pacotes base.</string> + <string name="simulating">Simulando ações...</string> + <string name="backup_cancel">Cópia de segurança cancelado</string> + <string name="config_twrp">Configurando TWRP...</string> + <string name="config_twrp_err">Não é possível configurar TWRP com este kernel.</string> + <string name="copy_log">Copiado o registro de recuperação para {1}.</string> + <string name="max_queue">Arquivo zip máximo alcançado!</string> + <string name="min_queue">Arquivo zip mínimo alcançado!</string> + <string name="screenshot_saved">Captura de tela foi salvo em {1}</string> + <string name="screenshot_err">Não foi possível tirar uma cópia de tela!</string> + <string name="zip_wipe_cache">Um ou mais zip solicitado uma limpeza de cache..--limpando cache agora.</string> + <string name="and_sec_wipe_err">Não é possível limpar o andróide seguro</string> + <string name="dalvik_wipe_err">Falha ao limpar dalvik</string> + <string name="auto_gen">(Auto gerar)</string> + <string name="curr_date">(Data atual)</string> + <string name="backup_name_len">Nome da cópia de segurança é muito longo.</string> + <string name="backup_name_invalid">\'{1}\' nome da cópia de segurança contém o caractere inválido: \'{1}\'</string> + <string name="no_real_sdcard">Este dispositivo não tem um cartão SD real! Abortando!</string> + <string name="cancel_sideload">Cancelamento de sideload ADB...</string> + <string name="change_fs_err">Sistema de arquivo erro em mudança.</string> + <string name="theme_ver_err">Versão personalizada do tema não coincide com a versão TWRP. Usando o tema conservado em estoque.</string> + </resources> +</language> diff --git a/gui/theme/common/languages/ru.xml b/gui/theme/common/languages/ru.xml new file mode 100644 index 000000000..4de1ea811 --- /dev/null +++ b/gui/theme/common/languages/ru.xml @@ -0,0 +1,691 @@ +<?xml version="1.0" encoding="utf-8"?> +<language> + <display>Русский</display> + <!-- Translated by Jemmini; modified by agur4ik, SevenMaxs, S-trace 2017 --> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource filename="RobotoCondensed-Regular.ttf" name="font_l" scale="90" type="fontoverride"/> + <resource filename="RobotoCondensed-Regular.ttf" name="font_m" scale="90" type="fontoverride"/> + <resource filename="RobotoCondensed-Regular.ttf" name="font_s" scale="90" type="fontoverride"/> + <resource filename="DroidSansMono.ttf" name="fixed" scale="100" type="fontoverride"/> + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">System Image</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor Image</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data (искл. Storage)</string> + <string name="sdcard">SDcard</string> + <string name="internal">Память устройства</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik/ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted Storage</string> + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">ЦП: %tw_cpu_temp% °C</string> + <string name="battery_pct">Батарея: %tw_battery%</string> + <string name="sort_by_name">Сорт.по имени</string> + <string name="sort_by_date">Сорт.по дате</string> + <string name="sort_by_size">Сорт.по размеру</string> + <string name="sort_by_name_only">Имя</string> + <string name="sort_by_date_only">Дата</string> + <string name="sort_by_size_only">Размер</string> + <string name="tab_general">ОСНОВНЫЕ</string> + <string name="tab_options">ОПЦИИ</string> + <string name="tab_backup">КОПИИ</string> + <string name="tab_time_zone">ЧАСОВОЙ ПОЯС</string> + <string name="tab_screen">ЭКРАН</string> + <string name="tab_vibration">ВИБРАЦИЯ</string> + <string name="tab_language">ЯЗЫК</string> + <string name="install_btn">Установка</string> + <string name="wipe_btn">Очистка</string> + <string name="backup_btn">Резервное коп-ние</string> + <string name="restore_btn">Восстановление</string> + <string name="mount_btn">Монтирование</string> + <string name="settings_btn">Настройки</string> + <string name="advanced_btn">Дополнительно</string> + <string name="reboot_btn">Перезагрузка</string> + <string name="files_btn">Файлы</string> + <string name="copy_log_btn">Копировать лог</string> + <string name="select_type_hdr">Выбор типа</string> + <string name="install_zip_hdr">Установка Zip</string> + <string name="install_zip_btn">Установка Zip</string> + <string name="install_image_hdr">Установка Img-образа</string> + <string name="install_image_btn">Установка Img</string> + <string name="install_select_file_hdr">Выбор файла</string> + <string name="file_selector_folders_hdr">Папки</string> + <string name="select_file_from_storage">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Установка</string> + <string name="select_storage_hdr">Выберите накопитель</string> + <string name="select_storage_btn">Выбор накопителя</string> + <string name="queue_hdr">Очередь</string> + <string name="zip_queue_count">Файлов в очереди: %tw_zip_queue_count% из 10 возможных</string> + <string name="zip_queue_count_s">Файл %tw_zip_queue_count% из 10:</string> + <string name="zip_warn1">Эта операция может установить несовместимое ПО на</string> + <string name="zip_warn2">ваше устройство и сделать загрузку системы невозможной.</string> + <string name="zip_back_cancel">Нажмите назад для отмены установки этого zip.</string> + <string name="zip_back_clear">Нажмите назад для очистки очереди.</string> + <string name="folder">Папка:</string> + <string name="file">Файл:</string> + <string name="zip_sig_chk">Проверка подписи Zip</string> + <string name="inject_twrp_chk">Интегрировать TWRP после установки</string> + <string name="install_reboot_chk">Автоматическая перезагрузка после установки</string> + <string name="options_hdr">Опции</string> + <string name="confirm_flash_hdr">Подтвердите установку</string> + <string name="zip_queue">Очередь:</string> + <string name="options">Опции:</string> + <string name="swipe_confirm"> Подтвердить</string> + <string name="zip_add_btn">Добавить еще Zip</string> + <string name="zip_clear_btn">Очистить очередь Zip</string> + <string name="install_zip_count_hdr">Установка Zip %tw_zip_index% из %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Установка Zip: %tw_file%</string> + <string name="failed">Неудача</string> + <string name="successful">Успешно</string> + <string name="install_failed">Установка не удалась</string> + <string name="install_successful">Установка выполнена успешно</string> + <string name="wipe_cache_dalvik_btn">Очистка cache/dalvik</string> + <string name="reboot_system_btn">Перезагрузка в ОС</string> + <string name="install_sel_target">Выбор раздела</string> + <string name="flash_image_select">Выберите раздел для прошивки образа:</string> + <string name="target_partition">Целевой раздел:</string> + <string name="flashing_image">Прошивка образа...</string> + <string name="image_flashed">Прошивка образа завершена</string> + <string name="wipe_cache_dalvik_confirm">Очистить Cache & Dalvik?</string> + <string name="wiping_cache_dalvik">Очистка Cache & Dalvik...</string> + <string name="wipe_cache_dalvik_complete">Очистка Cache & Dalvik завершена</string> + <string name="swipe_wipe">Свайп для очистки</string> + <string name="swipe_wipe_s"> Очистка</string> + <string name="no_os1">Система не установлена! Вы уверены,</string> + <string name="no_osrb">что хотите перезагрузить?</string> + <string name="no_ospo">что хотите выключить?</string> + <string name="rebooting">Перезагрузка...</string> + <string name="swipe_reboot">Свайп для перезагрузки</string> + <string name="swipe_reboot_s"> Перезагрузка</string> + <string name="reboot_install_app_hdr">Установить TWRP App?</string> + <string name="reboot_install_app1">Вы хотите установить официальное приложение TWRP?</string> + <string name="reboot_install_app2">Оно позволит вам проверять наличие новой версии TWRP.</string> + <string name="reboot_install_app_prompt_install">Предлагать установку TWRP App при его отсутствии</string> + <string name="reboot_install_app_system">Установить как системное приложение</string> + <string name="reboot_installing_app">Установка TWRP приложения...</string> + <string name="swipe_to_install_app">Свайп для установки TWRP App</string> + <string name="swipe_flash">Свайп для прошивки</string> + <string name="confirm_action">Подтвердить действие</string> + <string name="back_cancel">Нажмите назад для отмены.</string> + <string name="cancel_btn">Отмена</string> + <string name="wipe_hdr">Очистка</string> + <string name="factory_reset_hdr">Сброс до заводского состояния</string> + <string name="factory_reset_btn">Сброс на фабричные</string> + <string name="factory_reset1">Очистка Data, Cache, и Dalvik</string> + <string name="factory_reset2">(исключая внутреннее хранилище)</string> + <string name="factory_reset3">В большинстве случаев очистка</string> + <string name="factory_reset4">этих разделов достаточна.</string> + <string name="factory_resetting">Сброс до заводского состояния...</string> + <string name="advanced_wipe_hdr">Выборочная очистка</string> + <string name="advanced_wipe_btn">Выборочная очистка</string> + <string name="wipe_enc_confirm">Очистить шифрованные данные?</string> + <string name="formatting_data">Форматирование Data...</string> + <string name="swipe_format_data">Свайп для форматирования</string> + <string name="swipe_format_data_s"> Форматировать Data</string> + <string name="factory_reset_complete">Сброс до заводского состояния завершен</string> + <string name="sel_part_hdr">Выбор разделов</string> + <string name="wipe_sel_confirm">Очистить выбранные разделы?</string> + <string name="wiping_part">Очистка разделов...</string> + <string name="wipe_complete">Очистка завершена</string> + <string name="sel_part_wipe">Выберите разделы для очистки:</string> + <string name="invalid_part_sel">Выбран неверный раздел</string> + <string name="format_data_hdr">Форматировать Data</string> + <string name="format_data_btn">Форматировать Data</string> + <string name="format_data_ptr1">Форматирование Data удалит все приложения,</string> + <string name="format_data_ptr2">резервные копии, картинки, видео, медиафайлы</string> + <string name="format_data_ptr3">и зашифрованные файлы во внутренней памяти,</string> + <string name="format_data_adopted">включая расширенное хранилище.</string> + <string name="format_data_lcp1">Форматирование данных удалит все приложения, резервные копии, картинки, видео, медиафайлы</string> + <string name="format_data_lcp2">и зашифрованные файлы во внутренней памяти.</string> + <string name="format_data_wtc1">Форматирование данных удалит все приложения,</string> + <string name="format_data_wtc2">резервные копии и медиа. Это не может быть отменено.</string> + <string name="format_data_undo">Это не может быть отменено.</string> + <string name="format_data_complete">Форматирование данных завершено</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">Введите yes для продолжения. Нажмите назад для отмены.</string> + <string name="part_opt_hdr">Опции для раздела %tw_partition_name%</string> + <string name="sel_act_hdr">Выбор действия</string> + <string name="file_sys_opt">Опции файловой системы</string> + <string name="partition">Раздел: %tw_partition_name%</string> + <string name="part_mount_point">Точка монтирования: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Файловая система: %tw_partition_file_system%</string> + <string name="part_present_yes">Присутствует: да</string> + <string name="part_present_no">Присутствует: нет</string> + <string name="part_removable_yes">Съемное: да</string> + <string name="part_removable_no">Съемное: нет</string> + <string name="part_size">Размер: %tw_partition_size% МБ</string> + <string name="part_used">Использовано: %tw_partition_used% МБ</string> + <string name="part_free">Свободно: %tw_partition_free% МБ</string> + <string name="part_backup_size">Размер резервных копий: %tw_partition_backup_size% МБ</string> + <string name="resize_btn">Измен. размер</string> + <string name="resize_btn_s">Изм. размер</string> + <string name="resize_confirm">Изменить размер %tw_partition_name%?</string> + <string name="resizing">Изменение размера...</string> + <string name="resize_complete">Размер раздела изменён</string> + <string name="swipe_resize">Свайп для изменения размера</string> + <string name="swipe_resize_s"> Измен. размер</string> + <string name="repair_btn">Восст-ть файл. систему</string> + <string name="repair_btn_s">Восстановление</string> + <string name="repair_confirm">Восстановить %tw_partition_name%?</string> + <string name="repairing">Восстановление...</string> + <string name="repair_complete">Восстановление завершено</string> + <string name="swipe_repair">Свайп для восстановления</string> + <string name="swipe_repair_s"> Восстановление</string> + <string name="change_fs_btn">Изм. файловую систему</string> + <string name="change_fs_btn_s">Измен. ФС</string> + <string name="change_fs_for_hdr">Изменить файловую систему для %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Раздел: %tw_partition_name% > Select File System</string> + <string name="change_fs_warn1">Некоторые прошивки или ядра могут не поддерживать</string> + <string name="change_fs_warn2">некоторые файловые системы. Действуйте с осторожностью!</string> + <string name="change_fs_confirm">Изменить %tw_partition_name%?</string> + <string name="formatting">Форматирование...</string> + <string name="format_complete">Форматирование завершено</string> + <string name="swipe_change_fs">Свайп для изменения</string> + <string name="swipe_change_s"> Изменить</string> + <string name="back_btn">Назад</string> + <string name="wipe_enc_btn">Стереть шифрование</string> + <string name="swipe_factory_reset">Свайп для подтверждения</string> + <string name="repair_change_btn">Восстановить или изменить файловую систему</string> + <string name="storage_hdr">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string> + <string name="backup_hdr">Резервное копирование</string> + <string name="backup_confirm_hdr">Подтверждение резервного копирования</string> + <string name="encryption_tab">ШИФРОВАНИЕ</string> + <string name="encryption">Шифрование:</string> + <string name="name">Имя:</string> + <string name="sel_part_backup">Выберите разделы для резервного копирования:</string> + <string name="storage">Хранилище:</string> + <string name="enc_disabled">выключено - установите пароль для включения</string> + <string name="enc_enabled">включено</string> + <string name="enable_backup_comp_chk">Использовать сжатие</string> + <string name="skip_md5_backup_chk">Пропустить вычисление MD5</string> + <string name="disable_backup_space_chk" version="2">Отключить проверку свободного места</string> + <string name="current_boot_slot">Текущий слот: %tw_active_slot%</string> + <string name="boot_slot_a">Слот A</string> + <string name="boot_slot_b">Слот B</string> + <string name="changing_boot_slot">Изменение слота загрузки</string> + <string name="changing_boot_slot_complete">Изменение слота загрузки завершено</string> + <string name="refresh_sizes_btn">Обновить размеры</string> + <string name="swipe_backup">Свайп для начала</string> + <string name="append_date_btn">Добавить дату</string> + <string name="backup_name_exists">Резервная копия с таким именем уже существует!</string> + <string name="encrypt_backup">Зашифровать вашу резервную копию?</string> + <string name="enter_pass">Введите пароль:</string> + <string name="enter_pass2">Введите пароль еще раз:</string> + <string name="pass_not_match">Пароли не совпадают!</string> + <string name="partitions">Разделы:</string> + <string name="disabled">Выключено</string> + <string name="enabled">Включено</string> + <string name="backup_name_hdr">Установка имени резервной копии</string> + <string name="progress">Выполнение:</string> + <string name="backup_complete">Резервное копирование завершено</string> + <string name="restore_hdr">Восстановление</string> + <string name="sel_backup_hdr">Выбор резервной копии</string> + <string name="restore_sel_store_hdr">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string> + <string name="restore_sel_pack_fs">Выбор резервной копии для восстановления:</string> + <string name="restore_enc_backup_hdr">Зашифрованная резервная копия</string> + <string name="restore_dec_fail">Пароль неверный, попробуйте снова!</string> + <string name="del_backup_btn">Удаление рез.копии</string> + <string name="del_backup_confirm">Удалить резервную копию?</string> + <string name="del_backup_confirm2">Это не может быть отменено!</string> + <string name="deleting_backup">Удаление резервной копии...</string> + <string name="backup_deleted">Удаление завершено</string> + <string name="swipe_delete">Свайп для удаления</string> + <string name="swipe_delete_s"> Удаление</string> + <string name="restore_try_decrypt">Зашифрованная резервная копия - попытка расшифровки</string> + <string name="restore_try_decrypt_s">Попытка расшифровки</string> + <string name="restore_backup_date">Резервная копия создана: %tw_restore_file_date%</string> + <string name="restore_sel_part">Выбор раздела для восстановления:</string> + <string name="restore_enable_md5_chk">Включить проверку MD5 файлов резервной копии</string> + <string name="restore_complete">Восстановление завершено</string> + <string name="swipe_restore">Свайп для восстановления</string> + <string name="swipe_restore_s"> Восстановление</string> + <string name="rename_backup_hdr">Переименование резервной копии</string> + <string name="rename_backup_confirm">Переименовать резервную копию?</string> + <string name="rename_backup_confirm2">Это не может быть отменено!</string> + <string name="renaming_backup">Переименование резервной копии...</string> + <string name="rename_backup_complete">Переименование завершено</string> + <string name="swipe_to_rename">Свайп для переименования</string> + <string name="swipe_rename"> Переименовать</string> + <string name="confirm_hdr">Подтвердить</string> + <string name="mount_hdr">Монтирование</string> + <string name="mount_sel_part">Выбор разделов для монтирования:</string> + <string name="mount_sys_ro_chk">Системный раздел только для чтения</string> + <string name="mount_sys_ro_s_chk"> Система RO</string> + <string name="decrypt_data_btn">Расшифровать данные</string> + <string name="disable_mtp_btn">Выключить MTP</string> + <string name="enable_mtp_btn">Включить MTP</string> + <string name="mount_usb_storage_btn">Включить UMS</string> + <string name="usb_storage_hdr">USB накопитель</string> + <string name="usb_stor_mnt1">Режим USB накопителя включен</string> + <string name="usb_stor_mnt2">Перед отключением вашего устройства от компьютера,</string> + <string name="usb_stor_mnt3">выполните размонтирование (выключите UMS)!</string> + <string name="unmount_btn">Выключить UMS</string> + <string name="rb_system_btn">Система</string> + <string name="rb_poweroff_btn">Выключение</string> + <string name="rb_recovery_btn">Рекавери</string> + <string name="rb_bootloader_btn">Загрузчик</string> + <string name="rb_download_btn">Режим загрузки</string> + <string name="turning_off">Выключение...</string> + <string name="swipe_power_off">Свайп для выключения</string> + <string name="swipe_power_off_s">Выключение</string> + <string name="sys_ro_hdr">Модификация системного раздела</string> + <string name="sys_ro_keep">Оставить системный раздел только для чтения?</string> + <string name="sys_rop1">TWRP может оставить системный раздел неизменным,</string> + <string name="sys_rop2">чтобы сохранить возможность официальных обновлений.</string> + <string name="sys_rop3">При этом система сможет вернуть обратно стоковый</string> + <string name="sys_rop4">рекавери, а TWRP не будет предлагать установку root.</string> + <string name="sys_rop5">Установка zip или работа adb все равно смогут изменять</string> + <string name="sys_rop6">системный раздел.</string> + <string name="sys_rol1">TWRP может оставить системный раздел неизменным, чтобы сохранить возможность официальних обновлений.</string> + <string name="sys_rol2">При этом система сможет вернуть обратно стоковый рекавери, а TWRP не будет предлагать установку root.</string> + <string name="sys_rol3">Установка zip или работа adb все равно смогут изменять системный раздел.</string> + <string name="sys_ro_never_show_chk">Больше не показывать это при загрузке</string> + <string name="sys_ro_keep_ro_btn">Только для чтения</string> + <string name="swipe_allow_mod">Разрешить изменения</string> + <string name="swipe_allow_mod_s">Разрешить изменения</string> + <string name="settings_hdr">Настройки</string> + <string name="settings_gen_hdr">Основные</string> + <string name="settings_gen_s_hdr">Основные</string> + <string name="settings_gen_btn">Основные</string> + <string name="use_rmrf_chk">Использовать rm -rf вместо форматирования</string> + <string name="use24clock_chk">Использовать 24-часовой формат времени</string> + <string name="rev_navbar_chk">Инвертировать порядок навигационных кнопок</string> + <string name="simact_chk">Имитация действий для тестирования темы</string> + <string name="simfail_chk">Имитация отказа для действий</string> + <string name="ctr_navbar_rdo">Кнопки нав.панели по центру</string> + <string name="lft_navbar_rdo">Выровнять кнопки нав.панели слева</string> + <string name="rht_navbar_rdo">Выровнять кнопки нав.панели справа</string> + <string name="restore_defaults_btn">Сброс настроек</string> + <string name="settings_tz_btn">Часовой пояс</string> + <string name="settings_screen_btn">Экран</string> + <string name="settings_screen_bright_btn">Яркость</string> + <string name="settings_vibration_btn">Вибрация</string> + <string name="settings_language_btn">Язык</string> + <string name="time_zone_hdr">Часовой пояс</string> + <string name="sel_tz_list">Выбор часового пояса:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) о. Мидуэй, Самоа</string> + <string name="utcm10">(UTC -10) Гавайи</string> + <string name="utcm9">(UTC -9) Аляска</string> + <string name="utcm8">(UTC -8) Тихоокеанский часовой пояс</string> + <string name="utcm7">(UTC -7) Горное время (США и Канада), Аризона</string> + <string name="utcm6">(UTC -6) Центральное время (США и Канада), Центральная Америка</string> + <string name="utcm5">(UTC -5) Восточное время (США и Канада), Индиана (восток)</string> + <string name="utcm4">(UTC -4) Атлантическое время (Канада), Каракас</string> + <string name="utcm3">(UTC -3) Бразилия, Буэнос-Айрес</string> + <string name="utcm2">(UTC -2) Среднеатлантическое время</string> + <string name="utcm1">(UTC -1) Азорские о-ва, о-ва Зелёного мыса</string> + <string name="utc0">(UTC 0) Лондон, Дублин, Лиссабон</string> + <string name="utcp1">(UTC +1) Берлин, Брюссель, Париж</string> + <string name="utcp2">(UTC +2) Киев, Минск, Рига, Таллин, Стамбул</string> + <string name="utcp3">(UTC +3) Москва, Санкт-Петербург, Волгоград, Багдад</string> + <string name="utcp4">(UTC +4) Баку, Ереван, Тбилиси, Абу-Даби, Мускат</string> + <string name="utcp5">(UTC +5) Ташкент, Исламабад, Карачи</string> + <string name="utcp6">(UTC +6) Алматы, Астана, Дхака, Екатеринбург</string> + <string name="utcp7">(UTC +7) Омск, Новосибирск, Бангкок, Джакарта, Ханой</string> + <string name="utcp8">(UTC +8) Красноярск, Пекин, Улан-Батор, Иркутск</string> + <string name="utcp9">(UTC +9) Осака, Саппоро, Токио, Сеул, Якутск</string> + <string name="utcp10">(UTC +10) Гуам, Канберра, Мельбурн, Сидней</string> + <string name="utcp11">(UTC +11) Владивосток, Сахалин, Соломоновы о-ва</string> + <string name="utcp12">(UTC +12) Магадан, Камчатка, Фиджи, Маршаловы о-ва</string> + <string name="sel_tz_offset">Выбор смещения (как правило 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Нет</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Использовать летнее время (DST)</string> + <string name="curr_tz">Текущий часовой пояс: %tw_time_zone%</string> + <string name="curr_tz_s">Текущий часовой пояс:</string> + <string name="set_tz_btn">Установ.часовой пояс</string> + <string name="settings_screen_hdr">Экран</string> + <string name="settings_screen_timeout_hdr">Таймаут экрана</string> + <string name="enable_timeout_chk">Включить таймаут экрана</string> + <string name="screen_to_slider">Выключение экрана через n сек:</string> + <string name="screen_to_slider_s">Выключение экрана через n сек (0=выключен): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Установка таймаута экрана недоступна</string> + <string name="screen_bright_slider">Яркость: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Установка яркости недоступна</string> + <string name="vibration_hdr">Вибрация</string> + <string name="button_vibration_hdr">Вибрация при нажатии кнопок</string> + <string name="kb_vibration_hdr">Вибрация при работе с клавиатурой</string> + <string name="act_vibration_hdr">Вибрация при выборе действия</string> + <string name="button_vibration">Вибрация при нажатии кнопок:</string> + <string name="kb_vibration">Вибрация при работе с клавиатурой:</string> + <string name="act_vibration">Вибрация при завершении действия:</string> + <string name="select_language">Выбор языка:</string> + <string name="sel_lang_btn">Выбор языка</string> + <string name="set_language_btn">Установить язык</string> + <string name="advanced_hdr">Дополнительно</string> + <string name="copy_log_confirm">Копировать лог на SD?</string> + <string name="copying_log" version="2">Копирование лога на SD...</string> + <string name="copy_log_complete" version="2">Копирование лога завершено.</string> + <string name="fix_context_btn">Исправить контекст</string> + <string name="part_sd_btn">Разметка SD-карты</string> + <string name="part_sd_s_btn">Разм-ка SD</string> + <string name="file_manager_btn">Проводник</string> + <string name="language_hdr">Язык</string> + <string name="terminal_btn">Терминал</string> + <string name="reload_theme_btn">Перезагрузить тему</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Интегрировать TWRP</string> + <string name="inject_twrp_confirm">Интегрировать TWRP заново?</string> + <string name="injecting_twrp">Интегрирование TWRP...</string> + <string name="inject_twrp_complete">Интегрирование TWRP завершено</string> + <string name="swipe_to_confirm">Свайп для подтверждения</string> + <string name="part_sd_hdr">Разметка SD-карты</string> + <string name="invalid_partsd_sel">Вы должны выбрать съемное устройство</string> + <string name="part_sd_lose">Все файлы на вашей SD-карте будут стерты!</string> + <string name="part_sd_undo">Это действие не может быть отменено!</string> + <string name="part_sd_ext_sz">Размер EXT-раздела:</string> + <string name="part_sd_swap_sz">Размер swap-раздела:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Файловая система:</string> + <string name="swipe_part_sd">Свайп для разметки</string> + <string name="swipe_part_sd_s">Разметка</string> + <string name="partitioning_sd">Разметка SD-карты...</string> + <string name="partitioning_sd2">Это может занять несколько минут.</string> + <string name="part_sd_complete">Разметка завершена</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Восстановление оригинального Boot</string> + <string name="dumlock_restore_confirm">Восстановить оригинальный образ boot?</string> + <string name="dumlock_restoring">Восстановление оригинального Boot...</string> + <string name="dumlock_restore_complete">Восстановление оригинального Boot завершено</string> + <string name="dumlock_reflash_btn">Перепрошивка рекавери</string> + <string name="dumlock_reflash_confirm">Перепрошить recovery в boot?</string> + <string name="dumlock_reflashing">Прошивка recovery в boot...</string> + <string name="dumlock_reflash_complete">Прошивка recovery в boot завершена</string> + <string name="dumlock_install_btn">Установка HTC Dumlock</string> + <string name="dumlock_install_confirm">Установить HTC dumlock файлы в прошивку?</string> + <string name="dumlock_installing">Установка HTC Dumlock...</string> + <string name="dumlock_install_complete">Установка HTC Dumlock завершена</string> + <string name="swipe_to_unlock">Свайп для разблокировки</string> + <string name="swipe_unlock"> Разблокировать</string> + <string name="fm_hdr">Файловый менеджер</string> + <string name="fm_sel_file">Выбор файла или папки</string> + <string name="fm_type_folder">Папка</string> + <string name="fm_type_file">Файл</string> + <string name="fm_choose_act">Выбор действия</string> + <string name="fm_selected">%tw_fm_type% :</string> + <string name="fm_copy_btn">Копировать</string> + <string name="fm_copy_file_btn">Копировать файл</string> + <string name="fm_copy_folder_btn">Копировать папку</string> + <string name="fm_copying">Копирование</string> + <string name="fm_move_btn">Переместить</string> + <string name="fm_moving">Перемещение</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Удалить</string> + <string name="fm_deleting">Удаление</string> + <string name="fm_rename_btn">Переименовать</string> + <string name="fm_rename_file_btn">Переименовать файл</string> + <string name="fm_rename_folder_btn">Переименовать папку</string> + <string name="fm_renaming">Переименование</string> + <string name="fm_sel_dest">Выбор целевой папки</string> + <string name="fm_sel_curr_folder">Выбор текущей папки</string> + <string name="fm_rename_hdr">Переименовать</string> + <string name="fm_set_perms_hdr">Установить права</string> + <string name="fm_perms">Права:</string> + <string name="fm_complete">Операция завершена</string> + <string name="decrypt_data_hdr">Расшифровать данные</string> + <string name="decrypt_data_enter_pass">Введите пароль.</string> + <string name="decrypt_data_failed">Пароль неверный, попробуйте снова!</string> + <string name="decrypt_data_failed_pattern">Шаблон неверный, попробуйте снова!</string> + <string name="decrypt_data_enter_pattern">Введите шаблон.</string> + <string name="decrypt_data_trying">Попытка расшифровки</string> + <string name="term_hdr">Команда терминала</string> + <string name="term_s_hdr">Терминал</string> + <string name="term_kill_btn">УБИТЬ</string> + <string name="term_sel_folder_hdr">Перейдите к стартовой папке</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Очистка Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">Очистка Cache</string> + <string name="swipe_to_sideload">Свайп для начала sideload</string> + <string name="swipe_sideload"> Старт</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Пример: adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload завершен</string> + <string name="fix_contexts_hdr">Исправление контекста SELinux</string> + <string name="fix_contexts_note1">Примечание: исправление контекста SELinux требуется редко.</string> + <string name="fix_contexts_note2">Исправление SELinux-контекста может привести</string> + <string name="fix_contexts_note3">к тому, что система не будет запускаться.</string> + <string name="swipe_to_fix_contexts">Свайп для исправлен. контекста</string> + <string name="swipe_fix_contexts"> Исправить контекст</string> + <string name="fixing_contexts">Исправление контекста...</string> + <string name="fix_contexts_complete">Исправление контекста завершено</string> + <string name="reboot_hdr">Перезагрузка</string> + <string name="su_hdr">Проверика SuperSU</string> + <string name="su_note1">В вашем устройстве отсутствует рут-доступ.</string> + <string name="su_note2">Установить SuperSU сейчас?</string> + <string name="su_note3">Рут-доступ будет активирован.</string> + <string name="su_cancel">Не устанавливать</string> + <string name="swipe_su_to_install">Свайп для установки</string> + <string name="swipe_su_install"> Установка</string> + <string name="su_installing">Установка SuperSU</string> + <string name="sel_storage_list">Выберите накопитель</string> + <string name="ok_btn">OK</string> + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">Чтение SELinux-контекста не поддерживается ядром.</string> + <string name="full_selinux">Присутствует полная поддержка SELinux.</string> + <string name="no_selinux">Отсутствует поддержка SELinux (нет libselinux).</string> + <string name="mtp_enabled">MTP Включено</string> + <string name="mtp_crash">Сбой MTP: MTP не запущен при загрузке.</string> + <string name="decrypt_success">Расшифровка выполнена успешно с паролем по умолчанию.</string> + <string name="unable_to_decrypt">Невозможно расшифровать с паролем по умолчанию. Возможно потребуется выполнить форматирование Data.</string> + <string name="generating_md51">Вычисление MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * Вычисление md5...</string> + <string name="md5_created"> * MD5 создана.</string> + <string name="md5_error"> * Ошибка MD5!</string> + <string name="md5_compute_error"> * Ошибка вычисления MD5.</string> + <string name="current_date">(Текущая дата)</string> + <string name="auto_generate">(Создать автоматически)</string> + <string name="unable_to_locate_partition">Не удается найти '{1}' раздел для расчета копирования.</string> + <string name="no_partition_selected">Не выбраны разделы для резервного копирования.</string> + <string name="total_partitions_backup"> * Общее количество разделов для резервного копирования: {1}</string> + <string name="total_backup_size"> * Общий объем данных: {1} МБ</string> + <string name="available_space"> * Доступный объем: {1} МБ</string> + <string name="unable_locate_storage">Не удается найти накопитель для хранения.</string> + <string name="no_space">В накопителе для хранения недостаточно свободного места.</string> + <string name="backup_started">[РЕЗЕРВНОЕ КОПИРОВАНИЕ НАЧАТО]</string> + <string name="backup_folder"> * Папка для резервной копии: {1}</string> + <string name="fail_backup_folder">Не удается создать папку для резервной копии.</string> + <string name="avg_backup_fs">Средняя скорость копирования для файлов: {1} МБ/сек</string> + <string name="avg_backup_img">Средняя скорость копирования для образов: {1} МБ/сек</string> + <string name="total_backed_size">[ВСЕГО СКОПИРОВАНО {1} МБ]</string> + <string name="backup_completed">[КОПИРОВАНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД(Ы)]</string> + <string name="restore_started">[ВОССТАНОВЛЕНИЕ НАЧАТО]</string> + <string name="restore_folder">Папка для восстановления: '{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} выполнено за {2} секунд(ы)]</string> + <string name="verifying_md5">Проверка MD5</string> + <string name="skip_md5">Пропуск проверки MD5 согласно настройкам.</string> + <string name="calc_restore">Вычисление информации о восстановлении...</string> + <string name="restore_read_only">Невозможно восстановить {1} -- смонтировано только для чтения.</string> + <string name="restore_unable_locate">Не удается найти '{1}' раздел для восстановления.</string> + <string name="no_part_restore">Не выбраны разделы для восстановления.</string> + <string name="restore_part_count">Восстановление {1} разделов...</string> + <string name="total_restore_size">Общий размер для восстановления: {1} МБ</string> + <string name="updating_system_details">Обновление информации о системе</string> + <string name="restore_completed">[ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД(Ы)]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">Ошибка открытия: '{1}' ({2})</string> + <string name="unable_locate_part_backup_name">Не удается найти раздел для копирования: '{1}'</string> + <string name="unable_find_part_path">Не удается найти раздел по пути '{1}'</string> + <string name="update_part_details">Обновление информации о разделах...</string> + <string name="update_part_details_done">...готово</string> + <string name="wiping_dalvik">Очистка директорий Dalvik Cache...</string> + <string name="cleaned">Очищены: {1}...</string> + <string name="dalvik_done">-- Очистка директорий Dalvik Cache завершена!</string> + <string name="no_andsec">Не найдены разделы android secure.</string> + <string name="unable_to_locate">{1} не найден.</string> + <string name="wiping_datamedia">Очистка внутренней памяти -- /data/media...</string> + <string name="unable_to_mount">Не удается смонтировать {1}</string> + <string name="unable_to_mount_internal">Не удается смонтировать internal_storage</string> + <string name="unable_to_mount_storage">Не удается смонтировать накопитель</string> + <string name="fail_decrypt">Не удается расшифровать data.</string> + <string name="no_crypto_support">Шифрование не добавлено в эту сборку, пинайте разработчика.</string> + <string name="decrypt_success_dev">Раздел Data успешно расшифрован, новое блочное устройство: '{1}'</string> + <string name="decrypt_success_nodev">Раздел Data успешно расшифрован</string> + <string name="done">Готово.</string> + <string name="start_partition_sd">Разметка SD-карты...</string> + <string name="partition_sd_locate">Не удалось найти устройство для разметки.</string> + <string name="ext_swap_size">Размер EXT + Swap превышает размер sdcard.</string> + <string name="remove_part_table">Удаление таблицы разделов...</string> + <string name="unable_rm_part">Не удается удалить таблицу разделов.</string> + <string name="create_part">Создание раздела {1}...</string> + <string name="unable_to_create_part">Не удается создать раздел {1}.</string> + <string name="format_sdext_as">Форматирование sd-ext в {1}...</string> + <string name="part_complete">Разметка завершена.</string> + <string name="unable_to_open">Не удается открыть '{1}'.</string> + <string name="mtp_already_enabled">MTP уже включен</string> + <string name="mtp_fail">Не удалось включить MTP</string> + <string name="no_mtp">Поддержка MTP отсутствует</string> + <string name="image_flash_start">[ПРОШИВКА ОБРАЗА НАЧАТА]</string> + <string name="img_to_flash">Образ для прошивки: '{1}'</string> + <string name="flash_unable_locate">Не удается найти раздел '{1}'.</string> + <string name="no_part_flash">Не выбраны разделы для прошивки.</string> + <string name="too_many_flash">Выбрано слишком много разделов для прошивки.</string> + <string name="invalid_flash">Указан неверный раздел для прошивки.</string> + <string name="flash_done">[ПРОШИВКА ОБРАЗА ЗАВЕРШЕНА]</string> + <string name="wiping">Очистка {1}</string> + <string name="repair_not_exist">{1} не существует! Невозможно восстановить!</string> + <string name="repairing_using">Восстановление {1} с помощью {2}...</string> + <string name="unable_repair">Невозможно восстановить {1}.</string> + <string name="mount_data_footer">Не удалось смонтировать /data, не найден крипто-ключ.</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">Невозможно создать папку '{1}' ({2}).</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">Не удается смонтировать '{1}' ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">Не удается размонтировать '{1}' ({2})</string> + <string name="cannot_resize">Невозможно изменить размер {1}.</string> + <string name="repair_resize">Восстановление {1} перед изменением размера.</string> + <string name="unable_resize">Не удается изменить размер {1}.</string> + <string name="no_md5_found">Отсутствует файл md5 для '{1}'. Пожалуйста отмените выбор проверки MD5 при восстановлении.</string> + <string name="md5_fail_match">MD5 не соответствует '{1}'.</string> + <string name="md5_matched">MD5 соответствует '{1}'.</string> + <string name="fail_decrypt_tar">Не удается расшифровать tar-файл '{1}'</string> + <string name="format_data_msg">Вам, возможно, потребуется перезагрузись рекавери, чтобы иметь возможность использовать /data снова.</string> + <string name="format_data_err">Невозможно отформатировать и удалить шифрование.</string> + <string name="formatting_using">Форматирование {1} с помощью {2}...</string> + <string name="unable_to_wipe">Невозможно очистить {1}.</string> + <string name="cannot_wipe">Раздел {1} не может быть очищен.</string> + <string name="remove_all">Удаление всех файлов в '{1}'</string> + <string name="wiping_data">Очистка /data без очистки /data/media ...</string> + <string name="backing_up">Резервное копирование {1}...</string> + <string name="backup_storage_warning">Резервное копирование {1}, за исключением файлов во внутренней памяти, таких как фотографии или загрузки.</string> + <string name="backing">Резервное копирование</string> + <string name="backup_size">Размер файла резервной копии для '{1}' 0 байт.</string> + <string name="datamedia_fs_restore">ВНИМАНИЕ: Эта резервная копия /data была создана с файловой системы {1}! Резервная копия может не загрузиться, если вы не измените обратно на {1}.</string> + <string name="restoring">Восстановление {1}...</string> + <string name="restoring_hdr">Восстановление</string> + <string name="recreate_folder_err">Невозможно заново создать папку {1}.</string> + <string name="img_size_err">Размер образа больше размера целевого устройства</string> + <string name="flashing">Прошивка {1}...</string> + <string name="backup_folder_set">Папка для резервной копии установлена в '{1}'</string> + <string name="locate_backup_err">Не удается найти резервную копию '{1}'</string> + <string name="set_restore_opt">Установки опций восстановления: '{1}':</string> + <string name="md5_check_skip">Пропуск проверки MD5 включен</string> + <string name="ors_encrypt_restore_err">Не удается использовать OpenRecoveryScript для восстановления зашифрованной резервной копии.</string> + <string name="mounting">Монтирование</string> + <string name="unmounting">Размонтирование</string> + <string name="mounted">'{1}' смонтирован</string> + <string name="unmounted">'{1}' размонтирован</string> + <string name="setting">Установка '{1}' в '{2}'</string> + <string name="setting_empty">Установка значения '{1}' в пустое</string> + <string name="making_dir1">Создание директории</string> + <string name="making_dir2">Создание директории '{1}'</string> + <string name="running_command">Запуск команды</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">Запуск ADB Sideload...</string> + <string name="need_new_adb">Вам необходим adb 1.0.32 или новее для выполнения sideload на этом устр-ве.</string> + <string name="no_pwd">Не предоставлен пароль.</string> + <string name="done_ors">Завершено выполнение файла сценария</string> + <string name="injecttwrp">Введение TWRP в образ boot...</string> + <string name="zip_err">Ошибка при установке zip файла '{1}'</string> + <string name="installing_zip">Установка zip файла '{1}'</string> + <string name="select_backup_opt">Установка опций резервного копирования:</string> + <string name="compression_on">Сжатие включено</string> + <string name="md5_off">Вычисление MD5 выключено</string> + <string name="backup_fail">Ошибка резервного копирования</string> + <string name="backup_clean">Ошибка резервного копирования. Очистка папки с резервной копией.</string> + <string name="running_recovery_commands">Выполнение команд рекавери</string> + <string name="recovery_commands_complete">Команды рекавери завершены</string> + <string name="running_ors">Выполнение OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript выполнен</string> + <string name="invalid_zip_format">Неверный формат zip файла!</string> + <string name="check_for_md5">Проверка MD5-файлов...</string> + <string name="fail_sysmap">Не удалось отобразить в память файл '{1}'</string> + <string name="verify_zip_sig">Проверка подписи zip...</string> + <string name="verify_zip_fail">Подпись Zip не прошла проверку!</string> + <string name="verify_zip_done">Подпись Zip проверена успешно.</string> + <string name="zip_corrupt">Zip-файл поврежден!</string> + <string name="no_md5">Пропуск проверки MD5: не найден MD5-файл</string> + <string name="md5_fail">MD5 не соответствует</string> + <string name="md5_match">MD5 соответствует</string> + <string name="pid_signal">Процесс {1} завершился с кодом {2}</string> + <string name="pid_error">Процесс {1} завершился с ОШИБКОЙ: {2}</string> + <string name="install_dumlock">Установка HTC Dumlock в систему...</string> + <string name="dumlock_restore">Восстановление оригинального boot...</string> + <string name="dumlock_reflash">Перепрошивка recovery в boot...</string> + <string name="run_script">Запуск сценария {1}...</string> + <string name="rename_stock">Переименование файла стокового рекавери в /system для предотвращения возврата на стоковое рекавери вместо TWRP.</string> + <string name="split_backup">Разделение резервной копии на несколько архивов...</string> + <string name="backup_error">Ошибка создания резервной копии.</string> + <string name="restore_error">Ошибка восстановления резервной копии.</string> + <string name="split_thread">Разделение идентификатора потока {1} в архив {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu из %llu файлов, %i%%</string> + <string name="size_progress">%llu МБ из %llu МБ, %i%%</string> + <string name="decrypt_cmd">Попытка расшифровать раздел данных с помощью командной строки.</string> + <string name="base_pkg_err">Неудача при загрузке базовых пакетов.</string> + <string name="simulating">Имитация действий...</string> + <string name="backup_cancel">Резервное копирование отменено</string> + <string name="config_twrp">Конфигурирование TWRP...</string> + <string name="config_twrp_err">Невозможно сконфигурировать TWRP с этим ядром.</string> + <string name="copy_log">recovery.log скопирован в {1}.</string> + <string name="max_queue">Максимум zip в очереди достигнут!</string> + <string name="min_queue">Минимум zip в очереди достигнут!</string> + <string name="screenshot_saved">Скриншот сохранен в {1}</string> + <string name="screenshot_err">Не удалось сделать скриншот!</string> + <string name="zip_wipe_cache">Один или более zip запрашивают очистку cache -- Очистка cache...</string> + <string name="and_sec_wipe_err">Невозможно очистить android secure</string> + <string name="dalvik_wipe_err">Не удалось очистить dalvik</string> + <string name="auto_gen">(Создать автоматически)</string> + <string name="curr_date">(Текущая дата)</string> + <string name="backup_name_len">Имя резервной копии слишком длинное.</string> + <string name="backup_name_invalid">Имя резервной копии '{1}' содержит недопустимые символы: '{1}'</string> + <string name="no_real_sdcard">Отмена, т.к. в устройстве отсутствует реальная SD-карта!</string> + <string name="cancel_sideload">Отмена ADB Sideload...</string> + <string name="change_fs_err">Ошибка при изменении файловой системы.</string> + <string name="theme_ver_err">Версия темы не соответствует версии TWRP. Используется тема по умолчанию.</string> + <string name="up_a_level">(в родительский каталог)</string> + <string name="install_reboot" version="2">Устройство будет перезагружено через %tw_sleep% сек.</string> + <string name="adbbackup_error">Ошибка резервного копирования по ADB. Выход...</string> + <string name="adbbackup_control_error">Невозможно записать в канал управления ADB.</string> + <string name="twrp_adbbu_option">-- эта опция позволяет делать резервное копирование по adb</string> + <string name="partition_not_found">путь: {1} отсутсвует в списке разделов.</string> + <string name="copy_kernel_log">Kernel Log скопирован в {1}</string> + <string name="include_kernel_log">Добавить Kernel Log</string> + <string name="unable_set_boot_slot">Ошибка смены слота загрузки bootloader на {1}</string> + </resources> +</language> diff --git a/gui/theme/common/languages/sk.xml b/gui/theme/common/languages/sk.xml new file mode 100644 index 000000000..42f713ba7 --- /dev/null +++ b/gui/theme/common/languages/sk.xml @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<language>
+ <display>Slovak</display>
+ <resources>
+ <!-- Font overrides - only change these if your language requires special characters -->
+ <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" />
+
+ <string name="system">Systém</string>
+ <string name="system_image">Image systému</string>
+ <string name="vendor">Dodávateľ</string>
+ <string name="vendor_image">Logo dodávateľa</string>
+ <string name="boot">Boot</string>
+ <string name="recovery">Recovery</string>
+ <string name="cache">Cache</string>
+ <string name="data">Data</string>
+ <string name="sdcard">SD karta</string>
+ <string name="internal">Interné úložisko</string>
+ <string name="microsd">Mikro SD karta</string>
+ <string name="usbotg">USB OTG</string>
+ <string name="android_secure">Android Secure</string>
+ <string name="dalvik">Dalvik / ART Cache</string>
+ <string name="sdext">SD-EXT</string>
+ <string name="adopted_data">Prijaté dáta</string>
+ <string name="adopted_storage">Prijaté úložisko</string>
+ <string name="twrp_header">Team Win Recovery Project</string>
+ <string name="twrp_watch_header">TWRP %tw_version%</string>
+ <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string>
+ <string name="battery_pct">Batéria: %tw_battery%</string>
+ <string name="sort_by_name">Zoradiť podľa názvu</string>
+ <string name="sort_by_date">Zoradiť podľa dátumu</string>
+ <string name="sort_by_size">Zoradiť podľa veľkosti</string>
+ <string name="sort_by_name_only">Názov</string>
+ <string name="sort_by_date_only">Dátum</string>
+ <string name="sort_by_size_only">Veľkosť</string>
+ <string name="tab_general">VŠEOBECNÉ</string>
+ <string name="tab_options">MOŽNOSTI</string>
+ <string name="tab_backup">ZÁLOHOVANIE</string>
+ <string name="tab_time_zone">ČASOVÉ PÁSMO</string>
+ <string name="tab_screen">OBRAZOVKA</string>
+ <string name="tab_vibration">VIBRÁCIE</string>
+ <string name="tab_language">JAZYK</string>
+ <string name="install_btn">Inštalovať</string>
+ <string name="wipe_btn">Vymazať</string>
+ <string name="backup_btn">Zálohovať</string>
+ <string name="restore_btn">Obnoviť</string>
+ <string name="mount_btn">Pripojiť</string>
+ <string name="settings_btn">Nastavenia</string>
+ <string name="advanced_btn">Rozšírené</string>
+ <string name="reboot_btn">Reštartovať</string>
+ <string name="files_btn">Súbory</string>
+ <string name="copy_log_btn">Kopírovať log</string>
+ <string name="select_type_hdr">Vyberte typ</string>
+ <string name="install_zip_hdr">Inštalovať Zip</string>
+ <string name="install_zip_btn">Inštalovať Zip</string>
+ <string name="install_image_hdr">Inštalovať image</string>
+ <string name="install_image_btn">Inštalovať image</string>
+ <string name="install_select_file_hdr">Vybrať súbor</string>
+ <string name="file_selector_folders_hdr">Priečinky</string>
+ <string name="select_file_from_storage">Vyberte súbor z: %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="adb_sideload_btn">ADB Sideload</string>
+ <string name="install_hdr">Inštalovať</string>
+ <string name="select_storage_hdr">Vyberte úložisko</string>
+ <string name="select_storage_btn">Vyberte úložisko</string>
+ <string name="queue_hdr">Poradie</string>
+ <string name="zip_queue_count">%tw_zip_queue_count% / max 10 súborov v poradí</string>
+ <string name="zip_queue_count_s">Súbor %tw_zip_queue_count% z 10:</string>
+ <string name="zip_warn1">Táto operácia môže nainštalovať nekompatibilný</string>
+ <string name="zip_warn2">softvér a znefunkčniť zariadenie.</string>
+ <string name="zip_back_cancel">Stlačte Naspäť pre zrušenie pridania zip.</string>
+ <string name="zip_back_clear">Stlačte Naspäť pre vyčistenie zoznamu.</string>
+ <string name="folder">Zložka:</string>
+ <string name="file">Súbor:</string>
+ <string name="zip_sig_chk">Overenie podpisu zip</string>
+ <string name="inject_twrp_chk">Nainštalovať TWRP po inštalácií</string>
+ <string name="options_hdr">Nastavenia</string>
+ <string name="confirm_flash_hdr">Potvrdiť inštaláciu</string>
+ <string name="zip_queue">Poradie:</string>
+ <string name="options">Nastavenia:</string>
+ <string name="swipe_confirm"> Potvrdiť</string>
+ <string name="zip_add_btn">Pridať viac Zip</string>
+ <string name="zip_clear_btn">Vyčistiť zoznam Zip</string>
+ <string name="install_zip_count_hdr">Nainštalovať Zip %tw_zip_index% z %tw_zip_queue_count%</string>
+ <string name="installing_zip_xml">Inštalácia Zip: %tw_file%</string>
+ <string name="failed">Neúspešné</string>
+ <string name="successful">Úspešné</string>
+ <string name="install_failed">Inštalácia zlyhala</string>
+ <string name="install_successful">Inštalácia dokončená</string>
+ <string name="wipe_cache_dalvik_btn">Vymazať cache/dalvik</string>
+ <string name="reboot_system_btn">Reštartovať systém</string>
+ <string name="install_sel_target">Vyberte cieľovú partíciu</string>
+ <string name="flash_image_select">Vyberte cieľovú partíciu pre zápis image:</string>
+ <string name="target_partition">Cieľová partícia:</string>
+ <string name="flashing_image">Zapisovanie image...</string>
+ <string name="image_flashed">Image nainštalovaný</string>
+ <string name="wipe_cache_dalvik_confirm">Vymazať cache & dalvik?</string>
+ <string name="wiping_cache_dalvik">Mazanie cache & dalvik...</string>
+ <string name="wipe_cache_dalvik_complete">Vymazanie cache & dalvik dokončené</string>
+ <string name="swipe_wipe">Potiahnite pre vymazanie</string>
+ <string name="swipe_wipe_s"> Vymazanie</string>
+ <string name="no_os1">Nie je nainštalovaný OS! Ste</string>
+ <string name="no_osrb">si istý, že chcete reštartovať?</string>
+ <string name="no_ospo">si istý, že chcete vypnúť zariadenie?</string>
+ <string name="rebooting">Reštartovanie...</string>
+ <string name="swipe_reboot">Potiahnite pre reštart</string>
+ <string name="swipe_reboot_s"> Reštart</string>
+ <string name="swipe_flash">Potiahnite pre potvrdenie</string>
+ <string name="confirm_action">Potvrdiť akciu</string>
+ <string name="back_cancel">Pre zrušenie stlačte tlačidlo naspäť.</string>
+ <string name="cancel_btn">Zrušiť</string>
+ <string name="wipe_hdr">Vymazať</string>
+ <string name="factory_reset_hdr">Továrne nastavenia</string>
+ <string name="factory_reset_btn">Továrne nastavenia</string>
+ <string name="factory_reset1">Vymazať Dáta, Cache a Dalvik</string>
+ <string name="factory_reset2">(nezahŕňa vnútornú pamäť)</string>
+ <string name="factory_reset3">Väčšinou je</string>
+ <string name="factory_reset4">potrebné len vymazanie.</string>
+ <string name="factory_resetting">Továrne nastavenia...</string>
+ <string name="advanced_wipe_hdr">Rozšírené vymazanie</string>
+ <string name="advanced_wipe_btn">Rozšírené vymazanie</string>
+ <string name="wipe_enc_confirm">Vymazať šifrovanie z Data?</string>
+ <string name="formatting_data">Formátovanie Data partície...</string>
+ <string name="swipe_format_data">Potiahnite pre voľbu Formátovať Data</string>
+ <string name="swipe_format_data_s"> Formátovať Data</string>
+ <string name="factory_reset_complete">Továrne nastavenia ukončené</string>
+ <string name="sel_part_hdr">Vyberte partície</string>
+ <string name="wipe_sel_confirm">Vymazať vybrané partície?</string>
+ <string name="wiping_part">Mazanie partícií...</string>
+ <string name="wipe_complete">Mazanie dokončené</string>
+ <string name="sel_part_wipe">Vyberte partície na vymazanie:</string>
+ <string name="invalid_part_sel">Neplatný výber partície</string>
+ <string name="format_data_hdr">Formátovať Data</string>
+ <string name="format_data_btn">Formátovať Data</string>
+ <string name="format_data_ptr1">Formátovanie Data vymaže všetky aplikácie,</string>
+ <string name="format_data_ptr2">zálohy, fotky, videá, hudbu</string>
+ <string name="format_data_ptr3">a vymaže šifrovanie interného úložiska.</string>
+ <string name="format_data_adopted">Zahŕňa adoptovanú pamäť</string>
+ <string name="format_data_lcp1">Formátovanie Data vymaže všetky aplikácie, zálohy, fotografie, videá, hudbu</string>
+ <string name="format_data_lcp2">a vymaže šifrovanie interného úložiska.</string>
+ <string name="format_data_wtc1">Formátovanie Data vymaže všetky aplikácie,</string>
+ <string name="format_data_wtc2">zálohy a hudbu. Tento proces je nezvratný.</string>
+ <string name="format_data_undo">Toto je nezvratné.</string>
+ <string name="format_data_complete">Formátovanie Data je hotové</string>
+ <string name="yes_continue">Napíšte \"yes\" pre pokračovanie. Stlačte naspäť pre zrušenie.</string>
+ <string name="part_opt_hdr">Možnosti pre: %tw_partition_name%</string>
+ <string name="sel_act_hdr">Vyberte akciu</string>
+ <string name="file_sys_opt">Nastavenia súborového systému</string>
+ <string name="partition">Partície: %tw_partition_name%</string>
+ <string name="part_mount_point">Mount point: %tw_partition_mount_point%</string>
+ <string name="part_curr_fs">Súborový systém: %tw_partition_file_system%</string>
+ <string name="part_present_yes">Prítomný: Áno</string>
+ <string name="part_present_no">Prítomný: Nie</string>
+ <string name="part_removable_yes">Vymeniteľný: Áno</string>
+ <string name="part_removable_no">Vymeniteľný: Nie</string>
+ <string name="part_size">Veľkosť: %tw_partition_size%MB</string>
+ <string name="part_used">Použité: %tw_partition_used%MB</string>
+ <string name="part_free">Voľné: %tw_partition_free%MB</string>
+ <string name="part_backup_size">Veľkosť zálohy: %tw_partition_backup_size%MB</string>
+ <string name="resize_btn">Zväčšiť súborový systém</string>
+ <string name="resize_btn_s">Zväčšiť</string>
+ <string name="resize_confirm">Zväčšiť %tw_partition_name%?</string>
+ <string name="resizing">Zväčšenie...</string>
+ <string name="resize_complete">Zväčšenie dokončené</string>
+ <string name="swipe_resize">Potiahnite pre zväčšenie</string>
+ <string name="swipe_resize_s"> Zväčšenie</string>
+ <string name="repair_btn">Opraviť súborový systém</string>
+ <string name="repair_btn_s">Oprava</string>
+ <string name="repair_confirm">Opraviť %tw_partition_name%?</string>
+ <string name="repairing">Opravovanie...</string>
+ <string name="repair_complete">Oprava dokončená</string>
+ <string name="swipe_repair">Potiahnite pre opravu</string>
+ <string name="swipe_repair_s"> Oprava</string>
+ <string name="change_fs_btn">Zmeniť súborový systém</string>
+ <string name="change_fs_btn_s">Zmeniť</string>
+ <string name="change_fs_for_hdr">Zmeniť súborový systém pre: %tw_partition_name%</string>
+ <string name="change_fs_for_hdr_s">Partícia: %tw_partition_name% > Zvoľte súborový systém</string>
+ <string name="change_fs_warn1">Niektoré ROM alebo kernely nemusia podporovať niektoré</string>
+ <string name="change_fs_warn2">súborové systémy. Pokračujte opatrne!</string>
+ <string name="change_fs_confirm">Zmeniť %tw_partition_name%?</string>
+ <string name="formatting">Formátovanie...</string>
+ <string name="format_complete">Formátovanie dokončené</string>
+ <string name="swipe_change_fs">Potiahnite pre zmenu</string>
+ <string name="swipe_change_s"> Zmena</string>
+ <string name="back_btn">Naspäť</string>
+ <string name="wipe_enc_btn">Vymazať šifrovanie</string>
+ <string name="swipe_factory_reset">Potiahnite pre továrne nastavenia</string>
+ <string name="repair_change_btn">Opraviť alebo zmeniť súborový systém</string>
+ <string name="storage_hdr">Úložisko: %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="backup_hdr">Záloha</string>
+ <string name="backup_confirm_hdr">Potvrdiť zálohu</string>
+ <string name="encryption_tab">ŠIFROVANIE</string>
+ <string name="encryption">Šifrovanie:</string>
+ <string name="name">Názov:</string>
+ <string name="sel_part_backup">Vybrať partície pre zálohovanie:</string>
+ <string name="storage">Pamäť:</string>
+ <string name="enc_disabled">zakázané - pre povolenie zadajte heslo</string>
+ <string name="enc_enabled">povolené</string>
+ <string name="enable_backup_comp_chk">Povoliť kompresiu</string>
+ <string name="skip_md5_backup_chk">Vynechať generovanie MD5 počas zálohy</string>
+ <string name="disable_backup_space_chk">Nekontrolovať voľné miesto</string>
+ <string name="refresh_sizes_btn">Obnoviť veľkosti</string>
+ <string name="swipe_backup">Potiahnite pre zálohu</string>
+ <string name="append_date_btn">Pripojiť dátum</string>
+ <string name="backup_name_exists">Záloha s rovnakým názvom už existuje!</string>
+ <string name="encrypt_backup">Šifrovať zálohu?</string>
+ <string name="enter_pass">Zadajte heslo:</string>
+ <string name="enter_pass2">Zopakujte heslo:</string>
+ <string name="pass_not_match">Heslá sa nezhodujú!</string>
+ <string name="partitions">Partície:</string>
+ <string name="disabled">Zakázané</string>
+ <string name="enabled">Povolené</string>
+ <string name="backup_name_hdr">Názov zálohy</string>
+ <string name="progress">Priebeh:</string>
+ <string name="backup_complete">Zálohovanie je dokončené</string>
+ <string name="restore_hdr">Obnovenie</string>
+ <string name="sel_backup_hdr">Vyberte zálohu</string>
+ <string name="restore_sel_store_hdr">Vyberte zálohu z %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="restore_sel_pack_fs">Vyberte balíček pre obnovu:</string>
+ <string name="restore_enc_backup_hdr">Šifrovaná záloha</string>
+ <string name="restore_dec_fail">Heslo je nesprávne, skúste to znova!</string>
+ <string name="del_backup_btn">Vymazať zálohu</string>
+ <string name="del_backup_confirm">Vymazať zálohu?</string>
+ <string name="del_backup_confirm2">Toto je nezvratné!</string>
+ <string name="deleting_backup">Vymazávanie zálohy...</string>
+ <string name="backup_deleted">Vymazanie zálohy dokončené</string>
+ <string name="swipe_delete">Potiahnite pre vymazanie</string>
+ <string name="swipe_delete_s"> Vymazať</string>
+ <string name="restore_try_decrypt">Šifrovaná záloha - pokus o dešifrovanie</string>
+ <string name="restore_try_decrypt_s">Pokus o dešifrovanie</string>
+ <string name="restore_backup_date">Záloha vytvorená %tw_restore_file_date%</string>
+ <string name="restore_sel_part">Vybrať partície pre obnovu:</string>
+ <string name="restore_enable_md5_chk">Povoliť kontrolu MD5 na zálohovaných súboroch</string>
+ <string name="restore_complete">Obnova dokončená</string>
+ <string name="swipe_restore">Potiahnite pre obnovu</string>
+ <string name="swipe_restore_s"> Obnoviť</string>
+ <string name="rename_backup_hdr">Premenovať zálohu</string>
+ <string name="rename_backup_confirm">Premenovať zálohu?</string>
+ <string name="rename_backup_confirm2">Toto je nezvratné!</string>
+ <string name="renaming_backup">Premenovanie zálohy...</string>
+ <string name="rename_backup_complete">Premenovanie zálohy dokončené</string>
+ <string name="swipe_to_rename">Potiahnutím premenujete</string>
+ <string name="swipe_rename"> Premenovať</string>
+ <string name="confirm_hdr">Potvrdiť</string>
+ <string name="mount_hdr">Pripojiť</string>
+ <string name="mount_sel_part">Vybrať partície pre pripojenie:</string>
+ <string name="mount_sys_ro_chk">Pripojiť partície v režime na čítanie</string>
+ <string name="mount_sys_ro_s_chk">Pripojiť systém v režime na čítanie</string>
+ <string name="decrypt_data_btn">Dešifrovať Data</string>
+ <string name="disable_mtp_btn">Zakázať MTP</string>
+ <string name="enable_mtp_btn">Povoliť MTP</string>
+ <string name="mount_usb_storage_btn">Pripoj. ukl. priestor USB</string>
+ <string name="usb_storage_hdr">Ukladací priestor USB</string>
+ <string name="usb_stor_mnt1">Ukladací priestor USB pripojený</string>
+ <string name="usb_stor_mnt2">Uistite sa, ze ste zariadenie odobrali</string>
+ <string name="usb_stor_mnt3">z počítača pred odpojením!</string>
+ <string name="unmount_btn">Odpojiť</string>
+ <string name="rb_system_btn">Systém</string>
+ <string name="rb_poweroff_btn">Vypnúť</string>
+ <string name="rb_recovery_btn">Recovery</string>
+ <string name="rb_bootloader_btn">Bootloader</string>
+ <string name="rb_download_btn">Stiahnuť</string>
+ <string name="turning_off">Vypínanie...</string>
+ <string name="swipe_power_off">Potiahnite pre vypnutie</string>
+ <string name="swipe_power_off_s">Vypnúť</string>
+ <string name="sys_ro_hdr">Nezmenená systémová partícia</string>
+ <string name="sys_ro_keep">Ponechať System v režime na čítanie?</string>
+ <string name="sys_rop1">TWRP môže ponechať systémovú partíciu nezmenenú</string>
+ <string name="sys_rop2">čo zjednoduší inštaláciu oficiálnych aktualizácií.</string>
+ <string name="sys_rop3">TWRP sa nezabráni oficiálnej ROM</string>
+ <string name="sys_rop4">prepísať TWRP a nebude ponúkať rootovanie zariadenia.</string>
+ <string name="sys_rop5">Inštalovanie Zip alebo operácie cez adb môžu stále</string>
+ <string name="sys_rop6">modifikovať systémovú partíciu.</string>
+ <string name="sys_rol1">TWRP môže ponechať systémovú partíciu nezmenenú čo zjednoduší inštaláciu oficiálnych aktualizácií.</string>
+ <string name="sys_rol2">TWRP nezabráni oficiálnej ROM prepísať TWRP a nebude ponúkať rootovanie zariadenia.</string>
+ <string name="sys_rol3">Inštalovanie Zip alebo operácie cez adb môžu stále modifikovať systémovú partíciu.</string>
+ <string name="sys_ro_never_show_chk">Viac nezobrazovať túto obrazovku pri štarte</string>
+ <string name="sys_ro_keep_ro_btn">Ponechať v režime na čítanie</string>
+ <string name="swipe_allow_mod">Potiahnuť pre povolenie zmien</string>
+ <string name="swipe_allow_mod_s">Povoliť zmeny</string>
+ <string name="settings_hdr">Nastavenia</string>
+ <string name="settings_gen_hdr">Všeobecné</string>
+ <string name="settings_gen_s_hdr">Všeobecné</string>
+ <string name="settings_gen_btn">Všeobecné</string>
+ <string name="use_rmrf_chk">Použiť rm -rf namiesto formátovania</string>
+ <string name="use24clock_chk">Používať 24h formát času</string>
+ <string name="rev_navbar_chk">Prevrátené usporiadanie lišty</string>
+ <string name="simact_chk">Simulovať akcie pre testovanie témy</string>
+ <string name="simfail_chk">Simulovať neúspechy akcií</string>
+ <string name="ctr_navbar_rdo">Centrovať tlačidlá navigácie</string>
+ <string name="lft_navbar_rdo">Zarovnať tlačidlá navigácie vľavo</string>
+ <string name="rht_navbar_rdo">Zarovnať tlačidlá navigácie vpravo</string>
+ <string name="restore_defaults_btn">Obnoviť predvolené</string>
+ <string name="settings_tz_btn">Časové pásmo</string>
+ <string name="settings_screen_btn">Obrazovka</string>
+ <string name="settings_screen_bright_btn">Jas obrazovky</string>
+ <string name="settings_vibration_btn">Vibrovať</string>
+ <string name="settings_language_btn">Jazyk</string>
+ <string name="time_zone_hdr">Časové pásmo</string>
+ <string name="sel_tz_list">Vyberte časové pásmo:</string>
+ <string name="utcm11">(UTC -11) Samoa, Midwayské ostrovy</string>
+ <string name="utcm10">(UTC -10) Havaj</string>
+ <string name="utcm9">(UTC -9) Aljaška</string>
+ <string name="utcm8">(UTC -8) Tichomorský čas</string>
+ <string name="utcm7">(UTC -7) Západný (Horský) čas USA, Arizona</string>
+ <string name="utcm6">(UTC -6) Centrálny čas USA, Mexiko</string>
+ <string name="utcm5">(UTC -5) Východný čas USA, Indiana</string>
+ <string name="utcm4">(UTC -4) Atlantický čas, Caracas</string>
+ <string name="utcm3">(UTC -3) Brazília, Buenos Aires</string>
+ <string name="utcm2">(UTC -2) Stredoatlantický čas</string>
+ <string name="utcm1">(UTC -1) Azory, Cape Verde</string>
+ <string name="utc0">(UTC 0) Greenwichský čas, Londýn, Dublin, Lisbon</string>
+ <string name="utcp1">(UTC +1) Stredoeurópsky čas, Bratislava, Berlín, Brusel, Paríž</string>
+ <string name="utcp2">(UTC +2) Atény, Istanbul, Minsk, Káhira</string>
+ <string name="utcp3">(UTC +3) Moskva, Bagdad, Teherán</string>
+ <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string>
+ <string name="utcp5">(UTC +5) Islamabád, Karáčí, Jekaterinsburg</string>
+ <string name="utcp6">(UTC +6) Astana, Colombo, Dhakar</string>
+ <string name="utcp7">(UTC +7) Bangkok, Džakarta, Hanoj</string>
+ <string name="utcp8">(UTC +8) Peking, Hong Kong, Singapur</string>
+ <string name="utcp9">(UTC +9) Jakutsk, Tokyo, Soul</string>
+ <string name="utcp10">(UTC +10) Vladivostok, Sydney, Guam</string>
+ <string name="utcp11">(UTC +11) Magadan, Šalamúnové ostrovy</string>
+ <string name="utcp12">(UTC +12) Wellington, Fidži, Kamčatka</string>
+ <string name="sel_tz_offset">Zvoľte odchýlku (zvyčajne 0): %tw_time_zone_guioffset%</string>
+ <string name="tz_offset_none">Žiadna</string>
+ <string name="tz_offset_0">0</string>
+ <string name="tz_offset_15">15</string>
+ <string name="tz_offset_30">30</string>
+ <string name="tz_offset_45">45</string>
+ <string name="use_dst_chk">Použiť letný čas (DST)</string>
+ <string name="curr_tz">Aktuálne časové pásmo: %tw_time_zone%</string>
+ <string name="curr_tz_s">Aktuálne časové pásmo:</string>
+ <string name="set_tz_btn">Nastav časové pásmo</string>
+ <string name="settings_screen_hdr">Obrazovka</string>
+ <string name="settings_screen_timeout_hdr">Vypnutie obrazovky</string>
+ <string name="enable_timeout_chk">Povoliť vypnutie obrazovky</string>
+ <string name="screen_to_slider">Vypnutie obrazovky v sekundách:</string>
+ <string name="screen_to_slider_s">Vypnutie obrazovky v sekundách (0=zakázané): %tw_screen_timeout_secs%</string>
+ <string name="screen_to_na">Nastavenie vypnutia obrazovky je nedostupné</string>
+ <string name="screen_bright_slider">Jas: %tw_brightness_pct%%</string>
+ <string name="screen_bright_na">Nastavenie jasu je nedostupné</string>
+ <string name="vibration_hdr">Vibrovať</string>
+ <string name="button_vibration_hdr">Vibrovať pri dotyku</string>
+ <string name="kb_vibration_hdr">Vibrovať pri písaní</string>
+ <string name="act_vibration_hdr">Vibrovať pri akcii</string>
+ <string name="button_vibration">Vibrovať pri dotyku:</string>
+ <string name="kb_vibration">Vibrovať pri písaní:</string>
+ <string name="act_vibration">Vibrovať pri akcii:</string>
+ <string name="select_language">Výber jazyka:</string>
+ <string name="sel_lang_btn">Výber jazyka</string>
+ <string name="set_language_btn">Nastaviť jazyk</string>
+ <string name="advanced_hdr">Rozšírené</string>
+ <string name="copy_log_confirm">Skopírovať log na SD kartu?</string>
+ <string name="copying_log">Kopírovanie logu na SD kartu...</string>
+ <string name="copy_log_complete">Kopírovanie logu dokončené</string>
+ <string name="part_sd_btn">Rozdeliť SD kartu</string>
+ <string name="part_sd_s_btn">SD karta</string>
+ <string name="file_manager_btn">Súborový manažér</string>
+ <string name="language_hdr">Jazyk</string>
+ <string name="terminal_btn">Terminál</string>
+ <string name="reload_theme_btn">Načítať tému</string>
+ <string name="dumlock_btn">HTC Dumlock</string>
+ <string name="inject_twrp_btn">Vložiť TWRP</string>
+ <string name="inject_twrp_confirm">Znova vložiť TWRP?</string>
+ <string name="injecting_twrp">Vkladanie TWRP...</string>
+ <string name="inject_twrp_complete">Vloženie TWRP dokončené</string>
+ <string name="swipe_to_confirm">Potiahnite pre potvrdenie</string>
+ <string name="part_sd_hdr">Rozdeliť SD kartu</string>
+ <string name="invalid_partsd_sel">Musíte zvoliť odpojiteľné zariadenie</string>
+ <string name="part_sd_lose">Prídete o všetky súbory na vloženej SD karte!</string>
+ <string name="part_sd_undo">Toto je nezvratná akcia!</string>
+ <string name="part_sd_ext_sz">Veľkosť EXT:</string>
+ <string name="part_sd_swap_sz">Veľkosť Swap:</string>
+ <string name="part_sd_m">-</string>
+ <string name="part_sd_p">+</string>
+ <string name="file_system">Súborový systém:</string>
+ <string name="swipe_part_sd">Potiahnutím rozdelíte</string>
+ <string name="swipe_part_sd_s">Rozdelenie</string>
+ <string name="partitioning_sd">Delenie SD karty...</string>
+ <string name="partitioning_sd2">Môže to trvať niekoľko minút.</string>
+ <string name="part_sd_complete">Rozdelenie kompletné</string>
+ <string name="dumlock_hdr">HTC Dumlock</string>
+ <string name="dumlock_restore_btn">Obnoviť pôvodný boot.img</string>
+ <string name="dumlock_restore_confirm">Obnoviť pôvodný boot.img?</string>
+ <string name="dumlock_restoring">Obnovenie pôvodného boot.img...</string>
+ <string name="dumlock_restore_complete">Obnova pôvodného boot.img dokončená</string>
+ <string name="dumlock_reflash_btn">Prepísanie recovery</string>
+ <string name="dumlock_reflash_confirm">Prepísať recovery pri štarte?</string>
+ <string name="dumlock_reflashing">Prepísanie recovery pri štarte...</string>
+ <string name="dumlock_reflash_complete">Prepísanie recovery pri štarte dokončené</string>
+ <string name="dumlock_install_btn">Inštalovať HTC Dumlock</string>
+ <string name="dumlock_install_confirm">Inštalovať súbory HTC Dumlock do ROM?</string>
+ <string name="dumlock_installing">Inštalácia HTC Dumlock...</string>
+ <string name="dumlock_install_complete">Inštalácia HTC Dumlock dokončená</string>
+ <string name="swipe_to_unlock">Potiahnutím odomknúť</string>
+ <string name="swipe_unlock"> Odomknúť</string>
+ <string name="fm_hdr">Súborový manažér</string>
+ <string name="fm_sel_file">Vyberte súbor alebo adresár</string>
+ <string name="fm_type_folder">Adresár</string>
+ <string name="fm_type_file">Súbor</string>
+ <string name="fm_choose_act">Zvoľte akciu</string>
+ <string name="fm_selected">Zvolené %tw_fm_type%:</string>
+ <string name="fm_copy_btn">Kopírovať</string>
+ <string name="fm_copy_file_btn">Kopírovať súbor</string>
+ <string name="fm_copy_folder_btn">Kopírovať adresár</string>
+ <string name="fm_copying">Kopírovanie</string>
+ <string name="fm_move_btn">Presunúť</string>
+ <string name="fm_moving">Presúvanie</string>
+ <string name="fm_chmod755_btn">chmod 755</string>
+ <string name="fm_chmod755ing">chmod 755</string>
+ <string name="fm_chmod_btn">chmod</string>
+ <string name="fm_delete_btn">Vymazať</string>
+ <string name="fm_deleting">Vymazávanie</string>
+ <string name="fm_rename_btn">Premenovať</string>
+ <string name="fm_rename_file_btn">Premenovať súbor</string>
+ <string name="fm_rename_folder_btn">Premenovať adresár</string>
+ <string name="fm_renaming">Premenovávanie</string>
+ <string name="fm_sel_dest">Vyberte cieľový adresár</string>
+ <string name="fm_sel_curr_folder">Vyberte súčasný adresár</string>
+ <string name="fm_rename_hdr">Premenovať</string>
+ <string name="fm_set_perms_hdr">Nastaviť práva</string>
+ <string name="fm_perms">Práva:</string>
+ <string name="fm_complete">Operácia na súbore dokončená</string>
+ <string name="decrypt_data_hdr">Dešifrovať dáta</string>
+ <string name="decrypt_data_enter_pass">Zadajte heslo.</string>
+ <string name="decrypt_data_enter_pattern">Zadajte vzor.</string>
+ <string name="decrypt_data_trying">Pokus o dešifrovanie</string>
+ <string name="term_hdr">Príkaz terminálu</string>
+ <string name="term_s_hdr">Terminál</string>
+ <string name="term_kill_btn">ZABI</string>
+ <string name="term_sel_folder_hdr">Navigovať do počiatočného adresára</string>
+ <string name="adb_sideload_hdr">ADB Sideload</string>
+ <string name="sideload_wipe_dalvik_chk">Vymazať dalvik cache</string>
+ <string name="sideload_wipe_cache_chk">Vymazať cache</string>
+ <string name="swipe_to_sideload">Potiahnite pre spustenie sideload</string>
+ <string name="swipe_sideload"> Štart</string>
+ <string name="sideload_confirm">ADB Sideload</string>
+ <string name="sideload_usage">Použitie: adb sideload názov.zip</string>
+ <string name="sideload_complete">ADB Sideload dokončený</string>
+ <string name="reboot_hdr">Reštart</string>
+ <string name="su_hdr">Kontrola SuperSU</string>
+ <string name="su_note1">Vaše zariadenie nemá ROOT.</string>
+ <string name="su_note2">Chcete nainštalovať SuperSU?</string>
+ <string name="su_note3">Toto povolí ROOT práva na vašom zariadení.</string>
+ <string name="su_cancel">Neinštalovať</string>
+ <string name="swipe_su_to_install">Potiahnite pre inštaláciu ROOT</string>
+ <string name="swipe_su_install"> Inštalovať</string>
+ <string name="su_installing">Inštalácia SuperSU</string>
+ <string name="sel_storage_list">Vyberte úložisko</string>
+ <string name="ok_btn">OK</string>
+ <string name="no_kernel_selinux">Kernel nemá podporu pre čítanie obsahu SELinux.</string>
+ <string name="full_selinux">Plná podpora SELinux.</string>
+ <string name="no_selinux">Bez podpory SELinux (chýba libselinux).</string>
+ <string name="mtp_enabled">MTP povolené</string>
+ <string name="mtp_crash">MTP zlyhalo, MTP nebude spustené pri štarte.</string>
+ <string name="decrypt_success">Úspešne dešifrované s prednastaveným heslom.</string>
+ <string name="unable_to_decrypt">Nemožno dešifrovať s prednastaveným heslom. Možno budete musieť naformátovať partíciu Data.</string>
+ <string name="generating_md51">Generuje sa MD5</string>
+ <string name="generating_md52"> *Generuje sa Md5...</string>
+ <string name="md5_created"> *MD5 vygenerované.</string>
+ <string name="md5_error"> * chyba MD5!</string>
+ <string name="md5_compute_error"> * chyba pri výpočte MD5.</string>
+ <string name="current_date">(Aktuálny dátum)</string>
+ <string name="auto_generate">(Generovať automaticky)</string>
+ <string name="unable_to_locate_partition">Nemožno nájsť partíciu \'{1}\' pre výpočet zálohy.</string>
+ <string name="no_partition_selected">Žiadne partície vybrané na zálohovanie.</string>
+ <string name="total_partitions_backup"> * Počet partícií označených na zálohovanie: {1}</string>
+ <string name="total_backup_size"> * Konečná veľkosť zálohy: {1}MB</string>
+ <string name="available_space"> * Voľné miesto na úložisku: {1}MB</string>
+ <string name="unable_locate_storage">Nie je možné nájsť uložisko.</string>
+ <string name="no_space">Nedostatok miesta na úložisku.</string>
+ <string name="backup_started">[ZÁLOHOVANIE ZAČALO]</string>
+ <string name="backup_folder"> * Adresár zálohy: {1}</string>
+ <string name="fail_backup_folder">Nie je možné vytvoriť adresár zálohy.</string>
+ <string name="avg_backup_fs">Priemerná miera zálohovania súborových systémov: {1} MB/sek</string>
+ <string name="avg_backup_img">Priemerná miera zálohovania diskov: {1} MB/sek</string>
+ <string name="total_backed_size">[{1} MB ZÁLOH SPOLU]</string>
+ <string name="backup_completed">[ZÁLOHA DOKONČENÁ ZA {1} SEKÚND]</string>
+ <string name="restore_started">[ZAČIATOK OBNOVY]</string>
+ <string name="restore_folder">Obnoviť adresár: \'{1}\'</string>
+ <string name="verifying_md5">Kontrolovanie MD5</string>
+ <string name="skip_md5">Vynechanie kontroly MD5 na základe užívateľského nastavenia.</string>
+ <string name="calc_restore">Výpočet detailov obnovy...</string>
+ <string name="restore_read_only">Nie je možné obnoviť {1} -- pripojené len na čítanie.</string>
+ <string name="restore_unable_locate">Nie je možné nájsť partíciu \'{1}\' pre obnovu.</string>
+ <string name="no_part_restore">Žiadne partície neboli vybrané pre obnovu.</string>
+ <string name="restore_part_count">Obnova {1} partiícií...</string>
+ <string name="total_restore_size">Veľkosť obnovy je spolu {1}MB</string>
+ <string name="updating_system_details">Obnovovanie detailov systému</string>
+ <string name="restore_completed">[OBNOVA DOKONČENÁ ZA {1} SEKÚND]</string>
+ <string name="error_opening_strerr">Chyba pri otváraní: \'{1}\' ({2})</string>
+ <string name="unable_locate_part_backup_name">Nie je možné nájsť partíciu podľa názvu zálohy: \'{1}\'</string>
+ <string name="unable_find_part_path">Nie je možné nájsť partíciu na adrese \'{1}\'</string>
+ <string name="update_part_details">Obnova detailov partície...</string>
+ <string name="update_part_details_done">...hotovo</string>
+ <string name="wiping_dalvik">Vymazávanie adresárov dalvik cache...</string>
+ <string name="cleaned">Vyčistené: {1}...</string>
+ <string name="dalvik_done">-- Vyčistenie adresára Dalvik cache bolo dokončené!</string>
+ <string name="no_andsec">Žiadne zabezpečené android partície neboli nájdené.</string>
+ <string name="unable_to_locate">{1} nie je možné nájsť.</string>
+ <string name="wiping_datamedia">Vymazávanie interného úložiska -- /data/media...</string>
+ <string name="unable_to_mount">{1} nie je možné pripojiť</string>
+ <string name="unable_to_mount_internal">Nie je možné pripojiť interné úložisko</string>
+ <string name="unable_to_mount_storage">Nie je možné pripojiť úložisko</string>
+ <string name="fail_decrypt">Nie je možné dešifrovať data.</string>
+ <string name="no_crypto_support">Táto verzia bola skompilovaná bez podpory šifrovania.</string>
+ <string name="decrypt_success_dev">Dáta boli úspešne dešifrované, nový block device: \'{1}\'</string>
+ <string name="done">Hotovo.</string>
+ <string name="start_partition_sd">Delenie SD karty...</string>
+ <string name="partition_sd_locate">Nie je možné nájsť zariadenie na rozdelenie.</string>
+ <string name="ext_swap_size">Veľkosť EXT + Swap je väčšia ako veľkosť SD-karty.</string>
+ <string name="remove_part_table">Vymazávanie tabuľky rozdelenia...</string>
+ <string name="unable_rm_part">Nie je možné vymazať tabuľku rozdelenia.</string>
+ <string name="create_part">Vytváranie partície {1}...</string>
+ <string name="unable_to_create_part">Partíciu {1} nie je možné vytvoriť.</string>
+ <string name="format_sdext_as">Formátovanie sd-ext ako {1}...</string>
+ <string name="part_complete">Rozdelenie dokončené.</string>
+ <string name="unable_to_open">Nie je možné otvoriť \'{1}\'.</string>
+ <string name="mtp_already_enabled">MTP je už povolené</string>
+ <string name="mtp_fail">Nie je možné povoliť MTP</string>
+ <string name="no_mtp">Podpora MTP nie je zahrnutá</string>
+ <string name="image_flash_start">[ZÁPIS IMAGE SPUSTENÝ]</string>
+ <string name="img_to_flash">Obraz na zápis: \'{1}\'</string>
+ <string name="flash_unable_locate">Nie je možné nájsť partíciu \'{1}\' pre zápis.</string>
+ <string name="no_part_flash">Ná zápis neboli zvolené žiadne partície.</string>
+ <string name="too_many_flash">Na zápis je zvolených príliš veľa partícií.</string>
+ <string name="invalid_flash">Zvolená partícia nie je správna pre zápis.</string>
+ <string name="flash_done">[ZÁPIS IMAGE DOKONČENÝ]</string>
+ <string name="wiping">Mazanie {1}</string>
+ <string name="repair_not_exist">{1} neexistuje! Oprava nie je možná!</string>
+ <string name="repairing_using">Oprava {1} pomocou {2}...</string>
+ <string name="unable_repair">Nie je možné opraviť {1}.</string>
+ <string name="mount_data_footer">Nie je možné pripojiť /data a nájsť parametre šifrovania.</string>
+ <string name="create_folder_strerr">Adresár \'{1}\' nie je možné vytvoriť ({2}).</string>
+ <string name="fail_mount">Nie je možné pripojiť \'{1}\' ({2})</string>
+ <string name="fail_unmount">Nie je možné odpojiť \'{1}\' ({2})</string>
+ <string name="cannot_resize">Nie je možné zväčšiť {1}.</string>
+ <string name="repair_resize">Opravovanie {1} pred zväčšením.</string>
+ <string name="unable_resize">Nie je možné zväčšiť {1}.</string>
+ <string name="no_md5_found">Súbor MD5 sa nenašiel pre \'{1}\'. Prosím zvoľte Vypnúť kontrolu MD5 počas obnovy.</string>
+ <string name="md5_fail_match">MD5 nezodpovedá súboru \'{1}\'.</string>
+ <string name="md5_matched">MD5 sa zhoduje pre '{1}'.</string>
+ <string name="fail_decrypt_tar">Nie je možné dešifrovať súbor tar \'{1}\'</string>
+ <string name="format_data_msg">Mali by ste reštartovať recovery aby ste mohli znova používať /data.</string>
+ <string name="format_data_err">Nie je možné formátovať pre zrušenie šifrovania.</string>
+ <string name="formatting_using">Formátovanie {1} použitím {2}...</string>
+ <string name="unable_to_wipe">Nie je možné vymazať {1}.</string>
+ <string name="cannot_wipe">Partíciu {1} nie je možné vymazať.</string>
+ <string name="remove_all">Vymazanie všetkých súborov v \'{1}\'</string>
+ <string name="wiping_data">Vymazanie Data bez vymazania zložky /data/media...</string>
+ <string name="backing_up">Zálohovanie {1}...</string>
+ <string name="backing">Zálohovanie</string>
+ <string name="backup_size">Veľkosť zálohy pre \'{1}\' je 0 bajtov.</string>
+ <string name="datamedia_fs_restore">UPOZORNENIE: Táto záloha /data bola vytvorená pomocou systému súborov {1}! Záloha nebude bootovať pokiaľ sa nezmení naspäť na {1}.</string>
+ <string name="restoring">Obnovenie {1}...</string>
+ <string name="restoring_hdr">Obnovenie</string>
+ <string name="recreate_folder_err">Nie je možné vytvoriť adresár {1}.</string>
+ <string name="img_size_err">Veľkosť image je väčšia ako cieľová partícia</string>
+ <string name="flashing">Zapisovanie {1}...</string>
+ <string name="backup_folder_set">Adresár záloh nastavený na: \'{1}\'</string>
+ <string name="locate_backup_err">Zálohu \'{1}\' nie je možné nájsť</string>
+ <string name="set_restore_opt">Nastavenie možností obnovy: \'{1}\':</string>
+ <string name="md5_check_skip">Vynechanie kontroly MD5 zapnuté</string>
+ <string name="ors_encrypt_restore_err">Nie je možné použiť OpenRecoveryScript pre obnovu zašifrovanej zálohy.</string>
+ <string name="mounting">Pripájanie</string>
+ <string name="unmounting">Odpájanie</string>
+ <string name="mounted">\'{1}\' pripojený</string>
+ <string name="unmounted">\'{1}\' odpojený</string>
+ <string name="setting">Nastavenie \'{1}\' na \'{2}\'</string>
+ <string name="setting_empty">Nastavenie \'{1}\' na prázdne</string>
+ <string name="making_dir1">Vytváranie adresára</string>
+ <string name="making_dir2">Vytváranie adresára: \'{1}\'</string>
+ <string name="running_command">Spúšťanie príkazu</string>
+ <string name="sideload">ADB Sideload</string>
+ <string name="start_sideload">Spúšťanie funkcie ADB sideload...</string>
+ <string name="need_new_adb">Pre použitie sideload na toto zariadenie potrebujete ADB 1.0.32 alebo novšie.</string>
+ <string name="no_pwd">Heslo nebolo zadané.</string>
+ <string name="done_ors">Vykonávanie skriptu dokončené</string>
+ <string name="injecttwrp">Vkladanie TWRP do boot.img...</string>
+ <string name="zip_err">Chyba pri inštalácií zip súboru \'{1}\'</string>
+ <string name="installing_zip">Inštalácia zip súboru \'{1}\'</string>
+ <string name="select_backup_opt">Nastavenie možností zálohy:</string>
+ <string name="compression_on">Kompresia zapnutá</string>
+ <string name="md5_off">Generovanie MD5 vypnuté</string>
+ <string name="backup_fail">Zálohovanie zlyhalo</string>
+ <string name="backup_clean">Zálohovanie zlyhalo. Čistenie adresára záloh.</string>
+ <string name="running_recovery_commands">Spúšťanie príkazov recovery</string>
+ <string name="recovery_commands_complete">Príkazy recovery dokončené</string>
+ <string name="running_ors">Spúšťanie OpenRecoveryScript</string>
+ <string name="ors_complete">OpenRecoveryScript dokončený</string>
+ <string name="no_updater_binary">Nie je možné nájsť \'{1}\' v súbore zip.</string>
+ <string name="check_for_md5">Kontrola MD5 súboru...</string>
+ <string name="fail_sysmap">Nie je možné namapovať súbor \'{1}\'</string>
+ <string name="verify_zip_sig">Overovanie podpisu zip súboru...</string>
+ <string name="verify_zip_fail">Overenie podpisu zip súboru zlyhalo!</string>
+ <string name="verify_zip_done">Podpis súboru zip úspešne overený.</string>
+ <string name="zip_corrupt">Súbor zip je poškodený!</string>
+ <string name="no_md5">Vynechanie kontroly MD5: súbor s MD5 nenájdený</string>
+ <string name="md5_fail">MD5 sa nezhoduje</string>
+ <string name="md5_match">MD5 sa zhoduje</string>
+ <string name="pid_signal">Proces {1} skončil so signálom: {2}</string>
+ <string name="pid_error">Proces {1} skončil s CHYBOU: {2}</string>
+ <string name="install_dumlock">Inštalovanie HTC Dumlock do systému...</string>
+ <string name="dumlock_restore">Obnovenie pôvodného boot.img...</string>
+ <string name="dumlock_reflash">Zapisovanie recovery do boot.img...</string>
+ <string name="run_script">Beh skriptu {1}...</string>
+ <string name="rename_stock">Premenovaný originál recovery súbor v /system pre zabránenie prepísania TWRP originál ROM.</string>
+ <string name="split_backup">Rozdelenie zálohy do viacerých archívov...</string>
+ <string name="backup_error">Chyba pri vytváraní zálohy.</string>
+ <string name="restore_error">Chyba počas procesu obnovy.</string>
+ <string name="split_thread">Rozdelenie ID vlákna {1} do archívu {2}</string>
+ <string name="file_progress">%llu z %llu súborov, %i%%</string>
+ <string name="size_progress">%lluMB z %lluMB, %i%%</string>
+ <string name="decrypt_cmd">Pokus o dešifrovanie data partície cez príkazový riadok.</string>
+ <string name="base_pkg_err">Nie je možné načítať základné balíčky.</string>
+ <string name="simulating">Simulovanie akcií...</string>
+ <string name="backup_cancel">Zálohovanie prerušené</string>
+ <string name="config_twrp">Konfigurovanie TWRP...</string>
+ <string name="config_twrp_err">Nie je možné konfigurovať TWRP s týmto kernelom.</string>
+ <string name="copy_log">Recovery log skopírovaný do {1}.</string>
+ <string name="max_queue">Dosiahnutý maximálny počet zip v zozname!</string>
+ <string name="min_queue">Dosiahnutý minimálny počet zip v zozname!</string>
+ <string name="screenshot_saved">Screenshot bol uložený do {1}</string>
+ <string name="screenshot_err">Nie je možné vytvoriť screenshot!</string>
+ <string name="zip_wipe_cache">Jeden alebo viac zip súborov vyžiadalo vymazanie cache -- Vymazávanie cache.</string>
+ <string name="and_sec_wipe_err">Nie je možné vymazať android secure</string>
+ <string name="dalvik_wipe_err">Nie je možné vymazať dalvik</string>
+ <string name="auto_gen">(Generovať automaticky)</string>
+ <string name="curr_date">(Aktuálny dátum)</string>
+ <string name="backup_name_len">Názov zálohy je príliš dlhý.</string>
+ <string name="backup_name_invalid">Názov zálohy \'{1}\' obsahuje neplatný znak: \'{1}\'</string>
+ <string name="no_real_sdcard">Toto zariadenie nemá skutočnú SD kartu! Prerušujem!</string>
+ <string name="cancel_sideload">Rušenie ADB sideload...</string>
+ <string name="change_fs_err">Chyba pri zmene súborového systému.</string>
+ <string name="theme_ver_err">Vlastná téma sa nezhoduje s verziou TWRP. Používa sa originál téma.</string>
+ </resources>
+</language>
diff --git a/gui/theme/common/languages/sl.xml b/gui/theme/common/languages/sl.xml new file mode 100644 index 000000000..2bf2ffe7b --- /dev/null +++ b/gui/theme/common/languages/sl.xml @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Slovenian</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">Sistem</string> + <string name="system_image">Sistemski odtis</string> + <string name="vendor">Prodajalec</string> + <string name="vendor_image">Odtis prodajalca</string> + <string name="boot">Zagon</string> + <string name="recovery">Obnovitev</string> + <string name="cache">Predpomnilnik</string> + <string name="data">Podatki</string> + <string name="sdcard">Kartica SD</string> + <string name="internal">Notranja pomnilniška naprava</string> + <string name="microsd">Kartica mikro SD</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Varni Android</string> + <string name="dalvik">Predpomnilnik Dalvik/ART</string> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Prevzeti podatki</string> + <string name="adopted_storage">Prevzeta pomnilniška naprava</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPE: %tw_cpu_temp% °C</string> + <string name="battery_pct">Baterija: %tw_battery%</string> + <string name="sort_by_name">Razvrsti po imenu</string> + <string name="sort_by_date">Razvrsti po datumu</string> + <string name="sort_by_size">Razvrsti po velikosti</string> + <string name="sort_by_name_only">Ime</string> + <string name="sort_by_date_only">Datum</string> + <string name="sort_by_size_only">Velikost</string> + <string name="tab_general">SPLOŠNO</string> + <string name="tab_options">MOŽNOSTI</string> + <string name="tab_backup">VAR. KOP.</string> + <string name="tab_time_zone">ČASOVNI PAS</string> + <string name="tab_screen">ZASLON</string> + <string name="tab_vibration">VIBRIRANJE</string> + <string name="tab_language">JEZIK</string> + <string name="install_btn">Namesti</string> + <string name="wipe_btn">Počisti</string> + <string name="backup_btn">Var. kopiraj</string> + <string name="restore_btn">Obnovi</string> + <string name="mount_btn">Priklopi</string> + <string name="settings_btn">Nastavitve</string> + <string name="advanced_btn">Napredno</string> + <string name="reboot_btn">Pon. zaženi</string> + <string name="files_btn">Datoteke</string> + <string name="copy_log_btn">Kopiraj dnevnik</string> + <string name="select_type_hdr">Izberite vrsto</string> + <string name="install_zip_hdr">Namesti ZIP</string> + <string name="install_zip_btn">Namesti ZIP</string> + <string name="install_image_hdr">Namesti odtis</string> + <string name="install_image_btn">Namesti odtis</string> + <string name="install_select_file_hdr">Izberite datoteko</string> + <string name="file_selector_folders_hdr">Mape</string> + <string name="select_file_from_storage">Izberite datoteko iz %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">Stransko nalaganje ADB</string> + <string name="install_hdr">Namesti</string> + <string name="select_storage_hdr">Izberite pomnilniško napravo</string> + <string name="select_storage_btn">Izberite pomnilniško napravo</string> + <string name="queue_hdr">Čakalna vrsta</string> + <string name="zip_queue_count">%tw_zip_queue_count% od največ 10 datotek v čakalni vrsti</string> + <string name="zip_queue_count_s">Datoteka %tw_zip_queue_count% od 10:</string> + <string name="zip_warn1">To opravilo lahko namesti nezdružljivo</string> + <string name="zip_warn2">programsko opremo in naredi napravo neuporabno.</string> + <string name="zip_back_cancel">Pritisnite Nazaj za preklic dodajanja tega ZIP-a.</string> + <string name="zip_back_clear">Pritisnite Nazaj za čiščenje čakalne vrste.</string> + <string name="folder">Mapa:</string> + <string name="file">Datoteka:</string> + <string name="zip_sig_chk">Preverjanje podpisa ZIP</string> + <string name="inject_twrp_chk">Vstavi TWRP po namestitvi</string> + <string name="options_hdr">Možnosti</string> + <string name="confirm_flash_hdr">Potrdite namestitev</string> + <string name="zip_queue">Čakalna vrsta:</string> + <string name="options">Možnosti:</string> + <string name="swipe_confirm"> Potrdi</string> + <string name="zip_add_btn">Dodaj več ZIP-ov</string> + <string name="zip_clear_btn">Počisti čakalno vrsto ZIP-ov</string> + <string name="install_zip_count_hdr">Namesti ZIP %tw_zip_index% od %tw_zip_queue_count%</string> + <string name="installing_zip_xml">Nameščanje ZIP-a: %tw_file%</string> + <string name="failed">Spodletelo</string> + <string name="successful">Uspelo</string> + <string name="install_failed">Namestitev je spodletela</string> + <string name="install_successful">Namestitev je uspela</string> + <string name="wipe_cache_dalvik_btn">Počisti predpomnilnik/Dalvik</string> + <string name="reboot_system_btn">Ponovno zaženi sistem</string> + <string name="install_sel_target">Izberite ciljni razdelek</string> + <string name="flash_image_select">Izberite razdelek za namestitev odtisa:</string> + <string name="target_partition">Ciljni razdelek:</string> + <string name="flashing_image">Nameščanje odtisa …</string> + <string name="image_flashed">Odtis nameščen</string> + <string name="wipe_cache_dalvik_confirm">Počisti predpomnilnik in Dalvik?</string> + <string name="wiping_cache_dalvik">Čiščenje predpomnilnika in Dalvika …</string> + <string name="wipe_cache_dalvik_complete">Čiščenje predpomnilnika in Dalvika končano</string> + <string name="swipe_wipe">Povlecite za čiščenje</string> + <string name="swipe_wipe_s"> Počisti</string> + <string name="no_os1">OS-a ni nameščenega! Ali res</string> + <string name="no_osrb">želite ponovno zagnati?</string> + <string name="no_ospo">želite izklopiti?</string> + <string name="rebooting">Ponovno zaganjanje …</string> + <string name="swipe_reboot">Povlecite za ponovni zagon</string> + <string name="swipe_reboot_s"> Ponovno zaženi</string> + <string name="swipe_flash">Povlecite za potrditev namestive</string> + <string name="confirm_action">Potrdite dejanje</string> + <string name="back_cancel">Pritisnite Nazaj za preklic.</string> + <string name="cancel_btn">Prekliči</string> + <string name="wipe_hdr">Počisti</string> + <string name="factory_reset_hdr">Ponastavitev na tov. vred.</string> + <string name="factory_reset_btn">Ponastavitev na tov. vred.</string> + <string name="factory_reset1">Počisti podatke, predpomnilnik in Dalvik</string> + <string name="factory_reset2">(brez notranje pomnilniške naprave)</string> + <string name="factory_reset3">Večinoma je to</string> + <string name="factory_reset4">edino čiščenje, ki ga potrebujete.</string> + <string name="factory_resetting">Ponastavitev na tov. vred. …</string> + <string name="advanced_wipe_hdr">Napredno čiščenje</string> + <string name="advanced_wipe_btn">Napredno čiščenje</string> + <string name="wipe_enc_confirm">Počisti šifriranje podatkov?</string> + <string name="formatting_data">Formatiranje podatkov …</string> + <string name="swipe_format_data">Povlecite za formatiranje podatkov</string> + <string name="swipe_format_data_s"> Formatiraj podatke</string> + <string name="factory_reset_complete">Ponastavitev na tovarniške vrednosti končana</string> + <string name="sel_part_hdr">Izberite razdelke</string> + <string name="wipe_sel_confirm">Počisti izbrane razdelke?</string> + <string name="wiping_part">Čiščenje razdelkov …</string> + <string name="wipe_complete">Čiščenje končano</string> + <string name="sel_part_wipe">Izberite razdelke za čiščenje:</string> + <string name="invalid_part_sel">Neveljavna izbira razdelkov</string> + <string name="format_data_hdr">Formatiraj podatke</string> + <string name="format_data_btn">Formatiraj podatke</string> + <string name="format_data_ptr1">Formatiranje podatkov bo počistilo vse programe,</string> + <string name="format_data_ptr2">varnostne kopije, slike, videoposnetke, predstavnost in</string> + <string name="format_data_ptr3">odstranilo šifriranje na notranji pomnilniški napravi.</string> + <string name="format_data_adopted">Vključno s prevzeto pomnilniško napravo</string> + <string name="format_data_lcp1">Formatiranje podatkov bo počistilo vse vaše programe, varnostne kopije, slike, videoposnetke, predstavnost in</string> + <string name="format_data_lcp2">odstranilo šifriranje na notranji pomnilniški napravi.</string> + <string name="format_data_wtc1">Formatiranje podatkov bo počistilo vse programe,</string> + <string name="format_data_wtc2">varnostne kopije in predstavnost. Tega ni mogoče razveljaviti.</string> + <string name="format_data_undo">Tega ni mogoče razveljaviti.</string> + <string name="format_data_complete">Formatiranje podatkov končano</string> + <string name="yes_continue">Vtipkajte \'yes\' za nadaljevanje. Pritisnite Nazaj za preklic.</string> + <string name="part_opt_hdr">Možnosti razdelkov za: %tw_partition_name%</string> + <string name="sel_act_hdr">Izberite dejanje</string> + <string name="file_sys_opt">Možnosti datotečnega sistema</string> + <string name="partition">Razdelek: %tw_partition_name%</string> + <string name="part_mount_point">Priklopna točka: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Datotečni sistem: %tw_partition_file_system%</string> + <string name="part_present_yes">Prisoten: da</string> + <string name="part_present_no">Prisoten: ne</string> + <string name="part_removable_yes">Odstranljiv: da</string> + <string name="part_removable_no">Odstranljiv: ne</string> + <string name="part_size">Velikost: %tw_partition_size% MB</string> + <string name="part_used">Uporabljeno: %tw_partition_used% MB</string> + <string name="part_free">Nezasedeno: %tw_partition_free% MB</string> + <string name="part_backup_size">Velikost varnostne kopije: %tw_partition_backup_size% MB</string> + <string name="resize_btn">Spremeni velikost dat. sistema</string> + <string name="resize_btn_s">Spr. velik.</string> + <string name="resize_confirm">Spremeni velikost %tw_partition_name%?</string> + <string name="resizing">Spreminjanje velikosti …</string> + <string name="resize_complete">Spreminjanje velikosti končano</string> + <string name="swipe_resize">Povlecite za spr. velikosti</string> + <string name="swipe_resize_s"> Spr. velikost</string> + <string name="repair_btn">Popravi datotečni sistem</string> + <string name="repair_btn_s">Popravi</string> + <string name="repair_confirm">Popravi %tw_partition_name%?</string> + <string name="repairing">Popravljanje …</string> + <string name="repair_complete">Popravljanje končano</string> + <string name="swipe_repair">Povlecite za popravilo</string> + <string name="swipe_repair_s"> Popravi</string> + <string name="change_fs_btn">Spremeni datotečni sistem</string> + <string name="change_fs_btn_s">Spremeni</string> + <string name="change_fs_for_hdr">Spremeni datotečni sistem za: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Razdelek: %tw_partition_name% > izberite datotečni sistem</string> + <string name="change_fs_warn1">Nekateri ROM-i ali jedra ne podpirajo vseh</string> + <string name="change_fs_warn2">datotečnih sistemov. Nadaljujte previdno!</string> + <string name="change_fs_confirm">Spremeni %tw_partition_name%?</string> + <string name="formatting">Formatiranje …</string> + <string name="format_complete">Formatiranje končano</string> + <string name="swipe_change_fs">Povlecite za spremembo</string> + <string name="swipe_change_s"> Spremeni</string> + <string name="back_btn">Nazaj</string> + <string name="wipe_enc_btn">Počisti šifriranje</string> + <string name="swipe_factory_reset">Povlecite za ponastavitev na tov. vrednosti</string> + <string name="repair_change_btn">Popravi ali Spremeni datotečni sistem</string> + <string name="storage_hdr">Pomnilniška naprava: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Var. kopiraj</string> + <string name="backup_confirm_hdr">Potrdite varnostno kopiranje</string> + <string name="encryption_tab">ŠIFRIRANJE</string> + <string name="encryption">Šifriranje:</string> + <string name="name">Ime:</string> + <string name="sel_part_backup">Izberite razdelke za varnostno kopiranje:</string> + <string name="storage">Pom. naprava:</string> + <string name="enc_disabled">onemogočeno - nastavite geslo za omogočanje</string> + <string name="enc_enabled">omogočeno</string> + <string name="enable_backup_comp_chk">Omogoči stiskanje</string> + <string name="skip_md5_backup_chk">Preskoči ustvarjanje razpršila MD5 med varnostnim kopiranjem</string> + <string name="disable_backup_space_chk">Onemogoči preverjanje nezasedenega prostora</string> + <string name="refresh_sizes_btn">Osveži velikosti</string> + <string name="swipe_backup">Povlecite za var. kopiranje</string> + <string name="append_date_btn">Pripni datum</string> + <string name="backup_name_exists">Varnostna kopija z enakim imenom že obstaja!</string> + <string name="encrypt_backup">Šifriraj varnostno kopijo?</string> + <string name="enter_pass">Vnesite geslo:</string> + <string name="enter_pass2">Ponovno vnesite geslo:</string> + <string name="pass_not_match">Gesli se ne ujemata!</string> + <string name="partitions">Razdelki:</string> + <string name="disabled">Onemogočeno</string> + <string name="enabled">Omogočeno</string> + <string name="backup_name_hdr">Nastavite ime varnostne kopije</string> + <string name="progress">Napredek:</string> + <string name="backup_complete">Varnostno kopiranje končano</string> + <string name="restore_hdr">Obnovi</string> + <string name="sel_backup_hdr">Izberite varnostno kopijo</string> + <string name="restore_sel_store_hdr">Izberite varnostno kopijo iz %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Izberite paket za obnovitev:</string> + <string name="restore_enc_backup_hdr">Šifrirana varnostna kopija</string> + <string name="restore_dec_fail">Geslo je spodletelo, poizkusite znova!</string> + <string name="del_backup_btn">Izbriši varnostno kopijo</string> + <string name="del_backup_confirm">Izbriši varnostno kopijo?</string> + <string name="del_backup_confirm2">Tega ni mogoče razveljaviti!</string> + <string name="deleting_backup">Brisanje varnostne kopije …</string> + <string name="backup_deleted">Brisanje varnostne kopije končano</string> + <string name="swipe_delete">Povlecite za izbris</string> + <string name="swipe_delete_s"> Izbriši</string> + <string name="restore_try_decrypt">Šifrirana varnostna kopija - poizkušanje odšifriranja</string> + <string name="restore_try_decrypt_s">Poizkušanje odšifriranja</string> + <string name="restore_backup_date">Varnostna kopija ustvarjena %tw_restore_file_date%</string> + <string name="restore_sel_part">Izberite razdelke za obnovitev:</string> + <string name="restore_enable_md5_chk">Omogoči preverjanje razpršila MD5 varnostnih kopij</string> + <string name="restore_complete">Obnavljanje končano</string> + <string name="swipe_restore">Povlecite za obnovitev</string> + <string name="swipe_restore_s"> Obnovi</string> + <string name="rename_backup_hdr">Preimenuj varnostno kopijo</string> + <string name="rename_backup_confirm">Preimenuj varnostno kopijo?</string> + <string name="rename_backup_confirm2">Tega ni mogoče razveljaviti!</string> + <string name="renaming_backup">Preimenovanje varnostne kopije …</string> + <string name="rename_backup_complete">Preimenovanje varnostne kopije končano</string> + <string name="swipe_to_rename">Povlecite za preimeovanje</string> + <string name="swipe_rename"> Preimenuj</string> + <string name="confirm_hdr">Potrdi</string> + <string name="mount_hdr">Priklopi</string> + <string name="mount_sel_part">Izberite razdelke za priklop:</string> + <string name="mount_sys_ro_chk">Priklopi sistemski razdelek samo za branje</string> + <string name="mount_sys_ro_s_chk">Priklopi sistem samo za branje</string> + <string name="decrypt_data_btn">Odšifriraj podatke</string> + <string name="disable_mtp_btn">Onemogoči MTP</string> + <string name="enable_mtp_btn">Omogoči MTP</string> + <string name="mount_usb_storage_btn">Priklopi pomnilniško napravo USB</string> + <string name="usb_storage_hdr">Pom. naprava USB</string> + <string name="usb_stor_mnt1">Pomnilniška naprava USB priklopljena</string> + <string name="usb_stor_mnt2">Prepričajte se, da varno odstranite napravo</string> + <string name="usb_stor_mnt3">iz računalnika pred odklopom!</string> + <string name="unmount_btn">Odklopi</string> + <string name="rb_system_btn">Sistem</string> + <string name="rb_poweroff_btn">Izklopi</string> + <string name="rb_recovery_btn">Obnovitev</string> + <string name="rb_bootloader_btn">Zagonski nalagalnik</string> + <string name="rb_download_btn">Prejmi</string> + <string name="turning_off">Izklapljanje …</string> + <string name="swipe_power_off">Povlecite za izklop</string> + <string name="swipe_power_off_s">Izklopi</string> + <string name="sys_ro_hdr">Nespremenjeni sistemski razdelek</string> + <string name="sys_ro_keep">Ohrani sistem samo za branje?</string> + <string name="sys_rop1">TWRP lahko pusti sistemski razdelek nespremenjen</string> + <string name="sys_rop2">za lažje uradno posodabljanje.</string> + <string name="sys_rop3">TWRP tovarniškemu ROM-u ne bo mogel preprečiti</string> + <string name="sys_rop4">nadomestitev TWRP-ja in ne bo ponudil skrbniškega dostopa do naprave.</string> + <string name="sys_rop5">Nameščenje ZIP-ov ali izvajanje opravil ADB lahko še vedno</string> + <string name="sys_rop6">spremeni sistemski razdelek.</string> + <string name="sys_rol1">TWRP lahko pusti sistemski razdelek nespremenjen za lažje uradno posodabljanje.</string> + <string name="sys_rol2">TWRP tovarniškemu ROM-u ne bo mogel preprečiti nadomestitev TWRP-ja in ne bo ponudil skrbniškega dostopa do naprave.</string> + <string name="sys_rol3">Nameščenje ZIP-ov ali izvajanje opravil ADB lahko še vedno spremeni sistemski razdelek.</string> + <string name="sys_ro_never_show_chk">Nikoli več ne prikaži tega zaslona med zagonom</string> + <string name="sys_ro_keep_ro_btn">Ohrani samo za branje</string> + <string name="swipe_allow_mod">Povlecite, da dovolite spremembe</string> + <string name="swipe_allow_mod_s">Dovoli spremembe</string> + <string name="settings_hdr">Nastavitve</string> + <string name="settings_gen_hdr">Splošno</string> + <string name="settings_gen_s_hdr">Splošno</string> + <string name="settings_gen_btn">Splošno</string> + <string name="use_rmrf_chk">Namesto formatiranja uporabite rm -rf</string> + <string name="use24clock_chk">Uporabi 24-urno obliko</string> + <string name="rev_navbar_chk">Obratna razporeditev vrstice za krmarjenje</string> + <string name="simact_chk">Simuliraj dejanja za preizkušanje tem</string> + <string name="simfail_chk">Simuliraj spodletela dejanja</string> + <string name="ctr_navbar_rdo">Gumbi vrstice za krmarjenje na sredini</string> + <string name="lft_navbar_rdo">Gumbi vrstice za krmarjenje na levi</string> + <string name="rht_navbar_rdo">Gumbi vrstice za krmarjenje na desni</string> + <string name="restore_defaults_btn">Obnovi privzete</string> + <string name="settings_tz_btn">Časovni pas</string> + <string name="settings_screen_btn">Zaslon</string> + <string name="settings_screen_bright_btn">Svetlost zaslona</string> + <string name="settings_vibration_btn">Vibriranje</string> + <string name="settings_language_btn">Jezik</string> + <string name="time_zone_hdr">Časovni pas</string> + <string name="sel_tz_list">Izberite časovni pas:</string> + <string name="utcm11">(UTC -11) Samoa, Otoki Midway</string> + <string name="utcm10">(UTC -10) Havaji</string> + <string name="utcm9">(UTC -9) Aljaska</string> + <string name="utcm8">(UTC -8) Tihooceanski čas</string> + <string name="utcm7">(UTC -7) Ameriški gorski čas</string> + <string name="utcm6">(UTC -6) Ameriški osrednji čas</string> + <string name="utcm5">(UTC -5) Ameriški vzhodni čas</string> + <string name="utcm4">(UTC -4) Atlantski čas</string> + <string name="utcm3">(UTC -3) Brazilija, Buenos Aires</string> + <string name="utcm2">(UTC -2) Srednji Atlantik</string> + <string name="utcm1">(UTC -1) Azori, Zelenortski otoki</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbona</string> + <string name="utcp1">(UTC +1) Berlin, Bruselj, Pariz</string> + <string name="utcp2">(UTC +2) Atene, Istanbul, Južna Afrika</string> + <string name="utcp3">(UTC +3) Moskva, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Ekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Džakarta</string> + <string name="utcp8">(UTC +8) Peking, Singapur, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokio, Seul, Jakutsk</string> + <string name="utcp10">(UTC +10) Vzhodna Avstralija, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Salomonovi otoki</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fidži</string> + <string name="sel_tz_offset">Izberite zamik (običajno 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Brez</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Uporabi poletni čas (DST)</string> + <string name="curr_tz">Trenutni časovni pas: %tw_time_zone%</string> + <string name="curr_tz_s">Trenutni časovni pas:</string> + <string name="set_tz_btn">Nastavi časovni pas</string> + <string name="settings_screen_hdr">Zaslon</string> + <string name="settings_screen_timeout_hdr">Časovna omejitev zaslona</string> + <string name="enable_timeout_chk">Omogoči časovno omejitev zaslona</string> + <string name="screen_to_slider">Časovna omejitev zaslona v sekundah:</string> + <string name="screen_to_slider_s">Časovna omejitev zaslona v sekundah: (0 = onemogočeno): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Nastavitev časovne omejitve zaslona ni na voljo</string> + <string name="screen_bright_slider">Svetlost: %tw_brightness_pct% %</string> + <string name="screen_bright_na">Nastavitev svetlosti ni na voljo</string> + <string name="vibration_hdr">Vibriranje</string> + <string name="button_vibration_hdr">Vibriranje gumbov</string> + <string name="kb_vibration_hdr">Vibriranje tipkovnice</string> + <string name="act_vibration_hdr">Vibriranje dejanj</string> + <string name="button_vibration">Vibriranje gumbov:</string> + <string name="kb_vibration">Vibriranje tipkovnice:</string> + <string name="act_vibration">Vibriranje dejanj:</string> + <string name="select_language">Izberite jezik:</string> + <string name="sel_lang_btn">Izberite jezik</string> + <string name="set_language_btn">Nastavi jezik</string> + <string name="advanced_hdr">Napredno</string> + <string name="copy_log_confirm">Kopiraj dnevnik na kartico SD?</string> + <string name="copying_log">Kopiranje dnevnika na kartico SD …</string> + <string name="copy_log_complete">Kopiranje dnevnika končano</string> + <string name="part_sd_btn">Razdeli kartico SD</string> + <string name="part_sd_s_btn">Kartica SD</string> + <string name="file_manager_btn">Upravljalnik datotek</string> + <string name="language_hdr">Jezik</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Ponovno naloži temo</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Vstavi TWRP</string> + <string name="inject_twrp_confirm">Ponovno vstavi TWRP?</string> + <string name="injecting_twrp">Ponovno vstavljanje TWRP-ja …</string> + <string name="inject_twrp_complete">Vstavljanje TWRP-ja končano</string> + <string name="swipe_to_confirm">Povlecite za potrditev</string> + <string name="part_sd_hdr">Razdeli kartico SD</string> + <string name="invalid_partsd_sel">Izbrati morate odstranljivo napravo</string> + <string name="part_sd_lose">Izgubili boste vse datoteke na kartici SD!</string> + <string name="part_sd_undo">Tega dejanja ni mogoče razveljaviti!</string> + <string name="part_sd_ext_sz">Velikost EXT:</string> + <string name="part_sd_swap_sz">Izmen. velikost:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Datotečni sistem:</string> + <string name="swipe_part_sd">Povlecite za razdelitev</string> + <string name="swipe_part_sd_s">Razdelek</string> + <string name="partitioning_sd">Razdeljevanje kartice SD …</string> + <string name="partitioning_sd2">To bo trajalo nekaj minut.</string> + <string name="part_sd_complete">Razdeljevanje končano</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Obnovi izvirni zagon</string> + <string name="dumlock_restore_confirm">Obnovi izvirni zagonski odtis?</string> + <string name="dumlock_restoring">Obnavljanje izvirnega zagona …</string> + <string name="dumlock_restore_complete">Obnavljanje izvirnega zagona končano</string> + <string name="dumlock_reflash_btn">Ponovno namesti obnovitev</string> + <string name="dumlock_reflash_confirm">Ponovno namesti obnovitev v zagon?</string> + <string name="dumlock_reflashing">Nameščanje obnovitve v zagon …</string> + <string name="dumlock_reflash_complete">Namestite v obnovitve v zagon končana</string> + <string name="dumlock_install_btn">Namesti HTC Dumlock</string> + <string name="dumlock_install_confirm">Namesti datoteke HTC Dumlock v ROM?</string> + <string name="dumlock_installing">Nameščanje HTC Dumlocka …</string> + <string name="dumlock_install_complete">Nameščanje HTC Dumlocka končano</string> + <string name="swipe_to_unlock">Povlecite za odklepanje</string> + <string name="swipe_unlock"> Odkleni</string> + <string name="fm_hdr">Upravljalnik datotek</string> + <string name="fm_sel_file">Izberite datoteko ali mapo</string> + <string name="fm_type_folder">Mapa</string> + <string name="fm_type_file">Datoteka</string> + <string name="fm_choose_act">Izberite dejanje</string> + <string name="fm_selected">Izbrano %tw_fm_type%:</string> + <string name="fm_copy_btn">Kopiraj</string> + <string name="fm_copy_file_btn">Kopiraj datoteko</string> + <string name="fm_copy_folder_btn">Kopiraj mapo</string> + <string name="fm_copying">Kopiranje …</string> + <string name="fm_move_btn">Premakni</string> + <string name="fm_moving">Premikanje</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Izbriši</string> + <string name="fm_deleting">Brisanje …</string> + <string name="fm_rename_btn">Preimenuj</string> + <string name="fm_rename_file_btn">Preimenuj datoteko</string> + <string name="fm_rename_folder_btn">Preimenuj mapo</string> + <string name="fm_renaming">Preimenovanje</string> + <string name="fm_sel_dest">Izberite ciljno mapo</string> + <string name="fm_sel_curr_folder">Izberite trenutno mapo</string> + <string name="fm_rename_hdr">Preimenuj</string> + <string name="fm_set_perms_hdr">Nastavi dovoljenja</string> + <string name="fm_perms">Dovoljenja:</string> + <string name="fm_complete">Opravilo na datotekah končano</string> + <string name="decrypt_data_hdr">Odšifriraj podatke</string> + <string name="decrypt_data_enter_pass">Vnesite geslo.</string> + <string name="decrypt_data_enter_pattern">Vnesite vzorec.</string> + <string name="decrypt_data_trying">Poizkušanje odšifriranja</string> + <string name="term_hdr">Ukaz za terminal</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">UNIČI</string> + <string name="term_sel_folder_hdr">Brskajte do začetne mape</string> + <string name="adb_sideload_hdr">Stransko nalaganje ADB</string> + <string name="sideload_wipe_dalvik_chk">Počisti predpomnilnik Dalvik</string> + <string name="sideload_wipe_cache_chk">Počisti predpom.</string> + <string name="swipe_to_sideload">Povlecite za začetek stranskega nalaganja</string> + <string name="swipe_sideload"> Začni</string> + <string name="sideload_confirm">Stransko nalaganje ADB</string> + <string name="sideload_usage">Uporaba: adb sideload filename.zip</string> + <string name="sideload_complete">Stransko nalaganje ADB končano</string> + <string name="reboot_hdr">Pon. zaženi</string> + <string name="su_hdr">Preveri SuperSU</string> + <string name="su_note1">Videti je, da vaša naprava nima skrbniškega dostopa.</string> + <string name="su_note2">Namesti SuperSU zdaj?</string> + <string name="su_note3">To bo omogočilo skrbniški dostop na napravi.</string> + <string name="su_cancel">Ne namesti</string> + <string name="swipe_su_to_install">Povlecite za namestitev</string> + <string name="swipe_su_install"> Namesti</string> + <string name="su_installing">Nameščanje SuperSU-ja</string> + <string name="sel_storage_list">Izberite pomnilniško napravo</string> + <string name="ok_btn">V redu</string> + <string name="no_kernel_selinux">Jedro nima podpore za branje vsebin SELinux.</string> + <string name="full_selinux">Prisotna je polna podpora za SELinux.</string> + <string name="no_selinux">Ni podpore za SELinux (libselinux manjka).</string> + <string name="mtp_enabled">MTP omogočen</string> + <string name="mtp_crash">MTP se je sesul, MTP se ob zagonu ne bo začel.</string> + <string name="decrypt_success">Uspešno odšifrirano s privzetim geslom.</string> + <string name="unable_to_decrypt">Odšifriranje s privzetim geslom ni mogoče. Morda boste moral sformatirati podatke.</string> + <string name="generating_md51">Ustvarjanje razpršila MD5</string> + <string name="generating_md52"> * Ustvarjanje razpršila MD5 …</string> + <string name="md5_created"> * Razpršilo MD5 ustvarjeno.</string> + <string name="md5_error"> * Napaka razpršila MD5!</string> + <string name="md5_compute_error"> * Napaka pri računanju razpršila MD5.</string> + <string name="current_date">(trenutni datum)</string> + <string name="auto_generate">(samodejno ustvari)</string> + <string name="unable_to_locate_partition">Razdelka \'{1}\' za računanje varnostnih kopij ni mogoče najti.</string> + <string name="no_partition_selected">Ni izbranih razdelkov za varnostno kopiranje.</string> + <string name="total_partitions_backup"> * Skupno število razdelkov za varnostno kopiranje: {1}</string> + <string name="total_backup_size"> * Skupna velikost vseh podatkov: {1} MB</string> + <string name="available_space"> * Nezaseden prostor: {1} MB</string> + <string name="unable_locate_storage">Pomnilniške naprave ni mogoče najti.</string> + <string name="no_space">Ni dovolj prostora na pomnilniški napravi.</string> + <string name="backup_started">[VAR. KOPIRANJE SE JE ZAČELO]</string> + <string name="backup_folder"> * Mapa varnostnega kopiranja: {1}</string> + <string name="fail_backup_folder">Ustvarjanje mape varnostnega kopiranja je spodletelo.</string> + <string name="avg_backup_fs">Povprečna hitrost varnostnega kopiranja za datotečne sisteme: {1} MB/s</string> + <string name="avg_backup_img">Povprečna hitrost varnostnega kopiranja za odtise pogonov: {1} MB/s</string> + <string name="total_backed_size">[VARNOSTNO KOPIRANO SKUPAJ {1} MB]</string> + <string name="backup_completed">[VARNOSTNO KOPIRANJE KONČANO V {1} S]</string> + <string name="restore_started">[OBNOVITEV SE JE ZAČELA]</string> + <string name="restore_folder">Mapa obnovitve: \'{1}\'</string> + <string name="verifying_md5">Preverjanje razpršila MD5</string> + <string name="skip_md5">Preskakovanje preverjanja razpršila MD5 glede na uporabniško nastavitev.</string> + <string name="calc_restore">Računanje podrobnosti obnovitve …</string> + <string name="restore_read_only">{1} ni mogoče obnoviti -- priklopljen je samo za branje.</string> + <string name="restore_unable_locate">Razdelka \'{1}\' za obnovitev ni mogoče najti.</string> + <string name="no_part_restore">Ni izbranih razdelkov za obnovitev.</string> + <string name="restore_part_count">Obnavljanje {1} razdelkov …</string> + <string name="total_restore_size">Skupna velikost obnovitve je {1} MB</string> + <string name="updating_system_details">Posodabljanje sistemskih podrobnosti</string> + <string name="restore_completed">[OBNOVITEV KONČANA V {1} S]</string> + <string name="error_opening_strerr">Napaka odpiranja: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Razdelka po imenu varnostne kopije ni mogoče najti: \'{1}\'</string> + <string name="unable_find_part_path">Razdelka za pot \'{1}\' ni mogoče najti</string> + <string name="update_part_details">Posodabljanje podrobnosti razdelka …</string> + <string name="update_part_details_done">… končano</string> + <string name="wiping_dalvik">Čiščenje map predpomnilnika Dalvik …</string> + <string name="cleaned">Počiščeno: {1} …</string> + <string name="dalvik_done">-- Čiščenje map predpomnilnika Dalvik končano!</string> + <string name="no_andsec">Varnih razdelkov Android ni bilo najdenih.</string> + <string name="unable_to_locate">{1} ni mogoče najti.</string> + <string name="wiping_datamedia">Čiščenje notranje pomnilniške naprave -- /data/media …</string> + <string name="unable_to_mount">{1} ni mogoče priklopiti.</string> + <string name="unable_to_mount_internal">Notranje pomnilniške naprave ni mogoče priklopiti</string> + <string name="unable_to_mount_storage">Pomnilniške naprave ni mogoče priklopiti</string> + <string name="fail_decrypt">Odšifriranje podatkov je spodletelo.</string> + <string name="no_crypto_support">Podpora za šifriranje ni bila vgrajena v to izgradnjo.</string> + <string name="decrypt_success_dev">Podatki so bili uspešno odšifrirani, nova bločna naprava: \'{1}\'</string> + <string name="done">Končano.</string> + <string name="start_partition_sd">Razdeljevanje kartice SD …</string> + <string name="partition_sd_locate">Naprave za razdeljevanje ni mogoče najti.</string> + <string name="ext_swap_size">EXT + izmenjevalna velikost sta večja od velikosti kartice SD.</string> + <string name="remove_part_table">Odstranjevanje preglednice razdelka …</string> + <string name="unable_rm_part">Preglednice razdelka ni mogoče odstraniti.</string> + <string name="create_part">Ustvarjanje razdelka {1} …</string> + <string name="unable_to_create_part">Razdelka {1} ni mogoče ustvariti.</string> + <string name="format_sdext_as">Formatiranje SD-EXT kot {1} …</string> + <string name="part_complete">Razdeljevanje končano.</string> + <string name="unable_to_open">\'{1}\' ni mogoče odpreti.</string> + <string name="mtp_already_enabled">MTP je že omogočen</string> + <string name="mtp_fail">Omogočanje MTP-ja je spodletelo</string> + <string name="no_mtp">Podpora za MTP ni vključena</string> + <string name="image_flash_start">[NAMESTITEV ODTISA SE JE ZAČELA]</string> + <string name="img_to_flash">Odtis za namestitev: \'{1}\'</string> + <string name="flash_unable_locate">Razdelka \'{1}\' za namestitev ni mogoče najti.</string> + <string name="no_part_flash">Ni izbranih razdelkov za namestitev.</string> + <string name="too_many_flash">Izbranih preveč razdelkov za namestitev.</string> + <string name="invalid_flash">Naveden neveljaven razdelek za namestitev.</string> + <string name="flash_done">[NAMESTITEV ODTISA KONČANA]</string> + <string name="wiping">Čiščenje {1}</string> + <string name="repair_not_exist">{1} ne obstaja! Popravilo ni mogoče!</string> + <string name="repairing_using">Popravljanje {1} s/z {2} …</string> + <string name="unable_repair">Popravilo {1} ni mogoče.</string> + <string name="mount_data_footer">/data ni bilo mogoče priklopiti in vnožja za šifriranje ni mogoče najti.</string> + <string name="create_folder_strerr">Mape \'{1}\' ni mogoče ustvariti ({2}).</string> + <string name="fail_mount">Priklop \'{1}\' je spodletel ({2})</string> + <string name="fail_unmount">Odklop \'{1}\' je spodletel ({2})</string> + <string name="cannot_resize">Velikosti {1} ni mogoče spremeniti.</string> + <string name="repair_resize">Popravljanje {1} pred spremembo velikosti.</string> + <string name="unable_resize">Velikosti {1} ni mogoče spremeniti.</string> + <string name="no_md5_found">Za \'{1}\' ni bilo najdene datoteke MD5. Odstranite izbiro \'Omogoči preverjanje razpršila MD5\' za obnovitev.</string> + <string name="md5_fail_match">Ujemanje razpršila MD5 na \'{1}\' je spodletelo.</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">Odšifriranje datoteke TAR \'{1}\' je spodletelo</string> + <string name="format_data_msg">Za ponovno uporabo /data boste morda morali ponovno zagnati obnovitev.</string> + <string name="format_data_err">Formatiranje za odstranitev šifriranja ni mogoče.</string> + <string name="formatting_using">Formatiranje {1} s/z {2} …</string> + <string name="unable_to_wipe">Čiščenje {1} ni mogoče.</string> + <string name="cannot_wipe">Razdelka {1} ni mogoče počistiti.</string> + <string name="remove_all">Odstranjevanje vseh datotek v \'{1}\'</string> + <string name="wiping_data">Čiščenje podatkov brez čiščenja /data/media …</string> + <string name="backing_up">Varnostno kopiranje {1} …</string> + <string name="backing">Varnostno kopiranje</string> + <string name="backup_size">Velikost varnostne kopije za \'{1}\' je 0 B.</string> + <string name="datamedia_fs_restore">OPOZORILO: ta varnostna kopija /data je bila ustvarjena z datotečnim sistemom {1}! Varnostna kopija se morda ne bo zagnala, če je ne spremenite nazaj na {1}.</string> + <string name="restoring">Obnavljanje {1} …</string> + <string name="restoring_hdr">Obnavljanje</string> + <string name="recreate_folder_err">Mape {1} ni mogoče ponovno ustvariti.</string> + <string name="img_size_err">Velikost odtisa je večja od ciljne naprave</string> + <string name="flashing">Nameščanje {1} …</string> + <string name="backup_folder_set">Mapa varnostnega kopiranja nastavljena na \'{1}\'</string> + <string name="locate_backup_err">Varnostne kopije \'{1}\' ni mogoče najti</string> + <string name="set_restore_opt">Nastavljanje možnosti za varnostno kopiranje: \'{1}\':</string> + <string name="md5_check_skip">Preskak. preverjanja raz. MD5 je vkl.</string> + <string name="ors_encrypt_restore_err">OpenRecoveryScript ni mogoče uporabiti za obnavljanje šifriranih varnostnih kopij.</string> + <string name="mounting">Priklapljanje</string> + <string name="unmounting">Odklapljanje</string> + <string name="mounted">\'{1}\' priklopljen</string> + <string name="unmounted">\'{1}\' odklopljen</string> + <string name="setting">Nastavljanje \'{1}\' na \'{2}\'</string> + <string name="setting_empty">Nastavljanje \'{1}\' na prazno</string> + <string name="making_dir1">Ustvarjanje mape</string> + <string name="making_dir2">Ustvarjanje mape: \'{1}\'</string> + <string name="running_command">Izvajanje ukaza</string> + <string name="sideload">Stransko nalaganje ADB</string> + <string name="start_sideload">Začenjanje značilnosti stranskega nalaganja ADB …</string> + <string name="need_new_adb">Za stransko nalaganje na to napravo potrebujete ADB 1.0.32 ali novejši</string> + <string name="no_pwd">Geslo ni bilo navedeno.</string> + <string name="done_ors">Obdelava datoteke skripta je končana</string> + <string name="injecttwrp">Vstavljanje TWRP-ja v zagonski odtis …</string> + <string name="zip_err">Napaka pri nameščanju datoteke ZIP \'{1}\'</string> + <string name="installing_zip">Nameščanje datoteke ZIP \'{1}\'</string> + <string name="select_backup_opt">Nastavljanje možnosti varnostnega kopiranja:</string> + <string name="compression_on">Stiskanje je vklopljeno</string> + <string name="md5_off">Ustvarjanje razpršila MD5 je izklopljeno</string> + <string name="backup_fail">Var. kop. je spodletelo</string> + <string name="backup_clean">Varnostno kopiranje je spodletelo. Čiščenje mape varnostnega kopiranja.</string> + <string name="running_recovery_commands">Izvajanje ukazov za obnovitev</string> + <string name="recovery_commands_complete">Ukazi za obnovitev kočani</string> + <string name="running_ors">Izvajanje OpenRecoveryScript</string> + <string name="ors_complete">OpenRecoveryScript končan</string> + <string name="no_updater_binary">V datoteki ZIP ni bilo mogoče najti \'{1}\'</string> + <string name="check_for_md5">Preverjanje za datoteko razpršila MD5 …</string> + <string name="fail_sysmap">Preslikava datoteke \'{1}\' je spodletela</string> + <string name="verify_zip_sig">Preverjanje podpisa ZIP</string> + <string name="verify_zip_fail">Preverjanje podpisa ZIP je spodletelo!</string> + <string name="verify_zip_done">Preverjanje podpisa ZIP je bilo uspešno!</string> + <string name="zip_corrupt">Datoteka ZIP je poškodovana!</string> + <string name="no_md5">Preskakovanje preverjanja razpršila MD5: datoteka MD5 ni bila najdena</string> + <string name="md5_fail">MD5 se ne ujema</string> + <string name="md5_match">MD5 se ujema</string> + <string name="pid_signal">{1} opravilo se je končalo s signalom: {2}</string> + <string name="pid_error">{1} opravilo se je končalo z NAPAKO: {2}</string> + <string name="install_dumlock">Nameščanje HTC Dumlocka na sistem …</string> + <string name="dumlock_restore">Obnavljanje izvirnega zagona …</string> + <string name="dumlock_reflash">Ponovno nameščanje obnovitve v zagon …</string> + <string name="run_script">Izvajanje skripta {1} …</string> + <string name="rename_stock">Tovarniška datoteka obnovitve v /system je bila preimenovana, da tovarniškemu ROM-u prepreči nadomestitev TWRP-ja.</string> + <string name="split_backup">Razcepljanje varnostne kopije v več arhivov …</string> + <string name="backup_error">Napaka pri ustvarjanju varnostne kopije.</string> + <string name="restore_error">Napaka med postopkom obnovitve.</string> + <string name="split_thread">Razcepljanje ID-ja niti {1} v arhiv {2}</string> + <string name="file_progress">%llu od %llu datotek, %i %%</string> + <string name="size_progress">%llu MB od %llu MB, %i %%</string> + <string name="decrypt_cmd">Poizkušanje odšifriranja podatkovnega razdelka preko ukazne vrstice.</string> + <string name="base_pkg_err">Nalaganje osnovnih paketov je spodletelo.</string> + <string name="simulating">Simuliranje dejanj …</string> + <string name="backup_cancel">Varnostno kopiranje preklicano</string> + <string name="config_twrp">Nastavljanje TWRP-ja …</string> + <string name="config_twrp_err">TWRP-ja ni mogoče nastaviti s tem jedrom.</string> + <string name="copy_log">Dnevnik obnovitve kopiran v {1}.</string> + <string name="max_queue">Dosežena največja velikost čakalne vrste ZIP!</string> + <string name="min_queue">Dosežena najmanjša velikost čakalne vrste ZIP!</string> + <string name="screenshot_saved">Zaslonska slika je bila shranjena v {1}</string> + <string name="screenshot_err">Zajem zaslonske slike je spodletel!</string> + <string name="zip_wipe_cache">Eden ali več ZIP-ov je zahteval čiščenje predpomnilnika -- čiščenje.</string> + <string name="and_sec_wipe_err">Varnega razdelka Android ni mogoče počistiti</string> + <string name="dalvik_wipe_err">Čiščenje Dalvika je spodletelo</string> + <string name="auto_gen">(samodejno ustvari)</string> + <string name="curr_date">(trenutni datum)</string> + <string name="backup_name_len">Ime varnostne kopije je predolgo.</string> + <string name="backup_name_invalid">Ime varnostne kopije \'{1}\' vsebuje neveljavni znak: \'{1}\'</string> + <string name="no_real_sdcard">Ta naprava nima resnične kartice SD! Prekinjanje!</string> + <string name="cancel_sideload">Preklicevanje stranskega nalaganja ADB …</string> + <string name="change_fs_err">Napaka pri spreminjanju datotečnega sistema.</string> + <string name="theme_ver_err">Različica teme po meri se ne ujema z različico TWRP-ja. Uporabljena bo tovarniška tema.</string> + </resources> +</language> diff --git a/gui/theme/common/languages/sv.xml b/gui/theme/common/languages/sv.xml new file mode 100644 index 000000000..f9978fc6c --- /dev/null +++ b/gui/theme/common/languages/sv.xml @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Swedish</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">System</string> + <string name="vendor">Leverantör</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="sdcard">SDCard</string> + <string name="internal">Intern lagring</string> + <string name="usbotg">USB OTG</string> + <string name="dalvik">Dalvik / ART Cache</string> + <string name="sdext">SD-EXT</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="sort_by_name">Sortera efter namn</string> + <string name="sort_by_date">Sortera efter datum</string> + <string name="sort_by_size">Sortera efter storlek</string> + <string name="sort_by_name_only">Namn</string> + <string name="sort_by_date_only">Datum</string> + <string name="sort_by_size_only">Storlek</string> + <string name="tab_general">ALLMÄNT</string> + <string name="tab_options">ALTERNATIV</string> + <string name="tab_time_zone">TIDSZON</string> + <string name="tab_screen">SKÄRM</string> + <string name="tab_vibration">VIBRATION</string> + <string name="tab_language">SPRÅK</string> + <string name="install_btn">Installera</string> + <string name="restore_btn">Återställ</string> + <string name="settings_btn">Inställningar</string> + <string name="advanced_btn">Avancerad</string> + <string name="reboot_btn">Starta om</string> + <string name="files_btn">Filer</string> + <string name="copy_log_btn">Kopiera logg</string> + <string name="select_type_hdr">Välj typ</string> + <string name="install_zip_hdr">Installera Zip</string> + <string name="install_zip_btn">Installera Zip</string> + <string name="install_select_file_hdr">Välj fil</string> + <string name="file_selector_folders_hdr">Mappar</string> + <string name="install_hdr">Installera</string> + <string name="select_storage_hdr">Välj lagring</string> + <string name="select_storage_btn">Välj lagring</string> + <string name="queue_hdr">Kö</string> + <string name="folder">Mapp:</string> + <string name="file">Fil:</string> + <string name="options_hdr">Alternativ</string> + <string name="confirm_flash_hdr">Bekräfta Flash</string> + <string name="zip_queue">Kö:</string> + <string name="options">Alternativ:</string> + <string name="swipe_confirm"> Bekräfta</string> + <string name="failed">Misslyckades</string> + <string name="install_failed">Installationen misslyckades</string> + <string name="install_sel_target">Välj målpartition</string> + <string name="swipe_reboot_s"> Starta om</string> + <string name="confirm_action">Bekräfta åtgärd</string> + <string name="cancel_btn">Avbryt</string> + <string name="factory_reset_hdr">Fabriksåterställning</string> + <string name="factory_reset_btn">Fabriksåterställning</string> + <string name="factory_resetting">Fabriksåterställning...</string> + <string name="swipe_format_data_s"> Formattera data</string> + <string name="sel_part_hdr">Välj partitioner</string> + <string name="format_data_hdr">Formattera data</string> + <string name="format_data_btn">Formattera data</string> + <string name="sel_act_hdr">Välj åtgärd</string> + <string name="repair_btn_s">Reparera</string> + <string name="repairing">Reparerar...</string> + <string name="swipe_repair_s"> Reparera</string> + <string name="change_fs_btn_s">Ändra</string> + <string name="formatting">Formatterar...</string> + <string name="swipe_change_s"> Ändra</string> + <string name="back_btn">Tillbaka</string> + <string name="encryption_tab">KRYPTERING</string> + <string name="encryption">Kryptering:</string> + <string name="name">Namn:</string> + <string name="storage">Lagring:</string> + <string name="enc_enabled">aktiverad</string> + <string name="append_date_btn">Lägg till datum</string> + <string name="enter_pass">Ange lösenord:</string> + <string name="enter_pass2">Ange lösenordet igen:</string> + <string name="partitions">Partitioner:</string> + <string name="disabled">Inaktiverad</string> + <string name="enabled">Aktiverad</string> + <string name="progress">Förlopp:</string> + <string name="restore_hdr">Återställ</string> + <string name="swipe_delete_s"> Ta bort</string> + <string name="restore_sel_part">Välj partitioner att återställa:</string> + <string name="swipe_restore_s"> Återställ</string> + <string name="swipe_rename"> Byt namn</string> + <string name="confirm_hdr">Bekräfta</string> + <string name="decrypt_data_btn">Dekryptera data</string> + <string name="disable_mtp_btn">Inaktivera MTP</string> + <string name="enable_mtp_btn">Aktivera MTP</string> + <string name="usb_storage_hdr">USB-lagring</string> + <string name="rb_system_btn">System</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Ladda ner</string> + <string name="turning_off">Stänger av...</string> + <string name="settings_hdr">Inställningar</string> + <string name="settings_gen_s_hdr">Allmänt</string> + <string name="settings_gen_btn">Allmänt</string> + <string name="settings_tz_btn">Tidszon</string> + <string name="settings_screen_btn">Skärm</string> + <string name="settings_vibration_btn">Vibration</string> + <string name="settings_language_btn">Språk</string> + <string name="time_zone_hdr">Tidszon</string> + <string name="sel_tz_list">Välj tidszon:</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm3">(UTC -3) Brasilien, Buenos Aires</string> + <string name="utcm1">(UTC -1) Azorerna, Kap Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lissabon</string> + <string name="utcp1">(UTC +1) Berlin, Bryssel, Paris</string> + <string name="utcp2">(UTC +2) Aten, Istanbul, Sydafrika</string> + <string name="utcp3">(UTC +3) Moskva, Bagdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Östra Australien, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Salomonöarna</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="tz_offset_none">Ingen</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="curr_tz_s">Aktuell tidszon:</string> + <string name="set_tz_btn">Ställ in tidszon</string> + <string name="vibration_hdr">Vibration</string> + <string name="select_language">Välj språk:</string> + <string name="set_language_btn">Ställ in språk</string> + <string name="advanced_hdr">Avancerad</string> + <string name="part_sd_s_btn">SD-kort</string> + <string name="file_manager_btn">Filhanterare</string> + <string name="language_hdr">Språk</string> + <string name="terminal_btn">Terminal</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">Injicera TWRP</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Filsystem:</string> + <string name="swipe_part_sd_s">Partition</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_install_btn">Installera HTC Dumlock</string> + <string name="dumlock_installing">Installerar HTC Dumlock...</string> + <string name="swipe_unlock"> Lås upp</string> + <string name="fm_hdr">Filhanterare</string> + <string name="fm_type_folder">Mapp</string> + <string name="fm_type_file">Fil</string> + <string name="fm_choose_act">Välj åtgärd</string> + <string name="fm_copy_btn">Kopiera</string> + <string name="fm_copy_file_btn">Kopiera fil</string> + <string name="fm_copy_folder_btn">Kopiera mapp</string> + <string name="fm_copying">Kopierar</string> + <string name="fm_move_btn">Flytta</string> + <string name="fm_moving">Flyttar</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Ta bort</string> + <string name="fm_deleting">Tar bort</string> + <string name="fm_rename_btn">Byt namn</string> + <string name="fm_renaming">Byter namn på</string> + <string name="fm_sel_dest">Välj målmapp</string> + <string name="fm_sel_curr_folder">Välj aktuell mapp</string> + <string name="fm_rename_hdr">Byt namn</string> + <string name="decrypt_data_hdr">Dekryptera data</string> + <string name="decrypt_data_enter_pattern">Ange mönster.</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">DÖDA</string> + <string name="swipe_sideload"> Start</string> + <string name="reboot_hdr">Starta om</string> + <string name="su_note2">Installera SuperSU nu?</string> + <string name="su_cancel">Installera inte</string> + <string name="swipe_su_install"> Installera</string> + <string name="su_installing">Installerar SuperSU</string> + <string name="sel_storage_list">Välj lagring</string> + <string name="ok_btn">OK</string> + <string name="generating_md51">Genererar MD5</string> + <string name="generating_md52"> * Genererar MD5...</string> + <string name="md5_created"> * MD5 skapad.</string> + <string name="md5_error"> * MD5-fel!</string> + <string name="current_date">(Dagens datum)</string> + <string name="auto_generate">(Auto-generera)</string> + <string name="available_space"> * Tillgängligt utrymme: {1}MB</string> + <string name="verifying_md5">Verifierar MD5</string> + <string name="update_part_details_done">...klar</string> + <string name="done">Klar.</string> + <string name="create_part">Skapar {1} partition...</string> + <string name="mtp_already_enabled">MTP redan aktiverat</string> + <string name="flashing">Blinkande {1}...</string> + <string name="installing_zip">Installerar zipfil \"{1}\"</string> + <string name="compression_on">Komprimering är på</string> + <string name="verify_zip_sig">Verifierar zip-signatur...</string> + <string name="config_twrp">Konfigurerar TWRP...</string> + <string name="auto_gen">(Auto-generera)</string> + <string name="curr_date">(Dagens datum)</string> + </resources> +</language> diff --git a/gui/theme/common/languages/tr.xml b/gui/theme/common/languages/tr.xml new file mode 100644 index 000000000..d9ba276b3 --- /dev/null +++ b/gui/theme/common/languages/tr.xml @@ -0,0 +1,550 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<language> + <display>Turkish</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" /> + <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" /> + + <string name="system">Sistem</string> + <string name="system_image">Sistem İmajı</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor İmajı</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Önbellek</string> + <string name="data">Veri</string> + <string name="sdcard">SD Kart</string> + <string name="internal">Dahili Depolama</string> + <string name="microsd">Micro SDCard</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Önbelleği</string> + <string name="sdext">Harici SD</string> + <string name="adopted_data">Kabul Edilen Veri</string> + <string name="adopted_storage">Kabul Edilen Depolama</string> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">İşlemci: %tw_cpu_temp% °C</string> + <string name="battery_pct">Pil: %tw_battery%</string> + <string name="sort_by_name">Ada göre sırala</string> + <string name="sort_by_date">Tarihe göre sırala</string> + <string name="sort_by_size">Boyuta göre sırala</string> + <string name="sort_by_name_only">Ad</string> + <string name="sort_by_date_only">Tarih</string> + <string name="sort_by_size_only">Boyut</string> + <string name="tab_general">GENEL</string> + <string name="tab_options">SEÇENEKLER</string> + <string name="tab_backup">YEDEKLE</string> + <string name="tab_time_zone">ZAMAN DİLİMİ</string> + <string name="tab_screen">EKRAN</string> + <string name="tab_vibration">TİTREŞİM</string> + <string name="tab_language">DİL</string> + <string name="install_btn">Yükle</string> + <string name="wipe_btn">Temizle</string> + <string name="backup_btn">Yedekle</string> + <string name="restore_btn">Geri Yükle</string> + <string name="mount_btn">Bağla</string> + <string name="settings_btn">Ayarlar</string> + <string name="advanced_btn">Gelişmiş</string> + <string name="reboot_btn">Yeniden Başlat</string> + <string name="files_btn">Dosyalar</string> + <string name="copy_log_btn">Kaydı Kopyala</string> + <string name="select_type_hdr">Tür Seç</string> + <string name="install_zip_hdr">Zip Yükle</string> + <string name="install_zip_btn">Zip Yükle</string> + <string name="install_image_hdr">İmaj Yükle</string> + <string name="install_image_btn">İmaj Yükle</string> + <string name="install_select_file_hdr">Dosya Seç</string> + <string name="file_selector_folders_hdr">Klasörler</string> + <string name="select_file_from_storage">%tw_storage_display_name%\'dan dosya seç (%tw_storage_free_size% MB)</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">Yükle</string> + <string name="select_storage_hdr">Depolama Seç</string> + <string name="select_storage_btn">Depolama Seç</string> + <string name="queue_hdr">Sıra</string> + <string name="zip_queue_count">%tw_zip_queue_count%/10 dosya sıraya alındı</string> + <string name="zip_queue_count_s">%tw_zip_queue_count%/10 dosya:</string> + <string name="zip_warn1">Bu işlem uyumsuz yazılım yükleyebilir</string> + <string name="zip_warn2">ve cihazınızı kullanılamaz hale getirebilir.</string> + <string name="zip_back_cancel">Bu zipi eklememek için geriye basın.</string> + <string name="zip_back_clear">Sırayı temizlemek için geri düğmesine basın.</string> + <string name="folder">Klasör:</string> + <string name="file">Dosya:</string> + <string name="zip_sig_chk">Zip imza doğrulaması</string> + <string name="inject_twrp_chk">Yükledikten sonra TWRP ekle</string> + <string name="options_hdr">Seçenekler</string> + <string name="confirm_flash_hdr">Flashlamayı Onayla</string> + <string name="zip_queue">Sıra:</string> + <string name="options">Seçenekler:</string> + <string name="swipe_confirm"> Onayla</string> + <string name="zip_add_btn">Daha fazla zip ekle</string> + <string name="zip_clear_btn">Zip sırasını temizle</string> + <string name="install_zip_count_hdr">Zipi yükle %tw_zip_index%/%tw_zip_queue_count%</string> + <string name="installing_zip_xml">Zip yükleniyor: %tw_file%</string> + <string name="failed">Başarısız</string> + <string name="successful">Başarılı</string> + <string name="install_failed">Kurulum Başarısız</string> + <string name="install_successful">Kurulum Başarılı</string> + <string name="wipe_cache_dalvik_btn">Cache/dalvik temizle</string> + <string name="reboot_system_btn">Sistemi Yeniden Başlat</string> + <string name="install_sel_target">Hedef Bölümü Seç</string> + <string name="flash_image_select">İmajı Flashlamak için Bölüm Seç:</string> + <string name="target_partition">Hedef Bölüm:</string> + <string name="flashing_image">İmaj Flashlanıyor...</string> + <string name="image_flashed">İmaj Flashlandı</string> + <string name="wipe_cache_dalvik_confirm">Önbellek ve Dalvik temizlensin mi?</string> + <string name="wiping_cache_dalvik">Önbellek ve Dalvik temizleniyor...</string> + <string name="wipe_cache_dalvik_complete">Önbellek ve Dalvik temizliği tamamlandı</string> + <string name="swipe_wipe">Temizlemek için Kaydır</string> + <string name="swipe_wipe_s"> Temizle</string> + <string name="no_os1">İS yüklü değil!</string> + <string name="no_osrb">Yeniden başlatmak istediğine emin misin?</string> + <string name="no_ospo">Kapatmak istediğine emin misin?</string> + <string name="rebooting">Yeniden Başlatılıyor...</string> + <string name="swipe_reboot">Yeniden Başlatmak için Kaydır</string> + <string name="swipe_reboot_s"> Yeniden başlat</string> + <string name="swipe_flash">Flashlamayı onaylamak için kaydır</string> + <string name="confirm_action">Eylemi Onayla</string> + <string name="back_cancel">İptal etmek için geri düğmesine basın.</string> + <string name="cancel_btn">İptal</string> + <string name="wipe_hdr">Temizle</string> + <string name="factory_reset_hdr">Sıfırla</string> + <string name="factory_reset_btn">Sıfırla</string> + <string name="factory_reset1">Veriyi, Önbelleği, ve Dalvik\'i temizler</string> + <string name="factory_reset2">(dahili depolama hariç)</string> + <string name="factory_reset3">Çoğu zaman ihtiyacınız olan</string> + <string name="factory_reset4">tek temizlik budur.</string> + <string name="factory_resetting">Sıfırla...</string> + <string name="advanced_wipe_hdr">Gelişmiş Temizlik</string> + <string name="advanced_wipe_btn">Gelişmiş Temizlik</string> + <string name="wipe_enc_confirm">Şifreleme Verilerden Silinsin mi?</string> + <string name="formatting_data">Veri Biçimlendiriliyor...</string> + <string name="swipe_format_data">Veriyi Biçimlendirmek için Kaydır</string> + <string name="swipe_format_data_s"> Veriyi Biçimlendir</string> + <string name="factory_reset_complete">Sıfırlama Tamamlandı</string> + <string name="sel_part_hdr">Bölümleri Seç</string> + <string name="wipe_sel_confirm">Seçili Bölüm(ler) Temizlensin Mi?</string> + <string name="wiping_part">Bölüm(ler) Temizleniyor...</string> + <string name="wipe_complete">Temizlik Tamamlandı</string> + <string name="sel_part_wipe">Temizlenecek Bölümleri Seçin:</string> + <string name="invalid_part_sel">Geçersiz bölüm seçimi</string> + <string name="format_data_hdr">Veriyi Biçimlendir</string> + <string name="format_data_btn">Veriyi Biçimlendir</string> + <string name="format_data_ptr1">Veriyi biçimlendirmek tüm uygulamalarınızı,</string> + <string name="format_data_ptr2">yedeklerinizi, resimlerinizi, videolarınızı, medyanızı, temizleyecek ve</string> + <string name="format_data_ptr3">dahili depolama üzerindeki şifrelemeyi kaldıracak.</string> + <string name="format_data_adopted">Adapte Dahili Depolama</string> + <string name="format_data_lcp1">Veriyi biçimlendirmek tüm uygulamalarınızı, yedeklerinizi, resimlerinizi, videolarınızı, medyanızı, temizleyecek ve</string> + <string name="format_data_lcp2">dahili depolama üzerindeki şifrelemeyi kaldıracak.</string> + <string name="format_data_wtc1">Veriyi biçimlendirmek tüm uygulamalarınızı,</string> + <string name="format_data_wtc2">yedeklerinizi ve medyanızı temizleyecek. Bu işlem geri alınamaz.</string> + <string name="format_data_undo">Bu işlem geri alınamaz.</string> + <string name="format_data_complete">Veriyi Biçimlendirme Tamamlandı</string> + <string name="yes_continue">Devam etmek için evet yazın. İptal etmek için geriye basın.</string> + <string name="part_opt_hdr">Şu bölüm için bölümleme seçenekleri: %tw_partition_name%</string> + <string name="sel_act_hdr">Eylem Seç</string> + <string name="file_sys_opt">Dosya Sistemi Seçenekleri</string> + <string name="partition">Bölüm: %tw_partition_name%</string> + <string name="part_mount_point">Bağlama Noktası: %tw_partition_mount_point%</string> + <string name="part_curr_fs">Dosya sistemi: %tw_partition_file_system%</string> + <string name="part_present_yes">Mevcut: Evet</string> + <string name="part_present_no">Mevcut: Hayır</string> + <string name="part_removable_yes">Çıkarılabilir: Evet</string> + <string name="part_removable_no">Çıkarılabilir: Hayır</string> + <string name="part_size">Boyut: %tw_partition_size%MB</string> + <string name="part_used">Kullanılan: %tw_partition_used%MB</string> + <string name="part_free">Boş: %tw_partition_free%MB</string> + <string name="part_backup_size">Yedek Boyutu: %tw_partition_backup_size%MB</string> + <string name="resize_btn">Dosya Sistemini Yeniden Boyutlandır</string> + <string name="resize_btn_s">Yeniden Boyutlandır</string> + <string name="resize_confirm">%tw_partition_name% yeniden boyutlandırılsın mı?</string> + <string name="resizing">Yeniden boyutlandırılıyor...</string> + <string name="resize_complete">Yeniden boyutlandırma tamamlandı</string> + <string name="swipe_resize">Yeniden Boyutlandırmak için Kaydır</string> + <string name="swipe_resize_s"> Yeniden Boyutlandır</string> + <string name="repair_btn">Dosya Sistemini Onar</string> + <string name="repair_btn_s">Onar</string> + <string name="repair_confirm">%tw_partition_name% onarılsın mı?</string> + <string name="repairing">Onarılıyor...</string> + <string name="repair_complete">Onarma tamamlandı</string> + <string name="swipe_repair">Onarmak için Kaydır</string> + <string name="swipe_repair_s"> Onar</string> + <string name="change_fs_btn">Dosya Sistemini Değiştir</string> + <string name="change_fs_btn_s">Değiştir</string> + <string name="change_fs_for_hdr">Dosya Sistemini Değiştir: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">Bölüm: %tw_partition_name% > Dosya Sistemini Seç</string> + <string name="change_fs_warn1">Bazı ROM\'lar veya kerneller bazı dosya sistemlerini</string> + <string name="change_fs_warn2">desteklemeyebilir. Dikkatli olun!</string> + <string name="change_fs_confirm">%tw_partition_name% değiştirilsin mi?</string> + <string name="formatting">Biçimlendiriliyor...</string> + <string name="format_complete">Biçimlendirme tamamlandı</string> + <string name="swipe_change_fs">Değiştirmek için Kaydır</string> + <string name="swipe_change_s"> Değiştir</string> + <string name="back_btn">Geri</string> + <string name="wipe_enc_btn">Şifrelemeyi Temizle</string> + <string name="swipe_factory_reset">Sıfırlamak için Kaydır</string> + <string name="repair_change_btn">Dosya Sistemini Onar veya Değiştir</string> + <string name="storage_hdr">Depolama: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">Yedekle</string> + <string name="backup_confirm_hdr">Yedeklemeyi Onayla</string> + <string name="encryption_tab">ŞİFRELEME</string> + <string name="encryption">Şifreleme:</string> + <string name="name">Ad:</string> + <string name="sel_part_backup">Yedeklenecek Bölümleri Seç:</string> + <string name="storage">Depolama:</string> + <string name="enc_disabled">devre dışı - etkinleştirmek için bir şifre ayarlayın</string> + <string name="enc_enabled">etkin</string> + <string name="enable_backup_comp_chk">Sıkıştırmayı etkinleştir</string> + <string name="skip_md5_backup_chk">Yedekleme sırasında MD5 oluşturmayı geç</string> + <string name="disable_backup_space_chk">Boş Alan Denetimini Devre Dışı Bırak</string> + <string name="refresh_sizes_btn">Boyutları Yenile</string> + <string name="swipe_backup">Yedeklemek için Kaydır</string> + <string name="append_date_btn">Tarih Ekle</string> + <string name="backup_name_exists">Bu adda bir yedek zaten var!</string> + <string name="encrypt_backup">Yedeklemeniz şifrelensin mi?</string> + <string name="enter_pass">Şifre Gir:</string> + <string name="enter_pass2">Şifreyi Tekrar Girin:</string> + <string name="pass_not_match">Şifreler eşleşmiyor!</string> + <string name="partitions">Bölümler:</string> + <string name="disabled">Devre dışı</string> + <string name="enabled">Etkin</string> + <string name="backup_name_hdr">Yedek Adı</string> + <string name="progress">İlerleme:</string> + <string name="backup_complete">Yedekleme Tamamlandı</string> + <string name="restore_hdr">Geri Yükle</string> + <string name="sel_backup_hdr">Yedek Seç</string> + <string name="restore_sel_store_hdr">%tw_storage_display_name%\'dan yedek seç (%tw_storage_free_size% MB)</string> + <string name="restore_sel_pack_fs">Geri Yüklenecek Paketi Seçin:</string> + <string name="restore_enc_backup_hdr">Şifreli Yedek</string> + <string name="restore_dec_fail">Şifre yanlış, lütfen tekrar deneyin!</string> + <string name="del_backup_btn">Yedeği Sil</string> + <string name="del_backup_confirm">Yedek Silinsin Mi?</string> + <string name="del_backup_confirm2">Bu işlem geri alınamaz!</string> + <string name="deleting_backup">Yedek Siliniyor...</string> + <string name="backup_deleted">Yedek Silme Tamamlandı</string> + <string name="swipe_delete">Silmek için Kaydır</string> + <string name="swipe_delete_s"> Sil</string> + <string name="restore_try_decrypt">Şifreli Yedek - Çözülmeye Çalışılıyor</string> + <string name="restore_try_decrypt_s">Çözülmeye Çalışılıyor</string> + <string name="restore_backup_date">Yedek tarihi %tw_restore_file_date%</string> + <string name="restore_sel_part">Geri Yüklenecek Bölümleri Seç:</string> + <string name="restore_enable_md5_chk">Yedek Dosyalarının MD5 Doğrulamasını Etkinleştir</string> + <string name="restore_complete">Geri Yükleme Tamamlandı</string> + <string name="swipe_restore">Geri Yüklemek için Kaydır</string> + <string name="swipe_restore_s"> Geri Yükle</string> + <string name="rename_backup_hdr">Yedeği Yeniden Adlandır</string> + <string name="rename_backup_confirm">Yedek Yeniden Adlandırılsın Mı?</string> + <string name="rename_backup_confirm2">Bu işlem geri alınamaz!</string> + <string name="renaming_backup">Yedek Yeniden Adlandırılıyor...</string> + <string name="rename_backup_complete">Yedek Yeniden Adlandırıldı</string> + <string name="swipe_to_rename">Yeniden Adlandırmak için Kaydır</string> + <string name="swipe_rename"> Yeniden Adlandır</string> + <string name="confirm_hdr">Onayla</string> + <string name="mount_hdr">Bağla</string> + <string name="mount_sel_part">Bağlanacak Bölümleri Seç:</string> + <string name="mount_sys_ro_chk">Sistem bölümünü salt okunur bağla</string> + <string name="mount_sys_ro_s_chk">System RO Bağla</string> + <string name="decrypt_data_btn">Veri Şifresini Çöz</string> + <string name="disable_mtp_btn">MTP\'yi Devre Dışı Bırak</string> + <string name="enable_mtp_btn">MTP\'yi Etkinleştir</string> + <string name="mount_usb_storage_btn">USB Depolamayı Bağla</string> + <string name="usb_storage_hdr">USB Depolama</string> + <string name="usb_stor_mnt1">USB Depolama Bağlandı</string> + <string name="usb_stor_mnt2">Çıkarmadan önce cihazınızı bilgisayarınızdan</string> + <string name="usb_stor_mnt3">güvenle çıkardığınızdan emin olun!</string> + <string name="unmount_btn">Çıkar</string> + <string name="rb_system_btn">Sistem</string> + <string name="rb_poweroff_btn">Kapat</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">İndir</string> + <string name="turning_off">Kapatılıyor...</string> + <string name="swipe_power_off">Kapatmak için Kaydır</string> + <string name="swipe_power_off_s">Kapat</string> + <string name="sys_ro_hdr">Değiştirilmemiş Sistem Bölümü</string> + <string name="sys_ro_keep">Sistem bölümü salt okunur kalsın mı?</string> + <string name="sys_rop1">TWRP resmi güncellemeleri almanızı kolaylaştırmak</string> + <string name="sys_rop2">için sistem bölümünüzü değiştirmeyebilir.</string> + <string name="sys_rop3">TWRP stock ROM\'un kendisini değiştirmesini</string> + <string name="sys_rop4">engelleyemeyecek ve cihazınızı rootlamanızı istemeyecek.</string> + <string name="sys_rop5">Zip yüklemek veya adb işlemleri gerçekleştirmek</string> + <string name="sys_rop6">sistem bölümünü değiştirebilir.</string> + <string name="sys_rol1">TWRP resmi güncellemeleri almanızı kolaylaştırmak için sistem bölümünüzü değiştirmeyebilir.</string> + <string name="sys_rol2">TWRP stock ROM\'un kendisini değiştirmesini engelleyemeyecek ve cihazınızı rootlamanızı istemeyecek.</string> + <string name="sys_rol3">Zip yüklemek veya adb işlemleri gerçekleştirmek sistem bölümünü değiştirebilir.</string> + <string name="sys_ro_never_show_chk">Bu ekranı açılış sırasında tekrar gösterme</string> + <string name="sys_ro_keep_ro_btn">Salt Okunur Bırak</string> + <string name="swipe_allow_mod">Değişikliklere İzin Vermek için Kaydır</string> + <string name="swipe_allow_mod_s">Değişikliklere İzin Ver</string> + <string name="settings_hdr">Ayarlar</string> + <string name="settings_gen_hdr">Genel</string> + <string name="settings_gen_s_hdr">Genel</string> + <string name="settings_gen_btn">Genel</string> + <string name="use_rmrf_chk">Biçimlendirme yerine rm -rf kullan</string> + <string name="use24clock_chk">24-saat biçimini kullan</string> + <string name="rev_navbar_chk">Tersine çevrilmiş gezinti çubuğu düzeni</string> + <string name="simact_chk">Tema testi için eylemleri canlandır</string> + <string name="simfail_chk">Eylemler canlandırılamadı</string> + <string name="ctr_navbar_rdo">Merkezi gezinti çubuğu düğmeleri</string> + <string name="lft_navbar_rdo">Gezinti çubuğu düğmelerini sola hizala</string> + <string name="rht_navbar_rdo">Gezinti çubuğu düğmelerini sağa hizala</string> + <string name="restore_defaults_btn">Varsayılanları Geri Yükle</string> + <string name="settings_tz_btn">Zaman Dilimi</string> + <string name="settings_screen_btn">Ekran</string> + <string name="settings_screen_bright_btn">Ekran Parlaklığı</string> + <string name="settings_vibration_btn">Titreşim</string> + <string name="settings_language_btn">Dil</string> + <string name="time_zone_hdr">Zaman Dilimi</string> + <string name="sel_tz_list">Zaman Dilimi Seç:</string> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Central Time</string> + <string name="utcm5">(UTC -5) Eastern Time</string> + <string name="utcm4">(UTC -4) Atlantic Time</string> + <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbon</string> + <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string> + <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string> + <string name="utcp3">(UTC +3) Moscow, Baghdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string> + <string name="utcp10">(UTC +10) Eastern Australia, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">Ofset Seçin (Genellikle 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">Hiçbiri</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">Gün ışığından yararlanma saati (DST) kullan</string> + <string name="curr_tz">Geçerli Zaman Dilimi: %tw_time_zone%</string> + <string name="curr_tz_s">Geçerli Zaman Dilimi:</string> + <string name="set_tz_btn">Zaman Dilimini Ayarla</string> + <string name="settings_screen_hdr">Ekran</string> + <string name="settings_screen_timeout_hdr">Ekran Zaman Aşımı</string> + <string name="enable_timeout_chk">Ekran zaman aşımını etkinleştir</string> + <string name="screen_to_slider">Ekran zaman aşımı:</string> + <string name="screen_to_slider_s">Ekran zaman aşımı (0=devre dışı): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">Ekran zaman aşımı ayarı kullanılabilir değil</string> + <string name="screen_bright_slider">Parlaklık: %tw_brightness_pct%%</string> + <string name="screen_bright_na">Parlaklık ayarı kullanılabilir değil</string> + <string name="vibration_hdr">Titreşim</string> + <string name="button_vibration_hdr">Düğme Titireşimi</string> + <string name="kb_vibration_hdr">Klavye Titreşimi</string> + <string name="act_vibration_hdr">Eylem Titreşimi</string> + <string name="button_vibration">Düğme Titreşimi:</string> + <string name="kb_vibration">Klavye Titreşimi:</string> + <string name="act_vibration">Eylem Titreşimi:</string> + <string name="select_language">Dil Seç:</string> + <string name="sel_lang_btn">Dil Seç</string> + <string name="set_language_btn">Dili Ayarla</string> + <string name="advanced_hdr">Gelişmiş</string> + <string name="copy_log_confirm">Kayıt SD Karta Kopyalansın Mı?</string> + <string name="copying_log">Kayıt SD Karta Kopyalanıyor...</string> + <string name="copy_log_complete">Kayıt Kopyalama Tamamlandı</string> + <string name="part_sd_btn">SD Kartı Bölümle</string> + <string name="part_sd_s_btn">SD Kart</string> + <string name="file_manager_btn">Dosya Yöneticisi</string> + <string name="language_hdr">Dil</string> + <string name="terminal_btn">Terminal</string> + <string name="reload_theme_btn">Temayı Yeniden Yükle</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP Ekle</string> + <string name="inject_twrp_confirm">TWRP yeniden eklensin mi?</string> + <string name="injecting_twrp">TWRP yeniden ekleniyor...</string> + <string name="inject_twrp_complete">TWRP Ekleme Tamamlandı</string> + <string name="swipe_to_confirm">Onaylamak için Kaydır</string> + <string name="part_sd_hdr">SD Kartı Bölümle</string> + <string name="invalid_partsd_sel">Çıkarılabilir bir cihaz seçmelisiniz</string> + <string name="part_sd_lose">SD kartınız üzerindeki tüm dosyaları kaybedeceksiniz!</string> + <string name="part_sd_undo">Bu işlem geri alınamaz!</string> + <string name="part_sd_ext_sz">EXT Boyutu:</string> + <string name="part_sd_swap_sz">Swap Boyutu:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">Dosya Sistemi:</string> + <string name="swipe_part_sd">Bölümlemek için Kaydır</string> + <string name="swipe_part_sd_s">Bölümle</string> + <string name="partitioning_sd">SD Kart Bölümleniyor...</string> + <string name="partitioning_sd2">Bu işlem birkaç dakika sürecek.</string> + <string name="part_sd_complete">Bölümleme Tamamlandı</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">Orijinal Boot\'u Geri Yükle</string> + <string name="dumlock_restore_confirm">Orijinal boot imajı geri yüklensin mi?</string> + <string name="dumlock_restoring">Orijinal Boot Geri Yükleniyor...</string> + <string name="dumlock_restore_complete">Orijinal Boot Geri Yüklemesi Tamamlandı</string> + <string name="dumlock_reflash_btn">Recovery\'i Yeniden Flashla</string> + <string name="dumlock_reflash_confirm">Cihazın açılması için kurtarma yazılımı tekrar yüklensin mi?</string> + <string name="dumlock_reflashing">Cihazın açılması için kurtarma yazılımı tekrar yükleniyor...</string> + <string name="dumlock_reflash_complete">Cihazın açılması için kurtarma yazılımı tekrar yükleme tamamlandı</string> + <string name="dumlock_install_btn">HTC Dumlock Yükle</string> + <string name="dumlock_install_confirm">HTC dumlock dosyaları ROM\'a yüklensin mi?</string> + <string name="dumlock_installing">HTC Dumlock Yükleniyor...</string> + <string name="dumlock_install_complete">HTC Dumlock Yüklemesi Tamamlandı</string> + <string name="swipe_to_unlock">Kilidi Açmak için Kaydır</string> + <string name="swipe_unlock"> Kilidi Aç</string> + <string name="fm_hdr">Dosya Yöneticisi</string> + <string name="fm_sel_file">Bir Dosya veya Klasör Seçin</string> + <string name="fm_type_folder">Klasör</string> + <string name="fm_type_file">Dosya</string> + <string name="fm_choose_act">Eylem Seçin</string> + <string name="fm_selected">%tw_fm_type% seçili:</string> + <string name="fm_copy_btn">Kopyala</string> + <string name="fm_copy_file_btn">Dosya Kopyala</string> + <string name="fm_copy_folder_btn">Klasör Kopyala</string> + <string name="fm_copying">Kopyalanıyor</string> + <string name="fm_move_btn">Taşı</string> + <string name="fm_moving">Taşınıyor</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">Sil</string> + <string name="fm_deleting">Siliniyor</string> + <string name="fm_rename_btn">Yeniden Adlandır</string> + <string name="fm_rename_file_btn">Dosyayı Yeniden Adlandır</string> + <string name="fm_rename_folder_btn">Klasörü Yeniden Adlandır</string> + <string name="fm_renaming">Yeniden Adlandırılıyor</string> + <string name="fm_sel_dest">Hedef Klasörü Seçin</string> + <string name="fm_sel_curr_folder">Geçerli Klasörü Seç</string> + <string name="fm_rename_hdr">Yeniden Adlandır</string> + <string name="fm_set_perms_hdr">İzinleri Ayarla</string> + <string name="fm_perms">İzinler:</string> + <string name="fm_complete">Dosya İşlemi Tamamlandı</string> + <string name="decrypt_data_hdr">Veri Şifresini Çöz</string> + <string name="decrypt_data_enter_pass">Şifre Gir.</string> + <string name="decrypt_data_enter_pattern">Desen Girin.</string> + <string name="decrypt_data_trying">Şifre Çözülmeye Çalışılıyor</string> + <string name="term_hdr">Terminal Komutu</string> + <string name="term_s_hdr">Terminal</string> + <string name="term_kill_btn">SONLANDIR</string> + <string name="term_sel_folder_hdr">Başlangıç Klasörüne Gözat</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Dalvik Önbelleğini Temizle</string> + <string name="sideload_wipe_cache_chk">Önbelleği Temizle</string> + <string name="swipe_to_sideload">Sideload\'u Başlatmak için Kaydır</string> + <string name="swipe_sideload"> Başlat</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">Kullanım: adb sideload dosyaadı.zip</string> + <string name="sideload_complete">ADB Sideload Tamamlandı</string> + <string name="reboot_hdr">Yeniden Başlat</string> + <string name="su_hdr">SuperSU Denetimi</string> + <string name="su_note1">Cihazınız rootlanmamış görünüyor.</string> + <string name="su_note2">SuperSU şimdi yüklensin mi?</string> + <string name="su_note3">Bu işlem cihazınızı rootlayacaktır.</string> + <string name="su_cancel">Yükleme</string> + <string name="swipe_su_to_install">Yüklemek için Kaydır</string> + <string name="swipe_su_install"> Yükle</string> + <string name="su_installing">SuperSU Yükleniyor</string> + <string name="sel_storage_list">Depolama Seç</string> + <string name="ok_btn">Tamam</string> + <string name="no_kernel_selinux">Kernel SELinux içeriklerini okuma desteğine sahip değil.</string> + <string name="full_selinux">Tam SELinux desteği mevcut.</string> + <string name="no_selinux">SELinux desteği yok (libselinux yok).</string> + <string name="mtp_enabled">MTP Etkin</string> + <string name="mtp_crash">MTP Çöktü, açılışta başlatılmıyor.</string> + <string name="decrypt_success">Varsayılan şifre ile çözüldü.</string> + <string name="unable_to_decrypt">Varsayılan şifre ile çözülemedi. Veri Biçimlendirmesi yapmanız gerekebilir.</string> + <string name="generating_md51">MD5 Oluşturuluyor</string> + <string name="generating_md52"> * Md5 oluşturuluyor...</string> + <string name="md5_created"> * MD5 Oluşturuldu.</string> + <string name="md5_error"> * MD5 Hatası!</string> + <string name="md5_compute_error"> * MD5 hesaplama hatası.</string> + <string name="current_date">(Geçerli Tarih)</string> + <string name="auto_generate">(Otomatik Oluştur)</string> + <string name="unable_to_locate_partition">Yedekleme hesaplamaları için \'{1}\' bölümü bulunamıyor.</string> + <string name="no_partition_selected">Yedekleme için bölüm seçilmedi.</string> + <string name="total_partitions_backup"> * Toplam yedeklenecek bölüm sayısı: {1}</string> + <string name="total_backup_size"> * Toplam veri boyutu: {1}MB</string> + <string name="available_space"> * Kullanılabilir alan: {1}MB</string> + <string name="unable_locate_storage">Depolama aygıtı bulunamıyor.</string> + <string name="no_space">Yeteri kadar boş alan yok.</string> + <string name="backup_started">[YEDEKLEME BAŞLATILDI]</string> + <string name="backup_folder"> * Yedekleme Klasörü: {1}</string> + <string name="fail_backup_folder">Yedekleme klasörü oluşturulamadı.</string> + <string name="avg_backup_fs">Dosya sistemleri için ortalama yedekleme oranı: {1} MB/sec</string> + <string name="avg_backup_img">Görüntülü sürücüler için ortalama yedekleme hızı: {1} MB/sec</string> + <string name="total_backed_size">[{1} MB YEDEKLENDİ]</string> + <string name="backup_completed">[YEDEKLEME {1} SANİYEDE TAMAMLANDI]</string> + <string name="restore_started">[GERİ YÜKLEME BAŞLATILDI]</string> + <string name="restore_folder">Geri yükleme klasörü: \'{1}\'</string> + <string name="verifying_md5">MD5 Doğrulanıyor</string> + <string name="skip_md5">Kullanıcı ayarına göre MD5 denetimi geçiliyor.</string> + <string name="calc_restore">Geri yükleme ayrıntıları hesaplanıyor...</string> + <string name="restore_read_only">{1} geri yüklenemiyor -- salt okunur bağlanmış.</string> + <string name="restore_unable_locate">Geri yüklemek için \'{1}\' bölümü bulunamıyor.</string> + <string name="no_part_restore">Geri yüklemek için bölüm seçilmedi.</string> + <string name="restore_part_count">{1} bölüm geri yükleniyor...</string> + <string name="total_restore_size">Toplam geri yükleme boyutu {1}MB</string> + <string name="updating_system_details">Sistem Ayrıntıları Güncelleniyor</string> + <string name="restore_completed">[GERİ YÜKLEME {1} SANİYE İÇİNDE TAMAMLANDI]</string> + <string name="error_opening_strerr">Açma hatası: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">Bölüm yedek adına göre bulunamadı: \'{1}\'</string> + <string name="unable_find_part_path">\'{1}\' yolu için bölüm bulunamıyor</string> + <string name="update_part_details">Bölüm ayrıntıları güncelleniyor...</string> + <string name="update_part_details_done">...bitti</string> + <string name="wiping_dalvik">Dalvik Önbelleği Dizinleri Temizleniyor...</string> + <string name="cleaned">Temizlendi: {1}...</string> + <string name="dalvik_done">-- Dalvik Önbelleği Dizinleri Temizleme Tamamlandı!</string> + <string name="no_andsec">Android secure bölümü yok.</string> + <string name="unable_to_locate">{1} bulunamıyor.</string> + <string name="wiping_datamedia">Dahili depolama temizleniyor -- /veri/ortam...</string> + <string name="unable_to_mount">{1} bağlanamadı</string> + <string name="unable_to_mount_internal">Dahili depolama bağlanamadı</string> + <string name="unable_to_mount_storage">Depolama bağlanamadı</string> + <string name="fail_decrypt">Verilerin şifresi çözülemedi.</string> + <string name="no_crypto_support">Şifreleme desteği bu yapı içine derlenmemiştir.</string> + <string name="decrypt_success_dev">Veri başarıyla deşifre edildi, yeni blok aygıtı: \'{1}\'</string> + <string name="done">Bitti.</string> + <string name="start_partition_sd">SD Kart Bölümleniyor...</string> + <string name="partition_sd_locate">Bölümlenecek cihaz bulunamadı.</string> + <string name="ext_swap_size">EXT + Swap boyutu sd kart boyutundan daha büyük.</string> + <string name="remove_part_table">Bölüm tablosu kaldırılıyor...</string> + <string name="unable_rm_part">Bölüm tablosu kaldırılamadı.</string> + <string name="create_part">{1} bölümü oluşturuluyor...</string> + <string name="unable_to_create_part">{1} bölümü oluşturulamadı.</string> + <string name="format_sdext_as">Sd-ext, {1} olarak biçimlendiriliyor...</string> + <string name="part_complete">Bölümleme tamamlandı.</string> + <string name="unable_to_open">\'{1}\' açılamadı.</string> + <string name="mtp_already_enabled">MTP zaten etkin</string> + <string name="mtp_fail">MTP etkinleştirilemedi</string> + <string name="no_mtp">MTP desteği dahil değil</string> + <string name="image_flash_start">[İMAJ FLASHLAMA BAŞLATILDI]</string> + <string name="img_to_flash">Flashlanacak imaj: \'{1}\'</string> + <string name="flash_unable_locate">Flashlama için \'{1}\' bölümü bulunamıyor.</string> + <string name="no_part_flash">Flashlama için bölüm seçilmedi.</string> + <string name="too_many_flash">Flashlama için çok fazla bölüm seçildi.</string> + <string name="invalid_flash">Geçersiz flash bölümü belirtildi.</string> + <string name="flash_done">[İMAJ FLASHLAMA TAMAMLANDI]</string> + <string name="wiping">{1} temizleniyor</string> + <string name="repair_not_exist">{1} yok! Onarılamıyor!</string> + <string name="repairing_using">{2} kullanılarak {1} onarılıyor...</string> + <string name="unable_repair">{1} onarılamıyor.</string> + <string name="create_folder_strerr">\'{1}\' klasörü oluşturulamıyor ({2}).</string> + <string name="fail_mount">\'{1}\' bağlanamıyor ({2})</string> + <string name="fail_unmount">\'{1}\' çıkarılamıyor ({2})</string> + <string name="cannot_resize">{1} yeniden boyutlandırılamıyor.</string> + <string name="repair_resize">Yeniden boyutlandırmadan önce {1} onarılıyor.</string> + <string name="unable_resize">{1} yeniden boyutlandırılamıyor.</string> + <string name="formatting_using">{2} kullanılarak {1} biçimlendiriliyor...</string> + <string name="unable_to_wipe">{1} temizlenemiyor.</string> + <string name="cannot_wipe">{1} bölümü temizlenemiyor.</string> + <string name="remove_all">\'{1}\' altındaki tüm dosyalar kaldırılıyor</string> + <string name="wiping_data">/data/media temizlenmeden data temizleniyor ...</string> + <string name="backing_up">{1} yedekleniyor...</string> + <string name="backup_cancel">Yedekleme İptal Edildi</string> + </resources> +</language>
\ No newline at end of file diff --git a/gui/theme/common/languages/uk.xml b/gui/theme/common/languages/uk.xml new file mode 100644 index 000000000..c27f0683b --- /dev/null +++ b/gui/theme/common/languages/uk.xml @@ -0,0 +1,681 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+
+<language>
+ <display>Українська</display>
+
+ <!-- Translated by Bukwaezhka and Jemmini, 2016 -->
+
+ <resources>
+ <!-- Font overrides - only change these if your language requires special characters -->
+ <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="90" />
+ <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" />
+
+ <!-- Partition display names -->
+ <string name="system">System</string>
+ <string name="system_image">System Image</string>
+ <string name="vendor">Vendor</string>
+ <string name="vendor_image">Vendor Image</string>
+ <string name="boot">Boot</string>
+ <string name="recovery">Recovery</string>
+ <string name="cache">Cache</string>
+ <string name="data">Data</string>
+ <string name="sdcard">SDCard</string>
+ <string name="internal">Internal Storage</string>
+ <string name="microsd">Micro SDCard</string>
+ <string name="usbotg">USB OTG</string>
+ <string name="android_secure">Android Secure</string>
+ <string name="dalvik">Dalvik / ART Cache</string>
+ <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system -->
+ <string name="sdext">SD-EXT</string>
+ <string name="adopted_data">Adopted Data</string>
+ <string name="adopted_storage">Adopted Storage</string>
+
+ <!-- GUI XML strings -->
+
+
+ <string name="cpu_temp">Процесор: %tw_cpu_temp% °C</string>
+ <string name="battery_pct">Батарея: %tw_battery%</string>
+ <string name="sort_by_name">Сортувати за назвою</string>
+ <string name="sort_by_date">Сортувати по даті</string>
+ <string name="sort_by_size">Сортувати за розміром</string>
+ <string name="sort_by_name_only">Назва</string>
+ <string name="sort_by_date_only">Дата</string>
+ <string name="sort_by_size_only">Розмір</string>
+ <string name="tab_general">ЗАГАЛЬНІ</string>
+ <string name="tab_options">ПАРАМЕТРИ</string>
+ <string name="tab_backup">РЕЗЕРВУВАННЯ</string>
+ <string name="tab_time_zone">ЧАСОВИЙ ПОЯС</string>
+ <string name="tab_screen">ЕКРАН</string>
+ <string name="tab_vibration">ВІБРАЦІЯ</string>
+ <string name="tab_language">МОВА</string>
+ <string name="install_btn">Встановити</string>
+ <string name="wipe_btn">Витерти</string>
+ <string name="backup_btn">Резервувати</string>
+ <string name="restore_btn">Відновити</string>
+ <string name="mount_btn">Монтувати</string>
+ <string name="settings_btn">Налаштування</string>
+ <string name="advanced_btn">Додатково</string>
+ <string name="reboot_btn">Перезавантажити</string>
+ <string name="files_btn">Файли</string>
+ <string name="copy_log_btn">Копіювати Log</string>
+ <string name="select_type_hdr">Вибрати тип</string>
+ <string name="install_zip_hdr">Встановити Zip</string>
+ <string name="install_zip_btn">Встановити Zip</string>
+ <string name="install_image_hdr">Встановити Img-образ</string>
+ <string name="install_image_btn">Встановити Img</string>
+ <string name="install_select_file_hdr">Вибрати файл</string>
+ <string name="file_selector_folders_hdr">Папки</string>
+ <string name="select_file_from_storage">Виберіть файл з %tw_storage_display_name% (%tw_storage_free_size% МБ)</string>
+ <string name="adb_sideload_btn">ADB завантаження</string>
+ <string name="install_hdr">Встановлення</string>
+ <string name="select_storage_hdr">Обрати сховище</string>
+ <string name="select_storage_btn">Обрати сховище</string>
+ <string name="queue_hdr">Черга</string>
+ <string name="zip_queue_count">%tw_zip_queue_count% з максимум 10 файлів у черзі</string>
+ <string name="zip_queue_count_s">Файл %tw_zip_queue_count% з 10:</string>
+ <string name="zip_warn1">Ця операція може встановити несумісні</string>
+ <string name="zip_warn2">файли і зламати прошивку.</string>
+ <string name="zip_back_cancel">Натисніть Назад, щоб скасувати додавання цього zip.</string>
+ <string name="zip_back_clear">Натисніть Назад, щоб очистити чергу.</string>
+ <string name="folder">Папка:</string>
+ <string name="file">Файл:</string>
+ <string name="zip_sig_chk">Перевірка підпису Zip</string>
+ <string name="install_reboot_chk">Автоматичне перезавантаження після встановлення</string>
+ <string name="inject_twrp_chk">Інтегрувати TWRP після встановлення</string>
+ <string name="options_hdr">Параметри</string>
+ <string name="confirm_flash_hdr">Підтвердити Прошивку</string>
+ <string name="zip_queue">Черга:</string>
+ <string name="options">Параметри:</string>
+ <string name="swipe_confirm"> Підтвердити</string>
+ <string name="zip_add_btn">Додати ще Zip</string>
+ <string name="zip_clear_btn">Очистити чергу Zip</string>
+ <string name="install_zip_count_hdr">Встановлення Zip %tw_zip_index% з %tw_zip_queue_count%</string>
+ <string name="installing_zip_xml">Встановлення Zip: %tw_file%</string>
+ <string name="failed">Не вдалося</string>
+ <string name="successful">Успішно</string>
+ <string name="install_failed">Помилка встановлення</string>
+ <string name="install_successful">Успішно встановлено</string>
+ <string name="wipe_cache_dalvik_btn">Очистка cache/dalvik</string>
+ <string name="reboot_system_btn">Завантажити систему</string>
+ <string name="install_sel_target">Вибір розділу</string>
+ <string name="flash_image_select">Виберіть разділ для прошивки образу:</string>
+ <string name="target_partition">Цільовий розділ:</string>
+ <string name="flashing_image">Прошивка образу...</string>
+ <string name="image_flashed">Прошивка образу завершена</string>
+ <string name="wipe_cache_dalvik_confirm">Очистити Cache & Dalvik?</string>
+ <string name="wiping_cache_dalvik">Очищення Cache & Dalvik...</string>
+ <string name="wipe_cache_dalvik_complete">Очищення Cache & Dalvik завершено</string>
+ <string name="swipe_wipe">Очистити</string>
+ <string name="swipe_wipe_s"> Очистка</string>
+ <string name="no_os1">Система не встановлена! Ви впевнені,</string>
+ <string name="no_osrb">що хочете перезавантажити?</string>
+ <string name="no_ospo">що хочете вимкнути?</string>
+ <string name="rebooting">Перезавантаження...</string>
+ <string name="swipe_reboot">Перезавантажити</string>
+ <string name="swipe_reboot_s"> Перезавантаження</string>
+ <string name="swipe_flash">Прошити</string>
+ <string name="confirm_action">Підтвердити</string>
+ <string name="back_cancel">Натисніть Назад щоб скасувати.</string>
+ <string name="cancel_btn">Скасувати</string>
+ <string name="wipe_hdr">Очистка</string>
+ <string name="factory_reset_hdr">Скинути до заводських налаштувань</string>
+ <string name="factory_reset_btn">Скинути налаштування</string>
+ <string name="factory_reset1">Очистка Data, Cache та Dalvik</string>
+ <string name="factory_reset2">(не включаючи внутрішню пам'ять)</string>
+ <string name="factory_reset3">У більшості випадків достатньо</string>
+ <string name="factory_reset4">очистити ці розділи.</string>
+ <string name="factory_resetting">Скидання до заводських налаштувань...</string>
+ <string name="advanced_wipe_hdr">Вибіркове очищення</string>
+ <string name="advanced_wipe_btn">Вибіркове очищення</string>
+ <string name="wipe_enc_confirm">Скинути Шифрування Data?</string>
+ <string name="formatting_data">Форматування Data...</string>
+ <string name="swipe_format_data">Форматувати Data</string>
+ <string name="swipe_format_data_s"> Форматування Data</string>
+ <string name="factory_reset_complete">Скидання до заводських налаштувань завершено</string>
+ <string name="sel_part_hdr">Вибір розділів</string>
+ <string name="wipe_sel_confirm">Очистити вибрані розділи?</string>
+ <string name="wiping_part">Очищення розділів...</string>
+ <string name="wipe_complete">Очищення завершено</string>
+ <string name="sel_part_wipe">Виберіть розділи для очищення:</string>
+ <string name="invalid_part_sel">Вибрано невірний розділ</string>
+ <string name="format_data_hdr">Форматувати Data</string>
+ <string name="format_data_btn">Форматувати Data</string>
+ <string name="format_data_ptr1">Форматування Data очистить всі ваші додатки,</string>
+ <string name="format_data_ptr2">резервні копії, фотографії, відео, медіафайли</string>
+ <string name="format_data_ptr3">та видалить шифровані файли з внутрішньої пам'яті.</string>
+ <string name="format_data_adopted">Включаючи пристосовану пам'ять</string>
+ <string name="format_data_lcp1">Форматування Data очистить всі ваші додатки, резервні копії, відео, медіафайли</string>
+ <string name="format_data_lcp2">та видалить шифровані файли з внутрішньої пам'яті.</string>
+ <string name="format_data_wtc1">Форматування Data очистить всі ваші додатки,</string>
+ <string name="format_data_wtc2">резервні копії та медіафайли. Скасування цього неможливе.</string>
+ <string name="format_data_undo">Скасування цього неможливе.</string>
+ <string name="format_data_complete">Форматування Data завершено</string>
+
+ <!-- Translator note: the word "yes" must remain English! -->
+ <string name="yes_continue">Введіть yes щоб продовжити. Натисніть Назад щоб скасувати.</string>
+ <string name="part_opt_hdr">Параметри розділу %tw_partition_name%</string>
+ <string name="sel_act_hdr">Оберіть дію</string>
+ <string name="file_sys_opt">Параметри файлової системи</string>
+ <string name="partition">Розділ: %tw_partition_name%</string>
+ <string name="part_mount_point">Точка монтування: %tw_partition_mount_point%</string>
+ <string name="part_curr_fs">Файлова система: %tw_partition_file_system%</string>
+ <string name="part_present_yes">Присутній: Так</string>
+ <string name="part_present_no">Присутній: Ні</string>
+ <string name="part_removable_yes">Знімний: так</string>
+ <string name="part_removable_no">Знімний: ні</string>
+ <string name="part_size">Розмір: %tw_partition_size%MБ</string>
+ <string name="part_used">Зайнято: %tw_partition_used%МБ</string>
+ <string name="part_free">Вільно: %tw_partition_free%МБ</string>
+ <string name="part_backup_size">Розмір РК: %tw_partition_backup_size%МБ</string>
+ <string name="resize_btn">Змінити розмір файлової системи</string>
+ <string name="resize_btn_s">Змінити розмір</string>
+ <string name="resize_confirm">Змінити розмір %tw_partition_name%?</string>
+ <string name="resizing">Зміна розміру...</string>
+ <string name="resize_complete">Зміна розміру завершена</string>
+ <string name="swipe_resize">Змінити</string>
+ <string name="swipe_resize_s"> Зміна розміру</string>
+ <string name="repair_btn">Відновити файлову систему</string>
+ <string name="repair_btn_s">Відновити</string>
+ <string name="repair_confirm">Відновити %tw_partition_name%?</string>
+ <string name="repairing">Відновлення...</string>
+ <string name="repair_complete">Відновлення завершено</string>
+ <string name="swipe_repair">Відновити</string>
+ <string name="swipe_repair_s"> Відновлення</string>
+ <string name="change_fs_btn">Змінити файлову систему</string>
+ <string name="change_fs_btn_s">Змінити</string>
+ <string name="change_fs_for_hdr">Змінити файлову систему для: %tw_partition_name%</string>
+ <string name="change_fs_for_hdr_s">Розділ: %tw_partition_name% > виберіть файлову систему</string>
+ <string name="change_fs_warn1">Деякі прошивки або ядра можуть не підтримувати деякі</string>
+ <string name="change_fs_warn2">файлові системи. Користуйтесь обережно!</string>
+ <string name="change_fs_confirm">Змінити %tw_partition_name%?</string>
+ <string name="formatting">Форматування...</string>
+ <string name="format_complete">Форматування Завершено</string>
+ <string name="swipe_change_fs">Змінити</string>
+ <string name="swipe_change_s"> Зміна</string>
+ <string name="back_btn">Назад</string>
+ <string name="wipe_enc_btn">Стерти Шифрування</string>
+ <string name="swipe_factory_reset">Скинути</string>
+ <string name="repair_change_btn">Відновити або змінити Файлову Систему</string>
+ <string name="storage_hdr">Сховище: (%tw_storage_display_name% МБ)</string>
+ <string name="backup_hdr">Резервне копіювання</string>
+ <string name="backup_confirm_hdr">Підтвердження Резервування</string>
+ <string name="encryption_tab">ШИФРУВАННЯ</string>
+ <string name="encryption">Шифрування:</string>
+ <string name="name">Ім’я:</string>
+ <string name="sel_part_backup">Вибрати Розділ для Резервування:</string>
+ <string name="storage">Сховище:</string>
+ <string name="enc_disabled">вимкнено - встановіть пароль</string>
+ <string name="enc_enabled">увімкнено</string>
+ <string name="enable_backup_comp_chk">Увімкнути стискання</string>
+ <string name="skip_md5_backup_chk">Пропустити генерацію MD5 під час Резервного Копіювання</string>
+ <string name="disable_backup_space_chk">Вимкнути перевірку вільного місця</string>
+ <string name="refresh_sizes_btn">Оновити розміри</string>
+ <string name="swipe_backup">Резервувати</string>
+ <string name="append_date_btn">Додати дату</string>
+ <string name="backup_name_exists">Резервна копія з такою назвою вже існує!</string>
+ <string name="encrypt_backup">Шифрувати резервну копію?</string>
+ <string name="enter_pass">Введіть пароль:</string>
+ <string name="enter_pass2">Введіть пароль ще раз:</string>
+ <string name="pass_not_match">Паролі не співпадають!</string>
+ <string name="partitions">Розділи:</string>
+ <string name="disabled">Вимкнено</string>
+ <string name="enabled">Увімкнено</string>
+ <string name="backup_name_hdr">Введіть назву для Резервної копії</string>
+ <string name="progress">Прогрес:</string>
+ <string name="backup_complete">Резервне копіювання завершено</string>
+ <string name="restore_hdr">Відновити</string>
+ <string name="sel_backup_hdr">Виберіть резервну копію</string>
+ <string name="restore_sel_store_hdr">Оберіть резервну копію з %tw_storage_display_name% (%tw_storage_free_size% МБ)</string>
+ <string name="restore_sel_pack_fs">Виберіть пакунок для відновлення:</string>
+ <string name="restore_enc_backup_hdr">Зашифрована Резервна копія</string>
+ <string name="restore_dec_fail">Неправильний пароль, будь ласка, спробуйте ще раз!</string>
+ <string name="del_backup_btn">Видалити резервну копію</string>
+ <string name="del_backup_confirm">Видалити резервну копію?</string>
+ <string name="del_backup_confirm2">Це неможливо скасувати!</string>
+ <string name="deleting_backup">Видалення резервної копії...</string>
+ <string name="backup_deleted">Видалення резервної копії завершено</string>
+ <string name="swipe_delete">Видалити</string>
+ <string name="swipe_delete_s"> Видалення</string>
+ <string name="restore_try_decrypt">Шифрована Резервна копія - спроба дешифрувати</string>
+ <string name="restore_try_decrypt_s">Спроба дешифрувати</string>
+ <string name="restore_backup_date">Резервна копія створена: %tw_restore_file_date%</string>
+ <string name="restore_sel_part">Виберіть розділ для відновлення:</string>
+ <string name="restore_enable_md5_chk">Увімкнути перевірку MD5 для файлів резервних копій</string>
+ <string name="restore_complete">Відновлення завершено</string>
+ <string name="swipe_restore">Відновити</string>
+ <string name="swipe_restore_s"> Відновлення</string>
+ <string name="rename_backup_hdr">Перейменування резервної копії</string>
+ <string name="rename_backup_confirm">Перейменувати резервну копію?</string>
+ <string name="rename_backup_confirm2">Це неможливо скасувати!</string>
+ <string name="renaming_backup">Перейменування резервної копії...</string>
+ <string name="rename_backup_complete">Перейменування резервної копії завершено</string>
+ <string name="swipe_to_rename">Перейменувати</string>
+ <string name="swipe_rename"> Перейменування</string>
+ <string name="confirm_hdr">Підтвердити</string>
+ <string name="mount_hdr">Монтувати</string>
+ <string name="mount_sel_part">Виберіть розділи для монтування:</string>
+ <string name="mount_sys_ro_chk">Системний розділ тільки для читання</string>
+ <string name="mount_sys_ro_s_chk"> Система RO</string>
+ <string name="decrypt_data_btn">Розшифрувати Data</string>
+ <string name="disable_mtp_btn">Вимкнути MTP</string>
+ <string name="enable_mtp_btn">Увімкнути MTP</string>
+ <string name="mount_usb_storage_btn">Змонтувати USB</string>
+ <string name="usb_storage_hdr">USB накопичувач</string>
+ <string name="usb_stor_mnt1">USB накопичувач змонтований</string>
+ <string name="usb_stor_mnt2">Для безпечного від'єднання вашого пристрою</string>
+ <string name="usb_stor_mnt3">від компьютера виконайте розмонтування!</string>
+ <string name="unmount_btn">Розмонтувати</string>
+ <string name="rb_system_btn">Система</string>
+ <string name="rb_poweroff_btn">Вимкнення</string>
+ <string name="rb_recovery_btn">Рекавері</string>
+ <string name="rb_bootloader_btn">Завантажувач</string>
+ <string name="rb_download_btn">Режим завантаження</string>
+ <string name="turning_off">Вимкнення...</string>
+ <string name="swipe_power_off">Вимкнути</string>
+ <string name="swipe_power_off_s">Вимкнення</string>
+ <string name="sys_ro_hdr">Модифікація системного розділу</string>
+ <string name="sys_ro_keep">Залишити System тільки для читання?</string>
+ <string name="sys_rop1">TWRP може залишити системний розділ незмінним,</string>
+ <string name="sys_rop2">щоб зберегти можливість отримання офіційних оновлень.</string>
+ <string name="sys_rop3">TWRP не зможе попередити перезапис рекавері офіційною прошивкою </string>
+ <string name="sys_rop4">та не буде пропонувати отримати привілеї суперкористувача.</string>
+ <string name="sys_rop5">Встановлення zip та робота через adb зможе</string>
+ <string name="sys_rop6">модифікувати системний розділ.</string>
+ <string name="sys_rol1">TWRP може залишити системний розділ незмінним, щоб зберегти можливість отримання офіційних оновлень.</string>
+ <string name="sys_rol2">TWRP не зможе попредити перезапис рекавері офіційною прошивкою та не буде пропонувати отримати привілеї суперкористувача.</string>
+ <string name="sys_rol3">Встановлення zip та робота через adb зможе модифікувати системний розділ.</string>
+ <string name="sys_ro_never_show_chk">Більше не показувати при завантаженні</string>
+ <string name="sys_ro_keep_ro_btn">Тільки читання</string>
+ <string name="swipe_allow_mod">Дозволити зміни</string>
+ <string name="swipe_allow_mod_s">Дозволити зміни</string>
+ <string name="settings_hdr">Налаштування</string>
+ <string name="settings_gen_hdr">Загальні</string>
+ <string name="settings_gen_s_hdr">Загальні</string>
+ <string name="settings_gen_btn">Загальні</string>
+ <string name="use_rmrf_chk">Використовувати rm -rf замість форматування</string>
+ <string name="use24clock_chk">Використовувати 24-часовий годинник</string>
+ <string name="rev_navbar_chk">Віддзеркалити навігаційні клавіші</string>
+ <string name="simact_chk">Імітувати дії для тестування теми</string>
+ <string name="simfail_chk">Імітація відмови для дій</string>
+ <string name="ctr_navbar_rdo">Навігаційні кнопки по центру</string>
+ <string name="lft_navbar_rdo">Навігаційні кнопки зліва</string>
+ <string name="rht_navbar_rdo">Навігаційні кнопки зправа</string>
+ <string name="restore_defaults_btn">За замовчуванням</string>
+ <string name="settings_tz_btn">Часовий пояс</string>
+ <string name="settings_screen_btn">Екран</string>
+ <string name="settings_screen_bright_btn">Яскравість екрану</string>
+ <string name="settings_vibration_btn">Вібрація</string>
+ <string name="settings_language_btn">Мова</string>
+ <string name="time_zone_hdr">Часовий пояс</string>
+ <string name="sel_tz_list">Виберіть часовий пояс:</string>
+ <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense,
+ feel free to change the location listed or drop the location entirely and just call it UTC -6 -->
+ <string name="utcm11">(UTC -11) о. Мидуей, Самоа</string>
+ <string name="utcm10">(UTC -10) Гаваї</string>
+ <string name="utcm9">(UTC -9) Аляска</string>
+ <string name="utcm8">(UTC -8) Тихоокеанський часовий пояс</string>
+ <string name="utcm7">(UTC -7) Гірський час (США і Канада), Аризона</string>
+ <string name="utcm6">(UTC -6) Центральний час (США і Канада), Центральна Америка</string>
+ <string name="utcm5">(UTC -5) Східний час (США і Канада), Індіана (схід)</string>
+ <string name="utcm4">(UTC -4) Атлантичний час (Канада), Каракас</string>
+ <string name="utcm3">(UTC -3) Бразилія, Буенос-Айрес</string>
+ <string name="utcm2">(UTC -2) Середньоатлантичний час</string>
+ <string name="utcm1">(UTC -1) Азорські о-ва, о-ва Зеленого мису</string>
+ <string name="utc0">(UTC 0) Лондон, Дублін, Лісабон</string>
+ <string name="utcp1">(UTC +1) Берлін, Брюсель, Париж</string>
+ <string name="utcp2">(UTC +2) Київ, Мінськ, Рига, Талін, Стамбул</string>
+ <string name="utcp3">(UTC +3) Москва, Санкт-Петербург, Волгоград, Багдад</string>
+ <string name="utcp4">(UTC +4) Баку, Ереван, Тбілісі, Абу-Дабі, Мускат</string>
+ <string name="utcp5">(UTC +5) Ташкент, Ісламабад, Карачі</string>
+ <string name="utcp6">(UTC +6) Алмати, Астана, Дхака, Катеринбург</string>
+ <string name="utcp7">(UTC +7) Омськ, Новосибірськ, Бангкок, Джакарта, Ханой</string>
+ <string name="utcp8">(UTC +8) Красноярськ, Пекін, Улан-Батор, Іркутськ</string>
+ <string name="utcp9">(UTC +9) Осака, Саппоро, Токіо, Сеул, Якутськ</string>
+ <string name="utcp10">(UTC +10) Гуам, Канберра, Мельбурн, Сідней</string>
+ <string name="utcp11">(UTC +11) Владивосток, Сахалін, Соломоновы о-ва</string>
+ <string name="utcp12">(UTC +12) Магадан, Камчатка, Фіджи, Маршалови о-ва</string>
+ <string name="sel_tz_offset">Вибір зміщення (як правило 0): %tw_time_zone_guioffset%</string>
+ <string name="tz_offset_none">Немає</string>
+ <string name="tz_offset_0">0</string>
+ <string name="tz_offset_15">15</string>
+ <string name="tz_offset_30">30</string>
+ <string name="tz_offset_45">45</string>
+ <string name="use_dst_chk">Використовувати літній час (DST)</string>
+ <string name="curr_tz">Часовий пояс: %tw_time_zone%</string>
+ <string name="curr_tz_s">Часовий пояс:</string>
+ <string name="set_tz_btn">Встановити часовий пояс</string>
+ <string name="settings_screen_hdr">Екран</string>
+ <string name="settings_screen_timeout_hdr">Таймаут екрану</string>
+ <string name="enable_timeout_chk">Увімкнути таймаут екрану</string>
+ <string name="screen_to_slider">Таймаут екрану, сек:</string>
+ <string name="screen_to_slider_s">Таймаут екрану через, сек(0=вимкнений): %tw_screen_timeout_secs%</string>
+ <string name="screen_to_na">Налаштування таймаута екрану недоступне</string>
+ <string name="screen_bright_slider">Яскравість: %tw_brightness_pct%%</string>
+ <string name="screen_bright_na">Налаштування яскравості недоступні</string>
+ <string name="vibration_hdr">Вібрація</string>
+ <string name="button_vibration_hdr">Натискання клавіш</string>
+ <string name="kb_vibration_hdr">Клавіатури</string>
+ <string name="act_vibration_hdr">При виборі дій</string>
+ <string name="button_vibration">Натискання клавіш:</string>
+ <string name="kb_vibration">Клавіатури:</string>
+ <string name="act_vibration">При виборі дій:</string>
+ <string name="select_language">Вибір мови:</string>
+ <string name="sel_lang_btn">Вибір мови</string>
+ <string name="set_language_btn">Встановити мову</string>
+ <string name="advanced_hdr">Додатково</string>
+ <string name="copy_log_confirm">Копіювати лог SD?</string>
+ <string name="copying_log">Копіювання логу на SD...</string>
+ <string name="copy_log_complete">Копіювання логу завершено</string>
+ <string name="fix_context_btn">Виправити контексти</string>
+ <string name="part_sd_btn">Розмітка SD Card</string>
+ <string name="part_sd_s_btn">SD Card</string>
+ <string name="file_manager_btn">Файл менеджер</string>
+ <string name="language_hdr">Мова</string>
+ <string name="terminal_btn">Термінал</string>
+ <string name="reload_theme_btn">Завантажити тему</string>
+ <string name="dumlock_btn">HTC Dumlock</string>
+ <string name="inject_twrp_btn">Інтегрувати TWRP</string>
+ <string name="inject_twrp_confirm">Інтегрувати TWRP наново?</string>
+ <string name="injecting_twrp">Інтегрування TWRP...</string>
+ <string name="inject_twrp_complete">Інтегрування TWRP завершено</string>
+ <string name="swipe_to_confirm">Підтвердити</string>
+ <string name="part_sd_hdr">Розмітка SD Card</string>
+ <string name="invalid_partsd_sel">Виберіть знімний пристрій</string>
+ <string name="part_sd_lose">Всі ваші файли на SD карті будуть стерті!</string>
+ <string name="part_sd_undo">Це буде неможливо скасувати!</string>
+ <string name="part_sd_ext_sz">EXT розмір:</string>
+ <string name="part_sd_swap_sz">Swap розмір:</string>
+
+
+ <string name="file_system">Файлова система:</string>
+ <string name="swipe_part_sd">Розмітити</string>
+ <string name="swipe_part_sd_s">Розмітка</string>
+ <string name="partitioning_sd">Розмітка SD карти...</string>
+ <string name="partitioning_sd2">Це може зайняти кілька хвилин.</string>
+ <string name="part_sd_complete">Розмітка завершена</string>
+ <string name="dumlock_hdr">HTC Dumlock</string>
+ <string name="dumlock_restore_btn">Відновлення оригінального Boot</string>
+ <string name="dumlock_restore_confirm">Відновити оригінальний образ Boot?</string>
+ <string name="dumlock_restoring">Відновлення оригінального Boot...</string>
+ <string name="dumlock_restore_complete">Відновлення оригінального Boot завершено</string>
+ <string name="dumlock_reflash_btn">Перепрошивка Recovery</string>
+ <string name="dumlock_reflash_confirm">Прошити recovery в boot?</string>
+ <string name="dumlock_reflashing">Прошивка recovery в boot...</string>
+ <string name="dumlock_reflash_complete">Прошивка recovery в boot завершена</string>
+ <string name="dumlock_install_btn">Встановлення HTC Dumlock</string>
+ <string name="dumlock_install_confirm">Встановити HTC dumlock до прошивки?</string>
+ <string name="dumlock_installing">Встановлення HTC Dumlock...</string>
+ <string name="dumlock_install_complete">Встановлення HTC Dumlock завершено</string>
+ <string name="swipe_to_unlock">Розблокувати</string>
+ <string name="swipe_unlock"> Разблокування</string>
+ <string name="fm_hdr">Файловий менеджер</string>
+ <string name="fm_sel_file">Вибір Файла або Папки</string>
+ <string name="fm_type_folder">Папка</string>
+ <string name="fm_type_file">Файл</string>
+ <string name="fm_choose_act">Вибір дії</string>
+ <string name="fm_selected">%tw_fm_type% обрано:</string>
+ <string name="fm_copy_btn">Копіювати</string>
+ <string name="fm_copy_file_btn">Копіювати Файл</string>
+ <string name="fm_copy_folder_btn">Копіювати Папку</string>
+ <string name="fm_copying">Копіювання</string>
+ <string name="fm_move_btn">Перемістити</string>
+ <string name="fm_moving">Переміщення</string>
+ <string name="fm_chmod755_btn">chmod 755</string>
+ <string name="fm_chmod755ing">chmod 755</string>
+ <string name="fm_chmod_btn">chmod</string>
+ <string name="fm_delete_btn">Видалити</string>
+ <string name="fm_deleting">Видалення</string>
+ <string name="fm_rename_btn">Перейменувати</string>
+ <string name="fm_rename_file_btn">Перейменувати Файл</string>
+ <string name="fm_rename_folder_btn">Перейменувати Папку</string>
+ <string name="fm_renaming">Перейменування</string>
+ <string name="fm_sel_dest">Обрати цільову Папку</string>
+ <string name="fm_sel_curr_folder">Обрати поточну Папку</string>
+ <string name="fm_rename_hdr">Перейменувати</string>
+ <string name="fm_set_perms_hdr">Встановити дозволи</string>
+ <string name="fm_perms">Дозволи:</string>
+ <string name="fm_complete">Операція завершена</string>
+ <string name="decrypt_data_hdr">Розшифрувати Data</string>
+ <string name="decrypt_data_enter_pass">Введіть пароль.</string>
+ <string name="decrypt_data_failed">Пароль неправильний, спробуйте ще!</string>
+ <string name="decrypt_data_failed_pattern">Шаблон неправильний, спробуйте ще!</string>
+ <string name="decrypt_data_enter_pattern">Введіть шаблон</string>
+ <string name="decrypt_data_trying">Спроба розшифровки</string>
+ <string name="term_hdr">Команди терміналу</string>
+ <string name="term_s_hdr">Термінал</string>
+ <string name="term_kill_btn">ВБИТИ</string>
+ <string name="term_sel_folder_hdr">Перейти до початкової папки</string>
+ <string name="adb_sideload_hdr">ADB завантаження</string>
+ <string name="sideload_wipe_dalvik_chk">Очистка Dalvik Cache</string>
+ <string name="sideload_wipe_cache_chk">Очистка Cache</string>
+ <string name="swipe_to_sideload">Почати завантаження</string>
+ <string name="swipe_sideload"> Почати</string>
+ <string name="sideload_confirm">ADB завантаження</string>
+ <string name="sideload_usage">Приклад: adb sideload filename.zip</string>
+ <string name="sideload_complete">ADB завантаження завершено</string>
+ <string name="fix_contexts_hdr">Виправлення контекста SELinux</string>
+ <string name="fix_contexts_note1">Примітка: Виправлення контексту рідко потребується.</string>
+ <string name="fix_contexts_note2">Виправлення SELinux контексту може призвести</string>
+ <string name="fix_contexts_note3">до того, що система не запуститься.</string>
+ <string name="swipe_to_fix_contexts">Виправити контексти</string>
+ <string name="swipe_fix_contexts"> Виправлення контексту</string>
+ <string name="fixing_contexts">Виправлення контексту...</string>
+ <string name="fix_contexts_complete">Виправлення контексту завершено</string>
+ <string name="reboot_hdr">Перезавантаження</string>
+ <string name="su_hdr">Перевірити SuperSU</string>
+ <string name="su_note1">Пристрій не має рут.</string>
+ <string name="su_note2">Встановити SuperSU зараз?</string>
+ <string name="su_note3">Пристрій буде рутовано.</string>
+ <string name="su_cancel">Не встановлювати</string>
+ <string name="swipe_su_to_install">Встановити</string>
+ <string name="swipe_su_install"> Встановлення</string>
+ <string name="su_installing">Встановлення SuperSU</string>
+ <string name="sel_storage_list">Вибір сховища</string>
+
+ <!-- Various console messages - these consist of user displayed messages, oftentimes errors -->
+ <string name="no_kernel_selinux">Ядро не підтримує читання SELinux контексту.</string>
+ <string name="full_selinux">Присутня повна підтримка SELinux.</string>
+ <string name="no_selinux">Відсутня підтримка SELinux (немає libselinux).</string>
+ <string name="mtp_enabled">MTP Увімкнено</string>
+ <string name="mtp_crash">Збій MTP: MTP не запущений при завантаженні.</string>
+ <string name="decrypt_success">Розшифровка виконана успішно з паролем за замовчуванням.</string>
+ <string name="unable_to_decrypt">Неможливо розшифрувати з паролем за замовчуванням. Можливо буде потрібно форматувати Data.</string>
+ <string name="generating_md51">Генерація MD5</string>
+ <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
+ <string name="generating_md52"> * Генерація MD5...</string>
+ <string name="md5_created"> * MD5 сгенеровано.</string>
+ <string name="md5_error"> * MD5 Помилка!</string>
+ <string name="md5_compute_error"> * Помилка розрахунку MD5.</string>
+ <string name="current_date">(Поточна дата)</string>
+ <string name="auto_generate">(автогенерація)</string>
+ <string name="unable_to_locate_partition">Не вдається знайти '{1}' розділ для розрахунку копіювання.</string>
+ <string name="no_partition_selected">Не обрані розділи для резервного копіювання.</string>
+ <string name="total_partitions_backup"> * Загальна кількість розділів для резервного копіювання: {1}</string>
+ <string name="total_backup_size"> * Загальний об'єм даних: {1}MБ</string>
+ <string name="available_space"> * Доступний об'єм: {1}MБ</string>
+ <string name="unable_locate_storage">Не вдається знайти сховище для зберігання.</string>
+ <string name="no_space">У сховищі недостатньо місця.</string>
+ <string name="backup_started">[РОЗПОЧАТО РЕЗЕРВНЕ КОПІЮВАННЯ]</string>
+ <string name="backup_folder"> * Папка для резервної копії: {1}</string>
+ <string name="fail_backup_folder">Невдається створити папку для резервної копії.</string>
+ <string name="avg_backup_fs">Середня швидкість копіювання файлів: {1} МБ/сек</string>
+ <string name="avg_backup_img">Середня швидкість копіювання образів: {1} МБ/сек</string>
+ <string name="total_backed_size">[{1} MБ ВСЬОГО ЗАРЕЗЕРВОВАНО]</string>
+ <string name="backup_completed">[КОПІЮВАННЯ ВИКОНАНО ЗА {1} СЕКУНД(И)]</string>
+ <string name="restore_started">[ВІДНОВЛЕННЯ РОЗПОЧАТО]</string>
+ <string name="restore_folder">Папка відновлення: '{1}'</string>
+ <!-- {1} is the partition display name and {2} is the number of seconds -->
+ <string name="restore_part_done">[{1} завершено за {2} секунд(и)]</string>
+ <string name="verifying_md5">Перевірка MD5</string>
+ <string name="skip_md5">Пропуск перевірки MD5 згідно системним налаштуванням.</string>
+ <string name="calc_restore">Розрахування інформації о відновленні...</string>
+ <string name="restore_read_only">Неможливо відновити {1} -- змонтовано тільки для читання.</string>
+ <string name="restore_unable_locate">Невдається знайти розділ '{1}' для відновлення.</string>
+ <string name="no_part_restore">Не обрані розділи для відновлення.</string>
+ <string name="restore_part_count">Відновлення розділу {1} ...</string>
+ <string name="total_restore_size">Загальний обсяг відновлення {1}MБ</string>
+ <string name="updating_system_details">Оновлення інформації о системі</string>
+ <string name="restore_completed">[ВІДНОВЛЕННЯ ЗАВЕРШЕНО ЗА {1} СЕКУНД(И)]</string>
+ <!-- {1} is the path we could not open, {2} is strerror output -->
+ <string name="error_opening_strerr">Помилка відкриття: '{1}' ({2})</string>
+ <string name="unable_locate_part_backup_name">Невдається знайти розділ для копії: '{1}'</string>
+ <string name="unable_find_part_path">Невдається знайти розділ за шляхом '{1}'</string>
+ <string name="update_part_details">Оновлення інформації о розділах...</string>
+ <string name="update_part_details_done">...готово</string>
+ <string name="wiping_dalvik">Очищення директорій Dalvik Cache...</string>
+ <string name="cleaned">Очищено: {1}...</string>
+ <string name="dalvik_done">-- Очищення директорій Dalvik Cache завершено!</string>
+ <string name="no_andsec">Розділи android secure не знайдені.</string>
+ <string name="unable_to_locate">Не знайдено {1}.</string>
+ <string name="wiping_datamedia">Очищення внутрішньої пам'яті -- /data/media...</string>
+ <string name="unable_to_mount">Не вдається змонтувати {1}</string>
+ <string name="unable_to_mount_internal">Не вдається змонтувати internal_storage</string>
+ <string name="unable_to_mount_storage">Не вдається змонтувати storage</string>
+ <string name="fail_decrypt">Не вдається розшифрувати data.</string>
+ <string name="no_crypto_support">Шифрування не підтримується у цій версії.</string>
+ <string name="decrypt_success_dev">Data успішно розшифрований, новий блочний пристрій: '{1}'</string>
+ <string name="done">Готово.</string>
+ <string name="start_partition_sd">Розмітка SD Card...</string>
+ <string name="partition_sd_locate">Не вдалось знайти пристрій для розмітки.</string>
+ <string name="ext_swap_size">Розмір EXT + Swap перевищує розмір sdcard.</string>
+ <string name="remove_part_table">Видалення таблиці розділів...</string>
+ <string name="unable_rm_part">Не вдалось видалити таблицю розділів.</string>
+ <string name="create_part">Створення розділу {1} ...</string>
+ <string name="unable_to_create_part">Не вдалось створити розділ {1} .</string>
+ <string name="format_sdext_as">Форматування sd-ext у {1}...</string>
+ <string name="part_complete">Розмітка завершена.</string>
+ <string name="unable_to_open">Не вдалось відкрити '{1}'.</string>
+ <string name="mtp_already_enabled">MTP вже увімкнуто</string>
+ <string name="mtp_fail">Не вдалося увімкнути MTP</string>
+ <string name="no_mtp">Підтримка MTP відсутня</string>
+ <string name="image_flash_start">[РОЗПОЧАТО ПРОШИВКУ ОБРАЗУ]</string>
+ <string name="img_to_flash">Образ для прошивки: '{1}'</string>
+ <string name="flash_unable_locate">Не вдається знайти розділ '{1}' для прошивки.</string>
+ <string name="no_part_flash">Не обрані розділи для прошивки.</string>
+ <string name="too_many_flash">Забагато розділів для прошивки.</string>
+ <string name="invalid_flash">Вказан хибний розділ для прошивки.</string>
+ <string name="flash_done">[ПРОШИВКУ РОЗДІЛУ ЗАВЕРШЕНО]</string>
+ <string name="wiping">Очистка {1}</string>
+ <string name="repair_not_exist">{1} не існує! Неможливо відновити!</string>
+ <string name="repairing_using">Відновлення {1} з використанням {2}...</string>
+ <string name="unable_repair">Неможливо відновити {1}.</string>
+ <string name="mount_data_footer">Не вдалось змонтувати /data, не знайдено крипто-ключ.</string>
+ <!-- {1} is the folder name that we could not create, {2} is strerror output -->
+ <string name="create_folder_strerr">Не вдалось створити папку '{1}' ({2}).</string>
+ <!-- {1} is the folder name that we could not mount, {2} is strerror output -->
+ <string name="fail_mount">Не вдалось змонтувати '{1}' ({2})</string>
+ <!-- {1} is the folder name that we could not unmount, {2} is strerror output -->
+ <string name="fail_unmount">Не вдалось розмонтувати '{1}' ({2})</string>
+ <string name="cannot_resize">Не вдалось розмітити {1}.</string>
+ <string name="repair_resize">Відновлення {1} перед розміткою.</string>
+ <string name="unable_resize">Не вдалось розмітити {1}.</string>
+ <string name="no_md5_found">Відсутній файл md5 для '{1}'. Будь ласка зніміть вибір з перевірки MD5 при відновленні.</string>
+ <string name="md5_fail_match">MD5 не співпадає для '{1}'.</string>
+ <string name="fail_decrypt_tar">Не вдалось розшифрувати tar-файл '{1}'</string>
+ <string name="format_data_msg">Можливо вам доведеться перезавантажити рекавері, щоб мати можливість доступу до /data знову.</string>
+ <string name="format_data_err">Неможливо відформатувати, щоб видалити шифрування.</string>
+ <string name="formatting_using">Форматування {1} з використанням {2}...</string>
+ <string name="unable_to_wipe">Неможливо очистити {1}.</string>
+ <string name="cannot_wipe">Розділ {1} не може бути очищений.</string>
+ <string name="remove_all">Видалення всіх файлів з '{1}'</string>
+ <string name="wiping_data">Очистка data без очистки /data/media ...</string>
+ <string name="backing_up">Резервування {1}...</string>
+ <string name="backing">Резервне копіювання</string>
+ <string name="backup_size">Розмір файлу резервної копії для '{1}' 0 байт.</string>
+ <string name="datamedia_fs_restore">УВАГА: Ця резервна копія /data була зроблена з файловою системою {1}! Резервна копія може не завантажитись, якщо ви не повернетесь на {1}.</string>
+ <string name="restoring">Відновлення {1}...</string>
+ <string name="restoring_hdr">Відновлення</string>
+ <string name="recreate_folder_err">Неможливо створити папку {1} наново.</string>
+ <string name="img_size_err">Розмір образу більший за цільовий пристрій</string>
+ <string name="flashing">Прошивка {1}...</string>
+ <string name="backup_folder_set">Для резервного копіювавння встановлена папка '{1}'</string>
+ <string name="locate_backup_err">Не вдається знайти резервну копію '{1}'</string>
+ <string name="set_restore_opt">Установки опцій відновлення: '{1}':</string>
+ <string name="md5_check_skip">Пропуск перевірки MD5 увімкнено</string>
+ <string name="ors_encrypt_restore_err">Не вдалось використати OpenRecoveryScript для відновлення зашифрованої резервної копії.</string>
+ <string name="mounting">Монтування</string>
+ <string name="unmounting">Розмонтування</string>
+ <string name="mounted">Змонтовано '{1}'</string>
+ <string name="unmounted">Розмонтоване '{1}'</string>
+ <string name="setting">Установка '{1}' у '{2}'</string>
+ <string name="setting_empty">Установка '{1}' в нікуди</string>
+ <string name="making_dir1">Створення директорії</string>
+ <string name="making_dir2">Створення директорії: '{1}'</string>
+ <string name="running_command">Запуск команди</string>
+ <string name="sideload">ADB завантаження</string>
+ <string name="start_sideload">Запуск ADB завантаження...</string>
+ <string name="need_new_adb">Вам необхідний adb 1.0.32 чи новіший для завантаження цього пристрою.</string>
+ <string name="no_pwd">Пароль не надано.</string>
+ <string name="done_ors">Завершено виконання файлу сценарію</string>
+ <string name="injecttwrp">Введення TWRP до образу boot...</string>
+ <string name="zip_err">Помилка встановлення zip файлу '{1}'</string>
+ <string name="installing_zip">Встановлення zip файлу '{1}'</string>
+ <string name="select_backup_opt">Налаштування резервного копіювання:</string>
+ <string name="compression_on">Стискання увімкнено</string>
+ <string name="md5_off">Генерація MD5 вимкнена</string>
+ <string name="backup_fail">Помилка резервного копіювання</string>
+ <string name="backup_clean">Помилка резервного копіювання. Очистка папки резервного копіювання.</string>
+ <string name="running_recovery_commands">Запуск команд Recovery</string>
+ <string name="recovery_commands_complete">Команди Recovery виконані</string>
+ <string name="running_ors">Виконання OpenRecoveryScript</string>
+ <string name="ors_complete">OpenRecoveryScript виконано</string>
+ <string name="no_updater_binary">Не вдається знайти '{1}' у zip файлі.</string>
+ <string name="check_for_md5">Перевіка MD5 файлу...</string>
+
+ <string name="verify_zip_sig">Перевірка підпису zip...</string>
+ <string name="verify_zip_fail">Підпис Zip не пройшов перевірку!</string>
+ <string name="verify_zip_done">Підпис Zip успішно перевірено.</string>
+ <string name="zip_corrupt">Zip файл пошкоджено!</string>
+ <string name="no_md5">Пропуск перевірки MD5: не знайдено MD5 файл</string>
+ <string name="md5_fail">MD5 не співпадає</string>
+ <string name="md5_match">MD5 співпадає</string>
+ <string name="pid_signal">{1} процес завершився з кодом: {2}</string>
+ <string name="pid_error">{1} процес завершився з ПОМИЛКОЮ: {2}</string>
+ <string name="install_dumlock">Встановлення HTC Dumlock у систему...</string>
+ <string name="dumlock_restore">Відновлення оригінального boot...</string>
+ <string name="dumlock_reflash">Прошивка recovery до boot...</string>
+ <string name="run_script">Виконання сценарію {1}...</string>
+ <string name="rename_stock">Перейменування файлу стокового рекавері у /system для попередження відновлення стокового замість TWRP.</string>
+ <string name="split_backup">Розбиття резервної копії на частини...</string>
+ <string name="backup_error">Помилка створення резервної копії.</string>
+ <string name="restore_error">Помилка під час відновлення.</string>
+ <string name="split_thread">Розщеплення ID {1} в архіві {2}</string>
+ <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} -->
+ <string name="file_progress">%llu з %llu файлів, %i%%</string>
+ <string name="size_progress">%llu МБ з %llu МБ, %i%%</string>
+ <string name="decrypt_cmd">Спроба розшифрувати розділ data за допомогою командного рядка.</string>
+ <string name="base_pkg_err">Невдача при завантаженні базових пакетів.</string>
+ <string name="simulating">Імітування дій...</string>
+ <string name="backup_cancel">Резервне копіювання перервано</string>
+ <string name="config_twrp">Конфігурування TWRP...</string>
+ <string name="config_twrp_err">Неможливо зконфігурувати TWRP з цим ядром.</string>
+ <string name="copy_log">recovery.log скопійовано до {1}.</string>
+ <string name="max_queue">Досягнута максимальна черга zip!</string>
+ <string name="min_queue">Досягнута мінімальна черга zip!</string>
+ <string name="screenshot_saved">Знімок екрану збережено до {1}</string>
+ <string name="screenshot_err">Не вдалось зробити знімок екрану!</string>
+ <string name="zip_wipe_cache">Один чи декілька zip запросили очистку cache -- Очистка cache.</string>
+ <string name="and_sec_wipe_err">Не вдалось очисти android secure</string>
+ <string name="dalvik_wipe_err">Не вдалось очистити dalvik</string>
+ <string name="auto_gen">(Автогенерація)</string>
+ <string name="curr_date">(Поточна дата)</string>
+ <string name="backup_name_len">Ім'я резервної копії надто довге.</string>
+ <string name="backup_name_invalid">Ім'я резервної копії '{1}' має недопустимі символи: '{1}'</string>
+ <string name="no_real_sdcard">Цей пристрій не має реальної SD карти! Відміна!</string>
+ <string name="cancel_sideload">Відміна ADB завантаження...</string>
+ <string name="change_fs_err">Помилка зміни файлової системи.</string>
+ <string name="theme_ver_err">Версія теми не збігається з версією TWRP. Використовується тема за замовченням.</string>
+ <string name="install_reboot">Пристрій буде перезавантажений через 5 секунд.</string>
+ <string name="up_a_level">(на рівень уверх)</string>
+ <string name="adbbackup_error">Помилка ADB копіювання. Вихід..."</string>
+ <string name="adbbackup_control_error">Не вдається запис у adb канал контролю</string>
+ <string name="twrp_adbbu_option">--опція twrp потребує увімкнення adb копіювання</string>
+ <string name="partition_not_found">шлях: {1} не знайдено у списку розділів</string>
+ <string name="copy_kernel_log">Копіювання kernel log у {1}</string>
+ <string name="include_kernel_log">Увімкнути Kernel Log</string>
+
+ </resources>
+</language>
\ No newline at end of file diff --git a/gui/theme/common/portrait.xml b/gui/theme/common/portrait.xml new file mode 100644 index 000000000..fd35364b0 --- /dev/null +++ b/gui/theme/common/portrait.xml @@ -0,0 +1,4938 @@ +<?xml version="1.0"?> +<recovery> + <styles> + <style name="text_l"> + <font resource="font_l" color="%text_color%"/> + </style> + + <style name="text_m"> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="text_m_accent"> + <font resource="font_m" color="%accent_color%"/> + </style> + + <style name="text_m_fail"> + <font resource="font_m" color="%text_fail_color%"/> + </style> + + <style name="text_s"> + <font resource="font_s" color="%text_color%"/> + </style> + + <style name="input"> + <background color="%background_color%"/> + <cursor color="%accent_color%" hasfocus="1" width="%input_line_width%"/> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="checkbox"> + <font resource="font_m" color="%text_color%"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </style> + + <style name="main_button"> + <highlight color="%highlight_color%"/> + <font resource="font_l" color="%text_button_color%"/> + <image resource="main_button"/> + </style> + + <style name="main_button_half_height"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_height"/> + </style> + + <style name="main_button_half_height_full_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_height_full_width"/> + </style> + + <style name="button_third_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="tab_3"/> + </style> + + <style name="button_quarter_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="tab_4"/> + </style> + + <style name="fab"> + <highlight color="%highlight_color%"/> + <placement x="%indent_right%" y="%row21a_y%" placement="1"/> + <font resource="font_m" color="%button_text_color%"/> + </style> + + <style name="tab"> + <highlight color="%highlight_color%"/> + <fill color="%transparent%"/> + <font resource="font_s" color="%text_button_color%"/> + </style> + + <style name="console"> + <fastscroll rectcolor="%accent_color%" w="%fastscroll_w%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <color foreground="%text_color%" background="%background_color%" scroll="%background_color%"/> + <font resource="fixed"/> + </style> + + <style name="terminal"> + <fastscroll linecolor="%transparent%" rectcolor="%accent_color%" w="%fastscroll_w%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <background color="%background_color%"/> + <font resource="fixed" spacing="3" color="%text_color%"/> + </style> + + <style name="fileselector"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <sort name="tw_gui_sort_order"/> + <icon folder="folder" file="file"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="listbox"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <icon selected="radio_true" unselected="radio_false"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="scrolllist"> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%"/> + </style> + + <style name="partitionlist"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="partitionlist_storage"> + <highlight color="%fileselector_highlight_color%"/> + <placement x="%col1_x_left%" y="%row5_y%" w="%content_overlay_width%" h="%partitionlist_storage_height%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="radio_true" unselected="radio_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="slider"> + <placement x="%center_x%" y="%row23_y%"/> + <font resource="font_s" color="%text_color%"/> + <resource base="slider" used="slider_used" touch="slider_touch"/> + </style> + + <style name="slidervalue"> + <resource handle="handle"/> + <font resource="font_m" color="%text_color%"/> + <colors line="%fileselector_linecolor%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + </style> + + <style name="patternpassword"> + <size name="tw_gui_pattern_grid_size" default="3"/> + </style> + </styles> + + <pages> + <page name="main"> + <action> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="main2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@twrp_header=Team Win Recovery Project}</text> + </text> + + <text style="text_m"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_version%</text> + </text> + + <button style="main_button"> + <placement x="%indent%" y="%row2a_y%"/> + <text>{@install_btn=Install}</text> + <actions> + <action function="queueclear"/> + <action function="set">tw_selectimage=0</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row2a_y%"/> + <text>{@wipe_btn=Wipe}</text> + <action function="page">wipe</action> + </button> + + <button style="main_button"> + <placement x="%indent%" y="%row8_y%"/> + <text>{@backup_btn=Backup}</text> + <action function="page">backup</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row8_y%"/> + <text>{@restore_btn=Restore}</text> + <action function="page">restore</action> + </button> + + <button style="main_button"> + <placement x="%indent%" y="%row13a_y%"/> + <text>{@mount_btn=Mount}</text> + <action function="page">mount</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row13a_y%"/> + <text>{@settings_btn=Settings}</text> + <action function="page">settings</action> + </button> + + <button style="main_button"> + <placement x="%indent%" y="%row19_y%"/> + <text>{@advanced_btn=Advanced}</text> + <action function="page">advanced</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row19_y%"/> + <text>{@reboot_btn=Reboot}</text> + <action function="page">reboot</action> + </button> + </page> + + <page name="install"> + <template name="page"/> + + <text style="text_l"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_l"> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_image_hdr=Install Image}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@select_file_from_storage=Select File from %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".zip" folders="1" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <fileselector> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".img" folders="1" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=install</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@install_image_btn=Install Image}</text> + <actions> + <action function="set">tw_selectimage=1</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@install_zip_btn=Install Zip}</text> + <actions> + <action function="set">tw_selectimage=0</action> + <action function="page">install</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="0"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <actions> + <action function="queuezip"/> + <action function="page">flash_confirm</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="1"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <action function="page">flashimage_confirm</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_confirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@zip_queue_count=%tw_zip_queue_count% of max of 10 Files queued}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@zip_warn1=This operation may install incompatible}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@zip_warn2=software and render your device unusable.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@zip_back_cancel=Press back to cancel adding this zip.}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row7_y%"/> + <text>{@folder=Folder:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row8_y%"/> + <text>%tw_zip_location%</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row9a_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row10a_y%"/> + <text>%tw_file%</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row12_y%"/> + <text>{@zip_sig_chk=Zip signature verification}</text> + <data variable="tw_signed_zip_verify"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row13a_y%"/> + <text>{@install_reboot_chk=Reboot after installation is complete}</text> + <data variable="tw_install_reboot"/> + </checkbox> + + <checkbox> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%indent%" y="%row15_y%"/> + <text>{@inject_twrp_chk=Inject TWRP after install}</text> + <data variable="tw_inject_after_zip"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@zip_add_btn=Add more Zips}</text> + <action function="page">install</action> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@zip_clear_btn=Clear Zip Queue}</text> + <actions> + <action function="queueclear"/> + <action function="page">install</action> + </actions> + </button> + + <slider> + <text>{@swipe_flash=Swipe to confirm Flash}</text> + <action function="flash">flash_zip</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="cancelzip"/> + <action function="page">install</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_zip"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_count_hdr=Install Zip %tw_zip_index% of %tw_zip_queue_count%}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_file%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <action function="page">flash_done</action> + </action> + </page> + + <page name="flash_done"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@failed=Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@successful=Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@wipe_cache_dalvik_btn=Wipe cache/dalvik}</text> + <actions> + <action function="set">tw_back=flash_done</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=/cache</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=wipe</action> + <action function="set">tw_action2_param=dalvik</action> + <action function="set">tw_text1={@wipe_cache_dalvik_confirm=Wipe Cache & Dalvik?}</action> + <action function="set">tw_action_text1={@wiping_cache_dalvik=Wiping Cache & Dalvik...}</action> + <action function="set">tw_complete_text1={@wipe_cache_dalvik_complete=Cache & Dalvik Wipe Complete}</action> + <action function="set">tw_slider_text={@swipe_wipe=Swipe to Wipe}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_install_reboot" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + <condition var1="tw_reboot_system" var2="1"/> + </conditions> + <actions> + <action function="set">tw_sleep=%tw_sleep_total%</action> + <action function="page">flash_sleep_and_reboot</action> + </actions> + </action> + </page> + + <page name="flash_sleep_and_reboot"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_zip_hdr=Install Zip}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@install_reboot=Rebooting in %tw_sleep% second(s)}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_height"> + <condition var1="tw_sleep" op=">" var2="0"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_install_reboot=0</action> + <action function="page">flash_done</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_sleep" var2="tw_sleep_total"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <action function="sleepcounter">%tw_sleep_total%</action> + </action> + + <action> + <conditions> + <condition var1="tw_sleep" var2="0"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <actions> + <action function="sleep">50000</action> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </action> + </page> + + <page name="flashimage_confirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@install_image_hdr=Install Image}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@install_sel_target=Select Target Partition}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@folder=Folder:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row3_y%"/> + <text>%tw_zip_location%</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row4a_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row5a_y%"/> + <text>%tw_file%</text> + </text> + + <partitionlist> + <placement x="%indent%" y="%row7_y%" w="%content_width%" h="%partitionlist_flashimage_height%"/> + <icon selected="radio_true" unselected="radio_false"/> + <text>{@flash_image_select=Select Partition to Flash Image:}</text> + <data name="tw_flash_partition"/> + <listtype name="flashimg"/> + </partitionlist> + + <slider> + <text>{@swipe_flash=Swipe to confirm Flash}</text> + <actions> + <action function="set">tw_back=flashimage_confirm</action> + <action function="set">tw_action=flashimage</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@flashing_image=Flashing Image...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@image_flashed=Image Flashed}</action> + <action function="page">action_page</action> + </actions> + <action function="flashimage"/> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="clear_vars"> + <action> + <action function="set">tw_operation_state=0</action> + <action function="set">tw_text1=</action> + <action function="set">tw_text2=</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1=</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_action_param=</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action2=</action> + <action function="set">tw_action2_param=</action> + <action function="set">tw_has_cancel=0</action> + <action function="set">tw_cancel_action=</action> + <action function="set">tw_cancel_param=</action> + <action function="set">tw_show_exclamation=0</action> + <action function="set">tw_show_reboot=0</action> + <action function="page">%tw_clear_destination%</action> + </action> + </page> + + <page name="reboot_system_routine"> + <action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=system</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </action> + </page> + + <page name="confirm_action"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text/> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_text1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_text2%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>%tw_text3%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_text4%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider> + <text>%tw_slider_text%</text> + <action function="page">action_page</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="action_page"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_action_text1%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_height"> + <condition var1="tw_has_cancel" var2="1"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="%tw_cancel_action%">%tw_cancel_param%</action> + </button> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="singleaction_page"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_action_text1%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_page_done=1</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="action_complete"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_complete_text1%</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@failed=Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@successful=Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@back_btn=Back}</text> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="filecheck"> + <action> + <action function="fileexists">%tw_filecheck%</action> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_fileexists=1</action> + <action function="page">%tw_existpage%</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="1"/> + </conditions> + <actions> + <action function="set">tw_fileexists=0</action> + <action function="page">%tw_notexistpage%</action> + </actions> + </action> + </page> + + <page name="rebootcheck"> + <action> + <condition var1="tw_backup_system_size" op=">=" var2="%tw_min_system%"/> + <action function="page">appcheck</action> + </action> + + <action> + <condition var1="tw_backup_system_size" op="<" var2="%tw_min_system%"/> + <action function="page">confirm_action</action> + </action> + </page> + + <page name="appcheck"> + <action> + <condition var1="tw_app_prompt" var2="1"/> + <action function="checkforapp"></action> + </action> + + <action> + <condition var1="tw_app_prompt" op="!=" var2="1"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="1"/> + <action function="page">rebootapp</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="2"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + </page> + + <page name="wipe"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@factory_reset_hdr=Factory Reset}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@factory_reset1=Wipes Data, Cache, and Dalvik}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@factory_reset2=(not including internal storage)}</text> + </text> + + <text style="text_m_accent"> + <conditions> + <condition var1="tw_has_android_secure" var2="1"/> + <condition var1="fileexists" var2="/and-sec"/> + </conditions> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@android_secure=Android Secure}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_sdext_partition" var2="1"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@sdext=SD-EXT}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@factory_reset3=Most of the time this is}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@factory_reset4=the only wipe that you need.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row10_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@advanced_wipe_btn=Advanced Wipe}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">advancedwipe</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@format_data_btn=Format Data}</text> + <action function="page">formatdata</action> + </button> + + <button style="main_button_half_height"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_has_data_media" var2="0"/> + </conditions> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@wipe_enc_btn=Wipe Encryption}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@wipe_enc_confirm=Wipe Encryption from Data?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="set">tw_slider_text={@swipe_format_data=Swipe to Format Data}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <slider> + <text>{@swipe_factory_reset=Swipe to Factory Reset}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=data</action> + <action function="set">tw_action_text1={@factory_resetting=Factory Reset...}</action> + <action function="set">tw_complete_text1={@factory_reset_complete=Factory Reset Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="advancedwipe"> + <template name="page"/> + + <action> + <action function="set">tw_wipe_list=</action> + </action> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@advanced_wipe_hdr=Advanced Wipe}</text> + </text> + + <partitionlist> + <placement x="%indent%" y="%row1a_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <text>{@sel_part_wipe=Select Partitions to Wipe:}</text> + <data name="tw_wipe_list"/> + <listtype name="wipe"/> + </partitionlist> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%center_x%" y="%row17_y%" placement="5"/> + <text>{@invalid_part_sel=Invalid partition selection}</text> + </text> + + <button style="main_button_half_height_full_width"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@repair_change_btn=Repair or Change File System}</text> + <actions> + <action function="checkpartitionlist">tw_wipe_list</action> + <action function="page">checkpartitionlist</action> + </actions> + </button> + + <slider> + <text>{@swipe_wipe=Swipe to Wipe}</text> + <actions> + <action function="set">tw_back=advancedwipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=LIST</action> + <action function="set">tw_text1={@wipe_sel_confirm=Wipe Selected Partition(s)?}</action> + <action function="set">tw_action_text1={@wiping_part=Wiping Partition(s)...}</action> + <action function="set">tw_complete_text1={@wipe_complete=Wipe Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe</action> + </action> + </page> + + <page name="formatdata"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@format_data_hdr=Format Data}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@format_data_ptr1=Format Data will wipe all of your apps,}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@format_data_ptr2=backups, pictures, videos, media, and}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@format_data_ptr3=removes encryption on internal storage.}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_has_adopted_storage" var2="1"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@format_data_adopted=Including Adopted Storage}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@format_data_undo=This cannot be undone.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@yes_continue=Type yes to continue. Press back to cancel.}</text> + </text> + + <input> + <placement x="%indent%" y="%row10_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_confirm_formatdata%</text> + <data name="tw_confirm_formatdata"/> + <restrict minlen="3" maxlen="3" allow="yes"/> + <action function="page">formatdata_confirm</action> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row11_y" w="%content_width%" h="input_line_width"/> + </fill> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe</action> + </action> + </page> + + <page name="formatdata_confirm"> + <action> + <condition var1="tw_confirm_formatdata" op="=" var2="yes"/> + <actions> + <action function="set">tw_back=formatdata</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="page">action_page</action> + </actions> + </action> + + <action> + <condition var1="tw_confirm_formatdata" op="!=" var2="yes"/> + <action function="page">formatdata</action> + </action> + </page> + + <page name="checkpartitionlist"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">partitionoptions</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">advancedwipe</action> + </actions> + </action> + </page> + + <page name="partitionoptions"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_opt_hdr=Partition Options for: %tw_partition_name%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_mount_point=Mount Point: %tw_partition_mount_point%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_curr_fs=File system: %tw_partition_file_system%}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="1"/> + <placement x="%indent%" y="%row5_y%"/> + <text>{@part_present_yes=Present: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="0"/> + <placement x="%indent%" y="%row5_y%"/> + <text>{@part_present_no=Present: No}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="1"/> + <placement x="%center_x%" y="%row5_y%"/> + <text>{@part_removable_yes=Removable: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="0"/> + <placement x="%center_x%" y="%row5_y%"/> + <text>{@part_removable_no=Removable: No}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row7_y%"/> + <text>{@part_size=Size: %tw_partition_size%MB}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%"/> + <text>{@part_used=Used: %tw_partition_used%MB}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row9_y%"/> + <text>{@part_free=Free: %tw_partition_free%MB}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row9_y%"/> + <text>{@part_backup_size=Backup Size: %tw_partition_backup_size%MB}</text> + </text> + + <button style="main_button_half_height"> + <condition var1="tw_partition_can_resize" op="=" var2="1"/> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@resize_btn=Resize File System}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=resize</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=getpartitiondetails</action> + <action function="set">tw_action2_param=tw_wipe_list</action> + <action function="set">tw_text1={@resize_confirm=Resize %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@resizing=Resizing...}</action> + <action function="set">tw_complete_text1={@resize_complete=Resize Complete}</action> + <action function="set">tw_slider_text={@swipe_resize=Swipe to Resize}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_can_repair" op="=" var2="1"/> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@repair_btn=Repair File System}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=repair</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@repair_confirm=Repair %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@repairing=Repairing...}</action> + <action function="set">tw_complete_text1={@repair_complete=Repair Complete}</action> + <action function="set">tw_slider_text={@swipe_repair=Swipe to Repair}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@change_fs_btn=Change File System}</text> + <action function="page">selectfilesystem</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advancedwipe</action> + </action> + </page> + + <page name="refreshfilesystem"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">selectfilesystem</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="set">tw_wipe_list=</action> + <action function="page">advancedwipe</action> + </actions> + </action> + </page> + + <page name="selectfilesystem"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@wipe_hdr=Wipe}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@change_fs_for_hdr=Change File System for: %tw_partition_name%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_mount_point=Mount Point: %tw_partition_mount_point%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_curr_fs=File system: %tw_partition_file_system%}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@change_fs_warn1=Some ROMs or kernels may not support some}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@change_fs_warn2=file systems. Proceed with caution!}</text> + </text> + + <button style="main_button_half_height"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%indent%" y="%row15a_y%"/> + <text>EXT2</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext2</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT2</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%indent%" y="%row18a_y%"/> + <text>EXT3</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext3</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT3</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%indent%" y="%row21a_y%"/> + <text>EXT4</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext4</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT4</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_vfat" op="=" var2="1"/> + <placement x="%center_x%" y="%row15a_y%"/> + <text>FAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=vfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=FAT</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_exfat" op="=" var2="1"/> + <placement x="%center_x%" y="%row18a_y%"/> + <text>exFAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=exfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=exFAT</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_partition_f2fs" op="=" var2="1"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>F2FS</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=f2fs</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=F2FS</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_fs=Swipe to Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partitionoptions</action> + </action> + </page> + + <page name="backup"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="tabs_backup"/> + + <fill color="%text_color%"> + <placement x="0" y="%row_tab_y%" w="%tab3_width%" h="%tab_indicator_height%"/> + </fill> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_success_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row3a_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row4a_y%"/> + <text>%tw_backup_name%</text> + </text> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row5a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + <placement x="indent" y="%row3a_y%" w="%content_width%" h="%navbar_height%"/> + <fill color="%transparent%"/> + <actions> + <action function="set">tw_fileexists=0</action> + <action function="page">backupname1</action> + </actions> + </button> + + <partitionlist> + <placement x="%indent%" y="%row6_y%" w="%content_width%" h="%partitionlist_backup_height%"/> + <text>{@sel_part_backup=Select Partitions to Backup:}</text> + <data name="tw_backup_list"/> + <listtype name="backup"/> + </partitionlist> + + <button style="main_button_half_height"> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=backup</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@refresh_sizes_btn=Refresh Sizes}</text> + <actions> + <action function="refreshsizes"/> + <action function="page">backup</action> + </actions> + </button> + + <slider> + <text>{@swipe_backup=Swipe to Backup}</text> + <action function="page">backup_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="backup_options"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="tabs_backup"/> + + <fill color="%text_color%"> + <placement x="%tab3_col2_x%" y="%row_tab_y%" w="%tab3_width%" h="%tab_indicator_height%"/> + </fill> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_success_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <checkbox> + <placement x="%indent%" y="%row3a_y%"/> + <text>{@enable_backup_comp_chk=Enable compression}</text> + <data variable="tw_use_compression"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row5_y%"/> + <text>{@skip_md5_backup_chk=Skip MD5 generation during backup}</text> + <data variable="tw_skip_md5_generate"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row6a_y%"/> + <text>{@disable_backup_space_chk=Disable free space check before backup}</text> + <data variable="tw_disable_free_space"/> + </checkbox> + + <text style="text_m"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%center_x%" y="%row17_y%" placement="5"/> + <text>{@current_boot_slot=Current Slot: %tw_active_slot%}</text> + </text> + + <button style="main_button"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%indent%" y="%row19_y%"/> + <text>{@boot_slot_a=Slot A}</text> + <actions> + <action function="set">tw_back=backup_options</action> + <action function="set">tw_action=setbootslot</action> + <action function="set">tw_action_param=A</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@changing_boot_slot=Changing Boot Slot}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@changing_boot_slot_complete=Change Boot Slot Complete}</action> + <action function="page">action_page</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%center_x%" y="%row19_y%"/> + <text>{@boot_slot_b=Slot B}</text> + <actions> + <action function="set">tw_back=backup_options</action> + <action function="set">tw_action=setbootslot</action> + <action function="set">tw_action_param=B</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@changing_boot_slot=Changing Boot Slot}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@changing_boot_slot_complete=Change Boot Slot Complete}</action> + <action function="page">action_page</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="backupname1"> + <action> + <condition var1="tw_backup_name" op="=" var2="{@auto_generate=(Auto Generate)}"/> + <action function="generatebackupname"/> + </action> + + <action> + <action function="page">backupname2</action> + </action> + </page> + + <page name="backupname2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="tabs_backup"/> + + <fill color="%text_color%"> + <placement x="0" y="%row_tab_y%" w="%tab3_width%" h="%tab_indicator_height%"/> + </fill> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_success_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row3a_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%indent%" y="%row4_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_name%</text> + <data name="tw_backup_name"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_name%</action> + <action function="set">tw_existpage=backupname2</action> + <action function="set">tw_notexistpage=backup</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row5a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%indent%" y="row5a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%indent%" y="%row6_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row10_y%"/> + <text>{@append_date_btn=Append Date}</text> + <action function="appenddatetobackupname"/> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup</action> + </actions> + </action> + </page> + + <page name="backupencryption"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="tabs_backup"/> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_success_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <fill color="%text_color%"> + <placement x="%tab3_col3_x%" y="%row_tab_y%" w="%tab3_width%" h="%tab_indicator_height%"/> + </fill> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3a_y%" placement="5"/> + <text>{@encrypt_backup=Encrypt your Backup?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%indent%" y="%row7_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display%</text> + <data name="tw_backup_password" mask="*" maskvariable="tw_backup_encrypt_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">backupencryption2</action> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row8_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%indent%" y="row8_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%indent%" y="%row8a_y%"/> + <text>{@pass_not_match=Passwords do not match!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backup</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="backupencryption2"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@backup_hdr=Backup}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="tabs_backup"/> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button style="tab"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%tab3_col3_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@encryption_tab=ENCRYPTION}</text> + <font resource="font_s" color="%text_success_color%"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <fill color="%text_color%"> + <placement x="%tab3_col3_x%" y="%row_tab_y%" w="%tab3_width%" h="%tab_indicator_height%"/> + </fill> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3a_y%" placement="5"/> + <text>{@encrypt_backup=Encrypt your Backup?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@enter_pass2=Enter Password again:}</text> + </text> + + <input> + <placement x="%indent%" y="%row7_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display2%</text> + <data name="tw_backup_password2" mask="*" maskvariable="tw_backup_encrypt_display2"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">checkbackuppassword</action> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row8_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backup</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="checkbackuppassword"> + <action> + <condition var1="tw_backup_password2" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=1</action> + <action function="page">backup</action> + </actions> + </action> + + <action> + <condition var1="tw_backup_password2" op="!=" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_password_not_match=1</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backupencryption</action> + </actions> + </action> + </page> + + <page name="backup_run"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>%tw_operation%</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_partition% Partition</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row19_y%"/> + <text>{@progress=Progress:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row20_y%"/> + <text>%tw_file_progress%</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row21_y%"/> + <text>%tw_size_progress%</text> + </text> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="cancelbackup"/> + </button> + + <action> + <action function="nandroid">backup</action> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="0"/> + <actions> + <action function="set">tw_back=backup</action> + <action function="set">tw_complete_text1={@backup_complete=Backup Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="1"/> + <actions> + <action function="set">tw_back=backup</action> + <action function="set">tw_complete_text1={@backup_cancel=Backup Cancelled}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + </page> + + <page name="restore"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_sel_store_hdr=Select Backup from %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>{@restore_sel_pack_fs=Select Package to Restore:}</text> + <filter folders="1" files="0" nav="0"/> + <path name="tw_backups_folder"/> + <data name="tw_restore" default=""/> + <selection name="tw_restore_name"/> + </fileselector> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <action> + <condition var1="tw_restore" op="modified"/> + <actions> + <action function="readBackup"/> + <action function="page">restore_read</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="restore_read"> + <action> + <condition var1="tw_restore_encrypted" var2="1"/> + <actions> + <action function="set">tw_password_fail=0</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <condition var1="tw_restore_encrypted" var2="0"/> + <actions> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_decrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_enc_backup_hdr=Encrypted Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%indent%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_restore_display%</text> + <data name="tw_restore_password" mask="*" maskvariable="tw_restore_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">try_restore_decrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%indent%" y="row4a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%indent%" y="%row5_y%"/> + <text>{@restore_dec_fail=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row10_y%"/> + <text>{@del_backup_btn=Delete Backup}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete=Swipe to Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore</action> + </action> + </page> + + <page name="try_restore_decrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_try_decrypt=Encrypted Backup - Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt_backup"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_select"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@restore_backup_date=Backup made on %tw_restore_file_date%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row3_y%"/> + <text>%tw_restore_name%</text> + </text> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="indent" y="%row2_y%" w="%content_width%" h="%navbar_height%"/> + <fill color="%transparent%"/> + <actions> + <action function="set">tw_backup_rename=%tw_restore_name%</action> + <action function="set">tw_fileexists=0</action> + <action function="page">renamebackup</action> + </actions> + </button> + + <partitionlist> + <placement x="%indent%" y="%row4a_y%" w="%content_width%" h="%partitionlist_backup_height%"/> + <text>{@restore_sel_part=Select Partitions to Restore:}</text> + <data name="tw_restore_list" selectedlist="tw_restore_selected"/> + <listtype name="restore"/> + </partitionlist> + + <checkbox> + <placement x="%indent%" y="%row17_y%"/> + <text>{@restore_enable_md5_chk=Enable MD5 Verification of Backup Files}</text> + <data variable="tw_skip_md5_check"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@del_backup_btn=Delete Backup}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete=Swipe to Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <slider> + <text>{@swipe_restore=Swipe to Restore}</text> + <action function="page">restore_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore</action> + </action> + </page> + + <page name="renamebackup"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@rename_backup_hdr=Rename Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%indent%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_rename%</text> + <data name="tw_backup_rename"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && mv "%tw_restore_name%" "%tw_backup_rename%"</action> + <action function="set">tw_text1={@rename_backup_confirm=Rename Backup?}</action> + <action function="set">tw_text2={@rename_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@renaming_backup=Renaming Backup...}</action> + <action function="set">tw_complete_text1={@rename_backup_complete=Backup Rename Complete}</action> + <action function="set">tw_slider_text={@swipe_to_rename=Swipe to Rename}</action> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_rename%</action> + <action function="set">tw_existpage=renamebackup</action> + <action function="set">tw_notexistpage=confirm_action</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%indent%" y="%row4a_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">restore_select</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore_select</action> + </action> + </page> + + <page name="restore_run"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@restore_hdr=Restore}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_operation% %tw_partition%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row19_y%"/> + <text>{@progress=Progress:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row20_y%"/> + <text>%tw_size_progress%</text> + </text> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_back=restore_select</action> + <action function="set">tw_complete_text1={@restore_complete=Restore Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <action function="nandroid">restore</action> + </action> + </page> + + <page name="mount"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@storage_hdr=Storage: %tw_storage_display_name% (%tw_storage_free_size% MB)}</text> + </text> + + <partitionlist> + <placement x="%indent%" y="%row1a_y%" w="%content_width%" h="%partitionlist_mount_height%"/> + <text>{@mount_sel_part=Select Partitions to Mount:}</text> + <listtype name="mount"/> + </partitionlist> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="=" var2="0"/> + <placement x="%indent%" y="%row15a_y%" textplacement="6"/> + <text>{@mount_sys_ro_chk=Mount system partition read-only}</text> + <image resource="checkbox_false"/> + <action function="mountsystemtoggle">1</action> + </button> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="!=" var2="0"/> + <placement x="%indent%" y="%row15a_y%" textplacement="6"/> + <text>{@mount_sys_ro_chk=Mount system partition read-only}</text> + <image resource="checkbox_true"/> + <actions> + <action function="set">tw_lifetime_writes=2</action> + <action function="page">system_readonly_check</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_has_usb_storage" var2="1"/> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@mount_usb_storage_btn=Mount USB Storage}</text> + <action function="page">usb_mount</action> + </button> + + <button style="main_button_half_height"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_is_decrypted" var2="0"/> + </conditions> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@decrypt_data_btn=Decrypt Data}</text> + <action function="page">decrypt</action> + </button> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@select_storage_btn=Select Storage}</text> + <actions> + <action function="set">tw_back=mount</action> + <action function="overlay">select_storage</action> + </actions> + </button> + + <button style="main_button_half_height"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="0"/> + </conditions> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@enable_mtp_btn=Enable MTP}</text> + <action function="startmtp"/> + </button> + + <button style="main_button_half_height"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="1"/> + </conditions> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@disable_mtp_btn=Disable MTP}</text> + <action function="stopmtp"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="usb_mount"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@usb_storage_hdr=USB Storage}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@usb_stor_mnt1=USB Storage Mounted}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@usb_stor_mnt2=Be sure to safely remove your device}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@usb_stor_mnt3=from your computer before unmounting!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@unmount_btn=Unmount}</text> + <action function="page">usb_umount</action> + </button> + + <action> + <action function="mount">usb</action> + <action function="set">tw_busy=1</action> + </action> + </page> + + <page name="usb_umount"> + <action> + <action function="unmount">usb</action> + </action> + + <action> + <action function="page">mount</action> + <action function="set">tw_busy=0</action> + </action> + </page> + + <page name="system_readonly_check"> + <action> + <action function="checkpartitionlifetimewrites">/system</action> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="1"/> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="page">mount</action> + </actions> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="0"/> + <actions> + <action function="set">tw_back=mount</action> + <action function="page">system_readonly</action> + </actions> + </action> + </page> + + <page name="reboot"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <button style="main_button"> + <condition var1="tw_reboot_system" var2="1"/> + <placement x="%indent%" y="%row2a_y%"/> + <text>{@rb_system_btn=System}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_poweroff" var2="1"/> + <placement x="%center_x%" y="%row2a_y%"/> + <text>{@rb_poweroff_btn=Power Off}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=poweroff</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_ospo=sure you wish to power off?}</action> + <action function="set">tw_action_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_complete_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_slider_text={@swipe_power_off=Swipe to Power Off}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_recovery" var2="1"/> + <placement x="%indent%" y="%row8_y%"/> + <text>{@rb_recovery_btn=Recovery}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=recovery</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_bootloader" var2="1"/> + <placement x="%center_x%" y="%row8_y%"/> + <text>{@rb_bootloader_btn=Bootloader}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=bootloader</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_download_mode" var2="1"/> + <placement x="%indent%" y="%row13a_y%"/> + <text>{@rb_download_btn=Download}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=download</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot=Swipe to Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <text style="text_m"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%center_x%" y="%row17_y%" placement="5"/> + <text>{@current_boot_slot=Current Slot: %tw_active_slot%}</text> + </text> + + <button style="main_button"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%indent%" y="%row19_y%"/> + <text>{@boot_slot_a=Slot A}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=setbootslot</action> + <action function="set">tw_action_param=A</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@changing_boot_slot=Changing Boot Slot}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@changing_boot_slot_complete=Change Boot Slot Complete}</action> + <action function="page">action_page</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_has_boot_slots" var2="1"/> + <placement x="%center_x%" y="%row19_y%"/> + <text>{@boot_slot_b=Slot B}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=setbootslot</action> + <action function="set">tw_action_param=B</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@changing_boot_slot=Changing Boot Slot}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@changing_boot_slot_complete=Change Boot Slot Complete}</action> + <action function="page">action_page</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="rebootapp"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@reboot_install_app_hdr=Install TWRP App?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@reboot_install_app1=Would you like to install the Official TWRP App?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@reboot_install_app2=The app can check for new TWRP versions.}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row5_y%"/> + <text>{@reboot_install_app_prompt_install=Prompt to install TWRP app if not installed}</text> + <data variable="tw_app_prompt"/> + </checkbox> + + <checkbox> + <condition var1="tw_mount_system_ro" var2="0"/> + <placement x="%indent%" y="%row7_y%"/> + <text>{@reboot_install_app_system=Install as a System App}</text> + <data variable="tw_app_install_system"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row16_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="reboot">%tw_reboot_param%</action> + </button> + + <slider> + <text>{@swipe_to_install_app=Swipe to Install TWRP App}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=installapp</action> + <action function="set">tw_action_text1={@reboot_installing_app=Installing App...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=reboot</action> + <action function="set">tw_action2_param=%tw_reboot_param%</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">reboot</action> + </actions> + </action> + </page> + + <page name="system_readonly"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@sys_ro_hdr=Unmodified System Partition}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@sys_ro_keep=Keep System Read only?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@sys_rop1=TWRP can leave your system partition unmodified}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@sys_rop2=to make it easier for you to take official updates.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@sys_rop3=TWRP will be unable to prevent the stock ROM from}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@sys_rop4=replacing TWRP and will not offer to root your device.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row9_y%" placement="5"/> + <text>{@sys_rop5=Installing zips or performing adb operations may still}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row10_y%" placement="5"/> + <text>{@sys_rop6=modify the system partition.}</text> + </text> + + <checkbox> + <condition var1="tw_is_encrypted" var2="0"/> + <placement x="%indent%" y="%row15_y%"/> + <text>{@sys_ro_never_show_chk=Never show this screen during boot again}</text> + <data variable="tw_never_show_system_ro_page"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@sys_ro_keep_ro_btn=Keep Read Only}</text> + <actions> + <action function="mountsystemtoggle">1</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + + <slider> + <text>{@swipe_allow_mod=Swipe to Allow Modifications}</text> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </slider> + </page> + + <page name="settings"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@settings_gen_hdr=General Settings}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="0" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox style="scrolllist"> + <placement x="%indent%" y="%row3a_y%" w="%content_width%" h="%listbox_settings_height%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <listitem name="{@zip_sig_chk=Zip signature verification}"> + <data variable="tw_signed_zip_verify"/> + </listitem> + <listitem name="{@install_reboot_chk=Reboot after installation is complete}"> + <data variable="tw_install_reboot"/> + </listitem> + <listitem name="{@use_rmrf_chk=Use rm -rf instead of formatting}"> + <data variable="tw_rm_rf"/> + </listitem> + <listitem name="{@disable_backup_space_chk=Disable free space check before backup}"> + <data variable="tw_disable_free_space"/> + </listitem> + <listitem name="{@skip_md5_backup_chk=Skip MD5 generation during backup}"> + <data variable="tw_skip_md5_generate"/> + </listitem> + <listitem name="{@restore_enable_md5_chk=Enable MD5 verification of backup files}"> + <data variable="tw_skip_md5_check"/> + </listitem> + <listitem name="{@use24clock_chk=Use 24-hour clock}"> + <data variable="tw_military_time"/> + </listitem> + <listitem name="{@rev_navbar_chk=Reversed navbar layout}"> + <data variable="tw_samsung_navbar"/> + </listitem> + <listitem name="{@reboot_install_app_prompt_install=Prompt to install TWRP app on every reboot}"> + <data variable="tw_app_prompt"/> + </listitem> + <listitem name="{@simact_chk=Simulate actions for theme testing}"> + <data variable="tw_simulate_actions"/> + </listitem> + <listitem name="{@simfail_chk=Simulate failure for actions}"> + <condition var1="tw_simulate_actions" var2="1"/> + <data variable="tw_simulate_fail"/> + </listitem> + </listbox> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@restore_defaults_btn=Restore Defaults}</text> + <actions> + <action function="set">tw_samsung_navbar=0</action> + <action function="set">tw_tab_icons=0</action> + <action function="restoredefaultsettings"/> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_timezone"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@time_zone_hdr=Time Zone}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col2_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%listbox_timezone_height%"/> + <text>{@sel_tz_list=Select Time Zone:}</text> + <data name="tw_time_zone_guisel"/> + <listitem name="{@utcm11=(UTC -11) Samoa, Midway Island}">BST11;BDT</listitem> + <listitem name="{@utcm10=(UTC -10) Hawaii}">HST10;HDT</listitem> + <listitem name="{@utcm9=(UTC -9) Alaska}">AST9;ADT</listitem> + <listitem name="{@utcm8=(UTC -8) Pacific Time}">PST8;PDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm7=(UTC -7) Mountain Time}">MST7;MDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm6=(UTC -6) Central Time}">CST6;CDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm5=(UTC -5) Eastern Time}">EST5;EDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm4=(UTC -4) Atlantic Time}">AST4;ADT</listitem> + <listitem name="{@utcm3=(UTC -3) Brazil, Buenos Aires}">GRNLNDST3;GRNLNDDT</listitem> + <listitem name="{@utcm2=(UTC -2) Mid-Atlantic}">FALKST2;FALKDT</listitem> + <listitem name="{@utcm1=(UTC -1) Azores, Cape Verde}">AZOREST1;AZOREDT</listitem> + <listitem name="{@utc0=(UTC 0) London, Dublin, Lisbon}">GMT0;BST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp1=(UTC +1) Berlin, Brussels, Paris}">CET-1;CEST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp2=(UTC +2) Athens, Istanbul, South Africa}">WET-2;WET,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp3=(UTC +3) Moscow, Baghdad}">SAUST-3;SAUDT</listitem> + <listitem name="{@utcp4=(UTC +4) Abu Dhabi, Tbilisi, Muscat}">WST-4;WDT</listitem> + <listitem name="{@utcp5=(UTC +5) Yekaterinburg, Islamabad}">PAKST-5;PAKDT</listitem> + <listitem name="{@utcp6=(UTC +6) Almaty, Dhaka, Colombo}">TASHST-6;TASHDT</listitem> + <listitem name="{@utcp7=(UTC +7) Bangkok, Hanoi, Jakarta}">THAIST-7;THAIDT</listitem> + <listitem name="{@utcp8=(UTC +8) Beijing, Singapore, Hong Kong}">TAIST-8;TAIDT</listitem> + <listitem name="{@utcp9=(UTC +9) Tokyo, Seoul, Yakutsk}">JST-9;JSTDT</listitem> + <listitem name="{@utcp10=(UTC +10) Eastern Australia, Guam}">EET-10;EETDT</listitem> + <listitem name="{@utcp11=(UTC +11) Vladivostok, Solomon Islands}">MET-11;METDT</listitem> + <listitem name="{@utcp12=(UTC +12) Auckland, Wellington, Fiji}">NZST-12;NZDT</listitem> + </listbox> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row15a_y%"/> + <text>{@sel_tz_offset=Select Offset (usually 0): %tw_time_zone_guioffset%}</text> + </text> + + <button style="button_quarter_width"> + <placement x="%indent%" y="%row16a_y%"/> + <text>{@tz_offset_none=None}</text> + <action function="set">tw_time_zone_guioffset=0</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x%" y="%row16a_y%"/> + <text>{@tz_offset_15=15}</text> + <action function="set">tw_time_zone_guioffset=15</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x%" y="%row16a_y%"/> + <text>{@tz_offset_30=30}</text> + <action function="set">tw_time_zone_guioffset=30</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row16a_y%"/> + <text>{@tz_offset_45=45}</text> + <action function="set">tw_time_zone_guioffset=45</action> + </button> + + <checkbox> + <placement x="%indent%" y="%row18a_y%"/> + <font resource="font_m" color="%text_color%"/> + <text>{@use_dst_chk=Use daylight savings time (DST)}</text> + <data variable="tw_time_zone_guidst"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </checkbox> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%indent%" y="%row20_y%"/> + <text>{@curr_tz=Current Time Zone: %tw_time_zone%}</text> + </text> + + <button> + <highlight color="%highlight_color%"/> + <placement x="%center_x%" y="%row21a_y%"/> + <font resource="font_m" color="%text_button_color%"/> + <text>{@set_tz_btn=Set Time Zone}</text> + <image resource="main_button_half_height"/> + <action function="setguitimezone"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_screen"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@settings_screen_hdr=Screen Settings}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col3_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <button> + <placement x="%indent%" y="%row3a_y%" textplacement="6"/> + <font resource="font_m" color="%text_color%"/> + <condition var1="tw_screen_timeout_secs" op="=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_false"/> + <action function="set">tw_screen_timeout_secs=60</action> + </button> + + <button> + <placement x="%indent%" y="%row3a_y%" textplacement="6"/> + <font resource="font_m" color="%text_color%"/> + <condition var1="tw_screen_timeout_secs" op="!=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_true"/> + <action function="set">tw_screen_timeout_secs=0</action> + </button> + + <slidervalue> + <condition var1="tw_screen_timeout_secs" op="!=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <placement x="indent" y="%row5_y%" w="%content_width%"/> + <text>{@screen_to_slider=Screen timeout in seconds:}</text> + <data variable="tw_screen_timeout_secs" min="15" max="300"/> + </slidervalue> + + <slidervalue> + <condition var1="tw_has_brightnesss_file" var2="1"/> + <placement x="indent" y="%row10_y%" w="%content_width%"/> + <text>{@screen_bright_slider=Brightness: %tw_brightness_pct%%}</text> + <data variable="tw_brightness_pct" min="10" max="100"/> + <actions> + <action function="set">tw_brightness=%tw_brightness_max%</action> + <action function="compute">tw_brightness*%tw_brightness_pct%</action> + <action function="compute">tw_brightness/100</action> + <action function="setbrightness">%tw_brightness%</action> + </actions> + </slidervalue> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_vibration"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@vibration_hdr=Vibration}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col4_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <slidervalue> + <placement x="indent" y="%row4_y%" w="%content_width%"/> + <text>{@button_vibration=Button Vibration:}</text> + <data variable="tw_button_vibrate" min="0" max="300"/> + </slidervalue> + + <slidervalue> + <placement x="indent" y="%row9_y%" w="%content_width%"/> + <text>{@kb_vibration=Keyboard Vibration:}</text> + <data variable="tw_keyboard_vibrate" min="0" max="300"/> + </slidervalue> + + <slidervalue> + <placement x="indent" y="%row14_y%" w="%content_width%"/> + <text>{@act_vibration=Action Vibration:}</text> + <data variable="tw_action_vibrate" min="0" max="500"/> + </slidervalue> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="settings_language"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@language_hdr=Language - %tw_language_display%}</text> + </text> + + <template name="tabs_settings"/> + + <fill color="%text_color%"> + <placement x="%tab5_col5_x%" y="%row_tab_y%" w="%tab5_width%" h="%tab_indicator_height%"/> + </fill> + + <listbox> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%listbox_settings_height%"/> + <text>{@select_language=Select Language:}</text> + <icon selected="radio_true" unselected="radio_false" /> + <data name="tw_language" /> + </listbox> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@set_language_btn=Set Language}</text> + <action function="setlanguage"></action> + </button> + + <action> + <touch key="home" /> + <action function="page">main</action> + </action> + + <action> + <touch key="back" /> + <action function="page">settings</action> + </action> + </page> + + <page name="copylog"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@copying_log=Copy Logs to SD Card}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row4_y%"/> + <text>{@include_kernel_log=Include Kernel Log}</text> + <data variable="tw_include_kernel_log" value="1"/> + </checkbox> + + <slider> + <text>{@copying_log=Copy Logs to SD Card}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=copylog</action> + <action function="set">tw_action_text1={@copying_log=Copy Logs to SD Card}</action> + <action function="set">tw_complete_text1={@copy_log_complete=Logs Copy Completed}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="page">advanced</action> + </actions> + </action> + </page> + + <page name="advanced"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <button style="main_button"> + <placement x="%indent%" y="%row2a_y%"/> + <text>{@copy_log_btn=Copy Log}</text> + <action function="page">copylog</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row2a_y%"/> + <text>{@fix_context_btn=Fix Contexts}</text> + <action function="page">fixcontexts</action> + </button> + + <button style="main_button"> + <condition var1="tw_allow_partition_sdcard" var2="1"/> + <placement x="%indent%" y="%row8_y%"/> + <text>{@part_sd_btn=Partition SD Card}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcardsel</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row8_y%"/> + <text>{@file_manager_btn=File Manager}</text> + <action function="page">filemanagerlist</action> + </button> + + <button style="main_button"> + <placement x="%indent%" y="%row13a_y%"/> + <text>{@terminal_btn=Terminal}</text> + <action function="page">terminalcommand</action> + </button> + + <button style="main_button"> + <placement x="%center_x%" y="%row13a_y%"/> + <text>{@reload_theme_btn=Reload Theme}</text> + <action function="reload"/> + </button> + + <button style="main_button"> + <placement x="%indent%" y="%row19_y%"/> + <text>{@adb_sideload_btn=ADB Sideload}</text> + <action function="page">sideload</action> + </button> + + <button style="main_button"> + <condition var1="tw_show_dumlock" var2="1"/> + <placement x="%center_x%" y="%row19_y%"/> + <text>{@dumlock_btn=HTC Dumlock}</text> + <action function="page">htcdumlock</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%center_x%" y="%row19_y%"/> + <text>{@inject_twrp_btn=Inject TWRP}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=reinjecttwrp</action> + <action function="set">tw_text1={@inject_twrp_confirm=Re-Inject TWRP?}</action> + <action function="set">tw_action_text1={@injecting_twrp=Re-Injecting TWRP...}</action> + <action function="set">tw_complete_text1={@inject_twrp_complete=TWRP Injection Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="partsdcardsel"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_sd_hdr=Partition SD Card}</text> + </text> + + <partitionlist> + <placement x="%indent%" y="%row1a_y%" w="%content_width%" h="%partitionlist_storage_height%"/> + <text>{@sel_storage_list=Select Storage}</text> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%center_x%" y="%row20_y%" placement="5"/> + <text>{@invalid_partsd_sel=You must select a removable device}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="getpartitiondetails">tw_storage_path</action> + <action function="page">partsdcardcheck</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="partsdcardcheck"> + <action> + <condition var1="tw_partition_removable" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcard</action> + </actions> + </action> + + <action> + <condition var1="tw_partition_removable" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">partsdcardsel</action> + </actions> + </action> + </page> + + <page name="partsdcard"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@part_sd_ext_sz=EXT Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6a_y%" placement="5"/> + <text>%tw_sdext_size%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_sdext_size-256</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row6_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_sdext_size+256</action> + </button> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row9_y%" placement="5"/> + <text>{@part_sd_swap_sz=Swap Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row10a_y%" placement="5"/> + <text>%tw_swap_size%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_swap_size-64</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row10_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_swap_size+64</action> + </button> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row13_y%" placement="5"/> + <text>{@file_system=File System:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row14a_y%" placement="5"/> + <text>%tw_sdpart_file_system%</text> + </text> + + <button style="button_quarter_width"> + <placement x="%indent%" y="%row14_y%"/> + <text>EXT3</text> + <action function="set">tw_sdpart_file_system=ext3</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row14_y%"/> + <text>EXT4</text> + <action function="set">tw_sdpart_file_system=ext4</action> + </button> + + <slider> + <text>{@swipe_part_sd=Swipe to Partition}</text> + <action function="page">partsdcardaction</action> + <actions> + <action function="set">tw_back=partsdcard</action> + <action function="set">tw_action=partitionsd</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=set</action> + <action function="set">tw_action2_param=tw_zip_location=/sdcard</action> + <action function="set">tw_action_text1={@partitioning_sd=Partitioning SD Card...}</action> + <action function="set">tw_action_text2={@partitioning_sd2=This will take a few minutes.}</action> + <action function="set">tw_complete_text1={@part_sd_complete=Partitioning Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcardsel</action> + </actions> + </action> + </page> + + <page name="htcdumlock"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@dumlock_hdr=HTC Dumlock}</text> + </text> + + <button style="main_button_half_height_full_width"> + <placement x="%indent%" y="%row15a_y%"/> + <text>{@dumlock_restore_btn=Restore Original Boot}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockrestoreboot</action> + <action function="set">tw_text1={@dumlock_restore_confirm=Restore original boot image?}</action> + <action function="set">tw_action_text1={@dumlock_restoring=Restoring Original Boot...}</action> + <action function="set">tw_complete_text1={@dumlock_restore_complete=Restore Original Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height_full_width"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@dumlock_reflash_btn=Reflash Recovery}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockreflashrecovery</action> + <action function="set">tw_text1={@dumlock_reflash_confirm=Reflash recovery to boot?}</action> + <action function="set">tw_action_text1={@dumlock_reflashing=Flashing recovery to boot...}</action> + <action function="set">tw_complete_text1={@dumlock_reflash_complete=Recovery Flash to Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height_full_width"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@dumlock_install_btn=Install HTC Dumlock}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=installhtcdumlock</action> + <action function="set">tw_text1={@dumlock_install_confirm=Install HTC dumlock files to ROM?}</action> + <action function="set">tw_action_text1={@dumlock_installing=Installing HTC Dumlock...}</action> + <action function="set">tw_complete_text1={@dumlock_install_complete=HTC Dumlock Install Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="lock"> + <background color="%semi_transparent%"/> + + <image> + <image resource="unlock_icon"/> + <placement x="%center_x%" y="%row10_y%" placement="4"/> + </image> + + <slider> + <text>{@swipe_to_unlock=Swipe to Unlock}</text> + <action function="overlay"/> + </slider> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + </page> + + <page name="filemanagerlist"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_sel_file=Select a File or Folder}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location1%</text> + <filter folders="1" files="1"/> + <path name="tw_file_location1" default="/"/> + <data name="tw_filename1"/> + <selection name="tw_selection1"/> + </fileselector> + + <button style="fab"> + <image resource="fab_selectfolder"/> + <actions> + <action function="set">tw_filename1=tw_file_location1</action> + <action function="set">tw_fm_isfolder=1</action> + <action function="set">tw_fm_type={@fm_type_folder=Folder}</action> + <action function="page">filemanageroptions</action> + </actions> + </button> + + <action> + <actions> + <action function="set">tw_fm_type={@fm_type_file=File}</action> + <action function="set">tw_fm_isfolder=0</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + + <action> + <condition var1="tw_filename1" op="modified"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanageroptions"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_choose_act=Choose Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@fm_selected=%tw_fm_type% selected:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row3_y%"/> + <text>%tw_filename1%</text> + </text> + + <button style="main_button_half_height"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%indent%" y="%row15a_y%"/> + <text>{@fm_copy_file_btn=Copy File}</text> + <actions> + <action function="set">tw_filemanager_command=cp</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%indent%" y="%row15a_y%"/> + <text>{@fm_copy_folder_btn=Copy Folder}</text> + <actions> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && cp -R</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row15a_y%"/> + <text>{@fm_move_btn=Move}</text> + <actions> + <action function="set">tw_filemanager_command=mv</action> + <action function="set">tw_fm_text1={@fm_moving=Moving}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@fm_chmod755_btn=chmod 755}</text> + <actions> + <action function="set">tw_filemanager_command=chmod 755</action> + <action function="set">tw_fm_text1={@fm_chmod755ing=chmod 755}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row18a_y%"/> + <text>{@fm_chmod_btn=chmod}</text> + <actions> + <action function="set">tw_filemanager_rename=0000</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerchmod</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@fm_delete_btn=Delete}</text> + <actions> + <action function="set">tw_filemanager_command=rm -rf</action> + <action function="set">tw_fm_text1={@fm_deleting=Deleting}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@fm_rename_file_btn=Rename File}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=mv</action> + <action function="page">filemanagerrenamefile</action> + </actions> + </button> + + <button style="main_button_half_height"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@fm_rename_folder_btn=Rename Folder}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && mv</action> + <action function="page">filemanagerrenamefolder</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanagerlist</action> + </action> + </page> + + <page name="choosedestinationfolder"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_sel_dest=Select Destination Folder}</text> + </text> + + <template name="sort_options"/> + + <fileselector> + <placement x="%indent%" y="%row3_y%" w="%content_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location2%</text> + <filter folders="1" files="0"/> + <path name="tw_file_location2" default="/"/> + <data name="tw_filename2"/> + <selection name="tw_selection2"/> + </fileselector> + + <button style="fab"> + <image resource="fab_selectfolder"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_file_location2%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefile"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%indent%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3="%tw_file_location1%/%tw_filemanager_rename%"</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefolder"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%indent%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_filemanager_rename%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerchmod"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fm_set_perms_hdr=Set Permissions}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row2_y%"/> + <text>{@fm_perms=Permissions:}</text> + </text> + + <input> + <placement x="%indent%" y="%row2_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="3" maxlen="4" allow="0123456789"/> + <actions> + <action function="set">tw_filemanager_command=chmod %tw_filemanager_rename%</action> + <action function="set">tw_fm_text1=chmod %tw_filemanager_rename%</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerconfirm"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_fm_text1%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_filename1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_fm_text2%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_fm_text3%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider> + <text>{@swipe_to_confirm=Swipe to Confirm}</text> + <action function="page">filemanageraction</action> + </slider> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="filemanageraction"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@fm_hdr=File Manager}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>%tw_fm_text1%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_back=filemanagerlist</action> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_include_text3" var2="0"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%"</action> + </action> + + <action> + <condition var1="tw_include_text3" var2="1"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%" "%tw_fm_text3%"</action> + </action> + </page> + + <page name="decrypt"> + <template name="page"/> + + <action> + <condition var1="tw_crypto_pwtype" var2="2"/> + <action function="page">decrypt_pattern</action> + </action> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@decrypt_data_enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%indent%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_crypto_display%</text> + <data name="tw_crypto_password" mask="*" maskvariable="tw_crypto_display"/> + <restrict minlen="1" maxlen="254"/> + <action function="page">trydecrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%indent%" y="row4a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%indent%" y="row4a_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%indent%" y="%row5_y%"/> + <text>{@decrypt_data_failed=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row10_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row10_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + + <template name="keyboardtemplate"/> + </page> + + <page name="decrypt_pattern"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@decrypt_data_enter_pattern=Enter Pattern.}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@decrypt_data_failed_pattern=Pattern failed, please try again!}</text> + </text> + + <patternpassword> + <placement x="%pattern_x%" y="%row5_y%" w="%pattern_size%" h="%pattern_size%"/> + <dot color="%fileselector_linecolor%" activecolor="%accent_color%" radius="%pattern_dot_dia%"/> + <line color="%fileselector_linecolor%" width="%pattern_line_w%"/> + <data name="tw_crypto_password"/> + <action function="page">trydecrypt</action> + </patternpassword> + + <button style="button_quarter_width"> + <placement x="%indent%" y="%row19a_y%"/> + <text>3x3</text> + <action function="set">tw_gui_pattern_grid_size=3</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col2_x%" y="%row19a_y%"/> + <text>4x4</text> + <action function="set">tw_gui_pattern_grid_size=4</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col3_x%" y="%row19a_y%"/> + <text>5x5</text> + <action function="set">tw_gui_pattern_grid_size=5</action> + </button> + + <button style="button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row19a_y%"/> + <text>6x6</text> + <action function="set">tw_gui_pattern_grid_size=6</action> + </button> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row21a_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%center_x%" y="%row21a_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="overlay">select_language</action> + </button> + </page> + + <page name="trydecrypt"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@mount_hdr=Mount}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@decrypt_data_trying=Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </action> + </page> + + <page name="terminalcommand"> + <template name="page"/> + + <fill color="%background_color%"> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="%slideout_bg_height%"/> + </fill> + + <terminal> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%row3_header_y%" w="%screen_width%" h="%console_terminal_height%"/> + </terminal> + + <terminal> + <condition var1="tw_hide_kb" var2="1"/> + <placement x="0" y="%row3_header_y%" w="%screen_width%" h="%slideout_height%"/> + </terminal> + + <template name="keyboardterminaltemplate"/> + + <template name="keyboardtemplate"/> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%" /> + </fill> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">back</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="0" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1" /> + <condition var1="tw_hide_kb" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1" /> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">back</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </action> + + <action> + <touch key="power+voldown" /> + <action function="screenshot" /> + </action> + </page> + + <page name="sideload"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@adb_sideload_hdr=ADB Sideload}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row2_y%"/> + <text>{@sideload_wipe_dalvik_chk=Wipe Dalvik Cache}</text> + <data variable="tw_wipe_dalvik"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row3a_y%"/> + <text>{@sideload_wipe_cache_chk=Wipe Cache}</text> + <data variable="tw_wipe_cache"/> + </checkbox> + + <slider> + <text>{@swipe_to_sideload=Swipe to Start Sideload}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=adbsideload</action> + <action function="set">tw_action_text1={@sideload_confirm=ADB Sideload}</action> + <action function="set">tw_action_text2={@sideload_usage=Usage: adb sideload filename.zip}</action> + <action function="set">tw_complete_text1={@sideload_complete=ADB Sideload Complete}</action> + <action function="set">tw_has_cancel=1</action> + <action function="set">tw_show_reboot=1</action> + <action function="set">tw_cancel_action=adbsideloadcancel</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="fixcontexts"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@fix_contexts_hdr=Fix Contexts}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@fix_contexts_note1=Note: Fixing contexts is rarely needed.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@fix_contexts_note2=Fixing SELinux Contexts may cause}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@fix_contexts_note3=your device to not boot properly.}</text> + </text> + + <slider> + <text>{@swipe_to_fix_contexts=Swipe to Fix Contexts}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=fixcontexts</action> + <action function="set">tw_action_text1={@fixing_contexts=Fixing Contexts...}</action> + <action function="set">tw_complete_text1={@fix_contexts_complete=Fix Contexts Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="installsu"> + <template name="page"/> + + <text style="text_l"> + <placement x="%col1_x_header%" y="%row3_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_header%" y="%row4_header_y%"/> + <text>{@su_hdr=SuperSU Check}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@su_note1=Your device does not appear to be rooted.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@su_note2=Install SuperSU now?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@su_note3=This will root your device.}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row18a_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="set">tw_page_done=1</action> + </button> + + <slider> + <text>{@swipe_su_to_install=Swipe to Install}</text> + <actions> + <action function="set">tw_action=installsu</action> + <action function="set">tw_action_text1={@su_installing=Installing SuperSU}</action> + <action function="set">tw_action_text2=</action> + <action function="page">singleaction_page</action> + </actions> + </slider> + </page> + + <page name="slideout"> + <fill color="%background_color%"> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="%slideout_bg_height%"/> + </fill> + + <console> + <placement x="%indent%" y="%row3_header_y%" w="%content_width%" h="%slideout_height%"/> + </console> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + <action function="overlay"/> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="select_storage"> + <fill color="%semi_transparent%"> + <placement x="0" y="0" w="%screen_width%" h="%screen_height%"/> + </fill> + + <fill color="%background_color%"> + <placement x="%indent%" y="row5_y" w="%content_width%" h="%dialog_height%"/> + </fill> + + <partitionlist style="partitionlist_storage"> + <text>{@sel_storage_list=Select Storage}</text> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <button style="button_third_width"> + <placement x="%dialog_button_x%" y="%row14_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="overlay"/> + <action function="page">clear_vars</action> + </actions> + </button> + + <fill color="#000000"> + <placement x="0" y="row25_y" w="%screen_width%" h="%navbar_height"/> + </fill> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="select_language"> + <fill color="%semi_transparent%"> + <placement x="0" y="0" w="%screen_width%" h="%screen_height%"/> + </fill> + + <fill color="%background_color%"> + <placement x="%indent%" y="row5_y" w="%content_width%" h="%dialog_height%"/> + </fill> + + <listbox> + <placement x="%col1_x_left%" y="%row5_y%" w="%content_overlay_width%" h="%partitionlist_storage_height%"/> + <text>{@select_language=Select Language:}</text> + <icon selected="radio_true" unselected="radio_false" /> + <data name="tw_language" /> + </listbox> + + <button style="button_third_width"> + <placement x="%dialog_button_x%" y="%row14_y%"/> + <text>{@ok_btn=OK}</text> + <actions> + <action function="overlay"/> + <action function="setlanguage"></action> + </actions> + </button> + + <fill color="#000000"> + <placement x="0" y="row25_y" w="%screen_width%" h="%navbar_height"/> + </fill> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="overlay"/> + <action function="key">%tw_back%</action> + </actions> + </button> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + </pages> +</recovery> diff --git a/gui/theme/common/watch.xml b/gui/theme/common/watch.xml new file mode 100644 index 000000000..ebfe49727 --- /dev/null +++ b/gui/theme/common/watch.xml @@ -0,0 +1,5513 @@ +<?xml version="1.0"?> +<recovery> + <styles> + <style name="text_l"> + <font resource="font_l" color="%text_color%"/> + </style> + + <style name="text_m"> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="text_m_accent"> + <font resource="font_m" color="%accent_color%"/> + </style> + + <style name="text_m_fail"> + <font resource="font_m" color="%text_fail_color%"/> + </style> + + <style name="text_s"> + <font resource="font_s" color="%text_color%"/> + </style> + + <style name="input"> + <background color="%background_color%"/> + <cursor color="%accent_color%" hasfocus="1" width="%input_line_width%"/> + <font resource="font_m" color="%text_color%"/> + </style> + + <style name="checkbox"> + <font resource="font_m" color="%text_color%"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </style> + + <style name="main_button"> + <highlight color="%highlight_color%"/> + <font resource="font_l" color="%text_button_color%"/> + <image resource="main_button"/> + </style> + + <style name="main_button_full_width"> + <highlight color="%highlight_color%"/> + <font resource="font_l" color="%text_button_color%"/> + <image resource="main_button_full_width"/> + </style> + + <style name="main_button_quarter_width"> + <highlight color="%highlight_color%"/> + <font resource="font_l" color="%text_button_color%"/> + <image resource="main_button_quarter_width"/> + </style> + + <style name="main_button_half_height"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_height"/> + </style> + + <style name="main_button_half_height_full_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="main_button_half_height_full_width"/> + </style> + + <style name="button_third_width"> + <highlight color="%highlight_color%"/> + <font resource="font_m" color="%text_button_color%"/> + <image resource="tab_3"/> + </style> + + <style name="button_navbar"> + <font resource="font_m" color="%text_button_color%"/> + </style> + + <style name="console"> + <color foreground="%text_color%" background="%background_color%" scroll="%background_color%"/> + <font resource="fixed"/> + </style> + + <style name="terminal"> + <fastscroll linecolor="%transparent%" rectcolor="%accent_color%" w="%fastscroll_w%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <background color="%background_color%"/> + <font resource="fixed" spacing="2" color="%text_color%"/> + </style> + + <style name="fileselector"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%fileselector_linecolor%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <sort name="tw_gui_sort_order"/> + <icon folder="folder" file="file"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="listbox"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <icon selected="radio_true" unselected="radio_false"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="listbox_headerless"> + <highlight color="%fileselector_highlight_color%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%accent_color%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <icon selected="radio_true" unselected="radio_false"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="listbox_options"> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + <icon selected="checkbox_true_small" unselected="checkbox_false_small"/> + </style> + + <style name="scrolllist"> + <highlight color="%fileselector_highlight_color%"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%fileselector_spacing%" color="%text_color%" highlightcolor="%accent_color%"/> + </style> + + <style name="partitionlist"> + <highlight color="%fileselector_highlight_color%"/> + <header background="%background_color%" textcolor="%accent_color%" separatorcolor="%accent_color%" separatorheight="%fileselector_separatorheight%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="partitionlist_summary"> + <highlight color="%fileselector_highlight_color%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + <icon selected="checkbox_true_small" unselected="checkbox_false_small"/> + </style> + + <style name="partitionlist_headerless_rb"> + <highlight color="%fileselector_highlight_color%"/> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_storage_height%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%fileselector_linecolor%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="radio_true" unselected="radio_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="partitionlist_headerless_cb"> + <highlight color="%fileselector_highlight_color%"/> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_storage_height%"/> + <fastscroll linecolor="%fileselector_linecolor%" rectcolor="%fileselector_linecolor%" w="%fastscroll_w%" linew="%fastscroll_linew%" rectw="%fastscroll_rectw%" recth="%fastscroll_recth%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + <icon selected="checkbox_true" unselected="checkbox_false"/> + <separator color="%fileselector_linecolor%" height="%fileselector_separatorheight%"/> + <background color="%background_color%"/> + <font resource="font_m" spacing="%partitionlist_spacing%" color="%text_color%" highlightcolor="%fileselector_highlight_font_color%"/> + </style> + + <style name="slider"> + <placement x="%center_x%" y="%slider_y%"/> + <font resource="font_l" color="%text_color%"/> + <resource base="slider" used="slider_used" touch="slider_touch"/> + </style> + + <style name="slidervalue"> + <resource handle="handle"/> + <font resource="font_m" color="%text_color%"/> + <colors line="%fileselector_linecolor%"/> + <dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/> + </style> + + <style name="patternpassword"> + <size name="tw_gui_pattern_grid_size" default="3"/> + </style> + </styles> + + <pages> + <page name="main"> + <action> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="main2"> + <template name="page"/> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@install_btn=Install}</text> + <action function="page">install_type</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@wipe_btn=Wipe}</text> + <action function="page">wipe_type1</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@backup_btn=Backup}</text> + <actions> + <action function="set">tw_back=main</action> + <action function="page">backup</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@restore_btn=Restore}</text> + <action function="page">restore</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@reboot_btn=Reboot}</text> + <action function="page">reboot</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">main3</action> + </button> + </page> + + <page name="copylog"> + <template name="page"/> + + <checkbox> + <placement x="%indent%" y="%row1_y%"/> + <text>{@include_kernel_log=Include Kernel Log}</text> + <data variable="tw_include_kernel_log" value="1"/> + </checkbox> + + <slider> + <text>{@swipe_confirm= Confirm}</text> + <actions> + <action function="set">tw_back=main3</action> + <action function="set">tw_action=copylog</action> + <action function="set">tw_action_text1={@copying_log=Copy Logs to SD Card}</action> + <action function="set">tw_complete_text1={@copy_log_complete=Logs Copy Completed}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="back"/> + <action function="page">main2</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="main3"> + <template name="page"/> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@mount_btn=Mount}</text> + <action function="page">mount</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@settings_btn=Settings}</text> + <action function="page">settings</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@files_btn=Files}</text> + <action function="page">filemanagerlist</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@copy_log_btn=Copy Log}</text> + <action function="page">copylog</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>{@advanced_btn=Advanced}</text> + <action function="page">advanced</action> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">main2</action> + </button> + + <action> + <touch key="back"/> + <action function="page">main2</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="install_type"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_hdr=Install} > {@select_type_hdr=Select Type}</text> + </text> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@install_zip_btn=Install Zip}</text> + <actions> + <action function="queueclear"/> + <action function="set">tw_selectimage=0</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@install_image_btn=Install Image}</text> + <actions> + <action function="queueclear"/> + <action function="set">tw_selectimage=1</action> + <action function="page">install</action> + </actions> + </button> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@adb_sideload_btn=ADB Sideload}</text> + <action function="page">sideload</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="install"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_zip_hdr=Install Zip} > {@install_select_file_hdr=Select File}</text> + </text> + + <text style="text_m"> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_image_hdr=Install Image} > {@install_select_file_hdr=Select File}</text> + </text> + + <fileselector> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%indent%" y="%row2_header_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".zip" folders="1" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <fileselector> + <condition var1="tw_selectimage" var2="1"/> + <placement x="%indent%" y="%row2_header_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>%tw_zip_location%</text> + <filter extn=".img" folders="1" files="1"/> + <path name="tw_zip_location" default="/sdcard"/> + <data name="tw_filename"/> + <selection name="tw_file"/> + </fileselector> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_storage"/> + <actions> + <action function="set">tw_storagetext={@install_hdr=Install} > {@select_storage_hdr=Select Storage}</action> + <action function="set">tw_back=install</action> + <action function="page">select_storage</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="0"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <actions> + <action function="queuezip"/> + <action function="page">flash_queue</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_selectimage" var2="1"/> + <condition var1="tw_filename" op="modified"/> + </conditions> + <action function="page">flashimage_type</action> + </action> + + <action> + <touch key="back"/> + <action function="page">install_type</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_queue"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_zip_hdr=Install Zip} > {@queue_hdr=Queue}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@zip_queue_count_s=File %tw_zip_queue_count% of 10:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row2_y%"/> + <text>%tw_file%</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row4_y%"/> + <text>{@folder=Folder:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row5_y%"/> + <text>%tw_zip_location%</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row8_y%"/> + <text>{@zip_back_clear=Press back button to clear the queue.}</text> + </text> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <actions> + <action function="queueclear"/> + <action function="page">install</action> + </actions> + </button> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_addzip"/> + <action function="page">install</action> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <action function="page">flash_confirm</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">flash_options</action> + </button> + + <action> + <touch key="back"/> + <actions> + <action function="queueclear"/> + <action function="page">install</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_options"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <condition var1="tw_selectimage" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_zip_hdr=Install Zip} > {@options_hdr=Options}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row1_y%"/> + <text>{@zip_sig_chk=Zip file signature verification}</text> + <data variable="tw_signed_zip_verify"/> + </checkbox> + + <checkbox> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%indent%" y="%row2a_y%"/> + <text>{@inject_twrp_chk=Inject TWRP after install}</text> + <data variable="tw_inject_after_zip"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row4_y%"/> + <text>{@install_reboot_chk=Reboot after installation is complete}</text> + <data variable="tw_install_reboot"/> + </checkbox> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">flash_queue</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept_transp"/> + <action function="page">flash_confirm</action> + </button> + + <action> + <touch key="back"/> + <action function="page">flash_queue</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_confirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_zip_hdr=Install Zip} > {@confirm_flash_hdr=Confirm Flash}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row2_y%"/> + <text>%tw_file%</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="48"/> + <action function="page">flash_queue</action> + </button> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row4_y%"/> + <text>{@zip_queue=Queue:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row5_y%"/> + <text>{@zip_queue_count_s=File %tw_zip_queue_count% of 10:}</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row3a_y%" w="%screen_width%" h="48"/> + <action function="page">flash_queue</action> + </button> + + <listbox style="listbox_options"> + <placement x="%col1_x_left%" y="%row8_y%" w="%content_width%" h="80"/> + <listitem name="{@zip_sig_chk=Zip signature verification}"> + <data variable="tw_signed_zip_verify"/> + </listitem> + </listbox> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row7_y%"/> + <text>{@options=Options:}</text> + </text> + + <text style="text_m"> + <condition var1="tw_has_injecttwrp" var2="1"/> + <condition var1="tw_inject_after_zip" var2="1"/> + <placement x="%indent%" y="%row9_y%"/> + <text>{@inject_twrp_chk=Inject TWRP after install}</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row6a_y%" w="%screen_width%" h="64"/> + <action function="page">flash_options</action> + </button> + + <slider> + <text>{@swipe_confirm= Confirm}</text> + <action function="flash">flash_zip</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="cancelzip"/> + <action function="page">install</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flash_zip"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@installing_zip_xml=Installing Zip: %tw_file%}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <action function="page">flash_done</action> + </action> + </page> + + <page name="flash_done"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_failed=Installation Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_successful=Installation Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row13_y%"/> + <text>{@wipe_cache_dalvik_btn=Wipe cache/dalvik}</text> + <actions> + <action function="set">tw_back=flash_done</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=/cache</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=wipe</action> + <action function="set">tw_action2_param=dalvik</action> + <action function="set">tw_text1={@wipe_cache_dalvik_confirm=Wipe Cache & Dalvik?}</action> + <action function="set">tw_action_text1={@wiping_cache_dalvik=Wiping Cache & Dalvik...}</action> + <action function="set">tw_complete_text1={@wipe_cache_dalvik_complete=Cache & Dalvik Wipe Complete}</action> + <action function="set">tw_slider_text={@swipe_wipe_s= Wipe}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install_type</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_install_reboot" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + <condition var1="tw_reboot_system" var2="1"/> + </conditions> + <actions> + <action function="set">tw_sleep=%tw_sleep_total%</action> + <action function="page">flash_sleep_and_reboot</action> + </actions> + </action> + </page> + + <page name="flash_sleep_and_reboot"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_reboot=Rebooting in %tw_sleep% second(s)}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_height"> + <condition var1="tw_sleep" op=">" var2="0"/> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_install_reboot=0</action> + <action function="page">flash_done</action> + </actions> + </button> + + <action> + <conditions> + <condition var1="tw_sleep" var2="tw_sleep_total"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <action function="sleepcounter">%tw_sleep_total%</action> + </action> + + <action> + <conditions> + <condition var1="tw_sleep" var2="0"/> + <condition var1="tw_install_reboot" var2="1"/> + </conditions> + <actions> + <action function="sleep">50000</action> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </action> + </page> + + <page name="flashimage_type"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_image_hdr=Install Image} > {@install_sel_target=Select Target Partition}</text> + </text> + + <partitionlist style="partitionlist_headerless_rb"> + <data name="tw_flash_partition"/> + <listtype name="flashimg"/> + </partitionlist> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">install</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept_transp"/> + <action function="page">flashimage_confirm</action> + </button> + + <action> + <touch key="back"/> + <action function="page">install</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="flashimage_confirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_image_hdr=Install Image} > {@confirm_flash_hdr=Confirm Flash}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@file=File:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row2_y%"/> + <text>%tw_file%</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="48"/> + <action function="page">install</action> + </button> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row4_y%"/> + <text>{@target_partition=Target Partition:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row5_y%"/> + <text>%tw_flash_partition%</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row3a_y%" w="%screen_width%" h="48"/> + <action function="page">flashimage_type</action> + </button> + + <slider> + <text>{@swipe_confirm= Confirm}</text> + <actions> + <action function="set">tw_back=flashimage_confirm</action> + <action function="set">tw_action=flashimage</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action_text1={@flashing_image=Flashing Image...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@image_flashed=Image Flashed}</action> + <action function="page">action_page</action> + </actions> + <action function="flashimage"/> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=install</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="clear_vars"> + <action> + <action function="set">tw_operation_state=0</action> + <action function="set">tw_text1=</action> + <action function="set">tw_text2=</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1=</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_action_param=</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_action2=</action> + <action function="set">tw_action2_param=</action> + <action function="set">tw_has_cancel=0</action> + <action function="set">tw_cancel_action=</action> + <action function="set">tw_cancel_param=</action> + <action function="set">tw_show_exclamation=0</action> + <action function="set">tw_show_reboot=0</action> + <action function="page">%tw_clear_destination%</action> + </action> + </page> + + <page name="reboot_system_routine"> + <action> + <action function="set">tw_back=main2</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=system</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_text3=</action> + <action function="set">tw_text4=</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot_s= Reboot}</action> + <action function="page">rebootcheck</action> + </action> + </page> + + <page name="confirm_action"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_text1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_text2%</text> + </text> + + <text style="text_m"> + <condition var1="tw_action" op="!=" var2="changefilesystem"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_text3%</text> + </text> + + <text style="text_m"> + <condition var1="tw_action" op="!=" var2="changefilesystem"/> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_text4%</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_action" var2="changefilesystem"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_text3%</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_action" var2="changefilesystem"/> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_text4%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider> + <text>%tw_slider_text%</text> + <action function="page">action_page</action> + </slider> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="action_page"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_action_text1% %tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <button style="main_button_half_height"> + <condition var1="tw_has_cancel" var2="1"/> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="%tw_cancel_action%">%tw_cancel_param%</action> + </button> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="singleaction_page"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_action_text1% %tw_action_text2%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_page_done=1</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="0"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + </actions> + </action> + + <action> + <condition var1="tw_has_action2" var2="1"/> + <actions> + <action function="%tw_action%">%tw_action_param%</action> + <action function="%tw_action2%">%tw_action2_param%</action> + </actions> + </action> + </page> + + <page name="action_complete"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m_fail"> + <condition var1="tw_operation_status" op="!=" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_complete_text1% {@failed=Failed}</text> + </text> + + <text style="text_m"> + <condition var1="tw_operation_status" var2="0"/> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_complete_text1% {@successful=Successful}</text> + </text> + + <template name="console"/> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row13_y%"/> + <text>{@back_btn=Back}</text> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@reboot_system_btn=Reboot System}</text> + <actions> + <action function="set">tw_back=main2</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_clear_destination=main2</action> + <action function="page">clear_vars</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </action> + </page> + + <page name="filecheck"> + <action> + <action function="fileexists">%tw_filecheck%</action> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_fileexists=1</action> + <action function="page">%tw_existpage%</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="1"/> + </conditions> + <actions> + <action function="set">tw_fileexists=0</action> + <action function="page">%tw_notexistpage%</action> + </actions> + </action> + </page> + + <page name="rebootcheck"> + <action> + <condition var1="tw_backup_system_size" op=">=" var2="%tw_min_system%"/> + <action function="page">appcheck</action> + </action> + + <action> + <condition var1="tw_backup_system_size" op="<" var2="%tw_min_system%"/> + <action function="page">confirm_action</action> + </action> + </page> + + <page name="appcheck"> + <action> + <condition var1="tw_app_prompt" var2="1"/> + <action function="checkforapp"></action> + </action> + + <action> + <condition var1="tw_app_prompt" op="!=" var2="1"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="1"/> + <action function="page">rebootapp</action> + </action> + + <action> + <condition var1="tw_app_install_status" var2="2"/> + <action function="reboot">%tw_reboot_param%</action> + </action> + </page> + + <page name="wipe_type1"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@select_type_hdr=Select Type}</text> + </text> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@factory_reset_btn=Factory Reset}</text> + <action function="page">wipe</action> + </button> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@advanced_wipe_btn=Advanced Wipe}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">advancedwipe</action> + </actions> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">wipe_type2</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="wipe_type2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@select_type_hdr=Select Type}</text> + </text> + + <button style="main_button_full_width"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@format_data_btn=Format Data}</text> + <action function="page">formatdata</action> + </button> + + <button style="main_button_full_width"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_has_data_media" var2="0"/> + </conditions> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@wipe_enc_btn=Wipe Encryption}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@wipe_enc_confirm=Wipe Encryption from Data?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="set">tw_slider_text={@swipe_format_data_s= Format Data}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_full_width"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@file_sys_opt=File System Options}</text><actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partitionoptions_select</action> + </actions> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">wipe_type1</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="wipe"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@factory_reset_hdr=Factory Reset}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@factory_reset1=Wipes Data, Cache, and Dalvik}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@factory_reset2=(not including internal storage)}</text> + </text> + + <text style="text_m_accent"> + <conditions> + <condition var1="tw_has_android_secure" var2="1"/> + <condition var1="fileexists" var2="/and-sec"/> + </conditions> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@android_secure=Android Secure}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_has_sdext_partition" var2="1"/> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@sdext=SD-EXT}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@factory_reset3=Most of the time this is}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@factory_reset4=the only wipe that you need.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row9_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider> + <text>{@swipe_wipe_s= Wipe}</text> + <actions> + <action function="set">tw_back=wipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=data</action> + <action function="set">tw_action_text1={@factory_resetting=Factory Reset...}</action> + <action function="set">tw_complete_text1={@factory_reset_complete=Factory Reset Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="back"/> + <action function="page">wipe_type1</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="advancedwipe"> + <action> + <action function="set">tw_wipe_list=</action> + </action> + + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@advanced_wipe_hdr=Advanced Wipe} > {@sel_part_hdr=Select Partitions}</text> + </text> + + <partitionlist style="partitionlist_headerless_cb"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <data name="tw_wipe_list"/> + <listtype name="wipe"/> + </partitionlist> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <slider> + <text>{@swipe_wipe_s= Wipe}</text> + <actions> + <action function="set">tw_back=advancedwipe</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=LIST</action> + <action function="set">tw_text1={@wipe_sel_confirm=Wipe Selected Partition(s)?}</action> + <action function="set">tw_action_text1={@wiping_part=Wiping Partition(s)...}</action> + <action function="set">tw_complete_text1={@wipe_complete=Wipe Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe_type1</action> + </action> + </page> + + <page name="formatdata"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@format_data_hdr=Format Data}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@format_data_wtc1=Format Data will wipe all of your apps,}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@format_data_wtc2=backups and media. This cannot be undone.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@yes_continue=Type yes to continue. Press back to cancel.}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row5_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_confirm_formatdata%</text> + <data name="tw_confirm_formatdata"/> + <restrict minlen="3" maxlen="3" allow="yes"/> + <action function="page">formatdata_confirm</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row6_input_y" w="%content_width%" h="input_line_width"/> + </fill> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe_type2</action> + </action> + </page> + + <page name="formatdata_confirm"> + <action> + <condition var1="tw_confirm_formatdata" op="=" var2="yes"/> + <actions> + <action function="set">tw_back=formatdata</action> + <action function="set">tw_action=wipe</action> + <action function="set">tw_action_param=DATAMEDIA</action> + <action function="set">tw_action_text1={@formatting_data=Formatting Data...}</action> + <action function="set">tw_complete_text1={@format_data_complete=Data Format Complete}</action> + <action function="page">action_page</action> + </actions> + </action> + + <action> + <condition var1="tw_confirm_formatdata" op="!=" var2="yes"/> + <action function="page">formatdata</action> + </action> + </page> + + <page name="checkpartitionlist"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">partitionoptions</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">partitionoptions_select</action> + </actions> + </action> + </page> + + <page name="partitionoptions_select"> + <action> + <action function="set">tw_wipe_list=</action> + </action> + + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@file_sys_opt=File System Options} > {@sel_part_hdr=Select Partitions}</text> + </text> + + <partitionlist style="partitionlist_headerless_cb"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <data name="tw_wipe_list"/> + <listtype name="wipe"/> + </partitionlist> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%col1_x_left%" y="%row12_y%"/> + <text>{@invalid_part_sel=Invalid partition selection}</text> + </text> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/><actions> + <action function="checkpartitionlist">tw_wipe_list</action> + <action function="page">checkpartitionlist</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">wipe_type2</action> + </action> + </page> + + <page name="partitionoptions"> + + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@wipe_hdr=Wipe} > {@file_sys_opt=File System Options} > {@sel_act_hdr=Select Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@partition=Partition: %tw_partition_name%}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@part_curr_fs=File system: %tw_partition_file_system%}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="1"/> + <placement x="%col1_x_left%" y="%row2a_y%"/> + <text>{@part_present_yes=Present: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_is_present" var2="0"/> + <placement x="%col1_x_left%" y="%row2a_y%"/> + <text>{@part_present_no=Present: No}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="1"/> + <placement x="%col1_x_right%" y="%row2a_y%"/> + <text>{@part_removable_yes=Removable: Yes}</text> + </text> + + <text style="text_m"> + <condition var1="tw_partition_removable" var2="0"/> + <placement x="%col1_x_right%" y="%row2a_y%"/> + <text>{@part_removable_no=Removable: No}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row3a_y%"/> + <text>{@part_size=Size: %tw_partition_size%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row3a_y%"/> + <text>{@part_used=Used: %tw_partition_used%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row4a_y%"/> + <text>{@part_free=Free: %tw_partition_free%MB}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row4a_y%"/> + <text>{@part_backup_size=Backup Size: %tw_partition_backup_size%MB}</text> + </text> + + <button style="main_button"> + <condition var1="tw_partition_can_resize" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@resize_btn_s=Resize}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=resize</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=getpartitiondetails</action> + <action function="set">tw_action2_param=tw_wipe_list</action> + <action function="set">tw_text1={@resize_confirm=Resize %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@resizing=Resizing...}</action> + <action function="set">tw_complete_text1={@resize_complete=Resize Complete}</action> + <action function="set">tw_slider_text={@swipe_resize_s= Resize}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_can_repair" op="=" var2="1"/> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@repair_btn_s=Repair}</text> + <actions> + <action function="set">tw_back=partitionoptions</action> + <action function="set">tw_action=repair</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@repair_confirm=Repair %tw_partition_name%?}</action> + <action function="set">tw_text2=</action> + <action function="set">tw_action_text1={@repairing=Repairing...}</action> + <action function="set">tw_complete_text1={@repair_complete=Repair Complete}</action> + <action function="set">tw_slider_text={@swipe_repair_s= Repair}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">partitionoptions_select</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>{@change_fs_btn_s=Change}</text> + <action function="page">selectfilesystem</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partitionoptions_select</action> + </action> + </page> + + <page name="refreshfilesystem"> + <action> + <condition var1="tw_check_partition_list" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="getpartitiondetails">tw_wipe_list</action> + <action function="page">selectfilesystem</action> + </actions> + </action> + + <action> + <condition var1="tw_check_partition_list" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="set">tw_wipe_list=</action> + <action function="page">advancedwipe</action> + </actions> + </action> + </page> + + <page name="selectfilesystem"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@change_fs_for_hdr_s=Partition: %tw_partition_name% > Select File System}</text> + </text> + + <button style="main_button"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>EXT2</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext2</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT2</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>EXT3</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext3</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT3</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_ext" op="=" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>EXT4</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=ext4</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=EXT4</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_vfat" op="=" var2="1"/> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>FAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=vfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=FAT</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_exfat" op="=" var2="1"/> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>exFAT</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=exfat</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=exFAT</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_partition_f2fs" op="=" var2="1"/> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>F2FS</text> + <actions> + <action function="set">tw_back=refreshfilesystem</action> + <action function="set">tw_action=changefilesystem</action> + <action function="set">tw_action_param=%tw_partition_mount_point%</action> + <action function="set">tw_action_new_file_system=f2fs</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@change_fs_confirm=Change %tw_partition_name%?}</action> + <action function="set">tw_text2=F2FS</action> + <action function="set">tw_text3={@change_fs_warn1=Some ROMs or kernels may not support some}</action> + <action function="set">tw_text4={@change_fs_warn2=file systems. Proceed with caution!}</action> + <action function="set">tw_action_text1={@formatting=Formatting...}</action> + <action function="set">tw_complete_text1={@format_complete=Format Complete}</action> + <action function="set">tw_slider_text={@swipe_change_s= Change}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partitionoptions</action> + </action> + </page> + + <page name="backup"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@select_storage_hdr=Select Storage}</text> + </text> + + <partitionlist style="partitionlist_headerless_rb"> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_refresh"/> + <actions> + <action function="refreshsizes"/> + <action function="page">backup</action> + </actions> + </button> + + <button> + <condition var1="tw_back" var2="backup_confirm"/> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <action function="page">backup_confirm</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <actions> + <action function="set">tw_back=backup</action> + <action function="page">backup_selectpartitions</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="backup_selectpartitions"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@sel_part_hdr=Select Partitions}</text> + </text> + + <partitionlist style="partitionlist_headerless_cb"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <data name="tw_backup_list"/> + <listtype name="backup"/> + </partitionlist> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">backup</action> + </button> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_refresh"/> + <action function="page">backup_selectpartitions</action> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <action function="page">backup_confirm</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <actions> + <action function="set">tw_back=backup_selectpartitions</action> + <action function="page">backup_options</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="backup_options"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@options_hdr=Options}</text> + </text> + + <listbox style="scrolllist"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <listitem name="{@enable_backup_comp_chk=Enable compression}"> + <data variable="tw_use_compression"/> + </listitem> + <listitem name="{@skip_md5_backup_chk=Skip MD5 generation during backup}"> + <data variable="tw_skip_md5_generate"/> + </listitem> + <listitem name="{@disable_backup_space_chk=Disable free space check before backup}"> + <data variable="tw_disable_free_space"/> + </listitem> + </listbox> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">backup_selectpartitions</action> + </button> + + <button> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_encryption_dis"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="set">tw_back=backup_options</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_encryption_en"/> + <actions> + <action function="set">tw_password_not_match=0</action> + <action function="set">tw_back=backup_options</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept_transp"/> + <actions> + <action function="set">tw_back=backup_options</action> + <action function="page">backup_confirm</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="backup_confirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@backup_confirm_hdr=Confirm Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row2_y%"/> + <text>%tw_backup_name%</text> + </text> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_half_width%" h="input_line_width" placement="1"/> + </fill> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row2_header_y%" w="%screen_half_width%" h="48"/> + <actions> + <action function="set">tw_back=backup_confirm</action> + <action function="set">tw_fileexists=0</action> + <action function="page">backup_name1</action> + </actions> + </button> + + <fill color="%background_color%"> + <placement x="%col1_x_left_negative%" y="%row2_header_y%" w="%screen_half_width%" h="48"/> + </fill> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row3a_y%"/> + <text>{@partitions=Partitions:}</text> + </text> + + <partitionlist style="partitionlist_summary"> + <placement x="%col1_x_left%" y="%row4a_y%" w="%content_half_width%" h="96"/> + <data name="tw_backup_list"/> + <listtype name="backup"/> + </partitionlist> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row3a_y%" w="%screen_half_width%" h="112"/> + <actions> + <action function="set">tw_back=backup_confirm</action> + <action function="page">backup_selectpartitions</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@storage=Storage:}</text> + </text> + + <text style="text_m"> + <placement x="%col1_x_right%" y="%row2_y%"/> + <text>%tw_storage_display_name%</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="%center_x%" y="%row2_header_y%" w="%screen_half_width%" h="48"/> + <actions> + <action function="set">tw_back=backup_confirm</action> + <action function="page">backup</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row3a_y%"/> + <text>{@encryption=Encryption:}</text> + </text> + + <text style="text_m"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="0"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%col1_x_right%" y="%row4a_y%"/> + <text>{@disabled=Disabled}</text> + </text> + + <text style="text_m"> + <conditions> + <condition var1="tw_include_encrypted_backup" var2="1"/> + <condition var1="tw_encrypt_backup" var2="1"/> + <condition var1="tw_enable_adb_backup" op="!=" var2="1"/> + </conditions> + <placement x="%col1_x_right%" y="%row4a_y%"/> + <text>{@enabled=Enabled}</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="%center_x%" y="%row3a_y%" w="%screen_half_width%" h="48"/> + <actions> + <action function="set">tw_back=backup_confirm</action> + <action function="page">backupencryption</action> + </actions> + </button> + + <listbox style="listbox_options"> + <placement x="%col1_x_right%" y="%row7_y%" w="%content_half_width%" h="80"/> + <listitem name="{@enable_backup_comp_chk=Enable compression}"> + <data variable="tw_use_compression"/> + </listitem> + <listitem name="{@skip_md5_backup_chk=Skip MD5 generation during backup}"> + <data variable="tw_skip_md5_generate"/> + </listitem> + <listitem name="{@disable_backup_space_chk=Disable free space check before backup}"> + <data variable="tw_disable_free_space"/> + </listitem> + </listbox> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@options=Options:}</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="%center_x%" y="%row6_y%" w="%screen_half_width%" h="64"/> + <actions> + <action function="set">tw_back=backup_confirm</action> + <action function="page">backup_options</action> + </actions> + </button> + + <slider> + <text>{@swipe_confirm= Confirm}</text> + <action function="page">backup_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">backup</action> + </action> + </page> + + <page name="backup_name1"> + <action> + <condition var1="tw_backup_name" op="=" var2="{@auto_generate=(Auto Generate)}"/> + <action function="generatebackupname"/> + </action> + + <action> + <action function="page">backup_name2</action> + </action> + </page> + + <page name="backup_name2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@backup_name_hdr=Set Backup Name}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_name%</text> + <data name="tw_backup_name"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_name%</action> + <action function="set">tw_existpage=backup_name2</action> + <action function="set">tw_notexistpage=backup_confirm</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup_confirm</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@append_date_btn=Append Date}</text> + <action function="appenddatetobackupname"/> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_backup_name={@auto_generate=(Auto Generate)}</action> + <action function="page">backup_confirm</action> + </actions> + </action> + </page> + + <page name="backupencryption"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@encrypt_backup=Encrypt your Backup?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display%</text> + <data name="tw_backup_password" mask="*" maskvariable="tw_backup_encrypt_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">backupencryption2</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%col1_x_left%" y="row3_input_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_not_match" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%"/> + <text>{@pass_not_match=Passwords do not match!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">%tw_back%</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + </page> + + <page name="backupencryption2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@backup_hdr=Backup} > {@encrypt_backup=Encrypt your Backup?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@enter_pass2=Enter Password again:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_encrypt_display2%</text> + <data name="tw_backup_password2" mask="*" maskvariable="tw_backup_encrypt_display2"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">checkbackuppassword</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">%tw_back%</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + </page> + + <page name="checkbackuppassword"> + <action> + <condition var1="tw_backup_password2" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=1</action> + <action function="page">%tw_back%</action> + </actions> + </action> + + <action> + <condition var1="tw_backup_password2" op="!=" var2="tw_backup_password"/> + <actions> + <action function="set">tw_encrypt_backup=0</action> + <action function="set">tw_password_not_match=1</action> + <action function="set">tw_backup_password=</action> + <action function="set">tw_backup_password2=</action> + <action function="set">tw_backup_encrypt_display=</action> + <action function="set">tw_backup_encrypt_display2=</action> + <action function="page">backupencryption</action> + </actions> + </action> + </page> + + <page name="backup_run"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_operation% %tw_partition%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m"> + <placement x="%indent%" y="%row13a_y%"/> + <text>%tw_file_progress%</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row14a_y%"/> + <text>%tw_size_progress%</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="cancelbackup"/> + </button> + + <action> + <action function="nandroid">backup</action> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="0"/> + <actions> + <action function="set">tw_back=backup_selectpartitions</action> + <action function="set">tw_complete_text1={@backup_complete=Backup Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_cancel_backup" var2="1"/> + <actions> + <action function="set">tw_back=backup_selectpartitions</action> + <action function="set">tw_complete_text1={@backup_cancel=Backup Cancelled}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + </page> + + <page name="restore"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@sel_backup_hdr=Select Backup}</text> + </text> + + <fileselector> + <placement x="%indent%" y="%row2_header_y%" w="%content_width%" h="%fileselector_install_height%"/> + <text>%tw_storage_display_name%</text> + <filter folders="1" files="0" nav="0"/> + <path name="tw_backups_folder"/> + <data name="tw_restore" default=""/> + <selection name="tw_restore_name"/> + </fileselector> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_storage"/> + <actions> + <action function="set">tw_storagetext={@restore_btn=Restore} > {@select_storage_btn=Select Storage}</action> + <action function="set">tw_back=restore</action> + <action function="page">select_storage</action> + </actions> + </button> + + <action> + <condition var1="tw_restore" op="modified"/> + <actions> + <action function="readBackup"/> + <action function="set">tw_back=restore</action> + <action function="page">restore_read</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="restore_read"> + <action> + <condition var1="tw_restore_encrypted" var2="1"/> + <actions> + <action function="set">tw_password_fail=0</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <condition var1="tw_restore_encrypted" var2="0"/> + <actions> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_decrypt"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@restore_enc_backup_hdr=Encrypted Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_restore_display%</text> + <data name="tw_restore_password" mask="*" maskvariable="tw_restore_display"/> + <restrict minlen="1" maxlen="32" allow="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"/> + <action function="page">try_restore_decrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="row3_input_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%"/> + <text>{@restore_dec_fail=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@del_backup_btn=Delete Backup}</text> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete_s= Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore</action> + </action> + </page> + + <page name="try_restore_decrypt"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@restore_try_decrypt_s=Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt_backup"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">restore_decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">restore_select</action> + </actions> + </action> + </page> + + <page name="restore_select"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@sel_part_hdr=Select Partitions}</text> + </text> + + <partitionlist style="partitionlist_headerless_cb"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <data name="tw_restore_list" selectedlist="tw_restore_selected"/> + <listtype name="restore"/> + </partitionlist> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">restore</action> + </button> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_delete"/> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && rm -rf "%tw_restore_name%"</action> + <action function="set">tw_text1={@del_backup_confirm=Delete Backup?}</action> + <action function="set">tw_text2=%tw_restore_name%</action> + <action function="set">tw_text4={@del_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@deleting_backup=Deleting Backup...}</action> + <action function="set">tw_complete_text1={@backup_deleted=Backup Delete Complete}</action> + <action function="set">tw_slider_text={@swipe_delete_s= Delete}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <action function="page">restore_confirm</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <actions> + <action function="set">tw_back=restore_select</action> + <action function="page">restore_options</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + </page> + + <page name="restore_options"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@options_hdr=Options}</text> + </text> + + <listbox style="scrolllist"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <listitem name="{@restore_enable_md5_chk=Enable MD5 Verification of Backup Files}"> + <data variable="tw_skip_md5_check"/> + </listitem> + </listbox> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">restore_select</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept_transp"/> + <actions> + <action function="set">tw_back=restore_options</action> + <action function="page">restore_confirm</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="renamebackup"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@rename_backup_hdr=Rename Backup}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_backup_rename%</text> + <data name="tw_backup_rename"/> + <restrict minlen="1" maxlen="64" allow=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.{}[]"/> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_action=cmd</action> + <action function="set">tw_action_param=cd %tw_backups_folder% && mv "%tw_restore_name%" "%tw_backup_rename%"</action> + <action function="set">tw_text1={@rename_backup_confirm=Rename Backup?}</action> + <action function="set">tw_text2={@rename_backup_confirm2=This cannot be undone!}</action> + <action function="set">tw_action_text1={@renaming_backup=Renaming Backup...}</action> + <action function="set">tw_complete_text1={@rename_backup_complete=Backup Rename Complete}</action> + <action function="set">tw_slider_text={@swipe_rename= Rename}</action> + <action function="set">tw_filecheck=%tw_backups_folder%/%tw_backup_rename%</action> + <action function="set">tw_existpage=renamebackup</action> + <action function="set">tw_notexistpage=confirm_action</action> + <action function="page">filecheck</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_fileexists" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%"/> + <text>{@backup_name_exists=A backup with that name already exists!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">restore_confirm</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore_confirm</action> + </action> + </page> + + <page name="restore_confirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@restore_hdr=Restore} > {@confirm_hdr=Confirm}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <text style="text_m"> + <placement x="%indent%" y="%row2_y%"/> + <text>%tw_restore_name%</text> + </text> + + <fill color="%accent_color%"> + <placement x="%indent%" y="64" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="48"/> + <actions> + <action function="set">tw_back=restore_confirm</action> + <action function="set">tw_backup_rename=%tw_restore_name%</action> + <action function="set">tw_fileexists=0</action> + <action function="page">renamebackup</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row3a_y%"/> + <text>{@partitions=Partitions:}</text> + </text> + + <partitionlist style="partitionlist_summary"> + <placement x="%col1_x_left%" y="%row4a_y%" w="%content_half_width%" h="96"/> + <data name="tw_restore_list" selectedlist="tw_restore_selected"/> + <listtype name="restore"/> + </partitionlist> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%row3a_y%" w="%screen_half_width%" h="112"/> + <actions> + <action function="set">tw_back=restore_confirm</action> + <action function="page">restore_select</action> + </actions> + </button> + + <listbox style="listbox_options"> + <placement x="%col1_x_right%" y="%row4a_y%" w="%content_half_width%" h="80"/> + <listitem name="{@restore_enable_md5_chk=Enable MD5 Verification of Backup Files}"> + <data variable="tw_skip_md5_check"/> + </listitem> + </listbox> + + <text style="text_m_accent"> + <placement x="%col1_x_right%" y="%row3a_y%"/> + <text>{@options=Options:}</text> + </text> + + <button> + <fill color="%transparent%"/> + <placement x="%center_x%" y="%row3a_y%" w="%screen_half_width%" h="64"/> + <actions> + <action function="set">tw_back=restore_confirm</action> + <action function="page">restore_options</action> + </actions> + </button> + + <slider> + <text>{@swipe_restore_s= Restore}</text> + <action function="page">restore_run</action> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">restore_options</action> + </action> + </page> + + <page name="restore_run"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_operation% %tw_partition%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <text style="text_m"> + <placement x="%indent%" y="%row14a_y%"/> + <text>%tw_size_progress%</text> + </text> + + <action> + <condition var1="tw_operation_state" var2="1"/> + <actions> + <action function="set">tw_back=restore</action> + <action function="set">tw_complete_text1={@restore_complete=Restore Complete}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <action function="nandroid">restore</action> + </action> + </page> + + <page name="mount"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > %tw_storage_display_name%</text> + </text> + + <partitionlist style="partitionlist_headerless_cb"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%partitionlist_wipe_height%"/> + <listtype name="mount"/> + </partitionlist> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="=" var2="0"/> + <placement x="%col1_x_left%" y="%row11_y%" textplacement="6"/> + <text>{@mount_sys_ro_s_chk=Mount System RO}</text> + <image resource="checkbox_false"/> + <action function="mountsystemtoggle">1</action> + </button> + + <button style="checkbox"> + <condition var1="tw_mount_system_ro" op="!=" var2="0"/> + <placement x="%col1_x_left%" y="%row11_y%" textplacement="6"/> + <text>{@mount_sys_ro_s_chk=Mount System RO}</text> + <image resource="checkbox_true"/> + <actions> + <action function="set">tw_lifetime_writes=2</action> + <action function="page">system_readonly_check</action> + </actions> + </button> + + <button style="checkbox"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="0"/> + </conditions> + <placement x="%col1_x_left%" y="%row13_y%" textplacement="6"/> + <image resource="checkbox_false"/> + <text>{@enable_mtp_btn=Enable MTP}</text> + <action function="startmtp"/> + </button> + + <button style="checkbox"> + <conditions> + <condition var1="tw_has_mtp" var2="1"/> + <condition var1="tw_mtp_enabled" var2="1"/> + </conditions> + <placement x="%col1_x_left%" y="%row13_y%" textplacement="6"/> + <image resource="checkbox_true"/> + <text>{@disable_mtp_btn=Disable MTP}</text> + <action function="stopmtp"/> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_storage"/> + <actions> + <action function="set">tw_storagetext={@mount_hdr=Mount} > {@select_storage_hdr=Select Storage}</action> + <action function="set">tw_back=mount</action> + <action function="page">select_storage</action> + </actions> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">mount_options</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="mount_options"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > %tw_storage_display_name%</text> + </text> + + <button style="main_button_full_width"> + <condition var1="tw_has_usb_storage" var2="1"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@mount_usb_storage_btn=Mount USB Storage}</text> + <action function="page">usb_mount</action> + </button> + + <button style="main_button_full_width"> + <conditions> + <condition var1="tw_is_encrypted" var2="1"/> + <condition var1="tw_is_decrypted" var2="0"/> + </conditions> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@decrypt_data_btn=Decrypt Data}</text> + <action function="page">decrypt</action> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">mount</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">mount</action> + </action> + </page> + + <page name="usb_mount"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > {@usb_storage_hdr=USB Storage}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@usb_stor_mnt1=USB Storage Mounted}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@usb_stor_mnt2=Be sure to safely remove your device}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@usb_stor_mnt3=from your computer before unmounting!}</text> + </text> + + <button style="main_button"> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <text>{@unmount_btn=Unmount}</text> + <action function="page">usb_umount</action> + </button> + + <action> + <action function="mount">usb</action> + <action function="set">tw_busy=1</action> + </action> + </page> + + <page name="usb_umount"> + <action> + <action function="unmount">usb</action> + </action> + + <action> + <action function="page">mount_options</action> + <action function="set">tw_busy=0</action> + </action> + </page> + + <page name="system_readonly_check"> + <action> + <action function="checkpartitionlifetimewrites">/system</action> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="1"/> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="page">mount</action> + </actions> + </action> + + <action> + <condition var1="tw_lifetime_writes" var2="0"/> + <actions> + <action function="set">tw_back=mount</action> + <action function="page">system_readonly</action> + </actions> + </action> + </page> + + <page name="reboot"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@reboot_hdr=Reboot}</text> + </text> + + <button style="main_button"> + <condition var1="tw_reboot_system" var2="1"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@rb_system_btn=System}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="page">reboot_system_routine</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_poweroff" var2="1"/> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@rb_poweroff_btn=Power Off}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=poweroff</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_ospo=sure you wish to power off?}</action> + <action function="set">tw_action_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_complete_text1={@turning_off=Turning Off...}</action> + <action function="set">tw_slider_text={@swipe_power_off_s=Power Off}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_recovery" var2="1"/> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@rb_recovery_btn=Recovery}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=recovery</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot_s= Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_reboot_bootloader" var2="1"/> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@rb_bootloader_btn=Bootloader}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=bootloader</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot_s= Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_download_mode" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@rb_download_btn=Download}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=reboot</action> + <action function="set">tw_reboot_param=download</action> + <action function="set">tw_has_action2=0</action> + <action function="set">tw_text1={@no_os1=No OS Installed! Are you}</action> + <action function="set">tw_text2={@no_osrb=sure you wish to reboot?}</action> + <action function="set">tw_action_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="set">tw_slider_text={@swipe_reboot_s= Reboot}</action> + <action function="page">rebootcheck</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main</action> + </action> + </page> + + <page name="rebootapp"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@reboot_hdr=Reboot} > {@reboot_install_app_hdr=Install TWRP App?}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@reboot_install_app1=Would you like to install the Official TWRP App?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@reboot_install_app2=The app can check for new TWRP versions.}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row3_y%"/> + <text>{@reboot_install_app_prompt_install=Prompt to install TWRP app if not installed}</text> + <data variable="tw_app_prompt"/> + </checkbox> + + <checkbox> + <condition var1="tw_mount_system_ro" var2="0"/> + <placement x="%indent%" y="%row5_y%"/> + <text>{@reboot_install_app_system=Install as a System App}</text> + <data variable="tw_app_install_system"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%indent%" y="%row7_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="reboot">%tw_reboot_param%</action> + </button> + + <slider> + <text>{@swipe_su_install= Install}</text> + <actions> + <action function="set">tw_back=reboot</action> + <action function="set">tw_action=installapp</action> + <action function="set">tw_action_text1={@reboot_installing_app=Installing App...}</action> + <action function="set">tw_action_text2=</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=reboot</action> + <action function="set">tw_action2_param=%tw_reboot_param%</action> + <action function="set">tw_complete_text1={@rebooting=Rebooting...}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_app_install_status=0</action> + <action function="page">reboot</action> + </actions> + </action> + </page> + + <page name="system_readonly"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@sys_ro_hdr=Unmodified System Partition}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@sys_ro_keep=Keep System Read only?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@sys_rop1=TWRP can leave your system partition unmodified}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>{@sys_rop2=to make it easier for you to take official updates.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@sys_rop3=TWRP will be unable to prevent the stock ROM from}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@sys_rop4=replacing TWRP and will not offer to root your device.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@sys_rop5=Installing zips or performing adb operations may still}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row7_y%" placement="5"/> + <text>{@sys_rop6=modify the system partition.}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row8a_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="page">settings_language</action> + </button> + + <checkbox> + <condition var1="tw_is_encrypted" var2="0"/> + <placement x="%indent%" y="%row11_y%"/> + <text>{@sys_ro_never_show_chk=Never show this screen during boot again}</text> + <data variable="tw_never_show_system_ro_page"/> + </checkbox> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row13_y%"/> + <text>{@sys_ro_keep_ro_btn=Keep Read Only}</text> + <actions> + <action function="mountsystemtoggle">1</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row13_y%"/> + <text>{@swipe_allow_mod_s=Allow Modifications}</text> + <actions> + <action function="mountsystemtoggle">0</action> + <action function="set">tw_page_done=1</action> + <action function="page">%tw_back%</action> + </actions> + </button> + </page> + + <page name="settings"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings}</text> + </text> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@settings_gen_btn=General}</text> + <action function="page">settings_general</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@settings_tz_btn=Time Zone}</text> + <action function="page">settings_timezone</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@settings_screen_btn=Screen}</text> + <action function="page">settings_screen</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@settings_vibration_btn=Vibration}</text> + <action function="page">settings_vibration</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@settings_language_btn=Language}</text> + <action function="page">settings_language</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_reset"/> + <action function="restoredefaultsettings"/> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main3</action> + </action> + </page> + + <page name="settings_general"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@settings_gen_s_hdr=General}</text> + </text> + + <listbox style="scrolllist"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%listbox_settings_height%"/> + <listitem name="{@zip_sig_chk=Zip signature verification}"> + <data variable="tw_signed_zip_verify"/> + </listitem> + <listitem name="{@install_reboot_chk=Reboot after installation is complete}"> + <data variable="tw_install_reboot"/> + </listitem> + <listitem name="{@use_rmrf_chk=Use rm -rf instead of formatting}"> + <data variable="tw_rm_rf"/> + </listitem> + <listitem name="{@disable_backup_space_chk=Disable free space check before backup}"> + <data variable="tw_disable_free_space"/> + </listitem> + <listitem name="{@skip_md5_backup_chk=Skip MD5 generation during backup}"> + <data variable="tw_skip_md5_generate"/> + </listitem> + <listitem name="{@restore_enable_md5_chk=Enable MD5 verification of backup files}"> + <data variable="tw_skip_md5_check"/> + </listitem> + <listitem name="{@use24clock_chk=Use 24-hour clock}"> + <data variable="tw_military_time"/> + </listitem> + <listitem name="{@reboot_install_app_prompt_install=Prompt to install TWRP app on every reboot}"> + <data variable="tw_app_prompt"/> + </listitem> + <listitem name="{@simact_chk=Simulate actions for theme testing}"> + <data variable="tw_simulate_actions"/> + </listitem> + <listitem name="{@simfail_chk=Simulate failure for actions}"> + <data variable="tw_simulate_fail"/> + <condition var1="tw_simulate_actions" var2="1"/> + </listitem> + </listbox> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_timezone"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@time_zone_hdr=Time Zone}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>%tw_time%</text> + </text> + + <listbox style="listbox_headerless"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%listbox_timezone_height%"/> + <data name="tw_time_zone_guisel"/> + <listitem name="{@utcm11=(UTC -11) Samoa, Midway Island}">BST11;BDT</listitem> + <listitem name="{@utcm10=(UTC -10) Hawaii}">HST10;HDT</listitem> + <listitem name="{@utcm9=(UTC -9) Alaska}">AST9;ADT</listitem> + <listitem name="{@utcm8=(UTC -8) Pacific Time}">PST8;PDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm7=(UTC -7) Mountain Time}">MST7;MDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm6=(UTC -6) Central Time}">CST6;CDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm5=(UTC -5) Eastern Time}">EST5;EDT,M3.2.0,M11.1.0</listitem> + <listitem name="{@utcm4=(UTC -4) Atlantic Time}">AST4;ADT</listitem> + <listitem name="{@utcm3=(UTC -3) Brazil, Buenos Aires}">GRNLNDST3;GRNLNDDT</listitem> + <listitem name="{@utcm2=(UTC -2) Mid-Atlantic}">FALKST2;FALKDT</listitem> + <listitem name="{@utcm1=(UTC -1) Azores, Cape Verde}">AZOREST1;AZOREDT</listitem> + <listitem name="{@utc0=(UTC 0) London, Dublin, Lisbon}">GMT0;BST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp1=(UTC +1) Berlin, Brussels, Paris}">CET-1;CEST,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp2=(UTC +2) Athens, Istanbul, South Africa}">WET-2;WET,M3.5.0,M10.5.0</listitem> + <listitem name="{@utcp3=(UTC +3) Moscow, Baghdad}">SAUST-3;SAUDT</listitem> + <listitem name="{@utcp4=(UTC +4) Abu Dhabi, Tbilisi, Muscat}">WST-4;WDT</listitem> + <listitem name="{@utcp5=(UTC +5) Yekaterinburg, Islamabad}">PAKST-5;PAKDT</listitem> + <listitem name="{@utcp6=(UTC +6) Almaty, Dhaka, Colombo}">TASHST-6;TASHDT</listitem> + <listitem name="{@utcp7=(UTC +7) Bangkok, Hanoi, Jakarta}">THAIST-7;THAIDT</listitem> + <listitem name="{@utcp8=(UTC +8) Beijing, Singapore, Hong Kong}">TAIST-8;TAIDT</listitem> + <listitem name="{@utcp9=(UTC +9) Tokyo, Seoul, Yakutsk}">JST-9;JSTDT</listitem> + <listitem name="{@utcp10=(UTC +10) Eastern Australia, Guam}">EET-10;EETDT</listitem> + <listitem name="{@utcp11=(UTC +11) Vladivostok, Solomon Islands}">MET-11;METDT</listitem> + <listitem name="{@utcp12=(UTC +12) Auckland, Wellington, Fiji}">NZST-12;NZDT</listitem> + </listbox> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <actions> + <action function="setguitimezone"/> + <action function="page">settings_timezone2</action> + </actions> + </button> + + <action> + <condition var1="tw_time_zone_guisel" op="modified"/> + <action function="setguitimezone"/> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="page">main</action> + <action function="setguitimezone"/> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="page">settings</action> + <action function="setguitimezone"/> + </actions> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="settings_timezone2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@time_zone_hdr=Time Zone}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>%tw_time%</text> + </text> + + <checkbox> + <placement x="%col1_x_left%" y="%row1_y%"/> + <font resource="font_m" color="%text_color%"/> + <text>{@use_dst_chk=Use daylight savings time (DST)}</text> + <data variable="tw_time_zone_guidst"/> + <image checked="checkbox_true" unchecked="checkbox_false"/> + </checkbox> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@sel_tz_offset=Select Offset (usually 0): %tw_time_zone_guioffset%}</text> + </text> + + <button style="main_button_quarter_width"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@tz_offset_0=0}</text> + <actions> + <action function="set">tw_time_zone_guioffset=0</action> + <action function="setguitimezone"/> + </actions> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col2_x%" y="%row6_y%"/> + <text>{@tz_offset_15=15}</text> + <actions> + <action function="set">tw_time_zone_guioffset=15</action> + <action function="setguitimezone"/> + </actions> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col3_x%" y="%row6_y%"/> + <text>{@tz_offset_30=30}</text> + <actions> + <action function="set">tw_time_zone_guioffset=30</action> + <action function="setguitimezone"/> + </actions> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row6_y%"/> + <text>{@tz_offset_45=45}</text> + <actions> + <action function="set">tw_time_zone_guioffset=45</action> + <action function="setguitimezone"/> + </actions> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <actions> + <action function="setguitimezone"/> + <action function="page">settings_timezone</action> + </actions> + </button> + + <text style="text_m_accent"> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <text>{@curr_tz_s=Current Time Zone:}</text> + </text> + + <text style="text_m"> + <placement x="%btn4_col2_x%" y="%row12a_y%"/> + <text>%tw_time_zone%</text> + </text> + + <action> + <condition var1="tw_time_zone_guidst" op="modified"/> + <action function="setguitimezone"/> + </action> + + <action> + <touch key="home"/> + <actions> + <action function="setguitimezone"/> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="setguitimezone"/> + <action function="page">settings_timezone</action> + </actions> + </action> + </page> + + <page name="settings_screen"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@settings_screen_timeout_hdr=Screen Timeout}</text> + </text> + + <button style="checkbox"> + <condition var1="tw_screen_timeout_secs" op="=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <placement x="%indent%" y="%row1_y%" textplacement="6"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_false"/> + <action function="set">tw_screen_timeout_secs=60</action> + </button> + + <button style="checkbox"> + <condition var1="tw_screen_timeout_secs" op="!=" var2="0"/> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <placement x="%indent%" y="%row1_y%" textplacement="6"/> + <text>{@enable_timeout_chk=Enable screen timeout}</text> + <image resource="checkbox_true"/> + <action function="set">tw_screen_timeout_secs=0</action> + </button> + + <slidervalue> + <condition var1="tw_no_screen_timeout" op="!=" var2="1"/> + <placement x="col1_x_left" y="%row2a_y%" w="%content_width%"/> + <text>{@screen_to_slider_s=Screen timeout in seconds (0=disabled): %tw_screen_timeout_secs%}</text> + <data variable="tw_screen_timeout_secs" min="15" max="300"/> + </slidervalue> + + <text style="text_m_fail"> + <condition var1="tw_no_screen_timeout" op="=" var2="1"/> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@screen_to_na=Screen timeout setting unavailable}</text> + </text> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">settings_screen2</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_screen2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@settings_screen_bright_btn=Screen Brightness}</text> + </text> + + <slidervalue> + <condition var1="tw_has_brightnesss_file" var2="1"/> + <placement x="col1_x_left" y="%row1_y%" w="%content_width%"/> + <text>{@screen_bright_slider=Brightness: %tw_brightness_pct%%}</text> + <data variable="tw_brightness_pct" min="10" max="100"/> + <actions> + <action function="set">tw_brightness=%tw_brightness_max%</action> + <action function="compute">tw_brightness*%tw_brightness_pct%</action> + <action function="compute">tw_brightness/100</action> + <action function="setbrightness">%tw_brightness%</action> + </actions> + </slidervalue> + + <text style="text_m_fail"> + <condition var1="tw_has_brightnesss_file" var2="0"/> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@screen_bright_na=Brightness setting unavailable}</text> + </text> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">settings_screen</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_vibration"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@vibration_hdr=Vibration} - {@button_vibration_hdr=Button Vibration}</text> + </text> + + <slidervalue> + <placement x="col1_x_left" y="%row1_y%" w="%content_width%"/> + <text>{@button_vibration=Button Vibration:}</text> + <data variable="tw_button_vibrate" min="0" max="300"/> + </slidervalue> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">settings_vibration2</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_vibration2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@vibration_hdr=Vibration} - {@kb_vibration_hdr=Keyboard Vibration}</text> + </text> + + <slidervalue> + <placement x="col1_x_left" y="%row1_y%" w="%content_width%"/> + <text>{@kb_vibration=Keyboard Vibration:}</text> + <data variable="tw_keyboard_vibrate" min="0" max="300"/> + </slidervalue> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">settings_vibration</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">settings_vibration3</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_vibration3"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@vibration_hdr=Vibration} - {@act_vibration_hdr=Action Vibration}</text> + </text> + + <slidervalue> + <placement x="col1_x_left" y="%row1_y%" w="%content_width%"/> + <text>{@act_vibration=Action Vibration:}</text> + <data variable="tw_action_vibrate" min="0" max="500"/> + </slidervalue> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">settings_vibration2</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">settings</action> + </action> + </page> + + <page name="settings_language"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@settings_hdr=Settings} > {@language_hdr=Language} - %tw_language_display%</text> + </text> + + <listbox style="scrolllist"> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%fileselector_filemanager_height%"/> + <icon selected="radio_true" unselected="radio_false" /> + <data name="tw_language" /> + </listbox> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept_transp"/> + <action function="setlanguage"></action> + </button> + + <action> + <touch key="home" /> + <action function="page">main</action> + </action> + + <action> + <touch key="back" /> + <action function="page">settings</action> + </action> + </page> + + <page name="advanced"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced}</text> + </text> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@terminal_btn=Terminal}</text> + <action function="page">terminalcommand</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_data_media" var2="1"/> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@fix_context_btn=Fix Contexts}</text> + <action function="page">fixcontexts</action> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@reload_theme_btn=Reload Theme}</text> + <action function="reload"/> + </button> + + <button style="main_button"> + <condition var1="tw_allow_partition_sdcard" var2="1"/> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@part_sd_s_btn=SD Card}</text> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcardsel</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_show_dumlock" var2="1"/> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@dumlock_btn=HTC Dumlock}</text> + <action function="page">htcdumlock</action> + </button> + + <button style="main_button"> + <condition var1="tw_has_injecttwrp" var2="1"/> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>{@inject_twrp_btn=Inject TWRP}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=reinjecttwrp</action> + <action function="set">tw_text1={@inject_twrp_confirm=Re-Inject TWRP?}</action> + <action function="set">tw_action_text1={@injecting_twrp=Re-Injecting TWRP...}</action> + <action function="set">tw_complete_text1={@inject_twrp_complete=TWRP Injection Complete}</action> + <action function="set">tw_slider_text={@swipe_confirm= Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main3</action> + </action> + </page> + + <page name="partsdcardsel"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@part_sd_hdr=Partition SD Card}</text> + </text> + + <partitionlist style="partitionlist_headerless_rb"> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <text style="text_m_fail"> + <condition var1="partitionlisterror" var2="1"/> + <placement x="%center_x%" y="%row9_y%" placement="5"/> + <text>{@invalid_partsd_sel=You must select a removable device}</text> + </text> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_refresh"/> + <action function="refreshsizes"/> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <actions> + <action function="getpartitiondetails">tw_storage_path</action> + <action function="page">partsdcardcheck</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="partsdcardcheck"> + <action> + <condition var1="tw_partition_removable" op="=" var2="1"/> + <actions> + <action function="set">partitionlisterror=0</action> + <action function="page">partsdcard</action> + </actions> + </action> + + <action> + <condition var1="tw_partition_removable" op="!=" var2="1"/> + <actions> + <action function="set">partitionlisterror=1</action> + <action function="page">partsdcardsel</action> + </actions> + </action> + </page> + + <page name="partsdcard"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@part_sd_ext_sz=EXT Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6a_y%" placement="5"/> + <text>%tw_sdext_size%</text> + </text> + + <button style="main_button_quarter_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_sdext_size-256</action> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row6_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_sdext_size+256</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">partsdcard2</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">partsdcardsel</action> + </action> + </page> + + <page name="partsdcard2"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@part_sd_swap_sz=Swap Size:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6a_y%" placement="5"/> + <text>%tw_swap_size%</text> + </text> + + <button style="main_button_quarter_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@part_sd_m=-}</text> + <action function="addsubtract">tw_swap_size-64</action> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row6_y%"/> + <text>{@part_sd_p=+}</text> + <action function="addsubtract">tw_swap_size+64</action> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">partsdcard</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">partsdcard3</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="partsdcard3"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@file_system=File System:}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6a_y%" placement="5"/> + <text>%tw_sdpart_file_system%</text> + </text> + + <button style="main_button_quarter_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>EXT3</text> + <action function="set">tw_sdpart_file_system=ext3</action> + </button> + + <button style="main_button_quarter_width"> + <placement x="%btn4_col4_x%" y="%row6_y%"/> + <text>EXT4</text> + <action function="set">tw_sdpart_file_system=ext4</action> + </button> + + <button> + <placement x="%col1_x_left%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_left"/> + <action function="page">partsdcard2</action> + </button> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_arrow_right"/> + <action function="page">partsdcard_confirm</action> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="partsdcard_confirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@part_sd_hdr=Partition SD Card}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row1_y%" placement="5"/> + <text>{@part_sd_lose=You will lose all files on your SD card!}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@part_sd_undo=This action cannot be undone!}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@part_sd_ext_sz=EXT Size:} %tw_sdext_size%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>{@part_sd_swap_sz=Swap Size:} %tw_swap_size%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@file_system=File System:} %tw_sdpart_file_system%</text> + </text> + + <slider> + <text>{@swipe_part_sd_s=Partition}</text> + <action function="page">partsdcardaction</action> + <actions> + <action function="set">tw_back=partsdcard</action> + <action function="set">tw_action=partitionsd</action> + <action function="set">tw_has_action2=1</action> + <action function="set">tw_action2=set</action> + <action function="set">tw_action2_param=tw_zip_location=/sdcard</action> + <action function="set">tw_action_text1={@partitioning_sd=Partitioning SD Card...}</action> + <action function="set">tw_action_text2={@partitioning_sd2=This will take a few minutes.}</action> + <action function="set">tw_complete_text1={@part_sd_complete=Partitioning Complete}</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="htcdumlock"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@dumlock_hdr=HTC Dumlock}</text> + </text> + + <button style="main_button_full_width"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@dumlock_restore_btn=Restore Original Boot}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockrestoreboot</action> + <action function="set">tw_text1={@dumlock_restore_confirm=Restore original boot image?}</action> + <action function="set">tw_action_text1={@dumlock_restoring=Restoring Original Boot...}</action> + <action function="set">tw_complete_text1={@dumlock_restore_complete=Restore Original Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_confirm= Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_full_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@dumlock_reflash_btn=Reflash Recovery}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=htcdumlockreflashrecovery</action> + <action function="set">tw_text1={@dumlock_reflash_confirm=Reflash recovery to boot?}</action> + <action function="set">tw_action_text1={@dumlock_reflashing=Flashing recovery to boot...}</action> + <action function="set">tw_complete_text1={@dumlock_reflash_complete=Recovery Flash to Boot Complete}</action> + <action function="set">tw_slider_text={@swipe_confirm= Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <button style="main_button_full_width"> + <placement x="%indent%" y="%row11_y%"/> + <text>{@dumlock_install_btn=Install HTC Dumlock}</text> + <actions> + <action function="set">tw_back=htcdumlock</action> + <action function="set">tw_action=installhtcdumlock</action> + <action function="set">tw_action_text1={@dumlock_installing=Installing HTC Dumlock...}</action> + <action function="set">tw_complete_text1={@dumlock_install_complete=HTC Dumlock Install Complete}</action> + <action function="set">tw_slider_text={@swipe_to_confirm=Swipe to Confirm}</action> + <action function="set">tw_slider_text={@swipe_confirm= Confirm}</action> + <action function="page">confirm_action</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="lock"> + <background color="%semi_transparent%"/> + + <image> + <image resource="unlock_icon"/> + <placement x="%center_x%" y="%row6_y%" placement="4"/> + </image> + + <slider> + <text>{@swipe_unlock= Unlock}</text> + <action function="overlay"/> + </slider> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + </page> + + <page name="filemanagerlist"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@fm_sel_file=Select a File or Folder}</text> + </text> + + <fileselector> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location1%</text> + <filter folders="1" files="1"/> + <path name="tw_file_location1" default="/"/> + <data name="tw_filename1"/> + <selection name="tw_selection1"/> + </fileselector> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_folder"/> + <actions> + <action function="set">tw_filename1=tw_file_location1</action> + <action function="set">tw_fm_isfolder=1</action> + <action function="set">tw_fm_type={@fm_type_folder=Folder}</action> + <action function="page">filemanageroptions</action> + </actions> + </button> + + <action> + <actions> + <action function="set">tw_fm_type={@fm_type_file=File}</action> + <action function="set">tw_fm_isfolder=0</action> + </actions> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">main3</action> + </action> + + <action> + <condition var1="tw_filename1" op="modified"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanageroptions"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_fm_type% > %tw_filename1%</text> + </text> + + <button style="main_button"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@fm_copy_btn=Copy}</text> + <actions> + <action function="set">tw_filemanager_command=cp</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@fm_copy_btn=Copy}</text> + <actions> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && cp -R</action> + <action function="set">tw_fm_text1={@fm_copying=Copying}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row1_y%"/> + <text>{@fm_move_btn=Move}</text> + <actions> + <action function="set">tw_filemanager_command=mv</action> + <action function="set">tw_fm_text1={@fm_moving=Moving}</action> + <action function="page">choosedestinationfolder</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row6_y%"/> + <text>{@fm_chmod755_btn=chmod 755}</text> + <actions> + <action function="set">tw_filemanager_command=chmod 755</action> + <action function="set">tw_fm_text1={@fm_chmod755ing=chmod 755}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%col1_x_right%" y="%row6_y%"/> + <text>{@fm_chmod_btn=chmod}</text> + <actions> + <action function="set">tw_filemanager_rename=0000</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerchmod</action> + </actions> + </button> + + <button style="main_button"> + <placement x="%col1_x_left%" y="%row11_y%"/> + <text>{@fm_delete_btn=Delete}</text> + <actions> + <action function="set">tw_filemanager_command=rm -rf</action> + <action function="set">tw_fm_text1={@fm_deleting=Deleting}</action> + <action function="set">tw_fm_text2=</action> + <action function="set">tw_fm_text3=</action> + <action function="set">tw_include_text3=0</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_fm_isfolder" var2="0"/> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>{@fm_rename_btn=Rename}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=mv</action> + <action function="page">filemanagerrenamefile</action> + </actions> + </button> + + <button style="main_button"> + <condition var1="tw_fm_isfolder" var2="1"/> + <placement x="%col1_x_right%" y="%row11_y%"/> + <text>{@fm_rename_btn=Rename}</text> + <actions> + <action function="set">tw_filemanager_rename=tw_selection1</action> + <action function="set">tw_fm_text1={@fm_renaming=Renaming}</action> + <action function="set">tw_filemanager_command=cd "%tw_file_location1%" && cd .. && mv</action> + <action function="page">filemanagerrenamefolder</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanagerlist</action> + </action> + </page> + + <page name="choosedestinationfolder"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@fm_sel_dest=Select Destination Folder}</text> + </text> + + <fileselector> + <placement x="%col1_x_left%" y="%row2_header_y%" w="%content_width%" h="%fileselector_filemanager_height%"/> + <text>%tw_file_location2%</text> + <filter folders="1" files="0"/> + <path name="tw_file_location2" default="/"/> + <data name="tw_filename2"/> + <selection name="tw_selection2"/> + </fileselector> + + <button> + <placement x="%btn4_col4_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_folder"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_file_location2%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </button> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefile"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3="%tw_file_location1%/%tw_filemanager_rename%"</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_line_width%" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerrenamefolder"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@fm_rename_hdr=Rename} %tw_fm_type%</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@name=Name:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="1" maxlen="128"/> + <actions> + <action function="set">tw_fm_text2=to</action> + <action function="set">tw_fm_text3=%tw_filemanager_rename%</action> + <action function="set">tw_include_text3=1</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerchmod"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@fm_set_perms_hdr=Set Permissions}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@fm_perms=Permissions:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_filemanager_rename%</text> + <data name="tw_filemanager_rename"/> + <restrict minlen="3" maxlen="4" allow="0123456789"/> + <actions> + <action function="set">tw_filemanager_command=chmod %tw_filemanager_rename%</action> + <action function="set">tw_fm_text1=chmod %tw_filemanager_rename%</action> + <action function="set">tw_back=filemanageroptions</action> + <action function="page">filemanagerconfirm</action> + </actions> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row4_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <action function="page">filemanageroptions</action> + </button> + + <template name="keyboardtemplate"/> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">filemanageroptions</action> + </action> + </page> + + <page name="filemanagerconfirm"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > {@confirm_action=Confirm Action}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>%tw_fm_text1%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row3_y%" placement="5"/> + <text>%tw_filename1%</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>%tw_fm_text2%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row6_y%" placement="5"/> + <text>%tw_fm_text3%</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row8_y%" placement="5"/> + <text>{@back_cancel=Press back button to cancel.}</text> + </text> + + <slider> + <text>{@swipe_confirm= Confirm}</text> + <action function="page">filemanageraction</action> + </slider> + + <action> + <touch key="back"/> + <action function="page">%tw_back%</action> + </action> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + </page> + + <page name="filemanageraction"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@fm_hdr=File Manager} > %tw_fm_text1%</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" var2="0"/> + </conditions> + <actions> + <action function="set">tw_back=filemanagerlist</action> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_complete_text1={@fm_complete=File Operation Complete}</action> + <action function="page">action_complete</action> + </actions> + </action> + + <action> + <condition var1="tw_include_text3" var2="0"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%"</action> + </action> + + <action> + <condition var1="tw_include_text3" var2="1"/> + <action function="cmd">%tw_filemanager_command% "%tw_filename1%" "%tw_fm_text3%"</action> + </action> + </page> + + <page name="decrypt"> + <template name="page"/> + + <template name="statusbar"/> + + <action> + <condition var1="tw_crypto_pwtype" var2="2"/> + <action function="page">decrypt_pattern</action> + </action> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > {@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <placement x="%col1_x_left%" y="%row1_y%"/> + <text>{@decrypt_data_enter_pass=Enter Password:}</text> + </text> + + <input> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/> + <text>%tw_crypto_display%</text> + <data name="tw_crypto_password" mask="*" maskvariable="tw_crypto_display"/> + <restrict minlen="1" maxlen="254"/> + <action function="page">trydecrypt</action> + </input> + + <fill color="%accent_color%"> + <placement x="%col1_x_left%" y="row3_input_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="row3_input_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%col1_x_left%" y="%row3_input_y%"/> + <text>{@decrypt_data_failed=Password failed, please try again!}</text> + </text> + + <button style="main_button_half_height"> + <placement x="%col1_x_left%" y="%row4_y%"/> + <text>{@sel_lang_btn=Select Language}</text> + <action function="page">settings_language</action> + </button> + + <button style="main_button_half_height"> + <placement x="%col1_x_right%" y="%row4_y%"/> + <text>{@cancel_btn=Cancel}</text> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + + <template name="keyboardtemplate"/> + </page> + + <page name="decrypt_pattern"> + <template name="page"/> + + <template name="statusbar"/> + + <action> + <action function="set">tw_gui_pattern_grid_size=3</action> + </action> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > {@decrypt_data_hdr=Decrypt Data}</text> + </text> + + <text style="text_m_accent"> + <condition var1="tw_password_fail" op="!=" var2="1"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@decrypt_data_enter_pattern=Enter Pattern.}</text> + </text> + + <text style="text_m_fail"> + <condition var1="tw_password_fail" var2="1"/> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@decrypt_data_failed_pattern=Pattern failed, please try again!}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row10_y%" placement="5"/> + <text>{@back_cancel=Press back to cancel.}</text> + </text> + + <patternpassword> + <placement x="%pattern_x%" y="%row2_y%" w="%pattern_size%" h="%pattern_size%"/> + <dot color="%fileselector_linecolor%" activecolor="%accent_color%" radius="%pattern_dot_dia%"/> + <line color="%fileselector_linecolor%" width="%pattern_line_w%"/> + <data name="tw_crypto_password"/> + <action function="page">trydecrypt</action> + </patternpassword> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="3"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_less"/> + <action function="set">tw_gui_pattern_grid_size=3</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="4"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_less"/> + <action function="set">tw_gui_pattern_grid_size=3</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="5"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_less"/> + <action function="set">tw_gui_pattern_grid_size=4</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="6"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_less"/> + <action function="set">tw_gui_pattern_grid_size=5</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="3"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_more"/> + <action function="set">tw_gui_pattern_grid_size=4</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="4"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_more"/> + <action function="set">tw_gui_pattern_grid_size=5</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="5"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_more"/> + <action function="set">tw_gui_pattern_grid_size=6</action> + </button> + + <button> + <condition var1="tw_gui_pattern_grid_size" var2="6"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="grid_more"/> + <action function="set">tw_gui_pattern_grid_size=6</action> + </button> + </page> + + <page name="trydecrypt"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@mount_hdr=Mount} > {@decrypt_data_trying=Trying Decryption}</text> + </text> + + <template name="console"/> + + <template name="progress_bar"/> + + <action> + <action function="decrypt"/> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="!=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_password_fail=1</action> + <action function="page">decrypt</action> + </actions> + </action> + + <action> + <conditions> + <condition var1="tw_operation_state" var2="1"/> + <condition var1="tw_operation_status" op="=" var2="0"/> + </conditions> + <actions> + <action function="set">tw_page_done=1</action> + <action function="page">main</action> + </actions> + </action> + </page> + + <page name="terminalcommand"> + <terminal> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="0" w="%screen_width%" h="%console_terminal_s_height%"/> + </terminal> + + <terminal> + <condition var1="tw_hide_kb" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%console_terminal_l_height%"/> + </terminal> + + <template name="keyboardterminaltemplate"/> + + <template name="keyboardtemplate"/> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%" /> + </fill> + + <button> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="back" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">back</action> + </actions> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="home" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="key">home</action> + </actions> + </button> + + <button> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_hide" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=1</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <button> + <condition var1="tw_hide_kb" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4" /> + <image resource="kb_show" /> + <condition var1="tw_busy" var2="0" /> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">terminalcommand</action> + </actions> + </button> + + <action> + <touch key="home"/> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">main</action> + </actions> + </action> + + <action> + <touch key="back"/> + <actions> + <action function="set">tw_hide_kb=0</action> + <action function="page">advanced</action> + </actions> + </action> + + <action> + <touch key="power+voldown" /> + <action function="screenshot" /> + </action> + </page> + + <page name="sideload"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@install_hdr=Install} > {@adb_sideload_hdr=ADB Sideload}</text> + </text> + + <text style="text_m_accent"> + <placement x="%indent%" y="%row1_y%"/> + <text>{@options=Options:}</text> + </text> + + <checkbox> + <placement x="%indent%" y="%row2_y%"/> + <text>{@sideload_wipe_dalvik_chk=Wipe Dalvik Cache}</text> + <data variable="tw_wipe_dalvik"/> + </checkbox> + + <checkbox> + <placement x="%indent%" y="%row4a_y%"/> + <text>{@sideload_wipe_cache_chk=Wipe Cache}</text> + <data variable="tw_wipe_cache"/> + </checkbox> + + <slider> + <text>{@swipe_sideload= Start}</text> + <actions> + <action function="set">tw_back=install_type</action> + <action function="set">tw_action=adbsideload</action> + <action function="set">tw_action_text1={@sideload_confirm=ADB Sideload}</action> + <action function="set">tw_action_text2={@sideload_usage=Usage: adb sideload filename.zip}</action> + <action function="set">tw_complete_text1={@sideload_complete=ADB Sideload Complete}</action> + <action function="set">tw_has_cancel=1</action> + <action function="set">tw_show_reboot=1</action> + <action function="set">tw_cancel_action=adbsideloadcancel</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">install_type</action> + </action> + </page> + + <page name="fixcontexts"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@advanced_hdr=Advanced} > {@fix_contexts_hdr=Fix Contexts}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@fix_contexts_note1=Note: Fixing contexts is rarely needed.}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row6a_y%" placement="5"/> + <text>{@fix_contexts_note2=Fixing SELinux Contexts may cause}</text> + </text> + + <text style="text_m_fail"> + <placement x="%center_x%" y="%row7a_y%" placement="5"/> + <text>{@fix_contexts_note3=your device to not boot properly.}</text> + </text> + + <slider> + <text>{@swipe_fix_contexts= Fix Contexts}</text> + <actions> + <action function="set">tw_back=advanced</action> + <action function="set">tw_action=fixcontexts</action> + <action function="set">tw_action_text1={@fixing_contexts=Fixing Contexts...}</action> + <action function="set">tw_complete_text1={@fix_contexts_complete=Fix Contexts Complete}</action> + <action function="set">tw_slider_text={@swipe_confirm= Confirm}</action> + <action function="set">tw_show_reboot=1</action> + <action function="page">action_page</action> + </actions> + </slider> + + <action> + <touch key="home"/> + <action function="page">main</action> + </action> + + <action> + <touch key="back"/> + <action function="page">advanced</action> + </action> + </page> + + <page name="installsu"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>{@reboot_hdr=Reboot} > {@su_hdr=SuperSU Check}</text> + </text> + + <text style="text_m_accent"> + <placement x="%center_x%" y="%row2_y%" placement="5"/> + <text>{@su_note1=Your device does not appear to be rooted.}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row4_y%" placement="5"/> + <text>{@su_note2=Install SuperSU now?}</text> + </text> + + <text style="text_m"> + <placement x="%center_x%" y="%row5_y%" placement="5"/> + <text>{@su_note3=This will root your device.}</text> + </text> + + <button style="main_button_full_width"> + <placement x="%indent%" y="%row6_y%"/> + <text>{@su_cancel=Do not Install}</text> + <action function="set">tw_page_done=1</action> + </button> + + <slider> + <text>{@swipe_su_install= Install}</text> + <actions> + <action function="set">tw_action=installsu</action> + <action function="set">tw_action_text1={@su_installing=Installing SuperSU}</action> + <action function="set">tw_action_text2=</action> + <action function="page">singleaction_page</action> + </actions> + </slider> + </page> + + <page name="slideout"> + <fill color="%background_color%"> + <placement x="0" y="%row2_header_y%" w="%screen_width%" h="%slideout_bg_height%"/> + </fill> + + <console> + <placement x="%indent%" y="%row1_y%" w="%content_width%" h="%slideout_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row1_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row15a_y" w="%content_width%" h="input_line_width"/> + </fill> + + <button> + <fill color="%transparent%"/> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + <action function="overlay"/> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + + <page name="select_storage"> + <template name="page"/> + + <template name="statusbar"/> + + <text style="text_m"> + <placement x="%col1_x_left%" y="%row1_header_y%"/> + <text>%tw_storagetext%</text> + </text> + + <partitionlist style="partitionlist_headerless_rb"> + <data name="tw_storage_path"/> + <listtype name="storage"/> + </partitionlist> + + <button> + <placement x="%btn4_col2_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_refresh"/> + <actions> + <action function="refreshsizes"/> + <action function="page">select_storage</action> + </actions> + </button> + + <button> + <placement x="%btn4_col3_x%" y="%row11_y%"/> + <highlight color="%highlight_color%"/> + <image resource="q_btn_accept"/> + <actions> + <action function="set">tw_clear_destination=%tw_back%</action> + <action function="page">clear_vars</action> + </actions> + </button> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </page> + </pages> +</recovery> diff --git a/gui/theme/extra-languages/fonts/DroidSansFallback.ttf b/gui/theme/extra-languages/fonts/DroidSansFallback.ttf Binary files differnew file mode 100644 index 000000000..ba9d76f0c --- /dev/null +++ b/gui/theme/extra-languages/fonts/DroidSansFallback.ttf diff --git a/gui/theme/extra-languages/fonts/NotoSansCJKjp-Regular.ttf b/gui/theme/extra-languages/fonts/NotoSansCJKjp-Regular.ttf Binary files differnew file mode 100644 index 000000000..bb71b6352 --- /dev/null +++ b/gui/theme/extra-languages/fonts/NotoSansCJKjp-Regular.ttf diff --git a/gui/theme/extra-languages/fonts/OFL.txt b/gui/theme/extra-languages/fonts/OFL.txt new file mode 100644 index 000000000..b6d942550 --- /dev/null +++ b/gui/theme/extra-languages/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2011, Cyreal (www.cyreal.org),
+with Reserved Font Name "Junge".
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/gui/theme/extra-languages/languages/ja.xml b/gui/theme/extra-languages/languages/ja.xml new file mode 100644 index 000000000..552665e96 --- /dev/null +++ b/gui/theme/extra-languages/languages/ja.xml @@ -0,0 +1,667 @@ +<?xml version="1.0" encoding="utf-8"?> +<language> + <display>Japanese</display> + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource filename="NotoSansCJKjp-Regular.ttf" name="font_l" scale="80" type="fontoverride"/> + <resource filename="NotoSansCJKjp-Regular.ttf" name="font_m" scale="85" type="fontoverride"/> + <resource filename="NotoSansCJKjp-Regular.ttf" name="font_s" scale="90" type="fontoverride"/> + <resource filename="NotoSansCJKjp-Regular.ttf" name="fixed" scale="90" type="fontoverride"/> + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">Systemイメージ</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendorイメージ</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="sdcard">SDカード</string> + <string name="internal">内部ストレージ</string> + <string name="microsd">microSD カード</string> + <string name="usbotg">USB OTG</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted Storage</string> + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">CPU: %tw_cpu_temp% °C</string> + <string name="battery_pct">バッテリー: %tw_battery%</string> + <string name="sort_by_name">名前順で並び替え</string> + <string name="sort_by_date">日付順で並び替え</string> + <string name="sort_by_size">サイズ順で並び替え</string> + <string name="sort_by_name_only">名前</string> + <string name="sort_by_date_only">日付</string> + <string name="sort_by_size_only">サイズ</string> + <string name="tab_general">基本</string> + <string name="tab_options">オプション</string> + <string name="tab_backup">バックアップ</string> + <string name="tab_time_zone">タイムゾーン</string> + <string name="tab_screen">画面</string> + <string name="tab_vibration">バイブ</string> + <string name="tab_language">言語</string> + <string name="install_btn">インストール</string> + <string name="wipe_btn">消去</string> + <string name="backup_btn">バックアップ</string> + <string name="restore_btn">リストア</string> + <string name="mount_btn">マウント</string> + <string name="settings_btn">設定</string> + <string name="advanced_btn">高度な機能</string> + <string name="reboot_btn">再起動</string> + <string name="files_btn">ファイル</string> + <string name="copy_log_btn">ログのコピー</string> + <string name="select_type_hdr">形式の選択</string> + <string name="install_zip_hdr">ZIPのインストール</string> + <string name="install_zip_btn">ZIPのインストール</string> + <string name="install_image_hdr">イメージのインストール</string> + <string name="install_image_btn">イメージのインストール</string> + <string name="install_select_file_hdr">ファイルの選択</string> + <string name="file_selector_folders_hdr">フォルダ</string> + <string name="select_file_from_storage">%tw_storage_display_name% (%tw_storage_free_size% MB) からファイルを選択</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">インストール</string> + <string name="select_storage_hdr">ストレージの選択</string> + <string name="select_storage_btn">ストレージの選択</string> + <string name="queue_hdr">キュー</string> + <string name="zip_queue_count">%tw_zip_queue_count% / 10ファイルキューに追加済み</string> + <string name="zip_queue_count_s">ファイル %tw_zip_queue_count% / 10:</string> + <string name="zip_warn1">この操作では互換性のないソフトウェアを</string> + <string name="zip_warn2">インストールして文鎮化する可能性もあります。</string> + <string name="zip_back_cancel">バックキーで ZIP の追加をキャンセルします。</string> + <string name="zip_back_clear">バックキーでキューを消去します。</string> + <string name="folder">フォルダ:</string> + <string name="file">ファイル:</string> + <string name="zip_sig_chk">ZIPの署名確認</string> + <string name="inject_twrp_chk">インストール後にTWRPを組み込む</string> + <string name="install_reboot_chk">インストール後に再起動する</string> + <string name="options_hdr">オプション</string> + <string name="confirm_flash_hdr">書き込みの確認</string> + <string name="zip_queue">キュー:</string> + <string name="options">オプション:</string> + <string name="swipe_confirm"> 確認</string> + <string name="zip_add_btn">ZIPを追加する</string> + <string name="zip_clear_btn">ZIPキューを消去する</string> + <string name="install_zip_count_hdr">ZIP %tw_zip_index% / %tw_zip_queue_count% のインストール</string> + <string name="installing_zip_xml">ZIP のインストール中: %tw_file%</string> + <string name="failed">失敗</string> + <string name="successful">成功</string> + <string name="install_failed">インストールに失敗しました</string> + <string name="install_successful">インストールしました</string> + <string name="wipe_cache_dalvik_btn">Cache/dalvik の消去</string> + <string name="reboot_system_btn">再起動</string> + <string name="install_sel_target">ターゲットパーティションの選択</string> + <string name="flash_image_select">イメージを書き込むパーティションの選択:</string> + <string name="target_partition">ターゲットパーティション:</string> + <string name="flashing_image">イメージの書き込み中...</string> + <string name="image_flashed">イメージを書き込みました</string> + <string name="wipe_cache_dalvik_confirm">Cache & Dalvik を消去しますか?</string> + <string name="wiping_cache_dalvik">Cache & Dalvik を消去中...</string> + <string name="wipe_cache_dalvik_complete">Cache & Dalvik を消去しました</string> + <string name="swipe_wipe">スワイプで消去</string> + <string name="swipe_wipe_s"> 消去</string> + <string name="no_os1">OS が見つかりません!</string> + <string name="no_osrb">本当に再起動しますか?</string> + <string name="no_ospo">本当に電源を切りますか?</string> + <string name="rebooting">再起動中...</string> + <string name="swipe_reboot">スワイプで再起動</string> + <string name="swipe_reboot_s"> 再起動</string> + <string name="swipe_flash">スワイプで書き込みの確認</string> + <string name="confirm_action">アクションの確認</string> + <string name="back_cancel">バックボタンでキャンセルします。</string> + <string name="cancel_btn">キャンセル</string> + <string name="wipe_hdr">消去</string> + <string name="factory_reset_hdr">データの初期化</string> + <string name="factory_reset_btn">データの初期化</string> + <string name="factory_reset1">Data、Cache、Dalvikを消去します</string> + <string name="factory_reset2">(内部ストレージは除外されます)</string> + <string name="factory_reset3">ほとんどの場合、</string> + <string name="factory_reset4">これが最適です。</string> + <string name="factory_resetting">データを初期化する...</string> + <string name="advanced_wipe_hdr">高度な消去</string> + <string name="advanced_wipe_btn">高度な消去</string> + <string name="wipe_enc_confirm">Data の暗号化を解除しますか?</string> + <string name="formatting_data">Data の初期化中...</string> + <string name="swipe_format_data">スワイプで Data を初期化する</string> + <string name="swipe_format_data_s"> Data の初期化</string> + <string name="factory_reset_complete">データの初期化が完了しました</string> + <string name="sel_part_hdr">パーティションの選択</string> + <string name="wipe_sel_confirm">選択したパーティションを消去しますか?</string> + <string name="wiping_part">パーティションを消去中...</string> + <string name="wipe_complete">消去しました</string> + <string name="sel_part_wipe">消去するパーティションの選択:</string> + <string name="invalid_part_sel">パーティションの選択が間違っています</string> + <string name="format_data_hdr">Dataの初期化</string> + <string name="format_data_btn">Dataの初期化</string> + <string name="format_data_ptr1">Dataを初期化するとすべてのアプリ、</string> + <string name="format_data_ptr2">バックアップ、写真、動画</string> + <string name="format_data_ptr3">や暗号化が内部ストレージから消去されます。</string> + <string name="format_data_adopted">Adopted Storage を含める</string> + <string name="format_data_lcp1">Data を初期化するとすべてのアプリ、バックアップ、写真、動画</string> + <string name="format_data_lcp2">や暗号化が内部ストレージから消去されます。</string> + <string name="format_data_wtc1">Data を初期化するとすべてのアプリ、</string> + <string name="format_data_wtc2">バックアップやメディアが完全に消去されます。</string> + <string name="format_data_undo">この操作は元に戻せません。</string> + <string name="format_data_complete">Data を初期化しました</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">yes と入力すると続行します。バックキーでキャンセルします。</string> + <string name="part_opt_hdr">パーティションオプション: %tw_partition_name%</string> + <string name="sel_act_hdr">アクションの選択</string> + <string name="file_sys_opt">ファイルシステムオプション</string> + <string name="partition">パーティション: %tw_partition_name%</string> + <string name="part_mount_point">マウントポイント: %tw_partition_mount_point%</string> + <string name="part_curr_fs">ファイルシステム: %tw_partition_file_system%</string> + <string name="part_present_yes">現在利用可能: はい</string> + <string name="part_present_no">現在利用可能: いいえ</string> + <string name="part_removable_yes">取り外し可能: はい</string> + <string name="part_removable_no">取り外し可能: いいえ</string> + <string name="part_size">サイズ: %tw_partition_size%MB</string> + <string name="part_used">使用中: %tw_partition_used%MB</string> + <string name="part_free">空き: %tw_partition_free%MB</string> + <string name="part_backup_size">バックアップサイズ: %tw_partition_backup_size%MB</string> + <string name="resize_btn">ファイルシステムのリサイズ</string> + <string name="resize_btn_s">リサイズ</string> + <string name="resize_confirm">%tw_partition_name% をリサイズしますか?</string> + <string name="resizing">リサイズ中...</string> + <string name="resize_complete">リサイズしました</string> + <string name="swipe_resize">スワイプでリストア</string> + <string name="swipe_resize_s"> リサイズ</string> + <string name="repair_btn">ファイルシステムの修復</string> + <string name="repair_btn_s">修復</string> + <string name="repair_confirm">%tw_partition_name% を修復しますか?</string> + <string name="repairing">修復中...</string> + <string name="repair_complete">修復しました</string> + <string name="swipe_repair">スワイプで修復</string> + <string name="swipe_repair_s"> 修復</string> + <string name="change_fs_btn">ファイルシステムの変更</string> + <string name="change_fs_btn_s">変更</string> + <string name="change_fs_for_hdr">ファイルシステムの変更: %tw_partition_name%</string> + <string name="change_fs_for_hdr_s">パーティション: %tw_partition_name% > ファイルシステムの選択</string> + <string name="change_fs_warn1">ROM やカーネルによっては一部のファイルシステムに</string> + <string name="change_fs_warn2">対応していません。注意してください!</string> + <string name="change_fs_confirm">%tw_partition_name% を変更しますか?</string> + <string name="formatting">初期化中...</string> + <string name="format_complete">初期化しました</string> + <string name="swipe_change_fs">スワイプで変更</string> + <string name="swipe_change_s"> 変更</string> + <string name="back_btn">戻る</string> + <string name="wipe_enc_btn">暗号化の消去</string> + <string name="swipe_factory_reset">スワイプでデータの初期化</string> + <string name="repair_change_btn">ファイルシステムの修復と変更</string> + <string name="storage_hdr">ストレージ: %tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">バックアップ</string> + <string name="backup_confirm_hdr">バックアップの確認</string> + <string name="encryption_tab">暗号化</string> + <string name="encryption">暗号化:</string> + <string name="name">名前:</string> + <string name="sel_part_backup">バックアップするパーティション:</string> + <string name="storage">ストレージ:</string> + <string name="enc_disabled">無効 - パスワード設定で有効化します</string> + <string name="enc_enabled">有効</string> + <string name="enable_backup_comp_chk">圧縮する</string> + <string name="skip_md5_backup_chk">バックアップ時に MD5 を生成しない</string> + <string name="disable_backup_space_chk">空き容量のチェックを無効化する</string> + <string name="refresh_sizes_btn">サイズの更新</string> + <string name="swipe_backup">スワイプでバックアップ</string> + <string name="append_date_btn">日付の追加</string> + <string name="backup_name_exists">同じ名前のバックアップが既に存在します!</string> + <string name="encrypt_backup">バックアップを暗号化しますか?</string> + <string name="enter_pass">パスワードを入力:</string> + <string name="enter_pass2">パスワードを再入力:</string> + <string name="pass_not_match">パスワードが一致しません!</string> + <string name="partitions">パーティション:</string> + <string name="disabled">無効</string> + <string name="enabled">有効</string> + <string name="backup_name_hdr">バックアップ名の設定</string> + <string name="progress">進捗:</string> + <string name="backup_complete">バックアップしました</string> + <string name="restore_hdr">リストア</string> + <string name="sel_backup_hdr">バックアップの選択</string> + <string name="restore_sel_store_hdr">%tw_storage_display_name% (%tw_storage_free_size% MB) からバックアップを選択</string> + <string name="restore_sel_pack_fs">リストアするパッケージの選択:</string> + <string name="restore_enc_backup_hdr">暗号化されたバックアップ</string> + <string name="restore_dec_fail">パスワードが間違っているので、入力し直してください!</string> + <string name="del_backup_btn">バックアップの削除</string> + <string name="del_backup_confirm">バックアップを削除しますか?</string> + <string name="del_backup_confirm2">この操作は元に戻せません!</string> + <string name="deleting_backup">バックアップの削除中...</string> + <string name="backup_deleted">バックアップを削除しました</string> + <string name="swipe_delete">スワイプで削除</string> + <string name="swipe_delete_s"> 削除</string> + <string name="restore_try_decrypt">暗号化されたバックアップ - 復号の試行中</string> + <string name="restore_try_decrypt_s">復号の試行中</string> + <string name="restore_backup_date">%tw_restore_file_date% に作成されたバックアップ</string> + <string name="restore_sel_part">リストアするパーティションの選択:</string> + <string name="restore_enable_md5_chk">バックアップファイルの MD5 検証を有効化する</string> + <string name="restore_complete">リストアしました</string> + <string name="swipe_restore">スワイプでリストア</string> + <string name="swipe_restore_s"> リストア</string> + <string name="rename_backup_hdr">バックアップの名前を変更</string> + <string name="rename_backup_confirm">バックアップの名前を変更しますか?</string> + <string name="rename_backup_confirm2">この操作は元に戻せません!</string> + <string name="renaming_backup">バックアップの名前を変更中...</string> + <string name="rename_backup_complete">バックアップの名前を変更しました</string> + <string name="swipe_to_rename">スワイプで名前の変更</string> + <string name="swipe_rename"> 名前の変更</string> + <string name="confirm_hdr">確認</string> + <string name="mount_hdr">マウント</string> + <string name="mount_sel_part">マウントするパーティションの選択:</string> + <string name="mount_sys_ro_chk"> System を読み取り専用でマウントする</string> + <string name="mount_sys_ro_s_chk">System を RO でマウント</string> + <string name="decrypt_data_btn">Data の復号</string> + <string name="disable_mtp_btn">MTP の無効化</string> + <string name="enable_mtp_btn">MTP の有効化</string> + <string name="mount_usb_storage_btn">USB ストレージのマウント</string> + <string name="usb_storage_hdr">USB ストレージ</string> + <string name="usb_stor_mnt1">USB ストレージをマウントしました</string> + <string name="usb_stor_mnt2">機器を安全に取り外すよう</string> + <string name="usb_stor_mnt3">マウント解除時は注意してください!</string> + <string name="unmount_btn">マウント解除</string> + <string name="rb_system_btn">システム</string> + <string name="rb_poweroff_btn">電源を切る</string> + <string name="rb_recovery_btn">リカバリ</string> + <string name="rb_bootloader_btn">ブートローダー</string> + <string name="rb_download_btn">ダウンロード</string> + <string name="turning_off">電源を切っています...</string> + <string name="swipe_power_off">スワイプで電源を切る</string> + <string name="swipe_power_off_s">電源を切る</string> + <string name="sys_ro_hdr">未変更の system パーティション</string> + <string name="sys_ro_keep">system を読み取り専用のままにしますか?</string> + <string name="sys_rop1">TWRP でsystemを編集しないようにして</string> + <string name="sys_rop2">公式なソフトウェア更新を適用しやすくできます。</string> + <string name="sys_rop3">TWRP は stock ROM が TWRP を取り除くのを防げず</string> + <string name="sys_rop4">root化することもできません。</string> + <string name="sys_rop5">ZIPをインストールしたりadbで操作したりすると</string> + <string name="sys_rop6">system パーティションが編集される可能性があります。</string> + <string name="sys_rol1">公式なソフトウェア更新を適用しやすくするため、TWRP は system パーティションを編集しないようにできます。</string> + <string name="sys_rol2">TWRP は stock ROM が TWRP を取り除くことを防げず、root化する事もできません。</string> + <string name="sys_rol3">ZIPのインストールや adb での操作で system が編集される可能性があります。</string> + <string name="sys_ro_never_show_chk">起動時にこの画面を二度と表示しない</string> + <string name="sys_ro_keep_ro_btn">読み取り専用のままにする</string> + <string name="swipe_allow_mod">スワイプで編集を許可</string> + <string name="swipe_allow_mod_s">編集の許可</string> + <string name="settings_hdr">設定</string> + <string name="settings_gen_hdr">基本</string> + <string name="settings_gen_s_hdr">基本</string> + <string name="settings_gen_btn">基本</string> + <string name="use_rmrf_chk">初期化に rm -rf コマンドを使う</string> + <string name="use24clock_chk">時計を24時間表示にする</string> + <string name="rev_navbar_chk">ナビバーの並びを逆にする</string> + <string name="simact_chk">テーマのテストのため動作をシミュレートする</string> + <string name="simfail_chk">シミュレートに失敗しました</string> + <string name="ctr_navbar_rdo">ナビバーのボタンを中央寄せにする</string> + <string name="lft_navbar_rdo">ナビバーのボタンを左寄せにする</string> + <string name="rht_navbar_rdo">ナビバーのボタンを右寄せにする</string> + <string name="restore_defaults_btn">初期設定に戻す</string> + <string name="settings_tz_btn">タイムゾーン</string> + <string name="settings_screen_btn">画面</string> + <string name="settings_screen_bright_btn">画面の明るさ</string> + <string name="settings_vibration_btn">バイブレーション</string> + <string name="settings_language_btn">言語</string> + <string name="time_zone_hdr">タイムゾーン</string> + <string name="sel_tz_list">タイム ゾーンの選択:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) Samoa, Midway Island</string> + <string name="utcm10">(UTC -10) Hawaii</string> + <string name="utcm9">(UTC -9) Alaska</string> + <string name="utcm8">(UTC -8) Pacific Time</string> + <string name="utcm7">(UTC -7) Mountain Time</string> + <string name="utcm6">(UTC -6) Central Time</string> + <string name="utcm5">(UTC -5) Eastern Time</string> + <string name="utcm4">(UTC -4) Atlantic Time</string> + <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string> + <string name="utcm2">(UTC -2) Mid-Atlantic</string> + <string name="utcm1">(UTC -1) Azores, Cape Verde</string> + <string name="utc0">(UTC 0) London, Dublin, Lisbon</string> + <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string> + <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string> + <string name="utcp3">(UTC +3) Moscow, Baghdad</string> + <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string> + <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string> + <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string> + <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string> + <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string> + <string name="utcp9">(UTC +9) 日本標準時</string> + <string name="utcp10">(UTC +10) Eastern Australia, Guam</string> + <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string> + <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string> + <string name="sel_tz_offset">オフセットの選択 (通常は 0): %tw_time_zone_guioffset%</string> + <string name="tz_offset_none">なし</string> + <string name="tz_offset_0">0</string> + <string name="tz_offset_15">15</string> + <string name="tz_offset_30">30</string> + <string name="tz_offset_45">45</string> + <string name="use_dst_chk">夏時間 (DST) を使用する</string> + <string name="curr_tz">現在のタイムゾーン: %tw_time_zone%</string> + <string name="curr_tz_s">現在のタイムゾーン:</string> + <string name="set_tz_btn">タイムゾーンの設定</string> + <string name="settings_screen_hdr">画面</string> + <string name="settings_screen_timeout_hdr">消灯までの時間</string> + <string name="enable_timeout_chk">画面の自動消灯を有効化する</string> + <string name="screen_to_slider">消灯までの時間 (秒):</string> + <string name="screen_to_slider_s">消灯までの時間 (秒、0=無効): %tw_screen_timeout_secs%</string> + <string name="screen_to_na">画面の自動消灯設定は利用できません</string> + <string name="screen_bright_slider">明るさ: %tw_brightness_pct%%</string> + <string name="screen_bright_na">明るさ設定は利用できません</string> + <string name="vibration_hdr">バイブレーション</string> + <string name="button_vibration_hdr">ボタンバイブ</string> + <string name="kb_vibration_hdr">キーボードバイブ</string> + <string name="act_vibration_hdr">アクションバイブ</string> + <string name="button_vibration">ボタンバイブ:</string> + <string name="kb_vibration">キーボードバイブ:</string> + <string name="act_vibration">アクションバイブ:</string> + <string name="select_language">言語の選択:</string> + <string name="sel_lang_btn">言語の選択</string> + <string name="set_language_btn">言語の設定</string> + <string name="advanced_hdr">高度な機能</string> + <string name="copy_log_confirm">ログを SD カードにコピーしますか?</string> + <string name="copying_log">ログを SD カードにコピー中...</string> + <string name="copy_log_complete">ログをコピーしました</string> + <string name="fix_context_btn">コンテキストの修正</string> + <string name="part_sd_btn">SDカードの分割</string> + <string name="part_sd_s_btn">SD カード</string> + <string name="file_manager_btn">ファイルマネージャ</string> + <string name="language_hdr">言語</string> + <string name="terminal_btn">ターミナル</string> + <string name="reload_theme_btn">テーマの再読み込み</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">TWRP の組み込み</string> + <string name="inject_twrp_confirm">TWRP を再度組み込みますか?</string> + <string name="injecting_twrp">TWRP を組み込み中...</string> + <string name="inject_twrp_complete">TWRP を組み込みました</string> + <string name="swipe_to_confirm">スワイプで確認</string> + <string name="part_sd_hdr">SDカードの分割</string> + <string name="invalid_partsd_sel">リムーバブルデバイスを選択してください</string> + <string name="part_sd_lose">SD カード上のすべてのファイルを消去します!</string> + <string name="part_sd_undo">このアクションは取り消せません!</string> + <string name="part_sd_ext_sz">EXT サイズ:</string> + <string name="part_sd_swap_sz">Swap サイズ:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">ファイルシステム:</string> + <string name="swipe_part_sd">スワイプで分割</string> + <string name="swipe_part_sd_s">分割</string> + <string name="partitioning_sd">SD カードの分割中...</string> + <string name="partitioning_sd2">完了まで数分かかります。</string> + <string name="part_sd_complete">分割しました</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">元の Boot をリストアする</string> + <string name="dumlock_restore_confirm">元の Boot イメージをリストアしますか?</string> + <string name="dumlock_restoring">元の Boot をリストア中...</string> + <string name="dumlock_restore_complete">元の Boot をリストアしました</string> + <string name="dumlock_reflash_btn">リカバリの再書き込み</string> + <string name="dumlock_reflash_confirm">boot にリカバリを再書き込みしますか?</string> + <string name="dumlock_reflashing">boot にリカバリを書き込み中...</string> + <string name="dumlock_reflash_complete">リカバリを書き込みました</string> + <string name="dumlock_install_btn">HTC Dumlock のインストール</string> + <string name="dumlock_install_confirm">ROM に HTC dumlock をインストールしますか?</string> + <string name="dumlock_installing">HTC Dumlock のインストール中...</string> + <string name="dumlock_install_complete">HTC Dumlock をインストールしました</string> + <string name="swipe_to_unlock">スワイプでロック解除</string> + <string name="swipe_unlock"> ロック解除</string> + <string name="fm_hdr">ファイルマネージャ</string> + <string name="fm_sel_file">ファイルかフォルダの選択</string> + <string name="fm_type_folder">フォルダ</string> + <string name="fm_type_file">ファイル</string> + <string name="fm_choose_act">操作の選択</string> + <string name="fm_selected">選択中の%tw_fm_type%:</string> + <string name="fm_copy_btn">コピー</string> + <string name="fm_copy_file_btn">ファイルのコピー</string> + <string name="fm_copy_folder_btn">フォルダのコピー</string> + <string name="fm_copying">コピー中</string> + <string name="fm_move_btn">移動</string> + <string name="fm_moving">移動中</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">削除</string> + <string name="fm_deleting">削除中</string> + <string name="fm_rename_btn">名前の変更</string> + <string name="fm_rename_file_btn">ファイル名の変更</string> + <string name="fm_rename_folder_btn">フォルダ名の変更</string> + <string name="fm_renaming">名前の変更中</string> + <string name="fm_sel_dest">宛先のフォルダの選択</string> + <string name="fm_sel_curr_folder">現在のフォルダの選択</string> + <string name="fm_rename_hdr">名前の変更</string> + <string name="fm_set_perms_hdr">権限の設定</string> + <string name="fm_perms">権限:</string> + <string name="fm_complete">ファイル操作を完了しました</string> + <string name="decrypt_data_hdr">Data の復号</string> + <string name="decrypt_data_enter_pass">パスワードを入力してください。</string> + <string name="decrypt_data_failed">パスワード認証失敗、入力し直してください!</string> + <string name="decrypt_data_failed_pattern">パターン認証失敗、入力し直してください!</string> + <string name="decrypt_data_enter_pattern">パターンを入力してください。</string> + <string name="decrypt_data_trying">復号の試行中</string> + <string name="term_hdr">ターミナルコマンド</string> + <string name="term_s_hdr">ターミナル</string> + <string name="term_kill_btn">キル</string> + <string name="term_sel_folder_hdr">開始時のフォルダを参照</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">Dalvik Cache の消去</string> + <string name="sideload_wipe_cache_chk">Cache の消去</string> + <string name="swipe_to_sideload">スワイプで Sideload の開始</string> + <string name="swipe_sideload"> 開始</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">使用方法: adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload が完了しました</string> + <string name="fix_contexts_hdr">コンテキストの修正</string> + <string name="fix_contexts_note1">注意:コンテキストの修正は滅多に必要ありません。</string> + <string name="fix_contexts_note2">SELinux コンテキストの修正で</string> + <string name="fix_contexts_note3">機器が起動しなくなる場合があります。</string> + <string name="swipe_to_fix_contexts">スワイプでコンテキストの修正</string> + <string name="swipe_fix_contexts"> コンテキストの修正</string> + <string name="fixing_contexts">コンテキストの修正中...</string> + <string name="fix_contexts_complete">コンテキストを修正しました</string> + <string name="reboot_hdr">再起動</string> + <string name="su_hdr">SuperSU チェック</string> + <string name="su_note1">機器がroot化されていないようです。</string> + <string name="su_note2">SuperSU をインストールしますか?</string> + <string name="su_note3">機器をroot化します。</string> + <string name="su_cancel">インストールしない</string> + <string name="swipe_su_to_install">スワイプでインストール</string> + <string name="swipe_su_install"> インストール</string> + <string name="su_installing">SuperSU のインストール中</string> + <string name="sel_storage_list">ストレージの選択</string> + <string name="ok_btn">OK</string> + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">カーネルが SELinux コンテキストの読み取りに対応していません。</string> + <string name="full_selinux">SELinux に完全に対応しています。</string> + <string name="no_selinux">SELinux に対応していません。(libselinux なし)</string> + <string name="mtp_enabled">MTP 有効</string> + <string name="mtp_crash">MTP がクラッシュしました。起動時に開始しません。</string> + <string name="decrypt_success">デフォルトのパスワードで復号しました。</string> + <string name="unable_to_decrypt">デフォルトのパスワードで復号できません。data の初期化が必要です。</string> + <string name="generating_md51">MD5 の生成中</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * MD5 の生成中...</string> + <string name="md5_created"> * MD5 を生成しました。</string> + <string name="md5_error"> * MD5 エラー!</string> + <string name="md5_compute_error"> * MD5の計算エラーが起きました。</string> + <string name="current_date">(現在の日付)</string> + <string name="auto_generate">(自動生成)</string> + <string name="unable_to_locate_partition">バックアップの計算で \'{1}\' パーティションが見つかりません。</string> + <string name="no_partition_selected">バックアップするパーティションが選択されていません。</string> + <string name="total_partitions_backup"> * バックアップするパーティションの総数: {1}</string> + <string name="total_backup_size"> * すべてのデータの合計サイズ: {1}MB</string> + <string name="available_space"> * 空き容量: {1}MB</string> + <string name="unable_locate_storage">ストレージデバイスを見つけられません。</string> + <string name="no_space">十分な空き容量がありません。</string> + <string name="backup_started">[バックアップ開始]</string> + <string name="backup_folder"> * バックアップフォルダ: {1}</string> + <string name="fail_backup_folder">バックアップフォルダの作成に失敗しました。</string> + <string name="avg_backup_fs">ファイルシステムの平均バックアップ速度: {1} MB/秒</string> + <string name="avg_backup_img">イメージドライブの平均バックアップ速度: {1} MB/秒</string> + <string name="total_backed_size">[合計 {1} MB バックアップ]</string> + <string name="backup_completed">[{1} 秒でバックアップしました]</string> + <string name="restore_started">[リストア開始]</string> + <string name="restore_folder">リストアフォルダ: \'{1}\'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} 完了 ({2} 秒)]</string> + <string name="verifying_md5">MD5 の検証中</string> + <string name="skip_md5">ユーザー設定に基づき MD5 の検証をスキップします。</string> + <string name="calc_restore">リストアの詳細を計算中...</string> + <string name="restore_read_only">{1} をリストアできません -- 読み取り専用でマウントされています。</string> + <string name="restore_unable_locate">リストアする \'{1}\' パーティションが見つかりません。</string> + <string name="no_part_restore">リストアするパーティションが選択されていません。</string> + <string name="restore_part_count">{1} パーティションをリストア中...</string> + <string name="total_restore_size">合計リストアサイズ: {1}MB</string> + <string name="updating_system_details">system の詳細を更新中</string> + <string name="restore_completed">[{1} 秒でリストアしました]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">開けません: \'{1}\' ({2})</string> + <string name="unable_locate_part_backup_name">バックアップ名からパーティションを見つけられません: \'{1}\'</string> + <string name="unable_find_part_path">パス \'{1}\' のパーティションを見つけられません</string> + <string name="update_part_details">パーティションの詳細を更新中...</string> + <string name="update_part_details_done">...完了</string> + <string name="wiping_dalvik">Dalvik Cache ディレクトリを消去中...</string> + <string name="cleaned">掃除しました: {1}...</string> + <string name="dalvik_done">-- Dalvik Cache ディレクトリを消去しました!</string> + <string name="no_andsec">android secure パーティションが見つかりません。</string> + <string name="unable_to_locate">{1} が見つかりません。</string> + <string name="wiping_datamedia">内部ストレージを消去中 -- /data/media...</string> + <string name="unable_to_mount">{1} をマウントできません</string> + <string name="unable_to_mount_internal">内部ストレージをマウントできません</string> + <string name="unable_to_mount_storage">ストレージをマウントできません</string> + <string name="fail_decrypt">Data の復号に失敗しました。</string> + <string name="no_crypto_support">このビルドでは暗号化に非対応です。</string> + <string name="decrypt_success_dev">Data を復号しました。新しいブロックデバイス: '{1}'</string> + <string name="done">完了しました。</string> + <string name="start_partition_sd">SD カードの分割中...</string> + <string name="partition_sd_locate">パーティションが見つかりません。</string> + <string name="ext_swap_size">EXT + Swap のサイズが SD カードのサイズを超えています。</string> + <string name="remove_part_table">パーティションテーブルを削除中...</string> + <string name="unable_rm_part">パーティションテーブルを削除きません。</string> + <string name="create_part">{1} パーティションを作成中...</string> + <string name="unable_to_create_part">{1} パーティションを作成できません。</string> + <string name="format_sdext_as">{1} として sd-ext を初期化しています...</string> + <string name="part_complete">分割しました。</string> + <string name="unable_to_open">\'{1}\' を開けません。</string> + <string name="mtp_already_enabled">MTP はすでに有効です。</string> + <string name="mtp_fail">MTP を有効化できませんでした。</string> + <string name="no_mtp">MTP に対応していません。</string> + <string name="image_flash_start">[イメージ書き込み開始]</string> + <string name="img_to_flash">書き込むイメージ: \'{1}\'</string> + <string name="flash_unable_locate">書き込み先の \'{1}\' パーティションが見つかりません。</string> + <string name="no_part_flash">書き込むパーティションが選択されていません。</string> + <string name="too_many_flash">書き込み先として選択されたパーティションが多すぎます。</string> + <string name="invalid_flash">パーティションの指定が間違っています。</string> + <string name="flash_done">[イメージ書き込み完了]</string> + <string name="wiping">{1} の消去中</string> + <string name="repair_not_exist">{1} は存在しません! 修復できません!</string> + <string name="repairing_using">{2} を使用して {1} を修復中...</string> + <string name="unable_repair">{1} を修復できません。</string> + <string name="mount_data_footer">/data をマウントできず、暗号フッターを見つけられませんでした。</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">\'{1}\' フォルダを作成できません。 ({2})</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">\'{1}\' をマウントできませんでした ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">'{1}' をアンマウントできませんでした ({2})</string> + <string name="cannot_resize">{1} をリサイズできません。</string> + <string name="repair_resize">リサイズの前に {1} を修復しています。</string> + <string name="unable_resize">{1} をリサイズできません。</string> + <string name="no_md5_found">\'{1}\' の MD5 ファイルが見つかりません。リストアするには MD5 の検証を無効化してください。</string> + <string name="md5_fail_match">\'{1}\' で MD5 が一致しません。</string> + <string name="md5_matched">MD5 matched for '{1}'.</string> + <string name="fail_decrypt_tar">tar ファイル '{1}' を復号できませんでした</string> + <string name="format_data_msg">/data を再度使用するにはリカバリを再起動してください。</string> + <string name="format_data_err">暗号化を解除するための初期化ができません。</string> + <string name="formatting_using">{2} を使用して {1} をフォーマット中...</string> + <string name="unable_to_wipe">{1} を消去できません。</string> + <string name="cannot_wipe">パーティション {1} は消去できません。</string> + <string name="remove_all">\'{1}\' のすべてのファイルを削除中</string> + <string name="wiping_data">/data/media 以外のデータを消去中...</string> + <string name="backing_up">{1} をバックアップ中...</string> + <string name="backing">バックアップ中</string> + <string name="backup_size">\'{1}\' のバックアップファイルサイズは0バイトです。</string> + <string name="datamedia_fs_restore">警告: この /data バックアップは {1} ファイルシステムでされています! {1} に戻さないとバックアップは起動できません。</string> + <string name="restoring">{1} をリストア中...</string> + <string name="restoring_hdr">リストア中</string> + <string name="recreate_folder_err">{1} フォルダを再作成できません。</string> + <string name="img_size_err">イメージのサイズがターゲットデバイスのサイズを超えています。</string> + <string name="flashing">{1} を書き込み中...</string> + <string name="backup_folder_set">バックアップフォルダを '{1}' に設定しました</string> + <string name="locate_backup_err">バックアップ \'{1}\' が見つかりません</string> + <string name="set_restore_opt">リストアオプションの設定中: \'{1}\':</string> + <string name="md5_check_skip">MD5 チェックのスキップが有効です</string> + <string name="ors_encrypt_restore_err">OpenRecoveryScript を使用して暗号化されたバックアップをリストアできません。</string> + <string name="mounting">マウント中</string> + <string name="unmounting">マウント解除中</string> + <string name="mounted">\'{1}\' をマウントしました</string> + <string name="unmounted">\'{1}\' のマウントを解除しました</string> + <string name="setting">\'{1}\' を \'{2}\' に設定中</string> + <string name="setting_empty">\'{1}\' を空に設定中</string> + <string name="making_dir1">ディレクトリを作成中</string> + <string name="making_dir2">ディレクトリを作成中: \'{1}\'</string> + <string name="running_command">コマンドの実行中</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">ADB sideload を開始中...</string> + <string name="need_new_adb">Sideload 機能を使うには、adb 1.0.32 以降が必要です。</string> + <string name="no_pwd">パスワードが指定されていません。</string> + <string name="done_ors">スクリプトファイルの処理が完了しました</string> + <string name="injecttwrp">boot イメージに TWRP を組み込み中...</string> + <string name="zip_err">ZIPファイル \'{1}\' のインストール中にエラーが発生しました</string> + <string name="installing_zip">ZIP ファイル \'{1}\' をインストール中</string> + <string name="select_backup_opt">バックアップオプションの設定中:</string> + <string name="compression_on">圧縮は有効です</string> + <string name="md5_off">MD5 生成は無効です</string> + <string name="backup_fail">バックアップに失敗しました</string> + <string name="backup_clean">バックアップに失敗しました。バックアップフォルダを掃除中です。</string> + <string name="running_recovery_commands">リカバリコマンドの実行中</string> + <string name="recovery_commands_complete">リカバリコマンドを実行しました</string> + <string name="running_ors">OpenRecoveryScript の実行中</string> + <string name="ors_complete">OpenRecoveryScript を実行しました</string> + <string name="no_updater_binary">ZIP ファイルの中で \'{1}\' が見つかりませんでした。</string> + <string name="check_for_md5">MD5 ファイルをチェック中...</string> + <string name="fail_sysmap">ファイル \'{1}\' のマップに失敗しました</string> + <string name="verify_zip_sig">ZIP の署名を検証中...</string> + <string name="verify_zip_fail">ZIP の署名の検証に失敗しました!</string> + <string name="verify_zip_done">ZIP の署名の検証に成功しました。</string> + <string name="zip_corrupt">ZIP ファイルが破損しています!</string> + <string name="no_md5">MD5 チェックをスキップ中: MD5 ファイルが見つかりません</string> + <string name="md5_fail">MD5 が一致しません</string> + <string name="md5_match">MD5 が一致しました</string> + <string name="pid_signal">{1} プロセスはこのシグナルで終了しました: {2}</string> + <string name="pid_error">{1} プロセスはこのエラーで終了しました: {2}</string> + <string name="install_dumlock">HTC Dumlock を system にインストール中...</string> + <string name="dumlock_restore">元の Boot をリストア中...</string> + <string name="dumlock_reflash">boot にリカバリを書き込み中...</string> + <string name="run_script">{1} スクリプトを実行しています...</string> + <string name="rename_stock">stock ROM が TWRP を置き換えるのを防ぐため、 /system の stock リカバリファイルの名前を変更しました。</string> + <string name="split_backup">バックアップファイルを複数の書庫に分割中...</string> + <string name="backup_error">バックアップの作成中にエラーが発生しました。</string> + <string name="restore_error">リストア処理中にエラーが発生しました。</string> + <string name="split_thread">スレッド ID {1} を書庫 {2} に分割中</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">%llu / %llu ファイル、%i%%</string> + <string name="size_progress">%lluMB / %lluMB、%i%%</string> + <string name="decrypt_cmd">コマンドラインで data パーティションの復号を試行中です。</string> + <string name="base_pkg_err">基本パッケージの読み込みに失敗しました。</string> + <string name="simulating">アクションのシミュレート中...</string> + <string name="backup_cancel">バックアップをキャンセルしました</string> + <string name="config_twrp">TWRP を設定中...</string> + <string name="config_twrp_err">このカーネルで TWRP を設定できません。</string> + <string name="copy_log">リカバリログを {1} にコピーしました。</string> + <string name="max_queue">ZIP キューの上限に達しました!</string> + <string name="min_queue">ZIP キューの下限に達しました!</string> + <string name="screenshot_saved">スクリーンショットは {1} に保存されました。</string> + <string name="screenshot_err">スクリーンショットの撮影に失敗しました!</string> + <string name="zip_wipe_cache">一つ以上の ZIP が cache の消去を要求しました -- Cache を消去中です。</string> + <string name="and_sec_wipe_err">android secure を消去できません</string> + <string name="dalvik_wipe_err">Dalvik の消去に失敗しました</string> + <string name="auto_gen">(自動生成)</string> + <string name="curr_date">(現在の日付)</string> + <string name="backup_name_len">バックアップ名が長すぎます。</string> + <string name="backup_name_invalid">バックアップ名 \'{1}\' に使用できない文字が含まれています: \'{1}\'</string> + <string name="no_real_sdcard">この機器には実際の SD カードがありません! 中止します!</string> + <string name="cancel_sideload">ADB sideload を中止中...</string> + <string name="change_fs_err">ファイルシステムの変更中にエラーが発生しました。</string> + <string name="theme_ver_err">カスタムテーマのバージョンが TWRP のバージョンと一致しません。標準のテーマを使用します。</string> + <string name="up_a_level">(上の階層へ)</string> + <string name="install_reboot">5秒後に再起動します</string> + </resources> +</language> diff --git a/gui/theme/extra-languages/languages/zh_CN.xml b/gui/theme/extra-languages/languages/zh_CN.xml new file mode 100644 index 000000000..9abbe2161 --- /dev/null +++ b/gui/theme/extra-languages/languages/zh_CN.xml @@ -0,0 +1,695 @@ +<?xml version="1.0"?> + +<language> + <display>Chinese (Simplified)</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">System 镜像</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor 镜像</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data(不包含存储)</string> + <string name="sdcard">SDCard</string> + <string name="internal">内置存储</string> + <string name="microsd">SD 卡</string> + <string name="usbotg">外置 U 盘</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted 存储</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">温度:%tw_cpu_temp% °C</string> + <string name="battery_pct">电量:%tw_battery%</string> + <string name="sort_by_name">按名称排序</string> + <string name="sort_by_date">按日期排序</string> + <string name="sort_by_size">按大小排序</string> + <string name="sort_by_name_only">名称</string> + <string name="sort_by_date_only">日期</string> + <string name="sort_by_size_only">大小</string> + <string name="tab_general">常规</string> + <string name="tab_options">选项</string> + <string name="tab_backup">备份</string> + <string name="tab_time_zone">时区</string> + <string name="tab_screen">屏幕</string> + <string name="tab_vibration">振动</string> + <string name="tab_language">语言</string> + + <string name="install_btn">安装</string> + <string name="wipe_btn">清除</string> + <string name="backup_btn">备份</string> + <string name="restore_btn">恢复</string> + <string name="mount_btn">挂载</string> + <string name="settings_btn">设置</string> + <string name="advanced_btn">高级</string> + <string name="reboot_btn">重启</string> + <string name="files_btn">文件</string> + <string name="copy_log_btn">导出日志</string> + <string name="select_type_hdr">选择类型</string> + <string name="install_zip_hdr">安装 Zip 刷机包</string> + <string name="install_zip_btn">安装刷机包</string> + <string name="install_image_hdr">刷入 Image 镜像</string> + <string name="install_image_btn">刷入镜像</string> + <string name="install_select_file_hdr">选择文件</string> + <string name="file_selector_folders_hdr">目录</string> + <string name="select_file_from_storage">从 %tw_storage_display_name% (%tw_storage_free_size% MB) 中选择文件</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">安装</string> + <string name="select_storage_hdr">存储位置</string> + <string name="select_storage_btn">存储位置</string> + <string name="queue_hdr">队列</string> + <string name="zip_queue_count">已选 %tw_zip_queue_count% 个文件(最多 10 个)</string> + <string name="zip_queue_count_s">已选 %tw_zip_queue_count% 个,最多 10 个:</string> + <string name="zip_warn1">此操作可能会刷入不兼容的固件,</string> + <string name="zip_warn2">致使您的设备变砖。</string> + <string name="zip_back_cancel">按返回按钮取消添加此刷机包。</string> + <string name="zip_back_clear">按返回按钮清除刷机包刷入队列。</string> + <string name="folder">目录:</string> + <string name="file">文件:</string> + <string name="zip_sig_chk">Zip 刷机包签名校验</string> + <string name="inject_twrp_chk">安装完成后注入 TWRP</string> + <string name="install_reboot_chk">安装完成后重启</string> + <string name="options_hdr">选项</string> + <string name="confirm_flash_hdr">确认刷入</string> + <string name="zip_queue">队列:</string> + <string name="options">选项:</string> + <string name="swipe_confirm"> 确认</string> + <string name="zip_add_btn">添加更多刷机包</string> + <string name="zip_clear_btn">清除刷机队列</string> + <string name="install_zip_count_hdr">正在刷入第 %tw_zip_index% 个,共 %tw_zip_queue_count% 个</string> + <string name="installing_zip_xml">正在安装:%tw_file%</string> + <string name="failed">失败</string> + <string name="successful">成功</string> + <string name="install_failed">安装失败</string> + <string name="install_successful">安装成功</string> + <string name="wipe_cache_dalvik_btn">清除 Cache/Dalvik</string> + <string name="reboot_system_btn">重启系统</string> + <string name="install_sel_target">选择目标分区</string> + <string name="flash_image_select">选择要刷入镜像的分区:</string> + <string name="target_partition">目标分区:</string> + <string name="flashing_image">正在刷入镜像…</string> + <string name="image_flashed">镜像已刷入。</string> + <string name="wipe_cache_dalvik_confirm">是否清除 Cache 和 Dalvik?</string> + <string name="wiping_cache_dalvik">正在清除 Cache 和 Dalvik…</string> + <string name="wipe_cache_dalvik_complete">Cache 和 Dalvik 清除完成</string> + <string name="swipe_wipe">滑动按钮确认清除</string> + <string name="swipe_wipe_s"> 清除</string> + <string name="no_os1">没有安装任何系统!</string> + <string name="no_osrb">您确定要重启?</string> + <string name="no_ospo">您确定要关机?</string> + <string name="rebooting">正在重启…</string> + <string name="swipe_reboot">滑动按钮确认重启</string> + <string name="swipe_reboot_s"> 重启</string> + <string name="reboot_install_app_hdr">安装 TWRP 应用?</string> + <string name="reboot_install_app1">您希望安装官方 TWRP 应用吗?</string> + <string name="reboot_install_app2">该应用可帮您检查 TWRP 的最新版本。</string> + <string name="reboot_install_app_prompt_install">如果 TWRP 应用未安装时提示我</string> + <string name="reboot_install_app_system">安装为系统应用</string> + <string name="reboot_installing_app">正在安装应用…</string> + <string name="swipe_to_install_app">滑动按钮确认安装</string> + <string name="swipe_flash">滑动按钮确认刷入</string> + <string name="confirm_action">确认操作</string> + <string name="back_cancel">按返回按钮取消。</string> + <string name="cancel_btn">取消</string> + <string name="wipe_hdr">清除</string> + <string name="factory_reset_hdr">恢复出厂设置(双清)</string> + <string name="factory_reset_btn">恢复出厂</string> + <string name="factory_reset1">这将会清空 Data、Cache 分区和 Dalvik 缓存</string> + <string name="factory_reset2">(不会清除内置存储/sdcard)</string> + <string name="factory_reset3">在大多数情况下,您只需要</string> + <string name="factory_reset4">执行此操作即可。</string> + <string name="factory_resetting">正在恢复出厂设置…</string> + <string name="advanced_wipe_hdr">高级清除选项</string> + <string name="advanced_wipe_btn">高级清除</string> + <string name="wipe_enc_confirm">是否清除 Data 分区加密?</string> + <string name="formatting_data">正在格式化 Data 分区…</string> + <string name="swipe_format_data">滑动按钮确认格式化</string> + <string name="swipe_format_data_s"> 格式化 Data 分区</string> + <string name="factory_reset_complete">恢复出厂完成</string> + <string name="sel_part_hdr">选择分区</string> + <string name="wipe_sel_confirm">是否清除所选的分区?</string> + <string name="wiping_part">正在清除分区…</string> + <string name="wipe_complete">清除完成</string> + <string name="sel_part_wipe">选择要清除的分区:</string> + <string name="invalid_part_sel">无效的分区</string> + <string name="format_data_hdr">格式化 Data 分区</string> + <string name="format_data_btn">格式化 Data 分区</string> + <string name="format_data_ptr1">格式化 Data 分区将会清空您安装的所有</string> + <string name="format_data_ptr2">软件、备份、图片、媒体,</string> + <string name="format_data_ptr3">以及对内置存储所做的加密等。</string> + <string name="format_data_adopted">也包括 Adopted 存储</string> + <string name="format_data_lcp1">格式化 Data 分区将会清空您安装的所有软件、备份、图片、媒体,</string> + <string name="format_data_lcp2">以及对内置存储所做的加密等。</string> + <string name="format_data_wtc1">格式化 Data 分区会清除您的所有软件</string> + <string name="format_data_wtc2">备份和媒体数据,无法撤销。</string> + <string name="format_data_undo">执行此操作后将无法恢复。</string> + <string name="format_data_complete">格式化 Data 分区完成</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">输入 yes 继续,按返回按钮取消。</string> + <string name="part_opt_hdr">分区名:%tw_partition_name%</string> + <string name="sel_act_hdr">选择操作</string> + <string name="file_sys_opt">文件系统选项</string> + <string name="partition">分区:%tw_partition_name%</string> + <string name="part_mount_point">挂载位置:%tw_partition_mount_point%</string> + <string name="part_curr_fs">文件系统:%tw_partition_file_system%</string> + <string name="part_present_yes">当前:是</string> + <string name="part_present_no">当前:否</string> + <string name="part_removable_yes">可移除:是</string> + <string name="part_removable_no">可移除:否</string> + <string name="part_size">大小:%tw_partition_size%MB</string> + <string name="part_used">已用:%tw_partition_used%MB</string> + <string name="part_free">空闲:%tw_partition_free%MB</string> + <string name="part_backup_size">备份大小:%tw_partition_backup_size%MB</string> + <string name="resize_btn">调整文件系统</string> + <string name="resize_btn_s">调整</string> + <string name="resize_confirm">是否调整 %tw_partition_name%?</string> + <string name="resizing">正在调整…</string> + <string name="resize_complete">调整完成</string> + <string name="swipe_resize">滑动按钮确认调整</string> + <string name="swipe_resize_s"> 调整</string> + <string name="repair_btn">修复文件系统</string> + <string name="repair_btn_s">修复</string> + <string name="repair_confirm">是否修复 %tw_partition_name%?</string> + <string name="repairing">正在修复…</string> + <string name="repair_complete">修复完成</string> + <string name="swipe_repair">滑动按钮确认修复</string> + <string name="swipe_repair_s"> 修复</string> + <string name="change_fs_btn">更改文件系统</string> + <string name="change_fs_btn_s">更改</string> + <string name="change_fs_for_hdr">要更改的分区:%tw_partition_name%</string> + <string name="change_fs_for_hdr_s">分区:%tw_partition_name%>选择文件系统</string> + <string name="change_fs_warn1">一些固件或内核可能不支持</string> + <string name="change_fs_warn2">某些文件系统,请谨慎!</string> + <string name="change_fs_confirm">是否更改 %tw_partition_name% 为:</string> + <string name="formatting">正在格式化…</string> + <string name="format_complete">格式化完成</string> + <string name="swipe_change_fs">滑动按钮确认更改</string> + <string name="swipe_change_s"> 更改</string> + <string name="back_btn">返回</string> + <string name="wipe_enc_btn">清除加密</string> + <string name="swipe_factory_reset">滑动按钮确认恢复出厂</string> + <string name="repair_change_btn">修复或更改文件系统</string> + <string name="storage_hdr">存储位置:%tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">备份</string> + <string name="backup_confirm_hdr">确认备份</string> + <string name="encryption_tab">加密</string> + <string name="encryption">加密:</string> + <string name="name">名称:</string> + <string name="sel_part_backup">选择要备份的分区:</string> + <string name="storage">储存位置:</string> + <string name="enc_disabled">已禁用 - 设置密码以启用</string> + <string name="enc_enabled">已启用</string> + <string name="enable_backup_comp_chk">启用压缩</string> + <string name="skip_md5_backup_chk">当备份时跳过生成 MD5</string> + <string name="disable_backup_space_chk">禁用剩余空间检查</string> + <string name="current_boot_slot">当前分区:%tw_active_slot%</string> + <string name="boot_slot_a">分区 A</string> + <string name="boot_slot_b">分区 B</string> + <string name="changing_boot_slot">更改启动分区</string> + <string name="changing_boot_slot_complete">更改启动分区完成</string> + <string name="refresh_sizes_btn">刷新大小</string> + <string name="swipe_backup">滑动按钮确认备份</string> + <string name="append_date_btn">附加日期</string> + <string name="backup_name_exists">使用该名称的备份已经存在!</string> + <string name="encrypt_backup">是否加密备份?</string> + <string name="enter_pass">请输入密码:</string> + <string name="enter_pass2">请再输入一遍:</string> + <string name="pass_not_match">密码不匹配!</string> + <string name="partitions">分区:</string> + <string name="disabled">已禁用</string> + <string name="enabled">已启用</string> + <string name="backup_name_hdr">设置备份名称</string> + <string name="progress">进度:</string> + <string name="backup_complete">备份完成</string> + <string name="restore_hdr">恢复</string> + <string name="sel_backup_hdr">选择备份</string> + <string name="restore_sel_store_hdr">从 %tw_storage_display_name% (%tw_storage_free_size% MB) 中选择备份</string> + <string name="restore_sel_pack_fs">选择要恢复的备份包:</string> + <string name="restore_enc_backup_hdr">备份已被加密</string> + <string name="restore_dec_fail">密码错误,请重试</string> + <string name="del_backup_btn">删除备份</string> + <string name="del_backup_confirm">是否删除备份:</string> + <string name="del_backup_confirm2">此操作无法恢复!</string> + <string name="deleting_backup">正在删除备份…</string> + <string name="backup_deleted">备份删除完成</string> + <string name="swipe_delete">滑动按钮确认删除</string> + <string name="swipe_delete_s"> 删除</string> + <string name="restore_try_decrypt">加密的备份 - 尝试解密</string> + <string name="restore_try_decrypt_s">正在尝试解密</string> + <string name="restore_backup_date">备份于 %tw_restore_file_date%</string> + <string name="restore_sel_part">选择要恢复的分区:</string> + <string name="restore_enable_md5_chk">启用 MD5 校验备份文件</string> + <string name="restore_complete">恢复完成</string> + <string name="swipe_restore">滑动按钮确认恢复</string> + <string name="swipe_restore_s"> 恢复</string> + <string name="rename_backup_hdr">重命名备份</string> + <string name="rename_backup_confirm">是否重命名备份文件?</string> + <string name="rename_backup_confirm2">此操作无法恢复!</string> + <string name="renaming_backup">正在重命名…</string> + <string name="rename_backup_complete">重命名完成</string> + <string name="swipe_to_rename">滑动按钮确认重命名</string> + <string name="swipe_rename"> 重命名</string> + <string name="confirm_hdr">确认</string> + <string name="mount_hdr">挂载</string> + <string name="mount_sel_part">选择要挂载的分区:</string> + <string name="mount_sys_ro_chk">挂载 System 分区为只读</string> + <string name="mount_sys_ro_s_chk">挂载 System 为只读</string> + <string name="decrypt_data_btn">解密 Data 分区</string> + <string name="disable_mtp_btn">停用 MTP 模式</string> + <string name="enable_mtp_btn">启用 MTP 模式</string> + <string name="mount_usb_storage_btn">挂载 USB 存储</string> + <string name="usb_storage_hdr">USB 存储</string> + <string name="usb_stor_mnt1">已挂载 USB 存储</string> + <string name="usb_stor_mnt2">请确认解除挂载前先从</string> + <string name="usb_stor_mnt3">电脑上安全地移除设备!</string> + <string name="unmount_btn">卸载</string> + <string name="rb_system_btn">系统</string> + <string name="rb_poweroff_btn">关机</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">正在关机…</string> + <string name="swipe_power_off">滑动按钮确认关机</string> + <string name="swipe_power_off_s">关机</string> + <string name="sys_ro_hdr">未修改的 System 分区</string> + <string name="sys_ro_keep">是否保持系统分区为只读?</string> + <string name="sys_rop1">TWRP 可以保持系统分区未修改状态</string> + <string name="sys_rop2">使您更容易获得官方的更新。</string> + <string name="sys_rop3">TWRP 将无法禁止原厂固件可能</string> + <string name="sys_rop4">替换 TWRP 并且不能 Root 您的设备。</string> + <string name="sys_rop5">安装刷机包或者通过 adb 操作依然可以</string> + <string name="sys_rop6">修改系统分区。</string> + <string name="sys_rol1">TWRP 可以保持系统分区为未修改状态,使您更容易获得官方的更新。</string> + <string name="sys_rol2">TWRP 将无法禁止原厂固件替换 TWRP,并且不能 Root 您的设备。</string> + <string name="sys_rol3">安装刷机包或者通过 adb 操作依然可以修改系统分区。</string> + <string name="sys_ro_never_show_chk">下次启动时不再显示此界面</string> + <string name="sys_ro_keep_ro_btn">保持只读</string> + <string name="swipe_allow_mod">滑动按钮允许修改</string> + <string name="swipe_allow_mod_s">允许修改</string> + <string name="settings_hdr">设置</string> + <string name="settings_gen_hdr">常规</string> + <string name="settings_gen_s_hdr">常规</string> + <string name="settings_gen_btn">常规</string> + <string name="use_rmrf_chk">使用 rm -rf 命令代替格式化</string> + <string name="use24clock_chk">使用 24 小时制</string> + <string name="rev_navbar_chk">反转底部按钮布局</string> + <string name="simact_chk">为测试主题使用模拟操作</string> + <string name="simfail_chk">模拟失败操作</string> + <string name="ctr_navbar_rdo">导航栏按钮居中</string> + <string name="lft_navbar_rdo">导航栏按钮左对齐</string> + <string name="rht_navbar_rdo">导航栏按钮右对齐</string> + <string name="restore_defaults_btn">恢复默认设置</string> + <string name="settings_tz_btn">时区</string> + <string name="settings_screen_btn">屏幕</string> + <string name="settings_screen_bright_btn">屏幕亮度</string> + <string name="settings_vibration_btn">振动</string> + <string name="settings_language_btn">语言</string> + <string name="time_zone_hdr">时区</string> + <string name="sel_tz_list">选择时区:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) 美属萨摩亚、中途岛</string> + <string name="utcm10">(UTC -10) 夏威夷</string> + <string name="utcm9">(UTC -9) 阿拉斯加</string> + <string name="utcm8">(UTC -8) 太平洋标准时间</string> + <string name="utcm7">(UTC -7) 北美山区标准时间</string> + <string name="utcm6">(UTC -6) 北美中部标准时间</string> + <string name="utcm5">(UTC -5) 北美东部标准时间</string> + <string name="utcm4">(UTC -4) 大西洋标准时间</string> + <string name="utcm3">(UTC -3) 巴西、阿根廷(布宜诺斯)</string> + <string name="utcm2">(UTC -2) 大西洋中部</string> + <string name="utcm1">(UTC -1) 葡萄牙(亚速尔群岛),佛得角</string> + <string name="utc0">(UTC 0) 伦敦、都柏林、里斯本</string> + <string name="utcp1">(UTC +1) 柏林、布鲁塞尔、巴黎</string> + <string name="utcp2">(UTC +2) 雅典、伊斯坦布尔、南非</string> + <string name="utcp3">(UTC +3) 莫斯科、巴格达</string> + <string name="utcp4">(UTC +4) 阿布扎比、第比利斯、马斯喀特</string> + <string name="utcp5">(UTC +5) 叶卡捷琳堡、伊斯兰堡</string> + <string name="utcp6">(UTC +6) 阿拉木图、达卡、科伦坡</string> + <string name="utcp7">(UTC +7) 曼谷、河内、雅加达</string> + <string name="utcp8">(UTC +8) 北京、新加坡、香港</string> + <string name="utcp9">(UTC +9) 东京、首尔、雅库茨克</string> + <string name="utcp10">(UTC +10) 澳大利亚东部、关岛</string> + <string name="utcp11">(UTC +11) 符拉迪沃斯托克、索罗门群岛</string> + <string name="utcp12">(UTC +12) 奥克兰、惠灵顿、斐济</string> + <string name="sel_tz_offset">时间偏差(通常为 0):%tw_time_zone_guioffset%</string> + <string name="tz_offset_none">无</string> + <string name="tz_offset_0">0 分钟</string> + <string name="tz_offset_15">15 分钟</string> + <string name="tz_offset_30">30 分钟</string> + <string name="tz_offset_45">45 分钟</string> + <string name="use_dst_chk">使用夏令时 (DST)</string> + <string name="curr_tz">当前时区:%tw_time_zone%</string> + <string name="curr_tz_s">当前时区:</string> + <string name="set_tz_btn">设置时区</string> + <string name="settings_screen_hdr">屏幕</string> + <string name="settings_screen_timeout_hdr">屏幕超时</string> + <string name="enable_timeout_chk">启用屏幕超时</string> + <string name="screen_to_slider">屏幕超时时间(秒):</string> + <string name="screen_to_slider_s">屏幕超时(0=禁用):%tw_screen_timeout_secs%</string> + <string name="screen_to_na">屏幕超时设置不可用</string> + <string name="screen_bright_slider">屏幕亮度:%tw_brightness_pct%%</string> + <string name="screen_bright_na">屏幕亮度设置不可用</string> + <string name="vibration_hdr">振动</string> + <string name="button_vibration_hdr">按钮振动</string> + <string name="kb_vibration_hdr">键盘振动</string> + <string name="act_vibration_hdr">操作振动</string> + <string name="button_vibration">按钮振动强度:</string> + <string name="kb_vibration">键盘振动强度:</string> + <string name="act_vibration">操作振动强度:</string> + <string name="select_language">选择语言:</string> + <string name="sel_lang_btn">选择语言</string> + <string name="set_language_btn">设置语言</string> + <string name="advanced_hdr">高级选项</string> + <string name="copy_log_confirm">是否导出日志到内置存储?</string> + <string name="copying_log" version="2">正在复制…</string> + <string name="copy_log_complete" version="2">日志导出完成</string> + <string name="fix_context_btn">修复 Context</string> + <string name="part_sd_btn">分区 SD 卡</string> + <string name="part_sd_s_btn">SD 卡</string> + <string name="file_manager_btn">文件管理</string> + <string name="language_hdr">语言</string> + <string name="terminal_btn">终端命令</string> + <string name="reload_theme_btn">重载主题</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">注入 TWRP</string> + <string name="inject_twrp_confirm">是否重新注入 TWRP?</string> + <string name="injecting_twrp">正在重新注入 TWRP…</string> + <string name="inject_twrp_complete">TWRP 注入完成</string> + <string name="swipe_to_confirm">滑动按钮确认</string> + <string name="part_sd_hdr">SD 卡分区</string> + <string name="invalid_partsd_sel">您必须选择一个可移动设备</string> + <string name="part_sd_lose">您将会丢失 SD 卡上的所有文件!</string> + <string name="part_sd_undo">此操作无法恢复!</string> + <string name="part_sd_ext_sz">EXT 大小:</string> + <string name="part_sd_swap_sz">Swap 大小:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">文件系统:</string> + <string name="swipe_part_sd">滑动按钮确认分区</string> + <string name="swipe_part_sd_s">分区</string> + <string name="partitioning_sd">正在对 SD 卡分区…</string> + <string name="partitioning_sd2">这将需要几分钟的时间。</string> + <string name="part_sd_complete">分区完成</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">恢复原版 Boot 镜像</string> + <string name="dumlock_restore_confirm">是否恢复原版 Boot 镜像?</string> + <string name="dumlock_restoring">正在恢复原版 Boot 镜像…</string> + <string name="dumlock_restore_complete">恢复原版 Boot 镜像完成</string> + <string name="dumlock_reflash_btn">重新刷入 Recovery</string> + <string name="dumlock_reflash_confirm">是否重新刷入 Recovery 至 Boot 分区?</string> + <string name="dumlock_reflashing">正在刷入 Recovery 至 Boot 分区…</string> + <string name="dumlock_reflash_complete">Recovery 刷入完成</string> + <string name="dumlock_install_btn">安装 HTC Dumlock</string> + <string name="dumlock_install_confirm">是否安装 HTC Dumlock 文件到系统中?</string> + <string name="dumlock_installing">正在安装 HTC Dumlock…</string> + <string name="dumlock_install_complete">HTC Dumlock 安装完成</string> + <string name="swipe_to_unlock">滑动按钮解锁</string> + <string name="swipe_unlock"> 解锁</string> + <string name="fm_hdr">文件管理</string> + <string name="fm_sel_file">选择文件或文件夹</string> + <string name="fm_type_folder">文件夹</string> + <string name="fm_type_file">文件</string> + <string name="fm_choose_act">选择操作</string> + <string name="fm_selected">已选择:%tw_fm_type%</string> + <string name="fm_copy_btn">复制</string> + <string name="fm_copy_file_btn">复制文件</string> + <string name="fm_copy_folder_btn">复制文件夹</string> + <string name="fm_copying">正在复制</string> + <string name="fm_move_btn">移动</string> + <string name="fm_moving">正在移动</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">删除</string> + <string name="fm_deleting">正在删除</string> + <string name="fm_rename_btn">重命名</string> + <string name="fm_rename_file_btn">重命名文件</string> + <string name="fm_rename_folder_btn">重命名文件夹</string> + <string name="fm_renaming">正在重命名</string> + <string name="fm_sel_dest">选择目标目录</string> + <string name="fm_sel_curr_folder">选择当前目录</string> + <string name="fm_rename_hdr">重命名</string> + <string name="fm_set_perms_hdr">设置权限</string> + <string name="fm_perms">权限:</string> + <string name="fm_complete">操作完成</string> + <string name="decrypt_data_hdr">解密 Data 分区</string> + <string name="decrypt_data_enter_pass">请输入密码。</string> + <string name="decrypt_data_failed">密码错误,请重试!</string> + <string name="decrypt_data_failed_pattern">图案错误,请重试!</string> + <string name="decrypt_data_enter_pattern">绘制解锁图案</string> + <string name="decrypt_data_trying">正在尝试解密</string> + <string name="term_hdr">终端命令</string> + <string name="term_s_hdr">终端</string> + <string name="term_kill_btn">终止</string> + <string name="term_sel_folder_hdr">选择运行目录</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">清除 Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">清除 Cache</string> + <string name="swipe_to_sideload">滑动按钮开始 Sideload</string> + <string name="swipe_sideload"> 开始</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">使用方式:adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload 完成</string> + <string name="fix_contexts_hdr">修复 Context</string> + <string name="fix_contexts_note1">注意:很少情况下需要修复 Context。</string> + <string name="fix_contexts_note2">修复 SELinux Context 可能会导致</string> + <string name="fix_contexts_note3">您的设备无法正常启动。</string> + <string name="swipe_to_fix_contexts">滑动按钮确认修复</string> + <string name="swipe_fix_contexts"> 修复 Context</string> + <string name="fixing_contexts">正在修复 Context…</string> + <string name="fix_contexts_complete">修复 Context 完成</string> + <string name="reboot_hdr">重启选项</string> + <string name="su_hdr">SuperSU 检测</string> + <string name="su_note1">系统目前没有 Root。</string> + <string name="su_note2">是否现在安装 SuperSU?</string> + <string name="su_note3">这将会 Root 您的设备。</string> + <string name="su_cancel">不,以后再说</string> + <string name="swipe_su_to_install">滑动按钮确认安装</string> + <string name="swipe_su_install"> 安装</string> + <string name="su_installing">正在安装 SuperSU</string> + <string name="sel_storage_list">选择存储位置</string> + <string name="ok_btn">确定</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">内核不支持读取 SELinux Context。</string> + <string name="full_selinux">完整 SELinux 支持。</string> + <string name="no_selinux">无 SELinux 支持(无 libselinux)。</string> + <string name="mtp_enabled">MTP 已启用</string> + <string name="mtp_crash">MTP 已崩溃。启动时不再加载 MTP。</string> + <string name="decrypt_success">已使用默认密码解密成功。</string> + <string name="unable_to_decrypt">无法使用默认密码来解密,您可能需要格式化 Data 分区。</string> + <string name="generating_md51">正在生成 MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * 正在生成 MD5…</string> + <string name="md5_created"> * MD5 已生成。</string> + <string name="md5_error"> * MD5 错误!</string> + <string name="md5_compute_error"> * 计算 MD5 错误。</string> + <string name="current_date">(Current Date)</string> + <string name="auto_generate">(Auto Generate)</string> + <string name="unable_to_locate_partition">未找到 '{1}' 分区。</string> + <string name="no_partition_selected">未选择备份分区。</string> + <string name="total_partitions_backup"> * 备份分区总数:{1}</string> + <string name="total_backup_size"> * 备份数据总计:{1}MB</string> + <string name="available_space"> * 可用空间:{1}MB</string> + <string name="unable_locate_storage">未找到存储设备。</string> + <string name="no_space">存储器上没有足够的空间。</string> + <string name="backup_started">[已开始备份]</string> + <string name="backup_folder"> * 备份文件夹:{1}</string> + <string name="fail_backup_folder">建立备份文件夹失败。</string> + <string name="avg_backup_fs">文件平均备份速度:{1}MB/秒</string> + <string name="avg_backup_img">镜像平均备份速度:{1}MB/秒</string> + <string name="total_backed_size">[总计备份 {1}MB]</string> + <string name="backup_completed">[备份已完成,耗时 {1} 秒]</string> + <string name="restore_started">[已开始还原]</string> + <string name="restore_folder">恢复文件夹:'{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} 恢复完成({2} 秒)]</string> + <string name="verifying_md5">正在校验 MD5</string> + <string name="skip_md5">基于用户设置,已跳过 MD5 检查。</string> + <string name="calc_restore">正在计算恢复详情…</string> + <string name="restore_read_only">无法恢复 {1} -- 已挂载为只读。</string> + <string name="restore_unable_locate">未找到 '{1}' 分区。</string> + <string name="no_part_restore">未选择要恢复的分区。</string> + <string name="restore_part_count">正在恢复 {1} 个分区…</string> + <string name="total_restore_size">恢复文件总计 {1}MB</string> + <string name="updating_system_details">更新系统详细信息</string> + <string name="restore_completed">[恢复完成,耗时 {1} 秒]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">打开出错:'{1}' ({2})</string> + <string name="unable_locate_part_backup_name">无法通过备份名称来查找分区:'{1}'</string> + <string name="unable_find_part_path">找不到分区路径 '{1}'</string> + <string name="update_part_details">正在更新分区详情…</string> + <string name="update_part_details_done">…完成</string> + <string name="wiping_dalvik">正在清除 Dalvik Cache 目录…</string> + <string name="cleaned">已清除:{1}…</string> + <string name="dalvik_done">-- Dalvik Cache 清除完成!</string> + <string name="no_andsec">未发现 android secure 分区。</string> + <string name="unable_to_locate">未找到 {1}。</string> + <string name="wiping_datamedia">清除内置存储 -- /data/media…</string> + <string name="unable_to_mount">无法挂载 {1}</string> + <string name="unable_to_mount_internal">无法挂载内置存储</string> + <string name="unable_to_mount_storage">无法挂载存储</string> + <string name="fail_decrypt">解密数据失败。</string> + <string name="no_crypto_support">此版本不支持加密。</string> + <string name="decrypt_success_dev">Data 分区成功解密,新增块设备:'{1}'</string> + <string name="decrypt_success_nodev">Data 分区已成功解密</string> + <string name="done">完成。</string> + <string name="start_partition_sd">正在给 SD 卡分区…</string> + <string name="partition_sd_locate">未找到需要分区的设备。</string> + <string name="ext_swap_size">EXT+Swap 大小超过 SD 卡容量。</string> + <string name="remove_part_table">正在删除分区表…</string> + <string name="unable_rm_part">无法删除分区表。</string> + <string name="create_part">正在建立 {1} 分区…</string> + <string name="unable_to_create_part">无法建立 {1} 分区。</string> + <string name="format_sdext_as">正在将 sd-ext 格式化为 {1}…</string> + <string name="part_complete">分区完成。</string> + <string name="unable_to_open">无法打开 '{1}'。</string> + <string name="mtp_already_enabled">MTP 已经启用</string> + <string name="mtp_fail">启用 MTP 失败</string> + <string name="no_mtp">不支持 MTP</string> + <string name="image_flash_start">[开始刷入镜像]</string> + <string name="img_to_flash">刷入镜像:'{1}'</string> + <string name="flash_unable_locate">未找到 '{1}' 分区。</string> + <string name="no_part_flash">未选择刷入分区。</string> + <string name="too_many_flash">选择刷入的分区太多。</string> + <string name="invalid_flash">指定的刷入分区无效。</string> + <string name="flash_done">[镜像刷入完成]</string> + <string name="wiping">正在清除 {1}</string> + <string name="repair_not_exist">{1} 不存在!无法修复!</string> + <string name="repairing_using">正在使用 {2} 修复 {1}…</string> + <string name="unable_repair">无法修复 {1}。</string> + <string name="mount_data_footer">无法挂载/data,未找到加密 footer。</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">无法创建 '{1}' 文件夹 ({2})。</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">挂载 '{1}' 失败 ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">卸载 '{1}' 失败 ({2})</string> + <string name="cannot_resize">无法更改 {1} 大小。</string> + <string name="repair_resize">在调整大小之前修复 {1}。</string> + <string name="unable_resize">无法调整 {1} 大小。</string> + <string name="no_md5_found">未找到 '{1}' 的 MD5 校验文件。请取消选中“启用 MD5 校验备份文件”复选框。</string> + <string name="md5_fail_match">'{1}' MD5 校验失败。</string> + <string name="md5_matched">MD5 匹配 '{1}'。</string> + <string name="fail_decrypt_tar">无法解密 tar 文件 '{1}'</string> + <string name="format_data_msg">您可能需要重启 Recovery 才能使用/data。</string> + <string name="format_data_err">无法格式化并删除加密。</string> + <string name="formatting_using">使用 {2} 格式化 {1}…</string> + <string name="unable_to_wipe">无法清除 {1}。</string> + <string name="cannot_wipe">无法清除 {1} 分区。</string> + <string name="remove_all">移除 '{1}' 下的所有文件</string> + <string name="wiping_data">正在清除 Data 分区,跳过清除/data/media…</string> + <string name="backing_up">正在备份 {1}…</string> + <string name="backup_storage_warning">备份的 {1} 分区不包含内置存储上的任何文件,例如照片或下载的文件等等。</string> + <string name="backing">正在备份</string> + <string name="backup_size">'{1}' 的备份文件大小为 0 字节。</string> + <string name="datamedia_fs_restore">警告:此/data 备份文件系统为 {1}!除非把文件系统格式设置为 {1} 否则可能无法启动。</string> + <string name="restoring">正在恢复 {1}…</string> + <string name="restoring_hdr">正在恢复</string> + <string name="recreate_folder_err">无法重新创建 {1} 文件夹。</string> + <string name="img_size_err">镜像大小大于目标设备</string> + <string name="flashing">正在刷入 {1}…</string> + <string name="backup_folder">备份文件夹设置为:'{1}'</string> + <string name="locate_backup_err">未找到备份文件 '{1}'</string> + <string name="set_restore_opt">设置恢复选项:'{1}':</string> + <string name="md5_check_skip">跳过校验 MD5 已开启</string> + <string name="ors_encrypt_restore_err">无法使用 OpenRecoveryScript 脚本恢复加密备份。</string> + <string name="mounting">正在挂载</string> + <string name="unmounting">正在卸载</string> + <string name="mounted">'{1}' 已挂载</string> + <string name="unmounted">'{1}' 已卸载</string> + <string name="setting">设置 '{1}' 为 '{2}'</string> + <string name="setting_empty">设置 '{1}' 为空</string> + <string name="making_dir1">创建目录</string> + <string name="making_dir2">创建目录:'{1}'</string> + <string name="running_command">运行命令</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">正在开始 ADB sideload…</string> + <string name="need_new_adb">您需要 1.0.32 或更高版本的 adb 才可以使用。</string> + <string name="no_pwd">未提供密码。</string> + <string name="done_ors">脚本执行完毕</string> + <string name="injecttwrp">正在注入 TWRP 到 Boot 镜像…</string> + <string name="zip_err">安装 Zip 刷机包 '{1}' 时出错</string> + <string name="installing_zip">正在安装 Zip 刷机包 '{1}'</string> + <string name="select_backup_opt">设置备份选项:</string> + <string name="compression_on">压缩选项已开启</string> + <string name="md5_off">MD5 生成已关闭</string> + <string name="backup_fail">备份失败</string> + <string name="backup_clean">备份失败。正在清理备份文件夹。</string> + <string name="running_recovery_commands">运行 Recovery 命令</string> + <string name="recovery_commands_complete">Recovery 命令执行完成</string> + <string name="running_ors">运行 OpenRecoveryScript 脚本</string> + <string name="ors_complete">运行 OpenRecoveryScript 脚本完成</string> + <string name="invalid_zip_format">Zip 文件格式无效!</string> + <string name="check_for_md5">正在检测 MD5…</string> + <string name="fail_sysmap">映射文件 '{1}' 失败</string> + <string name="verify_zip_sig">正在校验 Zip 刷机包签名…</string> + <string name="verify_zip_fail">刷机包签名校验失败!</string> + <string name="verify_zip_done">刷机包签名校验成功。</string> + <string name="zip_corrupt">刷机包已损坏!</string> + <string name="no_md5">跳过 MD5 校验:未找到 MD5 文件</string> + <string name="md5_fail">MD5 不匹配</string> + <string name="md5_match">MD5 校验成功</string> + <string name="pid_signal">{1} 过程结束,标志:{2}</string> + <string name="pid_error">{1} 过程结束,错误:{2}</string> + <string name="install_dumlock">安装 HTC Dumlock 到系统…</string> + <string name="dumlock_restore">正在恢复原版 Boot…</string> + <string name="dumlock_reflash">正在重新刷入 Recovery 到 Boot…</string> + <string name="run_script">正在运行 {1} 脚本…</string> + <string name="rename_stock">重命名/system 下原版 Recovery 的补丁文件,避免原厂固件替换 TWRP。</string> + <string name="split_backup">分解备份文件为多个压缩文件…</string> + <string name="backup_error">建立备份失败。</string> + <string name="restore_error">在恢复过程中发生错误。</string> + <string name="split_thread">拆分线程 ID {1} 到压缩文件 {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">已完成 %llu 个,共 %llu 个文件,进度 %i%%</string> + <string name="size_progress">已完成 %lluMB,共 %lluMB,进度 %i%%</string> + <string name="decrypt_cmd">尝试通过命令行解密 Data 分区。</string> + <string name="base_pkg_err">无法加载基本包。</string> + <string name="simulating">正在模拟操作…</string> + <string name="backup_cancel">备份已取消。</string> + <string name="config_twrp">正在配置 TWRP…</string> + <string name="config_twrp_err">此内核无法配置 TWRP。</string> + <string name="copy_log">已经导出 Recovery 日志到 {1}。</string> + <string name="max_queue">已达到最大刷机包刷入队列!</string> + <string name="min_queue">已达到最大刷机包刷入队列!</string> + <string name="screenshot_saved">截图已保存到:{1}</string> + <string name="screenshot_err">截图失败!</string> + <string name="zip_wipe_cache">一个或多个刷机包请求清除 cache -- 正在清除 cache。</string> + <string name="and_sec_wipe_err">无法清除 android secure</string> + <string name="dalvik_wipe_err">清除 Dalvik 失败</string> + <string name="auto_gen">(Auto Generate)</string> + <string name="curr_date">(Current Date)</string> + <string name="backup_name_len">备份名称太长。</string> + <string name="backup_name_invalid">备份名称 '{1}' 中包含无效字符:'{1}'</string> + <string name="no_real_sdcard">此设备没有真实的 SD 卡!正在中止!</string> + <string name="cancel_sideload">取消 ADB Sideload…</string> + <string name="change_fs_err">更换文件系统时出错。</string> + <string name="theme_ver_err">自定义主题和 TWRP 版本不匹配,正在使用原版主题。</string> + <string name="up_a_level">(上级目录)</string> + <string name="install_reboot" version="2">将会在 %tw_sleep% 秒内重启</string> + <string name="adbbackup_error">ADB 备份错误。正在退出…"</string> + <string name="adbbackup_control_error">无法写入 adb 控制通道</string> + <string name="twrp_adbbu_option">--twrp 选项需启用 twrp adb backup</string> + <string name="partition_not_found">分区列表中未发现路径:{1}</string> + <string name="copy_kernel_log">已导出内核日志至 {1}</string> + <string name="include_kernel_log">包含内核日志</string> + <string name="unable_set_boot_slot">更改 bootloader 启动分区至 {1} 错误</string> + </resources> +</language> diff --git a/gui/theme/extra-languages/languages/zh_TW.xml b/gui/theme/extra-languages/languages/zh_TW.xml new file mode 100644 index 000000000..55a9dccce --- /dev/null +++ b/gui/theme/extra-languages/languages/zh_TW.xml @@ -0,0 +1,695 @@ +<?xml version="1.0"?> + +<language> + <display>Chinese (Traditional)</display> + + <resources> + <!-- Font overrides - only change these if your language requires special characters --> + <resource name="font_l" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="font_m" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="font_s" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + <resource name="fixed" type="fontoverride" filename="DroidSansFallback.ttf" scale="100" /> + + <!-- Partition display names --> + <string name="system">System</string> + <string name="system_image">System 鏡像</string> + <string name="vendor">Vendor</string> + <string name="vendor_image">Vendor 鏡像</string> + <string name="boot">Boot</string> + <string name="recovery">Recovery</string> + <string name="cache">Cache</string> + <string name="data">Data</string> + <string name="data_backup">Data(不包含存儲)</string> + <string name="sdcard">SDCard</string> + <string name="internal">內置存儲</string> + <string name="microsd">SD 卡</string> + <string name="usbotg">外置 U 盤</string> + <string name="android_secure">Android Secure</string> + <string name="dalvik">Dalvik / ART Cache</string> + <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system --> + <string name="sdext">SD-EXT</string> + <string name="adopted_data">Adopted Data</string> + <string name="adopted_storage">Adopted 存儲</string> + + <!-- GUI XML strings --> + <string name="twrp_header">Team Win Recovery Project</string> + <string name="twrp_watch_header">TWRP %tw_version%</string> + <string name="cpu_temp">溫度:%tw_cpu_temp% °C</string> + <string name="battery_pct">電量:%tw_battery%</string> + <string name="sort_by_name">按名稱排序</string> + <string name="sort_by_date">按日期排序</string> + <string name="sort_by_size">按大小排序</string> + <string name="sort_by_name_only">名稱</string> + <string name="sort_by_date_only">日期</string> + <string name="sort_by_size_only">大小</string> + <string name="tab_general">常規</string> + <string name="tab_options">選項</string> + <string name="tab_backup">備份</string> + <string name="tab_time_zone">時區</string> + <string name="tab_screen">螢幕</string> + <string name="tab_vibration">振動</string> + <string name="tab_language">語言</string> + + <string name="install_btn">安裝</string> + <string name="wipe_btn">清除</string> + <string name="backup_btn">備份</string> + <string name="restore_btn">恢復</string> + <string name="mount_btn">掛載</string> + <string name="settings_btn">設置</string> + <string name="advanced_btn">高級</string> + <string name="reboot_btn">重啟</string> + <string name="files_btn">檔案</string> + <string name="copy_log_btn">導出日誌</string> + <string name="select_type_hdr">選擇類型</string> + <string name="install_zip_hdr">安裝 Zip 刷機包</string> + <string name="install_zip_btn">安裝刷機包</string> + <string name="install_image_hdr">刷入 Image 鏡像</string> + <string name="install_image_btn">刷入鏡像</string> + <string name="install_select_file_hdr">選擇檔案</string> + <string name="file_selector_folders_hdr">目錄</string> + <string name="select_file_from_storage">從 %tw_storage_display_name% (%tw_storage_free_size% MB) 中選擇檔案</string> + <string name="adb_sideload_btn">ADB Sideload</string> + <string name="install_hdr">安裝</string> + <string name="select_storage_hdr">存儲位置</string> + <string name="select_storage_btn">存儲位置</string> + <string name="queue_hdr">佇列</string> + <string name="zip_queue_count">已選 %tw_zip_queue_count% 個檔案(最多 10 個)</string> + <string name="zip_queue_count_s">已選 %tw_zip_queue_count% 個,最多 10 個:</string> + <string name="zip_warn1">此操作可能會刷入不相容的固件,</string> + <string name="zip_warn2">致使您的設備變磚。</string> + <string name="zip_back_cancel">按返回按鈕取消添加此刷機包。</string> + <string name="zip_back_clear">按返回按鈕清除刷機包刷入佇列。</string> + <string name="folder">目錄:</string> + <string name="file">檔案:</string> + <string name="zip_sig_chk">Zip 刷機包簽名校驗</string> + <string name="inject_twrp_chk">安裝完成後注入 TWRP</string> + <string name="install_reboot_chk">安裝完成後重啟</string> + <string name="options_hdr">選項</string> + <string name="confirm_flash_hdr">確認刷入</string> + <string name="zip_queue">佇列:</string> + <string name="options">選項:</string> + <string name="swipe_confirm"> 確認</string> + <string name="zip_add_btn">添加更多刷機包</string> + <string name="zip_clear_btn">清除刷機佇列</string> + <string name="install_zip_count_hdr">正在刷入第 %tw_zip_index% 個,共 %tw_zip_queue_count% 個</string> + <string name="installing_zip_xml">正在安裝:%tw_file%</string> + <string name="failed">失敗</string> + <string name="successful">成功</string> + <string name="install_failed">安裝失敗</string> + <string name="install_successful">安裝成功</string> + <string name="wipe_cache_dalvik_btn">清除 Cache/Dalvik</string> + <string name="reboot_system_btn">重啟系統</string> + <string name="install_sel_target">選擇目標分區</string> + <string name="flash_image_select">選擇要刷入鏡像的分區:</string> + <string name="target_partition">目標分區:</string> + <string name="flashing_image">正在刷入鏡像…</string> + <string name="image_flashed">鏡像已刷入。</string> + <string name="wipe_cache_dalvik_confirm">是否清除 Cache 和 Dalvik?</string> + <string name="wiping_cache_dalvik">正在清除 Cache 和 Dalvik…</string> + <string name="wipe_cache_dalvik_complete">Cache 和 Dalvik 清除完成</string> + <string name="swipe_wipe">滑動按鈕確認清除</string> + <string name="swipe_wipe_s"> 清除</string> + <string name="no_os1">沒有安裝任何系統!</string> + <string name="no_osrb">您確定要重啟?</string> + <string name="no_ospo">您確定要關機?</string> + <string name="rebooting">正在重啟…</string> + <string name="swipe_reboot">滑動按鈕確認重啟</string> + <string name="swipe_reboot_s"> 重啟</string> + <string name="reboot_install_app_hdr">安裝 TWRP 應用?</string> + <string name="reboot_install_app1">您希望安裝官方 TWRP 應用嗎?</string> + <string name="reboot_install_app2">該應用可幫您檢查 TWRP 的最新版本。</string> + <string name="reboot_install_app_prompt_install">如果 TWRP 應用未安裝時提示我</string> + <string name="reboot_install_app_system">安裝為系統應用</string> + <string name="reboot_installing_app">正在安裝應用…</string> + <string name="swipe_to_install_app">滑動按鈕確認安裝</string> + <string name="swipe_flash">滑動按鈕確認刷入</string> + <string name="confirm_action">確認操作</string> + <string name="back_cancel">按返回按鈕取消。</string> + <string name="cancel_btn">取消</string> + <string name="wipe_hdr">清除</string> + <string name="factory_reset_hdr">恢復出廠設置(雙清)</string> + <string name="factory_reset_btn">恢復出廠</string> + <string name="factory_reset1">這將會清空 Data、Cache 分區和 Dalvik 緩存</string> + <string name="factory_reset2">(不會清除內置存儲/sdcard)</string> + <string name="factory_reset3">在大多數情況下,您只需要</string> + <string name="factory_reset4">執行此操作即可。</string> + <string name="factory_resetting">正在恢復出廠設置…</string> + <string name="advanced_wipe_hdr">高級清除選項</string> + <string name="advanced_wipe_btn">高級清除</string> + <string name="wipe_enc_confirm">是否清除 Data 分區加密?</string> + <string name="formatting_data">正在格式化 Data 分區…</string> + <string name="swipe_format_data">滑動按鈕確認格式化</string> + <string name="swipe_format_data_s"> 格式化 Data 分區</string> + <string name="factory_reset_complete">恢復出廠完成</string> + <string name="sel_part_hdr">選擇分區</string> + <string name="wipe_sel_confirm">是否清除所選的分區?</string> + <string name="wiping_part">正在清除分區…</string> + <string name="wipe_complete">清除完成</string> + <string name="sel_part_wipe">選擇要清除的分區:</string> + <string name="invalid_part_sel">無效的分區</string> + <string name="format_data_hdr">格式化 Data 分區</string> + <string name="format_data_btn">格式化 Data 分區</string> + <string name="format_data_ptr1">格式化 Data 分區將會清空您安裝的所有</string> + <string name="format_data_ptr2">軟體、備份、图片、媒體,</string> + <string name="format_data_ptr3">以及對內置存儲所做的加密等。</string> + <string name="format_data_adopted">也包括 Adopted 存儲</string> + <string name="format_data_lcp1">格式化 Data 分區將會清空您安裝的所有軟體、備份、圖片、媒體,</string> + <string name="format_data_lcp2">以及對內置存儲所做的加密等。</string> + <string name="format_data_wtc1">格式化 Data 分區會清除您的所有軟體</string> + <string name="format_data_wtc2">備份和媒體數據,無法撤銷。</string> + <string name="format_data_undo">執行此操作後將無法恢復。</string> + <string name="format_data_complete">格式化 Data 分區完成</string> + <!-- Translator note: the word "yes" must remain English! --> + <string name="yes_continue">輸入 yes 繼續,按返回按鈕取消。</string> + <string name="part_opt_hdr">分區名:%tw_partition_name%</string> + <string name="sel_act_hdr">選擇操作</string> + <string name="file_sys_opt">檔案系統選項</string> + <string name="partition">分區:%tw_partition_name%</string> + <string name="part_mount_point">掛載位置:%tw_partition_mount_point%</string> + <string name="part_curr_fs">檔案系統:%tw_partition_file_system%</string> + <string name="part_present_yes">當前:是</string> + <string name="part_present_no">當前:否</string> + <string name="part_removable_yes">可移除:是</string> + <string name="part_removable_no">可移除:否</string> + <string name="part_size">大小:%tw_partition_size%MB</string> + <string name="part_used">已用:%tw_partition_used%MB</string> + <string name="part_free">空閒:%tw_partition_free%MB</string> + <string name="part_backup_size">備份大小:%tw_partition_backup_size%MB</string> + <string name="resize_btn">調整檔案系統</string> + <string name="resize_btn_s">調整</string> + <string name="resize_confirm">是否調整 %tw_partition_name%?</string> + <string name="resizing">正在調整…</string> + <string name="resize_complete">調整完成</string> + <string name="swipe_resize">滑動按鈕確認調整</string> + <string name="swipe_resize_s"> 調整</string> + <string name="repair_btn">修復檔案系統</string> + <string name="repair_btn_s">修復</string> + <string name="repair_confirm">是否修復 %tw_partition_name%?</string> + <string name="repairing">正在修復…</string> + <string name="repair_complete">修復完成</string> + <string name="swipe_repair">滑動按鈕確認修復</string> + <string name="swipe_repair_s"> 修復</string> + <string name="change_fs_btn">更改檔案系統</string> + <string name="change_fs_btn_s">更改</string> + <string name="change_fs_for_hdr">要更改的分區:%tw_partition_name%</string> + <string name="change_fs_for_hdr_s">分區:%tw_partition_name%>選擇檔案系統</string> + <string name="change_fs_warn1">一些固件或內核可能不支持</string> + <string name="change_fs_warn2">某些檔案系統,請謹慎!</string> + <string name="change_fs_confirm">是否更改 %tw_partition_name% 為:</string> + <string name="formatting">正在格式化…</string> + <string name="format_complete">格式化完成</string> + <string name="swipe_change_fs">滑動按鈕確認更改</string> + <string name="swipe_change_s"> 更改</string> + <string name="back_btn">返回</string> + <string name="wipe_enc_btn">清除加密</string> + <string name="swipe_factory_reset">滑動按鈕確認恢復出廠</string> + <string name="repair_change_btn">修復或更改檔案系統</string> + <string name="storage_hdr">存儲位置:%tw_storage_display_name% (%tw_storage_free_size% MB)</string> + <string name="backup_hdr">備份</string> + <string name="backup_confirm_hdr">確認備份</string> + <string name="encryption_tab">加密</string> + <string name="encryption">加密:</string> + <string name="name">名稱:</string> + <string name="sel_part_backup">選擇要備份的分區:</string> + <string name="storage">儲存位置:</string> + <string name="enc_disabled">已禁用 - 設置密碼以啟用</string> + <string name="enc_enabled">已啟用</string> + <string name="enable_backup_comp_chk">啟用壓縮</string> + <string name="skip_md5_backup_chk">備份時跳過生成 MD5</string> + <string name="disable_backup_space_chk">禁用剩餘空間檢查</string> + <string name="current_boot_slot">當前分區:%tw_active_slot%</string> + <string name="boot_slot_a">分區 A</string> + <string name="boot_slot_b">分區 B</string> + <string name="changing_boot_slot">更改啟動分區</string> + <string name="changing_boot_slot_complete">更改啟動分區完成</string> + <string name="refresh_sizes_btn">刷新大小</string> + <string name="swipe_backup">滑動按鈕確認備份</string> + <string name="append_date_btn">附加日期</string> + <string name="backup_name_exists">使用該名稱的備份已經存在!</string> + <string name="encrypt_backup">是否加密備份?</string> + <string name="enter_pass">請輸入密碼:</string> + <string name="enter_pass2">請再輸入一遍:</string> + <string name="pass_not_match">密碼不匹配!</string> + <string name="partitions">分區:</string> + <string name="disabled">已禁用</string> + <string name="enabled">已啟用</string> + <string name="backup_name_hdr">設置備份名稱</string> + <string name="progress">進度:</string> + <string name="backup_complete">備份完成</string> + <string name="restore_hdr">恢復</string> + <string name="sel_backup_hdr">選擇備份</string> + <string name="restore_sel_store_hdr">從 %tw_storage_display_name% (%tw_storage_free_size% MB) 中選擇備份</string> + <string name="restore_sel_pack_fs">選擇要恢復的備份包:</string> + <string name="restore_enc_backup_hdr">備份已被加密</string> + <string name="restore_dec_fail">密碼錯誤,請重試</string> + <string name="del_backup_btn">刪除備份</string> + <string name="del_backup_confirm">是否刪除備份:</string> + <string name="del_backup_confirm2">此操作無法恢復!</string> + <string name="deleting_backup">正在刪除備份…</string> + <string name="backup_deleted">備份刪除完成</string> + <string name="swipe_delete">滑動按鈕確認刪除</string> + <string name="swipe_delete_s"> 刪除</string> + <string name="restore_try_decrypt">加密的備份 - 嘗試解密</string> + <string name="restore_try_decrypt_s">正在嘗試解密</string> + <string name="restore_backup_date">備份於 %tw_restore_file_date%</string> + <string name="restore_sel_part">選擇要恢復的分區:</string> + <string name="restore_enable_md5_chk">啟用 MD5 校驗備份檔案</string> + <string name="restore_complete">恢復完成</string> + <string name="swipe_restore">滑動按鈕確認恢復</string> + <string name="swipe_restore_s"> 恢復</string> + <string name="rename_backup_hdr">重命名備份</string> + <string name="rename_backup_confirm">是否重命名備份檔案?</string> + <string name="rename_backup_confirm2">此操作無法恢復!</string> + <string name="renaming_backup">正在重命名…</string> + <string name="rename_backup_complete">重命名完成</string> + <string name="swipe_to_rename">滑動按鈕確認重命名</string> + <string name="swipe_rename"> 重命名</string> + <string name="confirm_hdr">確認</string> + <string name="mount_hdr">掛載</string> + <string name="mount_sel_part">選擇要掛載的分區:</string> + <string name="mount_sys_ro_chk">掛載 System 分區為只讀</string> + <string name="mount_sys_ro_s_chk">掛載 System 為只讀</string> + <string name="decrypt_data_btn">解密 Data 分區</string> + <string name="disable_mtp_btn">啟用 MTP 模式</string> + <string name="enable_mtp_btn">停用 MTP 模式</string> + <string name="mount_usb_storage_btn">掛載 USB 存儲</string> + <string name="usb_storage_hdr">USB 存儲</string> + <string name="usb_stor_mnt1">已掛載 USB 存儲</string> + <string name="usb_stor_mnt2">從您的電腦卸載之前</string> + <string name="usb_stor_mnt3">一定要安全地移除設備!</string> + <string name="unmount_btn">卸載</string> + <string name="rb_system_btn">系統</string> + <string name="rb_poweroff_btn">關機</string> + <string name="rb_recovery_btn">Recovery</string> + <string name="rb_bootloader_btn">Bootloader</string> + <string name="rb_download_btn">Download</string> + <string name="turning_off">正在關機…</string> + <string name="swipe_power_off">滑動按鈕確認關機</string> + <string name="swipe_power_off_s">關機</string> + <string name="sys_ro_hdr">未修改的 System 分區</string> + <string name="sys_ro_keep">是否保持系統分區為只讀?</string> + <string name="sys_rop1">TWRP 可以保持系統分區未修改狀態</string> + <string name="sys_rop2">使您更容易獲得官方的更新。</string> + <string name="sys_rop3">TWRP 將無法禁止原廠固件可能</string> + <string name="sys_rop4">替換 TWRP 並且不能 Root 您的設備。</string> + <string name="sys_rop5">安裝刷機包或者通過 adb 操作依然可以</string> + <string name="sys_rop6">修改系統分區。</string> + <string name="sys_rol1">TWRP 可以保持系統分區為未修改狀態,使您更容易獲得官方的更新。</string> + <string name="sys_rol2">TWRP 將無法禁止原廠固件替換 TWRP,並且不能 Root 您的設備。</string> + <string name="sys_rol3">安裝刷機包或者通過 adb 操作依然可以修改系統分區。</string> + <string name="sys_ro_never_show_chk">下次啟動時不再顯示此介面</string> + <string name="sys_ro_keep_ro_btn">保持只讀</string> + <string name="swipe_allow_mod">滑動按鈕允許修改</string> + <string name="swipe_allow_mod_s">允許修改</string> + <string name="settings_hdr">設置</string> + <string name="settings_gen_hdr">常規</string> + <string name="settings_gen_s_hdr">常規</string> + <string name="settings_gen_btn">常規</string> + <string name="use_rmrf_chk">使用 rm -rf 命令代替格式化</string> + <string name="use24clock_chk">使用 24 小時制</string> + <string name="rev_navbar_chk">反轉底部按鈕佈局</string> + <string name="simact_chk">為測試主題使用模擬操作</string> + <string name="simfail_chk">模擬失敗操作</string> + <string name="ctr_navbar_rdo">導航欄按鈕居中</string> + <string name="lft_navbar_rdo">導航欄按鈕左對齊</string> + <string name="rht_navbar_rdo">導航欄按鈕右對齊</string> + <string name="restore_defaults_btn">恢復默認設置</string> + <string name="settings_tz_btn">時區</string> + <string name="settings_screen_btn">螢幕</string> + <string name="settings_screen_bright_btn">螢幕亮度</string> + <string name="settings_vibration_btn">振動</string> + <string name="settings_language_btn">語言</string> + <string name="time_zone_hdr">時區</string> + <string name="sel_tz_list">選擇時區:</string> + <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense, + feel free to change the location listed or drop the location entirely and just call it UTC -6 --> + <string name="utcm11">(UTC -11) 美屬薩摩亞、中途島</string> + <string name="utcm10">(UTC -10) 夏威夷</string> + <string name="utcm9">(UTC -9) 阿拉斯加</string> + <string name="utcm8">(UTC -8) 太平洋標準時間</string> + <string name="utcm7">(UTC -7) 北美山區標準時間</string> + <string name="utcm6">(UTC -6) 北美中部標準時間</string> + <string name="utcm5">(UTC -5) 北美東部標準時間</string> + <string name="utcm4">(UTC -4) 大西洋標準時間</string> + <string name="utcm3">(UTC -3) 巴西、阿根廷(布宜諾斯)</string> + <string name="utcm2">(UTC -2) 大西洋中部</string> + <string name="utcm1">(UTC -1) 葡萄牙(亞速爾群島),佛得角</string> + <string name="utc0">(UTC 0) 倫敦、都柏林、里斯本</string> + <string name="utcp1">(UTC +1) 柏林、布魯塞爾、巴黎</string> + <string name="utcp2">(UTC +2) 雅典、伊斯坦布爾、南非</string> + <string name="utcp3">(UTC +3) 莫斯科、巴格達</string> + <string name="utcp4">(UTC +4) 阿布扎比、第比利斯、馬斯喀特</string> + <string name="utcp5">(UTC +5) 葉卡捷琳堡、伊斯蘭堡</string> + <string name="utcp6">(UTC +6) 阿拉木圖、達卡、可倫坡</string> + <string name="utcp7">(UTC +7) 曼谷、河內、雅加達</string> + <string name="utcp8">(UTC +8) 北京、新加坡、香港</string> + <string name="utcp9">(UTC +9) 東京、首爾、雅庫茨克</string> + <string name="utcp10">(UTC +10) 澳大利亞東部、關島</string> + <string name="utcp11">(UTC +11) 符拉迪沃斯托克、所羅門群島</string> + <string name="utcp12">(UTC +12) 奧克蘭、惠靈頓、斐濟</string> + <string name="sel_tz_offset">時間偏差(通常為 0):%tw_time_zone_guioffset%</string> + <string name="tz_offset_none">無</string> + <string name="tz_offset_0">0 分鐘</string> + <string name="tz_offset_15">15 分鐘</string> + <string name="tz_offset_30">30 分鐘</string> + <string name="tz_offset_45">45 分鐘</string> + <string name="use_dst_chk">使用夏令時 (DST)</string> + <string name="curr_tz">當前時區:%tw_time_zone%</string> + <string name="curr_tz_s">當前時區:</string> + <string name="set_tz_btn">設置時區</string> + <string name="settings_screen_hdr">螢幕</string> + <string name="settings_screen_timeout_hdr">螢幕超時</string> + <string name="enable_timeout_chk">啟用螢幕超時</string> + <string name="screen_to_slider">螢幕超時時間(秒):</string> + <string name="screen_to_slider_s">螢幕超時(0=禁用):%tw_screen_timeout_secs%</string> + <string name="screen_to_na">螢幕超時設置不可用</string> + <string name="screen_bright_slider">螢幕亮度:%tw_brightness_pct%%</string> + <string name="screen_bright_na">螢幕亮度設置不可用</string> + <string name="vibration_hdr">振動</string> + <string name="button_vibration_hdr">按鈕振動</string> + <string name="kb_vibration_hdr">鍵盤振動</string> + <string name="act_vibration_hdr">操作振動</string> + <string name="button_vibration">按鈕振動強度:</string> + <string name="kb_vibration">鍵盤振動強度:</string> + <string name="act_vibration">操作振動強度:</string> + <string name="select_language">選擇語言:</string> + <string name="sel_lang_btn">選擇語言</string> + <string name="set_language_btn">設置語言</string> + <string name="advanced_hdr">高級選項</string> + <string name="copy_log_confirm">是否導出日誌到內置存儲?</string> + <string name="copying_log" version="2">正在複製…</string> + <string name="copy_log_complete" version="2">日誌導出完成</string> + <string name="fix_context_btn">修復 Context</string> + <string name="part_sd_btn">分區 SD 卡</string> + <string name="part_sd_s_btn">SD 卡</string> + <string name="file_manager_btn">檔案管理</string> + <string name="language_hdr">語言</string> + <string name="terminal_btn">終端命令</string> + <string name="reload_theme_btn">重載主題</string> + <string name="dumlock_btn">HTC Dumlock</string> + <string name="inject_twrp_btn">注入 TWRP</string> + <string name="inject_twrp_confirm">是否重新注入 TWRP?</string> + <string name="injecting_twrp">正在重新注入 TWRP…</string> + <string name="inject_twrp_complete">TWRP 注入完成</string> + <string name="swipe_to_confirm">滑動按鈕確認</string> + <string name="part_sd_hdr">SD 卡分區</string> + <string name="invalid_partsd_sel">您必須選擇一個可移動設備</string> + <string name="part_sd_lose">您將會丟失 SD 卡上的所有檔案!</string> + <string name="part_sd_undo">此操作無法恢復!</string> + <string name="part_sd_ext_sz">EXT 大小:</string> + <string name="part_sd_swap_sz">Swap 大小:</string> + <string name="part_sd_m">-</string> + <string name="part_sd_p">+</string> + <string name="file_system">檔案系統:</string> + <string name="swipe_part_sd">滑動按鈕確認分區</string> + <string name="swipe_part_sd_s">分區</string> + <string name="partitioning_sd">正在對 SD 卡分區…</string> + <string name="partitioning_sd2">這將需要幾分鐘的時間。</string> + <string name="part_sd_complete">分區完成</string> + <string name="dumlock_hdr">HTC Dumlock</string> + <string name="dumlock_restore_btn">恢復原版 Boot 鏡像</string> + <string name="dumlock_restore_confirm">是否恢復原版 Boot 鏡像?</string> + <string name="dumlock_restoring">正在恢復原版 Boot 鏡像…</string> + <string name="dumlock_restore_complete">恢復原版 Boot 鏡像完成。</string> + <string name="dumlock_reflash_btn">重新刷入 Recovery</string> + <string name="dumlock_reflash_confirm">是否重新刷入 Recovery 至 Boot 分區?</string> + <string name="dumlock_reflashing">正在刷入 Recovery 至 Boot 分區…</string> + <string name="dumlock_reflash_complete">Recovery 刷入完成</string> + <string name="dumlock_install_btn">安裝 HTC Dumlock</string> + <string name="dumlock_install_confirm">是否安裝 HTC Dumlock 檔案到系統中?</string> + <string name="dumlock_installing">正在安裝 HTC Dumlock…</string> + <string name="dumlock_install_complete">HTC Dumlock 安裝完成</string> + <string name="swipe_to_unlock">滑動按鈕解鎖</string> + <string name="swipe_unlock"> 解鎖</string> + <string name="fm_hdr">檔案管理</string> + <string name="fm_sel_file">選擇檔案或檔案夾</string> + <string name="fm_type_folder">檔案夾</string> + <string name="fm_type_file">檔案</string> + <string name="fm_choose_act">選擇操作</string> + <string name="fm_selected">已選擇:%tw_fm_type%</string> + <string name="fm_copy_btn">複製</string> + <string name="fm_copy_file_btn">複製檔案</string> + <string name="fm_copy_folder_btn">複製檔案夾</string> + <string name="fm_copying">正在複製</string> + <string name="fm_move_btn">移動</string> + <string name="fm_moving">正在移動</string> + <string name="fm_chmod755_btn">chmod 755</string> + <string name="fm_chmod755ing">chmod 755</string> + <string name="fm_chmod_btn">chmod</string> + <string name="fm_delete_btn">刪除</string> + <string name="fm_deleting">正在刪除</string> + <string name="fm_rename_btn">重命名</string> + <string name="fm_rename_file_btn">重命名檔案</string> + <string name="fm_rename_folder_btn">重命名檔案夾</string> + <string name="fm_renaming">正在重命名</string> + <string name="fm_sel_dest">選擇目標目錄</string> + <string name="fm_sel_curr_folder">選擇當前目錄</string> + <string name="fm_rename_hdr">重命名</string> + <string name="fm_set_perms_hdr">設置許可權</string> + <string name="fm_perms">許可權:</string> + <string name="fm_complete">操作完成</string> + <string name="decrypt_data_hdr">解密 Data 分區</string> + <string name="decrypt_data_enter_pass">請輸入密碼。</string> + <string name="decrypt_data_failed">密碼錯誤,請重試!</string> + <string name="decrypt_data_failed_pattern">圖案錯誤,請重試!</string> + <string name="decrypt_data_enter_pattern">繪製解鎖圖案</string> + <string name="decrypt_data_trying">正在嘗試解密</string> + <string name="term_hdr">終端命令</string> + <string name="term_s_hdr">終端</string> + <string name="term_kill_btn">終止</string> + <string name="term_sel_folder_hdr">選擇運行目錄</string> + <string name="adb_sideload_hdr">ADB Sideload</string> + <string name="sideload_wipe_dalvik_chk">清除 Dalvik Cache</string> + <string name="sideload_wipe_cache_chk">清除 Cache</string> + <string name="swipe_to_sideload">滑動按鈕開始 Sideload</string> + <string name="swipe_sideload"> 開始</string> + <string name="sideload_confirm">ADB Sideload</string> + <string name="sideload_usage">使用方式:adb sideload filename.zip</string> + <string name="sideload_complete">ADB Sideload 完成</string> + <string name="fix_contexts_hdr">修復 Context</string> + <string name="fix_contexts_note1">注意:很少情況下需要修復 Context。</string> + <string name="fix_contexts_note2">修復 SELinux Context 可能會導致</string> + <string name="fix_contexts_note3">您的設備無法正常啓動。</string> + <string name="swipe_to_fix_contexts">滑動按鈕確認修復</string> + <string name="swipe_fix_contexts"> 修復 Context</string> + <string name="fixing_contexts">正在修復 Context…</string> + <string name="fix_contexts_complete">修復 Context 完成</string> + <string name="reboot_hdr">重啟選項</string> + <string name="su_hdr">SuperSU 檢測</string> + <string name="su_note1">系統目前沒有 Root。</string> + <string name="su_note2">是否現在安裝 SuperSU?</string> + <string name="su_note3">這將會 Root 您的設備。</string> + <string name="su_cancel">不,以後再說</string> + <string name="swipe_su_to_install">滑動按鈕確認安裝</string> + <string name="swipe_su_install"> 安裝</string> + <string name="su_installing">正在安裝 SuperSU</string> + <string name="sel_storage_list">選擇存儲位置</string> + <string name="ok_btn">確定</string> + + <!-- Various console messages - these consist of user displayed messages, oftentimes errors --> + <string name="no_kernel_selinux">內核不支持讀取 SELinux Context。</string> + <string name="full_selinux">完整 SELinux 支持。</string> + <string name="no_selinux">無 SELinux 支持(無 libselinux)。</string> + <string name="mtp_enabled">MTP 已啟用</string> + <string name="mtp_crash">MTP 已崩潰。啟動時不再加載 MTP。</string> + <string name="decrypt_success">已使用默認密碼解密成功。</string> + <string name="unable_to_decrypt">無法使用默認密碼來解密,您可能需要格式化 Data 分區。</string> + <string name="generating_md51">正在生成 MD5</string> + <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text --> + <string name="generating_md52"> * 正在生成 MD5…</string> + <string name="md5_created"> * MD5 已生成。</string> + <string name="md5_error"> * MD5 錯誤!</string> + <string name="md5_compute_error"> * 計算 MD5 錯誤。</string> + <string name="current_date">(Current Date)</string> + <string name="auto_generate">(Auto Generate)</string> + <string name="unable_to_locate_partition">未找到 '{1}' 分區。</string> + <string name="no_partition_selected">未選擇備份分區。</string> + <string name="total_partitions_backup"> * 備份分區總數:{1}</string> + <string name="total_backup_size"> * 備份數據總計:{1}MB</string> + <string name="available_space"> * 可用空間:{1}MB</string> + <string name="unable_locate_storage">未找到存儲設備。</string> + <string name="no_space">記憶體上沒有足夠的空間。</string> + <string name="backup_started">[已開始備份]</string> + <string name="backup_folder"> * 備份檔案夾:{1}</string> + <string name="fail_backup_folder">建立備份檔案夾失敗。</string> + <string name="avg_backup_fs">檔案平均備份速度:{1}MB/秒</string> + <string name="avg_backup_img">鏡像平均備份速度:{1}MB/秒</string> + <string name="total_backed_size">[總計備份 {1}MB]</string> + <string name="backup_completed">[備份已完成,耗時 {1} 秒]</string> + <string name="restore_started">[已開始恢復]</string> + <string name="restore_folder">恢復檔案夾:'{1}'</string> + <!-- {1} is the partition display name and {2} is the number of seconds --> + <string name="restore_part_done">[{1} 恢復完成({2} 秒)]</string> + <string name="verifying_md5">正在校驗 MD5</string> + <string name="skip_md5">基於用戶設置,已跳過 MD5 檢查。</string> + <string name="calc_restore">正在計算恢復詳情…</string> + <string name="restore_read_only">無法恢復 {1} -- 已掛載為只讀。</string> + <string name="restore_unable_locate">未找到 '{1}' 分區。</string> + <string name="no_part_restore">未選擇要恢復的分區。</string> + <string name="restore_part_count">正在恢復 {1} 個分區…</string> + <string name="total_restore_size">恢復檔案總計 {1}MB</string> + <string name="updating_system_details">更新系統詳細資訊</string> + <string name="restore_completed">[恢復完成,耗時 {1} 秒]</string> + <!-- {1} is the path we could not open, {2} is strerror output --> + <string name="error_opening_strerr">打開出錯:'{1}' ({2})</string> + <string name="unable_locate_part_backup_name">無法通過備份名稱來查找分區:'{1}'</string> + <string name="unable_find_part_path">找不到分區路徑 '{1}'</string> + <string name="update_part_details">正在更新分區詳情…</string> + <string name="update_part_details_done">…完成</string> + <string name="wiping_dalvik">正在清除 Dalvik Cache 目錄…</string> + <string name="cleaned">已清除:{1}…</string> + <string name="dalvik_done">-- Dalvik Cache 清除完成!</string> + <string name="no_andsec">未發現 android secure 分區。</string> + <string name="unable_to_locate">未找到 {1}。</string> + <string name="wiping_datamedia">清除內置存儲 -- /data/media…</string> + <string name="unable_to_mount">無法掛載 {1}</string> + <string name="unable_to_mount_internal">無法掛載內置存儲</string> + <string name="unable_to_mount_storage">無法掛載存儲</string> + <string name="fail_decrypt">解密數據失敗。</string> + <string name="no_crypto_support">此版本不支持加密。</string> + <string name="decrypt_success_dev">Data 分區成功解密,新增塊設備:'{1}'</string> + <string name="decrypt_success_nodev">Data 分區已成功解密</string> + <string name="done">完成。</string> + <string name="start_partition_sd">正在給 SD 卡分區…</string> + <string name="partition_sd_locate">未找到需要分區的設備。</string> + <string name="ext_swap_size">EXT+Swap 大小超過 SD 卡容量。</string> + <string name="remove_part_table">正在刪除分區表…</string> + <string name="unable_rm_part">無法刪除分區表。</string> + <string name="create_part">正在建立 {1} 分區…</string> + <string name="unable_to_create_part">無法建立 {1} 分區。</string> + <string name="format_sdext_as">正在將 sd-ext 格式化為 {1}…</string> + <string name="part_complete">分區完成。</string> + <string name="unable_to_open">無法打開 '{1}'。</string> + <string name="mtp_already_enabled">MTP 已經啟用</string> + <string name="mtp_fail">啟用 MTP 失敗</string> + <string name="no_mtp">不支持 MTP</string> + <string name="image_flash_start">[開始刷入鏡像]</string> + <string name="img_to_flash">刷入鏡像:'{1}'</string> + <string name="flash_unable_locate">未找到 '{1}' 分區。</string> + <string name="no_part_flash">未選擇刷入分區。</string> + <string name="too_many_flash">選擇刷入的分區太多。</string> + <string name="invalid_flash">指定的刷入分區無效。</string> + <string name="flash_done">[鏡像刷入完成]</string> + <string name="wiping">正在清除 {1}</string> + <string name="repair_not_exist">{1} 不存在!無法修復!</string> + <string name="repairing_using">正在使用 {2} 修復 {1}…</string> + <string name="unable_repair">無法修復 {1}。</string> + <string name="mount_data_footer">無法掛載/data,未找到加密 footer。</string> + <!-- {1} is the folder name that we could not create, {2} is strerror output --> + <string name="create_folder_strerr">無法創建 '{1}' 檔案夾 ({2})。</string> + <!-- {1} is the folder name that we could not mount, {2} is strerror output --> + <string name="fail_mount">掛載 '{1}' 失敗 ({2})</string> + <!-- {1} is the folder name that we could not unmount, {2} is strerror output --> + <string name="fail_unmount">卸載 '{1}' 失敗 ({2})</string> + <string name="cannot_resize">無法更改 {1} 大小。</string> + <string name="repair_resize">在調整大小之前修復 {1}。</string> + <string name="unable_resize">無法調整 {1} 大小。</string> + <string name="no_md5_found">未找到 '{1}' 的 MD5 校驗檔案。請取消選中“啟用 MD5 校驗備份檔案”複選框。</string> + <string name="md5_fail_match">'{1}' MD5 校驗失敗。</string> + <string name="md5_matched">MD5 匹配 '{1}'。</string> + <string name="fail_decrypt_tar">無法解密 tar 檔案 '{1}'</string> + <string name="format_data_msg">您可能需要重啟 Recovery 才能使用/data。</string> + <string name="format_data_err">無法格式化並刪除加密。</string> + <string name="formatting_using">使用 {2} 格式化 {1}…</string> + <string name="unable_to_wipe">無法清除 {1}。</string> + <string name="cannot_wipe">無法清除 {1} 分區。</string> + <string name="remove_all">移除 '{1}' 下的所有檔案</string> + <string name="wiping_data">正在清除 Data 分区,跳過清除/data/media…</string> + <string name="backing_up">正在備份 {1}…</string> + <string name="backup_storage_warning">備份的 {1} 分區不包含內置存儲上的任何檔案,例如照片或下載的檔案等等。</string> + <string name="backing">正在備份</string> + <string name="backup_size">'{1}' 的備份檔案大小為 0 位元組。</string> + <string name="datamedia_fs_restore">警告:此/data備份檔案系統為 {1}!除非把檔案系統格式設置為 {1} 否則可能無法啟動。</string> + <string name="restoring">正在恢復 {1}…</string> + <string name="restoring_hdr">正在恢復</string> + <string name="recreate_folder_err">無法重新創建 {1} 檔案夾。</string> + <string name="img_size_err">鏡像大小大於目標設備</string> + <string name="flashing">正在刷入 {1}…</string> + <string name="backup_folder">備份檔案夾設置為:'{1}'</string> + <string name="locate_backup_err">未找到備份檔案 '{1}'</string> + <string name="set_restore_opt">設置恢復選項:'{1}':</string> + <string name="md5_check_skip">跳過校驗 MD5 已開啟</string> + <string name="ors_encrypt_restore_err">無法使用 OpenRecoveryScript 腳本恢復加密備份。</string> + <string name="mounting">正在掛載</string> + <string name="unmounting">正在卸載</string> + <string name="mounted">'{1}' 已掛載</string> + <string name="unmounted">'{1}' 已卸載</string> + <string name="setting">設置 '{1}' 為 '{2}'</string> + <string name="setting_empty">設置 '{1}' 為空</string> + <string name="making_dir1">創建目錄</string> + <string name="making_dir2">創建目錄:'{1}'</string> + <string name="running_command">運行命令</string> + <string name="sideload">ADB Sideload</string> + <string name="start_sideload">正在開始 ADB sideload…</string> + <string name="need_new_adb">您需要 1.0.32 或更高版本的 adb 才可以使用。</string> + <string name="no_pwd">未提供密碼。</string> + <string name="done_ors">腳本執行完畢</string> + <string name="injecttwrp">正在注入 TWRP 到 Boot 鏡像…</string> + <string name="zip_err">安裝 Zip 刷機包 '{1}' 時出錯</string> + <string name="installing_zip">正在安裝 Zip 刷機包 '{1}'</string> + <string name="select_backup_opt">設置備份選項:</string> + <string name="compression_on">壓縮選項已開啟</string> + <string name="md5_off">MD5 生成已關閉</string> + <string name="backup_fail">備份失敗</string> + <string name="backup_clean">備份失敗。正在清理備份檔案夾。</string> + <string name="running_recovery_commands">運行 Recovery 命令</string> + <string name="recovery_commands_complete">Recovery 命令執行完成</string> + <string name="running_ors">運行 OpenRecoveryScript 腳本</string> + <string name="ors_complete">運行 OpenRecoveryScript 腳本完成</string> + <string name="invalid_zip_format">Zip 檔案格式無效!</string> + <string name="check_for_md5">正在檢測 MD5…</string> + <string name="fail_sysmap">映射檔案 '{1}' 失敗</string> + <string name="verify_zip_sig">正在校驗 Zip 刷機包簽名…</string> + <string name="verify_zip_fail">刷機包簽名校驗失敗!</string> + <string name="verify_zip_done">刷機包簽名校驗成功。</string> + <string name="zip_corrupt">刷機包已損壞!</string> + <string name="no_md5">跳過 MD5 校驗:未找到 MD5 檔案</string> + <string name="md5_fail">MD5 不匹配</string> + <string name="md5_match">MD5 校驗成功</string> + <string name="pid_signal">{1} 過程結束,標誌:{2}</string> + <string name="pid_error">{1} 過程結束,錯誤:{2}</string> + <string name="install_dumlock">安裝 HTC Dumlock 到系統…</string> + <string name="dumlock_restore">正在恢復原版 Boot…</string> + <string name="dumlock_reflash">正在重新刷入 Recovery 到 Boot…</string> + <string name="run_script">正在運行 {1} 腳本…</string> + <string name="rename_stock">重命名/system 下原版 Recovery 的補丁,避免原廠固件替換 TWRP。</string> + <string name="split_backup">分解備份檔案為多個壓縮檔…</string> + <string name="backup_error">建立備份失敗。</string> + <string name="restore_error">在恢復過程中發生錯誤。</string> + <string name="split_thread">拆分線程 ID {1} 到壓縮檔 {2}</string> + <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} --> + <string name="file_progress">已完成 %llu 個,共 %llu 個檔案,進度 %i%%</string> + <string name="size_progress">已完成 %lluMB,共 %lluMB,進度 %i%%</string> + <string name="decrypt_cmd">嘗試通過命令行解密 Data 分區。</string> + <string name="base_pkg_err">無法加載基本包。</string> + <string name="simulating">正在模擬操作…</string> + <string name="backup_cancel">備份已取消。</string> + <string name="config_twrp">正在配置 TWRP…</string> + <string name="config_twrp_err">此內核無法配置 TWRP。</string> + <string name="copy_log">已經導出 Recovery 日誌到 {1}。</string> + <string name="max_queue">已達到最大刷機包刷入佇列!</string> + <string name="min_queue">已達到最大刷機包刷入佇列!</string> + <string name="screenshot_saved">截圖已保存到:{1}</string> + <string name="screenshot_err">截圖失敗!</string> + <string name="zip_wipe_cache">一個或多個刷機包請求清除 cache -- 正在清除 cache。</string> + <string name="and_sec_wipe_err">無法清除 android secure</string> + <string name="dalvik_wipe_err">清除 Dalvik 失敗</string> + <string name="auto_gen">(Auto Generate)</string> + <string name="curr_date">(Current Date)</string> + <string name="backup_name_len">備份名稱太長。</string> + <string name="backup_name_invalid">備份名稱 '{1}' 中包含無效字元:'{1}'</string> + <string name="no_real_sdcard">此設備沒有真實的 SD 卡!正在中止!</string> + <string name="cancel_sideload">取消 ADB Sideload…</string> + <string name="change_fs_err">更換檔案系統时出錯。</string> + <string name="theme_ver_err">自定義主題和 TWRP 版本不匹配,正使用默認主題。</string> + <string name="up_a_level">(上級目錄)</string> + <string name="install_reboot" version="2">將會在 %tw_sleep% 秒內重啟</string> + <string name="adbbackup_error">ADB 備份錯誤。正在退出…"</string> + <string name="adbbackup_control_error">無法寫入 adb 控制通道</string> + <string name="twrp_adbbu_option">--twrp 選項需啟用 twrp adb backup</string> + <string name="partition_not_found">分區列表中未發現路徑:{1}</string> + <string name="copy_kernel_log">已導出內核日誌至 {1}</string> + <string name="include_kernel_log">包含內核日誌</string> + <string name="unable_set_boot_slot">更改 bootloader 啟動分區至 {1} 錯誤</string> + </resources> +</language> diff --git a/gui/theme/landscape_hdpi/images/back.png b/gui/theme/landscape_hdpi/images/back.png Binary files differnew file mode 100644 index 000000000..e67a88b40 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/back.png diff --git a/gui/theme/landscape_hdpi/images/backspace.png b/gui/theme/landscape_hdpi/images/backspace.png Binary files differnew file mode 100644 index 000000000..1d78402af --- /dev/null +++ b/gui/theme/landscape_hdpi/images/backspace.png diff --git a/gui/theme/landscape_hdpi/images/backspace_terminal.png b/gui/theme/landscape_hdpi/images/backspace_terminal.png Binary files differnew file mode 100644 index 000000000..8686f83e1 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/backspace_terminal.png diff --git a/gui/theme/landscape_hdpi/images/checkbox_false.png b/gui/theme/landscape_hdpi/images/checkbox_false.png Binary files differnew file mode 100644 index 000000000..5e72143f1 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/checkbox_false.png diff --git a/gui/theme/landscape_hdpi/images/checkbox_true.png b/gui/theme/landscape_hdpi/images/checkbox_true.png Binary files differnew file mode 100644 index 000000000..aacb591c5 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/checkbox_true.png diff --git a/gui/theme/landscape_hdpi/images/console.png b/gui/theme/landscape_hdpi/images/console.png Binary files differnew file mode 100644 index 000000000..861a7a7da --- /dev/null +++ b/gui/theme/landscape_hdpi/images/console.png diff --git a/gui/theme/landscape_hdpi/images/cursor.png b/gui/theme/landscape_hdpi/images/cursor.png Binary files differnew file mode 100644 index 000000000..3513d065d --- /dev/null +++ b/gui/theme/landscape_hdpi/images/cursor.png diff --git a/gui/theme/landscape_hdpi/images/enter.png b/gui/theme/landscape_hdpi/images/enter.png Binary files differnew file mode 100644 index 000000000..b7154ca97 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/enter.png diff --git a/gui/theme/landscape_hdpi/images/enter_terminal.png b/gui/theme/landscape_hdpi/images/enter_terminal.png Binary files differnew file mode 100644 index 000000000..0e1bcf1fd --- /dev/null +++ b/gui/theme/landscape_hdpi/images/enter_terminal.png diff --git a/gui/theme/landscape_hdpi/images/file.png b/gui/theme/landscape_hdpi/images/file.png Binary files differnew file mode 100644 index 000000000..f69d35f5d --- /dev/null +++ b/gui/theme/landscape_hdpi/images/file.png diff --git a/gui/theme/landscape_hdpi/images/folder.png b/gui/theme/landscape_hdpi/images/folder.png Binary files differnew file mode 100644 index 000000000..656d84500 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/folder.png diff --git a/gui/theme/landscape_hdpi/images/handle.png b/gui/theme/landscape_hdpi/images/handle.png Binary files differnew file mode 100644 index 000000000..996426dc3 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/handle.png diff --git a/gui/theme/landscape_hdpi/images/home.png b/gui/theme/landscape_hdpi/images/home.png Binary files differnew file mode 100644 index 000000000..de2eea849 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/home.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate001.png b/gui/theme/landscape_hdpi/images/indeterminate001.png Binary files differnew file mode 100644 index 000000000..7582e036f --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate001.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate002.png b/gui/theme/landscape_hdpi/images/indeterminate002.png Binary files differnew file mode 100644 index 000000000..e205c9051 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate002.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate003.png b/gui/theme/landscape_hdpi/images/indeterminate003.png Binary files differnew file mode 100644 index 000000000..65c3a1319 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate003.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate004.png b/gui/theme/landscape_hdpi/images/indeterminate004.png Binary files differnew file mode 100644 index 000000000..7aeb1fdb7 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate004.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate005.png b/gui/theme/landscape_hdpi/images/indeterminate005.png Binary files differnew file mode 100644 index 000000000..58cd2a440 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate005.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate006.png b/gui/theme/landscape_hdpi/images/indeterminate006.png Binary files differnew file mode 100644 index 000000000..53cedf439 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate006.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate007.png b/gui/theme/landscape_hdpi/images/indeterminate007.png Binary files differnew file mode 100644 index 000000000..a11e9101b --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate007.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate008.png b/gui/theme/landscape_hdpi/images/indeterminate008.png Binary files differnew file mode 100644 index 000000000..da5b768cb --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate008.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate009.png b/gui/theme/landscape_hdpi/images/indeterminate009.png Binary files differnew file mode 100644 index 000000000..302674a93 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate009.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate010.png b/gui/theme/landscape_hdpi/images/indeterminate010.png Binary files differnew file mode 100644 index 000000000..17b8531a7 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate010.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate011.png b/gui/theme/landscape_hdpi/images/indeterminate011.png Binary files differnew file mode 100644 index 000000000..1ed053141 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate011.png diff --git a/gui/theme/landscape_hdpi/images/indeterminate012.png b/gui/theme/landscape_hdpi/images/indeterminate012.png Binary files differnew file mode 100644 index 000000000..977da990d --- /dev/null +++ b/gui/theme/landscape_hdpi/images/indeterminate012.png diff --git a/gui/theme/landscape_hdpi/images/kb_arrow_down.png b/gui/theme/landscape_hdpi/images/kb_arrow_down.png Binary files differnew file mode 100644 index 000000000..65b384686 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_arrow_down.png diff --git a/gui/theme/landscape_hdpi/images/kb_arrow_left.png b/gui/theme/landscape_hdpi/images/kb_arrow_left.png Binary files differnew file mode 100644 index 000000000..a46e519e9 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_arrow_left.png diff --git a/gui/theme/landscape_hdpi/images/kb_arrow_right.png b/gui/theme/landscape_hdpi/images/kb_arrow_right.png Binary files differnew file mode 100644 index 000000000..3c1a59f27 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_arrow_right.png diff --git a/gui/theme/landscape_hdpi/images/kb_arrow_up.png b/gui/theme/landscape_hdpi/images/kb_arrow_up.png Binary files differnew file mode 100644 index 000000000..e5228c3fd --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_arrow_up.png diff --git a/gui/theme/landscape_hdpi/images/kb_hide.png b/gui/theme/landscape_hdpi/images/kb_hide.png Binary files differnew file mode 100644 index 000000000..88974cc86 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_hide.png diff --git a/gui/theme/landscape_hdpi/images/kb_show.png b/gui/theme/landscape_hdpi/images/kb_show.png Binary files differnew file mode 100644 index 000000000..3c09214c9 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/kb_show.png diff --git a/gui/theme/landscape_hdpi/images/logo.png b/gui/theme/landscape_hdpi/images/logo.png Binary files differnew file mode 100644 index 000000000..a8f225451 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/logo.png diff --git a/gui/theme/landscape_hdpi/images/main_button.png b/gui/theme/landscape_hdpi/images/main_button.png Binary files differnew file mode 100644 index 000000000..1b491ae0c --- /dev/null +++ b/gui/theme/landscape_hdpi/images/main_button.png diff --git a/gui/theme/landscape_hdpi/images/main_button_half_width.png b/gui/theme/landscape_hdpi/images/main_button_half_width.png Binary files differnew file mode 100644 index 000000000..e9a47ce6a --- /dev/null +++ b/gui/theme/landscape_hdpi/images/main_button_half_width.png diff --git a/gui/theme/landscape_hdpi/images/main_button_half_width_low.png b/gui/theme/landscape_hdpi/images/main_button_half_width_low.png Binary files differnew file mode 100644 index 000000000..cb7e1df37 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/main_button_half_width_low.png diff --git a/gui/theme/landscape_hdpi/images/progress_empty.png b/gui/theme/landscape_hdpi/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..4e35f3df3 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/progress_empty.png diff --git a/gui/theme/landscape_hdpi/images/progress_fill.png b/gui/theme/landscape_hdpi/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..10465982d --- /dev/null +++ b/gui/theme/landscape_hdpi/images/progress_fill.png diff --git a/gui/theme/landscape_hdpi/images/radio_false.png b/gui/theme/landscape_hdpi/images/radio_false.png Binary files differnew file mode 100644 index 000000000..cc7c270bf --- /dev/null +++ b/gui/theme/landscape_hdpi/images/radio_false.png diff --git a/gui/theme/landscape_hdpi/images/radio_true.png b/gui/theme/landscape_hdpi/images/radio_true.png Binary files differnew file mode 100644 index 000000000..3e041c3d5 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/radio_true.png diff --git a/gui/theme/landscape_hdpi/images/shift.png b/gui/theme/landscape_hdpi/images/shift.png Binary files differnew file mode 100644 index 000000000..5b3e90823 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/shift.png diff --git a/gui/theme/landscape_hdpi/images/shift_fill.png b/gui/theme/landscape_hdpi/images/shift_fill.png Binary files differnew file mode 100644 index 000000000..5c10629ad --- /dev/null +++ b/gui/theme/landscape_hdpi/images/shift_fill.png diff --git a/gui/theme/landscape_hdpi/images/shift_terminal.png b/gui/theme/landscape_hdpi/images/shift_terminal.png Binary files differnew file mode 100644 index 000000000..49ebdb337 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/shift_terminal.png diff --git a/gui/theme/landscape_hdpi/images/shift_terminal_fill.png b/gui/theme/landscape_hdpi/images/shift_terminal_fill.png Binary files differnew file mode 100644 index 000000000..4f98aaa80 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/shift_terminal_fill.png diff --git a/gui/theme/landscape_hdpi/images/slider.png b/gui/theme/landscape_hdpi/images/slider.png Binary files differnew file mode 100644 index 000000000..2921679d4 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/slider.png diff --git a/gui/theme/landscape_hdpi/images/slider_touch.png b/gui/theme/landscape_hdpi/images/slider_touch.png Binary files differnew file mode 100644 index 000000000..63dd52f87 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/slider_touch.png diff --git a/gui/theme/landscape_hdpi/images/slider_used.png b/gui/theme/landscape_hdpi/images/slider_used.png Binary files differnew file mode 100644 index 000000000..355c580b9 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/slider_used.png diff --git a/gui/theme/landscape_hdpi/images/sort_asc.png b/gui/theme/landscape_hdpi/images/sort_asc.png Binary files differnew file mode 100644 index 000000000..28e0f9d65 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/sort_asc.png diff --git a/gui/theme/landscape_hdpi/images/sort_desc.png b/gui/theme/landscape_hdpi/images/sort_desc.png Binary files differnew file mode 100644 index 000000000..71d8695b7 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/sort_desc.png diff --git a/gui/theme/landscape_hdpi/images/sort_empty.png b/gui/theme/landscape_hdpi/images/sort_empty.png Binary files differnew file mode 100644 index 000000000..bf6e0a5e5 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/sort_empty.png diff --git a/gui/theme/landscape_hdpi/images/space.png b/gui/theme/landscape_hdpi/images/space.png Binary files differnew file mode 100644 index 000000000..dabbfec76 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/space.png diff --git a/gui/theme/landscape_hdpi/images/space_terminal.png b/gui/theme/landscape_hdpi/images/space_terminal.png Binary files differnew file mode 100644 index 000000000..677256377 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/space_terminal.png diff --git a/gui/theme/landscape_hdpi/images/splashlogo.png b/gui/theme/landscape_hdpi/images/splashlogo.png Binary files differnew file mode 100644 index 000000000..42f516c95 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/splashlogo.png diff --git a/gui/theme/landscape_hdpi/images/splashteamwin.png b/gui/theme/landscape_hdpi/images/splashteamwin.png Binary files differnew file mode 100644 index 000000000..16a6d5994 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/splashteamwin.png diff --git a/gui/theme/landscape_hdpi/images/tab_3.png b/gui/theme/landscape_hdpi/images/tab_3.png Binary files differnew file mode 100644 index 000000000..25997fc58 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/tab_3.png diff --git a/gui/theme/landscape_hdpi/images/tab_4.png b/gui/theme/landscape_hdpi/images/tab_4.png Binary files differnew file mode 100644 index 000000000..fd2eee415 --- /dev/null +++ b/gui/theme/landscape_hdpi/images/tab_4.png diff --git a/gui/theme/landscape_hdpi/images/unlock_icon.png b/gui/theme/landscape_hdpi/images/unlock_icon.png Binary files differnew file mode 100644 index 000000000..5865e931d --- /dev/null +++ b/gui/theme/landscape_hdpi/images/unlock_icon.png diff --git a/gui/theme/landscape_hdpi/splash.xml b/gui/theme/landscape_hdpi/splash.xml new file mode 100644 index 000000000..8da2fe6ea --- /dev/null +++ b/gui/theme/landscape_hdpi/splash.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="1920" height="1200"/> + <author>TeamWin</author> + <title>TWRP</title> + <description>splash screen</description> + <themeversion>2</themeversion> + </details> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="52"/> + <image name="splashlogo" filename="splashlogo" retainaspect="1"/> + <image name="splashteamwin" filename="splashteamwin" retainaspect="1"/> + </resources> + + <variables> + <variable name="screen_width" value="1920"/> + <variable name="screen_height" value="1200"/> + <variable name="background_color" value="#222222"/> + <variable name="header_color" value="#555555"/> + <variable name="accent_color" value="#0090CA"/> + </variables> + + <pages> + <page name="splash"> + <background color="%background_color%"/> + + <fill color="%header_color%"> + <placement x="0" y="0" w="%screen_width%" h="320"/> + </fill> + + <image> + <image resource="splashlogo"/> + <placement x="960" y="320" placement="4"/> + </image> + + <image> + <image resource="splashteamwin"/> + <placement x="960" y="920" placement="4"/> + </image> + + <text color="%header_color%"> + <font resource="font_l"/> + <placement x="960" y="970" placement="5"/> + <text>Recovery Project %tw_version%</text> + </text> + </page> + </pages> +</recovery> + diff --git a/gui/theme/landscape_hdpi/ui.xml b/gui/theme/landscape_hdpi/ui.xml new file mode 100644 index 000000000..34ef530e3 --- /dev/null +++ b/gui/theme/landscape_hdpi/ui.xml @@ -0,0 +1,721 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="1920" height="1200"/> + <author>TeamWin</author> + <title>Backup Naowz</title> + <description>Default basic theme</description> + <preview>preview.png</preview> + <themeversion>2</themeversion> + </details> + + <include> + <xmlfile name="landscape.xml"/> + </include> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="42"/> + <font name="font_m" filename="RobotoCondensed-Regular.ttf" size="32"/> + <font name="font_s" filename="RobotoCondensed-Regular.ttf" size="28"/> + <font name="fixed" filename="DroidSansMono.ttf" size="26"/> + + <font name="keylabel" filename="RobotoCondensed-Regular.ttf" size="50"/> + <font name="keylabel-small" filename="RobotoCondensed-Regular.ttf" size="42"/> + <font name="keylabel-longpress" filename="RobotoCondensed-Regular.ttf" size="26"/> + + <image name="logo" filename="logo" retainaspect="1"/> + <image name="main_button" filename="main_button"/> + <image name="main_button_half_width" filename="main_button_half_width"/> + <image name="main_button_half_width_low" filename="main_button_half_width_low"/> + <image name="tab_3" filename="tab_3"/> + <image name="tab_4" filename="tab_4"/> + <image name="file" filename="file" retainaspect="1"/> + <image name="folder" filename="folder" retainaspect="1"/> + <image name="unlock_icon" filename="unlock_icon" retainaspect="1"/> + <image name="home" filename="home" retainaspect="1"/> + <image name="back" filename="back" retainaspect="1"/> + <image name="console" filename="console" retainaspect="1"/> + <image name="kb_hide" filename="kb_hide" retainaspect="1"/> + <image name="kb_show" filename="kb_show" retainaspect="1"/> + <image name="checkbox_false" filename="checkbox_false" retainaspect="1"/> + <image name="checkbox_true" filename="checkbox_true" retainaspect="1"/> + <image name="radio_false" filename="radio_false" retainaspect="1"/> + <image name="radio_true" filename="radio_true" retainaspect="1"/> + <image name="sort_asc" filename="sort_asc"/> + <image name="sort_desc" filename="sort_desc"/> + <image name="sort_empty" filename="sort_empty"/> + <animation name="progress" filename="indeterminate"/> + <image name="progress_empty" filename="progress_empty"/> + <image name="progress_full" filename="progress_fill"/> + <image name="slider" filename="slider"/> + <image name="slider_used" filename="slider_used"/> + <image name="slider_touch" filename="slider_touch"/> + <image name="handle" filename="handle"/> + <image name="cursor" filename="cursor" retainaspect="1"/> + + <image name="backspace" filename="backspace" retainaspect="1"/> + <image name="backspace_terminal" filename="backspace_terminal" retainaspect="1"/> + <image name="enter" filename="enter" retainaspect="1"/> + <image name="enter_terminal" filename="enter_terminal" retainaspect="1"/> + <image name="shift" filename="shift" retainaspect="1"/> + <image name="shift_terminal" filename="shift_terminal" retainaspect="1"/> + <image name="shift_fill" filename="shift_fill" retainaspect="1"/> + <image name="shift_terminal_fill" filename="shift_terminal_fill" retainaspect="1"/> + <image name="space" filename="space" retainaspect="1"/> + <image name="space_terminal" filename="space_terminal" retainaspect="1"/> + <image name="kb_arrow_left" filename="kb_arrow_left" retainaspect="1"/> + <image name="kb_arrow_right" filename="kb_arrow_right" retainaspect="1"/> + <image name="kb_arrow_up" filename="kb_arrow_up" retainaspect="1"/> + <image name="kb_arrow_down" filename="kb_arrow_down" retainaspect="1"/> + </resources> + + <variables> + <variable name="tw_samsung_navbar" value="0" persist="1"/> + <variable name="tw_navbar_button_position" value="0" persist="1"/> + + <variable name="tw_hide_kb" value="0"/> + <variable name="screen_width" value="1920"/> + <variable name="screen_height" value="1200"/> + <variable name="status_height" value="48"/> + <variable name="header_height" value="192"/> + <variable name="navbar_height" value="96"/> + <variable name="content_width" value="1824"/> + <variable name="content_quarter_width" value="1416"/> + <variable name="content_half_width" value="888"/> + <variable name="content_overlay_width" value="912"/> + <variable name="dialog_height" value="528"/> + <variable name="dialog_width" value="960"/> + <variable name="dialog_content_x" value="528"/> + <variable name="back_button_x" value="633"/> + <variable name="console_button_x" value="1287"/> + <variable name="back_button_x_1" value="120"/> + <variable name="home_button_x_1" value="320"/> + <variable name="console_button_x_1" value="520"/> + <variable name="back_button_x_2" value="1400"/> + <variable name="home_button_x_2" value="1600"/> + <variable name="console_button_x_2" value="1800"/> + <variable name="col1_x_header" value="144"/> + <variable name="indent" value="24"/> + <variable name="col1_x_left" value="48"/> + <variable name="col2_x_left" value="504"/> + <variable name="center_x" value="960"/> + <variable name="col1_x_right" value="984"/> + <variable name="col2_x_right" value="1416"/> + <variable name="col_button_right" value="1488"/> + <variable name="indent_right" value="1896"/> + <variable name="tab_height" value="72"/> + <variable name="tab_indicator_height" value="4"/> + <variable name="tab4_width" value="480"/> + <variable name="tab5_width" value="384"/> + <variable name="tab4_col2_x" value="480"/> + <variable name="tab4_col4_x" value="1440"/> + <variable name="tab5_col2_x" value="384"/> + <variable name="tab5_col3_x" value="768"/> + <variable name="tab5_col4_x" value="1152"/> + <variable name="tab5_col5_x" value="1536"/> + <variable name="btn4_col2_x_left" value="282"/> + <variable name="btn4_col3_x_left" value="516"/> + <variable name="btn4_col4_x_left" value="750"/> + <variable name="btn4_col2_x_right" value="1218"/> + <variable name="btn4_col3_x_right" value="1452"/> + <variable name="btn4_col4_x_right" value="1686"/> + <variable name="row1_header_y" value="0"/> + <variable name="row2_header_y" value="48"/> + <variable name="row3_header_y" value="60"/> + <variable name="row4_header_y" value="126"/> + <variable name="row1_y" value="192"/> + <variable name="row1a_y" value="216"/> + <variable name="row2_y" value="240"/> + <variable name="row2a_y" value="264"/> + <variable name="row_tab_y" value="260"/> + <variable name="row2_input_y" value="286"/> + <variable name="row3_y" value="288"/> + <variable name="row3a_y" value="312"/> + <variable name="row3_input_y" value="334"/> + <variable name="row4_y" value="336"/> + <variable name="row4a_y" value="360"/> + <variable name="row4_input_y" value="382"/> + <variable name="row5_y" value="384"/> + <variable name="row5a_y" value="408"/> + <variable name="row6_y" value="432"/> + <variable name="row6a_y" value="456"/> + <variable name="row7_y" value="480"/> + <variable name="row7a_y" value="504"/> + <variable name="row8_y" value="528"/> + <variable name="row8a_y" value="552"/> + <variable name="row9_y" value="576"/> + <variable name="row9a_y" value="600"/> + <variable name="row10_y" value="624"/> + <variable name="row10a_y" value="648"/> + <variable name="row11_y" value="672"/> + <variable name="row11a_y" value="696"/> + <variable name="row12_y" value="720"/> + <variable name="row12a_y" value="744"/> + <variable name="row13_y" value="768"/> + <variable name="row13a_y" value="792"/> + <variable name="row14_y" value="816"/> + <variable name="row14a_y" value="840"/> + <variable name="row15_y" value="864"/> + <variable name="row15a_y" value="888"/> + <variable name="row16_y" value="912"/> + <variable name="row16a_y" value="936"/> + <variable name="row17_y" value="960"/> + <variable name="row17a_y" value="984"/> + <variable name="row18_y" value="1008"/> + <variable name="row18a_y" value="1032"/> + <variable name="row19_y" value="1056"/> + <variable name="row19a_y" value="1080"/> + <variable name="row20_y" value="1104"/> + <variable name="navbar_y" value="1104"/> + <variable name="navbar_btn_y" value="1152"/> + <variable name="keyboard_y" value="592"/> + <variable name="background_color" value="#1A1A1A"/> + <variable name="accent_color" value="#0090CA"/> + <variable name="text_color" value="#EEEEEE"/> + <variable name="text_button_color" value="#EEEEEE"/> + <variable name="text_success_color" value="#76FF03"/> + <variable name="text_fail_color" value="#FF0101"/> + <variable name="highlight_color" value="#1A1A1A80"/> + <variable name="caps_highlight_color" value="#22222280"/> + <variable name="transparent" value="#00000000"/> + <variable name="semi_transparent" value="#00000099"/> + <variable name="warning" value="#F8F8A0"/> + <variable name="error" value="#FF0101"/> + <variable name="highlight" value="#0090CA"/> + <variable name="fileselector_linecolor" value="#555555"/> + <variable name="fileselector_highlight_color" value="#555555"/> + <variable name="fileselector_separatorheight" value="2"/> + <variable name="fileselector_spacing" value="0"/> + <variable name="fileselector_install_height" value="840"/> + <variable name="fileselector_install_width" value="960"/> + <variable name="fileselector_install_folder_width" value="408"/> + <variable name="fileselector_filemanager_height" value="840"/> + <variable name="partitionlist_spacing" value="0"/> + <variable name="partitionlist_storage_height" value="400"/> + <variable name="partitionlist_flashimage_height" value="448"/> + <variable name="partitionlist_wipe_height" value="600"/> + <variable name="partitionlist_mount_height" value="552"/> + <variable name="partitionlist_backup_height" value="528"/> + <variable name="listbox_timezone_height" value="768"/> + <variable name="listbox_settings_height" value="648"/> + <variable name="fastscroll_w" value="18"/> + <variable name="fastscroll_linew" value="2"/> + <variable name="fastscroll_rectw" value="18"/> + <variable name="fastscroll_recth" value="96"/> + <variable name="slidervalue_lineh" value="3"/> + <variable name="slidervalue_padding" value="0"/> + <variable name="slidervalue_sliderw" value="72"/> + <variable name="slidervalue_sliderh" value="96"/> + <variable name="slideout_y" value="96"/> + <variable name="slideout_height" value="960"/> + <variable name="slideout_bg_height" value="1056"/> + <variable name="input_height" value="48"/> + <variable name="input_line_width" value="3"/> + <variable name="console_height" value="624"/> + <variable name="console_terminal_height" value="420"/> + <variable name="terminal_s_height" value="520"/> + <variable name="terminal_l_height" value="1032"/> + <variable name="dialog_button_x" value="1176"/> + <variable name="date_button_x" value="552"/> + <variable name="progress_x" value="552"/> + <variable name="progress_text_x" value="96"/> + <variable name="progress_text_y" value="900"/> + <variable name="pattern_x" value="180"/> + <variable name="pattern_dot_dia" value="32"/> + <variable name="pattern_line_w" value="12"/> + <variable name="pattern_size" value="648"/> + </variables> + + <mousecursor> + <placement w="15" h="15"/> + <background color="#FFFF00FF" resource="cursor"/> + <speed multiplier="2.5"/> + </mousecursor> + + <templates> + <template name="page"> + <background color="%background_color%"/> + + <fill color="%accent_color%"> + <placement x="0" y="0" w="%screen_width%" h="%header_height%"/> + </fill> + + <image> + <condition var1="tw_busy" var2="1"/> + <image resource="logo"/> + <placement x="0" y="0"/> + </image> + + <button> + <condition var1="tw_busy" var2="0"/> + <placement x="0" y="0"/> + <image resource="logo"/> + <action function="key">home</action> + </button> + + <fill color="#00000030"> + <condition var1="tw_simulate_actions" var2="0"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_simulate_actions" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="1"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>%tw_version%</text> + </text> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@cpu_temp=CPU: %tw_cpu_temp% °C}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%center_x%" y="%row1_header_y%" placement="5"/> + <text>%tw_time%</text> + </text> + + <text color="%text_color%"> + <conditions> + <condition var1="tw_no_battery_percent" var2="0"/> + <condition var1="tw_battery" op=">" var2="0"/> + <condition var1="tw_battery" op="<" var2="101"/> + </conditions> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>{@battery_pct=Battery: %tw_battery%}</text> + </text> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <placement x="%home_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <placement x="%home_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </template> + + <template name="progress_bar"> + <progressbar> + <placement x="%progress_x%" y="%row16_y%"/> + <resource empty="progress_empty" full="progress_full"/> + <data name="ui_progress"/> + </progressbar> + + <animation> + <placement x="%progress_x%" y="%row16_y%"/> + <resource name="progress"/> + <speed fps="24" render="2"/> + <loop frame="1"/> + </animation> + </template> + + <template name="sort_options"> + <image> + <placement x="%col_button_right%" y="%row1a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <image> + <placement x="%col_button_right%" y="%row4a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <image> + <placement x="%col_button_right%" y="%row7a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="1"/> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=-1</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-1"/> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="1"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-1"/> + </conditions> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="2"/> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=-2</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-2"/> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="2"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-2"/> + </conditions> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="3"/> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=-3</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-3"/> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=3</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="3"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-3"/> + </conditions> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=3</action> + </button> + </template> + + <template name="tabs_settings"> + <button style="tab"> + <placement x="0" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_general=GENERAL}</text> + <action function="page">settings</action> + </button> + + <button style="tab"> + <placement x="%tab5_col2_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_time_zone=TIME ZONE}</text> + <action function="page">settings_timezone</action> + </button> + + <button style="tab"> + <placement x="%tab5_col3_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_screen=SCREEN}</text> + <action function="page">settings_screen</action> + </button> + + <button style="tab"> + <placement x="%tab5_col4_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_vibration=VIBRATION}</text> + <action function="page">settings_vibration</action> + </button> + + <button style="tab"> + <placement x="%tab5_col5_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_language=LANGUAGE}</text> + <action function="page">settings_language</action> + </button> + </template> + + <template name="console"> + <console> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%console_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row15_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="console_terminal"> + <console> + <placement x="%col1_x_left%" y="%row3_header_y%" w="content_width" h="%console_terminal_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="%row3_header_y%" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row7_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="keyboardterminaltemplate"> + <keyboard> + <condition var1="tw_hide_kb" op="=" var2="0"/> + <placement x="0" y="%keyboard_y%" w="1920" h="512"/> + <keymargin x="6" y="6"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="40" y="4"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace_terminal"/> + <keylabel key="0:action" text="Enter" resource="enter_terminal"/> + <keylabel key=" " text="Space" resource="space_terminal"/> + <keylabel key="0:k:29" text="Ctrl"/> + <keylabel key="0:c:27" text="Esc"/> + <keylabel key="0:c:9" text="Tab"/> + <keylabel key="0:k:105" text="<" resource="kb_arrow_left"/> + <keylabel key="0:k:108" text="v" resource="kb_arrow_down"/> + <keylabel key="0:k:103" text="^" resource="kb_arrow_up"/> + <keylabel key="0:k:106" text=">" resource="kb_arrow_right"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <ctrlhighlight color="#0090CA80"/> + <layout1> + <keysize height="128" width="160"/> + <row1 key01="160:c:27" long01=":c:3" key02="q" long02="1" key03="w" long03="2" key04="e" long04="3" key05="r" long05="4" key06="t" long06="5" key07="y" long07="6" key08="u" long08="7" key09="i" long09="8" key10="o" long10="9" key11="p" long11="0" key12="160:k:103"/> + <row2 key01="160:c:9" key02="80:" key03="a" long03="@" key04="s" long04="#" key05="d" long05="$" key06="f" long06="%" key07="g" long07="&" key08="h" long08="*" key09="j" long09="-" key10="k" long10="+" key11="l" long11="_" key12="80:" key13="160:k:105"/> + <row3 key01="160:" key02="240:layout2" key03="z" long03="!" key04="x" long04=""" key05="c" long05="'" key06="v" long06=":" key07="b" long07=";" key08="n" long08="/" key09="m" long09="?" key10="240:c:8" key11="160:k:106"/> + <row4 key01="160:k:29" key02="240:layout3" key03="/" key04="800: " key05="." key06="240:action" key07="160:k:108"/> + <keylabel key="0:layout2" text="Shift" resource="shift_terminal"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="128" width="160" capslock="0" revert_layout="1"/> + <row1 key01="160:c:27" long01=":c:3" key02="Q" long02="1" key03="W" long03="2" key04="E" long04="3" key05="R" long05="4" key06="T" long06="5" key07="Y" long07="6" key08="U" long08="7" key09="I" long09="8" key10="O" long10="9" key11="P" long11="0" key12="160:k:103"/> + <row2 key01="160:c:9" key02="80:" key03="A" long03="@" key04="S" long04="#" key05="D" long05="$" key06="F" long06="%" key07="G" long07="&" key08="H" long08="*" key09="J" long09="-" key10="K" long10="+" key11="L" long11="_" key12="80:" key13="160:k:105"/> + <row3 key01="160:" key02="240:layout1" key03="Z" long03="!" key04="X" long04=""" key05="C" long05="'" key06="V" long06=":" key07="B" long07=";" key08="N" long08="/" key09="M" long09="?" key10="240:c:8" key11="160:k:106"/> + <row4 key01="160:k:29" key02="240:layout3" key03="/" key04="800: " key05="." key06="240:action" key07="160:k:108"/> + <keylabel key="0:layout1" text="Shift" resource="shift_terminal_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="128" width="160"/> + <row1 key01="160:c:27" long01=":c:3" key02="1" key03="2" key04="3" key05="4" key06="5" key07="6" key08="7" key09="8" key10="9" key11="0" key12="160:k:103"/> + <row2 key01="160:c:9" key02="@" key03="#" key04="$" key05="%" key06="&" key07="*" key08="-" key09="+" key10="(" key11=")" key12="160:k:105"/> + <row3 key01="160:" key02="240:layout4" key03="!" key04="160:c:34" key05="'" key06=":" key07=";" key08="/" key09="?" key10="240:c:8" key11="160:k:106"/> + <row4 key01="160:k:29" key02="240:layout1" key03="," key04="800: " key05="." key06="240:action" key07="160:k:108"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="128" width="160"/> + <row1 key01="160:c:27" long01=":c:3" key02="~" key03="`" key04="|" key05="160:" key06="160:" key07="160:" key08="%" key09="160:" key10="{" key11="}" key12="160:k:103"/> + <row2 key01="160:c:9" key02="160:" key03="160:" key04="160:" key05="160:" key06="160:" key07="^" key08="_" key09="=" key10="[" key11="]" key12="160:k:105"/> + <row3 key01="160:" key02="240:layout3" key03="160:" key04="160:" key05="160:" key06="160:" key07="\" key08="<" key09=">" key10="240:c:8" key11="160:k:106"/> + <row4 key01="160:k:29" key02="240:layout1" key03="160:c:34" key04="800: " key05="." key06="240:action" key07="160:k:108"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + + <template name="keyboardtemplate"> + <keyboard> + <placement x="0" y="%keyboard_y%" w="1920" h="512"/> + <keymargin x="6" y="6"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="40" y="4"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace"/> + <keylabel key="0:action" text="Enter" resource="enter"/> + <keylabel key=" " text="Space" resource="space"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <layout1> + <keysize height="128" width="192"/> + <row1 key01="q" long01="1" key02="w" long02="2" key03="e" long03="3" key04="r" long04="4" key05="t" long05="5" key06="y" long06="6" key07="u" long07="7" key08="i" long08="8" key09="o" long09="9" key10="p" long10="0"/> + <row2 key01="96:" key02="a" long02="@" key03="s" long03="#" key04="d" long04="$" key05="f" long05="%" key06="g" long06="&" key07="h" long07="*" key08="j" long08="-" key09="k" long09="+" key10="l" long10="_" key11="96:"/> + <row3 key01="288:layout2" key02="z" long02="!" key03="x" long03=""" key04="c" long04="'" key05="v" long05=":" key06="b" long06=";" key07="n" long07="/" key08="m" long08="?" key09="288:c:8"/> + <row4 key01="288:layout3" key02="/" key03="960: " key04="." key05="288:action"/> + <keylabel key="0:layout2" text="Shift" resource="shift"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="128" width="192" capslock="0" revert_layout="1"/> + <row1 key01="Q" long01="1" key02="W" long02="2" key03="E" long03="3" key04="R" long04="4" key05="T" long05="5" key06="Y" long06="6" key07="U" long07="7" key08="I" long08="8" key09="O" long09="9" key10="P" long10="0"/> + <row2 key01="96:" key02="A" long02="@" key03="S" long03="#" key04="D" long04="$" key05="F" long05="%" key06="G" long06="&" key07="H" long07="*" key08="J" long08="-" key09="K" long09="+" key10="L" long10="_" key11="96:"/> + <row3 key01="288:layout1" key02="Z" long02="!" key03="X" long03=""" key04="C" long04="'" key05="V" long05=":" key06="B" long06=";" key07="N" long07="/" key08="M" long08="?" key09="288:c:8"/> + <row4 key01="288:layout3" key02="/" key03="960: " key04="." key05="288:action"/> + <keylabel key="0:layout1" text="Shift" resource="shift_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="128" width="192"/> + <row1 key01="1" key02="2" key03="3" key04="4" key05="5" key06="6" key07="7" key08="8" key09="9" key10="0"/> + <row2 key01="@" key02="#" key03="$" key04="%" key05="&" key06="*" key07="-" key08="+" key09="(" key10=")"/> + <row3 key01="288:layout4" key02="!" key03="192:c:34" key04="'" key05=":" key06=";" key07="/" key08="?" key09="288:c:8"/> + <row4 key01="288:layout1" key02="," key03="960: " key04="." key05="288:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="128" width="192"/> + <row1 key01="~" key02="`" key03="|" key04="192:" key05="192:" key06="192:" key07="%" key08="192:" key09="{" key10="}"/> + <row2 key01="192:" key02="192:" key03="192:" key04="192:" key05="192:" key06="^" key07="_" key08="=" key09="[" key10="]"/> + <row3 key01="288:layout3" key02="192:" key03="192:" key04="192:" key05="192:" key06="\" key07="<" key08=">" key09="288:c:8"/> + <row4 key01="288:layout1" key02="192:c:34" key03="960: " key04="." key05="288:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + </templates> +</recovery> diff --git a/gui/theme/landscape_mdpi/images/back.png b/gui/theme/landscape_mdpi/images/back.png Binary files differnew file mode 100644 index 000000000..a4310344d --- /dev/null +++ b/gui/theme/landscape_mdpi/images/back.png diff --git a/gui/theme/landscape_mdpi/images/backspace.png b/gui/theme/landscape_mdpi/images/backspace.png Binary files differnew file mode 100644 index 000000000..a51654715 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/backspace.png diff --git a/gui/theme/landscape_mdpi/images/backspace_terminal.png b/gui/theme/landscape_mdpi/images/backspace_terminal.png Binary files differnew file mode 100644 index 000000000..53db5aa37 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/backspace_terminal.png diff --git a/gui/theme/landscape_mdpi/images/checkbox_false.png b/gui/theme/landscape_mdpi/images/checkbox_false.png Binary files differnew file mode 100644 index 000000000..a4ed41ede --- /dev/null +++ b/gui/theme/landscape_mdpi/images/checkbox_false.png diff --git a/gui/theme/landscape_mdpi/images/checkbox_true.png b/gui/theme/landscape_mdpi/images/checkbox_true.png Binary files differnew file mode 100644 index 000000000..f7adcf506 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/checkbox_true.png diff --git a/gui/theme/landscape_mdpi/images/console.png b/gui/theme/landscape_mdpi/images/console.png Binary files differnew file mode 100644 index 000000000..cc9bbf598 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/console.png diff --git a/gui/theme/landscape_mdpi/images/cursor.png b/gui/theme/landscape_mdpi/images/cursor.png Binary files differnew file mode 100644 index 000000000..d5319ac89 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/cursor.png diff --git a/gui/theme/landscape_mdpi/images/enter.png b/gui/theme/landscape_mdpi/images/enter.png Binary files differnew file mode 100644 index 000000000..209a1be4d --- /dev/null +++ b/gui/theme/landscape_mdpi/images/enter.png diff --git a/gui/theme/landscape_mdpi/images/enter_terminal.png b/gui/theme/landscape_mdpi/images/enter_terminal.png Binary files differnew file mode 100644 index 000000000..8bc0e8956 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/enter_terminal.png diff --git a/gui/theme/landscape_mdpi/images/file.png b/gui/theme/landscape_mdpi/images/file.png Binary files differnew file mode 100644 index 000000000..bb68fb76b --- /dev/null +++ b/gui/theme/landscape_mdpi/images/file.png diff --git a/gui/theme/landscape_mdpi/images/folder.png b/gui/theme/landscape_mdpi/images/folder.png Binary files differnew file mode 100644 index 000000000..72b76a99e --- /dev/null +++ b/gui/theme/landscape_mdpi/images/folder.png diff --git a/gui/theme/landscape_mdpi/images/handle.png b/gui/theme/landscape_mdpi/images/handle.png Binary files differnew file mode 100644 index 000000000..25e53556a --- /dev/null +++ b/gui/theme/landscape_mdpi/images/handle.png diff --git a/gui/theme/landscape_mdpi/images/home.png b/gui/theme/landscape_mdpi/images/home.png Binary files differnew file mode 100644 index 000000000..71b37e0c8 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/home.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate001.png b/gui/theme/landscape_mdpi/images/indeterminate001.png Binary files differnew file mode 100644 index 000000000..930d7eb2a --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate001.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate002.png b/gui/theme/landscape_mdpi/images/indeterminate002.png Binary files differnew file mode 100644 index 000000000..c4d207ea4 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate002.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate003.png b/gui/theme/landscape_mdpi/images/indeterminate003.png Binary files differnew file mode 100644 index 000000000..376de520d --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate003.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate004.png b/gui/theme/landscape_mdpi/images/indeterminate004.png Binary files differnew file mode 100644 index 000000000..dbc13753d --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate004.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate005.png b/gui/theme/landscape_mdpi/images/indeterminate005.png Binary files differnew file mode 100644 index 000000000..cae5c3b1e --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate005.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate006.png b/gui/theme/landscape_mdpi/images/indeterminate006.png Binary files differnew file mode 100644 index 000000000..326799800 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate006.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate007.png b/gui/theme/landscape_mdpi/images/indeterminate007.png Binary files differnew file mode 100644 index 000000000..dee4840c6 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate007.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate008.png b/gui/theme/landscape_mdpi/images/indeterminate008.png Binary files differnew file mode 100644 index 000000000..470f08077 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate008.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate009.png b/gui/theme/landscape_mdpi/images/indeterminate009.png Binary files differnew file mode 100644 index 000000000..08ac625c6 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate009.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate010.png b/gui/theme/landscape_mdpi/images/indeterminate010.png Binary files differnew file mode 100644 index 000000000..a7ec1336c --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate010.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate011.png b/gui/theme/landscape_mdpi/images/indeterminate011.png Binary files differnew file mode 100644 index 000000000..6e3bf96e9 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate011.png diff --git a/gui/theme/landscape_mdpi/images/indeterminate012.png b/gui/theme/landscape_mdpi/images/indeterminate012.png Binary files differnew file mode 100644 index 000000000..d2f8c6a67 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/indeterminate012.png diff --git a/gui/theme/landscape_mdpi/images/kb_arrow_down.png b/gui/theme/landscape_mdpi/images/kb_arrow_down.png Binary files differnew file mode 100644 index 000000000..16042c114 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_arrow_down.png diff --git a/gui/theme/landscape_mdpi/images/kb_arrow_left.png b/gui/theme/landscape_mdpi/images/kb_arrow_left.png Binary files differnew file mode 100644 index 000000000..e5d6eaf09 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_arrow_left.png diff --git a/gui/theme/landscape_mdpi/images/kb_arrow_right.png b/gui/theme/landscape_mdpi/images/kb_arrow_right.png Binary files differnew file mode 100644 index 000000000..3be128e32 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_arrow_right.png diff --git a/gui/theme/landscape_mdpi/images/kb_arrow_up.png b/gui/theme/landscape_mdpi/images/kb_arrow_up.png Binary files differnew file mode 100644 index 000000000..c131e0616 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_arrow_up.png diff --git a/gui/theme/landscape_mdpi/images/kb_hide.png b/gui/theme/landscape_mdpi/images/kb_hide.png Binary files differnew file mode 100644 index 000000000..3350f00d4 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_hide.png diff --git a/gui/theme/landscape_mdpi/images/kb_show.png b/gui/theme/landscape_mdpi/images/kb_show.png Binary files differnew file mode 100644 index 000000000..a01d75a5b --- /dev/null +++ b/gui/theme/landscape_mdpi/images/kb_show.png diff --git a/gui/theme/landscape_mdpi/images/logo.png b/gui/theme/landscape_mdpi/images/logo.png Binary files differnew file mode 100644 index 000000000..c08babc79 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/logo.png diff --git a/gui/theme/landscape_mdpi/images/main_button.png b/gui/theme/landscape_mdpi/images/main_button.png Binary files differnew file mode 100644 index 000000000..65b778e7e --- /dev/null +++ b/gui/theme/landscape_mdpi/images/main_button.png diff --git a/gui/theme/landscape_mdpi/images/main_button_half_width.png b/gui/theme/landscape_mdpi/images/main_button_half_width.png Binary files differnew file mode 100644 index 000000000..7e644fe07 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/main_button_half_width.png diff --git a/gui/theme/landscape_mdpi/images/main_button_half_width_low.png b/gui/theme/landscape_mdpi/images/main_button_half_width_low.png Binary files differnew file mode 100644 index 000000000..72c52f731 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/main_button_half_width_low.png diff --git a/gui/theme/landscape_mdpi/images/progress_empty.png b/gui/theme/landscape_mdpi/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..0eecb8b67 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/progress_empty.png diff --git a/gui/theme/landscape_mdpi/images/progress_fill.png b/gui/theme/landscape_mdpi/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..87b512465 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/progress_fill.png diff --git a/gui/theme/landscape_mdpi/images/radio_false.png b/gui/theme/landscape_mdpi/images/radio_false.png Binary files differnew file mode 100644 index 000000000..e753021e0 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/radio_false.png diff --git a/gui/theme/landscape_mdpi/images/radio_true.png b/gui/theme/landscape_mdpi/images/radio_true.png Binary files differnew file mode 100644 index 000000000..5ab1b0f59 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/radio_true.png diff --git a/gui/theme/landscape_mdpi/images/shift.png b/gui/theme/landscape_mdpi/images/shift.png Binary files differnew file mode 100644 index 000000000..200e4c581 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/shift.png diff --git a/gui/theme/landscape_mdpi/images/shift_fill.png b/gui/theme/landscape_mdpi/images/shift_fill.png Binary files differnew file mode 100644 index 000000000..cf46c1a71 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/shift_fill.png diff --git a/gui/theme/landscape_mdpi/images/shift_terminal.png b/gui/theme/landscape_mdpi/images/shift_terminal.png Binary files differnew file mode 100644 index 000000000..bc2cc7dc5 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/shift_terminal.png diff --git a/gui/theme/landscape_mdpi/images/shift_terminal_fill.png b/gui/theme/landscape_mdpi/images/shift_terminal_fill.png Binary files differnew file mode 100644 index 000000000..02190b1a2 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/shift_terminal_fill.png diff --git a/gui/theme/landscape_mdpi/images/slider.png b/gui/theme/landscape_mdpi/images/slider.png Binary files differnew file mode 100644 index 000000000..1473c806b --- /dev/null +++ b/gui/theme/landscape_mdpi/images/slider.png diff --git a/gui/theme/landscape_mdpi/images/slider_touch.png b/gui/theme/landscape_mdpi/images/slider_touch.png Binary files differnew file mode 100644 index 000000000..a701f5397 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/slider_touch.png diff --git a/gui/theme/landscape_mdpi/images/slider_used.png b/gui/theme/landscape_mdpi/images/slider_used.png Binary files differnew file mode 100644 index 000000000..56cff27c1 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/slider_used.png diff --git a/gui/theme/landscape_mdpi/images/sort_asc.png b/gui/theme/landscape_mdpi/images/sort_asc.png Binary files differnew file mode 100644 index 000000000..d37dbfebf --- /dev/null +++ b/gui/theme/landscape_mdpi/images/sort_asc.png diff --git a/gui/theme/landscape_mdpi/images/sort_desc.png b/gui/theme/landscape_mdpi/images/sort_desc.png Binary files differnew file mode 100644 index 000000000..8c551583d --- /dev/null +++ b/gui/theme/landscape_mdpi/images/sort_desc.png diff --git a/gui/theme/landscape_mdpi/images/sort_empty.png b/gui/theme/landscape_mdpi/images/sort_empty.png Binary files differnew file mode 100644 index 000000000..048354628 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/sort_empty.png diff --git a/gui/theme/landscape_mdpi/images/space.png b/gui/theme/landscape_mdpi/images/space.png Binary files differnew file mode 100644 index 000000000..06ff8df19 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/space.png diff --git a/gui/theme/landscape_mdpi/images/space_terminal.png b/gui/theme/landscape_mdpi/images/space_terminal.png Binary files differnew file mode 100644 index 000000000..d40133338 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/space_terminal.png diff --git a/gui/theme/landscape_mdpi/images/splashlogo.png b/gui/theme/landscape_mdpi/images/splashlogo.png Binary files differnew file mode 100644 index 000000000..daac29442 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/splashlogo.png diff --git a/gui/theme/landscape_mdpi/images/splashteamwin.png b/gui/theme/landscape_mdpi/images/splashteamwin.png Binary files differnew file mode 100644 index 000000000..d2fad9cc4 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/splashteamwin.png diff --git a/gui/theme/landscape_mdpi/images/tab_3.png b/gui/theme/landscape_mdpi/images/tab_3.png Binary files differnew file mode 100644 index 000000000..1c37f98c0 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/tab_3.png diff --git a/gui/theme/landscape_mdpi/images/tab_4.png b/gui/theme/landscape_mdpi/images/tab_4.png Binary files differnew file mode 100644 index 000000000..41f606c00 --- /dev/null +++ b/gui/theme/landscape_mdpi/images/tab_4.png diff --git a/gui/theme/landscape_mdpi/images/unlock_icon.png b/gui/theme/landscape_mdpi/images/unlock_icon.png Binary files differnew file mode 100644 index 000000000..890c38cec --- /dev/null +++ b/gui/theme/landscape_mdpi/images/unlock_icon.png diff --git a/gui/theme/landscape_mdpi/splash.xml b/gui/theme/landscape_mdpi/splash.xml new file mode 100644 index 000000000..ac71c2301 --- /dev/null +++ b/gui/theme/landscape_mdpi/splash.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="800" height="480"/> + <author>TeamWin</author> + <title>TWRP</title> + <description>splash screen</description> + <themeversion>2</themeversion> + </details> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="24"/> + <image name="splashlogo" filename="splashlogo" retainaspect="1"/> + <image name="splashteamwin" filename="splashteamwin" retainaspect="1"/> + </resources> + + <variables> + <variable name="screen_width" value="800"/> + <variable name="screen_height" value="480"/> + <variable name="background_color" value="#222222"/> + <variable name="header_color" value="#555555"/> + <variable name="accent_color" value="#0090CA"/> + </variables> + + <pages> + <page name="splash"> + <background color="%background_color%"/> + + <fill color="%header_color%"> + <placement x="0" y="0" w="%screen_width%" h="140"/> + </fill> + + <image> + <image resource="splashlogo"/> + <placement x="400" y="140" placement="4"/> + </image> + + <image> + <image resource="splashteamwin"/> + <placement x="400" y="366" placement="4"/> + </image> + + <text color="%header_color%"> + <font resource="font_l"/> + <placement x="400" y="386" placement="5"/> + <text>Recovery Project %tw_version%</text> + </text> + </page> + </pages> +</recovery> + diff --git a/gui/theme/landscape_mdpi/ui.xml b/gui/theme/landscape_mdpi/ui.xml new file mode 100644 index 000000000..c2cfc4fb3 --- /dev/null +++ b/gui/theme/landscape_mdpi/ui.xml @@ -0,0 +1,721 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="800" height="480"/> + <author>TeamWin</author> + <title>Backup Naowz</title> + <description>Default basic theme</description> + <preview>preview.png</preview> + <themeversion>2</themeversion> + </details> + + <include> + <xmlfile name="landscape.xml"/> + </include> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="18"/> + <font name="font_m" filename="RobotoCondensed-Regular.ttf" size="14"/> + <font name="font_s" filename="RobotoCondensed-Regular.ttf" size="12"/> + <font name="fixed" filename="DroidSansMono.ttf" size="12"/> + + <font name="keylabel" filename="RobotoCondensed-Regular.ttf" size="21"/> + <font name="keylabel-small" filename="RobotoCondensed-Regular.ttf" size="18"/> + <font name="keylabel-longpress" filename="RobotoCondensed-Regular.ttf" size="11"/> + + <image name="logo" filename="logo" retainaspect="1"/> + <image name="main_button" filename="main_button"/> + <image name="main_button_half_width" filename="main_button_half_width"/> + <image name="main_button_half_width_low" filename="main_button_half_width_low"/> + <image name="tab_3" filename="tab_3"/> + <image name="tab_4" filename="tab_4"/> + <image name="file" filename="file" retainaspect="1"/> + <image name="folder" filename="folder" retainaspect="1"/> + <image name="unlock_icon" filename="unlock_icon" retainaspect="1"/> + <image name="home" filename="home" retainaspect="1"/> + <image name="back" filename="back" retainaspect="1"/> + <image name="console" filename="console" retainaspect="1"/> + <image name="kb_hide" filename="kb_hide" retainaspect="1"/> + <image name="kb_show" filename="kb_show" retainaspect="1"/> + <image name="checkbox_false" filename="checkbox_false" retainaspect="1"/> + <image name="checkbox_true" filename="checkbox_true" retainaspect="1"/> + <image name="radio_false" filename="radio_false" retainaspect="1"/> + <image name="radio_true" filename="radio_true" retainaspect="1"/> + <image name="sort_asc" filename="sort_asc"/> + <image name="sort_desc" filename="sort_desc"/> + <image name="sort_empty" filename="sort_empty"/> + <animation name="progress" filename="indeterminate"/> + <image name="progress_empty" filename="progress_empty"/> + <image name="progress_full" filename="progress_fill"/> + <image name="slider" filename="slider"/> + <image name="slider_used" filename="slider_used"/> + <image name="slider_touch" filename="slider_touch"/> + <image name="handle" filename="handle"/> + <image name="cursor" filename="cursor" retainaspect="1"/> + + <image name="backspace" filename="backspace" retainaspect="1"/> + <image name="backspace_terminal" filename="backspace_terminal" retainaspect="1"/> + <image name="enter" filename="enter" retainaspect="1"/> + <image name="enter_terminal" filename="enter_terminal" retainaspect="1"/> + <image name="shift" filename="shift" retainaspect="1"/> + <image name="shift_terminal" filename="shift_terminal" retainaspect="1"/> + <image name="shift_fill" filename="shift_fill" retainaspect="1"/> + <image name="shift_terminal_fill" filename="shift_terminal_fill" retainaspect="1"/> + <image name="space" filename="space" retainaspect="1"/> + <image name="space_terminal" filename="space_terminal" retainaspect="1"/> + <image name="kb_arrow_left" filename="kb_arrow_left" retainaspect="1"/> + <image name="kb_arrow_right" filename="kb_arrow_right" retainaspect="1"/> + <image name="kb_arrow_up" filename="kb_arrow_up" retainaspect="1"/> + <image name="kb_arrow_down" filename="kb_arrow_down" retainaspect="1"/> + </resources> + + <variables> + <variable name="tw_samsung_navbar" value="0" persist="1"/> + <variable name="tw_navbar_button_position" value="0" persist="1"/> + + <variable name="tw_hide_kb" value="0"/> + <variable name="screen_width" value="800"/> + <variable name="screen_height" value="480"/> + <variable name="status_height" value="20"/> + <variable name="header_height" value="80"/> + <variable name="navbar_height" value="40"/> + <variable name="content_width" value="760"/> + <variable name="content_quarter_width" value="590"/> + <variable name="content_half_width" value="370"/> + <variable name="content_overlay_width" value="380"/> + <variable name="dialog_height" value="207"/> + <variable name="dialog_width" value="400"/> + <variable name="dialog_content_x" value="220"/> + <variable name="back_button_x" value="264"/> + <variable name="console_button_x" value="536"/> + <variable name="back_button_x_1" value="50"/> + <variable name="home_button_x_1" value="130"/> + <variable name="console_button_x_1" value="210"/> + <variable name="back_button_x_2" value="590"/> + <variable name="home_button_x_2" value="670"/> + <variable name="console_button_x_2" value="750"/> + <variable name="col1_x_header" value="60"/> + <variable name="indent" value="10"/> + <variable name="col1_x_left" value="20"/> + <variable name="col2_x_left" value="210"/> + <variable name="center_x" value="400"/> + <variable name="col1_x_right" value="410"/> + <variable name="col2_x_right" value="590"/> + <variable name="col_button_right" value="620"/> + <variable name="indent_right" value="790"/> + <variable name="tab_height" value="30"/> + <variable name="tab_indicator_height" value="2"/> + <variable name="tab4_width" value="200"/> + <variable name="tab5_width" value="160"/> + <variable name="tab4_col2_x" value="200"/> + <variable name="tab4_col4_x" value="600"/> + <variable name="tab5_col2_x" value="160"/> + <variable name="tab5_col3_x" value="320"/> + <variable name="tab5_col4_x" value="480"/> + <variable name="tab5_col5_x" value="640"/> + <variable name="btn4_col2_x_left" value="117"/> + <variable name="btn4_col3_x_left" value="216"/> + <variable name="btn4_col4_x_left" value="313"/> + <variable name="btn4_col2_x_right" value="507"/> + <variable name="btn4_col3_x_right" value="606"/> + <variable name="btn4_col4_x_right" value="703"/> + <variable name="row1_header_y" value="0"/> + <variable name="row2_header_y" value="20"/> + <variable name="row3_header_y" value="24"/> + <variable name="row4_header_y" value="52"/> + <variable name="row1_y" value="80"/> + <variable name="row1a_y" value="89"/> + <variable name="row2_y" value="98"/> + <variable name="row2a_y" value="107"/> + <variable name="row_tab_y" value="108"/> + <variable name="row2_input_y" value="116"/> + <variable name="row3_y" value="116"/> + <variable name="row3a_y" value="125"/> + <variable name="row3_input_y" value="125"/> + <variable name="row4_y" value="134"/> + <variable name="row4a_y" value="143"/> + <variable name="row4_input_y" value="143"/> + <variable name="row5_y" value="152"/> + <variable name="row5a_y" value="161"/> + <variable name="row6_y" value="170"/> + <variable name="row6a_y" value="179"/> + <variable name="row7_y" value="188"/> + <variable name="row7a_y" value="197"/> + <variable name="row8_y" value="206"/> + <variable name="row8a_y" value="215"/> + <variable name="row9_y" value="224"/> + <variable name="row9a_y" value="233"/> + <variable name="row10_y" value="242"/> + <variable name="row10a_y" value="251"/> + <variable name="row11_y" value="260"/> + <variable name="row11a_y" value="269"/> + <variable name="row12_y" value="278"/> + <variable name="row12a_y" value="288"/> + <variable name="row13_y" value="296"/> + <variable name="row13a_y" value="305"/> + <variable name="row14_y" value="314"/> + <variable name="row14a_y" value="323"/> + <variable name="row15_y" value="332"/> + <variable name="row15a_y" value="341"/> + <variable name="row16_y" value="350"/> + <variable name="row16a_y" value="359"/> + <variable name="row17_y" value="368"/> + <variable name="row17a_y" value="377"/> + <variable name="row18_y" value="386"/> + <variable name="row18a_y" value="395"/> + <variable name="row19_y" value="404"/> + <variable name="row19a_y" value="413"/> + <variable name="row20_y" value="422"/> + <variable name="navbar_y" value="440"/> + <variable name="navbar_btn_y" value="460"/> + <variable name="keyboard_y" value="248"/> + <variable name="background_color" value="#1A1A1A"/> + <variable name="accent_color" value="#0090CA"/> + <variable name="text_color" value="#EEEEEE"/> + <variable name="text_button_color" value="#EEEEEE"/> + <variable name="text_success_color" value="#76FF03"/> + <variable name="text_fail_color" value="#FF0101"/> + <variable name="highlight_color" value="#1A1A1A80"/> + <variable name="caps_highlight_color" value="#22222280"/> + <variable name="transparent" value="#00000000"/> + <variable name="semi_transparent" value="#00000099"/> + <variable name="warning" value="#F8F8A0"/> + <variable name="error" value="#FF0101"/> + <variable name="highlight" value="#0090CA"/> + <variable name="fileselector_linecolor" value="#555555"/> + <variable name="fileselector_highlight_color" value="#555555"/> + <variable name="fileselector_separatorheight" value="1"/> + <variable name="fileselector_spacing" value="0"/> + <variable name="fileselector_install_height" value="333"/> + <variable name="fileselector_install_width" value="400"/> + <variable name="fileselector_install_folder_width" value="170"/> + <variable name="fileselector_filemanager_height" value="333"/> + <variable name="partitionlist_spacing" value="0"/> + <variable name="partitionlist_storage_height" value="160"/> + <variable name="partitionlist_flashimage_height" value="144"/> + <variable name="partitionlist_wipe_height" value="243"/> + <variable name="partitionlist_mount_height" value="221"/> + <variable name="partitionlist_backup_height" value="198"/> + <variable name="listbox_timezone_height" value="306"/> + <variable name="listbox_settings_height" value="243"/> + <variable name="fastscroll_w" value="7"/> + <variable name="fastscroll_linew" value="1"/> + <variable name="fastscroll_rectw" value="7"/> + <variable name="fastscroll_recth" value="45"/> + <variable name="slidervalue_lineh" value="2"/> + <variable name="slidervalue_padding" value="0"/> + <variable name="slidervalue_sliderw" value="24"/> + <variable name="slidervalue_sliderh" value="36"/> + <variable name="slideout_y" value="40"/> + <variable name="slideout_height" value="380"/> + <variable name="slideout_bg_height" value="420"/> + <variable name="input_height" value="18"/> + <variable name="input_line_width" value="1"/> + <variable name="console_height" value="234"/> + <variable name="console_terminal_height" value="164"/> + <variable name="terminal_s_height" value="220"/> + <variable name="terminal_l_height" value="412"/> + <variable name="dialog_button_x" value="480"/> + <variable name="date_button_x" value="230"/> + <variable name="progress_x" value="230"/> + <variable name="progress_text_x" value="40"/> + <variable name="progress_text_y" value="348"/> + <variable name="pattern_x" value="84"/> + <variable name="pattern_dot_dia" value="12"/> + <variable name="pattern_line_w" value="4"/> + <variable name="pattern_size" value="252"/> + </variables> + + <mousecursor> + <placement w="15" h="15"/> + <background color="#FFFF00FF" resource="cursor"/> + <speed multiplier="2.5"/> + </mousecursor> + + <templates> + <template name="page"> + <background color="%background_color%"/> + + <fill color="%accent_color%"> + <placement x="0" y="0" w="%screen_width%" h="%header_height%"/> + </fill> + + <image> + <condition var1="tw_busy" var2="1"/> + <image resource="logo"/> + <placement x="0" y="0"/> + </image> + + <button> + <condition var1="tw_busy" var2="0"/> + <placement x="0" y="0"/> + <image resource="logo"/> + <action function="key">home</action> + </button> + + <fill color="#00000030"> + <condition var1="tw_simulate_actions" var2="0"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_simulate_actions" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="1"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>%tw_version%</text> + </text> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@cpu_temp=CPU: %tw_cpu_temp% °C}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%center_x%" y="%row1_header_y%" placement="5"/> + <text>%tw_time%</text> + </text> + + <text color="%text_color%"> + <conditions> + <condition var1="tw_no_battery_percent" var2="0"/> + <condition var1="tw_battery" op=">" var2="0"/> + <condition var1="tw_battery" op="<" var2="101"/> + </conditions> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>{@battery_pct=Battery: %tw_battery%}</text> + </text> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="0"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <placement x="%home_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="1"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x_1%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <placement x="%home_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_navbar_button_position" op="=" var2="2"/> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x_2%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </template> + + <template name="progress_bar"> + <progressbar> + <placement x="%progress_x%" y="%row16_y%"/> + <resource empty="progress_empty" full="progress_full"/> + <data name="ui_progress"/> + </progressbar> + + <animation> + <placement x="%progress_x%" y="%row16_y%"/> + <resource name="progress"/> + <speed fps="24" render="2"/> + <loop frame="1"/> + </animation> + </template> + + <template name="sort_options"> + <image> + <placement x="%col_button_right%" y="%row1a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <image> + <placement x="%col_button_right%" y="%row4a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <image> + <placement x="%col_button_right%" y="%row7a_y%"/> + <image resource="main_button_half_width_low"/> + </image> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="1"/> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=-1</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-1"/> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="1"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-1"/> + </conditions> + <placement x="%col_button_right%" y="%row1a_y%"/> + <text>{@sort_by_name=Sort by Name}</text> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="2"/> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=-2</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-2"/> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="2"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-2"/> + </conditions> + <placement x="%col_button_right%" y="%row4a_y%"/> + <text>{@sort_by_date=Sort by Date}</text> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button style="sort_asc"> + <condition var1="tw_gui_sort_order" op="=" var2="3"/> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=-3</action> + </button> + + <button style="sort_desc"> + <condition var1="tw_gui_sort_order" op="=" var2="-3"/> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=3</action> + </button> + + <button style="sort_empty"> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="3"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-3"/> + </conditions> + <placement x="%col_button_right%" y="%row7a_y%"/> + <text>{@sort_by_size=Sort by Size}</text> + <action function="set">tw_gui_sort_order=3</action> + </button> + </template> + + <template name="tabs_settings"> + <button style="tab"> + <placement x="0" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_general=GENERAL}</text> + <action function="page">settings</action> + </button> + + <button style="tab"> + <placement x="%tab5_col2_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_time_zone=TIME ZONE}</text> + <action function="page">settings_timezone</action> + </button> + + <button style="tab"> + <placement x="%tab5_col3_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_screen=SCREEN}</text> + <action function="page">settings_screen</action> + </button> + + <button style="tab"> + <placement x="%tab5_col4_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_vibration=VIBRATION}</text> + <action function="page">settings_vibration</action> + </button> + + <button style="tab"> + <placement x="%tab5_col5_x%" y="%row1_y%" w="%tab5_width%" h="%tab_height%"/> + <text>{@tab_language=LANGUAGE}</text> + <action function="page">settings_language</action> + </button> + </template> + + <template name="console"> + <console> + <placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%console_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row15_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="console_terminal"> + <console> + <placement x="%col1_x_left%" y="%row3_header_y%" w="content_width" h="%console_terminal_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="%row3_header_y%" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%col1_x_left%" y="row7_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="keyboardterminaltemplate"> + <keyboard> + <condition var1="tw_hide_kb" op="=" var2="0"/> + <placement x="0" y="%keyboard_y%" w="800" h="192"/> + <keymargin x="4" y="4"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="14" y="2"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace_terminal"/> + <keylabel key="0:action" text="Enter" resource="enter_terminal"/> + <keylabel key=" " text="Space" resource="space_terminal"/> + <keylabel key="0:k:29" text="Ctrl"/> + <keylabel key="0:c:27" text="Esc"/> + <keylabel key="0:c:9" text="Tab"/> + <keylabel key="0:k:105" text="<" resource="kb_arrow_left"/> + <keylabel key="0:k:108" text="v" resource="kb_arrow_down"/> + <keylabel key="0:k:103" text="^" resource="kb_arrow_up"/> + <keylabel key="0:k:106" text=">" resource="kb_arrow_right"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <ctrlhighlight color="#0090CA80"/> + <layout1> + <keysize height="48" width="68"/> + <row1 key01="60:c:27" long01=":c:3" key02="q" long02="1" key03="w" long03="2" key04="e" long04="3" key05="r" long05="4" key06="t" long06="5" key07="y" long07="6" key08="u" long08="7" key09="i" long09="8" key10="o" long10="9" key11="p" long11="0" key12="60:k:103"/> + <row2 key01="60:c:9" key02="34:" key03="a" long03="@" key04="s" long04="#" key05="d" long05="$" key06="f" long06="%" key07="g" long07="&" key08="h" long08="*" key09="j" long09="-" key10="k" long10="+" key11="l" long11="_" key12="34:" key13="60:k:105"/> + <row3 key01="60:" key02="102:layout2" key03="z" long03="!" key04="x" long04=""" key05="c" long05="'" key06="v" long06=":" key07="b" long07=";" key08="n" long08="/" key09="m" long09="?" key10="102:c:8" key11="60:k:106"/> + <row4 key01="60:k:29" key02="102:layout3" key03="/" key04="340: " key05="." key06="102:action" key07="60:k:108"/> + <keylabel key="0:layout2" text="Shift" resource="shift_terminal"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="48" width="68" capslock="0" revert_layout="1"/> + <row1 key01="60:c:27" long01=":c:3" key02="Q" long02="1" key03="W" long03="2" key04="E" long04="3" key05="R" long05="4" key06="T" long06="5" key07="Y" long07="6" key08="U" long08="7" key09="I" long09="8" key10="O" long10="9" key11="P" long11="0" key12="60:k:103"/> + <row2 key01="60:c:9" key02="34:" key03="A" long03="@" key04="S" long04="#" key05="D" long05="$" key06="F" long06="%" key07="G" long07="&" key08="H" long08="*" key09="J" long09="-" key10="K" long10="+" key11="L" long11="_" key12="34:" key13="60:k:105"/> + <row3 key01="60:" key02="102:layout1" key03="Z" long03="!" key04="X" long04=""" key05="C" long05="'" key06="V" long06=":" key07="B" long07=";" key08="N" long08="/" key09="M" long09="?" key10="102:c:8" key11="60:k:106"/> + <row4 key01="60:k:29" key02="102:layout3" key03="/" key04="340: " key05="." key06="102:action" key07="60:k:108"/> + <keylabel key="0:layout1" text="Shift" resource="shift_terminal_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="48" width="68"/> + <row1 key01="60:c:27" long01=":c:3" key02="1" key03="2" key04="3" key05="4" key06="5" key07="6" key08="7" key09="8" key10="9" key11="0" key12="60:k:103"/> + <row2 key01="60:c:9" key02="@" key03="#" key04="$" key05="%" key06="&" key07="*" key08="-" key09="+" key10="(" key11=")" key12="60:k:105"/> + <row3 key01="60:" key02="102:layout4" key03="!" key04="68:c:34" key05="'" key06=":" key07=";" key08="/" key09="?" key10="102:c:8" key11="60:k:106"/> + <row4 key01="60:k:29" key02="102:layout1" key03="," key04="340: " key05="." key06="102:action" key07="60:k:108"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="48" width="68"/> + <row1 key01="60:c:27" long01=":c:3" key02="~" key03="`" key04="|" key05="160:" key06="160:" key07="160:" key08="%" key09="160:" key10="{" key11="}" key12="60:k:103"/> + <row2 key01="60:c:9" key02="68:" key03="68:" key04="68:" key05="68:" key06="68:" key07="^" key08="_" key09="=" key10="[" key11="]" key12="60:k:105"/> + <row3 key01="60:" key02="102:layout3" key03="68:" key04="68:" key05="68:" key06="68:" key07="\" key08="<" key09=">" key10="102:c:8" key11="60:k:106"/> + <row4 key01="60:k:29" key02="102:layout1" key03="68:c:34" key04="340: " key05="." key06="102:action" key07="60:k:108"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + + <template name="keyboardtemplate"> + <keyboard> + <placement x="0" y="%keyboard_y%" w="800" h="192"/> + <keymargin x="4" y="4"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="14" y="2"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace"/> + <keylabel key="0:action" text="Enter" resource="enter"/> + <keylabel key=" " text="Space" resource="space"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <layout1> + <keysize height="48" width="80"/> + <row1 key01="q" long01="1" key02="w" long02="2" key03="e" long03="3" key04="r" long04="4" key05="t" long05="5" key06="y" long06="6" key07="u" long07="7" key08="i" long08="8" key09="o" long09="9" key10="p" long10="0"/> + <row2 key01="40:" key02="a" long02="@" key03="s" long03="#" key04="d" long04="$" key05="f" long05="%" key06="g" long06="&" key07="h" long07="*" key08="j" long08="-" key09="k" long09="+" key10="l" long10="_" key11="40:"/> + <row3 key01="120:layout2" key02="z" long02="!" key03="x" long03=""" key04="c" long04="'" key05="v" long05=":" key06="b" long06=";" key07="n" long07="/" key08="m" long08="?" key09="120:c:8"/> + <row4 key01="120:layout3" key02="/" key03="400: " key04="." key05="120:action"/> + <keylabel key="0:layout2" text="Shift" resource="shift"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="48" width="80" capslock="0" revert_layout="1"/> + <row1 key01="Q" long01="1" key02="W" long02="2" key03="E" long03="3" key04="R" long04="4" key05="T" long05="5" key06="Y" long06="6" key07="U" long07="7" key08="I" long08="8" key09="O" long09="9" key10="P" long10="0"/> + <row2 key01="40:" key02="A" long02="@" key03="S" long03="#" key04="D" long04="$" key05="F" long05="%" key06="G" long06="&" key07="H" long07="*" key08="J" long08="-" key09="K" long09="+" key10="L" long10="_" key11="40:"/> + <row3 key01="120:layout1" key02="Z" long02="!" key03="X" long03=""" key04="C" long04="'" key05="V" long05=":" key06="B" long06=";" key07="N" long07="/" key08="M" long08="?" key09="120:c:8"/> + <row4 key01="120:layout3" key02="/" key03="400: " key04="." key05="120:action"/> + <keylabel key="0:layout1" text="Shift" resource="shift_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="48" width="80"/> + <row1 key01="1" key02="2" key03="3" key04="4" key05="5" key06="6" key07="7" key08="8" key09="9" key10="0"/> + <row2 key01="@" key02="#" key03="$" key04="%" key05="&" key06="*" key07="-" key08="+" key09="(" key10=")"/> + <row3 key01="120:layout4" key02="!" key03="80:c:34" key04="'" key05=":" key06=";" key07="/" key08="?" key09="120:c:8"/> + <row4 key01="120:layout1" key02="," key03="400: " key04="." key05="120:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="48" width="80"/> + <row1 key01="~" key02="`" key03="|" key04="80:" key05="80:" key06="80:" key07="%" key08="80:" key09="{" key10="}"/> + <row2 key01="80:" key02="80:" key03="80:" key04="80:" key05="80:" key06="^" key07="_" key08="=" key09="[" key10="]"/> + <row3 key01="120:layout3" key02="80:" key03="80:" key04="80:" key05="80:" key06="\" key07="<" key08=">" key09="120:c:8"/> + <row4 key01="120:layout1" key02="80:c:34" key03="400: " key04="." key05="120:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + </templates> +</recovery> diff --git a/gui/theme/portrait_hdpi/images/back.png b/gui/theme/portrait_hdpi/images/back.png Binary files differnew file mode 100644 index 000000000..7369e2baa --- /dev/null +++ b/gui/theme/portrait_hdpi/images/back.png diff --git a/gui/theme/portrait_hdpi/images/backspace.png b/gui/theme/portrait_hdpi/images/backspace.png Binary files differnew file mode 100644 index 000000000..cc84f7a4e --- /dev/null +++ b/gui/theme/portrait_hdpi/images/backspace.png diff --git a/gui/theme/portrait_hdpi/images/checkbox_false.png b/gui/theme/portrait_hdpi/images/checkbox_false.png Binary files differnew file mode 100644 index 000000000..b7c801383 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/checkbox_false.png diff --git a/gui/theme/portrait_hdpi/images/checkbox_true.png b/gui/theme/portrait_hdpi/images/checkbox_true.png Binary files differnew file mode 100644 index 000000000..d8a7b5b23 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/checkbox_true.png diff --git a/gui/theme/portrait_hdpi/images/console.png b/gui/theme/portrait_hdpi/images/console.png Binary files differnew file mode 100644 index 000000000..13fce5c5f --- /dev/null +++ b/gui/theme/portrait_hdpi/images/console.png diff --git a/gui/theme/portrait_hdpi/images/cursor.png b/gui/theme/portrait_hdpi/images/cursor.png Binary files differnew file mode 100644 index 000000000..3513d065d --- /dev/null +++ b/gui/theme/portrait_hdpi/images/cursor.png diff --git a/gui/theme/portrait_hdpi/images/enter.png b/gui/theme/portrait_hdpi/images/enter.png Binary files differnew file mode 100644 index 000000000..365f99e38 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/enter.png diff --git a/gui/theme/portrait_hdpi/images/fab_selectfolder.png b/gui/theme/portrait_hdpi/images/fab_selectfolder.png Binary files differnew file mode 100644 index 000000000..3be39baf1 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/fab_selectfolder.png diff --git a/gui/theme/portrait_hdpi/images/file.png b/gui/theme/portrait_hdpi/images/file.png Binary files differnew file mode 100644 index 000000000..7f027da54 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/file.png diff --git a/gui/theme/portrait_hdpi/images/folder.png b/gui/theme/portrait_hdpi/images/folder.png Binary files differnew file mode 100644 index 000000000..ebdced250 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/folder.png diff --git a/gui/theme/portrait_hdpi/images/handle.png b/gui/theme/portrait_hdpi/images/handle.png Binary files differnew file mode 100644 index 000000000..cdd20a050 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/handle.png diff --git a/gui/theme/portrait_hdpi/images/home.png b/gui/theme/portrait_hdpi/images/home.png Binary files differnew file mode 100644 index 000000000..d2d56a5fe --- /dev/null +++ b/gui/theme/portrait_hdpi/images/home.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate001.png b/gui/theme/portrait_hdpi/images/indeterminate001.png Binary files differnew file mode 100644 index 000000000..151c8ac0e --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate001.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate002.png b/gui/theme/portrait_hdpi/images/indeterminate002.png Binary files differnew file mode 100644 index 000000000..7d663736b --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate002.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate003.png b/gui/theme/portrait_hdpi/images/indeterminate003.png Binary files differnew file mode 100644 index 000000000..b235c01c9 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate003.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate004.png b/gui/theme/portrait_hdpi/images/indeterminate004.png Binary files differnew file mode 100644 index 000000000..0ac66d572 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate004.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate005.png b/gui/theme/portrait_hdpi/images/indeterminate005.png Binary files differnew file mode 100644 index 000000000..86992eb93 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate005.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate006.png b/gui/theme/portrait_hdpi/images/indeterminate006.png Binary files differnew file mode 100644 index 000000000..e03772cf6 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate006.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate007.png b/gui/theme/portrait_hdpi/images/indeterminate007.png Binary files differnew file mode 100644 index 000000000..4ff1aa40d --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate007.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate008.png b/gui/theme/portrait_hdpi/images/indeterminate008.png Binary files differnew file mode 100644 index 000000000..ff757ee77 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate008.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate009.png b/gui/theme/portrait_hdpi/images/indeterminate009.png Binary files differnew file mode 100644 index 000000000..9e337f9fa --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate009.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate010.png b/gui/theme/portrait_hdpi/images/indeterminate010.png Binary files differnew file mode 100644 index 000000000..7dbcd79ed --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate010.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate011.png b/gui/theme/portrait_hdpi/images/indeterminate011.png Binary files differnew file mode 100644 index 000000000..ab67d38a4 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate011.png diff --git a/gui/theme/portrait_hdpi/images/indeterminate012.png b/gui/theme/portrait_hdpi/images/indeterminate012.png Binary files differnew file mode 100644 index 000000000..ceadbb058 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/indeterminate012.png diff --git a/gui/theme/portrait_hdpi/images/kb_arrow_down.png b/gui/theme/portrait_hdpi/images/kb_arrow_down.png Binary files differnew file mode 100644 index 000000000..ba3b90aeb --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_arrow_down.png diff --git a/gui/theme/portrait_hdpi/images/kb_arrow_left.png b/gui/theme/portrait_hdpi/images/kb_arrow_left.png Binary files differnew file mode 100644 index 000000000..c6d1fd67b --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_arrow_left.png diff --git a/gui/theme/portrait_hdpi/images/kb_arrow_right.png b/gui/theme/portrait_hdpi/images/kb_arrow_right.png Binary files differnew file mode 100644 index 000000000..be0f124df --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_arrow_right.png diff --git a/gui/theme/portrait_hdpi/images/kb_arrow_up.png b/gui/theme/portrait_hdpi/images/kb_arrow_up.png Binary files differnew file mode 100644 index 000000000..16d776549 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_arrow_up.png diff --git a/gui/theme/portrait_hdpi/images/kb_hide.png b/gui/theme/portrait_hdpi/images/kb_hide.png Binary files differnew file mode 100644 index 000000000..6fa9c6d4d --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_hide.png diff --git a/gui/theme/portrait_hdpi/images/kb_show.png b/gui/theme/portrait_hdpi/images/kb_show.png Binary files differnew file mode 100644 index 000000000..69a0eedee --- /dev/null +++ b/gui/theme/portrait_hdpi/images/kb_show.png diff --git a/gui/theme/portrait_hdpi/images/logo.png b/gui/theme/portrait_hdpi/images/logo.png Binary files differnew file mode 100644 index 000000000..d311a2d6f --- /dev/null +++ b/gui/theme/portrait_hdpi/images/logo.png diff --git a/gui/theme/portrait_hdpi/images/main_button.png b/gui/theme/portrait_hdpi/images/main_button.png Binary files differnew file mode 100644 index 000000000..b6ca36b9c --- /dev/null +++ b/gui/theme/portrait_hdpi/images/main_button.png diff --git a/gui/theme/portrait_hdpi/images/main_button_half_height.png b/gui/theme/portrait_hdpi/images/main_button_half_height.png Binary files differnew file mode 100644 index 000000000..f8a526381 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/main_button_half_height.png diff --git a/gui/theme/portrait_hdpi/images/main_button_half_height_full_width.png b/gui/theme/portrait_hdpi/images/main_button_half_height_full_width.png Binary files differnew file mode 100644 index 000000000..33a2a1aa2 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/main_button_half_height_full_width.png diff --git a/gui/theme/portrait_hdpi/images/progress_empty.png b/gui/theme/portrait_hdpi/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..6f7d65254 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/progress_empty.png diff --git a/gui/theme/portrait_hdpi/images/progress_fill.png b/gui/theme/portrait_hdpi/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..41ca3213b --- /dev/null +++ b/gui/theme/portrait_hdpi/images/progress_fill.png diff --git a/gui/theme/portrait_hdpi/images/radio_false.png b/gui/theme/portrait_hdpi/images/radio_false.png Binary files differnew file mode 100644 index 000000000..213e2be23 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/radio_false.png diff --git a/gui/theme/portrait_hdpi/images/radio_true.png b/gui/theme/portrait_hdpi/images/radio_true.png Binary files differnew file mode 100644 index 000000000..c8499b4de --- /dev/null +++ b/gui/theme/portrait_hdpi/images/radio_true.png diff --git a/gui/theme/portrait_hdpi/images/shift.png b/gui/theme/portrait_hdpi/images/shift.png Binary files differnew file mode 100644 index 000000000..53de2e2d7 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/shift.png diff --git a/gui/theme/portrait_hdpi/images/shift_fill.png b/gui/theme/portrait_hdpi/images/shift_fill.png Binary files differnew file mode 100644 index 000000000..bc8124708 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/shift_fill.png diff --git a/gui/theme/portrait_hdpi/images/slider.png b/gui/theme/portrait_hdpi/images/slider.png Binary files differnew file mode 100644 index 000000000..f2d67998b --- /dev/null +++ b/gui/theme/portrait_hdpi/images/slider.png diff --git a/gui/theme/portrait_hdpi/images/slider_touch.png b/gui/theme/portrait_hdpi/images/slider_touch.png Binary files differnew file mode 100644 index 000000000..1157c9b2c --- /dev/null +++ b/gui/theme/portrait_hdpi/images/slider_touch.png diff --git a/gui/theme/portrait_hdpi/images/slider_used.png b/gui/theme/portrait_hdpi/images/slider_used.png Binary files differnew file mode 100644 index 000000000..3501ad1d0 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/slider_used.png diff --git a/gui/theme/portrait_hdpi/images/sort_asc.png b/gui/theme/portrait_hdpi/images/sort_asc.png Binary files differnew file mode 100644 index 000000000..19f8483cf --- /dev/null +++ b/gui/theme/portrait_hdpi/images/sort_asc.png diff --git a/gui/theme/portrait_hdpi/images/sort_desc.png b/gui/theme/portrait_hdpi/images/sort_desc.png Binary files differnew file mode 100644 index 000000000..160af06e4 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/sort_desc.png diff --git a/gui/theme/portrait_hdpi/images/sort_empty.png b/gui/theme/portrait_hdpi/images/sort_empty.png Binary files differnew file mode 100644 index 000000000..4e2c53820 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/sort_empty.png diff --git a/gui/theme/portrait_hdpi/images/space.png b/gui/theme/portrait_hdpi/images/space.png Binary files differnew file mode 100644 index 000000000..be39629ef --- /dev/null +++ b/gui/theme/portrait_hdpi/images/space.png diff --git a/gui/theme/portrait_hdpi/images/splashlogo.png b/gui/theme/portrait_hdpi/images/splashlogo.png Binary files differnew file mode 100644 index 000000000..42f516c95 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/splashlogo.png diff --git a/gui/theme/portrait_hdpi/images/splashteamwin.png b/gui/theme/portrait_hdpi/images/splashteamwin.png Binary files differnew file mode 100644 index 000000000..16a6d5994 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/splashteamwin.png diff --git a/gui/theme/portrait_hdpi/images/tab_3.png b/gui/theme/portrait_hdpi/images/tab_3.png Binary files differnew file mode 100644 index 000000000..0061b6bd8 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_3.png diff --git a/gui/theme/portrait_hdpi/images/tab_4.png b/gui/theme/portrait_hdpi/images/tab_4.png Binary files differnew file mode 100644 index 000000000..27a3e7199 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_4.png diff --git a/gui/theme/portrait_hdpi/images/tab_display.png b/gui/theme/portrait_hdpi/images/tab_display.png Binary files differnew file mode 100644 index 000000000..91e2014f9 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_display.png diff --git a/gui/theme/portrait_hdpi/images/tab_general.png b/gui/theme/portrait_hdpi/images/tab_general.png Binary files differnew file mode 100644 index 000000000..08a8f27eb --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_general.png diff --git a/gui/theme/portrait_hdpi/images/tab_language.png b/gui/theme/portrait_hdpi/images/tab_language.png Binary files differnew file mode 100644 index 000000000..a664e970e --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_language.png diff --git a/gui/theme/portrait_hdpi/images/tab_timezone.png b/gui/theme/portrait_hdpi/images/tab_timezone.png Binary files differnew file mode 100644 index 000000000..d270ebd47 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_timezone.png diff --git a/gui/theme/portrait_hdpi/images/tab_vibration.png b/gui/theme/portrait_hdpi/images/tab_vibration.png Binary files differnew file mode 100644 index 000000000..a227fc908 --- /dev/null +++ b/gui/theme/portrait_hdpi/images/tab_vibration.png diff --git a/gui/theme/portrait_hdpi/images/unlock_icon.png b/gui/theme/portrait_hdpi/images/unlock_icon.png Binary files differnew file mode 100644 index 000000000..5865e931d --- /dev/null +++ b/gui/theme/portrait_hdpi/images/unlock_icon.png diff --git a/gui/theme/portrait_hdpi/splash.xml b/gui/theme/portrait_hdpi/splash.xml new file mode 100644 index 000000000..93932b983 --- /dev/null +++ b/gui/theme/portrait_hdpi/splash.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="1080" height="1920"/> + <author>TeamWin</author> + <title>TWRP</title> + <description>splash screen</description> + <themeversion>2</themeversion> + </details> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="52"/> + <image name="splashlogo" filename="splashlogo" retainaspect="1"/> + <image name="splashteamwin" filename="splashteamwin" retainaspect="1"/> + </resources> + + <variables> + <variable name="screen_width" value="1080"/> + <variable name="screen_height" value="1920"/> + <variable name="background_color" value="#222222"/> + <variable name="header_color" value="#555555"/> + <variable name="accent_color" value="#0090CA"/> + </variables> + + <pages> + <page name="splash"> + <background color="%background_color%"/> + + <fill color="%header_color%"> + <placement x="0" y="0" w="%screen_width%" h="456"/> + </fill> + + <image> + <image resource="splashlogo"/> + <placement x="540" y="456" placement="4"/> + </image> + + <image> + <image resource="splashteamwin"/> + <placement x="540" y="1540" placement="4"/> + </image> + + <text color="%header_color%"> + <font resource="font_l"/> + <placement x="540" y="1590" placement="5"/> + <text>Recovery Project %tw_version%</text> + </text> + </page> + </pages> +</recovery> + diff --git a/gui/theme/portrait_hdpi/ui.xml b/gui/theme/portrait_hdpi/ui.xml new file mode 100644 index 000000000..4bce1465c --- /dev/null +++ b/gui/theme/portrait_hdpi/ui.xml @@ -0,0 +1,639 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="1080" height="1920"/> + <author>TeamWin</author> + <title>Backup Naowz</title> + <description>Default basic theme</description> + <preview>preview.png</preview> + <themeversion>2</themeversion> + </details> + + <include> + <xmlfile name="portrait.xml"/> + </include> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="54"/> + <font name="font_m" filename="RobotoCondensed-Regular.ttf" size="42"/> + <font name="font_s" filename="RobotoCondensed-Regular.ttf" size="36"/> + <font name="fixed" filename="DroidSansMono.ttf" size="30"/> + + <font name="keylabel" filename="RobotoCondensed-Regular.ttf" size="64"/> + <font name="keylabel-small" filename="RobotoCondensed-Regular.ttf" size="46"/> + <font name="keylabel-longpress" filename="RobotoCondensed-Regular.ttf" size="32"/> + + <image name="logo" filename="logo" retainaspect="1"/> + <image name="main_button" filename="main_button"/> + <image name="main_button_half_height" filename="main_button_half_height"/> + <image name="main_button_half_height_full_width" filename="main_button_half_height_full_width"/> + <image name="fab_selectfolder" filename="fab_selectfolder" retainaspect="1"/> + <image name="tab_3" filename="tab_3"/> + <image name="tab_4" filename="tab_4"/> + <image name="file" filename="file" retainaspect="1"/> + <image name="folder" filename="folder" retainaspect="1"/> + <image name="unlock_icon" filename="unlock_icon" retainaspect="1"/> + <image name="home" filename="home" retainaspect="1"/> + <image name="back" filename="back" retainaspect="1"/> + <image name="console" filename="console" retainaspect="1"/> + <image name="kb_hide" filename="kb_hide" retainaspect="1"/> + <image name="kb_show" filename="kb_show" retainaspect="1"/> + <image name="checkbox_false" filename="checkbox_false" retainaspect="1"/> + <image name="checkbox_true" filename="checkbox_true" retainaspect="1"/> + <image name="radio_false" filename="radio_false" retainaspect="1"/> + <image name="radio_true" filename="radio_true" retainaspect="1"/> + <image name="sort_asc" filename="sort_asc"/> + <image name="sort_desc" filename="sort_desc"/> + <image name="sort_empty" filename="sort_empty"/> + <animation name="progress" filename="indeterminate"/> + <image name="progress_empty" filename="progress_empty"/> + <image name="progress_full" filename="progress_fill"/> + <image name="slider" filename="slider"/> + <image name="slider_used" filename="slider_used"/> + <image name="slider_touch" filename="slider_touch"/> + <image name="handle" filename="handle"/> + <image name="cursor" filename="cursor" retainaspect="1"/> + <image name="tab_general" filename="tab_general" retainaspect="1"/> + <image name="tab_timezone" filename="tab_timezone" retainaspect="1"/> + <image name="tab_display" filename="tab_display" retainaspect="1"/> + <image name="tab_vibration" filename="tab_vibration" retainaspect="1"/> + <image name="tab_language" filename="tab_language" retainaspect="1"/> + + <image name="backspace" filename="backspace" retainaspect="1"/> + <image name="enter" filename="enter" retainaspect="1"/> + <image name="shift" filename="shift" retainaspect="1"/> + <image name="shift_fill" filename="shift_fill" retainaspect="1"/> + <image name="space" filename="space" retainaspect="1"/> + <image name="kb_arrow_left" filename="kb_arrow_left" retainaspect="1"/> + <image name="kb_arrow_right" filename="kb_arrow_right" retainaspect="1"/> + <image name="kb_arrow_up" filename="kb_arrow_up" retainaspect="1"/> + <image name="kb_arrow_down" filename="kb_arrow_down" retainaspect="1"/> + </resources> + + <variables> + <variable name="tw_samsung_navbar" value="0" persist="1"/> + + <variable name="tw_hide_kb" value="0"/> + <variable name="screen_width" value="1080"/> + <variable name="screen_height" value="1920"/> + <variable name="status_height" value="72"/> + <variable name="header_height" value="256"/> + <variable name="navbar_height" value="130"/> + <variable name="content_width" value="1008"/> + <variable name="content_overlay_width" value="936"/> + <variable name="dialog_height" value="704"/> + <variable name="back_button_x" value="240"/> + <variable name="console_button_x" value="840"/> + <variable name="indent" value="36"/> + <variable name="col1_x_left" value="72"/> + <variable name="col1_x_header" value="184"/> + <variable name="center_x" value="540"/> + <variable name="col1_x_right" value="576"/> + <variable name="indent_right" value="1044"/> + <variable name="tab_height" value="96"/> + <variable name="tab_indicator_height" value="6"/> + <variable name="tab_y" value="304"/> + <variable name="tab3_width" value="360"/> + <variable name="tab4_width" value="270"/> + <variable name="tab5_width" value="216"/> + <variable name="tab3_col2_x" value="360"/> + <variable name="tab3_col3_x" value="720"/> + <variable name="tab4_col2_x" value="270"/> + <variable name="tab4_col4_x" value="810"/> + <variable name="tab5_col2_x" value="216"/> + <variable name="tab5_col3_x" value="432"/> + <variable name="tab5_col4_x" value="648"/> + <variable name="tab5_col5_x" value="864"/> + <variable name="tab5_centered_col1_x" value="108"/> + <variable name="tab5_centered_col2_x" value="324"/> + <variable name="tab5_centered_col4_x" value="756"/> + <variable name="tab5_centered_col5_x" value="972"/> + <variable name="btn3_col2_x" value="384"/> + <variable name="btn3_col3_x" value="732"/> + <variable name="btn4_col2_x" value="297"/> + <variable name="btn4_col3_x" value="558"/> + <variable name="btn4_col4_x" value="819"/> + <variable name="row1_header_y" value="4"/> + <variable name="row2_header_y" value="72"/> + <variable name="row3_header_y" value="90"/> + <variable name="row4_header_y" value="168"/> + <variable name="row1_y" value="256"/> + <variable name="row1a_y" value="288"/> + <variable name="row2_y" value="320"/> + <variable name="row2a_y" value="352"/> + <variable name="row_tab_y" value="346"/> + <variable name="row2_input_y" value="381"/> + <variable name="row3_y" value="384"/> + <variable name="row3_input_y" value="413"/> + <variable name="row3a_y" value="416"/> + <variable name="row4_y" value="448"/> + <variable name="row4_input_y" value="477"/> + <variable name="row4a_y" value="480"/> + <variable name="row5_y" value="512"/> + <variable name="row5a_y" value="544"/> + <variable name="row6_y" value="576"/> + <variable name="row6a_y" value="608"/> + <variable name="row7_y" value="640"/> + <variable name="row7a_y" value="672"/> + <variable name="row8_y" value="704"/> + <variable name="row8a_y" value="736"/> + <variable name="row9_y" value="768"/> + <variable name="row9a_y" value="800"/> + <variable name="row10_y" value="832"/> + <variable name="row10a_y" value="864"/> + <variable name="row11_y" value="896"/> + <variable name="row11a_y" value="928"/> + <variable name="row12_y" value="960"/> + <variable name="row12a_y" value="992"/> + <variable name="row13_y" value="1024"/> + <variable name="row13a_y" value="1056"/> + <variable name="row14_y" value="1088"/> + <variable name="row14a_y" value="1120"/> + <variable name="row15_y" value="1152"/> + <variable name="row15a_y" value="1184"/> + <variable name="row16_y" value="1216"/> + <variable name="row16a_y" value="1248"/> + <variable name="row17_y" value="1280"/> + <variable name="row17a_y" value="1312"/> + <variable name="row18_y" value="1344"/> + <variable name="row18a_y" value="1376"/> + <variable name="row19_y" value="1408"/> + <variable name="row19a_y" value="1440"/> + <variable name="row20_y" value="1472"/> + <variable name="row20a_y" value="1504"/> + <variable name="row21_y" value="1536"/> + <variable name="row21a_y" value="1568"/> + <variable name="row22_y" value="1600"/> + <variable name="row22a_y" value="1632"/> + <variable name="row23_y" value="1664"/> + <variable name="row23a_y" value="1696"/> + <variable name="row24_y" value="1728"/> + <variable name="row24a_y" value="1760"/> + <variable name="row25_y" value="1792"/> + <variable name="navbar_y" value="1792"/> + <variable name="navbar_btn_y" value="1856"/> + <variable name="keyboard_y" value="1149"/> + <variable name="keyboard_terminal_y" value="1053"/> + <variable name="background_color" value="#1A1A1A"/> + <variable name="accent_color" value="#0090CA"/> + <variable name="accent_color_semitransparent" value="#0090CA30"/> + <variable name="text_color" value="#EEEEEE"/> + <variable name="text_button_color" value="#EEEEEE"/> + <variable name="text_success_color" value="#76FF03"/> + <variable name="text_fail_color" value="#FF0101"/> + <variable name="highlight_color" value="#1A1A1A80"/> + <variable name="caps_highlight_color" value="#22222280"/> + <variable name="transparent" value="#00000000"/> + <variable name="semi_transparent" value="#00000099"/> + <variable name="warning" value="#F8F8A0"/> + <variable name="error" value="#FF0101"/> + <variable name="highlight" value="#0090CA"/> + <variable name="fileselector_linecolor" value="#555555"/> + <variable name="fileselector_highlight_color" value="#555555"/> + <variable name="fileselector_separatorheight" value="2"/> + <variable name="fileselector_spacing" value="0"/> + <variable name="fileselector_install_height" value="1152"/> + <variable name="fileselector_filemanager_height" value="1376"/> + <variable name="partitionlist_spacing" value="0"/> + <variable name="partitionlist_storage_height" value="544"/> + <variable name="partitionlist_flashimage_height" value="544"/> + <variable name="partitionlist_wipe_height" value="1088"/> + <variable name="partitionlist_mount_height" value="832"/> + <variable name="partitionlist_backup_height" value="768"/> + <variable name="listbox_timezone_height" value="756"/> + <variable name="listbox_settings_height" value="960"/> + <variable name="fastscroll_w" value="24"/> + <variable name="fastscroll_linew" value="2"/> + <variable name="fastscroll_rectw" value="24"/> + <variable name="fastscroll_recth" value="108"/> + <variable name="slidervalue_lineh" value="3"/> + <variable name="slidervalue_padding" value="0"/> + <variable name="slidervalue_sliderw" value="72"/> + <variable name="slidervalue_sliderh" value="108"/> + <variable name="slideout_height" value="1686"/> + <variable name="slideout_bg_height" value="1720"/> + <variable name="input_height" value="64"/> + <variable name="input_line_width" value="3"/> + <variable name="console_height" value="960"/> + <variable name="console_terminal_height" value="950"/> + <variable name="dialog_button_x" value="696"/> + <variable name="pattern_x" value="126"/> + <variable name="pattern_dot_dia" value="32"/> + <variable name="pattern_line_w" value="12"/> + <variable name="pattern_size" value="828"/> + </variables> + + <mousecursor> + <placement w="15" h="15"/> + <background color="#FFFF00FF" resource="cursor"/> + <speed multiplier="2.5"/> + </mousecursor> + + <templates> + <template name="page"> + <background color="%background_color%"/> + + <fill color="%accent_color%"> + <placement x="0" y="0" w="%screen_width%" h="%header_height%"/> + </fill> + + <image> + <condition var1="tw_busy" var2="1"/> + <image resource="logo"/> + <placement x="0" y="0"/> + </image> + + <button> + <condition var1="tw_busy" var2="0"/> + <placement x="0" y="0"/> + <image resource="logo"/> + <action function="key">home</action> + </button> + + <fill color="#00000030"> + <condition var1="tw_simulate_actions" var2="0"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_simulate_actions" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="1"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>%tw_version%</text> + </text> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@cpu_temp=CPU: %tw_cpu_temp% °C}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%center_x%" y="%row1_header_y%" placement="5"/> + <text>%tw_time%</text> + </text> + + <text color="%text_color%"> + <conditions> + <condition var1="tw_no_battery_percent" var2="0"/> + <condition var1="tw_battery" op=">" var2="0"/> + <condition var1="tw_battery" op="<" var2="101"/> + </conditions> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>{@battery_pct=Battery: %tw_battery%}</text> + </text> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </template> + + <template name="progress_bar"> + <progressbar> + <placement x="%indent%" y="%row17a_y%"/> + <resource empty="progress_empty" full="progress_full"/> + <data name="ui_progress"/> + </progressbar> + + <animation> + <placement x="%indent%" y="%row17a_y%"/> + <resource name="progress"/> + <speed fps="24" render="2"/> + <loop frame="1"/> + </animation> + </template> + + <template name="sort_options"> + <image> + <placement x="%indent%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <image> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <image> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="1"/> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-1"/> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="1"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-1"/> + </conditions> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="2"/> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-2"/> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="2"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-2"/> + </conditions> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="3"/> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-3</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-3"/> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=3</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="3"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-3"/> + </conditions> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=3</action> + </button> + </template> + + <template name="tabs_backup"> + <fill color="%accent_color%"> + <placement x="0" y="row1_y" w="%screen_width%" h="tab_height"/> + </fill> + + <button style="tab"> + <placement x="0" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@tab_backup=BACKUP}</text> + <action function="page">backup</action> + </button> + + <button style="tab"> + <placement x="%tab3_col2_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@tab_options=OPTIONS}</text> + <action function="page">backup_options</action> + </button> + </template> + + <template name="tabs_settings"> + <fill color="%accent_color%"> + <placement x="0" y="row1_y" w="%screen_width%" h="tab_height"/> + </fill> + + <button style="tab"> + <placement x="%tab5_centered_col1_x%" y="%tab_y%" placement="4"/> + <image resource="tab_general"/> + <action function="page">settings</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col2_x%" y="%tab_y%" placement="4"/> + <image resource="tab_timezone"/> + <action function="page">settings_timezone</action> + </button> + + <button style="tab"> + <placement x="%center_x%" y="%tab_y%" placement="4"/> + <image resource="tab_display"/> + <action function="page">settings_screen</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col4_x%" y="%tab_y%" placement="4"/> + <image resource="tab_vibration"/> + <action function="page">settings_vibration</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col5_x%" y="%tab_y%" placement="4"/> + <image resource="tab_language"/> + <action function="page">settings_language</action> + </button> + </template> + + <template name="console"> + <console> + <placement x="%indent%" y="%row2_y%" w="%content_width%" h="%console_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row17_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="console_terminal"> + <console> + <placement x="%indent%" y="%row2_y%" w="content_width" h="%console_terminal_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row11_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="keyboardterminaltemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_terminal_y%" w="%screen_width%" h="96"/> + <keymargin x="0" y="0"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="12" y="0"/> + <keylabel key="0:k:29" text="Ctrl"/> + <keylabel key="0:c:27" text="Esc"/> + <keylabel key="0:c:9" text="Tab"/> + <keylabel key="0:k:105" text="<" resource="kb_arrow_left"/> + <keylabel key="0:k:108" text="v" resource="kb_arrow_down"/> + <keylabel key="0:k:103" text="^" resource="kb_arrow_up"/> + <keylabel key="0:k:106" text=">" resource="kb_arrow_right"/> + <highlight color="%highlight_color%"/> + <ctrlhighlight color="#0090CA80"/> + <layout1> + <keysize height="96" width="154"/> + <row1 key01="155:k:29" key02="155:c:27" long02=":c:3" key03="154:c:9" key04="154:k:105" key05="154:k:108" key06="154:k:103" key07="154:k:106"/> + </layout1> + </keyboard> + </template> + + <template name="keyboardtemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_y%" w="1080" h="644"/> + <keymargin x="8" y="8"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="12" y="0"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace"/> + <keylabel key="0:action" text="Enter" resource="enter"/> + <keylabel key=" " text="Space" resource="space"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <layout1> + <keysize height="161" width="108"/> + <row1 key01="q" long01="1" key02="w" long02="2" key03="e" long03="3" key04="r" long04="4" key05="t" long05="5" key06="y" long06="6" key07="u" long07="7" key08="i" long08="8" key09="o" long09="9" key10="p" long10="0"/> + <row2 key01="54:" key02="a" long02="@" key03="s" long03="#" key04="d" long04="$" key05="f" long05="%" key06="g" long06="&" key07="h" long07="*" key08="j" long08="-" key09="k" long09="+" key10="l" long10="_" key11="54:"/> + <row3 key01="162:layout2" key02="z" long02="!" key03="x" long03=""" key04="c" long04="'" key05="v" long05=":" key06="b" long06=";" key07="n" long07="/" key08="m" long08="?" key09="162:c:8"/> + <row4 key01="162:layout3" key02="/" key03="540: " key04="." key05="162:action"/> + <keylabel key="0:layout2" text="Shift" resource="shift"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="161" width="108" capslock="0" revert_layout="1"/> + <row1 key01="Q" long01="1" key02="W" long02="2" key03="E" long03="3" key04="R" long04="4" key05="T" long05="5" key06="Y" long06="6" key07="U" long07="7" key08="I" long08="8" key09="O" long09="9" key10="P" long10="0"/> + <row2 key01="54:" key02="A" long02="@" key03="S" long03="#" key04="D" long04="$" key05="F" long05="%" key06="G" long06="&" key07="H" long07="*" key08="J" long08="-" key09="K" long09="+" key10="L" long10="_" key11="54:"/> + <row3 key01="162:layout1" key02="Z" long02="!" key03="X" long03=""" key04="C" long04="'" key05="V" long05=":" key06="B" long06=";" key07="N" long07="/" key08="M" long08="?" key09="162:c:8"/> + <row4 key01="162:layout3" key02="/" key03="540: " key04="." key05="162:action"/> + <keylabel key="0:layout1" text="Shift" resource="shift_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="161" width="108"/> + <row1 key01="1" key02="2" key03="3" key04="4" key05="5" key06="6" key07="7" key08="8" key09="9" key10="0"/> + <row2 key01="@" key02="#" key03="$" key04="%" key05="&" key06="*" key07="-" key08="+" key09="(" key10=")"/> + <row3 key01="162:layout4" key02="!" key03="108:c:34" key04="'" key05=":" key06=";" key07="/" key08="?" key09="162:c:8"/> + <row4 key01="162:layout1" key02="," key03="540: " key04="." key05="162:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="161" width="108"/> + <row1 key01="~" key02="`" key03="|" key04="108:" key05="108:" key06="108:" key07="%" key08="108:" key09="{" key10="}"/> + <row2 key01="108:" key02="108:" key03="108:" key04="108:" key05="108:" key06="^" key07="_" key08="=" key09="[" key10="]"/> + <row3 key01="162:layout3" key02="108:" key03="108:" key04="108:" key05="108:" key06="\" key07="<" key08=">" key09="162:c:8"/> + <row4 key01="162:layout1" key02="108:c:34" key03="540: " key04="." key05="162:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + </templates> +</recovery> diff --git a/gui/theme/portrait_mdpi/images/back.png b/gui/theme/portrait_mdpi/images/back.png Binary files differnew file mode 100644 index 000000000..67182bf3b --- /dev/null +++ b/gui/theme/portrait_mdpi/images/back.png diff --git a/gui/theme/portrait_mdpi/images/backspace.png b/gui/theme/portrait_mdpi/images/backspace.png Binary files differnew file mode 100644 index 000000000..f7d75db15 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/backspace.png diff --git a/gui/theme/portrait_mdpi/images/checkbox_false.png b/gui/theme/portrait_mdpi/images/checkbox_false.png Binary files differnew file mode 100644 index 000000000..0fd57c151 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/checkbox_false.png diff --git a/gui/theme/portrait_mdpi/images/checkbox_true.png b/gui/theme/portrait_mdpi/images/checkbox_true.png Binary files differnew file mode 100644 index 000000000..5a286f327 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/checkbox_true.png diff --git a/gui/theme/portrait_mdpi/images/console.png b/gui/theme/portrait_mdpi/images/console.png Binary files differnew file mode 100644 index 000000000..7223548d2 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/console.png diff --git a/gui/theme/portrait_mdpi/images/cursor.png b/gui/theme/portrait_mdpi/images/cursor.png Binary files differnew file mode 100644 index 000000000..0c9ae5ced --- /dev/null +++ b/gui/theme/portrait_mdpi/images/cursor.png diff --git a/gui/theme/portrait_mdpi/images/enter.png b/gui/theme/portrait_mdpi/images/enter.png Binary files differnew file mode 100644 index 000000000..1132d643b --- /dev/null +++ b/gui/theme/portrait_mdpi/images/enter.png diff --git a/gui/theme/portrait_mdpi/images/fab_selectfolder.png b/gui/theme/portrait_mdpi/images/fab_selectfolder.png Binary files differnew file mode 100644 index 000000000..c9470eb2b --- /dev/null +++ b/gui/theme/portrait_mdpi/images/fab_selectfolder.png diff --git a/gui/theme/portrait_mdpi/images/file.png b/gui/theme/portrait_mdpi/images/file.png Binary files differnew file mode 100644 index 000000000..3d17f151d --- /dev/null +++ b/gui/theme/portrait_mdpi/images/file.png diff --git a/gui/theme/portrait_mdpi/images/folder.png b/gui/theme/portrait_mdpi/images/folder.png Binary files differnew file mode 100644 index 000000000..d9d67f390 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/folder.png diff --git a/gui/theme/portrait_mdpi/images/handle.png b/gui/theme/portrait_mdpi/images/handle.png Binary files differnew file mode 100644 index 000000000..e376523ed --- /dev/null +++ b/gui/theme/portrait_mdpi/images/handle.png diff --git a/gui/theme/portrait_mdpi/images/home.png b/gui/theme/portrait_mdpi/images/home.png Binary files differnew file mode 100644 index 000000000..199602bc4 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/home.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate001.png b/gui/theme/portrait_mdpi/images/indeterminate001.png Binary files differnew file mode 100644 index 000000000..d3a3e1f16 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate001.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate002.png b/gui/theme/portrait_mdpi/images/indeterminate002.png Binary files differnew file mode 100644 index 000000000..975d4f351 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate002.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate003.png b/gui/theme/portrait_mdpi/images/indeterminate003.png Binary files differnew file mode 100644 index 000000000..12e165c3f --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate003.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate004.png b/gui/theme/portrait_mdpi/images/indeterminate004.png Binary files differnew file mode 100644 index 000000000..3aa60624b --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate004.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate005.png b/gui/theme/portrait_mdpi/images/indeterminate005.png Binary files differnew file mode 100644 index 000000000..8b31bbeff --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate005.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate006.png b/gui/theme/portrait_mdpi/images/indeterminate006.png Binary files differnew file mode 100644 index 000000000..a7dc4e1e8 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate006.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate007.png b/gui/theme/portrait_mdpi/images/indeterminate007.png Binary files differnew file mode 100644 index 000000000..213160fdf --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate007.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate008.png b/gui/theme/portrait_mdpi/images/indeterminate008.png Binary files differnew file mode 100644 index 000000000..8c63de217 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate008.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate009.png b/gui/theme/portrait_mdpi/images/indeterminate009.png Binary files differnew file mode 100644 index 000000000..c90e3e052 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate009.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate010.png b/gui/theme/portrait_mdpi/images/indeterminate010.png Binary files differnew file mode 100644 index 000000000..43fd2715f --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate010.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate011.png b/gui/theme/portrait_mdpi/images/indeterminate011.png Binary files differnew file mode 100644 index 000000000..34b13f439 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate011.png diff --git a/gui/theme/portrait_mdpi/images/indeterminate012.png b/gui/theme/portrait_mdpi/images/indeterminate012.png Binary files differnew file mode 100644 index 000000000..ee93701a3 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/indeterminate012.png diff --git a/gui/theme/portrait_mdpi/images/kb_arrow_down.png b/gui/theme/portrait_mdpi/images/kb_arrow_down.png Binary files differnew file mode 100644 index 000000000..79071b1c6 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_arrow_down.png diff --git a/gui/theme/portrait_mdpi/images/kb_arrow_left.png b/gui/theme/portrait_mdpi/images/kb_arrow_left.png Binary files differnew file mode 100644 index 000000000..c44a87348 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_arrow_left.png diff --git a/gui/theme/portrait_mdpi/images/kb_arrow_right.png b/gui/theme/portrait_mdpi/images/kb_arrow_right.png Binary files differnew file mode 100644 index 000000000..9b4a91816 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_arrow_right.png diff --git a/gui/theme/portrait_mdpi/images/kb_arrow_up.png b/gui/theme/portrait_mdpi/images/kb_arrow_up.png Binary files differnew file mode 100644 index 000000000..c55d21ec1 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_arrow_up.png diff --git a/gui/theme/portrait_mdpi/images/kb_hide.png b/gui/theme/portrait_mdpi/images/kb_hide.png Binary files differnew file mode 100644 index 000000000..4c1a3bf26 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_hide.png diff --git a/gui/theme/portrait_mdpi/images/kb_show.png b/gui/theme/portrait_mdpi/images/kb_show.png Binary files differnew file mode 100644 index 000000000..3ec3fe71c --- /dev/null +++ b/gui/theme/portrait_mdpi/images/kb_show.png diff --git a/gui/theme/portrait_mdpi/images/logo.png b/gui/theme/portrait_mdpi/images/logo.png Binary files differnew file mode 100644 index 000000000..6a8be5f85 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/logo.png diff --git a/gui/theme/portrait_mdpi/images/main_button.png b/gui/theme/portrait_mdpi/images/main_button.png Binary files differnew file mode 100644 index 000000000..a4b5b6160 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/main_button.png diff --git a/gui/theme/portrait_mdpi/images/main_button_half_height.png b/gui/theme/portrait_mdpi/images/main_button_half_height.png Binary files differnew file mode 100644 index 000000000..964c33b15 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/main_button_half_height.png diff --git a/gui/theme/portrait_mdpi/images/main_button_half_height_full_width.png b/gui/theme/portrait_mdpi/images/main_button_half_height_full_width.png Binary files differnew file mode 100644 index 000000000..70b8f27be --- /dev/null +++ b/gui/theme/portrait_mdpi/images/main_button_half_height_full_width.png diff --git a/gui/theme/portrait_mdpi/images/progress_empty.png b/gui/theme/portrait_mdpi/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..6f04b81ef --- /dev/null +++ b/gui/theme/portrait_mdpi/images/progress_empty.png diff --git a/gui/theme/portrait_mdpi/images/progress_fill.png b/gui/theme/portrait_mdpi/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..6744d3e56 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/progress_fill.png diff --git a/gui/theme/portrait_mdpi/images/radio_false.png b/gui/theme/portrait_mdpi/images/radio_false.png Binary files differnew file mode 100644 index 000000000..f7167a35d --- /dev/null +++ b/gui/theme/portrait_mdpi/images/radio_false.png diff --git a/gui/theme/portrait_mdpi/images/radio_true.png b/gui/theme/portrait_mdpi/images/radio_true.png Binary files differnew file mode 100644 index 000000000..cd12eb4dc --- /dev/null +++ b/gui/theme/portrait_mdpi/images/radio_true.png diff --git a/gui/theme/portrait_mdpi/images/shift.png b/gui/theme/portrait_mdpi/images/shift.png Binary files differnew file mode 100644 index 000000000..0d99d5a2c --- /dev/null +++ b/gui/theme/portrait_mdpi/images/shift.png diff --git a/gui/theme/portrait_mdpi/images/shift_fill.png b/gui/theme/portrait_mdpi/images/shift_fill.png Binary files differnew file mode 100644 index 000000000..88ed853a2 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/shift_fill.png diff --git a/gui/theme/portrait_mdpi/images/slider.png b/gui/theme/portrait_mdpi/images/slider.png Binary files differnew file mode 100644 index 000000000..0a407d958 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/slider.png diff --git a/gui/theme/portrait_mdpi/images/slider_touch.png b/gui/theme/portrait_mdpi/images/slider_touch.png Binary files differnew file mode 100644 index 000000000..e22d41434 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/slider_touch.png diff --git a/gui/theme/portrait_mdpi/images/slider_used.png b/gui/theme/portrait_mdpi/images/slider_used.png Binary files differnew file mode 100644 index 000000000..e4f529315 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/slider_used.png diff --git a/gui/theme/portrait_mdpi/images/sort_asc.png b/gui/theme/portrait_mdpi/images/sort_asc.png Binary files differnew file mode 100644 index 000000000..2be68c835 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/sort_asc.png diff --git a/gui/theme/portrait_mdpi/images/sort_desc.png b/gui/theme/portrait_mdpi/images/sort_desc.png Binary files differnew file mode 100644 index 000000000..26186c587 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/sort_desc.png diff --git a/gui/theme/portrait_mdpi/images/sort_empty.png b/gui/theme/portrait_mdpi/images/sort_empty.png Binary files differnew file mode 100644 index 000000000..b9dc56c15 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/sort_empty.png diff --git a/gui/theme/portrait_mdpi/images/space.png b/gui/theme/portrait_mdpi/images/space.png Binary files differnew file mode 100644 index 000000000..51599af5b --- /dev/null +++ b/gui/theme/portrait_mdpi/images/space.png diff --git a/gui/theme/portrait_mdpi/images/splashlogo.png b/gui/theme/portrait_mdpi/images/splashlogo.png Binary files differnew file mode 100644 index 000000000..daac29442 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/splashlogo.png diff --git a/gui/theme/portrait_mdpi/images/splashteamwin.png b/gui/theme/portrait_mdpi/images/splashteamwin.png Binary files differnew file mode 100644 index 000000000..d2fad9cc4 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/splashteamwin.png diff --git a/gui/theme/portrait_mdpi/images/tab_3.png b/gui/theme/portrait_mdpi/images/tab_3.png Binary files differnew file mode 100644 index 000000000..65d2ae690 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_3.png diff --git a/gui/theme/portrait_mdpi/images/tab_4.png b/gui/theme/portrait_mdpi/images/tab_4.png Binary files differnew file mode 100644 index 000000000..65d2ae690 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_4.png diff --git a/gui/theme/portrait_mdpi/images/tab_display.png b/gui/theme/portrait_mdpi/images/tab_display.png Binary files differnew file mode 100644 index 000000000..cbd3314c6 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_display.png diff --git a/gui/theme/portrait_mdpi/images/tab_general.png b/gui/theme/portrait_mdpi/images/tab_general.png Binary files differnew file mode 100644 index 000000000..c953926fa --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_general.png diff --git a/gui/theme/portrait_mdpi/images/tab_language.png b/gui/theme/portrait_mdpi/images/tab_language.png Binary files differnew file mode 100644 index 000000000..ba01efab7 --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_language.png diff --git a/gui/theme/portrait_mdpi/images/tab_timezone.png b/gui/theme/portrait_mdpi/images/tab_timezone.png Binary files differnew file mode 100644 index 000000000..298993d9f --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_timezone.png diff --git a/gui/theme/portrait_mdpi/images/tab_vibration.png b/gui/theme/portrait_mdpi/images/tab_vibration.png Binary files differnew file mode 100644 index 000000000..3117f3beb --- /dev/null +++ b/gui/theme/portrait_mdpi/images/tab_vibration.png diff --git a/gui/theme/portrait_mdpi/images/unlock_icon.png b/gui/theme/portrait_mdpi/images/unlock_icon.png Binary files differnew file mode 100644 index 000000000..d19b8e4bb --- /dev/null +++ b/gui/theme/portrait_mdpi/images/unlock_icon.png diff --git a/gui/theme/portrait_mdpi/splash.xml b/gui/theme/portrait_mdpi/splash.xml new file mode 100644 index 000000000..80338eb82 --- /dev/null +++ b/gui/theme/portrait_mdpi/splash.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="480" height="800"/> + <author>TeamWin</author> + <title>TWRP</title> + <description>splash screen</description> + <themeversion>2</themeversion> + </details> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="24"/> + <image name="splashlogo" filename="splashlogo" retainaspect="1"/> + <image name="splashteamwin" filename="splashteamwin" retainaspect="1"/> + </resources> + + <variables> + <variable name="screen_width" value="480"/> + <variable name="screen_height" value="800"/> + <variable name="background_color" value="#222222"/> + <variable name="header_color" value="#555555"/> + <variable name="accent_color" value="#0090CA"/> + </variables> + + <pages> + <page name="splash"> + <background color="%background_color%"/> + + <fill color="%header_color%"> + <placement x="0" y="0" w="%screen_width%" h="200"/> + </fill> + + <image> + <image resource="splashlogo"/> + <placement x="240" y="200" placement="4"/> + </image> + + <image> + <image resource="splashteamwin"/> + <placement x="240" y="660" placement="4"/> + </image> + + <text color="%header_color%"> + <font resource="font_l"/> + <placement x="240" y="680" placement="5"/> + <text>Recovery Project %tw_version%</text> + </text> + </page> + </pages> +</recovery> + diff --git a/gui/theme/portrait_mdpi/ui.xml b/gui/theme/portrait_mdpi/ui.xml new file mode 100644 index 000000000..94c142863 --- /dev/null +++ b/gui/theme/portrait_mdpi/ui.xml @@ -0,0 +1,639 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="480" height="800"/> + <author>TeamWin</author> + <title>Backup Naowz</title> + <description>Default basic theme</description> + <preview>preview.png</preview> + <themeversion>2</themeversion> + </details> + + <include> + <xmlfile name="portrait.xml"/> + </include> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="24"/> + <font name="font_m" filename="RobotoCondensed-Regular.ttf" size="18"/> + <font name="font_s" filename="RobotoCondensed-Regular.ttf" size="14"/> + <font name="fixed" filename="DroidSansMono.ttf" size="12"/> + + <font name="keylabel" filename="RobotoCondensed-Regular.ttf" size="30"/> + <font name="keylabel-small" filename="RobotoCondensed-Regular.ttf" size="20"/> + <font name="keylabel-longpress" filename="RobotoCondensed-Regular.ttf" size="14"/> + + <image name="logo" filename="logo" retainaspect="1"/> + <image name="main_button" filename="main_button"/> + <image name="main_button_half_height" filename="main_button_half_height"/> + <image name="main_button_half_height_full_width" filename="main_button_half_height_full_width"/> + <image name="fab_selectfolder" filename="fab_selectfolder" retainaspect="1"/> + <image name="tab_3" filename="tab_3"/> + <image name="tab_4" filename="tab_4"/> + <image name="file" filename="file" retainaspect="1"/> + <image name="folder" filename="folder" retainaspect="1"/> + <image name="unlock_icon" filename="unlock_icon" retainaspect="1"/> + <image name="home" filename="home" retainaspect="1"/> + <image name="back" filename="back" retainaspect="1"/> + <image name="console" filename="console" retainaspect="1"/> + <image name="kb_hide" filename="kb_hide" retainaspect="1"/> + <image name="kb_show" filename="kb_show" retainaspect="1"/> + <image name="checkbox_false" filename="checkbox_false" retainaspect="1"/> + <image name="checkbox_true" filename="checkbox_true" retainaspect="1"/> + <image name="radio_false" filename="radio_false" retainaspect="1"/> + <image name="radio_true" filename="radio_true" retainaspect="1"/> + <image name="sort_asc" filename="sort_asc"/> + <image name="sort_desc" filename="sort_desc"/> + <image name="sort_empty" filename="sort_empty"/> + <animation name="progress" filename="indeterminate"/> + <image name="progress_empty" filename="progress_empty"/> + <image name="progress_full" filename="progress_fill"/> + <image name="slider" filename="slider"/> + <image name="slider_used" filename="slider_used"/> + <image name="slider_touch" filename="slider_touch"/> + <image name="handle" filename="handle"/> + <image name="cursor" filename="cursor" retainaspect="1"/> + <image name="tab_general" filename="tab_general" retainaspect="1"/> + <image name="tab_timezone" filename="tab_timezone" retainaspect="1"/> + <image name="tab_display" filename="tab_display" retainaspect="1"/> + <image name="tab_vibration" filename="tab_vibration" retainaspect="1"/> + <image name="tab_language" filename="tab_language" retainaspect="1"/> + + <image name="backspace" filename="backspace" retainaspect="1"/> + <image name="enter" filename="enter" retainaspect="1"/> + <image name="shift" filename="shift" retainaspect="1"/> + <image name="shift_fill" filename="shift_fill" retainaspect="1"/> + <image name="space" filename="space" retainaspect="1"/> + <image name="kb_arrow_left" filename="kb_arrow_left" retainaspect="1"/> + <image name="kb_arrow_right" filename="kb_arrow_right" retainaspect="1"/> + <image name="kb_arrow_up" filename="kb_arrow_up" retainaspect="1"/> + <image name="kb_arrow_down" filename="kb_arrow_down" retainaspect="1"/> + </resources> + + <variables> + <variable name="tw_samsung_navbar" value="0" persist="1"/> + + <variable name="tw_hide_kb" value="0"/> + <variable name="screen_width" value="480"/> + <variable name="screen_height" value="800"/> + <variable name="status_height" value="30"/> + <variable name="header_height" value="110"/> + <variable name="navbar_height" value="52"/> + <variable name="content_width" value="450"/> + <variable name="content_overlay_width" value="420"/> + <variable name="dialog_height" value="286"/> + <variable name="back_button_x" value="105"/> + <variable name="console_button_x" value="375"/> + <variable name="indent" value="15"/> + <variable name="col1_x_left" value="30"/> + <variable name="col1_x_header" value="82"/> + <variable name="center_x" value="240"/> + <variable name="col1_x_right" value="255"/> + <variable name="indent_right" value="465"/> + <variable name="tab_height" value="40"/> + <variable name="tab_indicator_height" value="3"/> + <variable name="tab_y" value="130"/> + <variable name="tab3_width" value="160"/> + <variable name="tab4_width" value="120"/> + <variable name="tab5_width" value="96"/> + <variable name="tab3_col2_x" value="160"/> + <variable name="tab3_col3_x" value="320"/> + <variable name="tab4_col2_x" value="120"/> + <variable name="tab4_col4_x" value="360"/> + <variable name="tab5_col2_x" value="96"/> + <variable name="tab5_col3_x" value="192"/> + <variable name="tab5_col4_x" value="288"/> + <variable name="tab5_col5_x" value="384"/> + <variable name="tab5_centered_col1_x" value="48"/> + <variable name="tab5_centered_col2_x" value="144"/> + <variable name="tab5_centered_col4_x" value="336"/> + <variable name="tab5_centered_col5_x" value="432"/> + <variable name="btn3_col2_x" value="170"/> + <variable name="btn3_col3_x" value="325"/> + <variable name="btn4_col2_x" value="131"/> + <variable name="btn4_col3_x" value="247"/> + <variable name="btn4_col4_x" value="363"/> + <variable name="row1_header_y" value="2"/> + <variable name="row2_header_y" value="30"/> + <variable name="row3_header_y" value="40"/> + <variable name="row4_header_y" value="74"/> + <variable name="row1_y" value="110"/> + <variable name="row1a_y" value="123"/> + <variable name="row2_y" value="136"/> + <variable name="row2a_y" value="149"/> + <variable name="row_tab_y" value="147"/> + <variable name="row2_input_y" value="162"/> + <variable name="row3_y" value="162"/> + <variable name="row3_input_y" value="175"/> + <variable name="row3a_y" value="175"/> + <variable name="row4_y" value="188"/> + <variable name="row4_input_y" value="201"/> + <variable name="row4a_y" value="201"/> + <variable name="row5_y" value="214"/> + <variable name="row5a_y" value="227"/> + <variable name="row6_y" value="240"/> + <variable name="row6a_y" value="253"/> + <variable name="row7_y" value="266"/> + <variable name="row7a_y" value="279"/> + <variable name="row8_y" value="292"/> + <variable name="row8a_y" value="305"/> + <variable name="row9_y" value="318"/> + <variable name="row9a_y" value="331"/> + <variable name="row10_y" value="344"/> + <variable name="row10a_y" value="357"/> + <variable name="row11_y" value="370"/> + <variable name="row11a_y" value="383"/> + <variable name="row12_y" value="396"/> + <variable name="row12a_y" value="409"/> + <variable name="row13_y" value="422"/> + <variable name="row13a_y" value="435"/> + <variable name="row14_y" value="448"/> + <variable name="row14a_y" value="461"/> + <variable name="row15_y" value="474"/> + <variable name="row15a_y" value="487"/> + <variable name="row16_y" value="500"/> + <variable name="row16a_y" value="513"/> + <variable name="row17_y" value="526"/> + <variable name="row17a_y" value="539"/> + <variable name="row18_y" value="552"/> + <variable name="row18a_y" value="565"/> + <variable name="row19_y" value="578"/> + <variable name="row19a_y" value="591"/> + <variable name="row20_y" value="604"/> + <variable name="row20a_y" value="617"/> + <variable name="row21_y" value="630"/> + <variable name="row21a_y" value="643"/> + <variable name="row22_y" value="656"/> + <variable name="row22a_y" value="669"/> + <variable name="row23_y" value="682"/> + <variable name="row23a_y" value="695"/> + <variable name="row24_y" value="708"/> + <variable name="row24a_y" value="721"/> + <variable name="row25_y" value="734"/> + <variable name="navbar_y" value="748"/> + <variable name="navbar_btn_y" value="774"/> + <variable name="keyboard_y" value="464"/> + <variable name="keyboard_terminal_y" value="422"/> + <variable name="background_color" value="#1A1A1A"/> + <variable name="accent_color" value="#0090CA"/> + <variable name="accent_color_semitransparent" value="#0090CA30"/> + <variable name="text_color" value="#EEEEEE"/> + <variable name="text_button_color" value="#EEEEEE"/> + <variable name="text_success_color" value="#76FF03"/> + <variable name="text_fail_color" value="#FF0101"/> + <variable name="highlight_color" value="#1A1A1A80"/> + <variable name="caps_highlight_color" value="#22222280"/> + <variable name="transparent" value="#00000000"/> + <variable name="semi_transparent" value="#00000099"/> + <variable name="warning" value="#F8F8A0"/> + <variable name="error" value="#FF0101"/> + <variable name="highlight" value="#0090CA"/> + <variable name="fileselector_linecolor" value="#555555"/> + <variable name="fileselector_highlight_color" value="#555555"/> + <variable name="fileselector_separatorheight" value="1"/> + <variable name="fileselector_spacing" value="0"/> + <variable name="fileselector_install_height" value="468"/> + <variable name="fileselector_filemanager_height" value="559"/> + <variable name="partitionlist_spacing" value="0"/> + <variable name="partitionlist_storage_height" value="221"/> + <variable name="partitionlist_flashimage_height" value="221"/> + <variable name="partitionlist_wipe_height" value="442"/> + <variable name="partitionlist_mount_height" value="338"/> + <variable name="partitionlist_backup_height" value="312"/> + <variable name="listbox_timezone_height" value="306"/> + <variable name="listbox_settings_height" value="400"/> + <variable name="fastscroll_w" value="10"/> + <variable name="fastscroll_linew" value="2"/> + <variable name="fastscroll_rectw" value="10"/> + <variable name="fastscroll_recth" value="52"/> + <variable name="slidervalue_lineh" value="2"/> + <variable name="slidervalue_padding" value="0"/> + <variable name="slidervalue_sliderw" value="32"/> + <variable name="slidervalue_sliderh" value="48"/> + <variable name="slideout_height" value="700"/> + <variable name="slideout_bg_height" value="718"/> + <variable name="input_height" value="26"/> + <variable name="input_line_width" value="2"/> + <variable name="console_height" value="390"/> + <variable name="console_terminal_height" value="369"/> + <variable name="dialog_button_x" value="310"/> + <variable name="pattern_x" value="60"/> + <variable name="pattern_dot_dia" value="12"/> + <variable name="pattern_line_w" value="4"/> + <variable name="pattern_size" value="360"/> + </variables> + + <mousecursor> + <placement w="15" h="15"/> + <background color="#FFFF00FF" resource="cursor"/> + <speed multiplier="2.5"/> + </mousecursor> + + <templates> + <template name="page"> + <background color="%background_color%"/> + + <fill color="%accent_color%"> + <placement x="0" y="0" w="%screen_width%" h="%header_height%"/> + </fill> + + <image> + <condition var1="tw_busy" var2="1"/> + <image resource="logo"/> + <placement x="0" y="0"/> + </image> + + <button> + <condition var1="tw_busy" var2="0"/> + <placement x="0" y="0"/> + <image resource="logo"/> + <action function="key">home</action> + </button> + + <fill color="#00000030"> + <condition var1="tw_simulate_actions" var2="0"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_simulate_actions" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="1"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>%tw_version%</text> + </text> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@cpu_temp=CPU: %tw_cpu_temp% °C}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%center_x%" y="%row1_header_y%" placement="5"/> + <text>%tw_time%</text> + </text> + + <text color="%text_color%"> + <conditions> + <condition var1="tw_no_battery_percent" var2="0"/> + <condition var1="tw_battery" op=">" var2="0"/> + <condition var1="tw_battery" op="<" var2="101"/> + </conditions> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>{@battery_pct=Battery: %tw_battery%}</text> + </text> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="!=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <button> + <condition var1="tw_samsung_navbar" op="=" var2="1"/> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </template> + + <template name="progress_bar"> + <progressbar> + <placement x="%indent%" y="%row17a_y%"/> + <resource empty="progress_empty" full="progress_full"/> + <data name="ui_progress"/> + </progressbar> + + <animation> + <placement x="%indent%" y="%row17a_y%"/> + <resource name="progress"/> + <speed fps="24" render="2"/> + <loop frame="1"/> + </animation> + </template> + + <template name="sort_options"> + <image> + <placement x="%indent%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <image> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <image> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <image resource="tab_3"/> + </image> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="1"/> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-1"/> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="1"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-1"/> + </conditions> + <placement x="%indent%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_name_only=Name}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=1</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="2"/> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-2"/> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="2"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-2"/> + </conditions> + <placement x="%btn3_col2_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_date_only=Date}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=2</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="3"/> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_asc"/> + <action function="set">tw_gui_sort_order=-3</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <condition var1="tw_gui_sort_order" op="=" var2="-3"/> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_desc"/> + <action function="set">tw_gui_sort_order=3</action> + </button> + + <button> + <highlight color="%highlight_color%"/> + <conditions> + <condition var1="tw_gui_sort_order" op="!=" var2="3"/> + <condition var1="tw_gui_sort_order" op="!=" var2="-3"/> + </conditions> + <placement x="%btn3_col3_x%" y="%row1a_y%"/> + <font resource="font_s" color="%text_button_color%"/> + <text>{@sort_by_size_only=Size}</text> + <image resource="sort_empty"/> + <action function="set">tw_gui_sort_order=3</action> + </button> + </template> + + <template name="tabs_backup"> + <fill color="%accent_color%"> + <placement x="0" y="row1_y" w="%screen_width%" h="tab_height"/> + </fill> + + <button style="tab"> + <placement x="0" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@tab_backup=BACKUP}</text> + <action function="page">backup</action> + </button> + + <button style="tab"> + <placement x="%tab3_col2_x%" y="%row1_y%" w="%tab3_width%" h="%tab_height%"/> + <text>{@tab_options=OPTIONS}</text> + <action function="page">backup_options</action> + </button> + </template> + + <template name="tabs_settings"> + <fill color="%accent_color%"> + <placement x="0" y="row1_y" w="%screen_width%" h="tab_height"/> + </fill> + + <button style="tab"> + <placement x="%tab5_centered_col1_x%" y="%tab_y%" placement="4"/> + <image resource="tab_general"/> + <action function="page">settings</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col2_x%" y="%tab_y%" placement="4"/> + <image resource="tab_timezone"/> + <action function="page">settings_timezone</action> + </button> + + <button style="tab"> + <placement x="%center_x%" y="%tab_y%" placement="4"/> + <image resource="tab_display"/> + <action function="page">settings_screen</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col4_x%" y="%tab_y%" placement="4"/> + <image resource="tab_vibration"/> + <action function="page">settings_vibration</action> + </button> + + <button style="tab"> + <placement x="%tab5_centered_col5_x%" y="%tab_y%" placement="4"/> + <image resource="tab_language"/> + <action function="page">settings_language</action> + </button> + </template> + + <template name="console"> + <console> + <placement x="%indent%" y="%row2_y%" w="%content_width%" h="%console_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row17_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="console_terminal"> + <console> + <placement x="%indent%" y="%row2_y%" w="content_width" h="%console_terminal_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row2_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row11_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="keyboardterminaltemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_terminal_y%" w="%screen_width%" h="42"/> + <keymargin x="0" y="0"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="12" y="0"/> + <keylabel key="0:k:29" text="Ctrl"/> + <keylabel key="0:c:27" text="Esc"/> + <keylabel key="0:c:9" text="Tab"/> + <keylabel key="0:k:105" text="<" resource="kb_arrow_left"/> + <keylabel key="0:k:108" text="v" resource="kb_arrow_down"/> + <keylabel key="0:k:103" text="^" resource="kb_arrow_up"/> + <keylabel key="0:k:106" text=">" resource="kb_arrow_right"/> + <highlight color="%highlight_color%"/> + <ctrlhighlight color="#0090CA80"/> + <layout1> + <keysize height="42" width="69"/> + <row1 key01="68:k:29" key02="68:c:27" long02=":c:3" key03="68:c:9" key04="69:k:105" key05="69:k:108" key06="69:k:103" key07="69:k:106"/> + </layout1> + </keyboard> + </template> + + <template name="keyboardtemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_y%" w="480" h="284"/> + <keymargin x="4" y="4"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="6" y="0"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace"/> + <keylabel key="0:action" text="Enter" resource="enter"/> + <keylabel key=" " text="Space" resource="space"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <layout1> + <keysize height="71" width="48"/> + <row1 key01="q" long01="1" key02="w" long02="2" key03="e" long03="3" key04="r" long04="4" key05="t" long05="5" key06="y" long06="6" key07="u" long07="7" key08="i" long08="8" key09="o" long09="9" key10="p" long10="0"/> + <row2 key01="24:" key02="a" long02="@" key03="s" long03="#" key04="d" long04="$" key05="f" long05="%" key06="g" long06="&" key07="h" long07="*" key08="j" long08="-" key09="k" long09="+" key10="l" long10="_" key11="24:"/> + <row3 key01="72:layout2" key02="z" long02="!" key03="x" long03=""" key04="c" long04="'" key05="v" long05=":" key06="b" long06=";" key07="n" long07="/" key08="m" long08="?" key09="72:c:8"/> + <row4 key01="72:layout3" key02="/" key03="240: " key04="." key05="72:action"/> + <keylabel key="0:layout2" text="Shift" resource="shift"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="71" width="48" capslock="0" revert_layout="1"/> + <row1 key01="Q" long01="1" key02="W" long02="2" key03="E" long03="3" key04="R" long04="4" key05="T" long05="5" key06="Y" long06="6" key07="U" long07="7" key08="I" long08="8" key09="O" long09="9" key10="P" long10="0"/> + <row2 key01="24:" key02="A" long02="@" key03="S" long03="#" key04="D" long04="$" key05="F" long05="%" key06="G" long06="&" key07="H" long07="*" key08="J" long08="-" key09="K" long09="+" key10="L" long10="_" key11="24:"/> + <row3 key01="72:layout1" key02="Z" long02="!" key03="X" long03=""" key04="C" long04="'" key05="V" long05=":" key06="B" long06=";" key07="N" long07="/" key08="M" long08="?" key09="72:c:8"/> + <row4 key01="72:layout3" key02="/" key03="240: " key04="." key05="72:action"/> + <keylabel key="0:layout1" text="Shift" resource="shift_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="71" width="48"/> + <row1 key01="1" key02="2" key03="3" key04="4" key05="5" key06="6" key07="7" key08="8" key09="9" key10="0"/> + <row2 key01="@" key02="#" key03="$" key04="%" key05="&" key06="*" key07="-" key08="+" key09="(" key10=")"/> + <row3 key01="72:layout4" key02="!" key03="48:c:34" key04="'" key05=":" key06=";" key07="/" key08="?" key09="72:c:8"/> + <row4 key01="72:layout1" key02="," key03="240: " key04="." key05="72:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="71" width="48"/> + <row1 key01="~" key02="`" key03="|" key04="48:" key05="48:" key06="48:" key07="%" key08="48:" key09="{" key10="}"/> + <row2 key01="48:" key02="48:" key03="48:" key04="48:" key05="48:" key06="^" key07="_" key08="=" key09="[" key10="]"/> + <row3 key01="72:layout3" key02="48:" key03="48:" key04="48:" key05="48:" key06="\" key07="<" key08=">" key09="72:c:8"/> + <row4 key01="72:layout1" key02="48:c:34" key03="240: " key04="." key05="72:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + </templates> +</recovery> diff --git a/gui/theme/watch_mdpi/images/back.png b/gui/theme/watch_mdpi/images/back.png Binary files differnew file mode 100644 index 000000000..b4bcda71f --- /dev/null +++ b/gui/theme/watch_mdpi/images/back.png diff --git a/gui/theme/watch_mdpi/images/backspace.png b/gui/theme/watch_mdpi/images/backspace.png Binary files differnew file mode 100644 index 000000000..cf22b65fa --- /dev/null +++ b/gui/theme/watch_mdpi/images/backspace.png diff --git a/gui/theme/watch_mdpi/images/checkbox_false.png b/gui/theme/watch_mdpi/images/checkbox_false.png Binary files differnew file mode 100644 index 000000000..4439e458c --- /dev/null +++ b/gui/theme/watch_mdpi/images/checkbox_false.png diff --git a/gui/theme/watch_mdpi/images/checkbox_false_small.png b/gui/theme/watch_mdpi/images/checkbox_false_small.png Binary files differnew file mode 100644 index 000000000..e6b0b44eb --- /dev/null +++ b/gui/theme/watch_mdpi/images/checkbox_false_small.png diff --git a/gui/theme/watch_mdpi/images/checkbox_true.png b/gui/theme/watch_mdpi/images/checkbox_true.png Binary files differnew file mode 100644 index 000000000..b0b7709fa --- /dev/null +++ b/gui/theme/watch_mdpi/images/checkbox_true.png diff --git a/gui/theme/watch_mdpi/images/checkbox_true_small.png b/gui/theme/watch_mdpi/images/checkbox_true_small.png Binary files differnew file mode 100644 index 000000000..ae8a080ba --- /dev/null +++ b/gui/theme/watch_mdpi/images/checkbox_true_small.png diff --git a/gui/theme/watch_mdpi/images/close.png b/gui/theme/watch_mdpi/images/close.png Binary files differnew file mode 100644 index 000000000..95c0cf4eb --- /dev/null +++ b/gui/theme/watch_mdpi/images/close.png diff --git a/gui/theme/watch_mdpi/images/console.png b/gui/theme/watch_mdpi/images/console.png Binary files differnew file mode 100644 index 000000000..cf94aa8a3 --- /dev/null +++ b/gui/theme/watch_mdpi/images/console.png diff --git a/gui/theme/watch_mdpi/images/enter.png b/gui/theme/watch_mdpi/images/enter.png Binary files differnew file mode 100644 index 000000000..e831bedee --- /dev/null +++ b/gui/theme/watch_mdpi/images/enter.png diff --git a/gui/theme/watch_mdpi/images/file.png b/gui/theme/watch_mdpi/images/file.png Binary files differnew file mode 100644 index 000000000..ea2cedf87 --- /dev/null +++ b/gui/theme/watch_mdpi/images/file.png diff --git a/gui/theme/watch_mdpi/images/folder.png b/gui/theme/watch_mdpi/images/folder.png Binary files differnew file mode 100644 index 000000000..3d5be9aef --- /dev/null +++ b/gui/theme/watch_mdpi/images/folder.png diff --git a/gui/theme/watch_mdpi/images/grid_less.png b/gui/theme/watch_mdpi/images/grid_less.png Binary files differnew file mode 100644 index 000000000..d71867fff --- /dev/null +++ b/gui/theme/watch_mdpi/images/grid_less.png diff --git a/gui/theme/watch_mdpi/images/grid_more.png b/gui/theme/watch_mdpi/images/grid_more.png Binary files differnew file mode 100644 index 000000000..4f03d93b0 --- /dev/null +++ b/gui/theme/watch_mdpi/images/grid_more.png diff --git a/gui/theme/watch_mdpi/images/handle.png b/gui/theme/watch_mdpi/images/handle.png Binary files differnew file mode 100644 index 000000000..e474978fa --- /dev/null +++ b/gui/theme/watch_mdpi/images/handle.png diff --git a/gui/theme/watch_mdpi/images/home.png b/gui/theme/watch_mdpi/images/home.png Binary files differnew file mode 100644 index 000000000..42955ba69 --- /dev/null +++ b/gui/theme/watch_mdpi/images/home.png diff --git a/gui/theme/watch_mdpi/images/indeterminate001.png b/gui/theme/watch_mdpi/images/indeterminate001.png Binary files differnew file mode 100644 index 000000000..e1431edb1 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate001.png diff --git a/gui/theme/watch_mdpi/images/indeterminate002.png b/gui/theme/watch_mdpi/images/indeterminate002.png Binary files differnew file mode 100644 index 000000000..be06bd61e --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate002.png diff --git a/gui/theme/watch_mdpi/images/indeterminate003.png b/gui/theme/watch_mdpi/images/indeterminate003.png Binary files differnew file mode 100644 index 000000000..e47fae3bb --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate003.png diff --git a/gui/theme/watch_mdpi/images/indeterminate004.png b/gui/theme/watch_mdpi/images/indeterminate004.png Binary files differnew file mode 100644 index 000000000..1931b60be --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate004.png diff --git a/gui/theme/watch_mdpi/images/indeterminate005.png b/gui/theme/watch_mdpi/images/indeterminate005.png Binary files differnew file mode 100644 index 000000000..f372669a6 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate005.png diff --git a/gui/theme/watch_mdpi/images/indeterminate006.png b/gui/theme/watch_mdpi/images/indeterminate006.png Binary files differnew file mode 100644 index 000000000..2a1f1da83 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate006.png diff --git a/gui/theme/watch_mdpi/images/indeterminate007.png b/gui/theme/watch_mdpi/images/indeterminate007.png Binary files differnew file mode 100644 index 000000000..5244e53e0 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate007.png diff --git a/gui/theme/watch_mdpi/images/indeterminate008.png b/gui/theme/watch_mdpi/images/indeterminate008.png Binary files differnew file mode 100644 index 000000000..cf20bb12b --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate008.png diff --git a/gui/theme/watch_mdpi/images/indeterminate009.png b/gui/theme/watch_mdpi/images/indeterminate009.png Binary files differnew file mode 100644 index 000000000..f8a75477d --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate009.png diff --git a/gui/theme/watch_mdpi/images/indeterminate010.png b/gui/theme/watch_mdpi/images/indeterminate010.png Binary files differnew file mode 100644 index 000000000..bfd0a6d62 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate010.png diff --git a/gui/theme/watch_mdpi/images/indeterminate011.png b/gui/theme/watch_mdpi/images/indeterminate011.png Binary files differnew file mode 100644 index 000000000..004b77fa4 --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate011.png diff --git a/gui/theme/watch_mdpi/images/indeterminate012.png b/gui/theme/watch_mdpi/images/indeterminate012.png Binary files differnew file mode 100644 index 000000000..a6770771f --- /dev/null +++ b/gui/theme/watch_mdpi/images/indeterminate012.png diff --git a/gui/theme/watch_mdpi/images/kb_arrow_down.png b/gui/theme/watch_mdpi/images/kb_arrow_down.png Binary files differnew file mode 100644 index 000000000..1439b59e8 --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_arrow_down.png diff --git a/gui/theme/watch_mdpi/images/kb_arrow_left.png b/gui/theme/watch_mdpi/images/kb_arrow_left.png Binary files differnew file mode 100644 index 000000000..2afb82c85 --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_arrow_left.png diff --git a/gui/theme/watch_mdpi/images/kb_arrow_right.png b/gui/theme/watch_mdpi/images/kb_arrow_right.png Binary files differnew file mode 100644 index 000000000..fb565b9dd --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_arrow_right.png diff --git a/gui/theme/watch_mdpi/images/kb_arrow_up.png b/gui/theme/watch_mdpi/images/kb_arrow_up.png Binary files differnew file mode 100644 index 000000000..af00e7585 --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_arrow_up.png diff --git a/gui/theme/watch_mdpi/images/kb_hide.png b/gui/theme/watch_mdpi/images/kb_hide.png Binary files differnew file mode 100644 index 000000000..170cf33ef --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_hide.png diff --git a/gui/theme/watch_mdpi/images/kb_show.png b/gui/theme/watch_mdpi/images/kb_show.png Binary files differnew file mode 100644 index 000000000..4115c6336 --- /dev/null +++ b/gui/theme/watch_mdpi/images/kb_show.png diff --git a/gui/theme/watch_mdpi/images/main_button.png b/gui/theme/watch_mdpi/images/main_button.png Binary files differnew file mode 100644 index 000000000..769a1b394 --- /dev/null +++ b/gui/theme/watch_mdpi/images/main_button.png diff --git a/gui/theme/watch_mdpi/images/main_button_full_width.png b/gui/theme/watch_mdpi/images/main_button_full_width.png Binary files differnew file mode 100644 index 000000000..19012c461 --- /dev/null +++ b/gui/theme/watch_mdpi/images/main_button_full_width.png diff --git a/gui/theme/watch_mdpi/images/main_button_half_height.png b/gui/theme/watch_mdpi/images/main_button_half_height.png Binary files differnew file mode 100644 index 000000000..220604881 --- /dev/null +++ b/gui/theme/watch_mdpi/images/main_button_half_height.png diff --git a/gui/theme/watch_mdpi/images/main_button_quarter_width.png b/gui/theme/watch_mdpi/images/main_button_quarter_width.png Binary files differnew file mode 100644 index 000000000..f068f5fa9 --- /dev/null +++ b/gui/theme/watch_mdpi/images/main_button_quarter_width.png diff --git a/gui/theme/watch_mdpi/images/progress_empty.png b/gui/theme/watch_mdpi/images/progress_empty.png Binary files differnew file mode 100644 index 000000000..561d49c52 --- /dev/null +++ b/gui/theme/watch_mdpi/images/progress_empty.png diff --git a/gui/theme/watch_mdpi/images/progress_fill.png b/gui/theme/watch_mdpi/images/progress_fill.png Binary files differnew file mode 100644 index 000000000..54c0e1b4e --- /dev/null +++ b/gui/theme/watch_mdpi/images/progress_fill.png diff --git a/gui/theme/watch_mdpi/images/q_btn_accept.png b/gui/theme/watch_mdpi/images/q_btn_accept.png Binary files differnew file mode 100644 index 000000000..4c04f228d --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_accept.png diff --git a/gui/theme/watch_mdpi/images/q_btn_accept_transp.png b/gui/theme/watch_mdpi/images/q_btn_accept_transp.png Binary files differnew file mode 100644 index 000000000..9d1c17793 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_accept_transp.png diff --git a/gui/theme/watch_mdpi/images/q_btn_addzip.png b/gui/theme/watch_mdpi/images/q_btn_addzip.png Binary files differnew file mode 100644 index 000000000..6ca0135d2 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_addzip.png diff --git a/gui/theme/watch_mdpi/images/q_btn_arrow_left.png b/gui/theme/watch_mdpi/images/q_btn_arrow_left.png Binary files differnew file mode 100644 index 000000000..b07d2d0aa --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_arrow_left.png diff --git a/gui/theme/watch_mdpi/images/q_btn_arrow_right.png b/gui/theme/watch_mdpi/images/q_btn_arrow_right.png Binary files differnew file mode 100644 index 000000000..fb0c9eae9 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_arrow_right.png diff --git a/gui/theme/watch_mdpi/images/q_btn_delete.png b/gui/theme/watch_mdpi/images/q_btn_delete.png Binary files differnew file mode 100644 index 000000000..89224985c --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_delete.png diff --git a/gui/theme/watch_mdpi/images/q_btn_encryption_dis.png b/gui/theme/watch_mdpi/images/q_btn_encryption_dis.png Binary files differnew file mode 100644 index 000000000..84800752e --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_encryption_dis.png diff --git a/gui/theme/watch_mdpi/images/q_btn_encryption_en.png b/gui/theme/watch_mdpi/images/q_btn_encryption_en.png Binary files differnew file mode 100644 index 000000000..6ac2a919a --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_encryption_en.png diff --git a/gui/theme/watch_mdpi/images/q_btn_folder.png b/gui/theme/watch_mdpi/images/q_btn_folder.png Binary files differnew file mode 100644 index 000000000..eccba87f6 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_folder.png diff --git a/gui/theme/watch_mdpi/images/q_btn_refresh.png b/gui/theme/watch_mdpi/images/q_btn_refresh.png Binary files differnew file mode 100644 index 000000000..a7762d8a7 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_refresh.png diff --git a/gui/theme/watch_mdpi/images/q_btn_reset.png b/gui/theme/watch_mdpi/images/q_btn_reset.png Binary files differnew file mode 100644 index 000000000..f05f43c23 --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_reset.png diff --git a/gui/theme/watch_mdpi/images/q_btn_storage.png b/gui/theme/watch_mdpi/images/q_btn_storage.png Binary files differnew file mode 100644 index 000000000..ddfddb40d --- /dev/null +++ b/gui/theme/watch_mdpi/images/q_btn_storage.png diff --git a/gui/theme/watch_mdpi/images/radio_false.png b/gui/theme/watch_mdpi/images/radio_false.png Binary files differnew file mode 100644 index 000000000..c517286f3 --- /dev/null +++ b/gui/theme/watch_mdpi/images/radio_false.png diff --git a/gui/theme/watch_mdpi/images/radio_true.png b/gui/theme/watch_mdpi/images/radio_true.png Binary files differnew file mode 100644 index 000000000..523cecc3d --- /dev/null +++ b/gui/theme/watch_mdpi/images/radio_true.png diff --git a/gui/theme/watch_mdpi/images/shift.png b/gui/theme/watch_mdpi/images/shift.png Binary files differnew file mode 100644 index 000000000..077097212 --- /dev/null +++ b/gui/theme/watch_mdpi/images/shift.png diff --git a/gui/theme/watch_mdpi/images/shift_fill.png b/gui/theme/watch_mdpi/images/shift_fill.png Binary files differnew file mode 100644 index 000000000..0941aa66e --- /dev/null +++ b/gui/theme/watch_mdpi/images/shift_fill.png diff --git a/gui/theme/watch_mdpi/images/slider.png b/gui/theme/watch_mdpi/images/slider.png Binary files differnew file mode 100644 index 000000000..a2083c530 --- /dev/null +++ b/gui/theme/watch_mdpi/images/slider.png diff --git a/gui/theme/watch_mdpi/images/slider_touch.png b/gui/theme/watch_mdpi/images/slider_touch.png Binary files differnew file mode 100644 index 000000000..9fcb72996 --- /dev/null +++ b/gui/theme/watch_mdpi/images/slider_touch.png diff --git a/gui/theme/watch_mdpi/images/slider_used.png b/gui/theme/watch_mdpi/images/slider_used.png Binary files differnew file mode 100644 index 000000000..d1df84537 --- /dev/null +++ b/gui/theme/watch_mdpi/images/slider_used.png diff --git a/gui/theme/watch_mdpi/images/space.png b/gui/theme/watch_mdpi/images/space.png Binary files differnew file mode 100644 index 000000000..44d712188 --- /dev/null +++ b/gui/theme/watch_mdpi/images/space.png diff --git a/gui/theme/watch_mdpi/images/splashlogo.png b/gui/theme/watch_mdpi/images/splashlogo.png Binary files differnew file mode 100644 index 000000000..24fc4e71e --- /dev/null +++ b/gui/theme/watch_mdpi/images/splashlogo.png diff --git a/gui/theme/watch_mdpi/images/splashteamwin.png b/gui/theme/watch_mdpi/images/splashteamwin.png Binary files differnew file mode 100644 index 000000000..47885cc5b --- /dev/null +++ b/gui/theme/watch_mdpi/images/splashteamwin.png diff --git a/gui/theme/watch_mdpi/images/unlock_icon.png b/gui/theme/watch_mdpi/images/unlock_icon.png Binary files differnew file mode 100644 index 000000000..b2b5f8ba8 --- /dev/null +++ b/gui/theme/watch_mdpi/images/unlock_icon.png diff --git a/gui/theme/watch_mdpi/splash.xml b/gui/theme/watch_mdpi/splash.xml new file mode 100644 index 000000000..2d70e5948 --- /dev/null +++ b/gui/theme/watch_mdpi/splash.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="320" height="320"/> + <author>TeamWin</author> + <title>TWRP</title> + <description>splash screen</description> + <themeversion>2</themeversion> + </details> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="24"/> + <image name="splashlogo" filename="splashlogo" retainaspect="1"/> + <image name="splashteamwin" filename="splashteamwin" retainaspect="1"/> + </resources> + + <variables> + <variable name="screen_width" value="320"/> + <variable name="screen_height" value="320"/> + <variable name="background_color" value="#222222"/> + <variable name="header_color" value="#555555"/> + <variable name="accent_color" value="#0090CA"/> + </variables> + + <pages> + <page name="splash"> + <background color="%background_color%"/> + + <fill color="%header_color%"> + <placement x="0" y="0" w="%screen_width%" h="120"/> + </fill> + + <image> + <image resource="splashlogo"/> + <placement x="160" y="120" placement="4"/> + </image> + + <image> + <image resource="splashteamwin"/> + <placement x="160" y="270" placement="4"/> + </image> + + <text color="%header_color%"> + <font resource="font_l"/> + <placement x="160" y="290" placement="5"/> + <text>Recovery Project %tw_version%</text> + </text> + </page> + </pages> +</recovery> + diff --git a/gui/theme/watch_mdpi/ui.xml b/gui/theme/watch_mdpi/ui.xml new file mode 100644 index 000000000..3ef71aff0 --- /dev/null +++ b/gui/theme/watch_mdpi/ui.xml @@ -0,0 +1,391 @@ +<?xml version="1.0"?> +<recovery> + <details> + <resolution width="320" height="320"/> + <roundscreen offset_x="40" offset_y="40"/> + <author>TeamWin</author> + <title>Backup Naowz</title> + <description>Default basic theme</description> + <preview>preview.png</preview> + <themeversion>2</themeversion> + </details> + + <include> + <xmlfile name="watch.xml"/> + </include> + + <resources> + <font name="font_l" filename="RobotoCondensed-Regular.ttf" size="24"/> + <font name="font_m" filename="RobotoCondensed-Regular.ttf" size="14"/> + <font name="font_s" filename="RobotoCondensed-Regular.ttf" size="12"/> + <font name="fixed" filename="DroidSansMono.ttf" size="14"/> + + <font name="keylabel" filename="RobotoCondensed-Regular.ttf" size="18"/> + <font name="keylabel-small" filename="RobotoCondensed-Regular.ttf" size="14"/> + <font name="keylabel-longpress" filename="RobotoCondensed-Regular.ttf" size="12"/> + + <image name="main_button" filename="main_button"/> + <image name="main_button_half_height" filename="main_button_half_height"/> + <image name="main_button_full_width" filename="main_button_full_width"/> + <image name="main_button_quarter_width" filename="main_button_quarter_width"/> + <image name="q_btn_arrow_right" filename="q_btn_arrow_right" retainaspect="1"/> + <image name="q_btn_arrow_left" filename="q_btn_arrow_left" retainaspect="1"/> + <image name="q_btn_storage" filename="q_btn_storage" retainaspect="1"/> + <image name="q_btn_refresh" filename="q_btn_refresh" retainaspect="1"/> + <image name="q_btn_accept" filename="q_btn_accept" retainaspect="1"/> + <image name="q_btn_accept_transp" filename="q_btn_accept_transp" retainaspect="1"/> + <image name="q_btn_addzip" filename="q_btn_addzip" retainaspect="1"/> + <image name="q_btn_encryption_dis" filename="q_btn_encryption_dis" retainaspect="1"/> + <image name="q_btn_encryption_en" filename="q_btn_encryption_en" retainaspect="1"/> + <image name="q_btn_delete" filename="q_btn_delete" retainaspect="1"/> + <image name="q_btn_reset" filename="q_btn_reset" retainaspect="1"/> + <image name="q_btn_folder" filename="q_btn_folder" retainaspect="1"/> + <image name="file" filename="file" retainaspect="1"/> + <image name="folder" filename="folder" retainaspect="1"/> + <image name="unlock_icon" filename="unlock_icon" retainaspect="1"/> + <image name="home" filename="home" retainaspect="1"/> + <image name="back" filename="back" retainaspect="1"/> + <image name="console" filename="console" retainaspect="1"/> + <image name="kb_hide" filename="kb_hide" retainaspect="1"/> + <image name="kb_show" filename="kb_show" retainaspect="1"/> + <image name="grid_less" filename="grid_less" retainaspect="1"/> + <image name="grid_more" filename="grid_more" retainaspect="1"/> + <image name="checkbox_false" filename="checkbox_false" retainaspect="1"/> + <image name="checkbox_false_small" filename="checkbox_false_small" retainaspect="1"/> + <image name="checkbox_true" filename="checkbox_true" retainaspect="1"/> + <image name="checkbox_true_small" filename="checkbox_true_small" retainaspect="1"/> + <image name="radio_false" filename="radio_false" retainaspect="1"/> + <image name="radio_true" filename="radio_true" retainaspect="1"/> + <animation name="progress" filename="indeterminate"/> + <image name="progress_empty" filename="progress_empty"/> + <image name="progress_full" filename="progress_fill"/> + <image name="slider" filename="slider"/> + <image name="slider_used" filename="slider_used"/> + <image name="slider_touch" filename="slider_touch"/> + <image name="handle" filename="handle"/> + <image name="backspace" filename="backspace" retainaspect="1"/> + <image name="enter" filename="enter" retainaspect="1"/> + <image name="shift" filename="shift" retainaspect="1"/> + <image name="shift_fill" filename="shift_fill" retainaspect="1"/> + <image name="space" filename="space" retainaspect="1"/> + <image name="close" filename="close" retainaspect="1"/> + <image name="kb_arrow_left" filename="kb_arrow_left" retainaspect="1"/> + <image name="kb_arrow_right" filename="kb_arrow_right" retainaspect="1"/> + <image name="kb_arrow_up" filename="kb_arrow_up" retainaspect="1"/> + <image name="kb_arrow_down" filename="kb_arrow_down" retainaspect="1"/> + </resources> + + <variables> + <variable name="tw_hide_kb" value="0"/> + <variable name="screen_width" value="320"/> + <variable name="screen_half_width" value="160"/> + <variable name="screen_height" value="320"/> + <variable name="status_height" value="20"/> + <variable name="header_height" value="20"/> + <variable name="navbar_height" value="52"/> + <variable name="content_width" value="304"/> + <variable name="content_half_width" value="148"/> + <variable name="back_button_x" value="70"/> + <variable name="console_button_x" value="250"/> + <variable name="indent" value="8"/> + <variable name="col1_x_left" value="8"/> + <variable name="col1_x_left_negative" value="156"/> + <variable name="center_x" value="160"/> + <variable name="col1_x_right" value="164"/> + <variable name="indent_right" value="312"/> + <variable name="btn4_col2_x" value="86"/> + <variable name="btn4_col3_x" value="164"/> + <variable name="btn4_col4_x" value="242"/> + <variable name="row1_header_y" value="0"/> + <variable name="row2_header_y" value="20"/> + <variable name="row1_y" value="28"/> + <variable name="row1a_y" value="36"/> + <variable name="row2_y" value="44"/> + <variable name="row2a_y" value="52"/> + <variable name="row3_y" value="60"/> + <variable name="row3_input_y" value="64"/> + <variable name="row3a_y" value="68"/> + <variable name="row4_y" value="76"/> + <variable name="row4a_y" value="84"/> + <variable name="row5_y" value="92"/> + <variable name="row5a_y" value="100"/> + <variable name="row6_y" value="108"/> + <variable name="row6_input_y" value="112"/> + <variable name="row6a_y" value="116"/> + <variable name="row6a_input_y" value="120"/> + <variable name="row7_y" value="124"/> + <variable name="row7a_y" value="132"/> + <variable name="row8_y" value="140"/> + <variable name="row8a_y" value="148"/> + <variable name="row9_y" value="156"/> + <variable name="row9a_y" value="164"/> + <variable name="row10_y" value="172"/> + <variable name="row10a_y" value="180"/> + <variable name="row11_y" value="188"/> + <variable name="row11a_y" value="196"/> + <variable name="row12_y" value="204"/> + <variable name="row12a_y" value="212"/> + <variable name="row13_y" value="220"/> + <variable name="slider_y" value="224"/> + <variable name="row13a_y" value="228"/> + <variable name="row14_y" value="236"/> + <variable name="row14a_y" value="244"/> + <variable name="row15_y" value="252"/> + <variable name="row15a_y" value="260"/> + <variable name="navbar_y" value="268"/> + <variable name="navbar_btn_y" value="294"/> + <variable name="keyboard_y" value="124"/> + <variable name="keyboard_terminal_y" value="100"/> + <variable name="background_color" value="#1A1A1A"/> + <variable name="accent_color" value="#0090CA"/> + <variable name="text_color" value="#EEEEEE"/> + <variable name="text_button_color" value="#EEEEEE"/> + <variable name="text_success_color" value="#76FF03"/> + <variable name="text_fail_color" value="#FF0101"/> + <variable name="highlight_color" value="#1A1A1A80"/> + <variable name="caps_highlight_color" value="#22222280"/> + <variable name="transparent" value="#00000000"/> + <variable name="semi_transparent" value="#00000099"/> + <variable name="warning" value="#F8F8A0"/> + <variable name="error" value="#FF0101"/> + <variable name="highlight" value="#0090CA"/> + <variable name="fileselector_linecolor" value="#555555"/> + <variable name="fileselector_highlight_color" value="#555555"/> + <variable name="fileselector_separatorheight" value="1"/> + <variable name="fileselector_spacing" value="0"/> + <variable name="fileselector_install_height" value="248"/> + <variable name="fileselector_filemanager_height" value="248"/> + <variable name="partitionlist_spacing" value="0"/> + <variable name="partitionlist_storage_height" value="160"/> + <variable name="partitionlist_wipe_height" value="160"/> + <variable name="listbox_timezone_height" value="248"/> + <variable name="listbox_settings_height" value="248"/> + <variable name="fastscroll_w" value="10"/> + <variable name="fastscroll_linew" value="1"/> + <variable name="fastscroll_rectw" value="10"/> + <variable name="fastscroll_recth" value="18"/> + <variable name="slidervalue_lineh" value="4"/> + <variable name="slidervalue_padding" value="0"/> + <variable name="slidervalue_sliderw" value="70"/> + <variable name="slidervalue_sliderh" value="72"/> + <variable name="slideout_height" value="232"/> + <variable name="slideout_bg_height" value="248"/> + <variable name="input_height" value="16"/> + <variable name="input_line_width" value="1"/> + <variable name="input_line_console" value="272"/> + <variable name="console_height" value="152"/> + <variable name="console_terminal_s_height" value="100"/> + <variable name="console_terminal_l_height" value="268"/> + <variable name="close_btn_x" value="280"/> + <variable name="pattern_x" value="60"/> + <variable name="pattern_dot_dia" value="12"/> + <variable name="pattern_line_w" value="4"/> + <variable name="pattern_size" value="200"/> + </variables> + + <templates> + <template name="statusbar"> + <fill color="%accent_color%"> + <placement x="0" y="0" w="%screen_width%" h="%header_height%"/> + </fill> + + <fill color="%text_fail_color%"> + <condition var1="tw_simulate_actions" var2="1"/> + <placement x="0" y="0" w="%screen_width%" h="%status_height%"/> + </fill> + </template> + + <template name="page"> + <background color="%background_color%"/> + + <template name="statusbar"/> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="1"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@twrp_watch_header=TWRP %tw_version%}</text> + </text> + + <text color="%text_color%"> + <condition var1="tw_no_cpu_temp" var2="0"/> + <font resource="font_m"/> + <placement x="%indent%" y="%row1_header_y%"/> + <text>{@cpu_temp=CPU: %tw_cpu_temp% °C}</text> + </text> + + <text color="%text_color%"> + <font resource="font_m"/> + <placement x="%center_x%" y="%row1_header_y%" placement="5"/> + <text>%tw_time%</text> + </text> + + <text color="%text_color%"> + <conditions> + <condition var1="tw_no_battery_percent" var2="0"/> + <condition var1="tw_battery" op=">" var2="0"/> + <condition var1="tw_battery" op="<" var2="101"/> + </conditions> + <font resource="font_m"/> + <placement x="%indent_right%" y="%row1_header_y%" placement="1"/> + <text>{@battery_pct=Battery: %tw_battery%}</text> + </text> + + <fill color="#000000"> + <placement x="0" y="%navbar_y%" w="%screen_width%" h="%navbar_height%"/> + </fill> + + <button> + <placement x="%back_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="back"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">back</action> + </button> + + <button> + <placement x="%center_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="home"/> + <condition var1="tw_busy" var2="0"/> + <action function="key">home</action> + </button> + + <button> + <placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/> + <image resource="console"/> + <condition var1="tw_busy" var2="0"/> + <action function="overlay">slideout</action> + </button> + + <action> + <touch key="power"/> + <action function="togglebacklight"/> + </action> + + <action> + <touch key="power+voldown"/> + <action function="screenshot"/> + </action> + </template> + + <template name="progress_bar"> + <progressbar> + <placement x="%indent%" y="%row11_y%"/> + <resource empty="progress_empty" full="progress_full"/> + <data name="ui_progress"/> + </progressbar> + + <animation> + <placement x="%indent%" y="%row11_y%"/> + <resource name="progress"/> + <speed fps="24" render="2"/> + <loop frame="1"/> + </animation> + </template> + + <template name="console"> + <console> + <placement x="%indent%" y="%row1_y%" w="%content_width%" h="%console_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row1_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row10a_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="console_terminal"> + <console> + <placement x="%indent%" y="%row1_y%" w="content_width" h="%console_terminal_height%"/> + </console> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row1_y" w="%content_width%" h="input_line_width" placement="1"/> + </fill> + + <fill color="%fileselector_linecolor%"> + <placement x="%indent%" y="row5_y" w="%content_width%" h="input_line_width"/> + </fill> + </template> + + <template name="keyboardterminaltemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_terminal_y%" w="%screen_width%" h="24"/> + <keymargin x="0" y="0"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="0" y="0"/> + <keylabel key="0:k:29" text="Ctrl"/> + <keylabel key="0:c:27" text="Esc"/> + <keylabel key="0:c:9" text="Tab"/> + <keylabel key="0:k:105" text="<" resource="kb_arrow_left"/> + <keylabel key="0:k:108" text="v" resource="kb_arrow_down"/> + <keylabel key="0:k:103" text="^" resource="kb_arrow_up"/> + <keylabel key="0:k:106" text=">" resource="kb_arrow_right"/> + <highlight color="%highlight_color%"/> + <ctrlhighlight color="#0090CA80"/> + <layout1> + <keysize height="24" width="44"/> + <row1 key01="48:k:29" key02="48:c:27" long02=":c:3" key03="48:c:9" key04="44:k:105" key05="44:k:108" key06="44:k:103" key07="44:k:106"/> + </layout1> + </keyboard> + </template> + + <template name="keyboardtemplate"> + <keyboard> + <condition var1="tw_hide_kb" var2="0"/> + <placement x="0" y="%keyboard_y%" w="320" h="144"/> + <keymargin x="2" y="2"/> + <background color="#111111"/> + <key-alphanumeric color="#111111" font="keylabel" textcolor="#EEEEEE"/> + <key-other color="#111111" font="keylabel-small" textcolor="#5b5b5bff"/> + <longpress font="keylabel-longpress" textcolor="#5b5b5bff" x="0" y="0"/> + <keylabel key="0:c:8" text="Bksp" resource="backspace"/> + <keylabel key="0:action" text="Enter" resource="enter"/> + <keylabel key=" " text="Space" resource="space"/> + <highlight color="%highlight_color%"/> + <capshighlight color="%highlight_color%"/> + <layout1> + <keysize height="36" width="32"/> + <row1 key01="q" long01="1" key02="w" long02="2" key03="e" long03="3" key04="r" long04="4" key05="t" long05="5" key06="y" long06="6" key07="u" long07="7" key08="i" long08="8" key09="o" long09="9" key10="p" long10="0"/> + <row2 key01="16:" key02="a" long02="@" key03="s" long03="#" key04="d" long04="$" key05="f" long05="%" key06="g" long06="&" key07="h" long07="*" key08="j" long08="-" key09="k" long09="+" key10="l" long10="_" key11="16:"/> + <row3 key01="48:layout2" key02="z" long02="!" key03="x" long03=""" key04="c" long04="'" key05="v" long05=":" key06="b" long06=";" key07="n" long07="/" key08="m" long08="?" key09="48:c:8"/> + <row4 key01="48:layout3" key02="/" key03="160: " key04="." key05="48:action"/> + <keylabel key="0:layout2" text="Shift" resource="shift"/> + <keylabel key="0:layout3" text="?123"/> + </layout1> + <layout2> + <keysize height="36" width="32" capslock="0" revert_layout="1"/> + <row1 key01="Q" long01="1" key02="W" long02="2" key03="E" long03="3" key04="R" long04="4" key05="T" long05="5" key06="Y" long06="6" key07="U" long07="7" key08="I" long08="8" key09="O" long09="9" key10="P" long10="0"/> + <row2 key01="16:" key02="A" long02="@" key03="S" long03="#" key04="D" long04="$" key05="F" long05="%" key06="G" long06="&" key07="H" long07="*" key08="J" long08="-" key09="K" long09="+" key10="L" long10="_" key11="16:"/> + <row3 key01="48:layout1" key02="Z" long02="!" key03="X" long03=""" key04="C" long04="'" key05="V" long05=":" key06="B" long06=";" key07="N" long07="/" key08="M" long08="?" key09="48:c:8"/> + <row4 key01="48:layout3" key02="/" key03="160: " key04="." key05="48:action"/> + <keylabel key="0:layout1" text="Shift" resource="shift_fill"/> + <keylabel key="0:layout3" text="?123"/> + </layout2> + <layout3> + <keysize height="36" width="32"/> + <row1 key01="1" key02="2" key03="3" key04="4" key05="5" key06="6" key07="7" key08="8" key09="9" key10="0"/> + <row2 key01="@" key02="#" key03="$" key04="%" key05="&" key06="*" key07="-" key08="+" key09="(" key10=")"/> + <row3 key01="48:layout4" key02="!" key03="32:c:34" key04="'" key05=":" key06=";" key07="/" key08="?" key09="48:c:8"/> + <row4 key01="48:layout1" key02="," key03="160: " key04="." key05="48:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout4" text="~\{"/> + </layout3> + <layout4> + <keysize height="36" width="32"/> + <row1 key01="~" key02="`" key03="|" key04="32:" key05="32:" key06="32:" key07="%" key08="32:" key09="{" key10="}"/> + <row2 key01="32:" key02="32:" key03="32:" key04="32:" key05="32:" key06="^" key07="_" key08="=" key09="[" key10="]"/> + <row3 key01="48:layout3" key02="32:" key03="32:" key04="32:" key05="32:" key06="\" key07="<" key08=">" key09="48:c:8"/> + <row4 key01="48:layout1" key02="32:c:34" key03="160: " key04="." key05="48:action"/> + <keylabel key="0:layout1" text="ABC"/> + <keylabel key="0:layout3" text="?123"/> + </layout4> + </keyboard> + </template> + </templates> +</recovery> diff --git a/gui/twmsg.cpp b/gui/twmsg.cpp new file mode 100644 index 000000000..ebd6fc313 --- /dev/null +++ b/gui/twmsg.cpp @@ -0,0 +1,139 @@ +/* + Copyright 2015 _that/TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "../data.hpp" +#include "pages.hpp" +#include "resources.hpp" + +#include "twmsg.h" +#include <cctype> + +std::string Message::GetFormatString(const std::string& name) const +{ + return resourceLookup(name); +} + +// Look up in local replacement vars first, if not found then use outer lookup object +class LocalLookup : public StringLookup +{ + const std::vector<std::string>& vars; + const StringLookup& next; +public: + LocalLookup(const std::vector<std::string>& vars, const StringLookup& next) : vars(vars), next(next) {} + virtual std::string operator()(const std::string& name) const + { + if (!name.empty() && isdigit(name[0])) { // {1}..{9} + int i = atoi(name.c_str()); + if (i > 0 && i <= (int)vars.size()) + return vars[i - 1]; + } + return next(name); + } +}; + +// conversion to final string +Message::operator std::string() const +{ + // do resource lookup + std::string str = GetFormatString(name); + + LocalLookup lookup(variables, varLookup); + + // now insert stuff into curly braces + + size_t pos = 0; + while ((pos = str.find('{', pos)) < std::string::npos) { + size_t end = str.find('}', pos); + if (end == std::string::npos) + break; + + std::string varname = str.substr(pos + 1, end - pos - 1); + std::string vartext = lookup(varname); + + str.replace(pos, end - pos + 1, vartext); + } + // TODO: complain about too many or too few numbered replacement variables + return str; +} + +/* +Resource manager lookup +*/ +class ResourceLookup : public StringLookup +{ +public: + virtual std::string operator()(const std::string& name) const + { + std::string resname; + std::string default_value; + + size_t pos = name.find('='); + if (pos == std::string::npos) { + resname = name; + } else { + resname = name.substr(0, pos); + default_value = name.substr(pos + 1); + } +#ifndef BUILD_TWRPTAR_MAIN + const ResourceManager* res = PageManager::GetResources(); + if (res) { + if (default_value.empty()) + return res->FindString(resname); + else + return res->FindString(resname, default_value); + } +#endif + if (!default_value.empty()) { + return default_value; + } + return name; + } +}; +ResourceLookup resourceLookup; + + +/* +DataManager lookup +*/ +class DataLookup : public StringLookup +{ +public: + virtual std::string operator()(const std::string& name) const + { +#ifndef BUILD_TWRPTAR_MAIN + std::string value; + if (DataManager::GetValue(name, value) == 0) + return value; + else +#endif + return ""; + } +}; +DataLookup dataLookup; + + +// Utility functions to create messages. Short names to make usage convenient. +Message Msg(const char* name) +{ + return Message(msg::kNormal, name, resourceLookup, dataLookup); +} + +Message Msg(msg::Kind kind, const char* name) +{ + return Message(kind, name, resourceLookup, dataLookup); +} diff --git a/gui/twmsg.h b/gui/twmsg.h new file mode 100644 index 000000000..cd035d1f5 --- /dev/null +++ b/gui/twmsg.h @@ -0,0 +1,97 @@ +/* + Copyright 2015 _that/TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef twmsg_h +#define twmsg_h + +#include <cstdlib> +#include <cstring> +#include <string> +#include <sstream> +#include <vector> +#include <errno.h> + +/* +Abstract interface for something that can look up strings by name. +*/ +class StringLookup +{ +public: + virtual std::string operator()(const std::string& name) const = 0; + virtual ~StringLookup() {}; +}; + + +namespace msg +{ + // These get translated to colors in the GUI console + enum Kind + { + kNormal, + kHighlight, + kWarning, + kError + }; + + + template<typename T> std::string to_string(const T& v) + { + std::ostringstream ss; + ss << v; + return ss.str(); + } +} + + +/* +Generic message formatting class. +Designed to decouple message generation from actual resource string lookup and variable insertion, +so that messages can be re-translated at any later time. +*/ +class Message +{ + msg::Kind kind; // severity or similar message kind + std::string name; // the resource string name. may be of format "name=default value". + std::vector<std::string> variables; // collected insertion variables to replace {1}, {2}, ... + const StringLookup& resourceLookup; // object to resolve resource string name into a final format string + const StringLookup& varLookup; // object to resolve any non-numeric insertion strings + + std::string GetFormatString(const std::string& name) const; + +public: + Message(msg::Kind kind, const char* name, const StringLookup& resourceLookup, const StringLookup& varLookup) + : kind(kind), name(name), resourceLookup(resourceLookup), varLookup(varLookup) {} + + // Variable insertion. + template<typename T> + Message& operator()(const T& v) { variables.push_back(msg::to_string(v)); return *this; } + + // conversion to final string + operator std::string() const; + + // Get Message Kind + msg::Kind GetKind() {return kind;}; +}; + + +// Utility functions to create messages with standard resource and data manager lookups. +// Short names to make usage convenient. +Message Msg(const char* name); +Message Msg(msg::Kind kind, const char* name); + +#endif diff --git a/gui/twrp b/gui/twrp new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/gui/twrp |