Merge "Revert "RecoverySystem: Fix the issue in installPackage().""

This commit is contained in:
Tao Bao
2017-01-19 01:47:09 +00:00
committed by Gerrit Code Review
3 changed files with 13 additions and 11 deletions

View File

@@ -25,5 +25,5 @@ interface IRecoverySystem {
boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener); boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener);
boolean setupBcb(in String command); boolean setupBcb(in String command);
boolean clearBcb(); boolean clearBcb();
void rebootRecoveryWithCommand(in String command, in boolean update); void rebootRecoveryWithCommand(in String command);
} }

View File

@@ -491,10 +491,15 @@ public class RecoverySystem {
command += securityArg; command += securityArg;
} }
// RECOVERY_SERVICE writes to BCB (bootloader control block) and triggers the reboot.
RecoverySystem rs = (RecoverySystem) context.getSystemService( RecoverySystem rs = (RecoverySystem) context.getSystemService(
Context.RECOVERY_SERVICE); Context.RECOVERY_SERVICE);
rs.rebootRecoveryWithCommand(command, true /* update */); if (!rs.setupBcb(command)) {
throw new IOException("Setup BCB failed");
}
// Having set up the BCB (bootloader control block), go ahead and reboot
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
pm.reboot(PowerManager.REBOOT_RECOVERY_UPDATE);
throw new IOException("Reboot failed (no permissions?)"); throw new IOException("Reboot failed (no permissions?)");
} }
@@ -708,7 +713,7 @@ public class RecoverySystem {
// Write the command into BCB (bootloader control block) and boot from // Write the command into BCB (bootloader control block) and boot from
// there. Will not return unless failed. // there. Will not return unless failed.
RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE); RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE);
rs.rebootRecoveryWithCommand(command.toString(), false); rs.rebootRecoveryWithCommand(command.toString());
throw new IOException("Reboot failed (no permissions?)"); throw new IOException("Reboot failed (no permissions?)");
} }
@@ -908,9 +913,9 @@ public class RecoverySystem {
* Talks to RecoverySystemService via Binder to set up the BCB command and * Talks to RecoverySystemService via Binder to set up the BCB command and
* reboot into recovery accordingly. * reboot into recovery accordingly.
*/ */
private void rebootRecoveryWithCommand(String command, boolean update) { private void rebootRecoveryWithCommand(String command) {
try { try {
mService.rebootRecoveryWithCommand(command, update); mService.rebootRecoveryWithCommand(command);
} catch (RemoteException ignored) { } catch (RemoteException ignored) {
} }
} }

View File

@@ -181,7 +181,7 @@ public final class RecoverySystemService extends SystemService {
} }
@Override // Binder call @Override // Binder call
public void rebootRecoveryWithCommand(String command, boolean update) { public void rebootRecoveryWithCommand(String command) {
if (DEBUG) Slog.d(TAG, "rebootRecoveryWithCommand: [" + command + "]"); if (DEBUG) Slog.d(TAG, "rebootRecoveryWithCommand: [" + command + "]");
synchronized (sRequestLock) { synchronized (sRequestLock) {
if (!setupOrClearBcb(true, command)) { if (!setupOrClearBcb(true, command)) {
@@ -190,10 +190,7 @@ public final class RecoverySystemService extends SystemService {
// Having set up the BCB, go ahead and reboot. // Having set up the BCB, go ahead and reboot.
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
// PowerManagerService may additionally request uncrypting the package when it's pm.reboot(PowerManager.REBOOT_RECOVERY);
// to install an update (REBOOT_RECOVERY_UPDATE).
pm.reboot(update ? PowerManager.REBOOT_RECOVERY_UPDATE :
PowerManager.REBOOT_RECOVERY);
} }
} }