/** * 初始化用户头像缓存 * * @param userIDList 用户ID List * @param length 头像宽高 * @param callBack 缓存回调 */ public void setAvatarCache( final List<String> userIDList, final int length, final cacheAvatarCallBack callBack) { final Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); if (msg.getData() != null) { callBack.onCacheAvatarCallBack(msg.getData().getInt("status", -1)); } } }; for (final String userID : userIDList) { // 若为CurrentUser,直接获取本地的头像(CurrentUser本地头像为最新) if (userID.equals(JMessageClient.getMyInfo().getUserName())) { File file = JMessageClient.getMyInfo().getAvatar(); if (file == null || !file.exists()) { continue; } else { Bitmap bitmap = BitmapLoader.getBitmapFromFile(file.getAbsolutePath(), length, length); if (null != bitmap) { mMemoryCache.put(userID, bitmap); } continue; } } else if (mMemoryCache.get(userID) != null) { continue; } else { JMessageClient.getUserInfo( userID, new GetUserInfoCallback(false) { @Override public void gotResult(int i, String s, UserInfo userInfo) { if (i == 0) { File file = userInfo.getAvatar(); if (file != null) { Bitmap bitmap = BitmapLoader.getBitmapFromFile(file.getAbsolutePath(), length, length); addBitmapToMemoryCache(userID, bitmap); } else { // Bitmap bitmap = // BitmapLoader.getBitmapFromFile(getR.drawable.head_icon, length, length); } android.os.Message msg = handler.obtainMessage(); Bundle bundle = new Bundle(); bundle.putInt("status", 0); msg.setData(bundle); msg.sendToTarget(); } } }); } } }
@Override public void onResume() { // 褰撳墠鐢ㄦ埛淇℃伅涓虹┖锛岄渶瑕侀噸鏂扮櫥褰� if (null == JMessageClient.getMyInfo() || TextUtils.isEmpty(JMessageClient.getMyInfo().getUserName())) { // Intent intent = new Intent(); // intent.setClass(this.getActivity(), LoginActivity.class); // startActivity(intent); // getActivity().finish(); } else { dismissPopWindow(); mConvListController.refreshConvList(); } super.onResume(); }
private void handleGroupChangeMsg(Message msg, ViewHolder holder, TextView msgTime) { UserInfo myInfo = JMessageClient.getMyInfo(); GroupInfo groupInfo = (GroupInfo) msg.getTargetInfo(); String content = ((EventNotificationContent) msg.getContent()).getEventText(); EventNotificationContent.EventNotificationType type = ((EventNotificationContent) msg.getContent()).getEventNotificationType(); switch (type) { case group_member_added: holder.groupChange.setText(content); holder.groupChange.setVisibility(View.VISIBLE); break; case group_member_exit: holder.groupChange.setVisibility(View.GONE); msgTime.setVisibility(View.GONE); break; case group_member_removed: List<String> userNames = ((EventNotificationContent) msg.getContent()).getUserNames(); // 被删除的人显示EventNotification if (userNames.contains(myInfo.getNickname()) || userNames.contains(myInfo.getUserName())) { holder.groupChange.setText(content); holder.groupChange.setVisibility(View.VISIBLE); // 群主亦显示 } else if (myInfo.getUserName().equals(groupInfo.getGroupOwner())) { holder.groupChange.setText(content); holder.groupChange.setVisibility(View.VISIBLE); } else { holder.groupChange.setVisibility(View.GONE); msgTime.setVisibility(View.GONE); } break; } }
public void initModule() { UserInfo userInfo = JMessageClient.getMyInfo(); mTitleBarTitle = (TextView) findViewById(R.id.title_bar_title); mTitleBarTitle.setText(mContext.getString(R.string.actionbar_me)); mScrollView = (PullScrollView) findViewById(R.id.scroll_view); mContentLl = (LinearLayout) findViewById(R.id.content_list_ll); mAvatarIv = (ImageView) findViewById(R.id.my_avatar_iv); mTakePhotoBtn = (ImageButton) findViewById(R.id.take_photo_iv); mUserInfoRl = (RelativeLayout) findViewById(R.id.user_info_rl); mUserNameTv = (TextView) findViewById(R.id.user_name_tv); mSettingRl = (RelativeLayout) findViewById(R.id.setting_rl); mLogoutRl = (RelativeLayout) findViewById(R.id.logout_rl); mScrollView.setHeader(mAvatarIv); if (userInfo != null) { mUserNameTv.setText(userInfo.getUserName()); File file = userInfo.getAvatar(); if (file != null && file.isFile()) { Log.i("MeView", "file.getAbsolutePath() " + file.getAbsolutePath()); DisplayMetrics dm = new DisplayMetrics(); ((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(dm); double density = dm.density; Bitmap bitmap = BitmapLoader.getBitmapFromFile( file.getAbsolutePath(), dm.widthPixels, (int) (density * 300)); mAvatarIv.setImageBitmap(bitmap); } else mAvatarIv.setImageResource(R.drawable.friends_sends_pictures_no); } }
public ChatListAdapter(Context context, String targetID) { this.context = context; this.mActivity = (Activity) context; this.mTargetID = targetID; this.mConv = JMessageClient.getSingleConversation(mTargetID); this.mMsgList = mConv.getMessagesFromNewest(0, mOffset); reverse(mMsgList); mStart = mOffset; List<String> userIDList = new ArrayList<>(); userIDList.add(targetID); userIDList.add(JMessageClient.getMyInfo().getUserName()); }
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { UserInfo userInfo = mMemberList.get(position); String userName = userInfo.getUserName(); Intent intent = new Intent(); if (userName.equals(JMessageClient.getMyInfo().getUserName())) { intent.setClass(mContext, MeInfoActivity.class); mContext.startActivity(intent); } else { intent.setClass(mContext, FriendInfoActivity.class); intent.putExtra(JChatDemoApplication.TARGET_ID, userInfo.getUserName()); intent.putExtra(JChatDemoApplication.GROUP_ID, mGroupId); mContext.startActivity(intent); } }
public void setUserNickname(JSONArray data, CallbackContext callbackContext) { Log.i(TAG, "setUserNickname"); try { String nickName = data.getString(0); Log.i(TAG, "setUserNickname" + nickName); UserInfo myUserInfo = JMessageClient.getMyInfo(); myUserInfo.setNickname(nickName); this.setUserInfo(UserInfo.Field.nickname, myUserInfo, callbackContext); callbackContext.success("update userinfo ok"); } catch (JSONException e) { e.printStackTrace(); callbackContext.error("Error reading alias JSON"); } }
public void getUserInfo(JSONArray data, CallbackContext callbackContext) { Log.i(TAG, " getUserInfo \n" + data); UserInfo info = JMessageClient.getMyInfo(); try { if (info != null && info.getUserName() != null) { JSONObject jsonItem = new JSONObject(); jsonItem.put("username", info.getUserName()); jsonItem.put("nickname", info.getNickname()); jsonItem.put("gender", "unknow"); callbackContext.success(jsonItem); } else { JSONObject jsonItem = new JSONObject(); jsonItem.put("errorCode", 863004); jsonItem.put("errorDscription", "not found"); callbackContext.error(jsonItem); } } catch (JSONException e) { e.printStackTrace(); } }
public void setUserGender(JSONArray data, CallbackContext callbackContext) { try { String genderString = data.getString(0); UserInfo.Gender gender = UserInfo.Gender.unknown; if (genderString.equals("male")) { gender = UserInfo.Gender.male; } else if (genderString.equals("female")) { gender = UserInfo.Gender.female; } UserInfo myUserInfo = JMessageClient.getMyInfo(); myUserInfo.setGender(gender); this.setUserInfo(UserInfo.Field.gender, myUserInfo, callbackContext); } catch (JSONException e) { e.printStackTrace(); callbackContext.error("Error reading alias JSON"); } }
@Override public void onClick(View v) { switch (v.getId()) { case R.id.return_btn: mContext.setResultAndFinish(); break; case R.id.nick_name_rl: mContext.startModifyNickNameActivity(); break; case R.id.sex_rl: UserInfo userInfo = JMessageClient.getMyInfo(); UserInfo.Gender gender = userInfo.getGender(); mContext.showSexDialog(gender); break; case R.id.location_rl: mContext.startSelectAreaActivity(); break; case R.id.sign_rl: mContext.startModifySignatureActivity(); break; } }
/** * 接收消息类事件 * * @param event 消息事件 */ public void onEvent(MessageEvent event) { final Message msg = event.getMessage(); // 若为群聊相关事件,如添加、删除群成员 Log.i(TAG, event.getMessage().toString()); if (msg.getContentType() == ContentType.eventNotification) { GroupInfo groupInfo = (GroupInfo) msg.getTargetInfo(); long groupID = groupInfo.getGroupID(); UserInfo myInfo = JMessageClient.getMyInfo(); EventNotificationContent.EventNotificationType type = ((EventNotificationContent) msg.getContent()).getEventNotificationType(); if (groupID == mChatController.getGroupId()) { switch (type) { case group_member_added: // 添加群成员事件 List<String> userNames = ((EventNotificationContent) msg.getContent()).getUserNames(); // 群主把当前用户添加到群聊,则显示聊天详情按钮 refreshGroupNum(); if (userNames.contains(myInfo.getNickname()) || userNames.contains(myInfo.getUserName())) { runOnUiThread( new Runnable() { @Override public void run() { mChatView.showRightBtn(); } }); } break; case group_member_removed: // 删除群成员事件 userNames = ((EventNotificationContent) msg.getContent()).getUserNames(); // 群主删除了当前用户,则隐藏聊天详情按钮 if (userNames.contains(myInfo.getNickname()) || userNames.contains(myInfo.getUserName())) { runOnUiThread( new Runnable() { @Override public void run() { mChatView.dismissRightBtn(); GroupInfo groupInfo = (GroupInfo) mChatController.getConversation().getTargetInfo(); if (TextUtils.isEmpty(groupInfo.getGroupName())) { mChatView.setChatTitle(ChatActivity.this.getString(R.string.group)); } else { mChatView.setChatTitle(groupInfo.getGroupName()); } mChatView.dismissGroupNum(); } }); } else { refreshGroupNum(); } break; case group_member_exit: refreshGroupNum(); break; } } } // 刷新消息 runOnUiThread( new Runnable() { @Override public void run() { // 收到消息的类型为单聊 if (msg.getTargetType().equals(ConversationType.single)) { String targetID = ((UserInfo) msg.getTargetInfo()).getUserName(); // 判断消息是否在当前会话中 if (!mChatController.isGroup() && targetID.equals(mChatController.getTargetId())) { Message lastMsg = mChatController.getAdapter().getLastMsg(); if (lastMsg == null || msg.getId() != lastMsg.getId()) { mChatController.getAdapter().addMsgToList(msg); } else { mChatController.getAdapter().notifyDataSetChanged(); } } } else { long groupID = ((GroupInfo) msg.getTargetInfo()).getGroupID(); if (mChatController.isGroup() && groupID == mChatController.getGroupId()) { Message lastMsg = mChatController.getAdapter().getLastMsg(); if (lastMsg == null || msg.getId() != lastMsg.getId()) { mChatController.getAdapter().addMsgToList(msg); } else { mChatController.getAdapter().notifyDataSetChanged(); } } } } }); }
/** * 用于处理拍照发送图片返回结果以及从其他界面回来后刷新聊天标题 或者聊天消息 * * @param requestCode 请求码 * @param resultCode 返回码 * @param data intent */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_CANCELED) { return; } if (requestCode == JChatDemoApplication.REQUEST_CODE_TAKE_PHOTO) { final Conversation conv = mChatController.getConversation(); try { String originPath = mChatController.getPhotoPath(); Bitmap bitmap = BitmapLoader.getBitmapFromFile(originPath, 720, 1280); ImageContent.createImageContentAsync( bitmap, new ImageContent.CreateImageContentCallback() { @Override public void gotResult(int status, String desc, ImageContent imageContent) { if (status == 0) { Message msg = conv.createSendMessage(imageContent); Intent intent = new Intent(); intent.putExtra(JChatDemoApplication.MsgIDs, new int[] {msg.getId()}); if (conv.getType() == ConversationType.group) { intent.putExtra( JChatDemoApplication.GROUP_ID, ((GroupInfo) conv.getTargetInfo()).getGroupID()); } else { intent.putExtra( JChatDemoApplication.TARGET_ID, ((UserInfo) conv.getTargetInfo()).getUserName()); } handleImgRefresh(intent); } } }); } catch (NullPointerException e) { Log.i(TAG, "onActivityResult unexpected result"); } } else if (resultCode == JChatDemoApplication.RESULT_CODE_SELECT_PICTURE) { handleImgRefresh(data); } else if (resultCode == JChatDemoApplication.RESULT_CODE_CHAT_DETAIL) { if (mChatController.isGroup()) { GroupInfo groupInfo = (GroupInfo) mChatController.getConversation().getTargetInfo(); UserInfo userInfo = groupInfo.getGroupMemberInfo(JMessageClient.getMyInfo().getUserName()); // 如果自己在群聊中,同时显示群人数 if (userInfo != null) { if (TextUtils.isEmpty(data.getStringExtra(JChatDemoApplication.NAME))) { mChatView.setChatTitle( this.getString(R.string.group), data.getIntExtra("currentCount", 0)); } else { mChatView.setChatTitle( data.getStringExtra(JChatDemoApplication.NAME), data.getIntExtra("currentCount", 0)); } } else { if (TextUtils.isEmpty(data.getStringExtra(JChatDemoApplication.NAME))) { mChatView.setChatTitle(this.getString(R.string.group)); mChatView.dismissGroupNum(); } else { mChatView.setChatTitle(data.getStringExtra(JChatDemoApplication.NAME)); mChatView.dismissGroupNum(); } } } else mChatView.setChatTitle(data.getStringExtra(JChatDemoApplication.NAME)); if (data.getBooleanExtra("deleteMsg", false)) { mChatController.getAdapter().clearMsgList(); } } else if (resultCode == JChatDemoApplication.RESULT_CODE_FRIEND_INFO) { if (!mChatController.isGroup()) { String nickname = data.getStringExtra(JChatDemoApplication.NICKNAME); if (nickname != null) { mChatView.setChatTitle(nickname); } } } }
@Override public View getView(int position, View convertView, ViewGroup parent) { ItemViewTag viewTag; Bitmap bitmap; if (convertView == null) { convertView = mInflater.inflate(R.layout.group_grid_view_item, null); viewTag = new ItemViewTag( (CircleImageView) convertView.findViewById(R.id.grid_avatar), (TextView) convertView.findViewById(R.id.grid_name), (ImageView) convertView.findViewById(R.id.grid_delete_icon)); convertView.setTag(viewTag); } else { viewTag = (ItemViewTag) convertView.getTag(); } if (position < mCurrentNum) { UserInfo userInfo = mMemberList.get(position); viewTag = (ItemViewTag) convertView.getTag(); viewTag.icon.setVisibility(View.VISIBLE); viewTag.name.setVisibility(View.VISIBLE); bitmap = NativeImageLoader.getInstance().getBitmapFromMemCache(userInfo.getUserName()); if (bitmap != null) viewTag.icon.setImageBitmap(bitmap); else { // 如果mediaID为空,表明用户没有设置过头像,用默认头像 if (TextUtils.isEmpty(userInfo.getAvatar())) { viewTag.icon.setImageResource(R.drawable.head_icon); } else { File file = userInfo.getAvatarFile(); // 如果本地存在头像 if (file != null && file.isFile()) { bitmap = BitmapLoader.getBitmapFromFile(file.getAbsolutePath(), mDefaultSize, mDefaultSize); NativeImageLoader.getInstance().updateBitmapFromCache(userInfo.getUserName(), bitmap); viewTag.icon.setImageBitmap(bitmap); // 从网上拿头像 } else { viewTag.icon.setImageResource(R.drawable.head_icon); final String userName = userInfo.getUserName(); userInfo.getAvatarFileAsync( new DownloadAvatarCallback() { @Override public void gotResult(int status, String desc, File file) { if (status == 0) { Bitmap bitmap = BitmapLoader.getBitmapFromFile( file.getAbsolutePath(), mDefaultSize, mDefaultSize); NativeImageLoader.getInstance().updateBitmapFromCache(userName, bitmap); notifyDataSetChanged(); } } }); } } } if (TextUtils.isEmpty(userInfo.getNickname())) { viewTag.name.setText(userInfo.getUserName()); } else { viewTag.name.setText(userInfo.getNickname()); } } // 是Delete状态 if (mIsShowDelete) { if (position < mCurrentNum) { UserInfo userInfo = mMemberList.get(position); // 群主不能删除自己 if (userInfo.getUserName().equals(JMessageClient.getMyInfo().getUserName())) viewTag.deleteIcon.setVisibility(View.GONE); else viewTag.deleteIcon.setVisibility(View.VISIBLE); } else { viewTag.deleteIcon.setVisibility(View.INVISIBLE); viewTag.icon.setVisibility(View.INVISIBLE); viewTag.name.setVisibility(View.INVISIBLE); } // 非Delete状态 } else { viewTag.deleteIcon.setVisibility(View.INVISIBLE); if (position < mCurrentNum) { viewTag.icon.setVisibility(View.VISIBLE); viewTag.name.setVisibility(View.VISIBLE); } else if (position == mCurrentNum) { viewTag = (ItemViewTag) convertView.getTag(); viewTag.icon.setImageResource(R.drawable.chat_detail_add); viewTag.icon.setVisibility(View.VISIBLE); viewTag.name.setVisibility(View.INVISIBLE); // 设置删除群成员按钮 } else if (position == mCurrentNum + 1) { if (mIsCreator && mCurrentNum > 1) { viewTag = (ItemViewTag) convertView.getTag(); viewTag.icon.setImageResource(R.drawable.chat_detail_del); viewTag.icon.setVisibility(View.VISIBLE); viewTag.name.setVisibility(View.INVISIBLE); } else { viewTag = (ItemViewTag) convertView.getTag(); viewTag.icon.setVisibility(View.GONE); viewTag.name.setVisibility(View.GONE); } // 空白项 } else { viewTag = (ItemViewTag) convertView.getTag(); viewTag.icon.setVisibility(View.INVISIBLE); viewTag.name.setVisibility(View.INVISIBLE); } } return convertView; }