Merge "Add a new utility to check the incompatible charger state"
This commit is contained in:
@@ -23,6 +23,9 @@ import android.graphics.ColorFilter;
|
||||
import android.graphics.ColorMatrix;
|
||||
import android.graphics.ColorMatrixColorFilter;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.hardware.usb.UsbPort;
|
||||
import android.hardware.usb.UsbPortStatus;
|
||||
import android.location.LocationManager;
|
||||
import android.media.AudioManager;
|
||||
import android.net.NetworkCapabilities;
|
||||
@@ -40,6 +43,7 @@ import android.telephony.AccessNetworkConstants;
|
||||
import android.telephony.NetworkRegistrationInfo;
|
||||
import android.telephony.ServiceState;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
@@ -55,6 +59,7 @@ import com.android.settingslib.fuelgauge.BatteryStatus;
|
||||
import com.android.settingslib.utils.BuildCompatUtils;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.util.List;
|
||||
|
||||
public class Utils {
|
||||
|
||||
@@ -638,4 +643,31 @@ public class Utils {
|
||||
(VcnTransportInfo) networkCapabilities.getTransportInfo();
|
||||
return vcnTransportInfo.getWifiInfo();
|
||||
}
|
||||
|
||||
/** Whether there is any incompatible chargers in the current UsbPort? */
|
||||
public static boolean containsIncompatibleChargers(Context context, String tag) {
|
||||
final List<UsbPort> usbPortList =
|
||||
context.getSystemService(UsbManager.class).getPorts();
|
||||
if (usbPortList == null || usbPortList.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
for (UsbPort usbPort : usbPortList) {
|
||||
Log.d(tag, "usbPort: " + usbPort);
|
||||
final UsbPortStatus usbStatus = usbPort.getStatus();
|
||||
if (usbStatus == null || !usbStatus.isConnected()) {
|
||||
continue;
|
||||
}
|
||||
final int[] complianceWarnings = usbStatus.getComplianceWarnings();
|
||||
if (complianceWarnings == null || complianceWarnings.length == 0) {
|
||||
continue;
|
||||
}
|
||||
for (int complianceWarningType : complianceWarnings) {
|
||||
if (complianceWarningType != 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@ import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.hardware.usb.UsbPort;
|
||||
import android.hardware.usb.UsbPortStatus;
|
||||
import android.location.LocationManager;
|
||||
import android.media.AudioManager;
|
||||
import android.os.BatteryManager;
|
||||
@@ -53,7 +56,9 @@ import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.shadows.ShadowSettings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@@ -74,12 +79,19 @@ public class UtilsTest {
|
||||
private ServiceState mServiceState;
|
||||
@Mock
|
||||
private NetworkRegistrationInfo mNetworkRegistrationInfo;
|
||||
@Mock
|
||||
private UsbPort mUsbPort;
|
||||
@Mock
|
||||
private UsbManager mUsbManager;
|
||||
@Mock
|
||||
private UsbPortStatus mUsbPortStatus;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
|
||||
when(mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager);
|
||||
ShadowSecure.reset();
|
||||
mAudioManager = mContext.getSystemService(AudioManager.class);
|
||||
}
|
||||
@@ -411,4 +423,50 @@ public class UtilsTest {
|
||||
assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ true)).isEqualTo(
|
||||
resources.getString(R.string.battery_info_status_charging));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void containsIncompatibleChargers_nullPorts_returnFalse() {
|
||||
when(mUsbManager.getPorts()).thenReturn(null);
|
||||
assertThat(Utils.containsIncompatibleChargers(mContext, "tag")).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void containsIncompatibleChargers_emptyPorts_returnFalse() {
|
||||
when(mUsbManager.getPorts()).thenReturn(new ArrayList<>());
|
||||
assertThat(Utils.containsIncompatibleChargers(mContext, "tag")).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void containsIncompatibleChargers_nullPortStatus_returnFalse() {
|
||||
final List<UsbPort> usbPorts = new ArrayList<>();
|
||||
usbPorts.add(mUsbPort);
|
||||
when(mUsbManager.getPorts()).thenReturn(usbPorts);
|
||||
when(mUsbPort.getStatus()).thenReturn(null);
|
||||
|
||||
assertThat(Utils.containsIncompatibleChargers(mContext, "tag")).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void containsIncompatibleChargers_returnTrue() {
|
||||
final List<UsbPort> usbPorts = new ArrayList<>();
|
||||
usbPorts.add(mUsbPort);
|
||||
when(mUsbManager.getPorts()).thenReturn(usbPorts);
|
||||
when(mUsbPort.getStatus()).thenReturn(mUsbPortStatus);
|
||||
when(mUsbPortStatus.isConnected()).thenReturn(true);
|
||||
when(mUsbPortStatus.getComplianceWarnings()).thenReturn(new int[]{1});
|
||||
|
||||
assertThat(Utils.containsIncompatibleChargers(mContext, "tag")).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void containsIncompatibleChargers_emptyComplianceWarnings_returnFalse() {
|
||||
final List<UsbPort> usbPorts = new ArrayList<>();
|
||||
usbPorts.add(mUsbPort);
|
||||
when(mUsbManager.getPorts()).thenReturn(usbPorts);
|
||||
when(mUsbPort.getStatus()).thenReturn(mUsbPortStatus);
|
||||
when(mUsbPortStatus.isConnected()).thenReturn(true);
|
||||
when(mUsbPortStatus.getComplianceWarnings()).thenReturn(new int[1]);
|
||||
|
||||
assertThat(Utils.containsIncompatibleChargers(mContext, "tag")).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user