Fixed
Status Update
Comments
mg...@google.com <mg...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
Author: Kuan-Ying Chou <
Link:
Add ability to encode/decode Java and Android types supported by Bundle
Expand for full commit details
Add ability to encode/decode Java and Android types supported by Bundle
Here's a list of types added:
Classes/type aliases:
* SavedState
* android.util.Size
* android.util.SizeF
Interfaces:
* CharSequence
* java.io.Serializable
* android.os.Parcelable
* android.os.IBinder
Collections:
* Array<out CharSequence>
* Array<out android.os.Parcelable>
* ArrayList<out CharSequence>
* ArrayList<out android.os.Parcelable>
* android.util.SparseArray<out android.os.Parcelable>
`SavedState` is supported on all platforms while the other types are supported on Android only.
Bug: 376026712
Relnote: Add ability to encode/decode Java and Android types supported by Bundle
Test: SavedStateCodecTest.kt, SavedStateCodecAndroidTest.android.kt
Change-Id: I8c10fdae09e9e10f7699838439d3f3145af32b36
Files:
- M
lifecycle/lifecycle-viewmodel-savedstate/src/androidInstrumentedTest/kotlin/androidx/lifecycle/SerializationTest.kt
- M
savedstate/savedstate-samples/src/main/java/androidx/savedstate/SavedStateCodecSamples.kt
- M
savedstate/savedstate/api/current.txt
- M
savedstate/savedstate/api/restricted_current.txt
- M
savedstate/savedstate/bcv/native/current.txt
- A
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.android.kt
- A
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.android.kt
- A
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/serializers/BuiltInSerializer.android.kt
- M
savedstate/savedstate/src/androidUnitTest/kotlin/androidx/savedstate/SavedStateCodecAndroidTest.android.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/CodecUtils.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt
- A
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/serializers/BuiltInSerializer.kt
- M
savedstate/savedstate/src/commonTest/kotlin/androidx/savedstate/SavedStateCodecTest.kt
- A
savedstate/savedstate/src/nonAndroidMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.nonAndroid.kt
- A
savedstate/savedstate/src/nonAndroidMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.nonAndroid.kt
Hash: 10cfc6b09126010659675d9e887143142458c3ac
Date: Fri Nov 15 16:46:49 2024
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
Author: Kuan-Ying Chou <
Link:
Open built-in serializers for Interface types
Expand for full commit details
Open built-in serializers for Interface types
Make `CharSequenceSerializer`, `JavaSerializableSerializer`, and `ParcelableSerializer` open generic classes instead of singleton objects so that users can inherit and define serializers for their own subtypes. This can be used to prevent `SERIALIZER_TYPE_INCOMPATIBLE` lint warning. For example, instead of suppressing the warning like this:
```
@Serializable
data class CharSequenceContainer(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(with = CharSequenceSerializer::class)
val value: String
)
```
Users can do:
```
class StringAsCharSequenceSerializer : CharSequenceSerializer<String>()
@Serializable
data class CharSequenceContainer(
@Serializable(with = StringAsCharSequenceSerializer::class)
val value: String
)
```
The serializers can also be used directly with subclasses. For example, users can now write:
```
encodeToSavedState(serializer = CharSequenceSerializer(), value = "foo")
```
Since CharSequenceSerializer is now generic, it works with value `foo` even though it has a static type of String.
We also made some changes to all the built-in serializers:
- Changeed all built-in serializers from singleton objects to classes so that they're consistent with `CharSequenceSerializer`, `JavaSerializableSerializer`, and `ParcelableSerializer`.
- Moved the actual `getXXX()`/`putXXX()` from `platformSpecificEncodeSerializableValue`/`platformSpecificDecodeSerializableValue` to `serialize()`/`deserialize()` functions of these serializers. This way we don't require special logic in `SavedStateEncoder.encodeSerializableValue()`/`SavedStateDecoder.decodeSerializableValue()`.
Relnote: Open built-in serializers for Interface types
Bug: 376026712
Test: SavedStateCodecAndroidTest
Change-Id: I28caf279b53cb69311c861e415390da7efd90c40
Files:
- M
savedstate/savedstate-samples/src/main/java/androidx/savedstate/SavedStateCodecSamples.kt
- M
savedstate/savedstate/api/current.txt
- M
savedstate/savedstate/api/restricted_current.txt
- M
savedstate/savedstate/bcv/native/current.txt
- D
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.android.kt
- D
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.android.kt
- M
savedstate/savedstate/src/androidMain/kotlin/androidx/savedstate/serialization/serializers/BuiltInSerializer.android.kt
- M
savedstate/savedstate/src/androidUnitTest/kotlin/androidx/savedstate/SavedStateCodecAndroidTest.android.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt
- M
savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/serializers/BuiltInSerializer.kt
- M
savedstate/savedstate/src/commonTest/kotlin/androidx/savedstate/SavedStateCodecTest.kt
- D
savedstate/savedstate/src/nonAndroidMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.nonAndroid.kt
- D
savedstate/savedstate/src/nonAndroidMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.nonAndroid.kt
Hash: dc358bcbe19b08a8358916297a549f0583ccd790
Date: Tue Nov 26 13:09:44 2024
Description
KotlinX Serialization has built-in serializers for common types in the Java and/or Kotlin Standard library. It is reasonable to expect that Saved State support should also provide built-in serializers for common/native Android types.
The expected types to be supported are: