Status Update
Comments
em...@gmail.com <em...@gmail.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
jb...@google.com <jb...@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
em...@gmail.com <em...@gmail.com> #4
jb...@google.com <jb...@google.com> #5
Please provide a minimal sample project that reproduces this issue.
si...@gmail.com <si...@gmail.com> #6
NavGraph navGraph = navigationController.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.alternative_start_destination);
navigationController.setGraph(navGraph);
jb...@google.com <jb...@google.com> #7
Do you have a sample project so we can reproduce the issue?
me...@gmail.com <me...@gmail.com> #8
Same issue.
I am using Android Studio Koala Feature Drop | 2024.1.2 Patch 1
, com.android.tools.build:gradle:8.6.1
I agreed the code provided in #6 are the key to the reproduce the case.
em...@gmail.com <em...@gmail.com> #9
Unfortunately my project is very big and it would take days of work to clean up to get an "empty and dumb container".
The code at #6 works in a new project created from scratch, so the issue should be elsewhere.
da...@gmail.com <da...@gmail.com> #10
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3'
il...@google.com <il...@google.com> #11
Re
si...@gmail.com <si...@gmail.com> #12
sa...@gmail.com <sa...@gmail.com> #13
Hi, I added a sample project.
I also confirm that by manually importing
kotlinx-serialization-json (version 1.7.3 as an example), the compilation ends successfully.
in this project i am using 2.8.4, but it still reproduces.
The problem is definitely on the overload of the setStartDestination method which uses the generic T method, instead of the specific int
jb...@google.com <jb...@google.com>
cl...@google.com <cl...@google.com> #14
Yup java is pulling in the
ap...@google.com <ap...@google.com> #15
Project: platform/frameworks/support
Branch: androidx-main
Author: Clara Fok <
Link:
Fix wrong setStartDestination overload in Java
Expand for full commit details
Fix wrong setStartDestination overload in Java
Java compiler links to the wrong NavGraph.setStartDestination overload which takes a `startDestination: T` instead of the correct `startDestination: Int`.
The overload that takes `T` is part of the Navigation SafeArgs features for kotlin users, so we hide this overload from Java sources with @JvmSynthetic.
This annotation is binary compatible. https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.jvm/-jvm-synthetic/
Test: manual testing
Bug: 364634035
Relnote: "The kotlin-specific NavGraph.setStartDestination overload for type safety is hidden from Java sources."
Change-Id: Ic640c37f3cef5578022866529a8e576eba8d745d
Files:
- M
navigation/navigation-common/api/current.txt
- M
navigation/navigation-common/api/restricted_current.txt
- M
navigation/navigation-common/src/main/java/androidx/navigation/NavGraph.kt
Hash: ca3ba4e8cad00096390024507b7db28bbe6e2ed5
Date: Thu Nov 28 16:38:58 2024
cl...@google.com <cl...@google.com> #16
Fixed and available in navigation-2.9.0-alpha04
da...@gmail.com <da...@gmail.com> #17
I have tried this fix by using navigation-2.9.0-alpha03
and removed the temp fix of implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3'
however the same error has returned during build:
"class file for kotlinx.serialization.KSerializer not found"
The build is successful when retaining implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3'
Is this expected, or is there perhaps something else I'm not doing?
cl...@google.com <cl...@google.com> #18
Typo - it is available in navigation-2.9.0-alpha04
.
te...@gmail.com <te...@gmail.com> #19
pr...@google.com <pr...@google.com> #20
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-common:2.9.0-alpha04
da...@gmail.com <da...@gmail.com> #21
I've tested with the proposed fix and can confirm this is resolved for me.
Description
Version used: 2.8.0
Devices/Android versions reproduced on: Android 11
Previous working version: 2.7.7
Using Navigation 2.7.7 all works fine but when updating to 2.8.0 I get "error: cannot access KSerializer" ("class file for kotlinx.serialization.KSerializer not found") at this line:
- navGraph.(HERE IS THE MARKED POINT)setStartDestination(R.id.nav_permissions)
during "Task :app:compileDebugJavaWithJavac".
This piece of code placed in a MainActivity.onCreate() method:
- NavGraph navGraph = navController.getGraph();
- navGraph.setStartDestination(R.id.nav_permissions)
Those are my TOML libraries versions used in this project:
annotation = "1.8.2"
appcompat = "1.7.0"
constraintlayout = "2.1.4"
flexbox = "3.0.0"
gradle_plugin = "8.6.0"
kotlin = "1.9.24"
livedata = "2.8.5"
material = "1.12.0"
navigation = "2.8.0" (<-- returning to 2.7.7 solves this issue)
preference = "1.2.1"
sdk_compile = "34"
sdk_target = "33"
volley = "1.2.1"
Unfortunately the project is very big and I'm unable to cleanup to create a simple sample project for replicate this error.
I hope it would be enough those info.....