1010import android .content .IntentFilter ;
1111import android .graphics .Color ;
1212import android .os .Build ;
13+ import android .os .Handler ;
14+ import android .os .Message ;
15+ import android .support .v4 .widget .SwipeRefreshLayout ;
1316import android .util .Log ;
1417import android .view .MotionEvent ;
1518import android .view .View ;
5861import 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