Background
* On an org-owned device with a managed profile,
the admin can apply some user restrictions on the
personal profile (incl DISALLOW_USB_FILE_TRANSFER)
* When the admin applied DISALLOW_USB_FILE_TRANSFER,
the device should stop the existing 'File transfer'
mode USB connnection.
Change
* The broadcast recevier in UsbService should pick
up receive broadcast intents for all users.
Manual testing
* Set up device in COPE mode
* Turn on USB 'File transfer' via Settings
* Open internal storage on computer connected via USB
and browse some files on the device
* Apply DISALLOW_USB_FILE_TRANSFER
* Verify device no longer shows up in internal storage
Bug: 175757373
Test: manual testing
atest UsbBackendTest
Change-Id: I8d47e728a26ba99dc3b5223d0d7d29085484f8f0
Currently, UsbDeviceManager will send usb functions in
GadgetFunction to Hal implementation without any check.
It is possible to send the functions defined in newer Hal
to older Hal implementation.
This patch will add a check to avoid this symptom before
sending the usb function.
Bug: 182507868
Test: verified pass
Change-Id: I621809b8c7236937ab4c76e3fa943d00f761922f
- Add the missing annotation for the permission in UsbService
- Enforce the permission in UsbManager
Test: atest CtsUsbManagerTestCases
Bug: 179389205
Change-Id: I9cb3a0f24367f0b28417588e03db882db159f7a7
Add usb contaminent status to service/enums.proto. It was previously in
usb.proto, but is an enum. Enums.proto is a better fit because other
enums in usb.proto are located in enums.proto, and the enum is also used
by atoms.proto.
Additionally, move the enums.proto file to proto_logging, since all
atoms.proto dependencies should be in proto_logging.
Test: m
Bug: 182392879
Change-Id: I9ea0a1482336694c446e950ea5cb46b95372b76d
Merged-In: I9ea0a1482336694c446e950ea5cb46b95372b76d
Add usb contaminent status to service/enums.proto. It was previously in
usb.proto, but is an enum. Enums.proto is a better fit because other
enums in usb.proto are located in enums.proto, and the enum is also used
by atoms.proto.
Additionally, move the enums.proto file to proto_logging, since all
atoms.proto dependencies should be in proto_logging.
Test: m
Bug: 182392879
Change-Id: I9ea0a1482336694c446e950ea5cb46b95372b76d
USB V1.3 HAL include:
1. Add api to enable/disable USB data signaling
2. Add api to inquiry HAL version
Bug: 161414036
Test: build pass and functions are working normally
Signed-off-by: Albert Wang <albertccwang@google.com>
Change-Id: Idb946de553b63f1d9da565133306117a6a4a7dd8
Merged-In: Idb946de553b63f1d9da565133306117a6a4a7dd8
(cherry picked from commit bd9dfea480)
During composition switch, some host PCs are taking more
time in processing the disconnect of previous functions and
enumerating the new functions. This causes the delay in
receiving the CONNECTED uevent which triggers the fallback
to default composition. Prevent this by increasing the
debounce time from 1s to 3s (which is the average time
taken by these PCs to enumerate the new functions) for
device mode state update, while keeping the debounce time
for host mode as is at 1s.
Bug: 176779207
Test: Verified enumeration of device with the delay
Change-Id: I7ff58a1a9755939ccb26dad61969902ec91f2225
Related changes are introducing new TypedXmlSerializer and
TypedXmlPullParser interfaces which offer efficient access to
primitive attributes.
This change is a purely mechanical refactoring to prepare for
upcoming data format shifts, and has no behavior changes.
Bug: 171832118
Test: manual
Exempt-From-Owner-Approval: trivial no-op refactoring
Change-Id: Ib8045ddba489c254641d6331b64355709c3f6dd7
USB Gadget V1.2 HAL include:
1. support NCM function
2. add api to inquiry USB speed
3. add api to inquiry HAL version
Bug: 168282708
Test: build pass and functions are working normally
Change-Id: Idd07c55f4610740c0cf9023391125a86ba39ddee
Some careful spot-checking has revealed common cases where it's
reasonable to blanket apply the new FLAG_IMMUTABLE option to newly
created PendingIntents. Specifically these situations:
-- Simple notification content clicks are immutable; there's no need
to communicate customized data back to the creator
-- Simple notification action clicks are immutable; there's no need
to communicate customized data back to the creator
-- Broadcast intents sent by AlarmManager are immutable; the system
dispatches them without customization.
Bug: 170165227, 170424283, 170425388, 170425877
Bug: 169791183, 170771965, 170226088, 170224928, 170767530
Test: none
Change-Id: I5ed68710d2ccad4635a30fd91136a9e6ad76a01d
This is a third CL in a chain that adjusts existing malformed code
to follow AndroidFrameworkBinderIdentity best-practices.
Specifically, if a thread clears an identity they need to restore it
to avoid obscure security vulnerabilities. In addition, the relevant
"try" block must start immediately after the identity is cleared to
ensure that its restored if/when any exceptions are thrown.
Bug: 155703208
Test: make
Exempt-From-Owner-Approval: trivial refactoring
Change-Id: I74cb958b68d55a647547aae21baff6ddc364859b
The recently added AndroidFrameworkBinderIdentity Error Prone checker
examines code to ensure that any cleared identities are restored to
avoid obscure security vulnerabilities.
This change is a purely mechanical refactoring that adds the "final"
keyword to the cleared identity to ensure that it's not accidentally
modified before eventually being cleared. Here's the exact command
used to generate this CL:
$ find . -name "*.java" -exec sed -Ei \
's/ (long \w+ = .+?clearCallingIdentity)/ final \1/' \
{} \;
Bug: 155703208
Test: make
Exempt-From-Owner-Approval: trivial refactoring
Change-Id: I832c9d70c3dfcd8d669cf71939d97837becc973a
Every time when user is switched the `UsbSettingsManager` creates a new
instance of settings object for the new user. It leads to creating
several receivers and subscribing to some broadcast messages. Then
system is switched on other user, settings for the old user are removed
from the internal container, but receivers are not unsubscribed. As a
result, the number of receivers for the `system_server` process is
continuously increased and may exceed the allowed limit.
It is proposed to explicitly unscribe receivers before remove settings.
Test: flash a DUT with user build and then run:
> run cts -m CtsDevicePolicyManagerTestCases
at least two times, check that DUT is not in the recovery mode;
or switch user ~1000 times:
$ adb shell am switch-user 0
$ adb shell am switch-user 10
and check that logcat doesn't contain a line:
E SystemServiceManager: java.lang.IllegalStateException: \
Too many receivers, total of 1000, registered
Change-Id: I4bb9feb408ce7c321a56d0e573c45c8794ed6860
Signed-off-by: Sergii Piatakov <sergii.piatakov@globallogic.com>
Broadcast intents on below control request
Log both the request and response for 51 control request (Get Protocol)
Log both the request and response for 52 control request (Identifying information)
Log both the request and response for 53 control request (Start accessory mode)
bug: 139264039
Test: Check the broadcast intent could be received
Change-Id: I7c8db41ee05398200e235cf10dde96ba89b306e8
If for some reason a USB port instance is removed, UsbPortManager
handles this by broadcasting a UsbManager.ACTION_USB_PORT_CHANGED
intent with null as the UsbPortStatus argument, leading to a null
pointer exception after UsbDeviceManager receives it. Take care of
this by checking for null in UsbHandler.updateHostState().
Bug: 156230008
Change-Id: Ia8936358c61af5b537d1eb722a55851e0061b381
Use an explicit intent and set PendingIntent.FLAG_IMMUTABLE to prevent
someone from modifying the intent from PendingIntent.send(...).
Bug: 153356209
Test: atest AdbNotificationsTest
Test: In bug, install and launch the PoC apk and give it notification
permissions. Then, with USB/Wifi debugging enabled, disconnect and connect
the device to create the adb notification. the PoC apk should not have
permission to display information from
content://com.android.settings.files/my_cache/NOTICE.html.
Change-Id: Ie49aa3cf9b33168cf1435fc2427e95aac7f4609b
(cherry picked from commit 2c03881459)
Exempt-From-Owner-Approval: approved in master
Use an explicit intent and set PendingIntent.FLAG_IMMUTABLE to prevent
someone from modifying the intent from PendingIntent.send(...).
Bug: 153356209
Test: atest AdbNotificationsTest
Test: In bug, install and launch the PoC apk and give it notification
permissions. Then, with USB/Wifi debugging enabled, disconnect and connect
the device to create the adb notification. the PoC apk should not have
permission to display information from
content://com.android.settings.files/my_cache/NOTICE.html.
Change-Id: Ie49aa3cf9b33168cf1435fc2427e95aac7f4609b
One can select USB function in Settings->System->
Developer options->Default USB configuration without
a cable connected, and the selected function will be
the default function after re-connecting. However, this
function might be restored to NONE due to ENUMERATION_TIMEOUT
if one selected the function without a cable connected.
When the device is not connected to a host, we should not
queue the ENUMERATION_TIMEOUT while switching function.
Fix it by checking connected status and also make it switch
to corresponding function if an user has selected one in the
Default USB configuration.
Bug: 150422683
Test: Switch functions from Default USB configuration for the
both cases cable connecting and disconnecting. And also try it
while there is the secure lock.
Signed-off-by: Puma Hsu <pumahsu@google.com>
Change-Id: I1933c098e47496b8d6813a5a4e295bcf12027401
There's some weird state where if persist.sys.usb.config=none,adb, then
adbd won't get started. Give back adbd start permissions to
UsbDeviceManager to see if that fixes the issue.
Bug: 150130503
Test: adb shell su 0 setprop persist.sys.usb.config none,adb; adb reboot
adb should be online after.
Change-Id: I36c6ef4b20d58570a2d51ed70088ae5c54d6687d
Merged-In: I36c6ef4b20d58570a2d51ed70088ae5c54d6687d
Exempt-From-Owner-Approval: Fix adbd offline failure
There's some weird state where if persist.sys.usb.config=none,adb, then
adbd won't get started. Give back adbd start permissions to
UsbDeviceManager to see if that fixes the issue.
Bug: 150130503
Bug: 150116813
Test: adb shell su 0 setprop persist.sys.usb.config none,adb; adb reboot
adb should be online after.
Change-Id: I36c6ef4b20d58570a2d51ed70088ae5c54d6687d
Exempt-From-Owner-Approval: Fix adbd offline failure
(cherry picked from commit 7a3800993d)
This CL has a couple of notable changes:
- Add communication layer between adbd, system server, and Settings UI
- Add system notification (Wireless debugging connected) when at least
one device is connected.
- Add trusted networks (BSSID) to the keystore.
- Changed the keystore format to:
<keyStore version="1">
<adbKey ... />
<wifiAP ... />
</keyStore>
- Currently, trusted networks don't have a expiration time. Also, only
way to clear it is by blowing up the keystore (revoke permissions).
- Add pairing mechanism:
- Using libadbwifi_pairing_connection C++ library to pair a device
using SPAKE2 protocol over TLS.
- Register MDNS service for client discovery.
- Removed ability to ctl.start/stop adbd from UsbDeviceManager
- AdbService now controls when to do this
Bug: 111434128, 119490154, 119492574
Test: Manual. From developer options:
1) USB debugging off, WiFi Debugging off
- Ensure both transports are disabled by trying to connect via WiFi and
USB.
2) USB debugging on, WiFi Debugging off
- Connections via USB are available, WiFi is disabled
3) USB debugging off, WiFi Debugging on
- Connections via WiFi are available (IP + port), USB is not available
4) USB debugging on, WiFi Debugging on
- Check both transports work
Change-Id: I9f87679d195da99a55b6faf7131da1f1af65fe01
Exempt-From-Owner-Approval: approved in aosp master
(cherry picked from commit a5969b5a1d)
This CL has a couple of notable changes:
- Add communication layer between adbd, system server, and Settings UI
- Add system notification (Wireless debugging connected) when at least
one device is connected.
- Add trusted networks (BSSID) to the keystore.
- Changed the keystore format to:
<keyStore version="1">
<adbKey ... />
<wifiAP ... />
</keyStore>
- Currently, trusted networks don't have a expiration time. Also, only
way to clear it is by blowing up the keystore (revoke permissions).
- Add pairing mechanism:
- Using libadbwifi_pairing_connection C++ library to pair a device
using SPAKE2 protocol over TLS.
- Register MDNS service for client discovery.
- Removed ability to ctl.start/stop adbd from UsbDeviceManager
- AdbService now controls when to do this
Bug: 111434128, 119490154, 119492574
Test: Manual. From developer options:
1) USB debugging off, WiFi Debugging off
- Ensure both transports are disabled by trying to connect via WiFi and
USB.
2) USB debugging on, WiFi Debugging off
- Connections via USB are available, WiFi is disabled
3) USB debugging off, WiFi Debugging on
- Connections via WiFi are available (IP + port), USB is not available
4) USB debugging on, WiFi Debugging on
- Check both transports work
Change-Id: I9f87679d195da99a55b6faf7131da1f1af65fe01
Merged-In: I9f87679d195da99a55b6faf7131da1f1af65fe01
Exempt-From-Owner-Approval: already approved
Since wireless debugging can be enabled without usb debugging enabled,
we'll need to differentiate between which transport is enabled.
Also added the internal AdbManager stubs for wireless debugging. Adding
implementation in separate CL to get around merge conflict with a SysUI
CL in the stack.
BUG: b/111434128
Test: make
Exempt-From-Owner-Approval: already approved
Change-Id: I4e1ae6398f291f321e61e7eb119564ebd5e54c2e
As part of statsd becoming a Mainline module in R, autogenerated
StatsLog.write() calls are going away and replaced by
*StatsLog.java
that is autogenerated for each module.
This CL replaces some usages of StatsLog with
FrameworkStatsLog.
Bug: 145952197
Test: m
Change-Id: Ic3b9d02ee33e8d94fdbe4e324ceb6db13fe3d2dc