WAI
Status Update
Comments
am...@google.com <am...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 8d1b84a6aabbb17cfd026e9626c612bf64a49709
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Mar 25 15:41:47 2022
Call Processor.startWork() in `DelayMetCommandHandler` from serial executor
After this CL `Processor.startWork()` is always called from serial executor,
so there is now a guarantee for other work in the serial executor, that now new
work will be started in parallel. This is important for work updating feature because
we want to guarantee that if update was successful, then next worker execution will have
updated spec.
bug: 219446409
Test: ./gradlew :work:work-runtime:cC
Change-Id: Ic9ff9e0fdcc6524b12b3761b9976f328e834e95a
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
https://android-review.googlesource.com/2042710
Branch: androidx-main
commit 8d1b84a6aabbb17cfd026e9626c612bf64a49709
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Mar 25 15:41:47 2022
Call Processor.startWork() in `DelayMetCommandHandler` from serial executor
After this CL `Processor.startWork()` is always called from serial executor,
so there is now a guarantee for other work in the serial executor, that now new
work will be started in parallel. This is important for work updating feature because
we want to guarantee that if update was successful, then next worker execution will have
updated spec.
bug: 219446409
Test: ./gradlew :work:work-runtime:cC
Change-Id: Ic9ff9e0fdcc6524b12b3761b9976f328e834e95a
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
am...@google.com <am...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 327311c283773ad6c7e3d0fdff05136df925f8ad
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 23:45:01 2022
Migrate enums to Kotlin
bug: 219446409
Test: NA
Change-Id: I6331453c65b372309ab2c7af17efa649c8feeb54
M work/work-runtime/src/main/java/androidx/work/ExistingWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/OutOfQuotaPolicy.kt
M work/work-runtime/src/main/java/androidx/work/NetworkType.kt
M work/work-runtime/src/main/java/androidx/work/ExistingPeriodicWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/BackoffPolicy.kt
https://android-review.googlesource.com/2052912
Branch: androidx-main
commit 327311c283773ad6c7e3d0fdff05136df925f8ad
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 23:45:01 2022
Migrate enums to Kotlin
bug: 219446409
Test: NA
Change-Id: I6331453c65b372309ab2c7af17efa649c8feeb54
M work/work-runtime/src/main/java/androidx/work/ExistingWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/OutOfQuotaPolicy.kt
M work/work-runtime/src/main/java/androidx/work/NetworkType.kt
M work/work-runtime/src/main/java/androidx/work/ExistingPeriodicWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/BackoffPolicy.kt
sa...@google.com <sa...@google.com>
sa...@google.com <sa...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 12a144ae86997cb6a69545b1dd8f1cc559220772
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 23:38:59 2022
Move enum file from *.java -> *.kt
bug: 219446409
Test: NA
Change-Id: I0ce0df156dbc1c2820b62215fbfb0c0b07add20a
M work/work-runtime/src/main/java/androidx/work/ExistingWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/OutOfQuotaPolicy.kt
M work/work-runtime/src/main/java/androidx/work/NetworkType.kt
M work/work-runtime/src/main/java/androidx/work/ExistingPeriodicWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/BackoffPolicy.kt
https://android-review.googlesource.com/2052911
Branch: androidx-main
commit 12a144ae86997cb6a69545b1dd8f1cc559220772
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 23:38:59 2022
Move enum file from *.java -> *.kt
bug: 219446409
Test: NA
Change-Id: I0ce0df156dbc1c2820b62215fbfb0c0b07add20a
M work/work-runtime/src/main/java/androidx/work/ExistingWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/OutOfQuotaPolicy.kt
M work/work-runtime/src/main/java/androidx/work/NetworkType.kt
M work/work-runtime/src/main/java/androidx/work/ExistingPeriodicWorkPolicy.kt
M work/work-runtime/src/main/java/androidx/work/BackoffPolicy.kt
ro...@google.com <ro...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-main
commit 9d5b985fd5b1e65c2e0f2593d10eb956f1c80580
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 17:43:51 2022
Restrict schedulers to cancel only their own work.
Previously schedulers were able to cancel a work that
they haven't started. E.g. `CommandHandler` on cancel
signal were calling "stopWork(workId)" unconditionally,
no matter if it actually started that work or not
bug: 219446409
Test: refactoring
Change-Id: Ia48e3239c3302d7b6ff1114c3baa52a62a40ee32
M work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTest.java
M work/work-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
A work/work-runtime/src/main/java/androidx/work/impl/WorkRunId.kt
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTests.kt
M work/work-runtime/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
https://android-review.googlesource.com/2052907
Branch: androidx-main
commit 9d5b985fd5b1e65c2e0f2593d10eb956f1c80580
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Fri Apr 01 17:43:51 2022
Restrict schedulers to cancel only their own work.
Previously schedulers were able to cancel a work that
they haven't started. E.g. `CommandHandler` on cancel
signal were calling "stopWork(workId)" unconditionally,
no matter if it actually started that work or not
bug: 219446409
Test: refactoring
Change-Id: Ia48e3239c3302d7b6ff1114c3baa52a62a40ee32
M work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTest.java
M work/work-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
A work/work-runtime/src/main/java/androidx/work/impl/WorkRunId.kt
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTests.kt
M work/work-runtime/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
sa...@google.com <sa...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-main
commit c8f83d8b1fe59a51ab60124c1604b7f9b83bac78
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Thu Apr 07 19:13:33 2022
Improve implementation note on WorkRunId
bug: 219446409
Test: NA
Change-Id: If923e68aefba620c97a1e9373351e67d813df765
M work/work-runtime/src/main/java/androidx/work/impl/WorkRunId.kt
https://android-review.googlesource.com/2057643
Branch: androidx-main
commit c8f83d8b1fe59a51ab60124c1604b7f9b83bac78
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Thu Apr 07 19:13:33 2022
Improve implementation note on WorkRunId
bug: 219446409
Test: NA
Change-Id: If923e68aefba620c97a1e9373351e67d813df765
M work/work-runtime/src/main/java/androidx/work/impl/WorkRunId.kt
si...@digibites.nl <si...@digibites.nl> #7
Project: platform/frameworks/support
Branch: androidx-main
commit b1e1b4714f013edda06df4b0c92d18c28e5b958d
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Wed May 25 11:51:51 2022
Use WorkSpec in ConstraintsTracker
Going forward generation will be added to WorkSpec,
so it is important to know constraints for which
workspec exactly were met.
bug: 219446409
Test: Refactoring
Change-Id: I9beb5bc1a0345380daaf4fa2c1974eab213c9577
M work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.kt
M work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
M work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt
https://android-review.googlesource.com/2115798
Branch: androidx-main
commit b1e1b4714f013edda06df4b0c92d18c28e5b958d
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Wed May 25 11:51:51 2022
Use WorkSpec in ConstraintsTracker
Going forward generation will be added to WorkSpec,
so it is important to know constraints for which
workspec exactly were met.
bug: 219446409
Test: Refactoring
Change-Id: I9beb5bc1a0345380daaf4fa2c1974eab213c9577
M work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.kt
M work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
M work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt
ro...@google.com <ro...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-main
commit a7d319b96a0622fcc9219ad4b156e4fafa215fa5
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Mon Jun 13 17:02:04 2022
Rename `WorkRunId` to `StartStopToken`
bug: 219446409
Test: refacting
Change-Id: I312ad14013d9931ec485fbccee27048ad697479c
M work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/StartStopToken.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTest.java
M work/work-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTests.kt
M work/work-runtime/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
https://android-review.googlesource.com/2123382
Branch: androidx-main
commit a7d319b96a0622fcc9219ad4b156e4fafa215fa5
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Mon Jun 13 17:02:04 2022
Rename `WorkRunId` to `StartStopToken`
bug: 219446409
Test: refacting
Change-Id: I312ad14013d9931ec485fbccee27048ad697479c
M work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/StartStopToken.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
M work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTest.java
M work/work-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ProcessorTests.kt
M work/work-runtime/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
M work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
wa...@gmail.com <wa...@gmail.com> #9
Project: platform/frameworks/support
Branch: androidx-main
commit 1430b5a035fb33c4464e24396c547cf1efa9bbb3
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Mon Jun 13 15:03:55 2022
Read WorkSpec in advance in Processor
It is important for updates of periodic workers,
because in case of periodic workers workspec could be
updated during the run of the worker. So Worker should
have all required information at the moment of the start
in order to stay consistent.
bug: 219446409
Test: refactoring
Change-Id: I6a29381b20919cda88461c2960b74dd0b7107a26
M work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ControlledWorkerWrapperTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/WorkerWrapperForegroundTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java
M work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt
https://android-review.googlesource.com/2123378
Branch: androidx-main
commit 1430b5a035fb33c4464e24396c547cf1efa9bbb3
Author: Sergey Vasilinets <sergeyv@google.com>
Date: Mon Jun 13 15:03:55 2022
Read WorkSpec in advance in Processor
It is important for updates of periodic workers,
because in case of periodic workers workspec could be
updated during the run of the worker. So Worker should
have all required information at the moment of the start
in order to stay consistent.
bug: 219446409
Test: refactoring
Change-Id: I6a29381b20919cda88461c2960b74dd0b7107a26
M work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/ControlledWorkerWrapperTest.kt
M work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
M work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/WorkerWrapperForegroundTest.kt
M work/work-runtime/src/main/java/androidx/work/impl/Processor.java
M work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java
M work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt
Description
We publish an app that provides localized date/time formats. The default configuration is localized for international english. Overrides for US English are present in /values-en-rUS/ string files. Before Android N, this ensures that users with an non-US English locale see international formats. This includes both en-GB users as well as users with a custom locale such as en-DE. However, on Android N all users with an en-* locale see US English values.
Example:
res/values/strings.xml: @string/dateformat = dd-mm-yyyy
res/values-en-rUS/strings.xml: @string/dateformat = mm/dd/yyyy
Before N:
- User with en-GB sees dd-mm-yyyy.
- User with en-US sees mm/dd/yyyy.
On Android N:
- Both users see mm/dd/yyyy.
A second case, with a much greater impact, concerns localization for Chinese. Nearly all zh-* locales except zh-CN use Traditional Chinese. If I write an app for the Chinese market, my default /values/ folder contains resources localized in Traditional Chinese. Overrides for Simplified are then present in the /values-zh-rCN/ folder.
This case would also break on Android N and all my users would see Simplified Chinese (values-zh-rCN) values.
The current change in the resource resolution algorithm impacts all apps that
- provide strings for their default language in res/values
- have any override for their default language with a region qualifier
It is also not possible to provide resources for the default language only in the values-xx folder (where 'xx' is the language code) since all resources must have a (fallback) value in the default configuration.
Examples:
res/values contains English strings (en)
res/values-en-rGB contains British English strings (en-GB) like "Colour"
workaround in N: duplicate all res/values resources into res/values-en
res/values contains Traditional Chinese strings (zh)
res/values-zh-rCN contains Simplified Chinese strings (zh-CN)
workaround in N: duplicate all res/values resources into res/values-zh
The main issue is that you currently cannot specify for which locale res/values/ is localized. If res/values could be configured to match a certain locale, like "en", you don't need to duplicate resources.
The attached sample project, APK and screenshots showcase the expected and actual behavior.
* Which Developer Preview (or Android Beta) build are you using? (for
example, NPC91K). See Settings > About phone > Build number
Android N Developer Preview 3 (NPD35K)
* What device are you using? (for example, Nexus 6P)
Emulator & Nexus 9 tablet
* What are the steps to reproduce the problem? (Please provide the
minimal reproducible test case.)
1. Have a resource with override value in eu-US configuration.
2. Set locale to en-GB (done programmatically in sample).
3. Resolve resource (@string/resolved_locale in sample).
* What was the expected result?
Expected resource to resolve to value in default configuration.
* What was the actual result?
Resource resolved to value in en-US configuration.
* Relevant logcat output.
(none)