From 95ef8fd216d31aabd089649161ac699d06f3f8cd Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Thu, 23 Mar 2017 23:34:58 +0100 Subject: =?UTF-8?q?rework=20last=20activity=20logic=20to=20something=20tha?= =?UTF-8?q?t=20should=20work=20pretty=20well=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …in Conversations only enviroments --- src/main/java/de/pixart/messenger/entities/Contact.java | 9 +++++++-- .../de/pixart/messenger/generator/AbstractGenerator.java | 4 ++++ .../java/de/pixart/messenger/parser/PresenceParser.java | 13 +++++++++---- .../de/pixart/messenger/services/XmppConnectionService.java | 4 ++-- .../java/de/pixart/messenger/ui/ContactDetailsActivity.java | 5 ++++- .../java/de/pixart/messenger/ui/ConversationFragment.java | 13 +------------ src/main/java/de/pixart/messenger/ui/SettingsActivity.java | 3 ++- src/main/java/de/pixart/messenger/utils/Namespace.java | 1 + src/main/java/de/pixart/messenger/utils/UIHelper.java | 5 +++-- 9 files changed, 33 insertions(+), 24 deletions(-) (limited to 'src/main/java/de') 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); -- cgit v1.2.3