How to fix "Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState" after updating material lib?

Viewed 427

I updated com.google.android.material:material to version 1.2.0 and now my app blinks white-black. I see this exception in logcat:

E/Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState
    java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at android.os.Parcel.readParcelableCreator(Parcel.java:3014)
        at android.os.Parcel.readParcelable(Parcel.java:2964)
        at android.os.Parcel.readValue(Parcel.java:2866)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:3244)
        at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
        at android.os.BaseBundle.unparcel(BaseBundle.java:236)
        at android.os.Bundle.getBundle(Bundle.java:924)
        at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17)
        at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2)
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3)
        at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64)
        at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4)
        at android.os.Binder.transact(Binder.java:914)
        at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20)
        at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144)
        at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4)
        at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:1358)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:1418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:454) 
        at android.os.Parcel.readParcelableCreator(Parcel.java:3014) 
        at android.os.Parcel.readParcelable(Parcel.java:2964) 
        at android.os.Parcel.readValue(Parcel.java:2866) 
        at android.os.Parcel.readArrayMapInternal(Parcel.java:3244) 
        at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
        at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
        at android.os.Bundle.getBundle(Bundle.java:924) 
        at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17) 
        at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2) 
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3) 
        at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64) 
        at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4) 
        at android.os.Binder.transact(Binder.java:914) 
        at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20) 
        at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144) 
        at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4) 
        at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

After little research i found that androidx.fragment.app.FragmentManagerState is marked with @SuppressLint("BanParcelableUsage"). I guess that is the reason my app blinks and not working but i don't know how to fix that? I tried to google that suppress but found nothing useful.

Where should i search further? I don't remember to ever use this class explicilty. Can anyone please help?

1 Answers

finally i found a solution. as soon as i updated material library i should have used theme adjusting in a newer way:

AppCompatDelegate.setDefaultNightMode(nightMode)

instead of

val newConfig = Configuration(activity.resources.configuration)
newConfig.uiMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()
newConfig.uiMode = newConfig.uiMode or uiNightMode
activity.resources.updateConfiguration(newConfig, null)
activity.setTheme(theme)

i just have replaced these piece of code and inherit app themes from Theme.AppCompat.DayNight and now it works like a charm!

Related