gregkorossy / Android-Support-Preference-V7-Fix

Android androidx.preference support library has some issues, this lib tries to fix them.
https://discord.gg/87NVsSK
Apache License 2.0
497 stars 46 forks source link

IllegalStateException on some devices #164

Closed pavel-zolotov closed 6 years ago

pavel-zolotov commented 6 years ago

I've faced a problem using RingtonePreference in my application. An attempt to show RingtonePreference dialog cause an app crash with java.lang.IllegalStateException. Some logs here:

Exception java.lang.IllegalStateException: Observer com.android.internal.database.SortCursor$2@eb0621b is already registered. android.database.Observable.registerObserver (Observable.java:49) android.database.AbstractCursor.registerDataSetObserver (AbstractCursor.java:358) android.database.CursorWrapper.registerDataSetObserver (CursorWrapper.java:222) com.android.internal.database.SortCursor.registerDataSetObserver (SortCursor.java:325) android.database.MergeCursor.registerDataSetObserver (MergeCursor.java:204) android.widget.CursorAdapter.init (CursorAdapter.java:191) android.widget.CursorAdapter. (CursorAdapter.java:128) android.widget.ResourceCursorAdapter. (ResourceCursorAdapter.java:55) android.widget.SimpleCursorAdapter. (SimpleCursorAdapter.java:78) android.support.v7.app.AlertController$AlertParams.createListView (AlertController.java:1021) android.support.v7.app.AlertController$AlertParams.apply (AlertController.java:941) android.support.v7.app.AlertDialog$Builder.create (AlertDialog.java:933) android.support.v7.preference.PreferenceDialogFragmentCompat.onCreateDialog (PreferenceDialogFragmentCompat.java:157) com.takisoft.fix.support.v7.preference.RingtonePreferenceDialogFragmentCompat.onCreateDialog (RingtonePreferenceDialogFragmentCompat.java:171) android.support.v4.app.DialogFragment.onGetLayoutInflater (DialogFragment.java:310) android.support.v4.app.Fragment.performGetLayoutInflater (Fragment.java:1132) android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1419) android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1750) android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1819) android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:797) android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2590) android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2377) android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManager.java:2332) android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:2239) android.support.v4.app.FragmentManagerImpl$1.run (FragmentManager.java:700) android.os.Handler.handleCallback (Handler.java:836) android.os.Handler.dispatchMessage (Handler.java:103) android.os.Looper.loop (Looper.java:203) android.app.ActivityThread.main (ActivityThread.java:6339) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1084) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:945)

The most weird detail of this problem that it's not common. This bug can be reproduced only on the specific devices (crashes on Moto G4 API 23, Moto E4 API 25, Lenovo K8 Note API 25). It seems like a platform issue, but is it?