add an listener for the muc roster update.
this is for the ConferenceDetailsActivity to show precence updates immediately.
This commit is contained in:
parent
bdfdc5fb10
commit
dbe8280662
|
@ -31,6 +31,8 @@ public class PresenceParser extends AbstractParser implements
|
|||
mXmppConnectionService.getAvatarService().clear(conversation);
|
||||
if (before != mucOptions.online() || (mucOptions.online() && count != mucOptions.getUsers().size())) {
|
||||
mXmppConnectionService.updateConversationUi();
|
||||
} else if (mucOptions.online()) {
|
||||
mXmppConnectionService.updateMucRosterUi();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -212,6 +212,8 @@ public class XmppConnectionService extends Service {
|
|||
private Integer accountChangedListenerCount = 0;
|
||||
private OnRosterUpdate mOnRosterUpdate = null;
|
||||
private Integer rosterChangedListenerCount = 0;
|
||||
private OnMucRosterUpdate mOnMucRosterUpdate = null;
|
||||
private Integer mucRosterChangedListenerCount = 0;
|
||||
private SecureRandom mRandom;
|
||||
private FileObserver fileObserver = new FileObserver(
|
||||
FileBackend.getConversationsImageDirectory()) {
|
||||
|
@ -1116,6 +1118,13 @@ public class XmppConnectionService extends Service {
|
|||
removedListener = true;
|
||||
}
|
||||
}
|
||||
synchronized (this.mucRosterChangedListenerCount) {
|
||||
if (this.mOnMucRosterUpdate != null) {
|
||||
this.mOnMucRosterUpdate = null;
|
||||
this.mucRosterChangedListenerCount = 0;
|
||||
removedListener = true;
|
||||
}
|
||||
}
|
||||
if (removedListener) {
|
||||
final String msg = "removed stale listeners";
|
||||
Log.d(Config.LOGTAG, msg);
|
||||
|
@ -1217,6 +1226,29 @@ public class XmppConnectionService extends Service {
|
|||
}
|
||||
}
|
||||
|
||||
public void setOnMucRosterUpdateListener(OnMucRosterUpdate listener) {
|
||||
synchronized (this.mucRosterChangedListenerCount) {
|
||||
if (checkListeners()) {
|
||||
switchToForeground();
|
||||
}
|
||||
this.mOnMucRosterUpdate = listener;
|
||||
this.mucRosterChangedListenerCount++;
|
||||
}
|
||||
}
|
||||
|
||||
public void removeOnMucRosterUpdateListener() {
|
||||
synchronized (this.mucRosterChangedListenerCount) {
|
||||
this.mucRosterChangedListenerCount--;
|
||||
if (this.mucRosterChangedListenerCount <= 0) {
|
||||
this.mucRosterChangedListenerCount = 0;
|
||||
this.mOnMucRosterUpdate = null;
|
||||
if (checkListeners()) {
|
||||
switchToBackground();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkListeners() {
|
||||
return (this.mOnAccountUpdate == null
|
||||
&& this.mOnConversationUpdate == null && this.mOnRosterUpdate == null);
|
||||
|
@ -1928,6 +1960,12 @@ public class XmppConnectionService extends Service {
|
|||
}
|
||||
}
|
||||
|
||||
public void updateMucRosterUi() {
|
||||
if (mOnMucRosterUpdate != null) {
|
||||
mOnMucRosterUpdate.onMucRosterUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public Account findAccountByJid(final Jid accountJid) {
|
||||
for (Account account : this.accounts) {
|
||||
if (account.getJid().toBareJid().equals(accountJid.toBareJid())) {
|
||||
|
@ -2125,6 +2163,10 @@ public class XmppConnectionService extends Service {
|
|||
public void onRosterUpdate();
|
||||
}
|
||||
|
||||
public interface OnMucRosterUpdate {
|
||||
public void onMucRosterUpdate();
|
||||
}
|
||||
|
||||
private interface OnConferenceOptionsPushed {
|
||||
public void onPushSucceeded();
|
||||
public void onPushFailed();
|
||||
|
|
|
@ -30,10 +30,11 @@ import eu.siacs.conversations.crypto.PgpEngine;
|
|||
import eu.siacs.conversations.entities.Contact;
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
import eu.siacs.conversations.entities.MucOptions.User;
|
||||
import eu.siacs.conversations.services.XmppConnectionService.OnMucRosterUpdate;
|
||||
import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate;
|
||||
import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
|
||||
|
||||
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate {
|
||||
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate {
|
||||
public static final String ACTION_VIEW_MUC = "view_muc";
|
||||
private Conversation mConversation;
|
||||
private OnClickListener inviteListener = new OnClickListener() {
|
||||
|
@ -96,6 +97,17 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMucRosterUpdate() {
|
||||
runOnUiThread(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
populateView();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
|
@ -241,6 +241,9 @@ public abstract class XmppActivity extends Activity {
|
|||
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
||||
this.xmppConnectionService.setOnRosterUpdateListener((XmppConnectionService.OnRosterUpdate) this);
|
||||
}
|
||||
if (this instanceof XmppConnectionService.OnMucRosterUpdate) {
|
||||
this.xmppConnectionService.setOnMucRosterUpdateListener((XmppConnectionService.OnMucRosterUpdate) this);
|
||||
}
|
||||
}
|
||||
|
||||
protected void unregisterListeners() {
|
||||
|
@ -253,6 +256,9 @@ public abstract class XmppActivity extends Activity {
|
|||
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
||||
this.xmppConnectionService.removeOnRosterUpdateListener();
|
||||
}
|
||||
if (this instanceof XmppConnectionService.OnMucRosterUpdate) {
|
||||
this.xmppConnectionService.removeOnMucRosterUpdateListener();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
|
Loading…
Reference in a new issue