Fixed
Status Update
Comments
ra...@google.com <ra...@google.com> #2
Hello, I want to ask about this feature. Is there any update on this?
st...@baramundi.de <st...@baramundi.de> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 8c85cb8b91da49a3ae39d5d4e3a9475d1b4c58a7
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Mon Jan 29 18:42:33 2024
Convert `ViewModel` to Kotlin
* Convert `ViewModel` to Kotlin, last java file in the `:viewmodel` artifact.
* Add `@Suppress` to statements with warnings that are intentional, to better communicate they are there for a reason. Intentional warnings state for code that is required for the library to work as expected.
* Update docs to follow Kotlin extensions and conventions (see aosp/2930010).
* Remove hungary notation from private variables, following Kotlin conventions.
* Update code to be idiomatic Kotlin (such as `closeable += closeables`). Changes are only aesthetical, no logic has changed.
* Merge `ViewModelCoroutineScope` into `ViewModel`, now that both files are Kotlin and are placed in the same module.
RelNote: "`ViewModel` is now in Kotlin"
Test: ./gradlew checkApi
Test: ViewModelTest
Bug: 214568825
Change-Id: I16f26813d862c76154739888bb631c214fa1c810
M lifecycle/lifecycle-viewmodel/api/current.txt
M lifecycle/lifecycle-viewmodel/api/restricted_current.txt
M lifecycle/lifecycle-viewmodel/src/androidTest/java/androidx/lifecycle/ViewModelTest.kt
D lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModel.java
A lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModel.kt
D lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelCoroutineScope.kt
M lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelStore.kt
https://android-review.googlesource.com/2936170
Branch: androidx-main
commit 8c85cb8b91da49a3ae39d5d4e3a9475d1b4c58a7
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Mon Jan 29 18:42:33 2024
Convert `ViewModel` to Kotlin
* Convert `ViewModel` to Kotlin, last java file in the `:viewmodel` artifact.
* Add `@Suppress` to statements with warnings that are intentional, to better communicate they are there for a reason. Intentional warnings state for code that is required for the library to work as expected.
* Update docs to follow Kotlin extensions and conventions (see aosp/2930010).
* Remove hungary notation from private variables, following Kotlin conventions.
* Update code to be idiomatic Kotlin (such as `closeable += closeables`). Changes are only aesthetical, no logic has changed.
* Merge `ViewModelCoroutineScope` into `ViewModel`, now that both files are Kotlin and are placed in the same module.
RelNote: "`ViewModel` is now in Kotlin"
Test: ./gradlew checkApi
Test: ViewModelTest
Bug: 214568825
Change-Id: I16f26813d862c76154739888bb631c214fa1c810
M lifecycle/lifecycle-viewmodel/api/current.txt
M lifecycle/lifecycle-viewmodel/api/restricted_current.txt
M lifecycle/lifecycle-viewmodel/src/androidTest/java/androidx/lifecycle/ViewModelTest.kt
D lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModel.java
A lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModel.kt
D lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelCoroutineScope.kt
M lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelStore.kt
ra...@google.com <ra...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit d93ce790debd7791098ff45977e4ba92552996b1
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Tue Jan 30 10:31:40 2024
Configure Kotlin Multiplatform in `lifecycle-viewmodel` artifact
* Adds multiplatform Gradle configuration to `lifecycle-viewmodel`, including changing the folder structure.
* Once aosp/2930010, aosp/2936170 and this change is merged, we will follow-up the work of b/214568825 with moving the implementations from `androidMain` to `commonMain`, and `androidUnitTest` to `commonTest`.
Test: ./gradlew checkApi
Test: ANDROIDX_PROJECTS=INFRAROGUE ./gradlew lifecycle:lifecycle-viewmodel:allTests
Bug: 214568825
Change-Id: Ib5a796dd743c9cc2ad83d7691a1ee656d3169583
M lifecycle/lifecycle-viewmodel/build.gradle
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/AndroidViewModelFactoryTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/CreationExtrasTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/ViewModelTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/ViewTreeViewModelStoreOwnerTest.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/AndroidManifest.xml
M lifecycle/lifecycle-viewmodel/src/androidMain/baseline-prof.txt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/AndroidViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/HasDefaultViewModelProviderFactory.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelLazy.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelProvider.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelStore.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewTreeViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewTreeViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/viewmodel/CreationExtras.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/res/values/ids.xml
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelLazyTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelProviderReifiedTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelProviderTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelStoreTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/viewmodel/ViewModelInitializerTest.kt
M settings.gradle
https://android-review.googlesource.com/2935179
Branch: androidx-main
commit d93ce790debd7791098ff45977e4ba92552996b1
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Tue Jan 30 10:31:40 2024
Configure Kotlin Multiplatform in `lifecycle-viewmodel` artifact
* Adds multiplatform Gradle configuration to `lifecycle-viewmodel`, including changing the folder structure.
* Once aosp/2930010, aosp/2936170 and this change is merged, we will follow-up the work of
Test: ./gradlew checkApi
Test: ANDROIDX_PROJECTS=INFRAROGUE ./gradlew lifecycle:lifecycle-viewmodel:allTests
Bug: 214568825
Change-Id: Ib5a796dd743c9cc2ad83d7691a1ee656d3169583
M lifecycle/lifecycle-viewmodel/build.gradle
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/AndroidViewModelFactoryTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/CreationExtrasTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/ViewModelTest.kt
M lifecycle/lifecycle-viewmodel/src/androidInstrumentedTest/kotlin/androidx/lifecycle/ViewTreeViewModelStoreOwnerTest.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/AndroidManifest.xml
M lifecycle/lifecycle-viewmodel/src/androidMain/baseline-prof.txt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/AndroidViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/HasDefaultViewModelProviderFactory.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelLazy.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelProvider.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelStore.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewTreeViewModel.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewTreeViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/viewmodel/CreationExtras.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.kt
M lifecycle/lifecycle-viewmodel/src/androidMain/res/values/ids.xml
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelLazyTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelProviderReifiedTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelProviderTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelStoreTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/ViewModelTest.kt
M lifecycle/lifecycle-viewmodel/src/androidUnitTest/kotlin/androidx/lifecycle/viewmodel/ViewModelInitializerTest.kt
M settings.gradle
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-main
commit 326c13fc1898318463f41acf070d4f6e78e9f694
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Tue Feb 13 14:56:57 2024
Use `AutoCloseable` in `ViewModel`
* Replace `Closeable` by `AutoCloseable`.
* Kotlin Multiplatform does not support `Closeable`, only `AutoCloseable`. The change is required to migrate `lifecycle-viewmodel` to Multiplatform.
* Keep previous stable constructor as `Deprecated(level = DeprecationLevel.HIDDEN)` to not break backward compatibility.
* Set `bagOfTags` and `closeables` to `nullable` to remove redundant `@Suppress("RedundantNullableReturnType")` on each `null` check.
* Add KDoc to `bagOfTags` to better explain the expected behaviour, and compatibility considerations.
RelNote: "`ViewModel` now uses `AutoCloseable` instead of `Closeable`. That is a backward compatible change, introduced to allow `lifecycle-viewmodel` to migrate to Kotlin Multiplatform."
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Change-Id: I27f8e7c85e59aae7c268d66d98f70d717d6f3c83
M lifecycle/lifecycle-viewmodel/api/current.txt
M lifecycle/lifecycle-viewmodel/api/restricted_current.txt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.kt
https://android-review.googlesource.com/2960843
Branch: androidx-main
commit 326c13fc1898318463f41acf070d4f6e78e9f694
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Tue Feb 13 14:56:57 2024
Use `AutoCloseable` in `ViewModel`
* Replace `Closeable` by `AutoCloseable`.
* Kotlin Multiplatform does not support `Closeable`, only `AutoCloseable`. The change is required to migrate `lifecycle-viewmodel` to Multiplatform.
* Keep previous stable constructor as `Deprecated(level = DeprecationLevel.HIDDEN)` to not break backward compatibility.
* Set `bagOfTags` and `closeables` to `nullable` to remove redundant `@Suppress("RedundantNullableReturnType")` on each `null` check.
* Add KDoc to `bagOfTags` to better explain the expected behaviour, and compatibility considerations.
RelNote: "`ViewModel` now uses `AutoCloseable` instead of `Closeable`. That is a backward compatible change, introduced to allow `lifecycle-viewmodel` to migrate to Kotlin Multiplatform."
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Change-Id: I27f8e7c85e59aae7c268d66d98f70d717d6f3c83
M lifecycle/lifecycle-viewmodel/api/current.txt
M lifecycle/lifecycle-viewmodel/api/restricted_current.txt
M lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.kt
ap...@google.com <ap...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-main
commit ee7828cd1baf3375fee05b3b17b4cb39706576ac
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 15:56:08 2024
Move `ViewModel` files without deps to `commonMain`
* Move all source files that does not have a dependency with `ViewModelProvider` from `androidMain` to `commonMain`
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:validateMultiplatformSourceSetNaming
Change-Id: I9f81b600ae052ca979b3aae6c3b2b3954efb9e3a
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModelStore.kt
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/CreationExtras.kt
https://android-review.googlesource.com/2965065
Branch: androidx-main
commit ee7828cd1baf3375fee05b3b17b4cb39706576ac
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 15:56:08 2024
Move `ViewModel` files without deps to `commonMain`
* Move all source files that does not have a dependency with `ViewModelProvider` from `androidMain` to `commonMain`
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:validateMultiplatformSourceSetNaming
Change-Id: I9f81b600ae052ca979b3aae6c3b2b3954efb9e3a
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModelStore.kt
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModelStoreOwner.kt
M lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/CreationExtras.kt
st...@baramundi.de <st...@baramundi.de> #7
Project: platform/frameworks/support
Branch: androidx-main
commit 965e5b9bfa6b9074903a5ca737af623e4313272c
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 11:07:57 2024
Set-up common dependencies for ViewModel KMP
* Includes all multiplatform version from `androidMain.dependencies`.
Bug: 214568825
Test: manual (project builds)
Change-Id: I55538f4640072bca8ac9305fe0562a5e0a55a20c
M lifecycle/lifecycle-viewmodel/build.gradle
https://android-review.googlesource.com/2965062
Branch: androidx-main
commit 965e5b9bfa6b9074903a5ca737af623e4313272c
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 11:07:57 2024
Set-up common dependencies for ViewModel KMP
* Includes all multiplatform version from `androidMain.dependencies`.
Bug: 214568825
Test: manual (project builds)
Change-Id: I55538f4640072bca8ac9305fe0562a5e0a55a20c
M lifecycle/lifecycle-viewmodel/build.gradle
ra...@google.com <ra...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-main
commit 5c19d5033cbfe2c9be61522f6d56e947fcf0ee0e
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 11:49:48 2024
Migrate `ViewModel` class to KMP
* Includes `atomicfu` as a dependency. We need access to `kotlinx.atomicfu.locks.synchronized` for converting the internal `ViewModel` synchronization logic to multiplatform.
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Change-Id: I18fc338a41c9d032163f686892e04212a881face
M lifecycle/lifecycle-viewmodel/build.gradle
D lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.android.kt
A lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt
A lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelImpl.kt
A lifecycle/lifecycle-viewmodel/src/jvmMain/kotlin/androidx/lifecycle/ViewModel.jvm.kt
A lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModel.native.kt
https://android-review.googlesource.com/2965063
Branch: androidx-main
commit 5c19d5033cbfe2c9be61522f6d56e947fcf0ee0e
Author: Marcello Galhardo <mgalhardo@google.com>
Date: Thu Feb 15 11:49:48 2024
Migrate `ViewModel` class to KMP
* Includes `atomicfu` as a dependency. We need access to `kotlinx.atomicfu.locks.synchronized` for converting the internal `ViewModel` synchronization logic to multiplatform.
Bug: 214568825
Test: ./gradlew :lifecycle:lifecycle-viewmodel:checkApi
Test: ./gradlew :lifecycle:lifecycle-viewmodel:connectedDebugAndroidTest
Test: ./gradlew :lifecycle:lifecycle-viewmodel:testDebugUnitTest
Change-Id: I18fc338a41c9d032163f686892e04212a881face
M lifecycle/lifecycle-viewmodel/build.gradle
D lifecycle/lifecycle-viewmodel/src/androidMain/kotlin/androidx/lifecycle/ViewModel.android.kt
A lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt
A lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelImpl.kt
A lifecycle/lifecycle-viewmodel/src/jvmMain/kotlin/androidx/lifecycle/ViewModel.jvm.kt
A lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModel.native.kt
Description
Version used: 1.0.0-alpha08
Devices/Android versions reproduced on: Moto G5s Plus, Android 7.1.1 / Huawai P20 lite, Android 8.0.0
We can reproduce a crash of the workmanager on some devices.
In our code we enqueue a UniqueWork with ExistingWorkPolicy.REPLACE, as soon as it finishes with State.SUCEEDED we enqueue it again. There is always only one job at the time.
After about 100 jobs the workmanager crashes with: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs.
It looks like the workmanager does not prune the finished jobs fast enough, and they count as 'sheduled' job, even if they are finished?
The crash is reproducible on the Moto G5s Plus and Huawai P20 lite. But it behaves very inconsistent, sometimes it occurs on the first run, sometimes only after a few restarts of the app. But we cannot reproduce it on the Pixel 2 XL or the emulator.
Calling pruneWork() before enqueue() doesn't fix the problem.
Reducing the result lifetime by calling keepResultsForAtLeast(..) doesn't work as well.
We provided a sample app which triggers the issue.