diff options
Diffstat (limited to '')
-rw-r--r-- | adb_install.cpp | 16 | ||||
-rw-r--r-- | gui/action.cpp | 34 | ||||
-rwxr-xr-x | gui/devices/800x1280/res/ui.xml | 70 | ||||
-rw-r--r-- | recovery.cpp | 7 |
4 files changed, 116 insertions, 11 deletions
diff --git a/adb_install.cpp b/adb_install.cpp index 12bce1cca..f5ba89c3f 100644 --- a/adb_install.cpp +++ b/adb_install.cpp @@ -33,6 +33,7 @@ extern "C" { #include "minadbd/adb.h" #include "twinstall.h" +#include "data.h" int TWinstall_zip(const char* path, int* wipe_cache); } @@ -86,6 +87,7 @@ apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { execl("/sbin/recovery", "recovery", "--adbd", NULL); _exit(-1); } + DataManager_SetIntValue("tw_child_pid", child); int status; // TODO(dougz): there should be a way to cancel waiting for a // package (by pushing some button combo on the device). For now @@ -108,5 +110,17 @@ apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { } return INSTALL_ERROR; } - return TWinstall_zip(ADB_SIDELOAD_FILENAME, wipe_cache); + char zip_file[255]; + if (strncmp(ADB_SIDELOAD_FILENAME, "/tmp", 4) == 0) { + char command[255]; + sprintf(zip_file, "%s/%s", DataManager_GetCurrentStoragePath(), "sideload.zip"); + ui->Print("Copying zip to '%s'\n", zip_file); + sprintf(command, "cp %s %s", ADB_SIDELOAD_FILENAME, zip_file); + system(command); + sprintf(command, "rm %s", ADB_SIDELOAD_FILENAME); + system(command); + } else { + strcpy(zip_file, ADB_SIDELOAD_FILENAME); + } + return TWinstall_zip(zip_file, wipe_cache); } diff --git a/gui/action.cpp b/gui/action.cpp index 5118b4c29..4114bf0aa 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -1057,16 +1057,42 @@ LOGE("TODO: Implement ORS support\n"); simulate_progress_bar(); } else { int wipe_cache = 0; + string Command; + + if (!PartitionManager.Mount_Current_Storage(true)) { + operation_end(1, simulate); + return 0; + } + if (TWFunc::Path_Exists(ADB_SIDELOAD_FILENAME)) { + Command = "rm "; + Command += ADB_SIDELOAD_FILENAME; + system(Command.c_str()); + } + Command = "touch "; + Command += ADB_SIDELOAD_FILENAME; + system(Command.c_str()); ui_print("Starting ADB sideload feature...\n"); - system("touch /tmp/update.zip"); - ret = apply_from_adb(ui, &wipe_cache, "/tmp/last_install"); - LOGI("Result was: %i\n", ret); + ret = apply_from_adb(ui, &wipe_cache, "/tmp/install_log"); if (ret != 0) - ret = 1; + ret = 1; // failure + else if (wipe_cache) + PartitionManager.Wipe_By_Path("/cache"); } operation_end(ret, simulate); return 0; } + if (function == "adbsideloadcancel") + { + int child_pid; + string Command; + Command = "rm "; + Command += ADB_SIDELOAD_FILENAME; + system(Command.c_str()); + DataManager::GetValue("tw_child_pid", child_pid); + ui_print("Cancelling ADB sideload...\n"); + kill(child_pid, SIGTERM); + return 0; + } } else { diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml index decfcad55..a131e8969 100755 --- a/gui/devices/800x1280/res/ui.xml +++ b/gui/devices/800x1280/res/ui.xml @@ -67,7 +67,7 @@ <variable name="row9_text_y" value="570" /> <variable name="row10_text_y" value="620" /> <variable name="row11_text_y" value="670" /> - <variable name="row12_text_y" value="700" /> + <variable name="row12_text_y" value="720" /> <variable name="row13_text_y" value="770" /> <variable name="row14_text_y" value="820" /> <variable name="row15_text_y" value="870" /> @@ -909,6 +909,69 @@ </object> </page> + <page name="action_page_cancel"> + <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="button"> + <placement x="%col_center_x%" y="%row4_y%" /> + <font resource="font" color="%button_text_color%" /> + <text>Cancel</text> + <image resource="main_button" /> + <action function="%tw_cancel_function%"></action> + </object> + + <object type="template" name="action_page_console" /> + + <object type="template" name="progress_bar" /> + + <object type="action"> + <conditions> + <condition var1="tw_operation_state" var2="1" /> + <condition var1="tw_operation_status" var2="0" /> + </conditions> + <actions> + <action function="page">action_complete</action> + </actions> + </object> + + <object type="action"> + <conditions> + <condition var1="tw_operation_state" var2="1" /> + <condition var1="tw_operation_status" op="!=" var2="0" /> + </conditions> + <actions> + <action function="page">action_complete</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" /> @@ -2546,12 +2609,13 @@ <text>ADB Sideload</text> <image resource="main_button" /> <actions> + <action function="set">tw_back=advanced</action> <action function="set">tw_action=adbsideload</action> <action function="set">tw_action_text1=ADB Sideload</action> <action function="set">tw_action_text2=Usage: adb sideload filename.zip</action> <action function="set">tw_complete_text1=ADB Sideload Complete</action> - <action function="set">tw_slider_text=Swipe to Wipe</action> - <action function="page">action_page</action> + <action function="set">tw_cancel_function=adbsideloadcancel</action> + <action function="page">action_page_cancel</action> </actions> </object> diff --git a/recovery.cpp b/recovery.cpp index b333db904..b8bb09920 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -773,6 +773,10 @@ print_property(const char *key, const char *name, void *cookie) { int main(int argc, char **argv) { + // Recovery needs to install world-readable files, so clear umask + // set by init + umask(0); + time_t start = time(NULL); // If these fail, there's not really anywhere to complain... @@ -792,9 +796,6 @@ main(int argc, char **argv) { } printf("Starting TWRP %s on %s", TW_VERSION_STR, ctime(&start)); - // Recovery needs to install world-readable files, so clear umask - // set by init - umask(0); Device* device = make_device(); ui = device->GetUI(); |