improve active_since implementation (XEP-0319: Last User Interaction in Presence) (#3045)
* set contact to inactive if it becomes offline * send idle also in case app started in background
This commit is contained in:
parent
fd7a5c605a
commit
bc50239c2a
|
@ -287,6 +287,9 @@ public class PresenceParser extends AbstractParser implements
|
||||||
} else {
|
} else {
|
||||||
contact.removePresence(from.getResource());
|
contact.removePresence(from.getResource());
|
||||||
}
|
}
|
||||||
|
if (contact.getShownStatus() == Presence.Status.OFFLINE) {
|
||||||
|
contact.flagInactive();
|
||||||
|
}
|
||||||
mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, false);
|
mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, false);
|
||||||
} else if (type.equals("subscribe")) {
|
} else if (type.equals("subscribe")) {
|
||||||
if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
|
if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
|
||||||
|
|
|
@ -151,6 +151,8 @@ public class XmppConnectionService extends Service {
|
||||||
public static final String ACTION_FCM_MESSAGE_RECEIVED = "fcm_message_received";
|
public static final String ACTION_FCM_MESSAGE_RECEIVED = "fcm_message_received";
|
||||||
private static final String ACTION_MERGE_PHONE_CONTACTS = "merge_phone_contacts";
|
private static final String ACTION_MERGE_PHONE_CONTACTS = "merge_phone_contacts";
|
||||||
|
|
||||||
|
private static final String SETTING_LAST_ACTIVITY_TS = "last_activity_timestamp";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory());
|
URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory());
|
||||||
}
|
}
|
||||||
|
@ -943,6 +945,9 @@ public class XmppConnectionService extends Service {
|
||||||
return bitmap.getByteCount() / 1024;
|
return bitmap.getByteCount() / 1024;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
if (mLastActivity == 0) {
|
||||||
|
mLastActivity = getPreferences().getLong(SETTING_LAST_ACTIVITY_TS, System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
Log.d(Config.LOGTAG, "initializing database...");
|
Log.d(Config.LOGTAG, "initializing database...");
|
||||||
this.databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
|
this.databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
|
||||||
|
@ -1871,7 +1876,6 @@ public class XmppConnectionService extends Service {
|
||||||
|
|
||||||
public void setOnConversationListChangedListener(OnConversationUpdate listener) {
|
public void setOnConversationListChangedListener(OnConversationUpdate listener) {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
this.mLastActivity = System.currentTimeMillis();
|
|
||||||
if (checkListeners()) {
|
if (checkListeners()) {
|
||||||
switchToForeground();
|
switchToForeground();
|
||||||
}
|
}
|
||||||
|
@ -2054,6 +2058,12 @@ public class XmppConnectionService extends Service {
|
||||||
|
|
||||||
private void switchToBackground() {
|
private void switchToBackground() {
|
||||||
final boolean broadcastLastActivity = broadcastLastActivity();
|
final boolean broadcastLastActivity = broadcastLastActivity();
|
||||||
|
if (broadcastLastActivity) {
|
||||||
|
mLastActivity = System.currentTimeMillis();
|
||||||
|
final SharedPreferences.Editor editor = getPreferences().edit();
|
||||||
|
editor.putLong(SETTING_LAST_ACTIVITY_TS, mLastActivity);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
for (Account account : getAccounts()) {
|
for (Account account : getAccounts()) {
|
||||||
if (account.getStatus() == Account.State.ONLINE) {
|
if (account.getStatus() == Account.State.ONLINE) {
|
||||||
XmppConnection connection = account.getXmppConnection();
|
XmppConnection connection = account.getXmppConnection();
|
||||||
|
|
Loading…
Reference in a new issue