summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadhri Jagan Sridharan <Badhri@google.com>2017-02-13 13:14:40 -0800
committerBadhri Jagan Sridharan <Badhri@google.com>2017-02-13 17:44:05 -0800
commit8b0807c789b6c29ee71123c020b680636e9d7d85 (patch)
tree14e4cb32ee68700af0ee3a102855b422b44582b3
parent5de3e5ab36e5cd21deaab68be2a662a15aaf0053 (diff)
downloadbase-8b0807c789b6c29ee71123c020b680636e9d7d85.tar.gz
Fix handling usb dialog for wall chargers. [DO NOT MERGE]
UsbPort.POWER_ROLE_SINK is orthogonal to the type of the charger attached. POWER_ROLE_SINK would be the case for AC charging and USB charging. Therefore query BatteryManager for the charger type. Bug: 34972898 Test: Charging notification should not show for pixel-c chargers. Change-Id: I8dddcd7727b6af973bd173d2c6e325aa4be2ca3a
-rw-r--r--services/usb/java/com/android/server/usb/UsbDeviceManager.java24
1 files changed, 22 insertions, 2 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 15a1e760f528..a9c735bbeeb9 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -32,6 +32,7 @@ import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus;
+import android.os.BatteryManager;
import android.os.FileUtils;
import android.os.Handler;
import android.os.Looper;
@@ -111,6 +112,7 @@ public class UsbDeviceManager {
private static final int MSG_USER_SWITCHED = 5;
private static final int MSG_UPDATE_USER_RESTRICTIONS = 6;
private static final int MSG_UPDATE_HOST_STATE = 7;
+ private static final int MSG_UPDATE_CHARGING_STATE = 9;
private static final int AUDIO_MODE_SOURCE = 1;
@@ -191,6 +193,15 @@ public class UsbDeviceManager {
}
};
+ private final BroadcastReceiver mChargingReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ boolean usbCharging = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
+ mHandler.sendMessage(MSG_UPDATE_CHARGING_STATE, usbCharging);
+ }
+ };
+
public UsbDeviceManager(Context context, UsbAlsaManager alsaManager) {
mContext = context;
mUsbAlsaManager = alsaManager;
@@ -215,6 +226,8 @@ public class UsbDeviceManager {
}
mContext.registerReceiver(mHostReceiver,
new IntentFilter(UsbManager.ACTION_USB_PORT_CHANGED));
+ mContext.registerReceiver(mChargingReceiver,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private UsbSettingsManager getCurrentSettings() {
@@ -329,6 +342,7 @@ public class UsbDeviceManager {
private int mUsbNotificationId;
private boolean mAdbNotificationShown;
private int mCurrentUser = UserHandle.USER_NULL;
+ private boolean mUsbCharging;
public UsbHandler(Looper looper) {
super(looper);
@@ -722,6 +736,7 @@ public class UsbDeviceManager {
@Override
public void handleMessage(Message msg) {
+ SomeArgs args;
switch (msg.what) {
case MSG_UPDATE_STATE:
mConnected = (msg.arg1 == 1);
@@ -742,7 +757,7 @@ public class UsbDeviceManager {
}
break;
case MSG_UPDATE_HOST_STATE:
- SomeArgs args = (SomeArgs) msg.obj;
+ args = (SomeArgs) msg.obj;
mHostConnected = (args.argi1 == 1);
mSourcePower = (args.argi2 == 1);
mSinkPower = (args.argi3 == 1);
@@ -752,6 +767,10 @@ public class UsbDeviceManager {
updateUsbStateBroadcastIfNeeded();
}
break;
+ case MSG_UPDATE_CHARGING_STATE:
+ mUsbCharging = (msg.arg1 == 1);
+ updateUsbNotification();
+ break;
case MSG_ENABLE_ADB:
setAdbEnabled(msg.arg1 == 1);
break;
@@ -832,7 +851,7 @@ public class UsbDeviceManager {
}
} else if (mSourcePower) {
id = com.android.internal.R.string.usb_supplying_notification_title;
- } else if (mHostConnected && mSinkPower) {
+ } else if (mHostConnected && mSinkPower && mUsbCharging) {
id = com.android.internal.R.string.usb_charging_notification_title;
}
if (id != mUsbNotificationId) {
@@ -936,6 +955,7 @@ public class UsbDeviceManager {
pw.println(" mHostConnected: " + mHostConnected);
pw.println(" mSourcePower: " + mSourcePower);
pw.println(" mSinkPower: " + mSinkPower);
+ pw.println(" mUsbCharging: " + mUsbCharging);
try {
pw.println(" Kernel state: "
+ FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim());