diff --git a/source/org/jivesoftware/smack/XMPPConnection.java b/source/org/jivesoftware/smack/XMPPConnection.java
index ba2ff85f2..bdcd2107d 100644
--- a/source/org/jivesoftware/smack/XMPPConnection.java
+++ b/source/org/jivesoftware/smack/XMPPConnection.java
@@ -323,8 +323,7 @@ public class XMPPConnection {
// We're done with the collector, so explicitly cancel it.
collector.cancel();
- // Create the roster.
- this.roster = new Roster(this);
+ // Load the entire roster from the server.
roster.reload();
// Set presence to online.
@@ -403,31 +402,17 @@ public class XMPPConnection {
/**
* Returns the roster for the user logged into the server. If the user has not yet
- * logged into the server (or if the user is logged in anonymously), this method will return
+ * logged into the server this method will return a non-loaded roster that the user can
+ * configure. If the user is logged in anonymously, this method will return
* null.
*
- * @return the user's roster, or null if the user has not logged in yet.
+ * @return the user's roster, a non-loaded roster if the user has not yet
+ * logged in, or null if the user is logged in anonymously.
*/
public Roster getRoster() {
if (roster == null) {
return null;
}
- // If this is the first time the user has asked for the roster after calling
- // login, we want to wait up to 2 seconds for the server to send back the
- // user's roster. This behavior shields API users from having to worry about the
- // fact that roster operations are asynchronous, although they'll still have to
- // listen for changes to the roster. Note: because of this waiting logic, internal
- // Smack code should be wary about calling the getRoster method, and may need to
- // access the roster object directly.
- int elapsed = 0;
- while (!roster.rosterInitialized && elapsed <= 2000) {
- try {
- Thread.sleep(500);
- }
- catch (Exception e) {
- }
- elapsed += 500;
- }
return roster;
}
@@ -735,6 +720,9 @@ public class XMPPConnection {
// Make note of the fact that we're now connected.
connected = true;
+ // Create the roster.
+ this.roster = new Roster(this);
+
// Notify that a new connection has been established
connectionEstablished(this);
}