aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2017-03-23 23:34:58 +0100
committerChristian Schneppe <christian@pix-art.de>2017-03-23 23:34:58 +0100
commit95ef8fd216d31aabd089649161ac699d06f3f8cd (patch)
treec0dc3d8df681e2002c8e5d6aee79f36c51a696dd /src/main/java/de
parentd8c077be6513debbb352d362390296c37c92c7fd (diff)
rework last activity logic to something that should work pretty well …
…in Conversations only enviroments
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/pixart/messenger/entities/Contact.java9
-rw-r--r--src/main/java/de/pixart/messenger/generator/AbstractGenerator.java4
-rw-r--r--src/main/java/de/pixart/messenger/parser/PresenceParser.java13
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java4
-rw-r--r--src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java5
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java13
-rw-r--r--src/main/java/de/pixart/messenger/ui/SettingsActivity.java3
-rw-r--r--src/main/java/de/pixart/messenger/utils/Namespace.java1
-rw-r--r--src/main/java/de/pixart/messenger/utils/UIHelper.java5
9 files changed, 33 insertions, 24 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Contact.java b/src/main/java/de/pixart/messenger/entities/Contact.java
index 38808a1d7..8079ff2db 100644
--- a/src/main/java/de/pixart/messenger/entities/Contact.java
+++ b/src/main/java/de/pixart/messenger/entities/Contact.java
@@ -536,8 +536,13 @@ public class Contact implements ListItem, Blockable {
return this.mActive;
}
- public void setLastseen(long timestamp) {
- this.mLastseen = Math.max(timestamp, mLastseen);
+ public boolean setLastseen(long timestamp) {
+ if (timestamp > this.mLastseen) {
+ this.mLastseen = timestamp;
+ return true;
+ } else {
+ return false;
+ }
}
public long getLastseen() {
diff --git a/src/main/java/de/pixart/messenger/generator/AbstractGenerator.java b/src/main/java/de/pixart/messenger/generator/AbstractGenerator.java
index 33ce81859..5800db73e 100644
--- a/src/main/java/de/pixart/messenger/generator/AbstractGenerator.java
+++ b/src/main/java/de/pixart/messenger/generator/AbstractGenerator.java
@@ -16,6 +16,7 @@ import de.pixart.messenger.Config;
import de.pixart.messenger.R;
import de.pixart.messenger.crypto.axolotl.AxolotlService;
import de.pixart.messenger.services.XmppConnectionService;
+import de.pixart.messenger.utils.Namespace;
import de.pixart.messenger.utils.PhoneHelper;
import de.pixart.messenger.xmpp.jingle.stanzas.Content;
@@ -118,6 +119,9 @@ public abstract class AbstractGenerator {
if (Config.supportOtr()) {
features.addAll(Arrays.asList(OTR));
}
+ if (mXmppConnectionService.broadcastLastActivity()) {
+ features.add(Namespace.IDLE);
+ }
Collections.sort(features);
return features;
}
diff --git a/src/main/java/de/pixart/messenger/parser/PresenceParser.java b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
index 41dfa61e9..810a6dcc5 100644
--- a/src/main/java/de/pixart/messenger/parser/PresenceParser.java
+++ b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
@@ -17,6 +17,7 @@ import de.pixart.messenger.entities.Presence;
import de.pixart.messenger.generator.IqGenerator;
import de.pixart.messenger.generator.PresenceGenerator;
import de.pixart.messenger.services.XmppConnectionService;
+import de.pixart.messenger.utils.Namespace;
import de.pixart.messenger.xml.Element;
import de.pixart.messenger.xmpp.OnPresencePacketReceived;
import de.pixart.messenger.xmpp.jid.Jid;
@@ -210,18 +211,19 @@ public class PresenceParser extends AbstractParser implements
mXmppConnectionService.fetchCaps(account, from, presence);
}
- final Element idle = packet.findChild("idle", "urn:xmpp:idle:1");
+ final Element idle = packet.findChild("idle", Namespace.IDLE);
if (idle != null) {
contact.flagInactive();
- String since = idle.getAttribute("since");
+ final String since = idle.getAttribute("since");
try {
contact.setLastseen(AbstractParser.parseTimestamp(since));
} catch (NullPointerException | ParseException e) {
contact.setLastseen(System.currentTimeMillis());
}
} else {
- contact.flagActive();
- contact.setLastseen(AbstractParser.parseTimestamp(packet));
+ if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {
+ contact.flagActive();
+ }
}
PgpEngine pgp = mXmppConnectionService.getPgpEngine();
@@ -234,6 +236,9 @@ public class PresenceParser extends AbstractParser implements
boolean online = sizeBefore < contact.getPresences().size();
mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, online);
} else if (type.equals("unavailable")) {
+ if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {
+ contact.flagInactive();
+ }
if (from.isBareJid()) {
contact.clearPresences();
} else {
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index cd40442cd..936a4591f 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -3423,7 +3423,7 @@ public class XmppConnectionService extends Service {
}
public boolean broadcastLastActivity() {
- return getPreferences().getBoolean("last_activity", true);
+ return getPreferences().getBoolean(SettingsActivity.BROADCAST_LAST_ACTIVITY, true);
}
public int unreadCount() {
@@ -3697,7 +3697,7 @@ public class XmppConnectionService extends Service {
}
if (mLastActivity > 0 && includeIdleTimestamp) {
long since = Math.min(mLastActivity, System.currentTimeMillis()); //don't send future dates
- packet.addChild("idle", "urn:xmpp:idle:1").setAttribute("since", AbstractGenerator.getTimestamp(since));
+ packet.addChild("idle", Namespace.IDLE).setAttribute("since", AbstractGenerator.getTimestamp(since));
}
sendPresencePacket(account, packet);
}
diff --git a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
index 6270e4721..b0fd4cd79 100644
--- a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
@@ -49,6 +49,7 @@ import de.pixart.messenger.entities.ListItem;
import de.pixart.messenger.services.XmppConnectionService.OnAccountUpdate;
import de.pixart.messenger.services.XmppConnectionService.OnRosterUpdate;
import de.pixart.messenger.utils.CryptoHelper;
+import de.pixart.messenger.utils.Namespace;
import de.pixart.messenger.utils.UIHelper;
import de.pixart.messenger.utils.XmppUri;
import de.pixart.messenger.xmpp.OnKeyStatusUpdated;
@@ -516,7 +517,9 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
lastseen.setVisibility(View.VISIBLE);
lastseen.setText(R.string.contact_blocked);
} else {
- if (showLastSeen && contact.getLastseen() > 0) {
+ if (showLastSeen
+ && contact.getLastseen() > 0
+ && contact.getPresences().allOrNonSupport(Namespace.IDLE)) {
lastseen.setVisibility(View.VISIBLE);
lastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen()));
} else {
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index e1da663d5..fc735785c 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -9,10 +9,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
-import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.support.v13.view.inputmethod.InputConnectionCompat;
import android.support.v13.view.inputmethod.InputContentInfoCompat;
import android.text.Editable;
@@ -1543,7 +1541,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
@Override
public void onTypingStarted() {
- final boolean broadcastLastActivity = broadcastLastActivity();
+ final boolean broadcastLastActivity = activity.xmppConnectionService.broadcastLastActivity();
Account.State status = conversation.getAccount().getStatus();
if (status == Account.State.ONLINE && conversation.setOutgoingChatState(ChatState.COMPOSING)) {
activity.xmppConnectionService.sendChatState(conversation);
@@ -1555,15 +1553,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
updateSendButton();
}
- public boolean broadcastLastActivity() {
- return getPreferences().getBoolean("last_activity", true);
- }
-
- public SharedPreferences getPreferences() {
- return PreferenceManager
- .getDefaultSharedPreferences(getActivity().getApplicationContext());
- }
-
@Override
public void onTypingStopped() {
Account.State status = conversation.getAccount().getStatus();
diff --git a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
index 6624266f7..61cf0a4af 100644
--- a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
@@ -41,6 +41,7 @@ public class SettingsActivity extends XmppActivity implements
public static final String MANUALLY_CHANGE_PRESENCE = "manually_change_presence";
public static final String BLIND_TRUST_BEFORE_VERIFICATION = "btbv";
public static final String AUTOMATIC_MESSAGE_DELETION = "automatic_message_deletion";
+ public static final String BROADCAST_LAST_ACTIVITY = "last_activity";
public static final int REQUEST_WRITE_LOGS = 0xbf8701;
private SettingsFragment mSettingsFragment;
@@ -231,7 +232,7 @@ public class SettingsActivity extends XmppActivity implements
"allow_message_correction",
TREAT_VIBRATE_AS_SILENT,
MANUALLY_CHANGE_PRESENCE,
- "last_activity");
+ BROADCAST_LAST_ACTIVITY);
if (name.equals("resource")) {
String resource = preferences.getString("resource", "mobile")
.toLowerCase(Locale.US);
diff --git a/src/main/java/de/pixart/messenger/utils/Namespace.java b/src/main/java/de/pixart/messenger/utils/Namespace.java
index bc6d56752..a384712db 100644
--- a/src/main/java/de/pixart/messenger/utils/Namespace.java
+++ b/src/main/java/de/pixart/messenger/utils/Namespace.java
@@ -9,4 +9,5 @@ public final class Namespace {
public static final String STANZA_IDS = "urn:xmpp:sid:0";
public static final String MAM = "urn:xmpp:mam:2";
public static final String MAM_LEGACY = "urn:xmpp:mam:0";
+ public static final String IDLE = "urn:xmpp:idle:1";
}
diff --git a/src/main/java/de/pixart/messenger/utils/UIHelper.java b/src/main/java/de/pixart/messenger/utils/UIHelper.java
index 05d6c2706..68f9297e9 100644
--- a/src/main/java/de/pixart/messenger/utils/UIHelper.java
+++ b/src/main/java/de/pixart/messenger/utils/UIHelper.java
@@ -112,8 +112,9 @@ public class UIHelper {
public static String lastseen(Context context, boolean active, long time) {
long difference = (System.currentTimeMillis() - time) / 1000;
- active = active && difference <= 300;
- if (active || difference < 60) {
+ if (active) {
+ return context.getString(R.string.last_seen_now);
+ } else if (difference < 60) {
return context.getString(R.string.last_seen_now);
} else if (difference < 60 * 2) {
return context.getString(R.string.last_seen_min);