Possible Controller Memory Leaks
Not sure I understand these traces correctly, but they seem to indicate that our controllers are leaking their listeners?
019-10-28 15:47:18.340 D/LeakCanary: ┬
2019-10-28 15:47:18.340 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.340 D/LeakCanary: │ Leaking: NO (InputMethodManager↓ is not leaking and a class is never leaking)
2019-10-28 15:47:18.341 D/LeakCanary: │ GC Root: System class
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ static InputMethodManager.sInstance
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (FabSpeedDial↓ is not leaking and InputMethodManager is a singleton)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ InputMethodManager.mNextServedView
2019-10-28 15:47:18.341 D/LeakCanary: ├─ io.github.kobakei.materialfabspeeddial.FabSpeedDial
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (NavDrawerActivity↓ is not leaking and View attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ mContext instance of org.briarproject.briar.android.navdrawer.NavDrawerActivity with mDestroyed = false
2019-10-28 15:47:18.341 D/LeakCanary: │ View.parent androidx.coordinatorlayout.widget.CoordinatorLayout attached as well
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mParent is set
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mAttachInfo is not null (view attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ View.mWindowAttachCount = 1
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FabSpeedDial.mContext
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.navdrawer.NavDrawerActivity
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (Activity#mDestroyed is false)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ NavDrawerActivity.activityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.activity.DaggerActivityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DaggerActivityComponent.provideFeedControllerProvider
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ dagger.internal.DoubleCheck
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DoubleCheck.instance
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.blog.FeedControllerImpl
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FeedControllerImpl.listener
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ╰→ org.briarproject.briar.android.blog.FeedFragment
2019-10-28 15:47:18.341 D/LeakCanary: Leaking: YES (Fragment#mFragmentManager is null and ObjectWatcher was watching this)
2019-10-28 15:47:18.341 D/LeakCanary: key = a5208355-72cd-4f49-80f3-3f6684261091
2019-10-28 15:47:18.341 D/LeakCanary: watchDurationMillis = 2266
2019-10-28 15:47:18.341 D/LeakCanary: retainedDurationMillis = -1
2019-10-28 15:47:18.341 D/LeakCanary: , retainedHeapByteSize=2548), ApplicationLeak(className=org.briarproject.briar.android.privategroup.list.GroupListFragment, leakTrace=
2019-10-28 15:47:18.341 D/LeakCanary: ┬
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (InputMethodManager↓ is not leaking and a class is never leaking)
2019-10-28 15:47:18.341 D/LeakCanary: │ GC Root: System class
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ static InputMethodManager.sInstance
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (FabSpeedDial↓ is not leaking and InputMethodManager is a singleton)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ InputMethodManager.mNextServedView
2019-10-28 15:47:18.341 D/LeakCanary: ├─ io.github.kobakei.materialfabspeeddial.FabSpeedDial
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (NavDrawerActivity↓ is not leaking and View attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ mContext instance of org.briarproject.briar.android.navdrawer.NavDrawerActivity with mDestroyed = false
2019-10-28 15:47:18.341 D/LeakCanary: │ View.parent androidx.coordinatorlayout.widget.CoordinatorLayout attached as well
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mParent is set
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mAttachInfo is not null (view attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ View.mWindowAttachCount = 1
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FabSpeedDial.mContext
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.navdrawer.NavDrawerActivity
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (Activity#mDestroyed is false)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ NavDrawerActivity.activityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.activity.DaggerActivityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DaggerActivityComponent.provideGroupListControllerProvider
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ dagger.internal.DoubleCheck
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DoubleCheck.instance
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.privategroup.list.GroupListControllerImpl
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ GroupListControllerImpl.listener
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ╰→ org.briarproject.briar.android.privategroup.list.GroupListFragment
2019-10-28 15:47:18.341 D/LeakCanary: Leaking: YES (Fragment#mFragmentManager is null and ObjectWatcher was watching this)
2019-10-28 15:47:18.341 D/LeakCanary: key = dd89f2de-3b6e-40e3-9d63-2484dea5702a
2019-10-28 15:47:18.341 D/LeakCanary: watchDurationMillis = 30199
2019-10-28 15:47:18.341 D/LeakCanary: retainedDurationMillis = 25198
2019-10-28 15:47:18.341 D/LeakCanary: , retainedHeapByteSize=181665)], libraryLeaks=[])