Skip to content

Commit 63c95ac

Browse files
guangyaoguangyao
authored andcommitted
2 parents c7a0557 + 2f58325 commit 63c95ac

File tree

1 file changed

+84
-52
lines changed

1 file changed

+84
-52
lines changed

android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java

Lines changed: 84 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
import android.content.IntentFilter;
1111
import android.graphics.Color;
1212
import android.os.Build;
13+
import android.os.Handler;
14+
import android.os.Message;
15+
import android.support.v4.widget.SwipeRefreshLayout;
1316
import android.util.Log;
1417
import android.view.MotionEvent;
1518
import android.view.View;
@@ -58,7 +61,7 @@
5861
import static cn.jiguang.imui.messagelist.MessageUtil.configMessage;
5962

6063

61-
public class ReactMsgListManager extends ViewGroupManager<MessageList> implements LifecycleEventListener {
64+
public class ReactMsgListManager extends ViewGroupManager<SwipeRefreshLayout> implements LifecycleEventListener {
6265

6366
private static final String REACT_MESSAGE_LIST = "RCTMessageList";
6467
private static final String TAG = "RCTMessageList";
@@ -89,6 +92,7 @@ public class ReactMsgListManager extends ViewGroupManager<MessageList> implement
8992
private MsgListAdapter mAdapter;
9093
private ReactContext mContext;
9194
private MessageList msgList;
95+
private SwipeRefreshLayout swipeRefreshLayout;
9296

9397
@Override
9498
public String getName() {
@@ -98,7 +102,7 @@ public String getName() {
98102
@SuppressLint("ClickableViewAccessibility")
99103
@SuppressWarnings("unchecked")
100104
@Override
101-
protected MessageList createViewInstance(final ThemedReactContext reactContext) {
105+
protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactContext) {
102106
Log.w(TAG, "createViewInstance");
103107
IntentFilter intentFilter = new IntentFilter();
104108
intentFilter.addAction(RCT_APPEND_MESSAGES_ACTION);
@@ -114,7 +118,32 @@ protected MessageList createViewInstance(final ThemedReactContext reactContext)
114118
SessorUtil.getInstance(reactContext).register(true);
115119
mContext.registerReceiver(RCTMsgListReceiver, intentFilter);
116120

121+
swipeRefreshLayout = new SwipeRefreshLayout(reactContext);
117122
msgList = new MessageList(reactContext, null);
123+
swipeRefreshLayout.addView(msgList);
124+
125+
final Handler handler = new Handler(){
126+
127+
@Override
128+
public void handleMessage(Message msg) {
129+
switch (msg.what){
130+
case 1:
131+
swipeRefreshLayout.setRefreshing(false);
132+
break;
133+
}
134+
}
135+
};
136+
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);
137+
swipeRefreshLayout.setColorSchemeColors(Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED);
138+
// swipeRefreshLayout.setEnabled(false);
139+
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
140+
@Override
141+
public void onRefresh() {
142+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
143+
ON_PULL_TO_REFRESH_EVENT, null);
144+
handler.sendEmptyMessageDelayed(1,5000);
145+
}
146+
});
118147
// Use default layout
119148
MsgListAdapter.HoldersConfig holdersConfig = new MsgListAdapter.HoldersConfig();
120149
ImageLoader imageLoader = new ImageLoader() {
@@ -185,7 +214,7 @@ public void onMessageClick(RCTMessage message) {
185214
}
186215
WritableMap event = Arguments.createMap();
187216
event.putMap("message", message.toWritableMap());
188-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_MSG_CLICK_EVENT, event);
217+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_MSG_CLICK_EVENT, event);
189218
}
190219
});
191220

@@ -195,7 +224,7 @@ public void onMessageLongClick(RCTMessage message) {
195224
showMenu(reactContext, message);
196225
// WritableMap event = Arguments.createMap();
197226
// event.putMap("message", message.toWritableMap());
198-
// reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_MSG_LONG_CLICK_EVENT, event);
227+
// reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_MSG_LONG_CLICK_EVENT, event);
199228
}
200229
});
201230

@@ -205,7 +234,7 @@ public void onAvatarClick(View view, RCTMessage message) {
205234
// initPopuptWindow(reactContext.getCurrentActivity(), view, "", 1);
206235
WritableMap event = Arguments.createMap();
207236
event.putMap("message", message.toWritableMap());
208-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_AVATAR_CLICK_EVENT, event);
237+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_AVATAR_CLICK_EVENT, event);
209238
}
210239
});
211240

@@ -214,7 +243,7 @@ public void onAvatarClick(View view, RCTMessage message) {
214243
public void onLinkClick(View view, String o) {
215244
WritableMap event = Arguments.createMap();
216245
event.putString("message", o);
217-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_LINK_CLICK_EVENT, event);
246+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_LINK_CLICK_EVENT, event);
218247
}
219248
});
220249
mAdapter.setMsgResendListener(new MsgListAdapter.OnMsgResendListener<RCTMessage>() {
@@ -223,7 +252,7 @@ public void onMessageResend(RCTMessage message) {
223252
WritableMap event = Arguments.createMap();
224253
event.putMap("message", message.toWritableMap());
225254
event.putString("opt", "resend");
226-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_STATUS_VIEW_CLICK_EVENT, event);
255+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_STATUS_VIEW_CLICK_EVENT, event);
227256
}
228257
});
229258

@@ -232,7 +261,7 @@ public void onMessageResend(RCTMessage message) {
232261
public boolean onTouch(View v, MotionEvent event) {
233262
switch (event.getAction()) {
234263
case MotionEvent.ACTION_DOWN:
235-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(), ON_TOUCH_MSG_LIST_EVENT, null);
264+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), ON_TOUCH_MSG_LIST_EVENT, null);
236265
if (reactContext.getCurrentActivity() != null) {
237266
InputMethodManager imm = (InputMethodManager) reactContext.getCurrentActivity()
238267
.getSystemService(Context.INPUT_METHOD_SERVICE);
@@ -252,21 +281,23 @@ public boolean onTouch(View v, MotionEvent event) {
252281
mAdapter.setOnLoadMoreListener(new MsgListAdapter.OnLoadMoreListener() {
253282
@Override
254283
public void onLoadMore(int page, int total) {
255-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
256-
ON_PULL_TO_REFRESH_EVENT, null);
284+
// swipeRefreshLayout.setRefreshing(true);
257285
}
258286

259287
@Override
260288
public void onAutoScroll(boolean autoScroll) {
261289
WritableMap event = Arguments.createMap();
262290
event.putBoolean("isAutoScroll", autoScroll);
263-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
291+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
264292
ON_CLICK_CHANGE_AUTO_SCROLL_EVENT, event);
265293
}
266294
});
267-
return msgList;
295+
return swipeRefreshLayout;
268296
}
269297

298+
int getId(){
299+
return swipeRefreshLayout.getId();
300+
}
270301
private PhotoViewPagerViewUtil.IPhotoLongClickListener longClickListener = new PhotoViewPagerViewUtil.IPhotoLongClickListener() {
271302
@Override
272303
public boolean onClick(final Dialog dialog, View v, final IMediaFile mediaFile) {
@@ -293,7 +324,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
293324
// Toast.makeText(mContext, finalCode, Toast.LENGTH_SHORT).show();
294325
WritableMap event = Arguments.createMap();
295326
event.putString("result", finalCode);
296-
mContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
327+
mContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
297328
ON_DECODE_QR_CODE_EVENT, event);
298329
}
299330
}
@@ -313,7 +344,7 @@ public void onClick() {
313344
WritableMap event = Arguments.createMap();
314345
event.putMap("message", message.toWritableMap());
315346
event.putString("opt", "copy");
316-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
347+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
317348
ON_STATUS_VIEW_CLICK_EVENT, event);
318349
}
319350
});
@@ -324,7 +355,7 @@ public void onClick() {
324355
WritableMap event = Arguments.createMap();
325356
event.putMap("message", message.toWritableMap());
326357
event.putString("opt", "delete");
327-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
358+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
328359
ON_STATUS_VIEW_CLICK_EVENT, event);
329360
}
330361
});
@@ -337,7 +368,7 @@ public void onClick() {
337368
WritableMap event = Arguments.createMap();
338369
event.putMap("message", message.toWritableMap());
339370
event.putString("opt", "revoke");
340-
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(msgList.getId(),
371+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
341372
ON_STATUS_VIEW_CLICK_EVENT, event);
342373
}
343374
});
@@ -382,7 +413,7 @@ private static List<PopupMenuItem> getMoreMenuItems(Context context, String sess
382413
}
383414

384415
@ReactProp(name = "initList")
385-
public void setInitList(MessageList messageList, ReadableArray messages) {
416+
public void setInitList(SwipeRefreshLayout messageList, ReadableArray messages) {
386417

387418
mAdapter.clear();
388419
if (messages != null && messages.size() > 0) {
@@ -396,91 +427,91 @@ public void setInitList(MessageList messageList, ReadableArray messages) {
396427
}
397428

398429
@ReactProp(name = "sendBubble")
399-
public void setSendBubble(MessageList messageList, ReadableMap map) {
430+
public void setSendBubble(SwipeRefreshLayout messageList, ReadableMap map) {
400431
int resId = mContext.getResources().getIdentifier(map.getString("imageName"), "drawable", mContext.getPackageName());
401432
if (resId != 0) {
402-
messageList.setSendBubbleDrawable(resId);
433+
msgList.setSendBubbleDrawable(resId);
403434
}
404435
}
405436

406437
@ReactProp(name = "receiveBubble")
407-
public void setReceiveBubble(MessageList messageList, ReadableMap map) {
438+
public void setReceiveBubble(SwipeRefreshLayout messageList, ReadableMap map) {
408439
int resId = mContext.getResources().getIdentifier(map.getString("imageName"), "drawable", mContext.getPackageName());
409440
if (resId != 0) {
410-
messageList.setReceiveBubbleDrawable(resId);
441+
msgList.setReceiveBubbleDrawable(resId);
411442
}
412443
}
413444

414445
@ReactProp(name = "sendBubbleTextColor")
415-
public void setSendBubbleTextColor(MessageList messageList, String color) {
446+
public void setSendBubbleTextColor(SwipeRefreshLayout messageList, String color) {
416447
int colorRes = Color.parseColor(color);
417-
messageList.setSendBubbleTextColor(colorRes);
448+
msgList.setSendBubbleTextColor(colorRes);
418449
}
419450

420451
@ReactProp(name = "receiveBubbleTextColor")
421-
public void setReceiveBubbleTextColor(MessageList messageList, String color) {
452+
public void setReceiveBubbleTextColor(SwipeRefreshLayout messageList, String color) {
422453
int colorRes = Color.parseColor(color);
423-
messageList.setReceiveBubbleTextColor(colorRes);
454+
msgList.setReceiveBubbleTextColor(colorRes);
424455
}
425456

426457
@ReactProp(name = "sendBubbleTextSize")
427-
public void setSendBubbleTextSize(MessageList messageList, int size) {
428-
messageList.setSendBubbleTextSize(size);
458+
public void setSendBubbleTextSize(SwipeRefreshLayout messageList, int size) {
459+
msgList.setSendBubbleTextSize(size);
429460
}
430461

431462
@ReactProp(name = "receiveBubbleTextSize")
432-
public void setReceiveBubbleTextSize(MessageList messageList, int size) {
433-
messageList.setReceiveBubbleTextSize(size);
463+
public void setReceiveBubbleTextSize(SwipeRefreshLayout messageList, int size) {
464+
msgList.setReceiveBubbleTextSize(size);
434465
}
435466

436467
@ReactProp(name = "sendBubblePadding")
437-
public void setSendBubblePadding(MessageList messageList, ReadableMap map) {
438-
messageList.setSendBubblePaddingLeft(map.getInt("left"));
439-
messageList.setSendBubblePaddingTop(map.getInt("top"));
440-
messageList.setSendBubblePaddingRight(map.getInt("right"));
441-
messageList.setSendBubblePaddingBottom(map.getInt("bottom"));
468+
public void setSendBubblePadding(SwipeRefreshLayout messageList, ReadableMap map) {
469+
msgList.setSendBubblePaddingLeft(map.getInt("left"));
470+
msgList.setSendBubblePaddingTop(map.getInt("top"));
471+
msgList.setSendBubblePaddingRight(map.getInt("right"));
472+
msgList.setSendBubblePaddingBottom(map.getInt("bottom"));
442473
}
443474

444475
@ReactProp(name = "receiveBubblePadding")
445-
public void setReceiveBubblePaddingLeft(MessageList messageList, ReadableMap map) {
446-
messageList.setReceiveBubblePaddingLeft(map.getInt("left"));
447-
messageList.setReceiveBubblePaddingTop(map.getInt("top"));
448-
messageList.setReceiveBubblePaddingRight(map.getInt("right"));
449-
messageList.setReceiveBubblePaddingBottom(map.getInt("bottom"));
476+
public void setReceiveBubblePaddingLeft(SwipeRefreshLayout messageList, ReadableMap map) {
477+
msgList.setReceiveBubblePaddingLeft(map.getInt("left"));
478+
msgList.setReceiveBubblePaddingTop(map.getInt("top"));
479+
msgList.setReceiveBubblePaddingRight(map.getInt("right"));
480+
msgList.setReceiveBubblePaddingBottom(map.getInt("bottom"));
450481
}
451482

452483
@ReactProp(name = "dateTextSize")
453-
public void setDateTextSize(MessageList messageList, int size) {
454-
messageList.setDateTextSize(size);
484+
public void setDateTextSize(SwipeRefreshLayout messageList, int size) {
485+
msgList.setDateTextSize(size);
455486
}
456487

457488
@ReactProp(name = "dateTextColor")
458-
public void setDateTextColor(MessageList messageList, String color) {
489+
public void setDateTextColor(SwipeRefreshLayout messageList, String color) {
459490
int colorRes = Color.parseColor(color);
460-
messageList.setDateTextColor(colorRes);
491+
msgList.setDateTextColor(colorRes);
461492
}
462493

463494
@ReactProp(name = "datePadding")
464-
public void setDatePadding(MessageList messageList, int padding) {
465-
messageList.setDatePadding(padding);
495+
public void setDatePadding(SwipeRefreshLayout messageList, int padding) {
496+
msgList.setDatePadding(padding);
466497
}
467498

468499
@ReactProp(name = "avatarSize")
469-
public void setAvatarWidth(MessageList messageList, ReadableMap map) {
470-
messageList.setAvatarWidth(map.getInt("width"));
471-
messageList.setAvatarHeight(map.getInt("height"));
500+
public void setAvatarWidth(SwipeRefreshLayout messageList, ReadableMap map) {
501+
msgList.setAvatarWidth(map.getInt("width"));
502+
msgList.setAvatarHeight(map.getInt("height"));
472503
}
473504

474505
/**
475506
* if showDisplayName equals 1, then show display name.
476507
*
477-
* @param messageList MessageList
508+
* @param messageList SwipeRefreshLayout
478509
* @param isShowDisplayName boolean
479510
*/
480511
@ReactProp(name = "isShowDisplayName")
481-
public void setShowDisplayName(MessageList messageList, boolean isShowDisplayName) {
512+
public void setShowDisplayName(SwipeRefreshLayout messageList, boolean isShowDisplayName) {
482513
if (isShowDisplayName) {
483-
messageList.setShowDisplayName(1);
514+
msgList.setShowDisplayName(1);
484515
}
485516
}
486517

@@ -524,6 +555,7 @@ public void run() {
524555
});
525556
}
526557
} else if (intent.getAction().equals(RCT_INSERT_MESSAGES_ACTION)) {
558+
swipeRefreshLayout.setRefreshing(false);
527559
String[] messages = intent.getStringArrayExtra("messages");
528560
List<RCTMessage> list = new ArrayList<>();
529561
for (int i = messages.length - 1; i > -1; i--) {
@@ -569,7 +601,7 @@ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
569601
}
570602

571603
@Override
572-
public void onDropViewInstance(MessageList view) {
604+
public void onDropViewInstance(SwipeRefreshLayout view) {
573605
super.onDropViewInstance(view);
574606
Log.w(TAG, "onDropViewInstance");
575607
try {

0 commit comments

Comments
 (0)