Check for root and root perms and offer to install/fix

Also fix sort order for file selector by date and file sizes

Change-Id: Idff9fe4232c19d4ed1082e78fabe6f921aa0a114
This commit is contained in:
Dees_Troy
2013-02-21 08:26:57 -06:00
committed by Dees_Troy
parent 4efe9c3c7d
commit 6ef6635ad3
21 changed files with 2039 additions and 146 deletions
+1
View File
@@ -855,6 +855,7 @@ void DataManager::SetDefaultValues()
mValues.insert(make_pair("tw_background_thread_running", make_pair("0", 0)));
mValues.insert(make_pair(TW_RESTORE_FILE_DATE, make_pair("0", 0)));
mValues.insert(make_pair("tw_screen_timeout_secs", make_pair("60", 1)));
mValues.insert(make_pair("tw_gui_done", make_pair("0", 0)));
#ifdef TW_MAX_BRIGHTNESS
if (strcmp(EXPAND(TW_BRIGHTNESS_PATH), "/nobrightness") != 0) {
LOGI("TW_BRIGHTNESS_PATH := %s\n", EXPAND(TW_BRIGHTNESS_PATH));
+38 -18
View File
@@ -341,26 +341,16 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */)
DataManager::GetValue(TW_SIMULATE_ACTIONS, simulate);
if (function == "reboot")
{
//curtainClose(); this sometimes causes a crash
if (function == "reboot")
{
//curtainClose(); this sometimes causes a crash
sync();
sync();
DataManager::SetValue("tw_gui_done", 1);
DataManager::SetValue("tw_reboot_arg", arg);
if (arg == "recovery")
TWFunc::tw_reboot(rb_recovery);
else if (arg == "poweroff")
TWFunc::tw_reboot(rb_poweroff);
else if (arg == "bootloader")
TWFunc::tw_reboot(rb_bootloader);
else if (arg == "download")
TWFunc::tw_reboot(rb_download);
else
TWFunc::tw_reboot(rb_system);
// This should never occur
return -1;
}
return 0;
}
if (function == "home")
{
PageManager::SelectPackage("TWRP");
@@ -1143,6 +1133,36 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */)
}
}
}
if (function == "installsu")
{
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, simulate);
return 0;
}
if (function == "fixsu")
{
int op_status = 0;
operation_start("Fixing Superuser Permissions");
if (simulate) {
simulate_progress_bar();
} else {
if (!TWFunc::Fix_su_Perms())
op_status = 1;
}
operation_end(op_status, simulate);
return 0;
}
}
else
{
+148 -8
View File
@@ -649,14 +649,6 @@
<image checked="checkbox_true" unchecked="checkbox_false" />
</object>
<object type="checkbox">
<placement x="%col2_x%" y="%row8_text_y%" />
<font resource="font" color="%text_color%" />
<text>Force MD5 check on all zips?</text>
<data variable="tw_force_md5_check" />
<image checked="checkbox_true" unchecked="checkbox_false" />
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row10_text_y%" placement="5" />
@@ -975,6 +967,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -2682,6 +2716,7 @@
<actions>
<action function="cmd">echo %tw_brightness_25% > &quot;%tw_brightness_file%&quot;</action>
<action function="set">tw_brightness_display=25%</action>
<action function="set">tw_brightness=%tw_brightness_25%</action>
</actions>
</object>
@@ -2694,6 +2729,7 @@
<actions>
<action function="cmd">echo %tw_brightness_50% > &quot;%tw_brightness_file%&quot;</action>
<action function="set">tw_brightness_display=50%</action>
<action function="set">tw_brightness=%tw_brightness_50%</action>
</actions>
</object>
@@ -2706,6 +2742,7 @@
<actions>
<action function="cmd">echo %tw_brightness_75% > &quot;%tw_brightness_file%&quot;</action>
<action function="set">tw_brightness_display=75%</action>
<action function="set">tw_brightness=%tw_brightness_75%</action>
</actions>
</object>
@@ -2718,6 +2755,7 @@
<actions>
<action function="cmd">echo %tw_brightness_100% > &quot;%tw_brightness_file%&quot;</action>
<action function="set">tw_brightness_display=100%</action>
<action function="set">tw_brightness=%tw_brightness_100%</action>
</actions>
</object>
@@ -3891,5 +3929,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+144
View File
@@ -967,6 +967,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3887,5 +3929,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+144
View File
@@ -967,6 +967,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3887,5 +3929,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+144
View File
@@ -967,6 +967,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3888,5 +3930,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+144
View File
@@ -967,6 +967,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3887,5 +3929,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+150
View File
@@ -938,6 +938,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3830,5 +3872,113 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+150
View File
@@ -937,6 +937,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3829,5 +3871,113 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+150
View File
@@ -936,6 +936,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3828,5 +3870,113 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+150
View File
@@ -950,6 +950,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3842,5 +3884,113 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+150
View File
@@ -938,6 +938,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3830,5 +3872,113 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_header_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row3_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+144
View File
@@ -975,6 +975,48 @@
</object>
</page>
<page name="singleaction_page">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5" />
<text>%tw_action_text1%</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5" />
<text>%tw_action_text2%</text>
</object>
<object type="template" name="action_page_console" />
<object type="template" name="progress_bar" />
<object type="action">
<condition var1="tw_operation_state" var2="1" />
<actions>
<action function="set">tw_page_done=1</action>
</actions>
</object>
<object type="action">
<condition var1="tw_has_action2" var2="0" />
<actions>
<action function="%tw_action%">%tw_action_param%</action>
</actions>
</object>
<object type="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>
</object>
</page>
<page name="action_complete">
<object type="template" name="header" />
@@ -3895,5 +3937,107 @@
<object type="template" name="footer" />
</page>
<page name="installsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Install SuperSU?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Your device does not appear to be rooted.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Install SuperSU now? This will root your device.</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Install</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=installsu</action>
<action function="set">tw_action_text1=Installing SuperSU</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Install</text>
</object>
</page>
<page name="fixsu">
<object type="template" name="header" />
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row1_text_y%" placement="5"/>
<text>Fix Superuser Permissions?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row2_text_y%" placement="5"/>
<text>Root permissions appear to be lost.</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row3_text_y%" placement="5"/>
<text>Fix root permissions now?</text>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row4_text_y%" placement="5"/>
<text>(Fixes permissions on su binary & app)</text>
</object>
<object type="button">
<highlight color="%highlight_color%" />
<placement x="%col_center_x%" y="%row2_medium_y%" />
<font resource="font" color="%button_text_color%" />
<text>Do Not Fix</text>
<image resource="main_button" />
<action function="set">tw_page_done=1</action>
</object>
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
<actions>
<action function="set">tw_action=fixsu</action>
<action function="set">tw_action_text1=Fixing Root Permissions</action>
<action function="set">tw_action_text2=</action>
<action function="page">singleaction_page</action>
</actions>
</object>
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%slider_text_y%" placement="4" />
<text>Swipe to Fix Root</text>
</object>
</page>
</pages>
</recovery>
+4 -4
View File
@@ -790,19 +790,19 @@ bool GUIFileSelector::fileSort(FileData d1, FileData d2)
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;
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;
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;
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;
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
+4
View File
@@ -423,6 +423,10 @@ runPages (void)
PageManager::Render ();
flip ();
}
if (DataManager::GetIntValue("tw_gui_done") != 0)
{
break;
}
}
gGuiRunning = 0;
+20
View File
@@ -185,3 +185,23 @@ ifeq ($(TW_INCLUDE_DUMLOCK), true)
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
endif
ifneq ($(TW_EXCLUDE_SUPERSU), true)
#su binary
include $(CLEAR_VARS)
LOCAL_MODULE := su
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/supersu
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
#SuperSU special installer APK
include $(CLEAR_VARS)
LOCAL_MODULE := Superuser.apk
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/supersu
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
endif
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
+31
View File
@@ -977,9 +977,40 @@ main(int argc, char **argv) {
//prompt_and_wait(device);
}
// Check for su to see if the device is rooted or not
if (PartitionManager.Mount_By_Path("/system", false)) {
if (TWFunc::Path_Exists("/res/supersu/su") && !TWFunc::Path_Exists("/system/bin/su") && !TWFunc::Path_Exists("/system/xbin/su") && !TWFunc::Path_Exists("/system/bin/.ext/.su")) {
// Device doesn't have su installed
DataManager_SetIntValue("tw_busy", 1);
if (gui_startPage("installsu") != 0) {
LOGE("Failed to start decrypt GUI page.\n");
}
} else if (TWFunc::Check_su_Perms() > 0) {
// su perms are set incorrectly
DataManager_SetIntValue("tw_busy", 1);
if (gui_startPage("fixsu") != 0) {
LOGE("Failed to start decrypt GUI page.\n");
}
}
}
// Otherwise, get ready to boot the main system...
finish_recovery(send_intent);
ui->Print("Rebooting...\n");
char backup_arg_char[50];
strcpy(backup_arg_char, DataManager_GetStrValue("tw_reboot_arg"));
string backup_arg = backup_arg_char;
if (backup_arg == "recovery")
TWFunc::tw_reboot(rb_recovery);
else if (backup_arg == "poweroff")
TWFunc::tw_reboot(rb_poweroff);
else if (backup_arg == "bootloader")
TWFunc::tw_reboot(rb_bootloader);
else if (backup_arg == "download")
TWFunc::tw_reboot(rb_download);
else
TWFunc::tw_reboot(rb_system);
#ifdef ANDROID_RB_RESTART
android_reboot(ANDROID_RB_RESTART, 0, 0);
#else
+265 -62
View File
@@ -48,10 +48,10 @@ int TWFunc::Exec_Cmd(string cmd, string &result) {
}
/* Checks md5 for a path
Return values:
-1 : MD5 does not exist
0 : Failed
1 : Success */
Return values:
-1 : MD5 does not exist
0 : Failed
1 : Success */
int TWFunc::Check_MD5(string File) {
int ret;
string Command, DirPath, MD5_File, Sline, Filename, MD5_File_Filename, OK;
@@ -86,7 +86,7 @@ int TWFunc::Check_MD5(string File) {
ret = -1;
}
return ret;
return ret;
}
// Returns "file.name" from a full /path/to/file.name
@@ -288,30 +288,30 @@ static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install";
// close a file, log an error if the error indicator is set
void TWFunc::check_and_fclose(FILE *fp, const char *name) {
fflush(fp);
if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno));
fclose(fp);
fflush(fp);
if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno));
fclose(fp);
}
void TWFunc::copy_log_file(const char* source, const char* destination, int append) {
FILE *log = fopen_path(destination, append ? "a" : "w");
if (log == NULL) {
LOGE("Can't open %s\n", destination);
} else {
FILE *tmplog = fopen(source, "r");
if (tmplog != NULL) {
if (append) {
fseek(tmplog, tmplog_offset, SEEK_SET); // Since last write
}
char buf[4096];
while (fgets(buf, sizeof(buf), tmplog)) fputs(buf, log);
if (append) {
tmplog_offset = ftell(tmplog);
}
check_and_fclose(tmplog, source);
}
check_and_fclose(log, destination);
}
FILE *log = fopen_path(destination, append ? "a" : "w");
if (log == NULL) {
LOGE("Can't open %s\n", destination);
} else {
FILE *tmplog = fopen(source, "r");
if (tmplog != NULL) {
if (append) {
fseek(tmplog, tmplog_offset, SEEK_SET); // Since last write
}
char buf[4096];
while (fgets(buf, sizeof(buf), tmplog)) fputs(buf, log);
if (append) {
tmplog_offset = ftell(tmplog);
}
check_and_fclose(tmplog, source);
}
check_and_fclose(log, destination);
}
}
// clear the recovery command and prepare to boot a (hopefully working) system,
@@ -323,10 +323,10 @@ void TWFunc::twfinish_recovery(const char *send_intent) {
if (send_intent != NULL) {
FILE *fp = fopen_path(INTENT_FILE, "w");
if (fp == NULL) {
LOGE("Can't open %s\n", INTENT_FILE);
LOGE("Can't open %s\n", INTENT_FILE);
} else {
fputs(send_intent, fp);
check_and_fclose(fp, INTENT_FILE);
fputs(send_intent, fp);
check_and_fclose(fp, INTENT_FILE);
}
}
@@ -346,7 +346,7 @@ void TWFunc::twfinish_recovery(const char *send_intent) {
// Remove the command file, so recovery won't repeat indefinitely.
if (!PartitionManager.Mount_By_Path("/system", true) || (unlink(COMMAND_FILE) && errno != ENOENT)) {
LOGW("Can't unlink %s\n", COMMAND_FILE);
LOGW("Can't unlink %s\n", COMMAND_FILE);
}
PartitionManager.UnMount_By_Path("/cache", true);
@@ -357,34 +357,34 @@ void TWFunc::twfinish_recovery(const char *send_intent) {
int TWFunc::tw_reboot(RebootCommand command)
{
// Always force a sync before we reboot
sync();
sync();
switch (command)
{
case rb_current:
case rb_system:
twfinish_recovery("s");
switch (command)
{
case rb_current:
case rb_system:
twfinish_recovery("s");
sync();
check_and_run_script("/sbin/rebootsystem.sh", "reboot system");
return reboot(RB_AUTOBOOT);
case rb_recovery:
return reboot(RB_AUTOBOOT);
case rb_recovery:
check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery");
case rb_bootloader:
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery");
case rb_bootloader:
check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader");
case rb_poweroff:
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader");
case rb_poweroff:
check_and_run_script("/sbin/poweroff.sh", "power off");
android_reboot(ANDROID_RB_POWEROFF, 0, 0);
return reboot(RB_POWER_OFF);
case rb_download:
return reboot(RB_POWER_OFF);
case rb_download:
check_and_run_script("/sbin/rebootdownload.sh", "reboot download");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download");
return 1;
default:
return -1;
}
return -1;
default:
return -1;
}
return -1;
}
void TWFunc::check_and_run_script(const char* script_file, const char* display_name)
@@ -503,21 +503,224 @@ int TWFunc::write_file(string fn, string& line) {
timespec TWFunc::timespec_diff(timespec& start, timespec& end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}
int TWFunc::drop_caches(void) {
string file = "/proc/sys/vm/drop_caches";
string value = "3";
if (write_file(file, value) != 0)
return -1;
return 0;
string file = "/proc/sys/vm/drop_caches";
string value = "3";
if (write_file(file, value) != 0)
return -1;
return 0;
}
int TWFunc::Check_su_Perms(void) {
struct stat st;
int ret = 0;
if (!PartitionManager.Mount_By_Path("/system", false))
return 0;
// Check to ensure that perms are 6755 for all 3 file locations
if (stat("/system/bin/su", &st) == 0) {
if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) {
ret = 1;
}
}
if (stat("/system/xbin/su", &st) == 0) {
if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) {
ret += 2;
}
}
if (stat("/system/bin/.ext/.su", &st) == 0) {
if ((st.st_mode & (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) != (S_ISUID | S_ISGID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) || st.st_uid != 0 || st.st_gid != 0) {
ret += 4;
}
}
return ret;
}
bool TWFunc::Fix_su_Perms(void) {
if (!PartitionManager.Mount_By_Path("/system", true))
return false;
string file = "/system/bin/su";
if (TWFunc::Path_Exists(file)) {
if (chown(file.c_str(), 0, 0) != 0) {
LOGE("Failed to chown '%s'\n", file.c_str());
return false;
}
if (tw_chmod(file, "6755") != 0) {
LOGE("Failed to chmod '%s'\n", file.c_str());
return false;
}
}
file = "/system/xbin/su";
if (TWFunc::Path_Exists(file)) {
if (chown(file.c_str(), 0, 0) != 0) {
LOGE("Failed to chown '%s'\n", file.c_str());
return false;
}
if (tw_chmod(file, "6755") != 0) {
LOGE("Failed to chmod '%s'\n", file.c_str());
return false;
}
}
file = "/system/bin/.ext/.su";
if (TWFunc::Path_Exists(file)) {
if (chown(file.c_str(), 0, 0) != 0) {
LOGE("Failed to chown '%s'\n", file.c_str());
return false;
}
if (tw_chmod(file, "6755") != 0) {
LOGE("Failed to chmod '%s'\n", file.c_str());
return false;
}
}
file = "/system/app/Superuser.apk";
if (TWFunc::Path_Exists(file)) {
if (chown(file.c_str(), 0, 0) != 0) {
LOGE("Failed to chown '%s'\n", file.c_str());
return false;
}
if (tw_chmod(file, "0644") != 0) {
LOGE("Failed to chmod '%s'\n", file.c_str());
return false;
}
}
sync();
if (!PartitionManager.UnMount_By_Path("/system", true))
return false;
return true;
}
int TWFunc::tw_chmod(string fn, string mode) {
long mask = 0;
for ( std::string::size_type n = 0; n < mode.length(); ++n) {
if (n == 0) {
if (mode[n] == '0')
continue;
if (mode[n] == '1')
mask |= S_ISVTX;
if (mode[n] == '2')
mask |= S_ISGID;
if (mode[n] == '4')
mask |= S_ISUID;
if (mode[n] == '5') {
mask |= S_ISVTX;
mask |= S_ISUID;
}
if (mode[n] == '6') {
mask |= S_ISGID;
mask |= S_ISUID;
}
if (mode[n] == '7') {
mask |= S_ISVTX;
mask |= S_ISGID;
mask |= S_ISUID;
}
}
else if (n == 1) {
if (mode[n] == '7') {
mask |= S_IRWXU;
}
if (mode[n] == '6') {
mask |= S_IRUSR;
mask |= S_IWUSR;
}
if (mode[n] == '5') {
mask |= S_IRUSR;
mask |= S_IXUSR;
}
if (mode[n] == '4')
mask |= S_IRUSR;
if (mode[n] == '3') {
mask |= S_IWUSR;
mask |= S_IRUSR;
}
if (mode[n] == '2')
mask |= S_IWUSR;
if (mode[n] == '1')
mask |= S_IXUSR;
}
else if (n == 2) {
if (mode[n] == '7') {
mask |= S_IRWXG;
}
if (mode[n] == '6') {
mask |= S_IRGRP;
mask |= S_IWGRP;
}
if (mode[n] == '5') {
mask |= S_IRGRP;
mask |= S_IXGRP;
}
if (mode[n] == '4')
mask |= S_IRGRP;
if (mode[n] == '3') {
mask |= S_IWGRP;
mask |= S_IXGRP;
}
if (mode[n] == '2')
mask |= S_IWGRP;
if (mode[n] == '1')
mask |= S_IXGRP;
}
else if (n == 3) {
if (mode[n] == '7') {
mask |= S_IRWXO;
}
if (mode[n] == '6') {
mask |= S_IROTH;
mask |= S_IWOTH;
}
if (mode[n] == '5') {
mask |= S_IROTH;
mask |= S_IXOTH;
}
if (mode[n] == '4')
mask |= S_IROTH;
if (mode[n] == '3') {
mask |= S_IWOTH;
mask |= S_IXOTH;
}
if (mode[n] == '2')
mask |= S_IWOTH;
if (mode[n] == '1')
mask |= S_IXOTH;
}
}
if (chmod(fn.c_str(), mask) != 0) {
LOGE("Unable to chmod '%s' %l\n", fn.c_str(), mask);
return -1;
}
return 0;
}
bool TWFunc::Install_SuperSU(void) {
if (!PartitionManager.Mount_By_Path("/system", true))
return false;
if (copy_file("/res/supersu/su", "/system/xbin/su", 0755) != 0) {
LOGE("Failed to copy su binary to /system/bin\n");
return false;
}
if (copy_file("/res/supersu/Superuser.apk", "/system/app/Superuser.apk", 0644) != 0) {
LOGE("Failed to copy Superuser app to /system/app\n");
return false;
}
if (!Fix_su_Perms())
return false;
return true;
}
+58 -54
View File
@@ -1,54 +1,58 @@
#ifndef _TWRPFUNCTIONS_HPP
#define _TWRPFUNCTIONS_HPP
#include <string>
using namespace std;
typedef enum
{
rb_current = 0,
rb_system,
rb_recovery,
rb_poweroff,
rb_bootloader, // May also be fastboot
rb_download,
} RebootCommand;
// Partition class
class TWFunc
{
public:
static int Check_MD5(string File);
static string Get_Root_Path(string Path); // Trims any trailing folders or filenames from the path, also adds a leading / if not present
static string Get_Path(string Path); // Trims everything after the last / in the string
static string Get_Filename(string Path); // Trims the path off of a filename
static void install_htc_dumlock(void); // Installs HTC Dumlock
static void htc_dumlock_restore_original_boot(void); // Restores the backup of boot from HTC Dumlock
static void htc_dumlock_reflash_recovery_to_boot(void); // Reflashes the current recovery to boot
static int Recursive_Mkdir(string Path); // Recursively makes the entire path
static unsigned long long Get_Folder_Size(const string& Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat
static bool Path_Exists(string Path); // Returns true if the path exists
static void GUI_Operation_Text(string Read_Value, string Default_Text); // Updates text for display in the GUI, e.g. Backing up %partition name%
static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name
static unsigned long Get_File_Size(string Path); // Returns the size of a file
static void twfinish_recovery(const char *send_intent); // Writes the log to last_log
static int tw_reboot(RebootCommand command); // Prepares the device for rebooting
static void check_and_run_script(const char* script_file, const char* display_name); // checks for the existence of a script, chmods it to 755, then runs it
static int Exec_Cmd(string cmd, string &result); //execute a command and return the result as a string by reference
static int removeDir(const string path, bool removeParent); //recursively remove a directory
static int copy_file(string src, string dst, int mode); //copy file from src to dst with mode permissions
static unsigned int Get_D_Type_From_Stat(string Path); // Returns a dirent dt_type value using stat instead of dirent
static timespec timespec_diff(timespec& start, timespec& end); // Return a diff for 2 times
static int read_file(string fn, string& results); //read from file
static int write_file(string fn, string& line); //write from file
static int drop_caches(void); //drop linux cache memory
private:
static void check_and_fclose(FILE *fp, const char *name);
static void copy_log_file(const char* source, const char* destination, int append);
};
#endif // _TWRPFUNCTIONS_HPP
#ifndef _TWRPFUNCTIONS_HPP
#define _TWRPFUNCTIONS_HPP
#include <string>
using namespace std;
typedef enum
{
rb_current = 0,
rb_system,
rb_recovery,
rb_poweroff,
rb_bootloader, // May also be fastboot
rb_download,
} RebootCommand;
// Partition class
class TWFunc
{
public:
static int Check_MD5(string File);
static string Get_Root_Path(string Path); // Trims any trailing folders or filenames from the path, also adds a leading / if not present
static string Get_Path(string Path); // Trims everything after the last / in the string
static string Get_Filename(string Path); // Trims the path off of a filename
static void install_htc_dumlock(void); // Installs HTC Dumlock
static void htc_dumlock_restore_original_boot(void); // Restores the backup of boot from HTC Dumlock
static void htc_dumlock_reflash_recovery_to_boot(void); // Reflashes the current recovery to boot
static int Recursive_Mkdir(string Path); // Recursively makes the entire path
static unsigned long long Get_Folder_Size(const string& Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat
static bool Path_Exists(string Path); // Returns true if the path exists
static void GUI_Operation_Text(string Read_Value, string Default_Text); // Updates text for display in the GUI, e.g. Backing up %partition name%
static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name
static unsigned long Get_File_Size(string Path); // Returns the size of a file
static void twfinish_recovery(const char *send_intent); // Writes the log to last_log
static int tw_reboot(RebootCommand command); // Prepares the device for rebooting
static void check_and_run_script(const char* script_file, const char* display_name); // checks for the existence of a script, chmods it to 755, then runs it
static int Exec_Cmd(string cmd, string &result); //execute a command and return the result as a string by reference
static int removeDir(const string path, bool removeParent); //recursively remove a directory
static int copy_file(string src, string dst, int mode); //copy file from src to dst with mode permissions
static unsigned int Get_D_Type_From_Stat(string Path); // Returns a dirent dt_type value using stat instead of dirent
static timespec timespec_diff(timespec& start, timespec& end); // Return a diff for 2 times
static int read_file(string fn, string& results); //read from file
static int write_file(string fn, string& line); //write from file
static int drop_caches(void); //drop linux cache memory
static int Check_su_Perms(void); // check perms and owner of su binary in various locations
static bool Fix_su_Perms(void); // sets proper permissions for su binaries and superuser apk
static int tw_chmod(string fn, string mode); // chmod function that converts a 4 char string into st_mode automatically
static bool Install_SuperSU(void); // Installs su binary and apk and sets proper permissions
private:
static void check_and_fclose(FILE *fp, const char *name);
static void copy_log_file(const char* source, const char* destination, int append);
};
#endif // _TWRPFUNCTIONS_HPP