Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7916432b authored by Mike Lockwood's avatar Mike Lockwood
Browse files

DO NOT MERGE UsbManager: squashed commit of:



USB: Add functions for querying if a USB function is supported and enabled.

Rename android.hardware.Usb to UsbManager and UsbObserver to UsbService

Change-Id: I920a211934d993eab8ce744c1cc7b05342389286
Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 89e7f9fd
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -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.
     *
@@ -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;
        }
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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);
            }
        }
@@ -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
@@ -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();
+7 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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)
@@ -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);
+4 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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 {
@@ -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;
+56 −53
Original line number Diff line number Diff line
@@ -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;
@@ -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";
@@ -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)) {
@@ -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];

@@ -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);
            }
        }

@@ -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