aidl: usb: Implement UsbDataStatus

* Makes Trust usb restrict properly reenable USB once it got disabled
* Also call notifyEnableUsbDataStatus with the actual status

Change-Id: I58daea3149b26355a9af28ff7ae651b90b5a3484
diff --git a/aidl/usb/Usb.cpp b/aidl/usb/Usb.cpp
index bf3b55d..886d648 100644
--- a/aidl/usb/Usb.cpp
+++ b/aidl/usb/Usb.cpp
@@ -93,7 +93,7 @@
 
     if (mCallback != NULL) {
         ScopedAStatus ret = mCallback->notifyEnableUsbDataStatus(
-            in_portName, true, result ? Status::SUCCESS : Status::ERROR, in_transactionId);
+            in_portName, in_enable, result ? Status::SUCCESS : Status::ERROR, in_transactionId);
         if (!ret.isOk())
             ALOGE("notifyEnableUsbDataStatus error %s", ret.getDescription().c_str());
     } else {
@@ -555,14 +555,25 @@
                 port.second ? canSwitchRoleHelper(port.first) : false;
 
             (*currentPortStatus)[i].supportedModes.push_back(PortMode::DRP);
-            (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED);
+
+            bool dataEnabled = true;
+            string usbDataEnabled = "0";
+            if (ReadFileToString(USB_DATA_PATH, &usbDataEnabled) &&
+                stoi(Trim(usbDataEnabled)) == 0) {
+                (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::DISABLED_FORCE);
+                dataEnabled = false;
+            }
+            if (dataEnabled) {
+                (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED);
+            }
 
             ALOGI("%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
                 "usbDataEnabled:%d",
                 i, port.first.c_str(), port.second,
                 (*currentPortStatus)[i].canChangeMode,
                 (*currentPortStatus)[i].canChangeDataRole,
-                (*currentPortStatus)[i].canChangePowerRole, 0);
+                (*currentPortStatus)[i].canChangePowerRole,
+                dataEnabled ? 1 : 0);
         }
 
         return Status::SUCCESS;