Treat /vendor like /system for read only

The vendor partition is verity checked just like system so we
should treat vendor as read only same as system.

Change-Id: Ida65c9f44d8610e52fcdcef0b4a50faf5c7110d2
diff --git a/gui/action.cpp b/gui/action.cpp
index aafcd2e..86907a5 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -1798,6 +1798,7 @@
 {
 	int op_status = 0;
 	bool remount_system = PartitionManager.Is_Mounted_By_Path("/system");
+	bool remount_vendor = PartitionManager.Is_Mounted_By_Path("/vendor");
 
 	operation_start("Toggle System Mount");
 	if (!PartitionManager.UnMount_By_Path("/system", true)) {
@@ -1819,6 +1820,20 @@
 		} else {
 			op_status = 1; // fail
 		}
+		Part = PartitionManager.Find_Partition_By_Path("/vendor");
+		if (Part) {
+			if (arg == "0") {
+				Part->Change_Mount_Read_Only(false);
+			} else {
+				Part->Change_Mount_Read_Only(true);
+			}
+			if (remount_vendor) {
+				Part->Mount(true);
+			}
+			op_status = 0; // success
+		} else {
+			op_status = 1; // fail
+		}
 	}
 
 	operation_end(op_status);
diff --git a/partition.cpp b/partition.cpp
index 3f7b26c..e110ba7 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -354,6 +354,11 @@
 			Backup_Display_Name = Display_Name;
 			DataManager::SetValue("tw_boot_is_mountable", 1);
 			Can_Be_Backed_Up = true;
+		} else if (Mount_Point == "/vendor") {
+			Display_Name = "Vendor";
+			Backup_Display_Name = Display_Name;
+			Storage_Name = Display_Name;
+			Mount_Read_Only = true;
 		}
 #ifdef TW_EXTERNAL_STORAGE_PATH
 		if (Mount_Point == EXPAND(TW_EXTERNAL_STORAGE_PATH)) {
@@ -399,6 +404,11 @@
 			Backup_Display_Name = Display_Name;
 			Can_Flash_Img = false;
 			Can_Be_Backed_Up = true;
+		} else if (Mount_Point == "/vendor_image") {
+			Display_Name = "Vendor Image";
+			Backup_Display_Name = Display_Name;
+			Can_Flash_Img = false;
+			Can_Be_Backed_Up = true;
 		}
 	}
 
diff --git a/twrp.cpp b/twrp.cpp
index 50db725..ff7d55f 100644
--- a/twrp.cpp
+++ b/twrp.cpp
@@ -345,6 +345,7 @@
 #ifndef TW_OEM_BUILD
 	// Check if system has never been changed
 	TWPartition* sys = PartitionManager.Find_Partition_By_Path("/system");
+	TWPartition* ven = PartitionManager.Find_Partition_By_Path("/vendor");
 	if (sys) {
 		if ((DataManager::GetIntValue("tw_mount_system_ro") == 0 && sys->Check_Lifetime_Writes() == 0) || DataManager::GetIntValue("tw_mount_system_ro") == 2) {
 			if (DataManager::GetIntValue("tw_never_show_system_ro_page") == 0) {
@@ -354,11 +355,15 @@
 				}
 			} else if (DataManager::GetIntValue("tw_mount_system_ro") == 0) {
 				sys->Change_Mount_Read_Only(false);
+				if (ven)
+					ven->Change_Mount_Read_Only(false);
 			}
 		} else if (DataManager::GetIntValue("tw_mount_system_ro") == 1) {
 			// Do nothing, user selected to leave system read only
 		} else {
 			sys->Change_Mount_Read_Only(false);
+			if (ven)
+				ven->Change_Mount_Read_Only(false);
 		}
 	}
 #endif