Loading core/java/android/hardware/Usb.java→core/java/android/hardware/UsbManager.java +31 −1 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ package android.hardware; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * Class for accessing USB state information. * @hide */ public class Usb { public class UsbManager { /** * Broadcast Action: A broadcast for USB connected events. * Loading Loading @@ -96,4 +100,30 @@ public class Usb { * Used in extras for the {@link #ACTION_USB_CONNECTED} broadcast */ public static final String USB_FUNCTION_DISABLED = "disabled"; private static File getFunctionEnableFile(String function) { return new File("/sys/class/usb_composite/" + function + "/enable"); } /** * Returns true if the specified USB function is supported by the kernel. * Note that a USB function maybe supported but disabled. */ public static boolean isFunctionSupported(String function) { return getFunctionEnableFile(function).exists(); } /** * Returns true if the specified USB function is currently enabled. */ public static boolean isFunctionEnabled(String function) { try { FileInputStream stream = new FileInputStream(getFunctionEnableFile(function)); boolean enabled = (stream.read() == '1'); stream.close(); return enabled; } catch (IOException e) { return false; } } } packages/SystemUI/src/com/android/systemui/usb/UsbStorageActivity.java +4 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.content.DialogInterface.OnCancelListener; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.hardware.Usb; import android.hardware.UsbManager; import android.os.Bundle; import android.os.Environment; import android.os.Handler; Loading Loading @@ -83,7 +83,7 @@ public class UsbStorageActivity extends Activity private BroadcastReceiver mUsbStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Usb.ACTION_USB_STATE)) { if (intent.getAction().equals(UsbManager.ACTION_USB_STATE)) { handleUsbStateChanged(intent); } } Loading Loading @@ -175,7 +175,7 @@ public class UsbStorageActivity extends Activity super.onResume(); mStorageManager.registerListener(mStorageListener); registerReceiver(mUsbStateReceiver, new IntentFilter(Usb.ACTION_USB_STATE)); registerReceiver(mUsbStateReceiver, new IntentFilter(UsbManager.ACTION_USB_STATE)); try { mAsyncStorageHandler.post(new Runnable() { @Override Loading @@ -199,7 +199,7 @@ public class UsbStorageActivity extends Activity } private void handleUsbStateChanged(Intent intent) { boolean connected = intent.getExtras().getBoolean(Usb.USB_CONNECTED); boolean connected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED); if (!connected) { // It was disconnected from the plug, so finish finish(); Loading services/java/com/android/server/NotificationManagerService.java +7 −7 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.database.ContentObserver; import android.hardware.Usb; import android.hardware.UsbManager; import android.media.AudioManager; import android.net.Uri; import android.os.BatteryManager; Loading Loading @@ -352,13 +352,13 @@ public class NotificationManagerService extends INotificationManager.Stub mBatteryFull = batteryFull; updateLights(); } } else if (action.equals(Usb.ACTION_USB_STATE)) { } else if (action.equals(UsbManager.ACTION_USB_STATE)) { Bundle extras = intent.getExtras(); boolean usbConnected = extras.getBoolean(Usb.USB_CONNECTED); boolean adbEnabled = (Usb.USB_FUNCTION_ENABLED.equals( extras.getString(Usb.USB_FUNCTION_ADB))); boolean usbConnected = extras.getBoolean(UsbManager.USB_CONNECTED); boolean adbEnabled = (UsbManager.USB_FUNCTION_ENABLED.equals( extras.getString(UsbManager.USB_FUNCTION_ADB))); updateAdbNotification(usbConnected && adbEnabled); } else if (action.equals(Usb.ACTION_USB_DISCONNECTED)) { } else if (action.equals(UsbManager.ACTION_USB_DISCONNECTED)) { updateAdbNotification(false); } else if (action.equals(Intent.ACTION_PACKAGE_REMOVED) || action.equals(Intent.ACTION_PACKAGE_RESTARTED) Loading Loading @@ -464,7 +464,7 @@ public class NotificationManagerService extends INotificationManager.Stub // register for battery changed notifications IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Usb.ACTION_USB_STATE); filter.addAction(UsbManager.ACTION_USB_STATE); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); Loading services/java/com/android/server/SystemServer.java +4 −4 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ class ServerThread extends Thread { BluetoothA2dpService bluetoothA2dp = null; HeadsetObserver headset = null; DockObserver dock = null; UsbObserver usb = null; UsbService usb = null; UiModeManagerService uiMode = null; RecognitionManagerService recognition = null; ThrottleService throttle = null; Loading Loading @@ -399,9 +399,9 @@ class ServerThread extends Thread { try { Slog.i(TAG, "USB Observer"); // Listen for USB changes usb = new UsbObserver(context); usb = new UsbService(context); } catch (Throwable e) { Slog.e(TAG, "Failure starting UsbObserver", e); Slog.e(TAG, "Failure starting UsbService", e); } try { Loading Loading @@ -493,7 +493,7 @@ class ServerThread extends Thread { final BatteryService batteryF = battery; final ConnectivityService connectivityF = connectivity; final DockObserver dockF = dock; final UsbObserver usbF = usb; final UsbService usbF = usb; final ThrottleService throttleF = throttle; final UiModeManagerService uiModeF = uiMode; final AppWidgetService appWidgetF = appWidget; Loading services/java/com/android/server/UsbObserver.java→services/java/com/android/server/UsbService.java +56 −53 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.server; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.hardware.Usb; import android.hardware.UsbManager; import android.net.Uri; import android.os.Handler; import android.os.Message; Loading @@ -34,10 +34,10 @@ import java.io.FileReader; import java.util.ArrayList; /** * <p>UsbObserver monitors for changes to USB state. * <p>UsbService monitors for changes to USB state. */ class UsbObserver extends UEventObserver { private static final String TAG = UsbObserver.class.getSimpleName(); class UsbService { private static final String TAG = UsbService.class.getSimpleName(); private static final boolean LOG = false; private static final String USB_CONFIGURATION_MATCH = "DEVPATH=/devices/virtual/switch/usb_configuration"; Loading @@ -60,14 +60,7 @@ class UsbObserver extends UEventObserver { private PowerManagerService mPowerManager; public UsbObserver(Context context) { mContext = context; init(); // set initial status startObserving(USB_CONFIGURATION_MATCH); startObserving(USB_FUNCTIONS_MATCH); } private final UEventObserver mUEventObserver = new UEventObserver() { @Override public void onUEvent(UEventObserver.UEvent event) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Loading Loading @@ -112,6 +105,16 @@ class UsbObserver extends UEventObserver { } } } }; public UsbService(Context context) { mContext = context; init(); // set initial status mUEventObserver.startObserving(USB_CONFIGURATION_MATCH); mUEventObserver.startObserving(USB_FUNCTIONS_MATCH); } private final void init() { char[] buffer = new char[1024]; Loading Loading @@ -162,10 +165,10 @@ class UsbObserver extends UEventObserver { 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); intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED); } for (int i = 0; i < mDisabledFunctions.size(); i++) { intent.putExtra(mDisabledFunctions.get(i), Usb.USB_FUNCTION_DISABLED); intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED); } } Loading @@ -186,17 +189,17 @@ class UsbObserver extends UEventObserver { Intent intent; boolean usbConnected = (mUsbConfig != 0); if (usbConnected) { intent = new Intent(Usb.ACTION_USB_CONNECTED); intent = new Intent(UsbManager.ACTION_USB_CONNECTED); addEnabledFunctions(intent); } else { intent = new Intent(Usb.ACTION_USB_DISCONNECTED); intent = new Intent(UsbManager.ACTION_USB_DISCONNECTED); } mContext.sendBroadcast(intent); // send a sticky broadcast for clients interested in both connect and disconnect intent = new Intent(Usb.ACTION_USB_STATE); intent = new Intent(UsbManager.ACTION_USB_STATE); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra(Usb.USB_CONNECTED, usbConnected); intent.putExtra(UsbManager.USB_CONNECTED, usbConnected); addEnabledFunctions(intent); mContext.sendStickyBroadcast(intent); } Loading Loading
core/java/android/hardware/Usb.java→core/java/android/hardware/UsbManager.java +31 −1 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ package android.hardware; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * Class for accessing USB state information. * @hide */ public class Usb { public class UsbManager { /** * Broadcast Action: A broadcast for USB connected events. * Loading Loading @@ -96,4 +100,30 @@ public class Usb { * Used in extras for the {@link #ACTION_USB_CONNECTED} broadcast */ public static final String USB_FUNCTION_DISABLED = "disabled"; private static File getFunctionEnableFile(String function) { return new File("/sys/class/usb_composite/" + function + "/enable"); } /** * Returns true if the specified USB function is supported by the kernel. * Note that a USB function maybe supported but disabled. */ public static boolean isFunctionSupported(String function) { return getFunctionEnableFile(function).exists(); } /** * Returns true if the specified USB function is currently enabled. */ public static boolean isFunctionEnabled(String function) { try { FileInputStream stream = new FileInputStream(getFunctionEnableFile(function)); boolean enabled = (stream.read() == '1'); stream.close(); return enabled; } catch (IOException e) { return false; } } }
packages/SystemUI/src/com/android/systemui/usb/UsbStorageActivity.java +4 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.content.DialogInterface.OnCancelListener; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.hardware.Usb; import android.hardware.UsbManager; import android.os.Bundle; import android.os.Environment; import android.os.Handler; Loading Loading @@ -83,7 +83,7 @@ public class UsbStorageActivity extends Activity private BroadcastReceiver mUsbStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Usb.ACTION_USB_STATE)) { if (intent.getAction().equals(UsbManager.ACTION_USB_STATE)) { handleUsbStateChanged(intent); } } Loading Loading @@ -175,7 +175,7 @@ public class UsbStorageActivity extends Activity super.onResume(); mStorageManager.registerListener(mStorageListener); registerReceiver(mUsbStateReceiver, new IntentFilter(Usb.ACTION_USB_STATE)); registerReceiver(mUsbStateReceiver, new IntentFilter(UsbManager.ACTION_USB_STATE)); try { mAsyncStorageHandler.post(new Runnable() { @Override Loading @@ -199,7 +199,7 @@ public class UsbStorageActivity extends Activity } private void handleUsbStateChanged(Intent intent) { boolean connected = intent.getExtras().getBoolean(Usb.USB_CONNECTED); boolean connected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED); if (!connected) { // It was disconnected from the plug, so finish finish(); Loading
services/java/com/android/server/NotificationManagerService.java +7 −7 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.database.ContentObserver; import android.hardware.Usb; import android.hardware.UsbManager; import android.media.AudioManager; import android.net.Uri; import android.os.BatteryManager; Loading Loading @@ -352,13 +352,13 @@ public class NotificationManagerService extends INotificationManager.Stub mBatteryFull = batteryFull; updateLights(); } } else if (action.equals(Usb.ACTION_USB_STATE)) { } else if (action.equals(UsbManager.ACTION_USB_STATE)) { Bundle extras = intent.getExtras(); boolean usbConnected = extras.getBoolean(Usb.USB_CONNECTED); boolean adbEnabled = (Usb.USB_FUNCTION_ENABLED.equals( extras.getString(Usb.USB_FUNCTION_ADB))); boolean usbConnected = extras.getBoolean(UsbManager.USB_CONNECTED); boolean adbEnabled = (UsbManager.USB_FUNCTION_ENABLED.equals( extras.getString(UsbManager.USB_FUNCTION_ADB))); updateAdbNotification(usbConnected && adbEnabled); } else if (action.equals(Usb.ACTION_USB_DISCONNECTED)) { } else if (action.equals(UsbManager.ACTION_USB_DISCONNECTED)) { updateAdbNotification(false); } else if (action.equals(Intent.ACTION_PACKAGE_REMOVED) || action.equals(Intent.ACTION_PACKAGE_RESTARTED) Loading Loading @@ -464,7 +464,7 @@ public class NotificationManagerService extends INotificationManager.Stub // register for battery changed notifications IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Usb.ACTION_USB_STATE); filter.addAction(UsbManager.ACTION_USB_STATE); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); Loading
services/java/com/android/server/SystemServer.java +4 −4 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ class ServerThread extends Thread { BluetoothA2dpService bluetoothA2dp = null; HeadsetObserver headset = null; DockObserver dock = null; UsbObserver usb = null; UsbService usb = null; UiModeManagerService uiMode = null; RecognitionManagerService recognition = null; ThrottleService throttle = null; Loading Loading @@ -399,9 +399,9 @@ class ServerThread extends Thread { try { Slog.i(TAG, "USB Observer"); // Listen for USB changes usb = new UsbObserver(context); usb = new UsbService(context); } catch (Throwable e) { Slog.e(TAG, "Failure starting UsbObserver", e); Slog.e(TAG, "Failure starting UsbService", e); } try { Loading Loading @@ -493,7 +493,7 @@ class ServerThread extends Thread { final BatteryService batteryF = battery; final ConnectivityService connectivityF = connectivity; final DockObserver dockF = dock; final UsbObserver usbF = usb; final UsbService usbF = usb; final ThrottleService throttleF = throttle; final UiModeManagerService uiModeF = uiMode; final AppWidgetService appWidgetF = appWidget; Loading
services/java/com/android/server/UsbObserver.java→services/java/com/android/server/UsbService.java +56 −53 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.server; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.hardware.Usb; import android.hardware.UsbManager; import android.net.Uri; import android.os.Handler; import android.os.Message; Loading @@ -34,10 +34,10 @@ import java.io.FileReader; import java.util.ArrayList; /** * <p>UsbObserver monitors for changes to USB state. * <p>UsbService monitors for changes to USB state. */ class UsbObserver extends UEventObserver { private static final String TAG = UsbObserver.class.getSimpleName(); class UsbService { private static final String TAG = UsbService.class.getSimpleName(); private static final boolean LOG = false; private static final String USB_CONFIGURATION_MATCH = "DEVPATH=/devices/virtual/switch/usb_configuration"; Loading @@ -60,14 +60,7 @@ class UsbObserver extends UEventObserver { private PowerManagerService mPowerManager; public UsbObserver(Context context) { mContext = context; init(); // set initial status startObserving(USB_CONFIGURATION_MATCH); startObserving(USB_FUNCTIONS_MATCH); } private final UEventObserver mUEventObserver = new UEventObserver() { @Override public void onUEvent(UEventObserver.UEvent event) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Loading Loading @@ -112,6 +105,16 @@ class UsbObserver extends UEventObserver { } } } }; public UsbService(Context context) { mContext = context; init(); // set initial status mUEventObserver.startObserving(USB_CONFIGURATION_MATCH); mUEventObserver.startObserving(USB_FUNCTIONS_MATCH); } private final void init() { char[] buffer = new char[1024]; Loading Loading @@ -162,10 +165,10 @@ class UsbObserver extends UEventObserver { 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); intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED); } for (int i = 0; i < mDisabledFunctions.size(); i++) { intent.putExtra(mDisabledFunctions.get(i), Usb.USB_FUNCTION_DISABLED); intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED); } } Loading @@ -186,17 +189,17 @@ class UsbObserver extends UEventObserver { Intent intent; boolean usbConnected = (mUsbConfig != 0); if (usbConnected) { intent = new Intent(Usb.ACTION_USB_CONNECTED); intent = new Intent(UsbManager.ACTION_USB_CONNECTED); addEnabledFunctions(intent); } else { intent = new Intent(Usb.ACTION_USB_DISCONNECTED); intent = new Intent(UsbManager.ACTION_USB_DISCONNECTED); } mContext.sendBroadcast(intent); // send a sticky broadcast for clients interested in both connect and disconnect intent = new Intent(Usb.ACTION_USB_STATE); intent = new Intent(UsbManager.ACTION_USB_STATE); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra(Usb.USB_CONNECTED, usbConnected); intent.putExtra(UsbManager.USB_CONNECTED, usbConnected); addEnabledFunctions(intent); mContext.sendStickyBroadcast(intent); } Loading