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

Commit 34fd9425 authored by Roy Luo's avatar Roy Luo
Browse files

Update incompatible charger checking rule

Look at COMPLIANCE_WARNING_INPUT_POWER_LIMITED instead of
COMPLIANCE_WARNING_OTHER to flag incompatible chargers. The underlying
logic that generates the warning remains the same, what's changed is
the enum that's being used.
The purpose of the change is to have a warning type that better
represents what actually happens and free up COMPLIANCE_WARNING_OTHER
that was intended to act as a fallback reason code.
The flag enable_input_power_limited_warning controls whether to switch
to the new enum, while the flag enable_usb_data_compliance_warning
controls the new enums that are added as FlaggedApi in the framework.
Both flags need to be on to enable the change.

Bug: 308700954
Test: make test RunSettingsLibRoboTests ROBOTEST_FILTER=com.android.settingslib.UtilsTest
Flag: ACONFIG enable_input_power_limited_warning DISABLED
Change-Id: I78b55b74059b93d5a64d77003909c91bd9de9290
parent 10614f64
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -6,3 +6,10 @@ flag {
    description: "Enable USB data compliance warnings when set"
    bug: "296119135"
}

flag {
    name: "enable_input_power_limited_warning"
    namespace: "system_sw_usb"
    description: "Flag incompatible charging on COMPLIANCE_WARNING_INPUT_POWER_LIMITED instead of COMPLIANCE_WARNING_OTHER when enabled"
    bug: "308700954"
}
+18 −6
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.drawable.Drawable;
import android.hardware.usb.flags.Flags;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus;
@@ -704,6 +705,16 @@ public class Utils {
                continue;
            }
            for (int complianceWarningType : complianceWarnings) {
                if (Flags.enableUsbDataComplianceWarning()
                        && Flags.enableInputPowerLimitedWarning()) {
                    switch (complianceWarningType) {
                        case UsbPortStatus.COMPLIANCE_WARNING_INPUT_POWER_LIMITED:
                        case UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY:
                            return true;
                        default:
                            break;
                    }
                } else {
                    switch (complianceWarningType) {
                        case UsbPortStatus.COMPLIANCE_WARNING_OTHER:
                        case UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY:
@@ -713,6 +724,7 @@ public class Utils {
                    }
                }
            }
        }
        return false;
    }

+37 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.hardware.usb.flags.Flags;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus;
@@ -36,6 +37,7 @@ import android.media.AudioManager;
import android.os.BatteryManager;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.NetworkRegistrationInfo;
@@ -44,6 +46,7 @@ import android.text.TextUtils;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatcher;
@@ -85,6 +88,8 @@ public class UtilsTest {
    @Mock
    private UsbPortStatus mUsbPortStatus;

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -425,8 +430,38 @@ public class UtilsTest {
    }

    @Test
    public void containsIncompatibleChargers_complianeWarningOther_returnTrue() {
    public void containsIncompatibleChargers_complianeWarningOther_returnTrue_flagDisabled() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING);
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING);
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_OTHER);

        assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isTrue();
    }

    @Test
    public void containsIncompatibleChargers_complianeWarningPower_returnFalse_flagDisabled() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING);
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING);
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_INPUT_POWER_LIMITED);

        assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse();
    }

    @Test
    public void containsIncompatibleChargers_complianeWarningOther_returnFalse_flagEnabled() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING);
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING);
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_OTHER);

        assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse();
    }

    @Test
    public void containsIncompatibleChargers_complianeWarningPower_returnTrue_flagEnabled() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING);
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING);
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_INPUT_POWER_LIMITED);

        assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isTrue();
    }

@@ -446,7 +481,6 @@ public class UtilsTest {
    public void containsIncompatibleChargers_emptyComplianceWarnings_returnFalse() {
        setupIncompatibleCharging();
        when(mUsbPortStatus.getComplianceWarnings()).thenReturn(new int[1]);

        assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse();
    }

@@ -476,7 +510,7 @@ public class UtilsTest {
    }

    private void setupIncompatibleCharging() {
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_OTHER);
        setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY);
    }

    private void setupIncompatibleCharging(int complianceWarningType) {
+1 −1
Original line number Diff line number Diff line
@@ -294,6 +294,6 @@ public class BatteryControllerTest extends SysuiTestCase {
        when(mUsbPort.supportsComplianceWarnings()).thenReturn(true);
        when(mUsbPortStatus.isConnected()).thenReturn(true);
        when(mUsbPortStatus.getComplianceWarnings())
                .thenReturn(new int[]{UsbPortStatus.COMPLIANCE_WARNING_OTHER});
                .thenReturn(new int[]{UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY});
    }
}