diff options
| -rw-r--r-- | services/core/java/com/android/server/crashrecovery/CrashRecoveryHelper.java | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/crashrecovery/CrashRecoveryHelper.java b/services/core/java/com/android/server/crashrecovery/CrashRecoveryHelper.java index 133c79f81bb5..8e725465ddd6 100644 --- a/services/core/java/com/android/server/crashrecovery/CrashRecoveryHelper.java +++ b/services/core/java/com/android/server/crashrecovery/CrashRecoveryHelper.java @@ -24,6 +24,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.VersionedPackage; import android.net.ConnectivityModuleConnector; +import android.sysprop.CrashRecoveryProperties; import android.text.TextUtils; import android.util.Slog; @@ -35,7 +36,7 @@ import java.util.List; /** * Provides helper methods for the CrashRecovery APEX - * + * TODO: b/354112511 Add tests for this class when it is finalized. * @hide */ public final class CrashRecoveryHelper { @@ -76,11 +77,13 @@ public final class CrashRecoveryHelper { } /** - * Register health listeners for explicit package failures. - * Currently only registering for Connectivity Module health. - * @hide + * Register health listeners for Connectivity packages health. + * + * TODO: b/354112511 Have an internal method to trigger a rollback by reporting high severity errors, + * and rely on ActivityManager to inform the watchdog of severe network stack crashes + * instead of having this listener in parallel. */ - public void registerConnectivityModuleHealthListener(@NonNull int failureReason) { + public void registerConnectivityModuleHealthListener() { // register listener for ConnectivityModule mConnectivityModuleConnector.registerHealthListener( packageName -> { @@ -90,7 +93,7 @@ public final class CrashRecoveryHelper { return; } final List<VersionedPackage> pkgList = Collections.singletonList(pkg); - PackageWatchdog.getInstance(mContext).onPackageFailure(pkgList, failureReason); + PackageWatchdog.getInstance(mContext).onPackageFailure(pkgList, PackageWatchdog.FAILURE_REASON_EXPLICIT_HEALTH_CHECK); }); } @@ -126,4 +129,21 @@ public final class CrashRecoveryHelper { return pm.getPackageInfo(packageName, PackageManager.MATCH_APEX); } } + + /** + * Check if we're currently attempting to reboot for a factory reset. This method must + * return true if RescueParty tries to reboot early during a boot loop, since the device + * will not be fully booted at this time. + */ + public static boolean isRecoveryTriggeredReboot() { + return isFactoryResetPropertySet() || isRebootPropertySet(); + } + + static boolean isFactoryResetPropertySet() { + return CrashRecoveryProperties.attemptingFactoryReset().orElse(false); + } + + static boolean isRebootPropertySet() { + return CrashRecoveryProperties.attemptingReboot().orElse(false); + } } |