[prjkt.io] sykopompos:
I'll fix your dubious accuracy.

To understand the widget and even the splash screen problem, you have to understand how oms works vs rro plus a bit about what was done for day/night so let's start off with day/night.

Google made a lot of changes in the way that resources were handled for day/night so drawables can change, resources can be cached and new versions of existing drawables can mutate (change colors and such) (also animators)

How they did this from a easy to understand explaining is "changing configurations", there is code on drawables and other resources where they have a state which can be changed, when day/night was called it had the support to tell the resource to change because it had a new configuration so if the theme (important to note here, a android theme is not the same as what you might think of a cmte or substratum theme but more of material light, material dark and holo) attributes had changed then the resource could change if the state had changed and could invalidate the resource to tell it to reload from resources.

(Preloaded drawables got held in a constant state which kept a deep copy of the resource so when it invalidated the resource, it would grab the constant state cache version instead of grabbing the resource fresh)

Now on to rro, rro actually was a main level resource and was attached as part of the assets of a app (was part of the application info and so forth on loading) so it was part of the initial permanent assets of an app (during it's life cycle) so it was essentially part of the app loading.

Now on to OMS and what is the big difference between it and rro.

Unlike rro, themed resources are not a main asset, during application load (activity start) the app is loaded up based on client record, application info/package info, persistent data and so forth and with oms, it tells the overlay manager service to tell it what overlays are enabled and give it the asset paths of those enabled overlays and then adds them to the asset paths of the app.

After it binds the assets, then oms has a new function where it tells activity manager to reload the apps assets during the first transaction which in turns calls a configuration change and you get the whole process of reloading assets, mutating and invalidating to fetch new.

Now that it is explained a bit better now to explain the problems.

Splash screens.

When oms binds the assets, it is never a permanent part of the resources of a app and isn't save to persistent data so the next time you open the app, it has to go through that process again.

This has two effects is that if the overlay got removed or damaged, this effect is completely dynamic and the theme isn't saved as part of the app so you can dynamicly change assets on the fly without having to restart the app or kill it off for effect, it is also very very light on the memory and no hackery is needed to get new assets in.

Unfortunately since the splash is there specifically for the loading phase of the app, the theme assets don't kick in till the update assets is called.

This itself prevents a tricky problem of trying to get it prethemed without being a persistent part of the app and bringing in the downsides quite a difficult task which requires a fine line balance (if you deleted a overlay in recovery then you wouldn't be able to open the app because assets are missing),(along with a whole slew of other issues)

Widgets and other missing things.

Widgets and other things getting themed, it is important to note that google made most of these changes specifically for day/night so if it wasn't something they planned to have change then it doesn't have configuration changing code so it is a matter of tracing down what needs to have the code to handle a configuration change and add it which is a lengthy process because you want to add it at the root instead of adding it to each widget.

Splashes has been a higher priority then widgets and is proving to be a difficult one without breaking the benefits and dynamic nature of OMS (or introducing new failure points)