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 New Issue
	
	Block a user
	 ChaosKid42
						ChaosKid42