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);
|
mXmppConnectionService.getAvatarService().clear(conversation);
|
||||||
if (before != mucOptions.online() || (mucOptions.online() && count != mucOptions.getUsers().size())) {
|
if (before != mucOptions.online() || (mucOptions.online() && count != mucOptions.getUsers().size())) {
|
||||||
mXmppConnectionService.updateConversationUi();
|
mXmppConnectionService.updateConversationUi();
|
||||||
|
} else if (mucOptions.online()) {
|
||||||
|
mXmppConnectionService.updateMucRosterUi();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,6 +212,8 @@ public class XmppConnectionService extends Service {
|
||||||
private Integer accountChangedListenerCount = 0;
|
private Integer accountChangedListenerCount = 0;
|
||||||
private OnRosterUpdate mOnRosterUpdate = null;
|
private OnRosterUpdate mOnRosterUpdate = null;
|
||||||
private Integer rosterChangedListenerCount = 0;
|
private Integer rosterChangedListenerCount = 0;
|
||||||
|
private OnMucRosterUpdate mOnMucRosterUpdate = null;
|
||||||
|
private Integer mucRosterChangedListenerCount = 0;
|
||||||
private SecureRandom mRandom;
|
private SecureRandom mRandom;
|
||||||
private FileObserver fileObserver = new FileObserver(
|
private FileObserver fileObserver = new FileObserver(
|
||||||
FileBackend.getConversationsImageDirectory()) {
|
FileBackend.getConversationsImageDirectory()) {
|
||||||
|
@ -1116,6 +1118,13 @@ public class XmppConnectionService extends Service {
|
||||||
removedListener = true;
|
removedListener = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
synchronized (this.mucRosterChangedListenerCount) {
|
||||||
|
if (this.mOnMucRosterUpdate != null) {
|
||||||
|
this.mOnMucRosterUpdate = null;
|
||||||
|
this.mucRosterChangedListenerCount = 0;
|
||||||
|
removedListener = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (removedListener) {
|
if (removedListener) {
|
||||||
final String msg = "removed stale listeners";
|
final String msg = "removed stale listeners";
|
||||||
Log.d(Config.LOGTAG, msg);
|
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() {
|
private boolean checkListeners() {
|
||||||
return (this.mOnAccountUpdate == null
|
return (this.mOnAccountUpdate == null
|
||||||
&& this.mOnConversationUpdate == null && this.mOnRosterUpdate == 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) {
|
public Account findAccountByJid(final Jid accountJid) {
|
||||||
for (Account account : this.accounts) {
|
for (Account account : this.accounts) {
|
||||||
if (account.getJid().toBareJid().equals(accountJid.toBareJid())) {
|
if (account.getJid().toBareJid().equals(accountJid.toBareJid())) {
|
||||||
|
@ -2125,6 +2163,10 @@ public class XmppConnectionService extends Service {
|
||||||
public void onRosterUpdate();
|
public void onRosterUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface OnMucRosterUpdate {
|
||||||
|
public void onMucRosterUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
private interface OnConferenceOptionsPushed {
|
private interface OnConferenceOptionsPushed {
|
||||||
public void onPushSucceeded();
|
public void onPushSucceeded();
|
||||||
public void onPushFailed();
|
public void onPushFailed();
|
||||||
|
|
|
@ -30,10 +30,11 @@ import eu.siacs.conversations.crypto.PgpEngine;
|
||||||
import eu.siacs.conversations.entities.Contact;
|
import eu.siacs.conversations.entities.Contact;
|
||||||
import eu.siacs.conversations.entities.Conversation;
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
import eu.siacs.conversations.entities.MucOptions.User;
|
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.services.XmppConnectionService.OnConversationUpdate;
|
||||||
import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
|
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";
|
public static final String ACTION_VIEW_MUC = "view_muc";
|
||||||
private Conversation mConversation;
|
private Conversation mConversation;
|
||||||
private OnClickListener inviteListener = new OnClickListener() {
|
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
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
|
@ -241,6 +241,9 @@ public abstract class XmppActivity extends Activity {
|
||||||
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
||||||
this.xmppConnectionService.setOnRosterUpdateListener((XmppConnectionService.OnRosterUpdate) this);
|
this.xmppConnectionService.setOnRosterUpdateListener((XmppConnectionService.OnRosterUpdate) this);
|
||||||
}
|
}
|
||||||
|
if (this instanceof XmppConnectionService.OnMucRosterUpdate) {
|
||||||
|
this.xmppConnectionService.setOnMucRosterUpdateListener((XmppConnectionService.OnMucRosterUpdate) this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void unregisterListeners() {
|
protected void unregisterListeners() {
|
||||||
|
@ -253,6 +256,9 @@ public abstract class XmppActivity extends Activity {
|
||||||
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
if (this instanceof XmppConnectionService.OnRosterUpdate) {
|
||||||
this.xmppConnectionService.removeOnRosterUpdateListener();
|
this.xmppConnectionService.removeOnRosterUpdateListener();
|
||||||
}
|
}
|
||||||
|
if (this instanceof XmppConnectionService.OnMucRosterUpdate) {
|
||||||
|
this.xmppConnectionService.removeOnMucRosterUpdateListener();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
Loading…
Reference in a new issue