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

Commit cdee83a6 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Disable RescueParty in debug/lab environments.

We need to strike a balance between rescuing devices of real users
in the field, while also not interfering with debugging or testing
use-cases.

This change uses "charging via USB" as a signal that the device is
under active development, or is in a lab environment.  We could try
checking for an adb connection, but UsbDebuggingManager isn't
started until much later in the boot, so BatteryManager is our best
chance of detecting this case.

Note that we continue to always recover "user" builds, and we never
recover "eng" builds.

Test: builds, boots, skips when plugged in over USB
Bug: 34722552
Change-Id: Ib095482a2ed84e8c5dfb3c71d5f9b88457c2b5e6
parent 9e77aefe
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -883,8 +883,11 @@ public class Build {
            SystemProperties.getInt("ro.debuggable", 0) == 1;

    /** {@hide} */
    public static final boolean IS_ENG =
            "eng".equals(getString("ro.build.type"));
    public static final boolean IS_ENG = "eng".equals(TYPE);
    /** {@hide} */
    public static final boolean IS_USERDEBUG = "userdebug".equals(TYPE);
    /** {@hide} */
    public static final boolean IS_USER = "user".equals(TYPE);

    /**
     * Whether this build is running inside a container.
+21 −1
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.server;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.UserInfo;
import android.os.BatteryManager;
import android.os.BatteryManagerInternal;
import android.os.Build;
import android.os.RecoverySystem;
import android.os.SystemClock;
@@ -65,7 +67,25 @@ public class RescueParty {
    private static SparseArray<Threshold> sApps = new SparseArray<>();

    private static boolean isDisabled() {
        return Build.IS_ENG || SystemProperties.getBoolean(PROP_DISABLE_RESCUE, false);
        // We're disabled on all engineering devices
        if (Build.IS_ENG) return true;

        // We're disabled on userdebug devices connected over USB, since that's
        // a decent signal that someone is actively trying to debug the device,
        // or that it's in a lab environment.
        if (Build.IS_USERDEBUG) {
            try {
                if (LocalServices.getService(BatteryManagerInternal.class)
                        .getPlugType() == BatteryManager.BATTERY_PLUGGED_USB) {
                    return true;
                } else {
                }
            } catch (Throwable ignored) {
            }
        }

        // One last-ditch check
        return SystemProperties.getBoolean(PROP_DISABLE_RESCUE, false);
    }

    /**