Beispiel #1
0
 public void addFriend(String userID) {
   if (sRoster != null) {
     if (!sRoster.contains(userID)) {
       try {
         sRoster.createEntry(userID, StringUtils.parseBareAddress(userID), null);
         retrieveFriendList();
       } catch (XMPPException e) {
         System.err.println("Error in adding friend " + e.getMessage());
       }
     } else {
       RosterEntry rosterEntry = sRoster.getEntry(userID);
       RosterPacket.ItemType type = rosterEntry.getType();
       switch (type) {
         case from:
           requestSubscription(userID, sConnection);
           break;
         case to:
           grantSubscription(userID, sConnection);
           break;
         case none:
           grantSubscription(userID, sConnection);
           requestSubscription(userID, sConnection);
           break;
         case both:
         default:
           break;
       }
     }
   }
 }
Beispiel #2
0
  private void syncUsers() {
    for (RosterEntry entry : conn.getRoster().getEntries()) {
      getBuddyManager()
          .storeBuddy(
              new XMPPBuddy(
                  getBuddyManager(), entry.getUser(), entry.getName(), entry.getGroups(), entry));
      // Facebook does not support presence probes in their XMPP implementation. See
      // http://developers.facebook.com/docs/chat#features
      if (!TransportType.facebook.equals(getTransport().getType())) {
        // ProbePacket probe = new ProbePacket(this.getJID()+"/"+xmppResource, entry.getUser());
        ProbePacket probe = new ProbePacket(null, entry.getUser());
        Log.debug("XMPP: Sending the following probe packet: " + probe.toXML());
        try {
          conn.sendPacket(probe);
        } catch (IllegalStateException e) {
          Log.debug("XMPP: Not connected while trying to send probe.");
        }
      }
    }

    try {
      getTransport().syncLegacyRoster(getJID(), getBuddyManager().getBuddies());
    } catch (UserNotFoundException ex) {
      Log.error("XMPP: User not found while syncing legacy roster: ", ex);
    }

    getBuddyManager().activate();

    // lets repoll the roster since smack seems to get out of sync...
    // we'll let the roster listener take care of this though.
    conn.getRoster().reload();
  }
 public void buildUserList() {
   final Collection<RosterEntry> roster = mRoster.getEntries();
   for (final RosterEntry rosterEntry : roster) {
     getUser(rosterEntry.getUser(), true);
   }
   transportCheck();
 }
 public void updateUser(Presence presence) {
   boolean newUser = true;
   Contact removeC = null;
   for (Contact c : contactList) {
     if (c.getRosterEntry().getUser().equals(StringUtils.parseBareAddress(presence.getFrom()))) {
       newUser = false;
       if (!(presence.isAvailable() || presence.isAway())) {
         removeC = c;
       }
       break;
     }
   }
   if (removeC != null) {
     contactList.remove(removeC);
   }
   if (newUser) {
     RosterEntry re = roster.getEntry(StringUtils.parseBareAddress(presence.getFrom()));
     Contact c = new Contact();
     if (re.getName() == null || re.getName().trim().equals("")) c.setName(re.getUser());
     else c.setName(re.getName());
     c.setStatus(presence.getStatus());
     c.setRosterEntry(re);
     contactList.add(c);
   }
 }
Beispiel #5
0
  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    RosterItem item = (RosterItem) parent.getItemAtPosition(position);
    String name = item.getName();
    String account = item.getAccount();

    if (item.isGroup() || item.isAccount()) {
      if (item.isCollapsed()) {
        while (service.getCollapsedGroups().contains(name))
          service.getCollapsedGroups().remove(name);
        item.setCollapsed(false);
      } else {
        service.getCollapsedGroups().add(name);
        item.setCollapsed(true);
      }
      updateList();
    } else if (item.isEntry() || item.isSelf()) {
      RosterEntry re = item.getEntry();
      String jid = re.getUser();
      Intent i = new Intent(this, Chat.class);
      i.putExtra("account", account);
      i.putExtra("jid", jid);
      startActivity(i);
    } else if (item.isMuc()) {
      Intent i = new Intent(this, Chat.class);
      i.putExtra("account", account);
      i.putExtra("jid", item.getName());
      startActivity(i);
    }
  }
Beispiel #6
0
  public void renameRosterItem(String user, String newName) throws YaximXMPPException {
    RosterEntry rosterEntry = mRoster.getEntry(user);

    if (!(newName.length() > 0) || (rosterEntry == null)) {
      throw new YaximXMPPException("JabberID to rename is invalid!");
    }
    rosterEntry.setName(newName);
  }
  public void renameRosterItem(String user, String newName) throws ClientException {
    RosterEntry rosterEntry = roster.getEntry(user);

    if (!(newName.length() > 0) || (rosterEntry == null)) {
      throw new ClientException("ID  is invalid!");
    }
    rosterEntry.setName(newName);
  }
Beispiel #8
0
 /** 更改用户状态 */
 public void setPresence(int code) {
   if (connection == null) return;
   Presence presence;
   switch (code) {
     case 0:
       presence = new Presence(Presence.Type.available);
       connection.sendPacket(presence);
       Log.v("state", "设置在线");
       break;
     case 1:
       presence = new Presence(Presence.Type.available);
       presence.setMode(Presence.Mode.chat);
       connection.sendPacket(presence);
       Log.v("state", "设置Q我吧");
       System.out.println(presence.toXML());
       break;
     case 2:
       presence = new Presence(Presence.Type.available);
       presence.setMode(Presence.Mode.dnd);
       connection.sendPacket(presence);
       Log.v("state", "设置忙碌");
       System.out.println(presence.toXML());
       break;
     case 3:
       presence = new Presence(Presence.Type.available);
       presence.setMode(Presence.Mode.away);
       connection.sendPacket(presence);
       Log.v("state", "设置离开");
       System.out.println(presence.toXML());
       break;
     case 4:
       Roster roster = connection.getRoster();
       Collection<RosterEntry> entries = roster.getEntries();
       for (RosterEntry entry : entries) {
         presence = new Presence(Presence.Type.unavailable);
         presence.setPacketID(Packet.ID_NOT_AVAILABLE);
         presence.setFrom(connection.getUser());
         presence.setTo(entry.getUser());
         connection.sendPacket(presence);
         System.out.println(presence.toXML());
       }
       // 向同一用户的其他客户端发送隐身状态
       presence = new Presence(Presence.Type.unavailable);
       presence.setPacketID(Packet.ID_NOT_AVAILABLE);
       presence.setFrom(connection.getUser());
       presence.setTo(StringUtils.parseBareAddress(connection.getUser()));
       connection.sendPacket(presence);
       Log.v("state", "设置隐身");
       break;
     case 5:
       presence = new Presence(Presence.Type.unavailable);
       connection.sendPacket(presence);
       Log.v("state", "设置离线");
       break;
     default:
       break;
   }
 }
Beispiel #9
0
 static RosterPacket.Item toRosterItem(RosterEntry entry) {
   RosterPacket.Item item = new RosterPacket.Item(entry.getUser(), entry.getName());
   item.setItemType(entry.getType());
   item.setItemStatus(entry.getStatus());
   // Set the correct group names for the item.
   for (RosterGroup group : entry.getGroups()) {
     item.addGroupName(group.getName());
   }
   return item;
 }
 @Override
 public void entriesUpdated(Collection<String> addresses) {
   for (final String uid : addresses) {
     final User user = getUser(uid, true);
     final RosterEntry re = mRoster.getEntry(uid);
     user.setUserName(re.getName());
     user.setGroups(new GroupList(re.getGroups()));
     service.sendRosterUpdated(user);
   }
 }
 private String getCurrentJabberID(User user, RosterEntry rosterEntry) {
   Presence presence = _getPresence(user);
   String jabberId = null;
   if (presence != null) {
     jabberId = presence.getFrom();
   }
   if (jabberId == null) jabberId = rosterEntry.getUser();
   if (jabberId == null) jabberId = rosterEntry.getName();
   return jabberId;
 }
Beispiel #12
0
 public boolean renameFriend(String userID, String name) {
   if (sConnection != null && sConnection.isConnected()) {
     Roster roster = sConnection.getRoster();
     if (roster.contains(userID)) {
       RosterEntry entry = roster.getEntry(userID);
       entry.setName(name);
     }
   }
   return false;
 }
 private String getName(RosterEntry rosterEntry) {
   String name = rosterEntry.getName();
   if (name != null && name.length() > 0) {
     return name;
   }
   name = StringUtils.parseName(rosterEntry.getUser());
   if (name.length() > 0) {
     return name;
   }
   return rosterEntry.getUser();
 }
 public static String toString(RosterEntry entry) {
   StringBuilder sb = new StringBuilder();
   String name = entry.getName();
   if (name != null && name.trim().length() > 0) {
     sb.append(Messages.DeleteContactAction_name_begin_deco)
         .append(name)
         .append(Messages.DeleteContactAction_name_end_deco);
   }
   sb.append(entry.getUser());
   return sb.toString();
 }
Beispiel #15
0
 @Override
 public List<String> GetUsers() {
   if (connection == null) return users;
   Roster roster = connection.getRoster();
   Collection<RosterEntry> entries = roster.getEntries();
   users = new ArrayList<String>();
   for (RosterEntry entry : entries) {
     users.add(entry.getUser());
     System.out.println(entry);
   }
   return users;
 }
Beispiel #16
0
  private ContentValues getContentValuesForRosterEntry(final RosterEntry entry) {
    final ContentValues values = new ContentValues();

    values.put(RosterConstants.JID, entry.getUser());
    values.put(RosterConstants.ALIAS, getName(entry));

    Presence presence = mRoster.getPresence(entry.getUser());
    values.put(RosterConstants.STATUS_MODE, getStatusInt(presence));
    values.put(RosterConstants.STATUS_MESSAGE, presence.getStatus());
    values.put(RosterConstants.GROUP, getGroup(entry.getGroups()));

    return values;
  }
Beispiel #17
0
  /**
   * @see net.sf.kraken.session.TransportSession#addContact(org.xmpp.packet.JID, String,
   *     java.util.ArrayList)
   */
  @Override
  public void addContact(JID jid, String nickname, ArrayList<String> groups) {
    String mail = getTransport().convertJIDToID(jid);
    try {
      conn.getRoster().createEntry(mail, nickname, groups.toArray(new String[groups.size()]));
      RosterEntry entry = conn.getRoster().getEntry(mail);

      getBuddyManager()
          .storeBuddy(new XMPPBuddy(getBuddyManager(), mail, nickname, entry.getGroups(), entry));
    } catch (XMPPException ex) {
      Log.debug("XMPP: unable to add:" + mail);
    }
  }
 private void removeOldRosterEntries() {
   Collection<RosterEntry> rosterEntries = roster.getEntries();
   StringBuilder exclusion = new StringBuilder(RosterConstants.JID + " NOT IN (");
   boolean first = true;
   for (RosterEntry rosterEntry : rosterEntries) {
     updateRosterEntryInDB(rosterEntry);
     if (first) first = false;
     else exclusion.append(",");
     exclusion.append("'").append(rosterEntry.getUser()).append("'");
   }
   exclusion.append(")");
   int count = contentResolver.delete(RosterProvider.CONTENT_URI, exclusion.toString(), null);
 }
 private User addJabberUserToUserModelOrUpdateInfo(RosterEntry rosterEntry) {
   //    System.out.println("rosterEntry.getName() = " + rosterEntry.getName());
   //    System.out.println("rosterEntry.getUser() = " + rosterEntry.getUser());
   User user = myUserModel.createUser(getSimpleId(rosterEntry.getUser()), getName());
   String newGroup = getUserGroup(rosterEntry);
   if (newGroup != null) {
     user.setGroup(newGroup, myUserModel);
   }
   user.setDisplayName(rosterEntry.getName(), myUserModel);
   myUserModel.addUser(user);
   String jabberId = getCurrentJabberID(user, rosterEntry);
   updateIsIDEtalkClient(jabberId, user);
   return user;
 }
  public void runDeleteAction() {
    RosterEntry rosterEntry = null;
    List<RosterEntry> selectedRosterEntries =
        SelectionRetrieverFactory.getSelectionRetriever(RosterEntry.class).getSelection();
    if (selectedRosterEntries.size() == 1) {
      rosterEntry = selectedRosterEntries.get(0);
    }

    if (rosterEntry == null) {
      LOG.error("RosterEntry should not be null at this point!"); // $NON-NLS-1$
      return;
    }

    if (sessionManager != null) {
      // Is the chosen user currently in the session?
      ISarosSession sarosSession = sessionManager.getSarosSession();
      String entryJid = rosterEntry.getUser();

      if (sarosSession != null) {
        for (User p : sarosSession.getUsers()) {
          String pJid = p.getJID().getBase();

          // If so, stop the deletion from completing
          if (entryJid.equals(pJid)) {
            MessageDialog.openError(
                null, Messages.DeleteContactAction_error_title, DELETE_ERROR_IN_SESSION);
            return;
          }
        }
      }
    }

    if (MessageDialog.openQuestion(
        null,
        Messages.DeleteContactAction_confirm_title,
        MessageFormat.format(
            Messages.DeleteContactAction_confirm_message, toString(rosterEntry)))) {

      try {
        XMPPUtils.removeFromRoster(connectionService.getConnection(), rosterEntry);
      } catch (XMPPException e) {
        LOG.error(
            "could not delete contact "
                + toString(rosterEntry) // $NON-NLS-1$
                + ":",
            e); //$NON-NLS-1$
      }
    }
  }
  private void tryToRemoveRosterEntry(String user) throws ClientException {
    try {
      RosterEntry rosterEntry = roster.getEntry(user);

      if (rosterEntry != null) {

        Presence unsub = new Presence(Presence.Type.unsubscribed);
        unsub.setTo(rosterEntry.getUser());
        extXMPPConnection.sendPacket(unsub);
        roster.removeEntry(rosterEntry);
      }
    } catch (XMPPException e) {
      throw new ClientException("tryToRemoveRosterEntry", e);
    }
  }
  private ContentValues getContentValuesForRosterEntry(final RosterEntry entry) {
    final ContentValues values = new ContentValues();

    values.put(RosterConstants.JID, entry.getUser());
    values.put(RosterConstants.ALIAS, getName(entry));

    Presence presence = roster.getPresence(entry.getUser());
    values.put(RosterConstants.STATUS_MODE, getStatusInt(presence));
    if (presence.getType() == Presence.Type.error) {
      values.put(RosterConstants.STATUS_MESSAGE, presence.getError().toString());
    } else values.put(RosterConstants.STATUS_MESSAGE, presence.getStatus());
    values.put(RosterConstants.GROUP, getGroup(entry.getGroups()));

    return values;
  }
Beispiel #23
0
  private void tryToRemoveRosterEntry(String user) throws YaximXMPPException {
    try {
      RosterEntry rosterEntry = mRoster.getEntry(user);

      if (rosterEntry != null) {
        // first, unsubscribe the user
        Presence unsub = new Presence(Presence.Type.unsubscribed);
        unsub.setTo(rosterEntry.getUser());
        mXMPPConnection.sendPacket(unsub);
        // then, remove from roster
        mRoster.removeEntry(rosterEntry);
      }
    } catch (XMPPException e) {
      throw new YaximXMPPException("tryToRemoveRosterEntry", e);
    }
  }
  private void removeRosterEntryFromGroups(RosterEntry rosterEntry) throws ClientException {
    Collection<RosterGroup> oldGroups = rosterEntry.getGroups();

    for (RosterGroup group : oldGroups) {
      tryToRemoveUserFromGroup(group, rosterEntry);
    }
  }
Beispiel #25
0
  // TODO: figure out what determines the presence of a RosterEntry's name field
  public void setActiveChatByName(String name) {
    Roster roster = connection.getRoster();

    String activeUser = null;
    if (activeChat != null) {
      activeUser = activeChat.getParticipant();
      int index = activeUser.indexOf("/");
      // Log.d("Jane", "index: " + index);
      if (index >= 0) {
        activeUser = activeUser.substring(0, index);
      }

      if (!chatCache.containsKey(activeUser)) {
        Log.d("Jane", "Caching " + activeUser);
        chatCache.put(activeUser, activeChat);
      }
    }

    for (RosterEntry entry : roster.getEntries()) {
      String potentialName = entry.getName();
      String email = entry.getUser();
      Log.i("Chat", "Checking desired recipient: " + name + " against: " + potentialName);
      if (potentialName != null && potentialName.regionMatches(true, 0, name, 0, name.length())) {
        Log.i("Chat", "Setting active chat to " + potentialName + "/" + email);
        speak("Now talking to " + potentialName);
        if (chatCache.containsKey(email)) {
          activeChat = chatCache.get(email);
        } else {
          Log.d("Chat", "Chat cache did not contain key " + email);
          activeChat = connection.getChatManager().createChat(email, null);
        }
        return;
      } else if (email.contains(name)) { // maybe emails will be ok...
        Log.i("Chat", "Setting active chat to " + email);
        speak("Now talking to " + email);
        if (chatCache.containsKey(email)) {
          activeChat = chatCache.get(email);
        } else {
          activeChat = connection.getChatManager().createChat(email, null);
        }
        return;
      }
    }
    Log.i("Chat", "No friend matches " + name);
    speak("Sorry, but I couldn't find a friend named " + name);
  }
 private void xmppRosterPost(XMPPConnection connection) {
   List<String> jidList = new LinkedList<String>();
   System.err.println("INFO: Reading roster.");
   for (RosterEntry entry : connection.getRoster().getEntries()) {
     jidList.add(entry.getUser());
     System.err.println("INFO: Got " + entry.getUser() + " from roster.");
   }
   System.err.println("INFO: Sending " + jidList.size() + " roster entries to server.");
   BuddylistIQ blIQ = new BuddylistIQ();
   blIQ.setFrom(connection.getUser());
   blIQ.setTo(this.androidbuddy);
   blIQ.setBuddies(jidList);
   blIQ.setIdentity(XMPPUtil.jidWithoutRessource(connection.getUser()));
   blIQ.setNetwork("roster");
   blIQ.setType(IQ.Type.SET);
   connection.sendPacket(blIQ);
 }
 @Nullable
 private static String getUserGroup(RosterEntry rosterEntry) {
   String group = null;
   for (RosterGroup rosterGroup : rosterEntry.getGroups()) {
     group = rosterGroup.getName();
   }
   return group;
 }
 public User setupUser(String uid, boolean addIfNotExists) {
   final RosterEntry re = mRoster.getEntry(StringUtils.parseBareAddress(uid));
   if (re != null) {
     final User user = new User(re, mRoster.getPresence(re.getUser()));
     user.setAvatar(service.getAvatarService().getAvatar(user));
     if (addIfNotExists) {
       setupUser(user);
     }
     return user;
   } else {
     Log.w(TAG, "creating Invalid user for: " + uid);
     final User u = new User();
     u.setUserLogin(uid);
     u.setUserState(UserState.Invalid);
     return u;
   }
 }
Beispiel #29
0
  /**
   * 根据RosterEntry创建一个User
   *
   * @param entry
   * @return
   */
  public User transEntryToUser(RosterEntry entry, Roster roster) {
    User user = new User();
    user.setJID(entry.getUser());
    Presence presence = roster.getPresence(entry.getUser());
    user.setFrom(presence.getFrom());
    user.setStatus(presence.getStatus());
    user.setAvailable(presence.isAvailable());
    user.setType(entry.getType());

    // user.setvCard(userManager.getUserVCard(entry.getUser()));
    if (entry.getName() == null) {
      //			if(user.getvCard()==null)
      //			user.setName(StringUtil.getUserNameByJid(entry.getUser()));
      //			else {
      //				user.setName(user.getvCard().getNickName());
      //			}
      user.setName(StringUtil.getUserNameByJid(entry.getUser()));
    } else {
      user.setName(entry.getName());
    }
    String avatar = UserManager.saveAvatar(entry.getUser(), context);
    user.setAvatar_path(avatar);

    return user;
  }
  /**
   * Returns a String that could be used by any user interacting modules for referring to this
   * contact. An alias is not necessarily unique but is often more human readable than an address
   * (or id).
   *
   * @return a String that can be used for referring to this contact when interacting with the user.
   */
  public String getDisplayName() {
    if (isResolved) {
      String name = rosterEntry.getName();

      if (name == null) name = getAddress();

      return name;
    } else return tempId;
  }