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
diff --git a/data.cpp b/data.cpp
index de83d95..18af8cd 100644
--- a/data.cpp
+++ b/data.cpp
@@ -855,6 +855,7 @@
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));
diff --git a/gui/action.cpp b/gui/action.cpp
index f1dac1c..ca968d0 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -341,26 +341,16 @@
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 @@
}
}
}
+ 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
{
diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml
index fbdf14e..383774e 100755
--- a/gui/devices/1024x600/res/ui.xml
+++ b/gui/devices/1024x600/res/ui.xml
@@ -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% > "%tw_brightness_file%"</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% > "%tw_brightness_file%"</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% > "%tw_brightness_file%"</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% > "%tw_brightness_file%"</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>
diff --git a/gui/devices/1024x768/res/ui.xml b/gui/devices/1024x768/res/ui.xml
index 025362a..6395c74 100644
--- a/gui/devices/1024x768/res/ui.xml
+++ b/gui/devices/1024x768/res/ui.xml
@@ -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>
diff --git a/gui/devices/1280x800/res/ui.xml b/gui/devices/1280x800/res/ui.xml
index 9529d11..c806b85 100644
--- a/gui/devices/1280x800/res/ui.xml
+++ b/gui/devices/1280x800/res/ui.xml
@@ -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>
diff --git a/gui/devices/1920x1200/res/ui.xml b/gui/devices/1920x1200/res/ui.xml
index 5fe7fd5..1947ffa 100644
--- a/gui/devices/1920x1200/res/ui.xml
+++ b/gui/devices/1920x1200/res/ui.xml
@@ -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>
diff --git a/gui/devices/2560x1600/res/ui.xml b/gui/devices/2560x1600/res/ui.xml
index 6d0e405..e26bdb9 100644
--- a/gui/devices/2560x1600/res/ui.xml
+++ b/gui/devices/2560x1600/res/ui.xml
@@ -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>
diff --git a/gui/devices/320x480/res/ui.xml b/gui/devices/320x480/res/ui.xml
index 38e7b1d..58147d2 100644
--- a/gui/devices/320x480/res/ui.xml
+++ b/gui/devices/320x480/res/ui.xml
@@ -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>
diff --git a/gui/devices/480x800/res/ui.xml b/gui/devices/480x800/res/ui.xml
index 60ad828..572d1b9 100644
--- a/gui/devices/480x800/res/ui.xml
+++ b/gui/devices/480x800/res/ui.xml
@@ -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>
diff --git a/gui/devices/480x854/res/ui.xml b/gui/devices/480x854/res/ui.xml
index a570faf..09df803 100644
--- a/gui/devices/480x854/res/ui.xml
+++ b/gui/devices/480x854/res/ui.xml
@@ -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>
diff --git a/gui/devices/720x1280/res/ui.xml b/gui/devices/720x1280/res/ui.xml
index 79de4ca..6d9f061 100644
--- a/gui/devices/720x1280/res/ui.xml
+++ b/gui/devices/720x1280/res/ui.xml
@@ -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>
diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml
index 07ffec4..03e4e70 100755
--- a/gui/devices/800x1280/res/ui.xml
+++ b/gui/devices/800x1280/res/ui.xml
@@ -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>
diff --git a/gui/devices/800x480/res/ui.xml b/gui/devices/800x480/res/ui.xml
index f12c242..9501ad8 100755
--- a/gui/devices/800x480/res/ui.xml
+++ b/gui/devices/800x480/res/ui.xml
@@ -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>
diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp
index 66bf80f..bc10f91 100644
--- a/gui/fileselector.cpp
+++ b/gui/fileselector.cpp
@@ -790,19 +790,19 @@
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
diff --git a/gui/gui.cpp b/gui/gui.cpp
index 7fd474a..4788fe0 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -423,6 +423,10 @@
PageManager::Render ();
flip ();
}
+ if (DataManager::GetIntValue("tw_gui_done") != 0)
+ {
+ break;
+ }
}
gGuiRunning = 0;
diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk
index 5e78b34..f0c2c26 100644
--- a/prebuilt/Android.mk
+++ b/prebuilt/Android.mk
@@ -185,3 +185,23 @@
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
\ No newline at end of file
diff --git a/prebuilt/Superuser.apk b/prebuilt/Superuser.apk
new file mode 100644
index 0000000..99eb7d2
--- /dev/null
+++ b/prebuilt/Superuser.apk
Binary files differ
diff --git a/prebuilt/su b/prebuilt/su
new file mode 100755
index 0000000..1b6974b
--- /dev/null
+++ b/prebuilt/su
Binary files differ
diff --git a/recovery.cpp b/recovery.cpp
index 20684fd..8969ebc 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -977,9 +977,40 @@
//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
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index 85ce727..3e06f87 100644
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -48,10 +48,10 @@
}
/* 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 @@
ret = -1;
}
- return ret;
+ return ret;
}
// Returns "file.name" from a full /path/to/file.name
@@ -288,30 +288,30 @@
// 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 @@
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 @@
// 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 @@
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 @@
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;
}
diff --git a/twrp-functions.hpp b/twrp-functions.hpp
index d7dea3f..4219622 100644
--- a/twrp-functions.hpp
+++ b/twrp-functions.hpp
@@ -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