Tweak MTP startup routine

* As a precaution, (non-permanently) disable MTP if TWRP crashes.
* Remove a duplicate logging of 'Starting MTP'.
* Combine and improve readability of conditions before MTP starts.
* Remove unnecessary Disable_MTP() call if conditions unsatisfied.

Change-Id: I61ac772fc123da5b84c3061fbcf2116531bc4e2f
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index ea8693f..908730e 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -2081,8 +2081,6 @@
 		gui_err("mtp_already_enabled=MTP already enabled");
 		return true;
 	}
-	//Launch MTP Responder
-	LOGINFO("Starting MTP\n");
 
 	int mtppipe[2];
 
@@ -2105,7 +2103,7 @@
 		TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr);
 		property_set("sys.usb.config", "mtp,adb");
 	}
-	/* To enable MTP debug, use the twrp command line feature to
+	/* To enable MTP debug, use the twrp command line feature:
 	 * twrp set tw_mtp_debug 1
 	 */
 	twrpMtp *mtp = new twrpMtp(DataManager::GetIntValue("tw_mtp_debug"));
diff --git a/twrp.cpp b/twrp.cpp
index 9ea6ba6..977fea2 100644
--- a/twrp.cpp
+++ b/twrp.cpp
@@ -303,25 +303,25 @@
 	}
 
 #ifdef TW_HAS_MTP
-	// Enable MTP?
 	char mtp_crash_check[PROPERTY_VALUE_MAX];
 	property_get("mtp.crash_check", mtp_crash_check, "0");
-	if (strcmp(mtp_crash_check, "0") == 0) {
+	if (DataManager::GetIntValue("tw_mtp_enabled")
+			&& !strcmp(mtp_crash_check, "0") && !crash_counter
+			&& (!DataManager::GetIntValue(TW_IS_ENCRYPTED) || DataManager::GetIntValue(TW_IS_DECRYPTED))) {
 		property_set("mtp.crash_check", "1");
-		if (DataManager::GetIntValue("tw_mtp_enabled") == 1 && ((DataManager::GetIntValue(TW_IS_ENCRYPTED) != 0 && DataManager::GetIntValue(TW_IS_DECRYPTED) != 0) || DataManager::GetIntValue(TW_IS_ENCRYPTED) == 0)) {
-			LOGINFO("Enabling MTP during startup\n");
-			if (!PartitionManager.Enable_MTP())
-				PartitionManager.Disable_MTP();
-			else
-				gui_msg("mtp_enabled=MTP Enabled");
-		} else {
+		LOGINFO("Starting MTP\n");
+		if (!PartitionManager.Enable_MTP())
 			PartitionManager.Disable_MTP();
-		}
+		else
+			gui_msg("mtp_enabled=MTP Enabled");
 		property_set("mtp.crash_check", "0");
-	} else {
+	} else if (strcmp(mtp_crash_check, "0")) {
 		gui_warn("mtp_crash=MTP Crashed, not starting MTP on boot.");
 		DataManager::SetValue("tw_mtp_enabled", 0);
 		PartitionManager.Disable_MTP();
+	} else if (crash_counter == 1) {
+		LOGINFO("TWRP crashed; disabling MTP as a precaution.\n");
+		PartitionManager.Disable_MTP();
 	}
 #endif