Update backup and restore code, adb sideload

Fixed a problem with using make_ext4fs by making its lib
a dynamic lib.
Added ADB sideload zip install feature - no way to cancel it yet.
Improve backup and restore code.
diff --git a/gui/action.cpp b/gui/action.cpp
index b050feb..3d6c9eb 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -21,6 +21,9 @@
 #include "../partitions.hpp"
 #include "../twrp-functions.hpp"
 
+#include "../ui.h"
+#include "../adb_install.h"
+
 extern "C" {
 #include "../common.h"
 #include "../roots.h"
@@ -31,6 +34,8 @@
 #include "../variables.h"
 #include "../twinstall.h"
 
+#include "../minadbd/adb.h"
+
 int TWinstall_zip(const char* path, int* wipe_cache);
 void wipe_dalvik_cache(void);
 int check_backup_name(int show_error);
@@ -55,6 +60,8 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
+extern RecoveryUI* ui;
+
 void curtainClose(void);
 
 GUIAction::GUIAction(xml_node<>* node)
@@ -733,6 +740,7 @@
         if (function == "nandroid")
         {
             operation_start("Nandroid");
+			int ret = 0;
 
 			if (simulate) {
 				DataManager::SetValue("tw_partition", "Simulation");
@@ -741,21 +749,27 @@
 				if (arg == "backup") {
 					string Backup_Name;
 					DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
-					if (Backup_Name == "(Current Date)" || Backup_Name == "0" || Backup_Name == "(" || check_backup_name(1))
-						PartitionManager.Run_Backup(Backup_Name);
-					else
+					if (Backup_Name == "(Current Date)" || Backup_Name == "0" || Backup_Name == "(" || check_backup_name(1) == 0)
+						ret = PartitionManager.Run_Backup();
+					else {
+						operation_end(1, simulate);
 						return -1;
+					}
 					DataManager::SetValue(TW_BACKUP_NAME, "(Current Date)");
 				} else if (arg == "restore") {
 					string Restore_Name;
 					DataManager::GetValue("tw_restore", Restore_Name);
-					PartitionManager.Run_Restore(Restore_Name);
+					ret = PartitionManager.Run_Restore(Restore_Name);
 				} else {
 					operation_end(1, simulate);
 					return -1;
 				}
 			}
-            operation_end(0, simulate);
+			if (ret == false)
+				ret = 1; // 1 for failure
+			else
+				ret = 0; // 0 for success
+            operation_end(ret, simulate);
 			return 0;
         }
 		if (function == "fixpermissions")
@@ -1048,6 +1062,25 @@
 			operation_end(op_status, simulate);
 			return 0;
 		}
+		if (function == "adbsideload")
+		{
+			int ret = 0;
+
+			operation_start("Sideload");
+			if (simulate) {
+				simulate_progress_bar();
+			} else {
+				int wipe_cache = 0;
+				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);
+				if (ret != 0)
+					ret = 1;
+			}
+			operation_end(ret, simulate);
+			return 0;
+		}
     }
     else
     {
diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml
index 94468d8..decfcad 100755
--- a/gui/devices/800x1280/res/ui.xml
+++ b/gui/devices/800x1280/res/ui.xml
@@ -2541,6 +2541,21 @@
 			</object>
 
 			<object type="button">
+				<placement x="%col1_x%" y="%row4_y%" />
+				<font resource="font" color="%button_text_color%" />
+				<text>ADB Sideload</text>
+				<image resource="main_button" />
+				<actions>
+					<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>
+				</actions>
+			</object>
+
+			<object type="button">
 				<condition var1="tw_show_dumlock" var2="1" />
 				<placement x="%col2_x%" y="%row4_y%" />
 				<font resource="font" color="%button_text_color%" />