diff options
author | Jason Monk <jmonk@google.com> | 2015-08-12 14:00:11 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-08-12 14:16:22 -0400 |
commit | 8338ed00ae44635d099b530b3360e6d1f7041827 (patch) | |
tree | 09e5f4ddae263de1871385198400b0f0b0bff0ce /services/usb | |
parent | 86b6d204a5321bf2874c2cbee3452e674605c21f (diff) | |
download | frameworks_base-8338ed00ae44635d099b530b3360e6d1f7041827.zip frameworks_base-8338ed00ae44635d099b530b3360e6d1f7041827.tar.gz frameworks_base-8338ed00ae44635d099b530b3360e6d1f7041827.tar.bz2 |
Show usb charging notification when in host mode
Bug: 21615151
Change-Id: Ifc8c288a94f52ecac19990ab3d9095b1aef8efc3
Diffstat (limited to 'services/usb')
-rw-r--r-- | services/usb/java/com/android/server/usb/UsbDeviceManager.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index 09e15a8..fb9a3a3 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -19,15 +19,19 @@ package com.android.server.usb; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; import android.database.ContentObserver; import android.hardware.usb.UsbAccessory; import android.hardware.usb.UsbManager; +import android.hardware.usb.UsbPort; +import android.hardware.usb.UsbPortStatus; import android.os.FileUtils; import android.os.Handler; import android.os.Looper; @@ -105,6 +109,7 @@ public class UsbDeviceManager { private static final int MSG_USER_SWITCHED = 5; private static final int MSG_SET_USB_DATA_UNLOCKED = 6; private static final int MSG_UPDATE_USER_RESTRICTIONS = 7; + private static final int MSG_UPDATE_HOST_STATE = 8; private static final int AUDIO_MODE_SOURCE = 1; @@ -175,6 +180,15 @@ public class UsbDeviceManager { } }; + private final BroadcastReceiver mHostReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + UsbPort port = intent.getParcelableExtra(UsbManager.EXTRA_PORT); + UsbPortStatus status = intent.getParcelableExtra(UsbManager.EXTRA_PORT_STATUS); + mHandler.updateHostState(port, status); + } + }; + public UsbDeviceManager(Context context, UsbAlsaManager alsaManager) { mContext = context; mUsbAlsaManager = alsaManager; @@ -197,6 +211,8 @@ public class UsbDeviceManager { if (secureAdbEnabled && !dataEncrypted) { mDebuggingManager = new UsbDebuggingManager(context); } + mContext.registerReceiver(mHostReceiver, + new IntentFilter(UsbManager.ACTION_USB_PORT_CHANGED)); } private UsbSettingsManager getCurrentSettings() { @@ -299,6 +315,7 @@ public class UsbDeviceManager { // current USB state private boolean mConnected; + private boolean mHostConnected; private boolean mConfigured; private boolean mUsbDataUnlocked; private String mCurrentFunctions; @@ -377,6 +394,11 @@ public class UsbDeviceManager { sendMessageDelayed(msg, (connected == 0) ? UPDATE_DELAY : 0); } + public void updateHostState(UsbPort port, UsbPortStatus status) { + boolean hostConnected = status.getCurrentDataRole() == UsbPort.DATA_ROLE_HOST; + obtainMessage(MSG_UPDATE_HOST_STATE, hostConnected ? 1 :0, 0).sendToTarget(); + } + private boolean waitForState(String state) { // wait for the transition to complete. // give up after 1 second. @@ -652,6 +674,10 @@ public class UsbDeviceManager { updateUsbFunctions(); } break; + case MSG_UPDATE_HOST_STATE: + mHostConnected = (msg.arg1 == 1); + updateUsbNotification(); + break; case MSG_ENABLE_ADB: setAdbEnabled(msg.arg1 == 1); break; @@ -707,7 +733,7 @@ public class UsbDeviceManager { if (mNotificationManager == null || !mUseUsbNotification) return; int id = 0; Resources r = mContext.getResources(); - if (mConnected) { + if (mConnected || mHostConnected) { if (!mUsbDataUnlocked) { id = com.android.internal.R.string.usb_charging_notification_title; } else if (UsbManager.containsFunction(mCurrentFunctions, |