am 606d591a: Merge "Add new Usb.ACTION_USB_STATE sticky broadcast for monitoring USB connect state" into gingerbread

Merge commit '606d591afee24e31e3885a7330638893db1710f5' into gingerbread-plus-aosp

* commit '606d591afee24e31e3885a7330638893db1710f5':
  Add new Usb.ACTION_USB_STATE sticky broadcast for monitoring USB connect state
This commit is contained in:
Mike Lockwood
2010-06-29 05:27:08 -07:00
committed by Android Git Automerger
2 changed files with 41 additions and 10 deletions

View File

@@ -39,6 +39,27 @@ public class Usb {
public static final String ACTION_USB_DISCONNECTED =
"android.hardware.action.USB_DISCONNECTED";
/**
* Broadcast Action: A sticky broadcast for USB state change events.
*
* This is a sticky broadcast for clients that are interested in both USB connect and
* disconnect events. If you are only concerned with one or the other, you can use
* {@link #ACTION_USB_CONNECTED} or {@link #ACTION_USB_DISCONNECTED} to avoid receiving
* unnecessary broadcasts. The boolean {@link #USB_CONNECTED} extra indicates whether
* USB is connected or disconnected.
* The extras bundle will also contain name/value pairs with the name of the function
* and a value of either {@link #USB_FUNCTION_ENABLED} or {@link #USB_FUNCTION_DISABLED}.
* Possible USB function names include {@link #USB_FUNCTION_MASS_STORAGE},
* {@link #USB_FUNCTION_ADB}, {@link #USB_FUNCTION_RNDIS} and {@link #USB_FUNCTION_MTP}.
*/
public static final String ACTION_USB_STATE =
"android.hardware.action.USB_STATE";
/**
* Boolean extra indicating whether USB is connected or disconnected.
* Used in extras for the {@link #ACTION_USB_STATE} broadcast.
*/
public static final String USB_CONNECTED = "connected";
/**
* Name of the USB mass storage USB function.

View File

@@ -159,6 +159,16 @@ class UsbObserver extends UEventObserver {
}
private final Handler mHandler = new Handler() {
private void addEnabledFunctions(Intent intent) {
// include state of all USB functions in our extras
for (int i = 0; i < mEnabledFunctions.size(); i++) {
intent.putExtra(mEnabledFunctions.get(i), Usb.USB_FUNCTION_ENABLED);
}
for (int i = 0; i < mDisabledFunctions.size(); i++) {
intent.putExtra(mDisabledFunctions.get(i), Usb.USB_FUNCTION_DISABLED);
}
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
@@ -174,21 +184,21 @@ class UsbObserver extends UEventObserver {
// Send an Intent containing connected/disconnected state
// and the enabled/disabled state of all USB functions
Intent intent;
if (mUsbConfig != 0) {
boolean usbConnected = (mUsbConfig != 0);
if (usbConnected) {
intent = new Intent(Usb.ACTION_USB_CONNECTED);
// include state of all USB functions in our extras
for (int i = 0; i < mEnabledFunctions.size(); i++) {
intent.putExtra(mEnabledFunctions.get(i), Usb.USB_FUNCTION_ENABLED);
}
for (int i = 0; i < mDisabledFunctions.size(); i++) {
intent.putExtra(mDisabledFunctions.get(i), Usb.USB_FUNCTION_DISABLED);
}
addEnabledFunctions(intent);
} else {
intent = new Intent(Usb.ACTION_USB_DISCONNECTED);
}
mContext.sendBroadcast(intent);
mContext.sendBroadcast(intent, android.Manifest.permission.ACCESS_USB);
// send a sticky broadcast for clients interested in both connect and disconnect
intent = new Intent(Usb.ACTION_USB_STATE);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
intent.putExtra(Usb.USB_CONNECTED, usbConnected);
addEnabledFunctions(intent);
mContext.sendStickyBroadcast(intent);
}
break;
}