Support for '--special_update_package' command from boot message For example realmeUI 2.0 using this command for boot message to install OTA packages --special_update_package=/data/ota_package/OTA/.otaPackage/system_vendor_19720.1.3.202108120000042554318_patch Change-Id: I7d1a49a3e05a439d4c96717c1700dd063f4e55c4
98 lines
3.6 KiB
C++
Executable File
98 lines
3.6 KiB
C++
Executable File
/*
|
|
Copyright 2012-2021 TeamWin
|
|
This file is part of TWRP/TeamWin Recovery Project.
|
|
|
|
TWRP is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
TWRP is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with TWRP. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "startupArgs.hpp"
|
|
|
|
void startupArgs::parse(int *argc, char ***argv) {
|
|
std::vector<std::string> args = args::get_args(argc, argv);
|
|
int index;
|
|
|
|
LOGINFO("Startup Commands: ");
|
|
for (index = 1; index < args.size(); index++) {
|
|
if (!processRecoveryArgs(args, index))
|
|
break;
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
bool startupArgs::processRecoveryArgs(std::vector<std::string> args, int index) {
|
|
if (args[index].find(RESCUE_PARTY) != std::string::npos) {
|
|
gui_print("\n\n");
|
|
gui_msg(Msg(msg::kError, "rescue_party0=Android Rescue Party trigger! Possible solutions? Either:"));
|
|
gui_msg(Msg(msg::kError, "rescue_party1= 1. Wipe caches, and/or"));
|
|
gui_msg(Msg(msg::kError, "rescue_party2= 2. Format data, and/or"));
|
|
gui_msg(Msg(msg::kError, "rescue_party3= 3. Clean-flash your ROM."));
|
|
gui_print(" \n");
|
|
gui_msg(Msg(msg::kError, "rescue_party4=The reported problem is:"));
|
|
gui_print_color("error", " '%s'\n\n", args[index+1].c_str());
|
|
} else
|
|
printf("'%s'", args[index].c_str());
|
|
if (args[index] == FASTBOOT) {
|
|
fastboot_mode = true;
|
|
android::base::SetProperty("sys.usb.config", "none");
|
|
android::base::SetProperty("sys.usb.configfs", "0");
|
|
sleep(1);
|
|
android::base::SetProperty("sys.usb.configfs", "1");
|
|
android::base::SetProperty("sys.usb.config", "fastboot");
|
|
DataManager::SetValue("tw_enable_adb", 0);
|
|
DataManager::SetValue("tw_enable_fastboot", 1);
|
|
} else if (args[index].find(UPDATE_PACKAGE) != std::string::npos || args[index].find(SPECIAL_UPDATE_PACKAGE) != std::string::npos) {
|
|
std::string::size_type eq_pos = args[index].find("=");
|
|
std::string arg = args[index].substr(eq_pos + 1, args[index].size());
|
|
if (arg.size() == 0) {
|
|
LOGERR("argument error specifying zip file\n");
|
|
} else {
|
|
std::string ORSCommand = "install " + arg;
|
|
SkipDecryption = arg.find("@") == 1;
|
|
if (!OpenRecoveryScript::Insert_ORS_Command(ORSCommand))
|
|
return false;
|
|
}
|
|
} else if (args[index].find(SEND_INTENT) != std::string::npos) {
|
|
std::string::size_type eq_pos = args[index].find("=");
|
|
std::string arg = args[index].substr(eq_pos + 1, args[index].size());
|
|
if (arg.size() == 0) {
|
|
LOGERR("argument error specifying intent file\n");
|
|
} else {
|
|
Send_Intent = arg;
|
|
}
|
|
} else if (args[index].find(WIPE_DATA) != std::string::npos) {
|
|
if (!OpenRecoveryScript::Insert_ORS_Command("wipe data\n"))
|
|
return false;
|
|
} else if (args[index].find(WIPE_CACHE) != std::string::npos) {
|
|
if (!OpenRecoveryScript::Insert_ORS_Command("wipe cache\n"))
|
|
return false;
|
|
} else if (args[index].find(NANDROID) != std::string::npos) {
|
|
DataManager::SetValue(TW_BACKUP_NAME, gui_parse_text("{@auto_generate}"));
|
|
if (!OpenRecoveryScript::Insert_ORS_Command("backup BSDCAE\n"))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool startupArgs::Should_Skip_Decryption() {
|
|
return SkipDecryption;
|
|
}
|
|
|
|
std::string startupArgs::Get_Intent() {
|
|
return Send_Intent;
|
|
}
|
|
|
|
bool startupArgs::Get_Fastboot_Mode() {
|
|
return fastboot_mode;
|
|
}
|