From ce2ba629bd91897f74e2d1dee38f90671b0f28f8 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Mon, 30 Apr 2018 23:38:29 +0200 Subject: very much unoptimized search functionality --- .../de/pixart/messenger/utils/Cancellable.java | 34 ++++++++++++++++++++++ .../java/de/pixart/messenger/utils/GeoHelper.java | 7 +++-- .../utils/ReplacingSerialSingleThreadExecutor.java | 7 +++++ .../utils/SerialSingleThreadExecutor.java | 2 +- .../java/de/pixart/messenger/utils/UIHelper.java | 7 +++-- 5 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/pixart/messenger/utils/Cancellable.java (limited to 'src/main/java/de/pixart/messenger/utils') diff --git a/src/main/java/de/pixart/messenger/utils/Cancellable.java b/src/main/java/de/pixart/messenger/utils/Cancellable.java new file mode 100644 index 000000000..73da4422d --- /dev/null +++ b/src/main/java/de/pixart/messenger/utils/Cancellable.java @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2018, Daniel Gultsch All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this +* list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package de.pixart.messenger.utils; + + +public interface Cancellable { + void cancel(); +} \ No newline at end of file diff --git a/src/main/java/de/pixart/messenger/utils/GeoHelper.java b/src/main/java/de/pixart/messenger/utils/GeoHelper.java index e8ca33fb3..d2963f206 100644 --- a/src/main/java/de/pixart/messenger/utils/GeoHelper.java +++ b/src/main/java/de/pixart/messenger/utils/GeoHelper.java @@ -13,6 +13,7 @@ import java.util.regex.Pattern; import de.pixart.messenger.Config; import de.pixart.messenger.entities.Contact; import de.pixart.messenger.entities.Conversation; +import de.pixart.messenger.entities.Conversational; import de.pixart.messenger.entities.Message; import de.pixart.messenger.ui.ShowLocationActivity; @@ -62,11 +63,11 @@ public class GeoHelper { } catch (NumberFormatException nfe) { return intents; } - final Conversation conversation = message.getConversation(); + final Conversational conversation = message.getConversation(); String label; - if (conversation.getMode() == Conversation.MODE_SINGLE && message.getStatus() == Message.STATUS_RECEIVED) { + if (conversation instanceof Conversation && conversation.getMode() == Conversation.MODE_SINGLE && message.getStatus() == Message.STATUS_RECEIVED) { try { - label = "(" + URLEncoder.encode(message.getConversation().getName().toString(), "UTF-8") + ")"; + label = "(" + URLEncoder.encode(((Conversation) conversation).getName().toString(), "UTF-8") + ")"; } catch (UnsupportedEncodingException e) { label = ""; } diff --git a/src/main/java/de/pixart/messenger/utils/ReplacingSerialSingleThreadExecutor.java b/src/main/java/de/pixart/messenger/utils/ReplacingSerialSingleThreadExecutor.java index 22ad7f7a4..7bd33eff4 100644 --- a/src/main/java/de/pixart/messenger/utils/ReplacingSerialSingleThreadExecutor.java +++ b/src/main/java/de/pixart/messenger/utils/ReplacingSerialSingleThreadExecutor.java @@ -2,6 +2,10 @@ package de.pixart.messenger.utils; public class ReplacingSerialSingleThreadExecutor extends SerialSingleThreadExecutor { + public ReplacingSerialSingleThreadExecutor(String name) { + super(name, false); + } + public ReplacingSerialSingleThreadExecutor(boolean prepareLooper) { super(ReplacingSerialSingleThreadExecutor.class.getName(), prepareLooper); } @@ -9,6 +13,9 @@ public class ReplacingSerialSingleThreadExecutor extends SerialSingleThreadExecu @Override public synchronized void execute(final Runnable r) { tasks.clear(); + if (active != null && active instanceof Cancellable) { + ((Cancellable) active).cancel(); + } super.execute(r); } } diff --git a/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java b/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java index 1562160fd..1a1280d5a 100644 --- a/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java +++ b/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java @@ -13,7 +13,7 @@ public class SerialSingleThreadExecutor implements Executor { private final Executor executor = Executors.newSingleThreadExecutor(); final ArrayDeque tasks = new ArrayDeque<>(); - private Runnable active; + protected Runnable active; private final String name; public SerialSingleThreadExecutor(String name) { diff --git a/src/main/java/de/pixart/messenger/utils/UIHelper.java b/src/main/java/de/pixart/messenger/utils/UIHelper.java index ea9f97f98..290a5829d 100644 --- a/src/main/java/de/pixart/messenger/utils/UIHelper.java +++ b/src/main/java/de/pixart/messenger/utils/UIHelper.java @@ -18,6 +18,7 @@ import de.pixart.messenger.R; import de.pixart.messenger.crypto.axolotl.AxolotlService; import de.pixart.messenger.entities.Contact; import de.pixart.messenger.entities.Conversation; +import de.pixart.messenger.entities.Conversational; import de.pixart.messenger.entities.ListItem; import de.pixart.messenger.entities.Message; import de.pixart.messenger.entities.MucOptions; @@ -444,7 +445,7 @@ public class UIHelper { } public static String getMessageDisplayName(final Message message) { - final Conversation conversation = message.getConversation(); + final Conversational conversation = message.getConversation(); if (message.getStatus() == Message.STATUS_RECEIVED) { final Contact contact = message.getContact(); if (conversation.getMode() == Conversation.MODE_MULTI) { @@ -457,8 +458,8 @@ public class UIHelper { return contact != null ? contact.getDisplayName() : ""; } } else { - if (conversation.getMode() == Conversation.MODE_MULTI) { - return conversation.getMucOptions().getSelf().getName(); + if (conversation instanceof Conversation && conversation.getMode() == Conversation.MODE_MULTI) { + return ((Conversation) conversation).getMucOptions().getSelf().getName(); } else { final Jid jid = conversation.getAccount().getJid(); return jid.getLocal() != null ? jid.getLocal() : Jid.ofDomain(jid.getDomain()).toString(); -- cgit v1.2.3