public void onReceive(Context context, Intent intent) { // handle accessories attached at boot time synchronized (mLock) { if (mCurrentAccessory != null) { mDeviceManager.accessoryAttached(mCurrentAccessory); } } }
@Override public void handleMessage(Message msg) { synchronized (mLock) { switch (msg.what) { case MSG_UPDATE_STATE: if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) { if (mConnected == 0) { if (UsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_ACCESSORY)) { // make sure accessory mode is off, and restore default functions Log.d(TAG, "exited USB accessory mode"); if (!UsbManager.setFunctionEnabled( UsbManager.USB_FUNCTION_ACCESSORY, false)) { Log.e(TAG, "could not disable accessory function"); } int count = mDefaultFunctions.size(); for (int i = 0; i < count; i++) { String function = mDefaultFunctions.get(i); if (!UsbManager.setFunctionEnabled(function, true)) { Log.e(TAG, "could not reenable function " + function); } } if (mCurrentAccessory != null) { mDeviceManager.accessoryDetached(mCurrentAccessory); mCurrentAccessory = null; } } } final ContentResolver cr = mContext.getContentResolver(); if (Settings.Secure.getInt(cr, Settings.Secure.DEVICE_PROVISIONED, 0) == 0) { Slog.i(TAG, "Device not provisioned, skipping USB broadcast"); return; } mLastConnected = mConnected; mLastConfiguration = mConfiguration; // send a sticky broadcast containing current USB state Intent intent = new Intent(UsbManager.ACTION_USB_STATE); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra(UsbManager.USB_CONNECTED, mConnected != 0); intent.putExtra(UsbManager.USB_CONFIGURATION, mConfiguration); addEnabledFunctionsLocked(intent); mContext.sendStickyBroadcast(intent); } break; case MSG_FUNCTION_ENABLED: case MSG_FUNCTION_DISABLED: functionEnabledLocked((String) msg.obj, msg.what == MSG_FUNCTION_ENABLED); break; } } }
/* opens the currently attached USB accessory (device mode) */ public ParcelFileDescriptor openAccessory(UsbAccessory accessory) { synchronized (mLock) { if (mCurrentAccessory == null) { throw new IllegalArgumentException("no accessory attached"); } if (!mCurrentAccessory.equals(accessory)) { Log.e(TAG, accessory.toString() + " does not match current accessory " + mCurrentAccessory); throw new IllegalArgumentException("accessory not attached"); } mDeviceManager.checkPermission(mCurrentAccessory); return nativeOpenAccessory(); } }
private final void readCurrentAccessoryLocked() { if (mHasUsbAccessory) { String[] strings = nativeGetAccessoryStrings(); if (strings != null) { mCurrentAccessory = new UsbAccessory(strings); Log.d(TAG, "entering USB accessory mode: " + mCurrentAccessory); if (mSystemReady) { mDeviceManager.accessoryAttached(mCurrentAccessory); } } else { Log.e(TAG, "nativeGetAccessoryStrings failed"); } } }
@Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { pw.println( "Permission Denial: can't dump UsbManager from from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); return; } synchronized (mLock) { pw.println("USB Manager State:"); pw.println(" USB Device State:"); pw.print(" Enabled Functions: "); for (int i = 0; i < mEnabledFunctions.size(); i++) { pw.print(mEnabledFunctions.get(i) + " "); } pw.println(""); pw.print(" Disabled Functions: "); for (int i = 0; i < mDisabledFunctions.size(); i++) { pw.print(mDisabledFunctions.get(i) + " "); } pw.println(""); pw.print(" Default Functions: "); for (int i = 0; i < mDefaultFunctions.size(); i++) { pw.print(mDefaultFunctions.get(i) + " "); } pw.println(""); pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration); pw.println(" mCurrentAccessory: " + mCurrentAccessory); mDeviceManager.dump(fd, pw); } }
public void clearDefaults(String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); mDeviceManager.clearDefaults(packageName); }
public boolean hasDefaults(String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); return mDeviceManager.hasDefaults(packageName); }
public void grantAccessoryPermission(UsbAccessory accessory, int uid) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); mDeviceManager.grantAccessoryPermission(accessory, uid); }
public void requestAccessoryPermission( UsbAccessory accessory, String packageName, PendingIntent pi) { mDeviceManager.requestPermission(accessory, packageName, pi); }
public boolean hasAccessoryPermission(UsbAccessory accessory) { return mDeviceManager.hasPermission(accessory); }
public void setAccessoryPackage(UsbAccessory accessory, String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); mDeviceManager.setAccessoryPackage(accessory, packageName); }