Loading services/core/java/com/android/server/RescueParty.java +6 −11 Original line number Diff line number Diff line Loading @@ -213,10 +213,10 @@ public class RescueParty { } /** * Get the current rescue level. * Get the next rescue level. This indicates the next level of mitigation that may be taken. */ private static int getRescueLevel() { return MathUtils.constrain(SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE), private static int getNextRescueLevel() { return MathUtils.constrain(SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); } Loading @@ -225,9 +225,7 @@ public class RescueParty { * probably want to call {@link #executeRescueLevel(Context, String)}. */ private static void incrementRescueLevel(int triggerUid) { final int level = MathUtils.constrain( SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); final int level = getNextRescueLevel(); SystemProperties.set(PROP_RESCUE_LEVEL, Integer.toString(level)); EventLogTags.writeRescueLevel(level, triggerUid); Loading Loading @@ -397,10 +395,7 @@ public class RescueParty { @FailureReasons int failureReason) { if (failureReason == PackageWatchdog.FAILURE_REASON_APP_CRASH || failureReason == PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING) { int rescueLevel = MathUtils.constrain( SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); return mapRescueLevelToUserImpact(rescueLevel); return mapRescueLevelToUserImpact(getNextRescueLevel()); } else { return PackageHealthObserverImpact.USER_IMPACT_NONE; } Loading Loading @@ -449,7 +444,7 @@ public class RescueParty { if (isDisabled()) { return PackageHealthObserverImpact.USER_IMPACT_NONE; } return mapRescueLevelToUserImpact(getRescueLevel()); return mapRescueLevelToUserImpact(getNextRescueLevel()); } @Override Loading services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,35 @@ public class RescuePartyTest { PackageHealthObserverImpact.USER_IMPACT_HIGH); } @Test public void testBootLoopLevels() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); /* Ensure that the returned user impact corresponds with the user impact of the next available rescue level, not the current one. */ SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_NONE)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_LOW); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_LOW); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( LEVEL_FACTORY_RESET)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); } @Test public void testRescueLevelIncrementsWhenExecuted() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading Loading
services/core/java/com/android/server/RescueParty.java +6 −11 Original line number Diff line number Diff line Loading @@ -213,10 +213,10 @@ public class RescueParty { } /** * Get the current rescue level. * Get the next rescue level. This indicates the next level of mitigation that may be taken. */ private static int getRescueLevel() { return MathUtils.constrain(SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE), private static int getNextRescueLevel() { return MathUtils.constrain(SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); } Loading @@ -225,9 +225,7 @@ public class RescueParty { * probably want to call {@link #executeRescueLevel(Context, String)}. */ private static void incrementRescueLevel(int triggerUid) { final int level = MathUtils.constrain( SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); final int level = getNextRescueLevel(); SystemProperties.set(PROP_RESCUE_LEVEL, Integer.toString(level)); EventLogTags.writeRescueLevel(level, triggerUid); Loading Loading @@ -397,10 +395,7 @@ public class RescueParty { @FailureReasons int failureReason) { if (failureReason == PackageWatchdog.FAILURE_REASON_APP_CRASH || failureReason == PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING) { int rescueLevel = MathUtils.constrain( SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1, LEVEL_NONE, LEVEL_FACTORY_RESET); return mapRescueLevelToUserImpact(rescueLevel); return mapRescueLevelToUserImpact(getNextRescueLevel()); } else { return PackageHealthObserverImpact.USER_IMPACT_NONE; } Loading Loading @@ -449,7 +444,7 @@ public class RescueParty { if (isDisabled()) { return PackageHealthObserverImpact.USER_IMPACT_NONE; } return mapRescueLevelToUserImpact(getRescueLevel()); return mapRescueLevelToUserImpact(getNextRescueLevel()); } @Override Loading
services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,35 @@ public class RescuePartyTest { PackageHealthObserverImpact.USER_IMPACT_HIGH); } @Test public void testBootLoopLevels() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); /* Ensure that the returned user impact corresponds with the user impact of the next available rescue level, not the current one. */ SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_NONE)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_LOW); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_LOW); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( RescueParty.LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); SystemProperties.set(RescueParty.PROP_RESCUE_LEVEL, Integer.toString( LEVEL_FACTORY_RESET)); assertEquals(observer.onBootLoop(), PackageHealthObserverImpact.USER_IMPACT_HIGH); } @Test public void testRescueLevelIncrementsWhenExecuted() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading