diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java index cb2af06909e15b9bfd83a438daf0e26228bcf12e..02f08b33f0794e270ae2bab3b63bdac5167d039f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java @@ -99,7 +99,7 @@ public class MainActivity extends BoundActivity { * This object encapsulates the current status of the activity – opened bufferview, for example */ Status status = new Status(); - + BufferViewConfigItem currentConfig; private AccountManager manager; @Override @@ -209,16 +209,19 @@ public class MainActivity extends BoundActivity { status.bufferViewConfigId = bufferViewConfigId; accountHeader.setActiveProfile(bufferViewConfigId, false); - if (bufferViewConfigId == -1) { - drawerLeft.removeAllItems(); - } else { - drawerLeft.removeAllItems(); + + drawerLeft.removeAllItems(); + if (currentConfig != null) + currentConfig.remove(); + currentConfig = null; + + if (bufferViewConfigId != -1) { QBufferViewManager bufferViewManager = client.bufferViewManager(); assertNotNull(bufferViewManager); QBufferViewConfig viewConfig = bufferViewManager.bufferViewConfig(bufferViewConfigId); assertNotNull(viewConfig); - new BufferViewConfigItem(drawerLeft, viewConfig, context); + currentConfig = new BufferViewConfigItem(drawerLeft, viewConfig, context); } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java index f23eb526e2a86f44244df255c38b6040444d5baf..8362f4b520609d20daca1b022de7d7f88b07061f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java @@ -35,6 +35,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.callbacks.DrawerItemCallback; +import de.kuschku.util.observables.callbacks.GeneralCallback; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.observables.lists.ObservableComparableSortedList; @@ -52,14 +53,18 @@ public class BufferViewConfigItem implements DrawerItemCallback { @NonNull private final AppContext context; + GeneralCallback rebuildNetworkList = this::rebuildNetworkList; + AdapterUICallbackWrapper callbackWrapper; + public BufferViewConfigItem(@NonNull Drawer drawer, @NonNull QBufferViewConfig config, @NonNull AppContext context) { this.drawer = drawer; this.config = config; this.context = context; manager = new BufferItemManager(context); - config.addObserver(this::rebuildNetworkList); + config.addObserver(rebuildNetworkList); assertNotNull(drawer.getItemAdapter()); - networks.addCallback(new AdapterUICallbackWrapper(drawer.getItemAdapter())); + callbackWrapper = new AdapterUICallbackWrapper(drawer.getItemAdapter()); + networks.addCallback(callbackWrapper); rebuildNetworkList(); } @@ -126,4 +131,9 @@ public class BufferViewConfigItem implements DrawerItemCallback { drawer.getAdapter().notifyAdapterSubItemsChanged(position); } } + + public void remove() { + config.deleteObserver(rebuildNetworkList); + networks.removeCallback(callbackWrapper); + } }