Merge "Check for preexisting flag before enabling the gadget"

This commit is contained in:
TreeHugger Robot
2018-11-09 20:02:24 +00:00
committed by Android (Google) Code Review

View File

@@ -153,6 +153,7 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
private static final int MSG_SET_FUNCTIONS_TIMEOUT = 15;
private static final int MSG_GET_CURRENT_USB_FUNCTIONS = 16;
private static final int MSG_FUNCTION_SWITCH_TIMEOUT = 17;
private static final int MSG_GADGET_HAL_REGISTERED = 18;
private static final int AUDIO_MODE_SOURCE = 1;
@@ -1708,10 +1709,16 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
protected static final String CTL_STOP = "ctl.stop";
/**
* Adb natvie daemon
* Adb native daemon.
*/
protected static final String ADBD = "adbd";
/**
* Gadget HAL fully qualified instance name for registering for ServiceNotification.
*/
protected static final String GADGET_HAL_FQ_NAME =
"android.hardware.usb.gadget@1.0::IUsbGadget";
protected boolean mCurrentUsbFunctionsRequested;
UsbHandlerHal(Looper looper, Context context, UsbDeviceManager deviceManager,
@@ -1721,8 +1728,7 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
ServiceNotification serviceNotification = new ServiceNotification();
boolean ret = IServiceManager.getService()
.registerForNotifications("android.hardware.usb.gadget@1.0::IUsbGadget",
"", serviceNotification);
.registerForNotifications(GADGET_HAL_FQ_NAME, "", serviceNotification);
if (!ret) {
Slog.e(TAG, "Failed to register usb gadget service start notification");
return;
@@ -1764,20 +1770,12 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
@Override
public void onRegistration(String fqName, String name, boolean preexisting) {
Slog.i(TAG, "Usb gadget hal service started " + fqName + " " + name);
synchronized (mGadgetProxyLock) {
try {
mGadgetProxy = IUsbGadget.getService();
mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(),
USB_GADGET_HAL_DEATH_COOKIE);
if (!mCurrentFunctionsApplied && !mCurrentUsbFunctionsRequested) {
setEnabledFunctions(mCurrentFunctions, false);
}
} catch (NoSuchElementException e) {
Slog.e(TAG, "Usb gadget hal not found", e);
} catch (RemoteException e) {
Slog.e(TAG, "Usb Gadget hal not responding", e);
}
if (!fqName.equals(GADGET_HAL_FQ_NAME)) {
Slog.e(TAG, "fqName does not match");
return;
}
sendMessage(MSG_GADGET_HAL_REGISTERED, preexisting);
}
}
@@ -1815,6 +1813,23 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
setEnabledFunctions(UsbManager.FUNCTION_NONE, !isAdbEnabled());
}
break;
case MSG_GADGET_HAL_REGISTERED:
boolean preexisting = msg.arg1 == 1;
synchronized (mGadgetProxyLock) {
try {
mGadgetProxy = IUsbGadget.getService();
mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(),
USB_GADGET_HAL_DEATH_COOKIE);
if (!mCurrentFunctionsApplied && !preexisting) {
setEnabledFunctions(mCurrentFunctions, false);
}
} catch (NoSuchElementException e) {
Slog.e(TAG, "Usb gadget hal not found", e);
} catch (RemoteException e) {
Slog.e(TAG, "Usb Gadget hal not responding", e);
}
}
break;
default:
super.handleMessage(msg);
}