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 0f3512529a5ee558b143b2a9fe5a176fb9686bd4..5089d088c71863a29d4025f8dc7ffc32d7c966b4 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 @@ -452,8 +452,15 @@ public class MainActivity extends BoundActivity { @Override protected void onConnectToThread(@Nullable ClientBackgroundThread thread) { super.onConnectToThread(thread); - if (thread == null) - connectToServer(manager.account(context.settings().preferenceLastAccount.get())); + if (thread == null) { + Account account = manager.account(context.settings().preferenceLastAccount.get()); + if (account != null) { + connectToServer(account); + } else { + setResult(RESULT_CANCELED); + finish(); + } + } else { if (context.client() != null && context.client().connectionStatus() == ConnectionChangeEvent.Status.CONNECTED) { connected(); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java index 188dd270094163b0d336a4c5c1b4c93b11c558cf..873e368013fd1edfc2eac121ba0c4bfbfe2f2a5b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java @@ -236,6 +236,7 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi if (config != null) config.networkList().removeCallback(callback); config = newconfig; + for (NetworkItem item : items) item.onDestroy(); items.clear(); itemMap.clear(); if (config != null) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java index 3c94f537ec98ff0163f85aef120fae9c4f0c4ac0..f539796d94ba238b557e680bfe141f5786306233 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java @@ -33,6 +33,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.irc.IrcCaseMappers; import de.kuschku.util.observables.callbacks.ElementCallback; +import de.kuschku.util.observables.callbacks.GeneralCallback; import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.lists.ObservableSet; import de.kuschku.util.observables.lists.ObservableSortedList; @@ -41,6 +42,7 @@ public class NetworkItem implements ParentListItem { private final AppContext context; private final QBufferViewConfig config; private final QNetwork network; + private final BufferViewConfigAdapter bufferViewConfigAdapter; private final ObservableSortedList<Buffer> buffers = new ObservableSortedList<>(new Comparator<Buffer>() { @Override public int compare(Buffer o1, Buffer o2) { @@ -86,15 +88,20 @@ public class NetworkItem implements ParentListItem { public void notifyItemChanged(Integer element) { } }; + private final UICallback callback1; + private final ElementCallback<Integer> callback2; + private final GeneralCallback<Boolean> booleanGeneralCallback; private ObservableSet<Integer> backingSet; public NetworkItem(AppContext context, QBufferViewConfig config, QNetwork network, BufferViewConfigAdapter bufferViewConfigAdapter) { this.context = context; this.config = config; this.network = network; - bufferViewConfigAdapter.showAll().addCallback(object -> setShowAll(object)); + this.bufferViewConfigAdapter = bufferViewConfigAdapter; + booleanGeneralCallback = object -> setShowAll(object); + bufferViewConfigAdapter.showAll().addCallback(booleanGeneralCallback); setShowAll(bufferViewConfigAdapter.showAll().get()); - this.buffers.addCallback(new UICallback() { + callback1 = new UICallback() { @Override public void notifyItemInserted(int position) { bufferViewConfigAdapter.notifyChildItemInserted(NetworkItem.this, position); @@ -136,8 +143,9 @@ public class NetworkItem implements ParentListItem { this.notifyItemRemoved(position); } } - }); - context.client().bufferManager().bufferIds().addCallback(new ElementCallback<Integer>() { + }; + this.buffers.addCallback(callback1); + callback2 = new ElementCallback<Integer>() { @Override public void notifyItemInserted(Integer element) { } @@ -153,7 +161,8 @@ public class NetworkItem implements ParentListItem { buffers.notifyItemChanged(buffer); } } - }); + }; + context.client().bufferManager().bufferIds().addCallback(callback2); } public void populateList(ObservableSet<Integer> backingSet) { @@ -193,4 +202,11 @@ public class NetworkItem implements ParentListItem { public String toString() { return String.valueOf(network); } + + public void onDestroy() { + this.backingSet.removeCallback(callback); + bufferViewConfigAdapter.showAll().removeCallback(booleanGeneralCallback); + this.buffers.removeCallback(callback1); + context.client().bufferManager().bufferIds().removeCallback(callback2); + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java index 22dfc87d0b0a6ab3c28c991bfd560236f997da73..c864b1d356458e38a092f05a6235e0f5d30c7604 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java @@ -183,12 +183,12 @@ public class NetworkServerEditActivity extends BoundActivity { useSSL.isChecked(), 0, host.getText().toString(), - NumberHelper.parseInt(port.getText().toString(), -1), + NumberHelper.parseInt(port.getText().toString(), 0), password.getText().toString(), useProxy.isChecked(), NetworkServer.ProxyType.fromId((int) proxyType.getSelectedItemId()), proxyHost.getText().toString(), - NumberHelper.parseInt(proxyPort.getText().toString(), -1), + NumberHelper.parseInt(proxyPort.getText().toString(), 0), proxyUser.getText().toString(), proxyPassword.getText().toString() ))); diff --git a/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java b/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java index 0fea481abd4884b7538b2f5c498211df9c7908d4..04eceab95b3cf9049fff9e88b889cc3ce004fd9f 100644 --- a/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java +++ b/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java @@ -87,7 +87,7 @@ public class ObservableSortedList<T> extends ArrayList<T> implements IObservable @Override public boolean add(T object) { int position = addInternal(object); - callback.notifyItemInserted(position); + callback.notifyItemInserted(indexOf(object)); return position != -1; } @@ -125,7 +125,7 @@ public class ObservableSortedList<T> extends ArrayList<T> implements IObservable @Override public boolean remove(Object object) { - int position = indexOf(object); + int position = super.indexOf(object); if (position == -1) { return false; } else { diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml index f76132db77cfb4d85ef97507f03768078fc7b5d2..b98b974ff72614492e8680418ed7f0e6ffac7862 100644 --- a/app/src/main/res/layout/widget_chatmessage_action.xml +++ b/app/src/main/res/layout/widget_chatmessage_action.xml @@ -51,5 +51,6 @@ android:layout_weight="1" android:clickable="true" android:textColor="?attr/colorForegroundAction" + android:textIsSelectable="true" android:textStyle="italic"/> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml index aacd2bc0e3c987c28b0a4990cc4f42d58b9c754c..33be8ade072cf3b3b94c0a3aaeb893094231ccba 100644 --- a/app/src/main/res/layout/widget_chatmessage_error.xml +++ b/app/src/main/res/layout/widget_chatmessage_error.xml @@ -52,5 +52,6 @@ android:layout_weight="1" android:clickable="true" android:textColor="?attr/colorForegroundError" + android:textIsSelectable="true" android:textStyle="italic"/> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml index 930caad64c713ddfccdda2101883eb7e2e157c80..a96ef1347d3091a1dea2b1ccdaca86f7247038ee 100644 --- a/app/src/main/res/layout/widget_chatmessage_plain.xml +++ b/app/src/main/res/layout/widget_chatmessage_plain.xml @@ -50,5 +50,6 @@ android:layout_height="wrap_content" android:layout_weight="1" android:clickable="true" - android:textColor="?attr/colorForeground"/> + android:textColor="?attr/colorForeground" + android:textIsSelectable="true"/> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml index 8255e3513b5c5ea70a68f9efd91a6d0633098201..3d0424d49bfe1d43a519ef06a4101b5cbb4ac366 100644 --- a/app/src/main/res/layout/widget_chatmessage_server.xml +++ b/app/src/main/res/layout/widget_chatmessage_server.xml @@ -52,5 +52,6 @@ android:layout_weight="1" android:clickable="true" android:textColor="?attr/colorForegroundSecondary" + android:textIsSelectable="true" android:textStyle="italic"/> </LinearLayout>