Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06276e4c authored by Hongyi Zhang's avatar Hongyi Zhang Committed by Automerger Merge Worker
Browse files

Merge "Start rebootPromptAndWipeUserData from a separate thread in...

Merge "Start rebootPromptAndWipeUserData from a separate thread in RescueParty" into rvc-dev am: 43b1edcd

Change-Id: If1535d2e4e36dcbc55a6a236e04598f15ea94838
parents 4ca5e9cf 43b1edcd
Loading
Loading
Loading
Loading
+22 −5
Original line number Original line Diff line number Diff line
@@ -253,10 +253,7 @@ public class RescueParty {
            logCriticalInfo(Log.DEBUG,
            logCriticalInfo(Log.DEBUG,
                    "Finished rescue level " + levelToString(level));
                    "Finished rescue level " + levelToString(level));
        } catch (Throwable t) {
        } catch (Throwable t) {
            final String msg = ExceptionUtils.getCompleteMessage(t);
            logRescueException(level, t);
            EventLogTags.writeRescueFailure(level, msg);
            logCriticalInfo(Log.ERROR,
                    "Failed rescue level " + levelToString(level) + ": " + msg);
        }
        }
    }
    }


@@ -274,11 +271,31 @@ public class RescueParty {
                resetAllSettings(context, Settings.RESET_MODE_TRUSTED_DEFAULTS, failedPackage);
                resetAllSettings(context, Settings.RESET_MODE_TRUSTED_DEFAULTS, failedPackage);
                break;
                break;
            case LEVEL_FACTORY_RESET:
            case LEVEL_FACTORY_RESET:
                // Request the reboot from a separate thread to avoid deadlock on PackageWatchdog
                // when device shutting down.
                Runnable runnable = new Runnable() {
                    @Override
                    public void run() {
                        try {
                            RecoverySystem.rebootPromptAndWipeUserData(context, TAG);
                            RecoverySystem.rebootPromptAndWipeUserData(context, TAG);
                        } catch (Throwable t) {
                            logRescueException(level, t);
                        }
                    }
                };
                Thread thread = new Thread(runnable);
                thread.start();
                break;
                break;
        }
        }
    }
    }


    private static void logRescueException(int level, Throwable t) {
        final String msg = ExceptionUtils.getCompleteMessage(t);
        EventLogTags.writeRescueFailure(level, msg);
        logCriticalInfo(Log.ERROR,
                "Failed rescue level " + levelToString(level) + ": " + msg);
    }

    private static int mapRescueLevelToUserImpact(int rescueLevel) {
    private static int mapRescueLevelToUserImpact(int rescueLevel) {
        switch(rescueLevel) {
        switch(rescueLevel) {
            case LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS:
            case LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS: