Commit bcea6f5a authored by Grigory Fedorov's avatar Grigory Fedorov

VCardManager: vcard requests are saved to show "progress mode" for...

VCardManager: vcard requests are saved to show "progress mode" for AccountInfoEditorFragment if case of rotation, pause etc.
parent 35a71d42
...@@ -47,6 +47,8 @@ import org.jivesoftware.smackx.vcardtemp.packet.VCard; ...@@ -47,6 +47,8 @@ import org.jivesoftware.smackx.vcardtemp.packet.VCard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;
/** /**
* Manage vCards and there requests. * Manage vCards and there requests.
...@@ -72,6 +74,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -72,6 +74,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
private final static VCardManager instance; private final static VCardManager instance;
private Set<String> vCardRequests = new ConcurrentSkipListSet<>();
private Set<String> vCardSaveRequests = new ConcurrentSkipListSet<>();
static { static {
instance = new VCardManager(); instance = new VCardManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
...@@ -253,7 +258,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -253,7 +258,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
} }
} }
private void requestVCard(final String account, final String user) { private void requestVCard(final String account, final String srcUser) {
final String user = Jid.getBareAddress(srcUser);
final XMPPConnection xmppConnection = AccountManager.getInstance().getAccount(account).getConnectionThread().getXMPPConnection(); final XMPPConnection xmppConnection = AccountManager.getInstance().getAccount(account).getConnectionThread().getXMPPConnection();
final org.jivesoftware.smackx.vcardtemp.VCardManager vCardManager = org.jivesoftware.smackx.vcardtemp.VCardManager.getInstanceFor(xmppConnection); final org.jivesoftware.smackx.vcardtemp.VCardManager vCardManager = org.jivesoftware.smackx.vcardtemp.VCardManager.getInstanceFor(xmppConnection);
...@@ -262,8 +269,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -262,8 +269,9 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
public void run() { public void run() {
VCard vCard = null; VCard vCard = null;
vCardRequests.add(user);
try { try {
vCard = vCardManager.loadVCard(Jid.getBareAddress(user)); vCard = vCardManager.loadVCard(user);
} catch (SmackException.NoResponseException | SmackException.NotConnectedException e) { } catch (SmackException.NoResponseException | SmackException.NotConnectedException e) {
LogManager.w(this, "Error getting vCard: " + e.getMessage()); LogManager.w(this, "Error getting vCard: " + e.getMessage());
} catch (XMPPException.XMPPErrorException e ) { } catch (XMPPException.XMPPErrorException e ) {
...@@ -278,15 +286,16 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -278,15 +286,16 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
LogManager.w(this, "ClassCastException: " + e.getMessage()); LogManager.w(this, "ClassCastException: " + e.getMessage());
vCard = new VCard(); vCard = new VCard();
} }
vCardRequests.remove(user);
final VCard finalVCard = vCard; final VCard finalVCard = vCard;
Application.getInstance().runOnUiThread(new Runnable() { Application.getInstance().runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (finalVCard == null) { if (finalVCard == null) {
onVCardFailed(account, Jid.getBareAddress(user)); onVCardFailed(account, user);
} else { } else {
onVCardReceived(account, Jid.getBareAddress(user), finalVCard); onVCardReceived(account, user, finalVCard);
} }
} }
}); });
...@@ -307,12 +316,14 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -307,12 +316,14 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
xmppConnection.setPacketReplyTimeout(120000); xmppConnection.setPacketReplyTimeout(120000);
vCardSaveRequests.add(account);
try { try {
vCardManager.saveVCard(vCard); vCardManager.saveVCard(vCard);
} catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) { } catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {
LogManager.w(this, "Error saving vCard: " + e.getMessage()); LogManager.w(this, "Error saving vCard: " + e.getMessage());
isSuccess = false; isSuccess = false;
} }
vCardSaveRequests.remove(account);
xmppConnection.setPacketReplyTimeout(ConnectionManager.PACKET_REPLY_TIMEOUT); xmppConnection.setPacketReplyTimeout(ConnectionManager.PACKET_REPLY_TIMEOUT);
...@@ -333,4 +344,12 @@ public class VCardManager implements OnLoadListener, OnPacketListener, ...@@ -333,4 +344,12 @@ public class VCardManager implements OnLoadListener, OnPacketListener,
thread.start(); thread.start();
} }
public boolean isVCardRequested(String user) {
return vCardRequests.contains(Jid.getBareAddress(user));
}
public boolean isVCardSaveRequested(String account) {
return vCardSaveRequests.contains(account);
}
} }
...@@ -203,6 +203,10 @@ public class AccountInfoEditorFragment extends Fragment implements OnVCardSaveLi ...@@ -203,6 +203,10 @@ public class AccountInfoEditorFragment extends Fragment implements OnVCardSaveLi
Application.getInstance().addUIListener(OnVCardSaveListener.class, this); Application.getInstance().addUIListener(OnVCardSaveListener.class, this);
Application.getInstance().addUIListener(OnVCardListener.class, this); Application.getInstance().addUIListener(OnVCardListener.class, this);
VCardManager vCardManager = VCardManager.getInstance();
if (vCardManager.isVCardRequested(account) || vCardManager.isVCardSaveRequested(account)) {
enableProgressMode();
}
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment