Skip to content

Commit 2ccd37b

Browse files
guangyaoguangyao
authored andcommitted
2 parents 86d69b8 + fe60e48 commit 2ccd37b

File tree

3 files changed

+103
-15
lines changed

3 files changed

+103
-15
lines changed

android/src/main/java/com/netease/im/ReactCache.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.facebook.react.bridge.WritableArray;
88
import com.facebook.react.bridge.WritableMap;
99
import com.facebook.react.modules.core.DeviceEventManagerModule;
10+
import com.netease.im.common.ImageLoaderKit;
1011
import com.netease.im.login.LoginService;
1112
import com.netease.im.session.extension.AccountNoticeAttachment;
1213
import com.netease.im.session.extension.BankTransferAttachment;
@@ -72,6 +73,7 @@ public class ReactCache {
7273
public final static String observeUnreadCountChange = "observeUnreadCountChange";//'未读数变化'
7374
public final static String observeBlackList = "observeBlackList";//'黑名单'
7475
public final static String observeAttachmentProgress = "observeAttachmentProgress";//'上传下载进度'
76+
public final static String observeOnKick = "observeOnKick";//'被提出'
7577

7678
final static String TAG = "ReactCache";
7779
private static ReactContext reactContext;
@@ -105,22 +107,26 @@ public static Object createRecentList(List<RecentContact> recents, int unreadNum
105107
map.putString("unreadCount", String.valueOf(contact.getUnreadCount()));
106108
String name = "";
107109
SessionTypeEnum sessionType = contact.getSessionType();
110+
String imagePath = "";
108111
if (sessionType == SessionTypeEnum.P2P) {
109112
map.putString("teamType", "-1");
110113
NimUserInfoCache nimUserInfoCache = NimUserInfoCache.getInstance();
111-
map.putString("imagePath", nimUserInfoCache.getAvatar(contactId));
114+
imagePath = nimUserInfoCache.getAvatar(contactId);
115+
112116
map.putString("mute", boolean2String(NIMClient.getService(FriendService.class).isNeedMessageNotify(contactId)));
113117
name = nimUserInfoCache.getUserDisplayName(contactId);
114118
} else if (sessionType == SessionTypeEnum.Team) {
115119
Team team = TeamDataCache.getInstance().getTeamById(contactId);
116120
if (team != null) {
117121
name = team.getName();
118122
map.putString("teamType", Integer.toString(team.getType().getValue()));
119-
map.putString("imagePath", team.getIcon());
123+
imagePath = team.getIcon();
120124
map.putString("memberCount", Integer.toString(team.getMemberCount()));
121125
map.putString("mute", boolean2String(!team.mute()));
122126
}
123127
}
128+
map.putString("imagePath", imagePath);
129+
map.putString("imageLocal", ImageLoaderKit.getMemoryCachedAvatar(imagePath));
124130
map.putString("name", name);
125131
map.putString("sessionType", Integer.toString(contact.getSessionType().getValue()));
126132
map.putString("msgType", Integer.toString(contact.getMsgType().getValue()));
@@ -191,8 +197,8 @@ public static Object createRecentList(List<RecentContact> recents, int unreadNum
191197
default:
192198
if (attachment instanceof DefaultCustomAttachment) {
193199
content = ((DefaultCustomAttachment) attachment).getDigst();
194-
if(TextUtils.isEmpty(content)){
195-
content="[自定义消息]";
200+
if (TextUtils.isEmpty(content)) {
201+
content = "[自定义消息]";
196202
}
197203
}
198204
break;
@@ -257,7 +263,9 @@ public static Object createFriendList(ContactDataList dataList, boolean hasFilte
257263
map.putString("alias", contact.getDisplayName());
258264
map.putString("type", Integer.toString(contact.getContactType()));
259265
map.putString("name", NimUserInfoCache.getInstance().getUserName(contactId));
260-
map.putString("avatar", NimUserInfoCache.getInstance().getAvatar(contactId));
266+
String avatar = NimUserInfoCache.getInstance().getAvatar(contactId);
267+
map.putString("avatar", avatar);
268+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
261269
array.pushMap(map);
262270
// } else {
263271
// map.putString("itemType", Integer.toString(item.getItemType()));
@@ -296,7 +304,9 @@ public static Object createFriendSet(ContactDataList datas, boolean hasFilter) {
296304
map.putString("alias", contact.getDisplayName());
297305
map.putString("type", Integer.toString(contact.getContactType()));
298306
map.putString("name", NimUserInfoCache.getInstance().getUserName(contact.getContactId()));
299-
map.putString("avatar", NimUserInfoCache.getInstance().getAvatar(contact.getContactId()));
307+
String avatar = NimUserInfoCache.getInstance().getAvatar(contact.getContactId());
308+
map.putString("avatar", avatar);
309+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
300310
WritableArray array = listHashMap.get(belongs);
301311
if (array == null) {
302312
array = Arguments.createArray();
@@ -345,7 +355,9 @@ public static Object createTeamList(ContactDataList datas) {
345355
}
346356
map.putString("name", teamContact.getDisplayName());
347357
map.putString("type", Integer.toString(teamContact.getContactType()));
348-
map.putString("avatar", NimUserInfoCache.getInstance().getAvatar(teamContact.getContactId()));
358+
String avatar = NimUserInfoCache.getInstance().getAvatar(teamContact.getContactId());
359+
map.putString("avatar", avatar);
360+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
349361
writableArray.pushMap(map);
350362
}
351363
// } else {
@@ -384,6 +396,7 @@ public static Object createUserInfo(NimUserInfo userInfo) {
384396
writableMap.putString("name", userInfo.getName());
385397
writableMap.putString("alias", NimUserInfoCache.getInstance().getUserDisplayName(userInfo.getAccount()));
386398
writableMap.putString("avatar", userInfo.getAvatar());
399+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(userInfo.getAvatar()));
387400
writableMap.putString("signature", userInfo.getSignature());
388401
writableMap.putString("gender", Integer.toString(userInfo.getGenderEnum().getValue()));
389402
writableMap.putString("email", userInfo.getEmail());
@@ -405,7 +418,9 @@ public static Object createSystemMsg(List<SystemMessage> sysItems) {
405418
map.putString("type", Integer.toString(message.getType().getValue()));
406419
map.putString("targetId", message.getTargetId());
407420
map.putString("fromAccount", message.getFromAccount());
408-
map.putString("avatar", nimUserInfoCache.getAvatar(message.getFromAccount()));
421+
String avatar = nimUserInfoCache.getAvatar(message.getFromAccount());
422+
map.putString("avatar", avatar);
423+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
409424
map.putString("name", nimUserInfoCache.getUserDisplayNameEx(message.getFromAccount()));//alias
410425
map.putString("time", Long.toString(message.getTime() / 1000));
411426
map.putString("isVerify", String.valueOf(verify));
@@ -504,6 +519,7 @@ public static Object createBlackList(List<UserInfoProvider.UserInfo> data) {
504519
writableMap.putString("contactId", userInfo.getAccount());
505520
writableMap.putString("name", userInfo.getName());
506521
writableMap.putString("avatar", userInfo.getAvatar());
522+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(userInfo.getAvatar()));
507523
array.pushMap(writableMap);
508524
}
509525
}
@@ -555,6 +571,7 @@ public static Object createTeamInfo(Team team) {
555571
writableMap.putString("teamId", team.getId());
556572
writableMap.putString("name", team.getName());
557573
writableMap.putString("avatar", team.getIcon());
574+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(team.getIcon()));
558575
writableMap.putString("type", Integer.toString(team.getType().getValue()));
559576
writableMap.putString("introduce", team.getIntroduce());
560577
writableMap.putString("createTime", TimeUtil.getTimeShowString(team.getCreateTime(), true));
@@ -582,8 +599,9 @@ public static WritableMap createTeamMemberInfo(TeamMember teamMember) {
582599
writableMap.putString("alias", NimUserInfoCache.getInstance().getUserDisplayName(teamMember.getAccount()));
583600
writableMap.putString("name", TeamDataCache.getInstance().getTeamMemberDisplayName(teamMember.getTid(), teamMember.getAccount()));
584601
writableMap.putString("joinTime", TimeUtil.getTimeShowString(teamMember.getJoinTime(), true));
585-
writableMap.putString("avatar", NimUserInfoCache.getInstance().getAvatar(teamMember.getAccount()));
586-
602+
String avatar = NimUserInfoCache.getInstance().getAvatar(teamMember.getAccount());
603+
writableMap.putString("avatar", avatar);
604+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
587605
writableMap.putString("isInTeam", boolean2String(teamMember.isInTeam()));
588606
writableMap.putString("isMute", boolean2String(teamMember.isMute()));
589607
writableMap.putString("teamId", teamMember.getTid());
@@ -657,9 +675,13 @@ public static WritableMap createMessage(IMMessage item) {
657675
itemMap.putString("isRemoteRead", boolean2String(receiveReceiptCheck(item)));
658676

659677
WritableMap user = Arguments.createMap();
660-
user.putString("_id", item.getFromAccount());
661-
user.putString("name", NimUserInfoCache.getInstance().getUserDisplayName(item.getFromAccount()));
662-
user.putString("avatar", NimUserInfoCache.getInstance().getAvatar(item.getFromAccount()));
678+
String fromAccount = item.getFromAccount();
679+
String fromNick = item.getFromNick();
680+
user.putString("_id", fromAccount);
681+
user.putString("name", !TextUtils.isEmpty(fromNick) ? fromNick : NimUserInfoCache.getInstance().getUserDisplayName(fromAccount));
682+
String avatar = NimUserInfoCache.getInstance().getAvatar(fromAccount);
683+
user.putString("avatar", avatar);
684+
user.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
663685
itemMap.putMap("user", user);
664686

665687
MsgAttachment attachment = item.getAttachment();

android/src/main/java/com/netease/im/common/ImageLoaderKit.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.graphics.Bitmap;
55
import android.text.TextUtils;
6+
import android.view.View;
67

78
import com.netease.im.IMApplication;
89
import com.netease.im.R;
@@ -17,16 +18,21 @@
1718
import com.nostra13.universalimageloader.core.DisplayImageOptions;
1819
import com.nostra13.universalimageloader.core.ImageLoader;
1920
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
21+
import com.nostra13.universalimageloader.core.assist.FailReason;
2022
import com.nostra13.universalimageloader.core.assist.ImageSize;
2123
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
2224
import com.nostra13.universalimageloader.core.download.ImageDownloader;
25+
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
26+
import com.nostra13.universalimageloader.utils.DiskCacheUtils;
2327
import com.nostra13.universalimageloader.utils.MemoryCacheUtils;
2428
import com.nostra13.universalimageloader.utils.StorageUtils;
2529

2630
import java.io.File;
2731
import java.io.IOException;
2832
import java.util.ArrayList;
33+
import java.util.HashSet;
2934
import java.util.List;
35+
import java.util.Set;
3036

3137
/**
3238
* 图片加载、缓存、管理组件
@@ -180,6 +186,20 @@ private static Bitmap getMemoryCachedAvatarBitmap(String url) {
180186
return null;
181187
}
182188

189+
public static String getMemoryCachedAvatar(String url) {
190+
if (url == null || !isImageUriValid(url)) {
191+
return "";
192+
}
193+
String key = getAvatarCacheKey(url);
194+
195+
File file = DiskCacheUtils.findInCache(key, ImageLoader.getInstance().getDiskCache());// 查询磁盘缓存示例
196+
if (file == null) {
197+
asyncLoadAvatarBitmapToCache(url);
198+
}
199+
return file == null ? "" : file.getAbsolutePath();
200+
}
201+
202+
private static Set<String> cacheLoad = new HashSet<>();
183203
/**
184204
* 异步加载头像位图到ImageLoader内存缓存
185205
*/
@@ -189,9 +209,34 @@ private static void asyncLoadAvatarBitmapToCache(String url) {
189209
}
190210

191211
String key = getAvatarCacheKey(url);
212+
if(cacheLoad.contains(key)){
213+
return;
214+
}
215+
cacheLoad.add(key);
216+
ImageLoadingListener listener = new ImageLoadingListener() {
217+
@Override
218+
public void onLoadingStarted(String s, View view) {
219+
220+
}
221+
222+
@Override
223+
public void onLoadingFailed(String s, View view, FailReason failReason) {
224+
225+
}
226+
227+
@Override
228+
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
229+
cacheLoad.remove(s);
230+
}
231+
232+
@Override
233+
public void onLoadingCancelled(String s, View view) {
234+
235+
}
236+
};
192237
ImageLoader.getInstance().loadImage(key,
193238
new ImageSize(DEFAULT_AVATAR_THUMB_SIZE, DEFAULT_AVATAR_THUMB_SIZE),
194-
avatarLoadOption, null);
239+
avatarLoadOption, listener);
195240
}
196241

197242
/**

android/src/main/java/com/netease/im/login/RecentContactObserver.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.text.TextUtils;
44

5+
import com.facebook.react.bridge.Arguments;
6+
import com.facebook.react.bridge.WritableMap;
57
import com.netease.im.ReactCache;
68
import com.netease.im.uikit.cache.SimpleCallback;
79
import com.netease.im.uikit.cache.TeamDataCache;
@@ -240,7 +242,26 @@ public void onEvent(LoginSyncStatus loginSyncStatus) {
240242

241243
@Override
242244
public void onEvent(StatusCode code) {
243-
ReactCache.emit(ReactCache.observeOnlineStatus, Integer.toString(code.getValue()));
245+
if (code != StatusCode.PWD_ERROR && code.wontAutoLogin()) {
246+
WritableMap r = Arguments.createMap();
247+
String status = "";
248+
switch (code) {
249+
case KICKOUT:
250+
status = "1";
251+
break;
252+
case KICK_BY_OTHER_CLIENT:
253+
status = "3";
254+
break;
255+
case FORBIDDEN:
256+
status = "2";
257+
break;
258+
}
259+
r.putString("status", status);
260+
ReactCache.emit(ReactCache.observeOnKick, r);
261+
}
262+
WritableMap r = Arguments.createMap();
263+
r.putString("status", Integer.toString(code.getValue()));
264+
ReactCache.emit(ReactCache.observeOnlineStatus, r);
244265
}
245266
};
246267
}

0 commit comments

Comments
 (0)