summaryrefslogtreecommitdiffstats
path: root/partition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'partition.cpp')
-rw-r--r--partition.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/partition.cpp b/partition.cpp
index b3c436f8b..b20367f77 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -153,6 +153,7 @@ TWPartition::TWPartition() {
Ignore_Blkid = false;
Retain_Layout_Version = false;
Crypto_Key_Location = "footer";
+ MTP_Storage_ID = 0;
}
TWPartition::~TWPartition(void) {
@@ -1028,7 +1029,7 @@ bool TWPartition::UnMount(bool Display_Error) {
return true; // Never unmount system if you're not supposed to unmount it
if (Is_Storage)
- TWFunc::Toggle_MTP(false);
+ PartitionManager.Remove_MTP_Storage(MTP_Storage_ID);
if (!Symlink_Mount_Point.empty())
umount(Symlink_Mount_Point.c_str());
@@ -1049,7 +1050,7 @@ bool TWPartition::UnMount(bool Display_Error) {
}
bool TWPartition::Wipe(string New_File_System) {
- bool wiped = false, update_crypt = false, recreate_media = true, mtp_toggle = true;
+ bool wiped = false, update_crypt = false, recreate_media = true;
int check;
string Layout_Filename = Mount_Point + "/.layout_version";
@@ -1069,7 +1070,6 @@ bool TWPartition::Wipe(string New_File_System) {
if (Has_Data_Media && Current_File_System == New_File_System) {
wiped = Wipe_Data_Without_Wiping_Media();
recreate_media = false;
- mtp_toggle = false;
} else {
DataManager::GetValue(TW_RM_RF_VAR, check);
@@ -1088,9 +1088,6 @@ bool TWPartition::Wipe(string New_File_System) {
else if (New_File_System == "f2fs")
wiped = Wipe_F2FS();
else {
- if (Is_Storage) {
- TWFunc::Toggle_MTP(true);
- }
LOGERR("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str());
unlink("/.layout_version");
return false;
@@ -1123,8 +1120,8 @@ bool TWPartition::Wipe(string New_File_System) {
Recreate_Media_Folder();
}
}
- if (Is_Storage && mtp_toggle) {
- TWFunc::Toggle_MTP(true);
+ if (Is_Storage) {
+ PartitionManager.Add_MTP_Storage(MTP_Storage_ID);
}
return wiped;
}
@@ -1377,20 +1374,22 @@ bool TWPartition::Wipe_Encryption() {
Is_Decrypted = false;
Is_Encrypted = false;
Find_Actual_Block_Device();
- bool mtp_was_enabled = TWFunc::Toggle_MTP(false);
if (Wipe(Fstab_File_System)) {
Has_Data_Media = Save_Data_Media;
if (Has_Data_Media && !Symlink_Mount_Point.empty()) {
Recreate_Media_Folder();
+ if (Mount(false))
+ PartitionManager.Add_MTP_Storage(MTP_Storage_ID);
}
#ifndef TW_OEM_BUILD
gui_print("You may need to reboot recovery to be able to use /data again.\n");
#endif
- TWFunc::Toggle_MTP(mtp_was_enabled);
return true;
} else {
Has_Data_Media = Save_Data_Media;
LOGERR("Unable to format to remove encryption.\n");
+ if (Has_Data_Media && Mount(false))
+ PartitionManager.Add_MTP_Storage(MTP_Storage_ID);
return false;
}
return false;
@@ -1599,10 +1598,13 @@ bool TWPartition::Wipe_MTD() {
}
bool TWPartition::Wipe_RMRF() {
- if (Is_Storage)
- TWFunc::Toggle_MTP(false);
if (!Mount(true))
return false;
+ // This is the only wipe that leaves the partition mounted, so we
+ // must manually remove the partition from MTP if it is a storage
+ // partition.
+ if (Is_Storage)
+ PartitionManager.Remove_MTP_Storage(MTP_Storage_ID);
gui_print("Removing all files under '%s'\n", Mount_Point.c_str());
TWFunc::removeDir(Mount_Point, true);