FriendInfoActivity.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package jiguang.chat.activity;
  2. import android.app.Dialog;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.os.Bundle;
  6. import android.text.TextUtils;
  7. import com.activeandroid.query.Update;
  8. import net.zoneland.x.bpm.mobile.v1.zoneXBPM.R;
  9. import cn.jpush.im.android.api.JMessageClient;
  10. import cn.jpush.im.android.api.callback.GetAvatarBitmapCallback;
  11. import cn.jpush.im.android.api.callback.GetUserInfoCallback;
  12. import cn.jpush.im.android.api.model.Conversation;
  13. import cn.jpush.im.android.api.model.GroupInfo;
  14. import cn.jpush.im.android.api.model.UserInfo;
  15. import cn.jpush.im.android.eventbus.EventBus;
  16. import jiguang.chat.application.JGApplication;
  17. import jiguang.chat.controller.FriendInfoController;
  18. import jiguang.chat.database.FriendEntry;
  19. import jiguang.chat.entity.Event;
  20. import jiguang.chat.entity.EventType;
  21. import jiguang.chat.utils.DialogCreator;
  22. import jiguang.chat.utils.HandleResponseCode;
  23. import jiguang.chat.utils.NativeImageLoader;
  24. import jiguang.chat.view.FriendInfoView;
  25. /**
  26. * Created by ${chenyn} on 2017/3/22.
  27. */
  28. public class FriendInfoActivity extends BaseActivity {
  29. private String mTargetId;
  30. private String mTargetAppKey;
  31. private boolean mIsFromContact;
  32. private FriendInfoView mFriendInfoView;
  33. private UserInfo mUserInfo;
  34. private FriendInfoController mFriendInfoController;
  35. private long mGroupId;
  36. private String mTitle;
  37. private boolean mIsGetAvatar = false;
  38. private boolean mIsAddFriend = false;
  39. private boolean mIsFromSearch = false;
  40. private boolean mFromGroup = false;
  41. private String mUserID;
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.activity_friend_info);
  46. mFriendInfoView = (FriendInfoView) findViewById(R.id.friend_info_view);
  47. mTargetId = getIntent().getStringExtra(JGApplication.TARGET_ID);
  48. mTargetAppKey = getIntent().getStringExtra(JGApplication.TARGET_APP_KEY);
  49. mUserID = getIntent().getStringExtra("targetId");
  50. if (mTargetAppKey == null) {
  51. mTargetAppKey = JMessageClient.getMyInfo().getAppKey();
  52. }
  53. mFriendInfoView.initModel(this);
  54. mFriendInfoController = new FriendInfoController(mFriendInfoView, this);
  55. mFriendInfoView.setListeners(mFriendInfoController);
  56. mFriendInfoView.setOnChangeListener(mFriendInfoController);
  57. mIsFromContact = getIntent().getBooleanExtra("fromContact", false);
  58. mIsFromSearch = getIntent().getBooleanExtra("fromSearch", false);
  59. mIsAddFriend = getIntent().getBooleanExtra("addFriend", false);
  60. mFromGroup = getIntent().getBooleanExtra("group_grid", false);
  61. //从通讯录中点击过来
  62. if (mIsFromContact || mIsFromSearch || mFromGroup || mIsAddFriend) {
  63. updateUserInfo();
  64. } else {
  65. mGroupId = getIntent().getLongExtra(JGApplication.GROUP_ID, 0);
  66. Conversation conv;
  67. if (mGroupId == 0) {
  68. conv = JMessageClient.getSingleConversation(mTargetId, mTargetAppKey);
  69. mUserInfo = (UserInfo) conv.getTargetInfo();
  70. } else {
  71. conv = JMessageClient.getGroupConversation(mGroupId);
  72. GroupInfo groupInfo = (GroupInfo) conv.getTargetInfo();
  73. mUserInfo = groupInfo.getGroupMemberInfo(mTargetId, mTargetAppKey);
  74. }
  75. //先从Conversation里获得UserInfo展示出来
  76. mFriendInfoView.initInfo(mUserInfo);
  77. updateUserInfo();
  78. }
  79. }
  80. private void updateUserInfo() {
  81. final Dialog dialog = DialogCreator.createLoadingDialog(FriendInfoActivity.this,
  82. FriendInfoActivity.this.getString(R.string.jmui_loading));
  83. dialog.show();
  84. if (TextUtils.isEmpty(mTargetId) && !TextUtils.isEmpty(mUserID)) {
  85. mTargetId = mUserID;
  86. }
  87. JMessageClient.getUserInfo(mTargetId, mTargetAppKey, new GetUserInfoCallback() {
  88. @Override
  89. public void gotResult(int responseCode, String responseMessage, UserInfo info) {
  90. dialog.dismiss();
  91. if (responseCode == 0) {
  92. //拉取好友信息时候要更新数据库中的nickName.因为如果对方修改了nickName我们是无法感知的.如果不在拉取信息
  93. //时候更新数据库的话会影响到搜索好友的nickName, 注意要在没有备注名并且有昵称时候去更新.因为备注名优先级更高
  94. new Update(FriendEntry.class).set("DisplayName=?", info.getDisplayName()).where("Username=?", mTargetId).execute();
  95. new Update(FriendEntry.class).set("NickName=?", info.getNickname()).where("Username=?", mTargetId).execute();
  96. new Update(FriendEntry.class).set("NoteName=?", info.getNotename()).where("Username=?", mTargetId).execute();
  97. if (info.getAvatarFile() != null) {
  98. new Update(FriendEntry.class).set("Avatar=?", info.getAvatarFile().getAbsolutePath()).where("Username=?", mTargetId).execute();
  99. }
  100. mUserInfo = info;
  101. mFriendInfoController.setFriendInfo(info);
  102. mTitle = info.getNotename();
  103. if (TextUtils.isEmpty(mTitle)) {
  104. mTitle = info.getNickname();
  105. }
  106. mFriendInfoView.initInfo(info);
  107. } else {
  108. HandleResponseCode.onHandle(FriendInfoActivity.this, responseCode, false);
  109. }
  110. }
  111. });
  112. }
  113. public void startChatActivity() {
  114. if (mIsFromContact || mIsAddFriend || mIsFromSearch || mFromGroup) {
  115. Intent intent = new Intent(this, ChatActivity.class);
  116. String title = mUserInfo.getNotename();
  117. if (TextUtils.isEmpty(title)) {
  118. title = mUserInfo.getNickname();
  119. if (TextUtils.isEmpty(title)) {
  120. title = mUserInfo.getUserName();
  121. }
  122. }
  123. intent.putExtra(JGApplication.CONV_TITLE, title);
  124. intent.putExtra(JGApplication.TARGET_ID, mUserInfo.getUserName());
  125. intent.putExtra(JGApplication.TARGET_APP_KEY, mUserInfo.getAppKey());
  126. startActivity(intent);
  127. } else {
  128. if (mGroupId != 0) {
  129. Intent intent = new Intent();
  130. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  131. intent.putExtra(JGApplication.TARGET_ID, mTargetId);
  132. intent.putExtra(JGApplication.TARGET_APP_KEY, mTargetAppKey);
  133. intent.setClass(this, ChatActivity.class);
  134. startActivity(intent);
  135. } else {
  136. Intent intent = new Intent();
  137. intent.putExtra("returnChatActivity", true);
  138. intent.putExtra(JGApplication.CONV_TITLE, mTitle);
  139. setResult(JGApplication.RESULT_CODE_FRIEND_INFO, intent);
  140. }
  141. }
  142. Conversation conv = JMessageClient.getSingleConversation(mTargetId, mTargetAppKey);
  143. //如果会话为空,使用EventBus通知会话列表添加新会话
  144. if (conv == null) {
  145. conv = Conversation.createSingleConversation(mTargetId, mTargetAppKey);
  146. EventBus.getDefault().post(new Event.Builder()
  147. .setType(EventType.createConversation)
  148. .setConversation(conv)
  149. .build());
  150. }
  151. finish();
  152. }
  153. public UserInfo getUserInfo() {
  154. return mUserInfo;
  155. }
  156. public String getUserName() {
  157. return mUserInfo.getUserName();
  158. }
  159. public String getTargetAppKey() {
  160. return mTargetAppKey;
  161. }
  162. //点击头像预览大图
  163. public void startBrowserAvatar() {
  164. if (mUserInfo != null && !TextUtils.isEmpty(mUserInfo.getAvatar())) {
  165. if (mIsGetAvatar) {
  166. //如果缓存了图片,直接加载
  167. Bitmap bitmap = NativeImageLoader.getInstance().getBitmapFromMemCache(mUserInfo.getUserName());
  168. if (bitmap != null) {
  169. Intent intent = new Intent();
  170. intent.putExtra("browserAvatar", true);
  171. intent.putExtra("avatarPath", mUserInfo.getAvatarFile().getAbsolutePath());
  172. intent.setClass(this, BrowserViewPagerActivity.class);
  173. startActivity(intent);
  174. }
  175. } else {
  176. final Dialog dialog = DialogCreator.createLoadingDialog(this, this.getString(R.string.jmui_loading));
  177. dialog.show();
  178. mUserInfo.getBigAvatarBitmap(new GetAvatarBitmapCallback() {
  179. @Override
  180. public void gotResult(int status, String desc, Bitmap bitmap) {
  181. if (status == 0) {
  182. mIsGetAvatar = true;
  183. //缓存头像
  184. NativeImageLoader.getInstance().updateBitmapFromCache(mUserInfo.getUserName(), bitmap);
  185. Intent intent = new Intent();
  186. intent.putExtra("browserAvatar", true);
  187. intent.putExtra("avatarPath", mUserInfo.getUserName());
  188. intent.setClass(FriendInfoActivity.this, BrowserViewPagerActivity.class);
  189. startActivity(intent);
  190. }
  191. dialog.dismiss();
  192. }
  193. });
  194. }
  195. }
  196. }
  197. @Override
  198. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  199. super.onActivityResult(requestCode, resultCode, data);
  200. if (resultCode == RESULT_CANCELED) {
  201. return;
  202. }
  203. if (resultCode == JGApplication.RESULT_CODE_EDIT_NOTENAME) {
  204. mTitle = data.getStringExtra(JGApplication.NOTENAME);
  205. FriendEntry friend = FriendEntry.getFriend(JGApplication.getUserEntry(), mTargetId, mTargetAppKey);
  206. if (null != friend) {
  207. friend.displayName = mTitle;
  208. friend.save();
  209. }
  210. }
  211. }
  212. //将获得的最新的昵称返回到聊天界面
  213. @Override
  214. public void onBackPressed() {
  215. Intent intent = new Intent();
  216. intent.putExtra(JGApplication.CONV_TITLE, mTitle);
  217. setResult(JGApplication.RESULT_CODE_FRIEND_INFO, intent);
  218. finish();
  219. super.onBackPressed();
  220. }
  221. public int getWidth() {
  222. return mWidth;
  223. }
  224. }