Add support for multi-user decryption
* Add CLI support using the command "twrp decrypt <PASSWORD> [USER ID]" * Add GUI support using the menu Advanced --> Decrypt User Change-Id: Id2681bc2b1012a0571417f7a6e0b980b1b25c61c (cherry picked from commit 5a79f67a1b1bd1bcadeca0a4896a871646652534)
This commit is contained in:
+22
-2
@@ -64,6 +64,7 @@ std::set<string> GUIAction::setActionsRunningInCallerThread;
|
||||
static string zip_queue[10];
|
||||
static int zip_queue_index;
|
||||
pid_t sideload_child_pid;
|
||||
extern std::vector<users_struct> Users_List;
|
||||
|
||||
static void *ActionThread_work_wrapper(void *data);
|
||||
|
||||
@@ -1502,12 +1503,31 @@ int GUIAction::decrypt(std::string arg __unused)
|
||||
simulate_progress_bar();
|
||||
} else {
|
||||
string Password;
|
||||
string userID;
|
||||
DataManager::GetValue("tw_crypto_password", Password);
|
||||
op_status = PartitionManager.Decrypt_Device(Password);
|
||||
|
||||
if (DataManager::GetIntValue(TW_IS_FBE)) { // for FBE
|
||||
DataManager::GetValue("tw_crypto_user_id", userID);
|
||||
if (userID != "") {
|
||||
op_status = PartitionManager.Decrypt_Device(Password, atoi(userID.c_str()));
|
||||
if (userID != "0") {
|
||||
if (op_status != 0)
|
||||
op_status = 1;
|
||||
operation_end(op_status);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
LOGINFO("User ID not found\n");
|
||||
op_status = 1;
|
||||
}
|
||||
::sleep(1);
|
||||
} else { // for FDE
|
||||
op_status = PartitionManager.Decrypt_Device(Password);
|
||||
}
|
||||
|
||||
if (op_status != 0)
|
||||
op_status = 1;
|
||||
else {
|
||||
|
||||
DataManager::SetValue(TW_IS_ENCRYPTED, 0);
|
||||
|
||||
int has_datamedia;
|
||||
|
||||
@@ -28,6 +28,7 @@ void gui_warn(const char* text);
|
||||
void gui_err(const char* text);
|
||||
void gui_highlight(const char* text);
|
||||
void gui_msg(Message msg);
|
||||
void gui_err(Message msg);
|
||||
|
||||
std::string gui_parse_text(std::string inText);
|
||||
std::string gui_lookup(const std::string& resource_name, const std::string& default_value);
|
||||
|
||||
+52
-8
@@ -26,6 +26,7 @@ extern "C" {
|
||||
#include "rapidxml.hpp"
|
||||
#include "objects.hpp"
|
||||
#include "../data.hpp"
|
||||
#include "../partitions.hpp"
|
||||
#include "pages.hpp"
|
||||
|
||||
extern std::vector<language_struct> Language_List;
|
||||
@@ -82,10 +83,28 @@ GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node)
|
||||
data.selected = 0;
|
||||
mListItems.push_back(data);
|
||||
}
|
||||
} else if (mVariable == "tw_crypto_user_id") {
|
||||
std::vector<users_struct>::iterator iter;
|
||||
std::vector<users_struct>* Users_List = PartitionManager.Get_Users_List();
|
||||
for (iter = Users_List->begin(); iter != Users_List->end(); iter++) {
|
||||
if (!(*iter).isDecrypted) {
|
||||
ListItem data;
|
||||
data.displayName = (*iter).userName;
|
||||
data.variableValue = (*iter).userId;
|
||||
data.action = NULL;
|
||||
DataManager::GetValue("tw_crypto_user_id", currentValue);
|
||||
if (currentValue == (*iter).userId || currentValue == "") {
|
||||
data.selected = 1;
|
||||
DataManager::SetValue("tw_crypto_user_id", (*iter).userId);
|
||||
DataManager::SetValue("tw_crypto_pwtype", (*iter).type);
|
||||
} else
|
||||
data.selected = 0;
|
||||
mListItems.push_back(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
allowSelection = false; // allows using listbox as a read-only list or menu
|
||||
} else
|
||||
allowSelection = false; // allows using listbox as a read-only list or menu
|
||||
|
||||
// Get the data for the list
|
||||
child = FindNode(node, "listitem");
|
||||
@@ -94,16 +113,14 @@ GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node)
|
||||
ListItem item;
|
||||
|
||||
attr = child->first_attribute("name");
|
||||
if (!attr)
|
||||
continue;
|
||||
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)
|
||||
action = child->first_node("actions");
|
||||
if (!action) action = child->first_node("actions");
|
||||
if (action) {
|
||||
item.action = new GUIAction(child);
|
||||
allowSelection = true;
|
||||
@@ -122,7 +139,7 @@ GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node)
|
||||
LoadConditions(child, item.mConditions);
|
||||
|
||||
mListItems.push_back(item);
|
||||
mVisibleItems.push_back(mListItems.size()-1);
|
||||
mVisibleItems.push_back(mListItems.size() - 1);
|
||||
|
||||
child = child->next_sibling("listitem");
|
||||
}
|
||||
@@ -137,6 +154,33 @@ int GUIListBox::Update(void)
|
||||
if (!isConditionTrue())
|
||||
return 0;
|
||||
|
||||
if (mVariable == "tw_crypto_user_id") {
|
||||
mListItems.clear();
|
||||
std::vector<users_struct>::iterator iter;
|
||||
std::vector<users_struct>* Users_List = PartitionManager.Get_Users_List();
|
||||
for (iter = Users_List->begin(); iter != Users_List->end(); iter++) {
|
||||
if (!(*iter).isDecrypted) {
|
||||
ListItem data;
|
||||
data.displayName = (*iter).userName;
|
||||
data.variableValue = (*iter).userId;
|
||||
data.action = NULL;
|
||||
DataManager::GetValue("tw_crypto_user_id", currentValue);
|
||||
if (currentValue == (*iter).userId || currentValue == "") {
|
||||
data.selected = 1;
|
||||
DataManager::SetValue("tw_crypto_user_id", (*iter).userId);
|
||||
DataManager::SetValue("tw_crypto_pwtype", (*iter).type);
|
||||
} else
|
||||
data.selected = 0;
|
||||
mListItems.push_back(data);
|
||||
}
|
||||
}
|
||||
mVisibleItems.clear();
|
||||
for (size_t i = 0; i < mListItems.size(); i++) {
|
||||
mVisibleItems.push_back(i);
|
||||
}
|
||||
mUpdate = 1;
|
||||
}
|
||||
|
||||
GUIScrollList::Update();
|
||||
|
||||
if (mUpdate) {
|
||||
|
||||
@@ -759,6 +759,7 @@
|
||||
<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="set">tw_crypto_user_id=</action>
|
||||
<action function="page">%tw_clear_destination%</action>
|
||||
</action>
|
||||
</page>
|
||||
@@ -1062,8 +1063,13 @@
|
||||
</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_reset5=(not including users/lockscreen)}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_has_data_media" var2="1"/>
|
||||
<placement x="%center_x%" y="%row4_y%" placement="5"/>
|
||||
<text>{@factory_reset2=(not including internal storage)}</text>
|
||||
</text>
|
||||
|
||||
@@ -2517,6 +2523,10 @@
|
||||
</conditions>
|
||||
<placement x="%col2_x_left%" y="%row15a_y%"/>
|
||||
<text>{@decrypt_data_btn=Decrypt Data}</text>
|
||||
<action function="set">tw_crypto_user_id=0</action>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="set">tw_crypto_pwtype=%tw_crypto_pwtype_0%</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
@@ -3383,6 +3393,16 @@
|
||||
|
||||
<listbox style="advanced_listbox">
|
||||
<placement x="%center_x%" y="%row2_y%" w="%content_half_width%" h="%fileselector_install_height%"/>
|
||||
<listitem name="{@decrypt_users=Decrypt Users}">
|
||||
<conditions>
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<condition var1="tw_all_users_decrypted" var2="0"/>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action function="set">tw_crypto_user_id=</action>
|
||||
<action function="page">decrypt_users</action>
|
||||
</actions>
|
||||
</listitem>
|
||||
<listitem name="{@reload_theme_btn=Reload Theme}">
|
||||
<action function="reload"/>
|
||||
</listitem>
|
||||
@@ -4396,10 +4416,17 @@
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" op="!=" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pass=Enter Password:}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pass_fbe=Enter Password for User [%tw_crypto_user_id%]}</text>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<placement x="%col1_x_left%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/>
|
||||
<text>%tw_crypto_display%</text>
|
||||
@@ -5379,5 +5406,44 @@
|
||||
<action function="screenshot"/>
|
||||
</action>
|
||||
</page>
|
||||
|
||||
<page name="decrypt_users">
|
||||
<template name="page"/>
|
||||
|
||||
<text style="text_l">
|
||||
<placement x="%col1_x_header%" y="%row3_header_y%"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_users_selection=Select a user ID to decrypt}</text>
|
||||
</text>
|
||||
|
||||
<listbox>
|
||||
<placement x="%col1_x_left%" y="%row1a_y%" w="%content_width%" h="%partitionlist_mount_height%"/>
|
||||
<text>{@select_user=Select User}</text>
|
||||
<icon selected="radio_true" unselected="radio_false" />
|
||||
<data name="tw_crypto_user_id" />
|
||||
</listbox>
|
||||
|
||||
<button style="main_button_half_width">
|
||||
<placement x="%col2_x_right%" y="%row15a_y%"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
<action>
|
||||
<touch key="home"/>
|
||||
<action function="page">main</action>
|
||||
</action>
|
||||
|
||||
<action>
|
||||
<touch key="back"/>
|
||||
<action function="page">advanced</action>
|
||||
</action>
|
||||
</page>
|
||||
</pages>
|
||||
</recovery>
|
||||
|
||||
@@ -141,6 +141,7 @@
|
||||
<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_reset5">(not including users/lockscreen)</string>
|
||||
<string name="factory_resetting">Factory Reset...</string>
|
||||
<string name="advanced_wipe_hdr">Advanced Wipe</string>
|
||||
<string name="advanced_wipe_btn">Advanced Wipe</string>
|
||||
@@ -511,6 +512,15 @@
|
||||
<string name="fix_recovery_loop_complete">Fix Recovery Bootloop Complete</string>
|
||||
<string name="fixing_recovery_loop_patch">Patching kernel...</string>
|
||||
<string name="fix_recovery_loop_patch_error">Error patching kernel.</string>
|
||||
<string name="decrypt_users">Decrypt Users</string>
|
||||
<string name="decrypt_users_selection">Select a user ID to decrypt</string>
|
||||
<string name="select_user">Select User</string>
|
||||
<string name="backup_storage_undecrypt_warning">Backup not include some files of user {1}, because the user is not decrypted.</string>
|
||||
<string name="decrypting_user_fbe">Attempting to decrypt FBE for user {1}...</string>
|
||||
<string name="decrypt_user_success_fbe">User {1} Decrypted Successfully</string>
|
||||
<string name="decrypt_user_fail_fbe">Failed to decrypt user {1}</string>
|
||||
<string name="decrypt_data_enter_pass_fbe">Enter Password for User [%tw_crypto_user_id%]</string>
|
||||
<string name="decrypt_data_enter_pattern_fbe">Enter Pattern for User [%tw_crypto_user_id%]</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>
|
||||
@@ -687,7 +697,7 @@
|
||||
<!-- 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="decrypt_cmd" version="2">Attempting to decrypt data partition or user data 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>
|
||||
|
||||
@@ -710,6 +710,7 @@
|
||||
<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="set">tw_crypto_user_id=</action>
|
||||
<action function="page">%tw_clear_destination%</action>
|
||||
</action>
|
||||
</page>
|
||||
@@ -1013,8 +1014,13 @@
|
||||
</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_reset5=(not including users/lockscreen)}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_has_data_media" var2="1"/>
|
||||
<placement x="%center_x%" y="%row4_y%" placement="5"/>
|
||||
<text>{@factory_reset2=(not including internal storage)}</text>
|
||||
</text>
|
||||
|
||||
@@ -2673,6 +2679,10 @@
|
||||
</conditions>
|
||||
<placement x="%center_x%" y="%row18a_y%"/>
|
||||
<text>{@decrypt_data_btn=Decrypt Data}</text>
|
||||
<action function="set">tw_crypto_user_id=0</action>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="set">tw_crypto_pwtype=%tw_crypto_pwtype_0%</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
@@ -3543,6 +3553,16 @@
|
||||
|
||||
<listbox style="advanced_listbox">
|
||||
<placement x="%indent%" y="%row13a_y%" w="%content_width%" h="%listbox_advanced_height%"/>
|
||||
<listitem name="{@decrypt_users=Decrypt Users}">
|
||||
<conditions>
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<condition var1="tw_all_users_decrypted" var2="0"/>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action function="set">tw_crypto_user_id=</action>
|
||||
<action function="page">decrypt_users</action>
|
||||
</actions>
|
||||
</listitem>
|
||||
<listitem name="{@reload_theme_btn=Reload Theme}">
|
||||
<action function="reload"/>
|
||||
</listitem>
|
||||
@@ -4557,10 +4577,17 @@
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" op="!=" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pass=Enter Password:}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pass_fbe=Enter Password for User [%tw_crypto_user_id%]}</text>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<placement x="%indent%" y="%row3_input_y%" w="%content_width%" h="%input_height%"/>
|
||||
<text>%tw_crypto_display%</text>
|
||||
@@ -4616,10 +4643,17 @@
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" op="!=" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pattern=Enter Pattern.}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pattern_fbe=Enter Pattern for User [%tw_crypto_user_id%]}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_fail">
|
||||
<condition var1="tw_password_fail" var2="1"/>
|
||||
<placement x="%center_x%" y="%row3_y%" placement="5"/>
|
||||
@@ -5139,5 +5173,44 @@
|
||||
<action function="screenshot"/>
|
||||
</action>
|
||||
</page>
|
||||
|
||||
<page name="decrypt_users">
|
||||
<template name="page"/>
|
||||
|
||||
<text style="text_l">
|
||||
<placement x="%col1_x_header%" y="%row3_header_y%"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_users_selection=Select a user ID to decrypt}</text>
|
||||
</text>
|
||||
|
||||
<listbox>
|
||||
<placement x="%indent%" y="%row3_y%" w="%content_width%" h="%listbox_advanced_height%"/>
|
||||
<text>{@select_user=Select User}</text>
|
||||
<icon selected="radio_true" unselected="radio_false" />
|
||||
<data name="tw_crypto_user_id" />
|
||||
</listbox>
|
||||
|
||||
<button style="main_button_half_height">
|
||||
<placement x="%center_x%" y="%row21a_y%"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
<action>
|
||||
<touch key="home"/>
|
||||
<action function="page">main</action>
|
||||
</action>
|
||||
|
||||
<action>
|
||||
<touch key="back"/>
|
||||
<action function="page">advanced</action>
|
||||
</action>
|
||||
</page>
|
||||
</pages>
|
||||
</recovery>
|
||||
|
||||
@@ -975,6 +975,7 @@
|
||||
<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="set">tw_crypto_user_id=</action>
|
||||
<action function="page">%tw_clear_destination%</action>
|
||||
</action>
|
||||
</page>
|
||||
@@ -1385,8 +1386,13 @@
|
||||
</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_reset5=(not including users/lockscreen)}</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>
|
||||
|
||||
@@ -3194,6 +3200,10 @@
|
||||
</conditions>
|
||||
<placement x="%col1_x_left%" y="%row6_y%"/>
|
||||
<text>{@decrypt_data_btn=Decrypt Data}</text>
|
||||
<action function="set">tw_crypto_user_id=0</action>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="set">tw_crypto_pwtype=%tw_crypto_pwtype_0%</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
@@ -4158,6 +4168,16 @@
|
||||
|
||||
<listbox style="advanced_listbox">
|
||||
<placement x="%indent%" y="%row2_header_y%" w="%content_width%" h="%fileselector_install_height%"/>
|
||||
<listitem name="{@decrypt_users=Decrypt Users}">
|
||||
<conditions>
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<condition var1="tw_all_users_decrypted" var2="0"/>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action function="set">tw_crypto_user_id=</action>
|
||||
<action function="page">decrypt_users</action>
|
||||
</actions>
|
||||
</listitem>
|
||||
<listitem name="{@reload_theme_btn=Reload Theme}">
|
||||
<action function="reload"/>
|
||||
</listitem>
|
||||
@@ -5256,10 +5276,17 @@
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" op="!=" var2="1"/>
|
||||
<placement x="%col1_x_left%" y="%row1_y%"/>
|
||||
<text>{@decrypt_data_enter_pass=Enter Password:}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<placement x="%col1_x_left%" y="%row1_y%"/>
|
||||
<text>{@decrypt_data_enter_pass_fbe=Enter Password for User [%tw_crypto_user_id%]}</text>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<placement x="%col1_x_left%" y="%row2_y%" w="%content_width%" h="%input_height%"/>
|
||||
<text>%tw_crypto_display%</text>
|
||||
@@ -5316,11 +5343,19 @@
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<condition var1="tw_is_fbe" op="!=" var2="1"/>
|
||||
<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_accent">
|
||||
<condition var1="tw_is_fbe" var2="1"/>
|
||||
<condition var1="tw_password_fail" op="!=" var2="1"/>
|
||||
<placement x="%center_x%" y="%row5_y%" placement="5"/>
|
||||
<text>{@decrypt_data_enter_pattern_fbe=Enter Pattern for User [%tw_crypto_user_id%]}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_fail">
|
||||
<condition var1="tw_password_fail" var2="1"/>
|
||||
<placement x="%center_x%" y="%row5_y%" placement="5"/>
|
||||
@@ -5711,5 +5746,44 @@
|
||||
<action function="screenshot"/>
|
||||
</action>
|
||||
</page>
|
||||
|
||||
<page name="decrypt_users">
|
||||
<template name="page"/>
|
||||
|
||||
<text style="text_l">
|
||||
<placement x="%col1_x_header%" y="%row3_header_y%"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
</text>
|
||||
|
||||
<text style="text_m_accent">
|
||||
<placement x="%center_x%" y="%row2_y%" placement="5"/>
|
||||
<text>{@decrypt_users_selection=Select a user ID to decrypt}</text>
|
||||
</text>
|
||||
|
||||
<listbox>
|
||||
<placement x="%indent%" y="%row2_header_y%" w="%content_width%" h="%fileselector_install_height%"/>
|
||||
<text>{@select_user=Select User}</text>
|
||||
<icon selected="radio_true" unselected="radio_false" />
|
||||
<data name="tw_crypto_user_id" />
|
||||
</listbox>
|
||||
|
||||
<button style="main_button_half_height">
|
||||
<placement x="%col1_x_left%" y="%row13_y%" textplacement="6"/>
|
||||
<text>{@decrypt_users=Decrypt Users}</text>
|
||||
<action function="set">tw_crypto_password=</action>
|
||||
<action function="set">tw_password_fail=0</action>
|
||||
<action function="page">decrypt</action>
|
||||
</button>
|
||||
|
||||
<action>
|
||||
<touch key="home"/>
|
||||
<action function="page">main</action>
|
||||
</action>
|
||||
|
||||
<action>
|
||||
<touch key="back"/>
|
||||
<action function="page">advanced</action>
|
||||
</action>
|
||||
</page>
|
||||
</pages>
|
||||
</recovery>
|
||||
|
||||
Reference in New Issue
Block a user