Add partition list GUI element

Add partition list GUI element and update backup, restore, mount,
storage selection, and wipe sections of GUI and partition manager
code to reflect the new GUI element. Update ORS engine to handle
new backup and restore setup.

Fix a bug with decrypt.
Add 1080x1920 layout.

Change-Id: Iaa2f44cb707167e66f935452f076ba00e68a2aa4
diff --git a/data.cpp b/data.cpp
index 02bdba3..c33fa89 100644
--- a/data.cpp
+++ b/data.cpp
@@ -226,7 +226,12 @@
 
     // Read in the file, if possible
     FILE* in = fopen(filename.c_str(), "rb");
-    if (!in)    return 0;
+    if (!in) {
+		LOGI("Settings file '%s' not found.\n", filename.c_str());
+		return 0;
+	} else {
+		LOGI("Loading settings from '%s'.\n", filename.c_str());
+	}
 
     int file_version;
     if (fread(&file_version, 1, sizeof(int), in) != sizeof(int))    goto error;
@@ -259,24 +264,19 @@
         }
         else
             mValues.insert(TNameValuePair(Name, TStrIntPair(Value, 1)));
+		if (Name == "tw_screen_timeout_secs")
+			blankTimer.setTime(atoi(Value.c_str()));
     }
-    fclose(in);
-
-	str = GetCurrentStoragePath();
-	str += "/TWRP/BACKUPS/";
-	str += dev_id;
-	SetValue(TW_BACKUPS_FOLDER_VAR, str, 0);
-
-    return 0;
-
 error:
-    // File version mismatch. Use defaults.
     fclose(in);
-	str = GetCurrentStoragePath();
-	str += "/TWRP/BACKUPS/";
-	str += dev_id;
-	SetValue(TW_BACKUPS_FOLDER_VAR, str, 0);
-    return -1;
+	string current = GetCurrentStoragePath();
+	string settings = GetSettingsStoragePath();
+	if (current != settings && !PartitionManager.Mount_By_Path(current, false)) {
+		SetValue("tw_storage_path", settings);
+	} else {
+		SetBackupFolder();
+	}
+    return 0;
 }
 
 int DataManager::Flush()
@@ -433,10 +433,10 @@
         SaveValues();
 	if (varName == "tw_screen_timeout_secs") {
 		blankTimer.setTime(atoi(value.c_str()));
+	} else if (varName == "tw_storage_path") {
+		SetBackupFolder();
 	}
-	else {
-		gui_notifyVarChange(varName.c_str(), value.c_str());
-	}
+	gui_notifyVarChange(varName.c_str(), value.c_str());
     return 0;
 }
 
@@ -458,13 +458,8 @@
 		else
 			str = GetStrValue(TW_EXTERNAL_PATH);
 
-		string dev_id;
-
-		GetValue("device_id", dev_id);
-		str += "/TWRP/BACKUPS/";
-		str += dev_id;
-
-		SetValue(TW_BACKUPS_FOLDER_VAR, str);
+		SetValue("tw_storage_path", str);
+		SetBackupFolder();
 	}
     return SetValue(varName, valStr.str(), persist);;
 }
@@ -501,13 +496,38 @@
 void DataManager::SetBackupFolder()
 {
 	string str = GetCurrentStoragePath();
+	TWPartition* partition = PartitionManager.Find_Partition_By_Path(str);
 	str += "/TWRP/BACKUPS/";
 
 	string dev_id;
 	GetValue("device_id", dev_id);
 
     str += dev_id;
+	LOGI("Backup folder set to '%s'\n", str.c_str());
 	SetValue(TW_BACKUPS_FOLDER_VAR, str, 0);
+	if (partition != NULL) {
+		SetValue("tw_storage_display_name", partition->Storage_Name);
+		char free_space[255];
+		sprintf(free_space, "%llu", partition->Free / 1024 / 1024);
+		SetValue("tw_storage_free_size", free_space);
+		string zip_path, zip_root, storage_path;
+		GetValue(TW_ZIP_LOCATION_VAR, zip_path);
+		if (partition->Has_Data_Media)
+			storage_path = partition->Symlink_Mount_Point;
+		else
+			storage_path = partition->Storage_Path;
+		if (zip_path.size() < storage_path.size()) {
+			SetValue(TW_ZIP_LOCATION_VAR, storage_path);
+		} else {
+			zip_root= zip_path;
+			zip_root.resize(storage_path.size() + 1);
+			if (zip_root != storage_path)
+				SetValue(TW_ZIP_LOCATION_VAR, storage_path);
+		}
+	} else {
+		if (PartitionManager.Fstab_Processed() != 0)
+			LOGE("Storage partition '%s' not found\n", str.c_str());
+	}
 }
 
 void DataManager::SetDefaultValues()
@@ -522,6 +542,7 @@
     mConstValues.insert(make_pair("false", "0"));
 
     mConstValues.insert(make_pair(TW_VERSION_VAR, TW_VERSION_STR));
+	mValues.insert(make_pair("tw_storage_path", make_pair("/", 1)));
 
 #ifdef TW_FORCE_CPUINFO_FOR_DEVICE_ID
 	printf("TW_FORCE_CPUINFO_FOR_DEVICE_ID := true\n");
@@ -788,7 +809,12 @@
 	mConstValues.insert(make_pair(TW_SDEXT_DISABLE_EXT4, "0"));
 #endif
 
-    mConstValues.insert(make_pair(TW_MIN_SYSTEM_VAR, TW_MIN_SYSTEM_SIZE));
+#ifdef TW_HAS_NO_BOOT_PARTITION
+	mValues.insert(make_pair("tw_backup_list", make_pair("/system;/data;", 0)));
+#else
+	mValues.insert(make_pair("tw_backup_list", make_pair("/system;/data;/boot;", 0)));
+#endif
+	mConstValues.insert(make_pair(TW_MIN_SYSTEM_VAR, TW_MIN_SYSTEM_SIZE));
 	mValues.insert(make_pair(TW_BACKUP_NAME, make_pair("(Current Date)", 0)));
 	mValues.insert(make_pair(TW_BACKUP_SYSTEM_VAR, make_pair("1", 1)));
     mValues.insert(make_pair(TW_BACKUP_DATA_VAR, make_pair("1", 1)));
@@ -882,7 +908,7 @@
 		mConstValues.insert(make_pair("tw_has_brightnesss_file", "0"));
 	}
 #endif
-	mValues.insert(make_pair(TW_MILITARY_TIME, make_pair("0", 0)));
+	mValues.insert(make_pair(TW_MILITARY_TIME, make_pair("0", 1)));
 }
 
 // Magic Values
@@ -1018,7 +1044,7 @@
 	{
 		usleep(500000);
 		if (!PartitionManager.Mount_Settings_Storage(false))
-			LOGE("Unable to mount %s when trying to read settings file.\n", DataManager_GetSettingsStorageMount());
+			LOGE("Unable to mount %s when trying to read settings file.\n", settings_file);
 	}
 
 	mkdir(mkdir_path, 0777);
@@ -1063,86 +1089,22 @@
 
 string DataManager::GetCurrentStoragePath(void)
 {
-	if (GetIntValue(TW_HAS_DUAL_STORAGE) == 1) {
-		if (GetIntValue(TW_USE_EXTERNAL_STORAGE) == 0)
-			return GetStrValue(TW_INTERNAL_PATH);
-		else
-			return GetStrValue(TW_EXTERNAL_PATH);
-	} else if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetStrValue(TW_INTERNAL_PATH);
-	else
-		return GetStrValue(TW_EXTERNAL_PATH);
+	return GetStrValue("tw_storage_path");
 }
 
 string& DataManager::CGetCurrentStoragePath()
 {
-	if (GetIntValue(TW_HAS_DUAL_STORAGE) == 1) {
-		if (GetIntValue(TW_USE_EXTERNAL_STORAGE) == 0)
-			return GetValueRef(TW_INTERNAL_PATH);
-		else
-			return GetValueRef(TW_EXTERNAL_PATH);
-	} else if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetValueRef(TW_INTERNAL_PATH);
-	else
-		return GetValueRef(TW_EXTERNAL_PATH);
-}
-
-string DataManager::GetCurrentStorageMount(void)
-{
-	if (GetIntValue(TW_HAS_DUAL_STORAGE) == 1) {
-		if (GetIntValue(TW_USE_EXTERNAL_STORAGE) == 0)
-			return GetStrValue(TW_INTERNAL_MOUNT);
-		else
-			return GetStrValue(TW_EXTERNAL_MOUNT);
-	} else if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetStrValue(TW_INTERNAL_MOUNT);
-	else
-		return GetStrValue(TW_EXTERNAL_MOUNT);
-}
-
-string& DataManager::CGetCurrentStorageMount()
-{
-	if (GetIntValue(TW_HAS_DUAL_STORAGE) == 1) {
-		if (GetIntValue(TW_USE_EXTERNAL_STORAGE) == 0)
-			return GetValueRef(TW_INTERNAL_MOUNT);
-		else
-			return GetValueRef(TW_EXTERNAL_MOUNT);
-	} else if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetValueRef(TW_INTERNAL_MOUNT);
-	else
-		return GetValueRef(TW_EXTERNAL_MOUNT);
+	return GetValueRef("tw_storage_path");
 }
 
 string DataManager::GetSettingsStoragePath(void)
 {
-	if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetStrValue(TW_INTERNAL_PATH);
-	else
-		return GetStrValue(TW_EXTERNAL_PATH);
+	return GetStrValue("tw_settings_path");
 }
 
 string& DataManager::CGetSettingsStoragePath()
 {
-	if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetValueRef(TW_INTERNAL_PATH);
-	else
-		return GetValueRef(TW_EXTERNAL_PATH);
-}
-
-string DataManager::GetSettingsStorageMount(void)
-{
-	if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetStrValue(TW_INTERNAL_MOUNT);
-	else
-		return GetStrValue(TW_EXTERNAL_MOUNT);
-}
-
-string& DataManager::CGetSettingsStorageMount()
-{
-	if (GetIntValue(TW_HAS_INTERNAL) == 1)
-		return GetValueRef(TW_INTERNAL_MOUNT);
-	else
-		return GetValueRef(TW_EXTERNAL_MOUNT);
+	return GetValueRef("tw_settings_path");
 }
 
 extern "C" int DataManager_ResetDefaults()
@@ -1194,18 +1156,6 @@
     return str.c_str();
 }
 
-extern "C" const char* DataManager_GetCurrentStorageMount(void)
-{
-    string& str = DataManager::CGetCurrentStorageMount();
-    return str.c_str();
-}
-
-extern "C" const char* DataManager_GetSettingsStorageMount(void)
-{
-    string& str = DataManager::CGetSettingsStorageMount();
-    return str.c_str();
-}
-
 extern "C" int DataManager_GetIntValue(const char* varName)
 {
     return DataManager::GetIntValue(varName);