diff options
author | Dees_Troy <dees_troy@yahoo.com> | 2013-02-21 15:26:57 +0100 |
---|---|---|
committer | Dees_Troy <dees_troy@teamw.in> | 2013-02-21 19:23:43 +0100 |
commit | 6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5 (patch) | |
tree | f6c1bc2e0210477d8c1fb91061f9defa135b4359 | |
parent | add military time option (diff) | |
download | android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar.gz android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar.bz2 android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar.lz android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar.xz android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.tar.zst android_bootable_recovery-6ef6635ad3d5e8f6440e9ac2b67f1db8589e77b5.zip |
Diffstat (limited to '')
-rw-r--r-- | data.cpp | 1 | ||||
-rw-r--r-- | gui/action.cpp | 58 | ||||
-rwxr-xr-x | gui/devices/1024x600/res/ui.xml | 156 | ||||
-rw-r--r-- | gui/devices/1024x768/res/ui.xml | 144 | ||||
-rw-r--r-- | gui/devices/1280x800/res/ui.xml | 144 | ||||
-rw-r--r-- | gui/devices/1920x1200/res/ui.xml | 144 | ||||
-rw-r--r-- | gui/devices/2560x1600/res/ui.xml | 144 | ||||
-rw-r--r-- | gui/devices/320x480/res/ui.xml | 150 | ||||
-rw-r--r-- | gui/devices/480x800/res/ui.xml | 150 | ||||
-rw-r--r-- | gui/devices/480x854/res/ui.xml | 150 | ||||
-rw-r--r-- | gui/devices/720x1280/res/ui.xml | 150 | ||||
-rwxr-xr-x | gui/devices/800x1280/res/ui.xml | 150 | ||||
-rwxr-xr-x | gui/devices/800x480/res/ui.xml | 144 | ||||
-rw-r--r-- | gui/fileselector.cpp | 8 | ||||
-rw-r--r-- | gui/gui.cpp | 4 | ||||
-rw-r--r-- | prebuilt/Android.mk | 20 | ||||
-rw-r--r-- | prebuilt/Superuser.apk | bin | 0 -> 28674 bytes | |||
-rwxr-xr-x | prebuilt/su | bin | 0 -> 96144 bytes | |||
-rw-r--r-- | recovery.cpp | 31 | ||||
-rw-r--r-- | twrp-functions.cpp | 327 | ||||
-rw-r--r-- | twrp-functions.hpp | 112 |
21 files changed, 2040 insertions, 147 deletions
@@ -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)); diff --git a/gui/action.cpp b/gui/action.cpp index f1dac1c9b..ca968d088 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -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 - - sync(); - - 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); + if (function == "reboot") + { + //curtainClose(); this sometimes causes a crash - // This should never occur - return -1; - } + sync(); + DataManager::SetValue("tw_gui_done", 1); + DataManager::SetValue("tw_reboot_arg", arg); + + 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 { diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml index fbdf14e93..383774e12 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 025362a15..6395c7443 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 9529d1107..c806b8517 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 5fe7fd525..1947ffa69 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 6d0e40558..e26bdb902 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 38e7b1d34..58147d2aa 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 60ad8280c..572d1b92b 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 a570faf72..09df8037c 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 79de4ca86..6d9f061c4 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 07ffec4e2..03e4e7001 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 f12c242e4..9501ad899 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 66bf80f78..bc10f917d 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -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 diff --git a/gui/gui.cpp b/gui/gui.cpp index 7fd474a35..4788fe0df 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -423,6 +423,10 @@ runPages (void) PageManager::Render (); flip (); } + if (DataManager::GetIntValue("tw_gui_done") != 0) + { + break; + } } gGuiRunning = 0; diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk index 5e78b349f..f0c2c264a 100644 --- a/prebuilt/Android.mk +++ b/prebuilt/Android.mk @@ -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
\ No newline at end of file diff --git a/prebuilt/Superuser.apk b/prebuilt/Superuser.apk Binary files differnew file mode 100644 index 000000000..99eb7d2a1 --- /dev/null +++ b/prebuilt/Superuser.apk diff --git a/prebuilt/su b/prebuilt/su Binary files differnew file mode 100755 index 000000000..1b6974b2e --- /dev/null +++ b/prebuilt/su diff --git a/recovery.cpp b/recovery.cpp index 20684fdd5..8969ebc6e 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -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 diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 85ce7274a..3e06f8770 100644 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -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; } diff --git a/twrp-functions.hpp b/twrp-functions.hpp index d7dea3f2a..421962281 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 |