Fix ext storage and zip paths
Fix a bug with handling external storage during boot. Check zip root path when switching storage and ensure that the path is in the new storage path to prevent user confusion.
This commit is contained in:
@@ -840,11 +840,15 @@ void DataManager::ReadSettingsFile(void)
|
||||
GetValue(TW_HAS_EXTERNAL, has_ext);
|
||||
if (has_dual != 0 && use_ext == 1) {
|
||||
// Attempt to sdcard using external storage
|
||||
if (PartitionManager.Mount_Current_Storage(false)) {
|
||||
if (!PartitionManager.Mount_Current_Storage(false)) {
|
||||
LOGE("Failed to mount external storage, using internal storage.\n");
|
||||
// Remount failed, default back to internal storage
|
||||
SetValue(TW_USE_EXTERNAL_STORAGE, 0);
|
||||
PartitionManager.Mount_Current_Storage(true);
|
||||
string int_zip_path;
|
||||
GetValue(TW_ZIP_INTERNAL_VAR, int_zip_path);
|
||||
SetValue(TW_USE_EXTERNAL_STORAGE, 0);
|
||||
SetValue(TW_ZIP_LOCATION_VAR, int_zip_path);
|
||||
}
|
||||
} else {
|
||||
PartitionManager.Mount_Current_Storage(true);
|
||||
|
||||
@@ -43,6 +43,9 @@ endif
|
||||
ifneq ($(RECOVERY_SDCARD_ON_DATA),)
|
||||
LOCAL_CFLAGS += -DRECOVERY_SDCARD_ON_DATA
|
||||
endif
|
||||
ifneq ($(TW_EXTERNAL_STORAGE_PATH),)
|
||||
LOCAL_CFLAGS += -DTW_EXTERNAL_STORAGE_PATH=$(TW_EXTERNAL_STORAGE_PATH)
|
||||
endif
|
||||
|
||||
LOCAL_C_INCLUDES += bionic external/stlport/stlport $(commands_recovery_local_path)/gui/devices/$(DEVICE_RESOLUTION)
|
||||
|
||||
|
||||
@@ -540,11 +540,37 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */)
|
||||
}
|
||||
if (PartitionManager.Mount_Current_Storage(true)) {
|
||||
if (arg == "internal") {
|
||||
string zip_path, zip_root;
|
||||
DataManager::GetValue(TW_ZIP_INTERNAL_VAR, zip_path);
|
||||
zip_root = TWFunc::Get_Root_Path(zip_path);
|
||||
#ifdef RECOVERY_SDCARD_ON_DATA
|
||||
#ifndef TW_EXTERNAL_STORAGE_PATH
|
||||
if (zip_root != "/sdcard")
|
||||
DataManager::SetValue(TW_ZIP_INTERNAL_VAR, "/sdcard");
|
||||
#else
|
||||
if (strcmp(EXPAND(TW_EXTERNAL_STORAGE_PATH), "/sdcard") == 0) {
|
||||
if (zip_root != "/emmc")
|
||||
DataManager::SetValue(TW_ZIP_INTERNAL_VAR, "/emmc");
|
||||
} else {
|
||||
if (zip_root != "/sdcard")
|
||||
DataManager::SetValue(TW_ZIP_INTERNAL_VAR, "/sdcard");
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
if (zip_root != DataManager::GetCurrentStoragePath())
|
||||
DataManager::SetValue(TW_ZIP_LOCATION_VAR, DataManager::GetCurrentStoragePath());
|
||||
#endif
|
||||
// Save the current zip location to the external variable
|
||||
DataManager::SetValue(TW_ZIP_EXTERNAL_VAR, DataManager::GetStrValue(TW_ZIP_LOCATION_VAR));
|
||||
// Change the current zip location to the internal variable
|
||||
DataManager::SetValue(TW_ZIP_LOCATION_VAR, DataManager::GetStrValue(TW_ZIP_INTERNAL_VAR));
|
||||
} else if (arg == "external") {
|
||||
string zip_path, zip_root;
|
||||
DataManager::GetValue(TW_ZIP_EXTERNAL_VAR, zip_path);
|
||||
zip_root = TWFunc::Get_Root_Path(zip_path);
|
||||
if (zip_root != DataManager::GetCurrentStoragePath()) {
|
||||
DataManager::SetValue(TW_ZIP_EXTERNAL_VAR, DataManager::GetCurrentStoragePath());
|
||||
}
|
||||
// Save the current zip location to the internal variable
|
||||
DataManager::SetValue(TW_ZIP_INTERNAL_VAR, DataManager::GetStrValue(TW_ZIP_LOCATION_VAR));
|
||||
// Change the current zip location to the external variable
|
||||
|
||||
Reference in New Issue
Block a user