Glance identifies a widget by its GlanceAppWidget subclass's canonical name: GlanceAppWidgetManager stores a providerName -> receivers map under that string, and updateAll resolves a widget's app-widget ids through it. R8 full mode horizontally merged MonthWidget into AgendaWidget — same supertype, same overrides, nothing to tell them apart — so both receivers registered under one provider name and AgendaWidget().updateAll() also matched the month widget's id, redrawing it as the agenda widget on the next PROVIDER_CHANGED. 2.16.0 is where it started because that release gave AgendaWidget the SizeMode.Exact override MonthWidget already had, which is what made the two classes mergeable. Verified in the releaseTest mapping: before, only AgendaWidget survived, carrying an $r8$classId field and MonthWidget's constructor frames; after, both classes are there under their own names. Keeping the real names also survives app updates, which would otherwise renumber the obfuscated name and orphan the stored mapping.
3.2 KiB
3.2 KiB