/* * Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com> * * This file is part of Kernel Adiutor. * * Kernel Adiutor 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. * * Kernel Adiutor 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 Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>. * */ package com.grarak.kerneladiutor.utils.tools; import android.os.Environment; import com.grarak.kerneladiutor.utils.Utils; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by willi on 08.07.16. */ public class Recovery { public enum RECOVERY { CWM, TWRP } public enum RECOVERY_COMMAND { WIPE_DATA, WIPE_CACHE, FLASH_ZIP } private final RECOVERY_COMMAND mRecovery_command; private final File mFile; public Recovery(RECOVERY_COMMAND recovery_command) { this(recovery_command, null); } public Recovery(RECOVERY_COMMAND recovery_command, File file) { mRecovery_command = recovery_command; mFile = file; } public String getFile(RECOVERY recovery) { return recovery == RECOVERY.TWRP ? "openrecoveryscript" : "extendedcommand"; } public List<String> getCommands(RECOVERY recovery) { RecoveryType recoveryType = recovery == RECOVERY.TWRP ? new TWRP() : new CWM(); switch (mRecovery_command) { case WIPE_DATA: return recoveryType.getWipeData(); case WIPE_CACHE: return recoveryType.getWipeCache(); case FLASH_ZIP: return recoveryType.getFlashZip(mFile); } return null; } private abstract class RecoveryType { public abstract List<String> getWipeData(); public abstract List<String> getWipeCache(); public abstract List<String> getFlashZip(File file); public abstract String getExternalPath(); public String formatFile(File file) { String zip = file.getAbsolutePath(); String internalStorage = Environment.getExternalStorageDirectory().toString(); if (zip.startsWith(internalStorage + "/")) { return zip.replace(internalStorage + "/", Utils.getInternalStorage() + "/"); } String externalStorage = Utils.getExternalStorage(); if (externalStorage != null && zip.startsWith(externalStorage + "/")) { return zip.replace(externalStorage + "/", getExternalPath() + "/"); } return zip; } } private class CWM extends RecoveryType { @Override public List<String> getWipeData() { List<String> commands = new ArrayList<>(); commands.add("format(\"/data\");"); commands.add("format(\"" + Utils.getInternalStorage() + "/.android_secure\");"); return commands; } @Override public List<String> getWipeCache() { List<String> commands = new ArrayList<>(); commands.add("format(\"/cache\");"); commands.add("format(\"/data/dalvik-cache\");"); commands.add("format(\"/cache/dalvik-cache\");"); commands.add("format(\"/sd-ext/dalvik-cache\");"); return commands; } @Override public List<String> getFlashZip(File file) { List<String> commands = new ArrayList<>(); commands.add("assert(install_zip(\"" + formatFile(file) + "\"));"); return commands; } @Override public String getExternalPath() { return "/storage/sdcard1"; } } private class TWRP extends RecoveryType { @Override public List<String> getWipeData() { List<String> commands = new ArrayList<>(); commands.add("wipe data"); return commands; } @Override public List<String> getWipeCache() { List<String> commands = new ArrayList<>(); commands.add("wipe cache"); commands.add("wipe dalvik"); return commands; } @Override public List<String> getFlashZip(File file) { List<String> commands = new ArrayList<>(); commands.add("set tw_signed_zip_verify 0"); commands.add("install " + formatFile(file)); return commands; } @Override public String getExternalPath() { return "/external_sd"; } } }