GUI: Add countdown & cancel to install auto-reboot

Provide a countdown from 5 sec for the automated reboot after install.
Include a cancel button to interrupt the process.

Change-Id: Ib5e1447918adfde45eba361c088800812b690890
diff --git a/gui/action.cpp b/gui/action.cpp
index 56336f4..328fc2c 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -180,6 +180,7 @@
 		ADD_ACTION(cancelzip);
 		ADD_ACTION(queueclear);
 		ADD_ACTION(sleep);
+		ADD_ACTION(sleepcounter);
 		ADD_ACTION(appenddatetobackupname);
 		ADD_ACTION(generatebackupname);
 		ADD_ACTION(checkpartitionlist);
@@ -779,6 +780,23 @@
 	return 0;
 }
 
+int GUIAction::sleepcounter(std::string arg)
+{
+	operation_start("SleepCounter");
+	// Ensure user notices countdown in case it needs to be cancelled
+	blankTimer.resetTimerAndUnblank();
+	int total = atoi(arg.c_str());
+	for (int t = total; t > 0; t--) {
+		int progress = (int)(((float)(total-t)/(float)total)*100.0);
+		DataManager::SetValue("ui_progress", progress);
+		::sleep(1);
+		DataManager::SetValue("tw_sleep", t-1);
+	}
+	DataManager::SetValue("ui_progress", 100);
+	operation_end(0);
+	return 0;
+}
+
 int GUIAction::appenddatetobackupname(std::string arg __unused)
 {
 	operation_start("AppendDateToBackupName");
@@ -1024,12 +1042,6 @@
 
 	reinject_after_flash();
 	PartitionManager.Update_System_Details();
-	if (DataManager::GetIntValue("tw_install_reboot") > 0 && ret_val == 0) {
-		gui_msg("install_reboot=Rebooting in 5 seconds");
-		usleep(5000000);
-		TWFunc::tw_reboot(rb_system);
-		usleep(5000000); // another sleep while we wait for the reboot to occur
-	}
 	operation_end(ret_val);
 	// This needs to be after the operation_end call so we change pages before we change variables that we display on the screen
 	DataManager::SetValue(TW_ZIP_QUEUE_COUNT, zip_queue_index);