Commit Graph

111135 Commits

Author SHA1 Message Date
Bernardo Rufino
40e22dc991 Improve Bundle/PersistableBundle docs
around equals(), hashCode(), toString()

Test: TH passes
Bug: 122589814
Bug: 62611412
Bug: 122589479
Change-Id: Ia644e437f9b5642228c2a7138b0518f73ef2996c
2021-10-06 15:25:33 +00:00
Treehugger Robot
3ad4ecc296 Merge "Avoid full unparcelling where possible in Bundle" 2021-10-06 12:06:59 +00:00
Bernardo Rufino
fdd1771a4a Merge "Change defusing for lazy bundles" 2021-10-06 08:43:17 +00:00
Jacob Hobbie
183e274d57 Fixing a build breakage caused by an incorrect link. Version code for
Android T doesn't exist yet, removing the link.

Test: presubmit, comments only, should just be "is build fixed"
Bug: 202151792
Change-Id: I2123f804aaed39eb7d31f25058c59a3c1df4d7d1
2021-10-05 09:11:39 -07:00
Alex Johnston
5c35d3bce6 Merge "Revert "Revert "Cherrypicking flags and override methods for all..."" 2021-10-05 14:58:57 +00:00
Alex Johnston
4e8851d0d8 Revert "Revert "Cherrypicking flags and override methods for all..."
Revert "Revert "Required change for adding overload method for r..."

Revert submission 1842720-revert-1836473-receiverChangesinAOSP-FWJQDTADTI

Reason for revert: DroidMonitor-triggered revert due to breakage, bug b/202144225
Reverted Changes:
I03409ea39:Revert "Required change for adding overload method...
I583a11d2a:Revert "Cherrypicking flags and override methods f...

Change-Id: I5cdf9c74d51a259fdaa43dfdc9423d22145eac60
2021-10-05 14:57:10 +00:00
Bernardo Rufino
9e26212dac Avoid full unparcelling where possible in Bundle
and put a warning where it's not possible. This is to make sure we know
when to touch bundles provided by apps.

In this CL:
* deepCopy() now doesn't deserialize lazy objects before copying. It
  doesn't copy them either, it merely passes them into the new map as
  the same reference. This works because we implemented fine-grained
  locking into each lazy value, so concurrent access won't be a problem.
  Furthermore, LazyValue caches the deserialized object, so we'd still
  honor the contract of deepCopy() that "Other types of objects (such
  as Parcelable or Serializable) are referenced as-is and not copied in
  any way". I had to perform one extra check in the synchronized block
  in LazyValue to guarantee this (double-checked locking), I explain
  that in the comments.
* Removed filterValues() and codepaths that used it. This was created
  with the purpose of removing items whose classes weren't available to
  the system to prevent crashes coming from full deserialization. This
  is not a concern anymore with lazy bundle, hence we can remove the
  codepaths altogether (see email for more details).
* Put warnings in javadoc of getMap() and PeristableBundle().

Test: Boots
Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Bug: 195622897
Change-Id: I14bb6a7874814f42cbcc6b5fd372c42752aa74c8
2021-10-05 13:39:36 +01:00
Bernardo Rufino
0c5074ede7 Change defusing for lazy bundles
With lazy bundle, exceptions thrown by deserialization of custom items
moved from being thrown in initializeFromParcelLocked() (when the bundle
is first touched) to being thrown in getValueAt() (whenever the item is
retrieved), which means they were escaping the defuse logic that caught
those exceptions. So, now also catching these exceptions in
getValueAt(), however, here we can be much less drastic, instead of
erasing the bundle, we can simply remove the bad element.

This also means we don't need to log wtf in initializeFromParcelLocked()
if sShouldDefuse = true but the bundle is not marked as defusable, since
touching the bundle doesn't carry the same consequences as before
go/lazy-bundle. So, I moved that log to unparcel(itemwise = true), ie.
whenever the entire bundle is deserialized on purpose.

Now, 2 types of defusing can happen:
1. If the (custom) item we're retrieving caused the exception, we'll
   remove the item and return null.
2. If the exception was raised during partial deserialization, that is,
   during the read of the map and its basic types (while skipping custom
   types), the map will be left empty. I believe only manually written
   parcels would cause this type of exception and if an exception is
   raised here it will also be raised in the final destination too,
   afaict. Because of this, we can now touch app-provided bundles
   without fear of clobbering the data on its way to the final
   destination.

Following conversation on previous CL, narrowed exception raised in case
of unknown type to be BadParcelableException.

Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Bug: 195622897
Change-Id: I4746140f63482a9ea475aac25897a447737393e4
2021-10-05 11:40:13 +01:00
Jacky Kao
98ff8ecdaa Merge "Revert "Cherrypicking flags and override methods for allowing dy..."" 2021-10-05 01:55:36 +00:00
Jacky Kao
0827cf0cca Revert "Cherrypicking flags and override methods for allowing dy..."
Revert "Required change for adding overload method for registerR..."

Revert submission 1836473-receiverChangesinAOSP

Reason for revert: <INSERT REASONING HERE>
Reverted Changes:Making build break
I906ce9eb0:Required change for adding overload method for reg...
I9a16f566c:Cherrypicking flags and override methods for allow...

Change-Id: I583a11d2a23651db24acde303d522a5faae15c6b
2021-10-05 01:48:25 +00:00
Jacob Hobbie
316e0e8336 Merge "Cherrypicking flags and override methods for allowing dynamically registered receivers to mark themselves explicitly as exported or not exported." 2021-10-05 01:10:46 +00:00
Steven Moreland
e869287a7b Merge "Parcel: obtain(IBinder) as API" 2021-10-04 20:55:08 +00:00
Steven Moreland
c861533254 Parcel: obtain(IBinder) as API
There are two main usecases for this:
- provide an alternative route to implement features like markSensitive
  (which requires only 1 function call per class, rather than a
    function call and flag per transaction type)
- support RPC format transactions

Bug: 175814583
Test: atest android.os.ParcelTest, boot, manual
Change-Id: Ibaacc27a125a31e18d4b5889d05d12cc18d05624
2021-10-01 14:51:18 -07:00
Bernardo Rufino
5539926c4a Correct Parcel value types
* Bundle supports types char, char[], short[], float[] which were
  falling back to serializable handling in Parcel because readValue()
  didn't have specific support for those types. Adding support in Parcel
  to avoid the need for length-prefixing and to improve performance.
  Curiously some of those had read/write methods already.
* Updated Bundle to just pull the types above from the map since those
  won't be lazy values anymore.
* We were missing a few custom type containers in our list of
  length-prefixed types and we were listing Bundle unnecessarily as
  length-prefixed since Bundle itself is already length-prefixed and
  copies the correspondent section of the parcel internally.

Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Bug: 195622897
Change-Id: I1e15d59d883311685ffa32ece1f5a00e01bf6aea
2021-10-01 09:07:49 +01:00
Hao Ke
d3199a6084 Merge "Adding typed Parcel read/write APIs." 2021-09-30 21:13:54 +00:00
Steven Moreland
fb7a6db2a2 Merge "Parcel: markForBinder -> obtain(IBinder)" 2021-09-30 17:59:47 +00:00
Sam Gilbert
55fb62a515 Merge "Fix writeToParcel parameter nullability" 2021-09-30 17:08:19 +00:00
Hao Ke
8a86e7d51e Adding typed Parcel read/write APIs.
Description:

Added replacements of `readList`, `readParcelable` and
`readParcelableCreator` APIs.

To avoid unexpected types of objects being unparcelled,
ideally clients would use the readTypedXXX() methods that
take the parcelable creator. However, this won’t be an option
for use cases involving deserializing children objects
inherited from non-final parcelable or serializable objects.
Currently out of ~4k parcelable classes, only ~1.5k
are marked as “final” in the platform. Hence it would be
necessary to introduce new replacements that take
an extra Class<T> parameter and before deserializing
we check that the class written on the wire is the
same or a descendant from the one provided as argument.

Doing so could enhance the security of Parcel deserialization,
More details can be found at go/safer-parcel.

Test: atest -d android.os.cts.ParcelTest
Bug: 195622897
Change-Id: Ie9a4cb4c3d6f1805b14df7b703aef43e2993d459
2021-09-30 16:31:16 +00:00
Bernardo Rufino
1cdbc7cbd1 Merge "Log.wtf in mismatch + tests" 2021-09-30 10:17:45 +00:00
Suprabh Shukla
17a7d79ff4 Merge "Redact key value from log when DEBUG is false" 2021-09-29 23:25:21 +00:00
Steven Moreland
8c15362858 Parcel: markForBinder -> obtain(IBinder)
So that the API more closely matches intended usage, as requested.

Bug: 175814583
Test: aidl_integration_test
Change-Id: I2fb5f2d5059d7f9cd9e034a4d0d2e7aa63692067
2021-09-29 16:17:45 -07:00
Sam Gilbert
e3e9e3f6d4 Fix writeToParcel parameter nullability
Test: Existing tests
Bug: 144855352
Change-Id: Id3e0de043eee77e1dadf3b4db5d6d4bddd9e8247
2021-09-29 13:54:34 -04:00
Bernardo Rufino
95ace87925 Log.wtf in mismatch + tests
Log mismatches as wtf to be able track those. Also added unit tests
around kindofEquals() and r/w mismatches.

Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Bug: 195622897
Change-Id: I361dd144b23975eedc8b19ed65457a1c5405936e
2021-09-29 13:51:43 +01:00
Edward Savage-Jones
46b4ba4201 Redact key value from log when DEBUG is false
See bug for details

Bug: 170653379
Test: see bug
Change-Id: I713fd8c03444167faf35a170b885c38af5482e31
2021-09-29 06:53:42 +00:00
Luke Huang
2adba7dd4a Merge "Keep the native mdns daemon alive for pre-S application" 2021-09-29 03:35:20 +00:00
Evan Severson
73ebf86c32 Update permissions OWNERS
Bug: 201319595
Test: None
Change-Id: Iebb9cd731b592df2dfb79bd088e917635c21b6b1
2021-09-28 01:03:32 +00:00
Treehugger Robot
56db11dfc2 Merge "fix google widget timing issue" 2021-09-24 18:57:13 +00:00
Yifan Hong
de452e49af VintfObject.getHalNamesAndVersions report AIDL version number.
Tests that rely on this API does not attempt
to parse it, but rather treat this as an opaque
string and upload them.

Test: pass
Bug: 200729012
Change-Id: I025e2602ab506ad009ce48d6329a230f12f1060c
2021-09-23 13:21:35 -07:00
Yifan Hong
4510a23652 Add owners for VINTF.
Test: pass
Change-Id: I24b73fd00bafd8a3c2fdfdecc1c00179a18b2e89
2021-09-23 13:21:35 -07:00
Bernardo Rufino
92b71e564f Merge "Synchronize in LazyValue.get()" 2021-09-23 16:48:49 +00:00
Jacob Hobbie
f76e50ba48 Cherrypicking flags and override methods for allowing dynamically
registered receivers to mark themselves explicitly as exported or not
exported.

Test: will add tests with enforcement
Change-Id: I9a16f566c54e389743dcf460734ecdc0b1081768
2021-09-23 08:20:04 -07:00
Devin Moore
e731e209d3 Merge "ServiceManagerNative: add getConnectionInfo" 2021-09-22 16:25:48 +00:00
Bernardo Rufino
9293dca91c Synchronize in LazyValue.get()
When we use Bundle's copy constructor we perform a shallow copy of the
underlying map, so lazy values are the same across the original and the
clone. So, if we're accessing the same item backed by a lazy value in 2
different threads, each one accessing a different bundle (the original
and the clone), both would have to synchronize on a common lock.

Although Bundle is not thread-safe, we should keep the expectation that
the client only needs to properly synchronize access to one bundle, not
more. To achieve this, we synchronize on the original parcel held by
LazyValue in get(), this removes the need for the above.

Note that after we produce the lazy values and put them in the map, we
don't have a reference to mParcelledData anymore inside the Bundle, the
only objects holding a reference to that parcel are the lazy values.

Also fixed some stuff in LazyValue:
* Fixed condition inside LazyValue that used mObject == null as
  signal for "not deserialized" state since mObject can be null, so
  switched to mSource != null.
* Made mSource volatile and adjusted operations to always check it
  before, ensuring visibility of itself and mObject via happens-before.
  This works because after checking mSource, if that's null, mObject is
  guaranteed to be visible and valid, if it's not null, we can use it
  since we're in the serialized state and this works even if another
  thread deserializes in between as long as we hold on to a reference of
  mSource in a local because the parcel is still valid.
* Remove the recycling of mValueParcel, otherwise we'd need locking to
  ensure whatever was using it was still using a valid object. Decided
  to just remove recycling for now since the plan is to remove
  mValueParcel entirely when we add comparison and hasFileDescriptor()
  methods that operate on a range to Parcel.

Bug: 195622897
Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest
      android.os.BundleTest android.os.ParcelTest
Test: More tests coming
Change-Id: I501c91f505950338b23e7837e55f89b2f63ff93a
2021-09-22 11:58:24 +01:00
Roopa Sattiraju
2279402490 Merge "Adding sattiraju@ as OWNER and also changing the order of ldaps to be alphabetical" 2021-09-20 19:05:39 +00:00
Treehugger Robot
a9c6fbdff7 Merge "Make createBond(int) a system API" 2021-09-20 15:52:02 +00:00
Alice Kuo
399c36babb csip: Expose an extra data with intent and store in CachedBluetoothDevice
Bug: 178981521
Bug: 150670922
Test: Discover and pair with the CSIP supported device, and check the
pairing string in the dialog

Merged-In: I3e99c59e0cb974409291e1b4c28393106784e133
Change-Id: I3e99c59e0cb974409291e1b4c28393106784e133
2021-09-18 01:02:32 +00:00
Anton Hansson
f664101210 Merge "Move annotations in public api to frameworks/base" 2021-09-17 14:01:20 +00:00
Anton Hansson
e0f3d2348f Move annotations in public api to frameworks/base
These two are the only annotations in the android.annotations package
that are not @hide -- they are actually in the public API.

As such, they are not suitable in the annotations library. Move them
back to frameworks/base where the other core java APIs live.

Bug: 186197911
Test: m
Merged-In: Ide01e4e7840bddf1e024e9024771e528d17a1d80
Change-Id: Ide01e4e7840bddf1e024e9024771e528d17a1d80
2021-09-17 12:31:50 +00:00
Roopa Sattiraju
b3ba6cdbed Adding sattiraju@ as OWNER and also changing the order of ldaps to be
alphabetical

Tag: #feature
Bug: 200240100
Test: Manual
Change-Id: I15ccfeae1e1a061a002be9c2e202104352b1ce98
2021-09-16 23:47:19 -07:00
Qasim Javed
d93483f74b Make createBond(int) a system API
BUG: 195156317
Test: Manual

Change-Id: I10d9ac305cbc1bb28c8150e1b167a0e61ad3f04e
Merged-In: I10d9ac305cbc1bb28c8150e1b167a0e61ad3f04e
2021-09-16 22:38:47 +00:00
Aaron Huang
8216831b36 Remove forceAllNetworkTypes from test
A test should test the actual behavior as much as possible.
However, if the flag is true, matchesMobile/matchesMobileWildcard
will always return true regardless of the network type and metered.
Thus, remove this flag would be closer to the actual behavior.

Bug: 183776809
Test: atest FrameworksNetTests
Change-Id: I0907a08ca1dd8a14a738db4057ea5ff6a0cd925a
2021-09-15 18:30:09 +08:00
Roopa Sattiraju
2ef5e10f45 Merge "Changing BluetoothHeadset APIs from @hide to @SystemApi" 2021-09-15 01:12:09 +00:00
Treehugger Robot
bca93eafe5 Merge "New API for getting enabledcomponent" 2021-09-14 18:18:30 +00:00
Elliott Hughes
1353c41379 Merge "Set $TMPDIR as well as java.io.tmpdir." 2021-09-14 16:49:24 +00:00
wescande
29dbede144 New API for getting enabledcomponent
Bluetooth can no longer call SystemConfig and need to use the manager.

Bug: 190440540
Bug: 199279027
Test: Manual
Tag: #refactor
Change-Id: I065ab407c83cd2edf2244e4170496b0979ac562c
2021-09-14 16:11:19 +00:00
Łukasz Rymanowski
58ad9295c7 csip: Add Coordinated Set Identification Profile
Tag: #feature
Test: atest CsipSetCoordinatorStateMachineTest CsipSetCoordinatorServiceTest
Bug: 150670922
Sponsor: jpawlowski@
Merged-In: I67536ddcc32ace82d63e19426dce19f2bc69cdea
Change-Id: I67536ddcc32ace82d63e19426dce19f2bc69cdea
2021-09-13 19:02:10 +00:00
Devin Moore
e7864e38d1 ServiceManagerNative: add getConnectionInfo
Check vintf manifest for connection info for a given service.

Test: build
Bug: 198207801

Change-Id: Ic9b4277de2bf13c429ba4921f1196b921b2a47de
2021-09-10 22:55:07 +00:00
Roopa Sattiraju
943ac64f97 Changing BluetoothHeadset APIs from @hide to @SystemApi
For isInbandringing API - it is used in the call journey and would
change the behavior(undeterministic) of the call if not used.

Stop/StartScoUsingVirtualVoiceCall is used in the BluetoothShim layer
specifically for testing and mocking in the Android Apps. Seems
reasonable to keep this as a SystemAPI given that it has no params and
unlikely to be changed.

Bug: 195160939
Tag: #feature
Test: Manual
Merged-In: I02b2e7e5e0be3b462f7c25b655e669e2c7fe47eb
Change-Id: I02b2e7e5e0be3b462f7c25b655e669e2c7fe47eb
2021-09-09 15:48:15 -07:00
Bill Yi
56cff2cee0 Merge "Merge RQ3A.210905.001 to aosp-master - DO NOT MERGE" 2021-09-09 21:27:24 +00:00
Bernardo Rufino
730b6cfbc1 Merge "Use appendFrom in LazyValue.writeToParcel()" 2021-09-09 09:48:13 +00:00