From ef8a5b90644b0027683849c25b27cb45bef9800a Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Fri, 12 Feb 2016 23:58:10 +0100 Subject: [PATCH] Fixed a bug where items occurred twice in the buffer list --- .../quasseldroid_ng/ui/chat/MainActivity.java | 15 +++++++++------ .../ui/chat/drawer/BufferViewConfigItem.java | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) 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 cb2af0690..02f08b33f 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 f23eb526e..8362f4b52 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); + } } -- GitLab