XMPP客户端关于用户组排序的一个可能的实现方法

group的存放格式

SDK将group list存放在storage:groups namespace中,group的位置就是其在list中的顺序。也就是说,在下面举的例子中,group0的位置是0,SH的位置是1...。
SDK会将Personal group和LDAP group都存在storage中,type='ldap'说明这个group是LDAP group,否则是Personal group(因为LDAP和Personal的group名称有可能相同,因此我们必须要区分是LDAP还是Personal的group)。

SDK在Login的过程中,会向UI fire OnListGroup回调,这时候必须要过滤掉LDAP类型的group(LDAP的group会有专门的回调)。

<iq id='conid27' type='set'>
  <query xmlns='jabber:iq:private'>
    <storage xmlns='http://jabber.com/jabber/storage:groups'>
      <group type='ldap'>ldap group id</group>   //position is 0
      <group>SH</group>   //position is 1
      <group>Team</group> //pos is 2
      <group>Test Users</group> //pos is 3
      <group>US</group> //pos is 4
      <group>SZ</group>  //pos is 5
      <group>HZ</group>  //pos is 6
      <group>HF</group> //pos is 7
    </storage>
  </query>
</iq>

SDK和UI之间的接口

UI在现实group list之前,调用SDK的GetGroupPos方法获取每个group的position,然后排序显示。
用户拖动一个group时,UI调用SDK的MoveGroup方法,SDK将重新排好序的Group list存到storage中,同时向UI fire OnGroupMoved回调,UI收到回调以后,调用SDK的GetGroupPos方法获取所有group的position,然后重新排序显示。

你可能感兴趣的:(UI,list,query,login,XMPP)