Set data/recovery for Settings: complementary code
After https://gerrit.twrp.me/c/android_bootable_recovery/+/5670 some functions were not working properly, such as change TWRP folder and custom themes.
Signed-off-by: Fernando Oliveira <fernandoaju78@gmail.com>
Change-Id: Ifaa777e528a6ca68e628d1719ba6d232851d338d
(cherry picked from commit 25062d7904430cdb83e4b4eaf6db38715da88e49)
diff --git a/gui/action.cpp b/gui/action.cpp
index bbc71cb..ad41ece 100755
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -34,6 +34,7 @@
#include <dirent.h>
#include <private/android_filesystem_config.h>
#include <android-base/properties.h>
+#include <fstream>
#include <string>
#include <sstream>
@@ -2345,6 +2346,10 @@
if (ret) {
DataManager::SetValue(TW_RECOVERY_FOLDER_VAR, '/' + arg);
DataManager::SetValue(TW_BACKUPS_FOLDER_VAR, newBackupFolder);
+ //Creates an empty file that marks which folder is TWRP with the renamed new name, after reboot.
+ string path= newFolder + "/.twrpcf";
+ std::ofstream twrpcf(path);
+ twrpcf.close();
}
operation_end((int)!ret);
return 0;
diff --git a/gui/gui.cpp b/gui/gui.cpp
index 5c7d27e..bb80632 100755
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -799,7 +799,7 @@
{
std::string theme_path;
- theme_path = DataManager::GetSettingsStoragePath();
+ theme_path = DataManager::GetCurrentStoragePath();
if (!PartitionManager.Mount_Settings_Storage(false))
{
int retry_count = 5;
@@ -849,7 +849,7 @@
return -1;
}
- std::string theme_path = DataManager::GetSettingsStoragePath();
+ std::string theme_path = DataManager::GetCurrentStoragePath();
theme_path += TWFunc::Check_For_TwrpFolder() + "/theme/ui.zip";
// Check for a custom theme
if (TWFunc::Path_Exists(theme_path)) {
diff --git a/gui/pages.cpp b/gui/pages.cpp
index 8b9ce46..23d8e56 100755
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -1505,7 +1505,7 @@
return 0;
mReloadTheme = false;
- theme_path = DataManager::GetSettingsStoragePath();
+ theme_path = DataManager::GetCurrentStoragePath();
if (PartitionManager.Mount_By_Path(theme_path.c_str(), 1) < 0) {
LOGERR("Unable to mount %s during gui_reload_theme function.\n", theme_path.c_str());
ret_val = 1;
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 0b77907..f6eeeca 100755
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -2985,6 +2985,8 @@
}
}
+ //Devices without encryption do not run the Post_Decrypt function so the "data/recovery" folder was not being created on these devices
+ DataManager::SetValue("tw_settings_path", TW_STORAGE_PATH);
LOGINFO("Decrypt adopted storage starting\n");
char* xmlFile = PageManager::LoadFileToBuffer(path, NULL);
xml_document<> *doc = NULL;
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index c19494e..db87b3d 100755
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -1439,7 +1439,7 @@
type = Get_D_Type_From_Stat(fullPath);
}
- if (type == DT_DIR && Path_Exists(fullPath + '/' + TW_SETTINGS_FILE)) {
+ if (type == DT_DIR && Path_Exists(fullPath + "/.twrpcf")) {
if ('/' + name == TW_DEFAULT_RECOVERY_FOLDER) {
oldFolder = name;
} else {
@@ -1452,6 +1452,9 @@
if (oldFolder == "" && customTWRPFolders.empty()) {
LOGINFO("No recovery folder found. Using default folder.\n");
+ //Creates the TWRP folder if it does not exist on the device and if the folder has not been changed to a new name
+ mainPath += TW_DEFAULT_RECOVERY_FOLDER;
+ mkdir(mainPath.c_str(), 0777);
goto exit;
} else if (customTWRPFolders.empty()) {
LOGINFO("No custom recovery folder found. Using TWRP as default.\n");