Bitliker 9 years ago
parent
commit
b5aea1c2e7

+ 16 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/FriendDao.java

@@ -280,7 +280,7 @@ public class FriendDao {
             friendsList = friendDao.queryForMatching(friend);
             if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
                 friendDao.create(friend);
-				/*ChatMessage chatMessage = new ChatMessage();
+                /*ChatMessage chatMessage = new ChatMessage();
 				chatMessage.setType(XmppMessage.TYPE_TIP);
 				chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
 				chatMessage.setFromUserId(Friend.ID_ERP_GONGGAO);
@@ -742,6 +742,21 @@ public class FriendDao {
 
     }
 
+    // ///////////////////////////////获取朋友列表///////////
+    public List<Friend> getFriends(String ownerId, String key, String values) {
+        try {
+            PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and()
+                    .in("status", new Object[]{Friend.STATUS_FRIEND}).and().eq("roomFlag", 0).and().eq("companyId", 0)
+                    .and().eq(key, values)
+                    .prepare();
+            return friendDao.query(preparedQuery);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
     public List<Friend> getSysFriends(String ownerId) {
         try {
             PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and()

+ 233 - 228
WeiChat/src/main/java/com/xzjmyk/pm/activity/helper/FriendHelper.java

@@ -24,249 +24,254 @@ import java.util.HashMap;
 import java.util.List;
 
 /**
- * 暂时无用
- * 
  * @author Dean Tao
- * 
  */
 public class FriendHelper {
 
-	/**
-	 * 
-	 * @param loginUserId
-	 *            当前登陆者的Id
-	 * @param friendId
-	 *            朋友的Id
-	 * @param attentionUser
-	 *            从服务器上获取的关系
-	 */
-	public static boolean updateFriendRelationship(String loginUserId, String friendId, AttentionUser attentionUser) {// 更新两者的关系,因为本地数据可能不正确
-		boolean changed = false;
-		Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);// 本地好友
-		if (attentionUser == null || (attentionUser.getStatus() != Friend.STATUS_ATTENTION && attentionUser.getStatus() != Friend.STATUS_FRIEND)) {// 服务器上不存在关系
-			if (friend == null) {// 本地也不存在关系
-				// do no thing
-			} else {// 本地存在关系
-				removeAttentionOrFriend(loginUserId, friendId);// 直接删除好友(也有可能是关注关系,但是删除好友的操作包括删除关注的所有操作,所以直接删除好友)|
-				changed = true;
-			}
-		} else {// 服务器上存在关系
-			if (friend == null) {// 本地不存在关系,那么就要插入一条好友记录
-				friend = new Friend();
-				friend.setTimeCreate(attentionUser.getCreateTime());
-				friend.setTimeSend(TimeUtils.sk_time_current_time());
-				friend.setOwnerId(attentionUser.getUserId());
-				friend.setUserId(attentionUser.getToUserId());
-				friend.setNickName(attentionUser.getToNickName());
-				friend.setRemarkName(attentionUser.getRemarkName());
-				friend.setRoomFlag(0);// 0朋友 1群组
-				friend.setCompanyId(attentionUser.getCompanyId());// 公司
-				int status = (attentionUser.getBlacklist() == 0) ? attentionUser.getStatus() : Friend.STATUS_BLACKLIST;
-				friend.setStatus(status);
-				friend.setVersion(TableVersionSp.getInstance(MyApplication.getInstance()).getFriendTableVersion(loginUserId));// 更新版本
-				FriendDao.getInstance().createOrUpdateFriend(friend);
+    /**
+     * @param loginUserId   当前登陆者的Id
+     * @param friendId      朋友的Id
+     * @param attentionUser 从服务器上获取的关系
+     */
+    public static boolean updateFriendRelationship(String loginUserId, String friendId, AttentionUser attentionUser) {// 更新两者的关系,因为本地数据可能不正确
+        boolean changed = false;
+        Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);// 本地好友
+        if (attentionUser == null || (attentionUser.getStatus() != Friend.STATUS_ATTENTION && attentionUser.getStatus() != Friend.STATUS_FRIEND)) {// 服务器上不存在关系
+            if (friend == null) {// 本地也不存在关系
+                // do no thing
+            } else {// 本地存在关系
+                removeAttentionOrFriend(loginUserId, friendId);// 直接删除好友(也有可能是关注关系,但是删除好友的操作包括删除关注的所有操作,所以直接删除好友)|
+                changed = true;
+            }
+        } else {// 服务器上存在关系
+            if (friend == null) {// 本地不存在关系,那么就要插入一条好友记录
+                friend = new Friend();
+                friend.setTimeCreate(attentionUser.getCreateTime());
+                friend.setTimeSend(TimeUtils.sk_time_current_time());
+                friend.setOwnerId(attentionUser.getUserId());
+                friend.setUserId(attentionUser.getToUserId());
+                friend.setNickName(attentionUser.getToNickName());
+                friend.setRemarkName(attentionUser.getRemarkName());
+                friend.setRoomFlag(0);// 0朋友 1群组
+                friend.setCompanyId(attentionUser.getCompanyId());// 公司
+                int status = (attentionUser.getBlacklist() == 0) ? attentionUser.getStatus() : Friend.STATUS_BLACKLIST;
+                friend.setStatus(status);
+                friend.setVersion(TableVersionSp.getInstance(MyApplication.getInstance()).getFriendTableVersion(loginUserId));// 更新版本
+                FriendDao.getInstance().createOrUpdateFriend(friend);
 
-				if (status == Friend.STATUS_BLACKLIST) {// 如果在黑名单中(理论上不可能)
-					// do no thing
-				} else if (status == Friend.STATUS_ATTENTION) {// 如果是关注(理论上不可能)
-					addAttentionExtraOperation(loginUserId, friendId);
-				} else if (status == Friend.STATUS_FRIEND) {// 如果是好友
-					addFriendExtraOperation(loginUserId, friendId);
-				}
-				changed = true;
+                if (status == Friend.STATUS_BLACKLIST) {// 如果在黑名单中(理论上不可能)
+                    // do no thing
+                } else if (status == Friend.STATUS_ATTENTION) {// 如果是关注(理论上不可能)
+                    addAttentionExtraOperation(loginUserId, friendId);
+                } else if (status == Friend.STATUS_FRIEND) {// 如果是好友
+                    addFriendExtraOperation(loginUserId, friendId);
+                }
+                changed = true;
 
-			} else {
-				int status = attentionUser.getBlacklist() == 0 ? attentionUser.getStatus() : Friend.STATUS_BLACKLIST;
-				if (status == friend.getStatus()) {
-					// do no thing
-				} else {
-					FriendDao.getInstance().updateFriendStatus(loginUserId, friendId, status);
-					if (status == Friend.STATUS_BLACKLIST) {// 如果之前在黑名单中,现在是STATUS_ATTENTION或者STATUS_FRIEND
-						if (friend.getStatus() == Friend.STATUS_ATTENTION) {
-							addAttentionExtraOperation(loginUserId, friendId);
-						} else if (friend.getStatus() == Friend.STATUS_FRIEND) {
-							addFriendExtraOperation(loginUserId, friendId);
-						}
-					} else if (status == Friend.STATUS_ATTENTION) {// 如果之前是关注,现在是黑名单或者好友
-						if (friend.getStatus() == Friend.STATUS_BLACKLIST) {
-							addBlacklistExtraOperation(loginUserId, friendId);
-						} else if (friend.getStatus() == Friend.STATUS_FRIEND) {
-							addFriendExtraOperation(loginUserId, friendId);
-						}
-					} else if (status == Friend.STATUS_FRIEND) {
-						if (friend.getStatus() == Friend.STATUS_BLACKLIST) {
-							addBlacklistExtraOperation(loginUserId, friendId);
-						} else if (friend.getStatus() == Friend.STATUS_ATTENTION) {// 本来是好友,现在变成关注
-							// 消息表中删除
-							ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
-							// 2、更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
-							MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-							// 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
-							MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
-						}
-					}
-					changed = true;
-				}
-			}
-		}
-		return changed;
-	}
+            } else {
+                int status = attentionUser.getBlacklist() == 0 ? attentionUser.getStatus() : Friend.STATUS_BLACKLIST;
+                if (status == friend.getStatus()) {
+                    // do no thing
+                } else {
+                    FriendDao.getInstance().updateFriendStatus(loginUserId, friendId, status);
+                    if (status == Friend.STATUS_BLACKLIST) {// 如果之前在黑名单中,现在是STATUS_ATTENTION或者STATUS_FRIEND
+                        if (friend.getStatus() == Friend.STATUS_ATTENTION) {
+                            addAttentionExtraOperation(loginUserId, friendId);
+                        } else if (friend.getStatus() == Friend.STATUS_FRIEND) {
+                            addFriendExtraOperation(loginUserId, friendId);
+                        }
+                    } else if (status == Friend.STATUS_ATTENTION) {// 如果之前是关注,现在是黑名单或者好友
+                        if (friend.getStatus() == Friend.STATUS_BLACKLIST) {
+                            addBlacklistExtraOperation(loginUserId, friendId);
+                        } else if (friend.getStatus() == Friend.STATUS_FRIEND) {
+                            addFriendExtraOperation(loginUserId, friendId);
+                        }
+                    } else if (status == Friend.STATUS_FRIEND) {
+                        if (friend.getStatus() == Friend.STATUS_BLACKLIST) {
+                            addBlacklistExtraOperation(loginUserId, friendId);
+                        } else if (friend.getStatus() == Friend.STATUS_ATTENTION) {// 本来是好友,现在变成关注
+                            // 消息表中删除
+                            ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
+                            // 2、更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
+                            MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+                            // 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
+                            MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
+                        }
+                    }
+                    changed = true;
+                }
+            }
+        }
+        return changed;
+    }
 
-	/**
-	 * 加入黑名单,额外需要做的操作
-	 */
-	public static void addBlacklistExtraOperation(String loginUserId, String friendId) {
-		// 消息表中删除
-		ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
-		// 商务圈消息表删除
-		CircleMessageDao.getInstance().deleteMessage(loginUserId, friendId);
-		// 2、更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
-		MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-		// 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
-		MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
-	}
+    /**
+     * 加入黑名单,额外需要做的操作
+     */
+    public static void addBlacklistExtraOperation(String loginUserId, String friendId) {
+        // 消息表中删除
+        ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
+        // 商务圈消息表删除
+        CircleMessageDao.getInstance().deleteMessage(loginUserId, friendId);
+        // 2、更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
+        MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+        // 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
+        MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
+    }
 
-	/**
-	 * 在本地数据库表中出入一条关注记录,额外需要做的操作
-	 */
-	public static void addAttentionExtraOperation(String loginUserId, String friendId) {
-		// 下载商务圈消息
-		FriendHelper.downloadCircleMessage(loginUserId, friendId);
-	}
+    /**
+     * 添加特别关注
+     */
+    public static void addPeculiarFriend(Friend friend) {
+        friend.setPrivacy("true");
+        FriendDao.getInstance().createOrUpdateFriend(friend);
+    }
 
-	/**
-	 * 在本地数据库表中出入一条好友记录,额外需要做的操作
-	 */
-	public static void addFriendExtraOperation(String loginUserId, String friendId) {
-		// 下载商务圈消息
-		FriendHelper.downloadCircleMessage(loginUserId, friendId);
-		// 插入一条系统提示消息
-		FriendDao.getInstance().addNewFriendInMsgTable(loginUserId, friendId);
-		// 更新Message Ui
-		MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-		// 更新Main Ui message 未读数量
-		MsgBroadcast.broadcastMsgNumUpdate(MyApplication.getInstance(), true, 1);
-	}
+    /**
+     * 移除特别关注
+     */
+    public static void removePeculiarFriend(Friend friend) {
+        friend.setPrivacy("false");
+        FriendDao.getInstance().createOrUpdateFriend(friend);
+    }
 
-	/**
-	 * 如果关注或加好友某个人,那么就去下载他的商务圈消息
-	 * 
-	 * @param loginUserId
-	 * @param firendId
-	 */
-	public static void downloadCircleMessage(final String loginUserId, final String firendId) {
-		final Context context = MyApplication.getInstance();
-		// 先清除他的商务圈消息,容错
-		CircleMessageDao.getInstance().deleteMessage(loginUserId, firendId);
-		// 下载他的商务圈消息
-		HashMap<String, String> params = new HashMap<String, String>();
-		params.put("access_token", MyApplication.getInstance().mAccessToken);
-		params.put("userId", firendId);
+    /**
+     * 在本地数据库表中出入一条关注记录,额外需要做的操作
+     */
+    public static void addAttentionExtraOperation(String loginUserId, String friendId) {
+        // 下载商务圈消息
+        FriendHelper.downloadCircleMessage(loginUserId, friendId);
+    }
 
-		StringJsonArrayRequest<CircleMessage> request = new StringJsonArrayRequest<CircleMessage>(
-				MyApplication.getInstance().getConfig().USER_CIRCLE_MESSAGE, new ErrorListener() {
-					@Override
-					public void onErrorResponse(VolleyError arg0) {
-					}
-				}, new StringJsonArrayRequest.Listener<CircleMessage>() {
-					@Override
-					public void onResponse(ArrayResult<CircleMessage> result) {
-						boolean success = Result.defaultParser(context, result, false);
-						if (success && result.getData() != null) {
-							List<CircleMessage> list = result.getData();
-							for (int i = 0; i < list.size(); i++) {
-								// 消息完整性填充
-								list.get(i).setUserId(firendId);
-							}
-							CircleMessageDao.getInstance().addFriendMessages(loginUserId, firendId, result.getData());
-						}
-					}
-				}, CircleMessage.class, params);
-		request.setRetryPolicy(FastVolley.newDefaultRetryPolicy());
-		MyApplication.getInstance().getFastVolley().addDefaultRequest(null, request);
-	}
+    /**
+     * 在本地数据库表中出入一条好友记录,额外需要做的操作
+     */
+    public static void addFriendExtraOperation(String loginUserId, String friendId) {
+        // 下载商务圈消息
+        FriendHelper.downloadCircleMessage(loginUserId, friendId);
+        // 插入一条系统提示消息
+        FriendDao.getInstance().addNewFriendInMsgTable(loginUserId, friendId);
+        // 更新Message Ui
+        MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+        // 更新Main Ui message 未读数量
+        MsgBroadcast.broadcastMsgNumUpdate(MyApplication.getInstance(), true, 1);
+    }
 
-	/**
-	 * 移除一个关注级别的用户,可能是关注或者好友
-	 * 
-	 * @param context
-	 * @param ownerId
-	 * @param firendId
-	 */
-	public static void removeAttentionOrFriend(String ownerId, String friendId) {
-		// 从好友表中删除
-		FriendDao.getInstance().deleteFriend(ownerId, friendId);
-		// 新朋友表中删除
-		// NewFriendDao.getInstance().deleteNewFriend(ownerId, friendId);
-		// 消息表中删除
-		ChatMessageDao.getInstance().deleteMessageTable(ownerId, friendId);
-		// 商务圈消息表删除
-		CircleMessageDao.getInstance().deleteMessage(ownerId, friendId);
-		// 更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
-		MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-		// 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
-		MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
-	}
+    /**
+     * 如果关注或加好友某个人,那么就去下载他的商务圈消息
+     *
+     * @param loginUserId
+     * @param firendId
+     */
+    public static void downloadCircleMessage(final String loginUserId, final String firendId) {
+        final Context context = MyApplication.getInstance();
+        // 先清除他的商务圈消息,容错
+        CircleMessageDao.getInstance().deleteMessage(loginUserId, firendId);
+        // 下载他的商务圈消息
+        HashMap<String, String> params = new HashMap<String, String>();
+        params.put("access_token", MyApplication.getInstance().mAccessToken);
+        params.put("userId", firendId);
 
-	// ////////////////////上面是我的主动操作/////////////////
-	// ////////////////////下面是我的被动操作/////////////////
-	/**
-	 * 被加入黑名单
-	 * 
-	 * @param ownerId
-	 * @param firendId
-	 */
-	public static void beAddBlacklist(String loginUserId, String friendId) {
-		Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);// 本地好友
-		if (friend == null) {// 不存在该好友
-			return;
-		}
-		// 商务圈消息表删除
-		CircleMessageDao.getInstance().deleteMessage(loginUserId, friendId);
-	}
+        StringJsonArrayRequest<CircleMessage> request = new StringJsonArrayRequest<CircleMessage>(
+                MyApplication.getInstance().getConfig().USER_CIRCLE_MESSAGE, new ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError arg0) {
+            }
+        }, new StringJsonArrayRequest.Listener<CircleMessage>() {
+            @Override
+            public void onResponse(ArrayResult<CircleMessage> result) {
+                boolean success = Result.defaultParser(context, result, false);
+                if (success && result.getData() != null) {
+                    List<CircleMessage> list = result.getData();
+                    for (int i = 0; i < list.size(); i++) {
+                        // 消息完整性填充
+                        list.get(i).setUserId(firendId);
+                    }
+                    CircleMessageDao.getInstance().addFriendMessages(loginUserId, firendId, result.getData());
+                }
+            }
+        }, CircleMessage.class, params);
+        request.setRetryPolicy(FastVolley.newDefaultRetryPolicy());
+        MyApplication.getInstance().getFastVolley().addDefaultRequest(null, request);
+    }
 
-	/**
-	 * 别人删除了关注我
-	 */
-	public static void beDeleteSeeNewFriend(String loginUserId, String friendId) {
-		Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);
-		if (friend != null) {// 如果我也有这个好友
-			if (friend.getStatus() == Friend.STATUS_FRIEND) {// 如果之前是朋友,那么现在降级为关注
-				friend.setStatus(Friend.STATUS_ATTENTION);
-				friend.setContent("");
-				// 由好友变为关注,更新一些数据
-				FriendDao.getInstance().createOrUpdateFriend(friend);
-				// 消息表中删除
-				ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
-				// 更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
-				MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-				// 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
-				MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
-				// 可能正在看通讯录,那么通讯录也要更新
-				CardcastUiUpdateUtil.broadcastUpdateUi(MyApplication.getInstance());
-			}
-		}
-	}
+    /**
+     * 移除一个关注级别的用户,可能是关注或者好友
+     * @param ownerId
+     */
+    public static void removeAttentionOrFriend(String ownerId, String friendId) {
+        // 从好友表中删除
+        FriendDao.getInstance().deleteFriend(ownerId, friendId);
+        // 新朋友表中删除
+        // NewFriendDao.getInstance().deleteNewFriend(ownerId, friendId);
+        // 消息表中删除
+        ChatMessageDao.getInstance().deleteMessageTable(ownerId, friendId);
+        // 商务圈消息表删除
+        CircleMessageDao.getInstance().deleteMessage(ownerId, friendId);
+        // 更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
+        MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+        // 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
+        MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
+    }
 
-	/**
-	 * 别人彻底删除了我
-	 */
-	public static void beDeleteAllNewFriend(String loginUserId, String friendId) {
-		removeAttentionOrFriend(loginUserId, friendId);
-		// 可能正在看通讯录,那么通讯录也要更新
-		CardcastUiUpdateUtil.broadcastUpdateUi(MyApplication.getInstance());
-	}
+    // ////////////////////上面是我的主动操作/////////////////
+    // ////////////////////下面是我的被动操作/////////////////
 
-	/**
-	 * 在本地数据库表中出入一条好友记录,额外需要做的操作
-	 */
-	public static void beAddFriendExtraOperation(String loginUserId, String friendId) {
-		// 插入一条系统提示消息
-		FriendDao.getInstance().addNewFriendInMsgTable(loginUserId, friendId);
-		// 更新Message Ui
-		MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
-		// 更新Main Ui message 未读数量
-		MsgBroadcast.broadcastMsgNumUpdate(MyApplication.getInstance(), true, 1);
-	}
+    /**
+     * 被加入黑名单
+     *
+     */
+    public static void beAddBlacklist(String loginUserId, String friendId) {
+        Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);// 本地好友
+        if (friend == null) {// 不存在该好友
+            return;
+        }
+        // 商务圈消息表删除
+        CircleMessageDao.getInstance().deleteMessage(loginUserId, friendId);
+    }
+
+    /**
+     * 别人删除了关注我
+     */
+    public static void beDeleteSeeNewFriend(String loginUserId, String friendId) {
+        Friend friend = FriendDao.getInstance().getFriend(loginUserId, friendId);
+        if (friend != null) {// 如果我也有这个好友
+            if (friend.getStatus() == Friend.STATUS_FRIEND) {// 如果之前是朋友,那么现在降级为关注
+                friend.setStatus(Friend.STATUS_ATTENTION);
+                friend.setContent("");
+                // 由好友变为关注,更新一些数据
+                FriendDao.getInstance().createOrUpdateFriend(friend);
+                // 消息表中删除
+                ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friendId);
+                // 更新消息界面(消息界面可能之前存在和该用户的聊天记录,要删除掉)
+                MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+                // 3、更新主界面未读数量(消息界面可能之前存在和该用户的聊天记录,要删除掉,未读数量可能改变)
+                MsgBroadcast.broadcastMsgNumReset(MyApplication.getInstance());
+                // 可能正在看通讯录,那么通讯录也要更新
+                CardcastUiUpdateUtil.broadcastUpdateUi(MyApplication.getInstance());
+            }
+        }
+    }
+
+    /**
+     * 别人彻底删除了我
+     */
+    public static void beDeleteAllNewFriend(String loginUserId, String friendId) {
+        removeAttentionOrFriend(loginUserId, friendId);
+        // 可能正在看通讯录,那么通讯录也要更新
+        CardcastUiUpdateUtil.broadcastUpdateUi(MyApplication.getInstance());
+    }
+
+    /**
+     * 在本地数据库表中出入一条好友记录,额外需要做的操作
+     */
+    public static void beAddFriendExtraOperation(String loginUserId, String friendId) {
+        // 插入一条系统提示消息
+        FriendDao.getInstance().addNewFriendInMsgTable(loginUserId, friendId);
+        // 更新Message Ui
+        MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
+        // 更新Main Ui message 未读数量
+        MsgBroadcast.broadcastMsgNumUpdate(MyApplication.getInstance(), true, 1);
+    }
 
 }

+ 14 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/BasicInfoActivity.java

@@ -121,7 +121,7 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
         mProgressDialog = ProgressDialogUtil.init(this, null, getString(R.string.please_wait));
         initView();
 
-        if ( userId.equals("0")) {            //当imid不存在时候
+        if (userId.equals("0")) {            //当imid不存在时候
             isMyInfo = false;
             loadOthersInfoFromDB();
         } else {
@@ -136,6 +136,7 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
         ListenerManager.getInstance().addNewFriendListener(this);
         mBind = bindService(CoreService.getIntent(), mServiceConnection, BIND_AUTO_CREATE);
     }
+
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         if (showMenu && mFriend != null) {
@@ -187,16 +188,16 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
                 && mFriend.getStatus() == Friend.STATUS_FRIEND) {
             return super.onOptionsItemSelected(item);
         }
-        CharSequence[] items = new CharSequence[4];
+        CharSequence[] items = new CharSequence[5];
         items[0] = getString(R.string.set_remark_name);// 设置备注名
         if (mFriend.getStatus() == Friend.STATUS_BLACKLIST) {// 在黑名单中,显示“设置备注名”、“移除黑名单”,"取消关注",“彻底删除”
             items[1] = getString(R.string.remove_blacklist);
         } else {
             items[1] = getString(R.string.add_blacklist);
         }
-
-        items[2] = getString(R.string.cancel_attention);
-        items[3] = getString(R.string.delete_all);
+        items[3] = getString(R.string.more_attention);
+        items[3] = getString(R.string.cancel_attention);
+        items[4] = getString(R.string.delete_all);
         int itemId = item.getItemId();
         switch (itemId) {
             case R.id.set_remark_name:// 设置备注名
@@ -211,6 +212,9 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
             case R.id.cancel_attention:// 设置备注名
                 showCancelAttentionDialog(mFriend);
                 break;
+            case R.id.set_more_attention:// 设置备注名
+                setMoreAttention(mFriend);
+                break;
             case R.id.delete_all:// 设置备注名
                 showDeleteAllDialog(mFriend);
                 break;
@@ -664,6 +668,11 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
 
     }
 
+    /*设置对嘎好友特别关注*/
+    private void setMoreAttention(Friend friend) {
+        FriendHelper.addPeculiarFriend(friend);
+    }
+
     /**
      * 取消关注
      *

+ 13 - 14
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/MyFriendActivity.java

@@ -76,9 +76,11 @@ public class MyFriendActivity extends BaseActivity {
     private BaseComparator<Friend> mBaseComparator;
     private FriendSortAdapter mAdapter;
     private String mLoginUserId;
-    private Handler mHandler = new Handler() ;
+    private Handler mHandler = new Handler();
     private boolean mNeedUpdate = true;
     private DBManager manager;
+    private boolean isPeculiar = false;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -87,6 +89,7 @@ public class MyFriendActivity extends BaseActivity {
         mSortFriends = new ArrayList<BaseSortModel<Friend>>();
         mBaseComparator = new BaseComparator<Friend>();
         mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
+        isPeculiar = getIntent().getBooleanExtra("isPeculiar", false);
         initView();
 
     }
@@ -103,9 +106,9 @@ public class MyFriendActivity extends BaseActivity {
         for (int i = 0; i < emList.size(); i++) {
             String fId = String.valueOf(emList.get(i).getEm_IMID());
             for (int j = 0; j < friend.size(); j++) {
-                if (fId.equals(friend.get(j).getUserId())){  //当有重复
+                if (fId.equals(friend.get(j).getUserId())) {  //当有重复
                     break;
-                } else if ((j == (friend.size() - 1))&&!(fId.equals(friend.get(j).getUserId()))) {
+                } else if ((j == (friend.size() - 1)) && !(fId.equals(friend.get(j).getUserId()))) {
                     friends.add(EnterChatAction(emList.get(i)));
                 }
             }
@@ -113,7 +116,6 @@ public class MyFriendActivity extends BaseActivity {
         friend.addAll(friends);
     }
 
-    //TODO 未知功能
     private Friend EnterChatAction(EmployeesEntity employee) {
         Friend friend = new Friend();
         friend.setUserId(String.valueOf(employee.getEm_IMID()));
@@ -143,7 +145,6 @@ public class MyFriendActivity extends BaseActivity {
                 boolean success = Result.defaultParser(MyFriendActivity.this, result, false);
                 if (success) {
                     FriendDao.getInstance().addAttentionUsers(mHandler, MyApplication.getInstance().mLoginUser.getUserId(), result.getData(),
-
                             new OnCompleteListener() {
                                 @Override
                                 public void onCompleted() {
@@ -153,7 +154,6 @@ public class MyFriendActivity extends BaseActivity {
                 }
             }
         }, AttentionUser.class, params);
-//		mActivity.addDefaultRequest(request);
         MyApplication.getInstance().getFastVolley().addDefaultRequest(HASHCODE, request);
     }
 
@@ -210,7 +210,6 @@ public class MyFriendActivity extends BaseActivity {
         });
 
         mPullToRefreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-
             private Friend friend;   //l临时对象
 
             @Override
@@ -252,6 +251,7 @@ public class MyFriendActivity extends BaseActivity {
 
         mProgressDialog = ProgressDialogUtil.init(MyFriendActivity.this, null, getString(R.string.please_wait));
     }
+
     @Override
     public void onResume() {
         super.onResume();
@@ -261,6 +261,8 @@ public class MyFriendActivity extends BaseActivity {
         }
     }
 
+    List<Friend> friends;//临时变量
+
     private void loadData() {
         new Thread(new Runnable() {
             @Override
@@ -268,18 +270,16 @@ public class MyFriendActivity extends BaseActivity {
                 long startTime = System.currentTimeMillis();
                 if (mLoginUserId == null)
                     mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
-                final List<Friend> friends = FriendDao.getInstance().getFriends(mLoginUserId);
-                Log.i("wang", "friends =" + friends);
-                Log.i("wang", "friends mloginuserid=" + mLoginUserId);
-//                getDataByDB(friends);
+                if (isPeculiar) {
+                    friends = FriendDao.getInstance().getFriends(mLoginUserId,"privacy","true");
+                } else
+                    friends = FriendDao.getInstance().getFriends(mLoginUserId);
                 if (friends != null)
                     Log.i("wang", "friends size()=" + friends.size());
-
                 long delayTime = 200 - (startTime - System.currentTimeMillis());// 保证至少200ms的刷新过程
                 if (delayTime < 0) {
                     delayTime = 0;
                 }
-
                 mHandler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
@@ -613,7 +613,6 @@ public class MyFriendActivity extends BaseActivity {
     }
 
 
-
     @Override
     public void onDestroy() {
         super.onDestroy();

+ 5 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/ContactExpanAdapter.java

@@ -69,11 +69,11 @@ public class ContactExpanAdapter extends BaseExpandableListAdapter {
         TextView tv = (TextView) view.findViewById(R.id.num_tv);
         ImageView next_img = (ImageView) view.findViewById(R.id.next_img);
         tv.setText("常用联系人(" + likeFriends.get(i).size() + ")");
-        if (b) {
-            next_img.setImageResource(R.drawable.oa_next);
-        } else {
-            next_img.setImageResource(R.drawable.oa_doit);
-        }
+//        if (b) {
+//            next_img.setImageResource(R.drawable.oa_next);
+//        } else {
+//            next_img.setImageResource(R.drawable.oa_doit);
+//        }
         return view;
     }
 

+ 0 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/LinksManFragment.java

@@ -405,7 +405,6 @@ public class LinksManFragment extends XutilsFragment implements View.OnClickList
                 groupHeight = expandableListView.getHeight();
             }
         });
-
         expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
             @Override
             public boolean onGroupClick(ExpandableListView parent, View view, int i, long l) {
@@ -445,12 +444,10 @@ public class LinksManFragment extends XutilsFragment implements View.OnClickList
                 if (delayTime < 0) {
                     delayTime = 0;
                 }
-
                 mHandler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
                         isHideManageChatMenu();
-
                         mSortFriends.clear();
                         mSideBar.clearExist();
                         mSideBar.addExist("↑");

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -947,7 +947,7 @@ public class MessageFragment extends EasyFragment {
                 }
                 int task_num = 0, pagin_num = 0, daiban_num = 0;
                 for (int i = 0; i < allProcesses.size(); i++) {
-                    if (allProcesses.get(i).getTypecode().contains("task")&&!allProcesses.get(i).getTypecode().equals("projecttask")) {//我的任务
+                    if (allProcesses.get(i).getTypecode().contains("task") && !allProcesses.get(i).getTypecode().equals("projecttask") && !allProcesses.get(i).getTypecode().equals("worktask")) {//我的任务
                         task_num++;
                     } else if (allProcesses.get(i).getTypecode().contains("dingyue")) {//订阅
                         if ("0".equals(allProcesses.get(i).getStatus().trim())) {

+ 9 - 6
WeiChat/src/main/res/menu/menu_basic_info.xml

@@ -1,22 +1,25 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    tools:context="com.xzjmyk.pm.activity.MainActivity" >
+    tools:context="com.xzjmyk.pm.activity.MainActivity">
 
     <item
         android:id="@+id/set_remark_name"
-        android:title="@string/set_remark_name"/>
+        android:title="@string/set_remark_name" />
     <item
         android:id="@+id/remove_blacklist"
-        android:title="@string/remove_blacklist"/>
+        android:title="@string/remove_blacklist" />
     <item
         android:id="@+id/add_blacklist"
-        android:title="@string/add_blacklist"/>
+        android:title="@string/add_blacklist" />
+    <item
+        android:id="@+id/set_more_attention"
+        android:title="@string/more_attention" />
     <item
         android:id="@+id/cancel_attention"
-        android:title="@string/cancel_attention"/>
+        android:title="@string/cancel_attention" />
     <item
         android:id="@+id/delete_all"
-        android:title="@string/delete_all"/>
+        android:title="@string/delete_all" />
 
 </menu>

+ 2 - 1
WeiChat/src/main/res/values/strings.xml

@@ -183,6 +183,7 @@
     <string name="add_blacklist_prompt">确定要加入黑名单吗?</string>
     <string name="remove_blacklist_prompt">确定要移出黑名单吗</string>
     <string name="his_in_the_blacklist">已将对方加入黑名单</string>
+    <string name="more_attention">添加到特别关注</string>
     <string name="cancel_attention">取消关注</string>
     <string name="delete_all">彻底删除</string>
     <string name="cancel_attention_prompt">确定要取消关注吗?</string>
@@ -465,5 +466,5 @@
     <string name="umeng_socialize_text_alipay_key">支付宝</string>
     <string name="umeng_socialize_text_kakao_key">Kakao Talk</string>
     <string name="umeng_socialize_text_googleplus_key">GooglePlus</string>
-    <string name="umeng_socialize_text_more_key">更多</string> 
+    <string name="umeng_socialize_text_more_key">更多</string>
 </resources>

+ 2 - 0
pullToRefershLibraryMy/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java

@@ -293,6 +293,8 @@ public class PullToRefreshListView extends PullToRefreshAdapterViewBase<ListView
 				super.dispatchDraw(canvas);
 			} catch (IndexOutOfBoundsException e) {
 				e.printStackTrace();
+			}catch (Exception e){
+				e.printStackTrace();
 			}
 		}