1212import android .os .Build ;
1313import android .os .Handler ;
1414import android .os .Message ;
15- import android .support .v4 .widget .SwipeRefreshLayout ;
1615import android .util .Log ;
1716import android .view .MotionEvent ;
1817import android .view .View ;
4342import com .popup .tool .PopupUtil ;
4443import com .popupmenu .NIMPopupMenu ;
4544import com .popupmenu .PopupMenuItem ;
45+ import com .scwang .smartrefresh .header .WaterDropHeader ;
46+ import com .scwang .smartrefresh .layout .SmartRefreshLayout ;
47+ import com .scwang .smartrefresh .layout .api .RefreshLayout ;
48+ import com .scwang .smartrefresh .layout .header .BezierRadarHeader ;
49+ import com .scwang .smartrefresh .layout .header .ClassicsHeader ;
50+ import com .scwang .smartrefresh .layout .listener .OnRefreshListener ;
4651
4752import java .io .File ;
4853import java .util .ArrayList ;
6166import static cn .jiguang .imui .messagelist .MessageUtil .configMessage ;
6267
6368
64- public class ReactMsgListManager extends ViewGroupManager <SwipeRefreshLayout > implements LifecycleEventListener {
69+ public class ReactMsgListManager extends ViewGroupManager <SmartRefreshLayout > implements LifecycleEventListener {
6570
6671 private static final String REACT_MESSAGE_LIST = "RCTMessageList" ;
6772 private static final String TAG = "RCTMessageList" ;
@@ -92,8 +97,16 @@ public class ReactMsgListManager extends ViewGroupManager<SwipeRefreshLayout> im
9297 private MsgListAdapter mAdapter ;
9398 private ReactContext mContext ;
9499 private MessageList msgList ;
95- private SwipeRefreshLayout swipeRefreshLayout ;
96-
100+ private SmartRefreshLayout swipeRefreshLayout ;
101+ static {
102+ ClassicsHeader .REFRESH_HEADER_PULLDOWN = "" ;
103+ ClassicsHeader .REFRESH_HEADER_REFRESHING = "" ;
104+ ClassicsHeader .REFRESH_HEADER_LOADING = "" ;
105+ ClassicsHeader .REFRESH_HEADER_RELEASE = "" ;
106+ ClassicsHeader .REFRESH_HEADER_FINISH = "" ;
107+ ClassicsHeader .REFRESH_HEADER_FAILED = "" ;
108+ ClassicsHeader .REFRESH_HEADER_LASTTIME = "" ;
109+ }
97110 @ Override
98111 public String getName () {
99112 return REACT_MESSAGE_LIST ;
@@ -102,7 +115,7 @@ public String getName() {
102115 @ SuppressLint ("ClickableViewAccessibility" )
103116 @ SuppressWarnings ("unchecked" )
104117 @ Override
105- protected SwipeRefreshLayout createViewInstance (final ThemedReactContext reactContext ) {
118+ protected SmartRefreshLayout createViewInstance (final ThemedReactContext reactContext ) {
106119 Log .w (TAG , "createViewInstance" );
107120 IntentFilter intentFilter = new IntentFilter ();
108121 intentFilter .addAction (RCT_APPEND_MESSAGES_ACTION );
@@ -118,7 +131,33 @@ protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactCo
118131 SessorUtil .getInstance (reactContext ).register (true );
119132 mContext .registerReceiver (RCTMsgListReceiver , intentFilter );
120133
121- swipeRefreshLayout = new SwipeRefreshLayout (reactContext );
134+ swipeRefreshLayout = new SmartRefreshLayout (reactContext ){
135+ private final Runnable measureAndLayout = new Runnable () {
136+
137+ int width = 0 ;
138+ int height = 0 ;
139+
140+ @ Override
141+ public void run () {
142+
143+ if (width == 0 ) {
144+ width = getWidth ();
145+ }
146+ if (height == 0 ) {
147+ height = getHeight ();
148+ }
149+ measure (MeasureSpec .makeMeasureSpec (width , MeasureSpec .EXACTLY ),
150+ MeasureSpec .makeMeasureSpec (height , MeasureSpec .EXACTLY ));
151+ layout (getLeft (), getTop (), getRight (), getBottom ());
152+ }
153+ };
154+
155+ @ Override
156+ public void requestLayout () {
157+ super .requestLayout ();
158+ post (measureAndLayout );
159+ }
160+ };
122161 msgList = new MessageList (reactContext , null );
123162 swipeRefreshLayout .addView (msgList );
124163
@@ -128,17 +167,23 @@ protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactCo
128167 public void handleMessage (Message msg ) {
129168 switch (msg .what ){
130169 case 1 :
131- swipeRefreshLayout .setRefreshing ( false );
170+ swipeRefreshLayout .finishRefresh ( true );
132171 break ;
133172 }
134173 }
135174 };
136- swipeRefreshLayout .setProgressBackgroundColorSchemeColor (Color .WHITE );
137- swipeRefreshLayout .setColorSchemeColors (Color .BLUE ,Color .GREEN ,Color .YELLOW ,Color .RED );
175+ // swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);
176+ // swipeRefreshLayout.setColorSchemeColors(Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED);
138177// swipeRefreshLayout.setEnabled(false);
139- swipeRefreshLayout .setOnRefreshListener (new SwipeRefreshLayout .OnRefreshListener () {
178+ // swipeRefreshLayout.setRefreshStyle(SmartRefreshLayout.RefreshStyle.PINNED);
179+ SmartRefreshLayout refreshLayout = swipeRefreshLayout ;
180+
181+
182+ WaterDropHeader header = new WaterDropHeader (reactContext );
183+ refreshLayout .setRefreshHeader (header );
184+ swipeRefreshLayout .setOnRefreshListener (new OnRefreshListener () {
140185 @ Override
141- public void onRefresh () {
186+ public void onRefresh (RefreshLayout refreshlayout ) {
142187 reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (getId (),
143188 ON_PULL_TO_REFRESH_EVENT , null );
144189 handler .sendEmptyMessageDelayed (1 ,5000 );
@@ -417,7 +462,7 @@ private static List<PopupMenuItem> getMoreMenuItems(Context context, String sess
417462 }
418463
419464 @ ReactProp (name = "initList" )
420- public void setInitList (SwipeRefreshLayout messageList , ReadableArray messages ) {
465+ public void setInitList (SmartRefreshLayout messageList , ReadableArray messages ) {
421466
422467 mAdapter .clear ();
423468 if (messages != null && messages .size () > 0 ) {
@@ -431,89 +476,89 @@ public void setInitList(SwipeRefreshLayout messageList, ReadableArray messages)
431476 }
432477
433478 @ ReactProp (name = "sendBubble" )
434- public void setSendBubble (SwipeRefreshLayout messageList , ReadableMap map ) {
479+ public void setSendBubble (SmartRefreshLayout messageList , ReadableMap map ) {
435480 int resId = mContext .getResources ().getIdentifier (map .getString ("imageName" ), "drawable" , mContext .getPackageName ());
436481 if (resId != 0 ) {
437482 msgList .setSendBubbleDrawable (resId );
438483 }
439484 }
440485
441486 @ ReactProp (name = "receiveBubble" )
442- public void setReceiveBubble (SwipeRefreshLayout messageList , ReadableMap map ) {
487+ public void setReceiveBubble (SmartRefreshLayout messageList , ReadableMap map ) {
443488 int resId = mContext .getResources ().getIdentifier (map .getString ("imageName" ), "drawable" , mContext .getPackageName ());
444489 if (resId != 0 ) {
445490 msgList .setReceiveBubbleDrawable (resId );
446491 }
447492 }
448493
449494 @ ReactProp (name = "sendBubbleTextColor" )
450- public void setSendBubbleTextColor (SwipeRefreshLayout messageList , String color ) {
495+ public void setSendBubbleTextColor (SmartRefreshLayout messageList , String color ) {
451496 int colorRes = Color .parseColor (color );
452497 msgList .setSendBubbleTextColor (colorRes );
453498 }
454499
455500 @ ReactProp (name = "receiveBubbleTextColor" )
456- public void setReceiveBubbleTextColor (SwipeRefreshLayout messageList , String color ) {
501+ public void setReceiveBubbleTextColor (SmartRefreshLayout messageList , String color ) {
457502 int colorRes = Color .parseColor (color );
458503 msgList .setReceiveBubbleTextColor (colorRes );
459504 }
460505
461506 @ ReactProp (name = "sendBubbleTextSize" )
462- public void setSendBubbleTextSize (SwipeRefreshLayout messageList , int size ) {
507+ public void setSendBubbleTextSize (SmartRefreshLayout messageList , int size ) {
463508 msgList .setSendBubbleTextSize (size );
464509 }
465510
466511 @ ReactProp (name = "receiveBubbleTextSize" )
467- public void setReceiveBubbleTextSize (SwipeRefreshLayout messageList , int size ) {
512+ public void setReceiveBubbleTextSize (SmartRefreshLayout messageList , int size ) {
468513 msgList .setReceiveBubbleTextSize (size );
469514 }
470515
471516 @ ReactProp (name = "sendBubblePadding" )
472- public void setSendBubblePadding (SwipeRefreshLayout messageList , ReadableMap map ) {
517+ public void setSendBubblePadding (SmartRefreshLayout messageList , ReadableMap map ) {
473518 msgList .setSendBubblePaddingLeft (map .getInt ("left" ));
474519 msgList .setSendBubblePaddingTop (map .getInt ("top" ));
475520 msgList .setSendBubblePaddingRight (map .getInt ("right" ));
476521 msgList .setSendBubblePaddingBottom (map .getInt ("bottom" ));
477522 }
478523
479524 @ ReactProp (name = "receiveBubblePadding" )
480- public void setReceiveBubblePaddingLeft (SwipeRefreshLayout messageList , ReadableMap map ) {
525+ public void setReceiveBubblePaddingLeft (SmartRefreshLayout messageList , ReadableMap map ) {
481526 msgList .setReceiveBubblePaddingLeft (map .getInt ("left" ));
482527 msgList .setReceiveBubblePaddingTop (map .getInt ("top" ));
483528 msgList .setReceiveBubblePaddingRight (map .getInt ("right" ));
484529 msgList .setReceiveBubblePaddingBottom (map .getInt ("bottom" ));
485530 }
486531
487532 @ ReactProp (name = "dateTextSize" )
488- public void setDateTextSize (SwipeRefreshLayout messageList , int size ) {
533+ public void setDateTextSize (SmartRefreshLayout messageList , int size ) {
489534 msgList .setDateTextSize (size );
490535 }
491536
492537 @ ReactProp (name = "dateTextColor" )
493- public void setDateTextColor (SwipeRefreshLayout messageList , String color ) {
538+ public void setDateTextColor (SmartRefreshLayout messageList , String color ) {
494539 int colorRes = Color .parseColor (color );
495540 msgList .setDateTextColor (colorRes );
496541 }
497542
498543 @ ReactProp (name = "datePadding" )
499- public void setDatePadding (SwipeRefreshLayout messageList , int padding ) {
544+ public void setDatePadding (SmartRefreshLayout messageList , int padding ) {
500545 msgList .setDatePadding (padding );
501546 }
502547
503548 @ ReactProp (name = "avatarSize" )
504- public void setAvatarWidth (SwipeRefreshLayout messageList , ReadableMap map ) {
549+ public void setAvatarWidth (SmartRefreshLayout messageList , ReadableMap map ) {
505550 msgList .setAvatarWidth (map .getInt ("width" ));
506551 msgList .setAvatarHeight (map .getInt ("height" ));
507552 }
508553
509554 /**
510555 * if showDisplayName equals 1, then show display name.
511556 *
512- * @param messageList SwipeRefreshLayout
557+ * @param messageList SmartRefreshLayout
513558 * @param isShowDisplayName boolean
514559 */
515560 @ ReactProp (name = "isShowDisplayName" )
516- public void setShowDisplayName (SwipeRefreshLayout messageList , boolean isShowDisplayName ) {
561+ public void setShowDisplayName (SmartRefreshLayout messageList , boolean isShowDisplayName ) {
517562 if (isShowDisplayName ) {
518563 msgList .setShowDisplayName (1 );
519564 }
@@ -559,7 +604,7 @@ public void run() {
559604 });
560605 }
561606 } else if (intent .getAction ().equals (RCT_INSERT_MESSAGES_ACTION )) {
562- swipeRefreshLayout .setRefreshing ( false );
607+ swipeRefreshLayout .finishRefresh ( true );
563608 String [] messages = intent .getStringArrayExtra ("messages" );
564609 List <RCTMessage > list = new ArrayList <>();
565610 for (int i = messages .length - 1 ; i > -1 ; i --) {
@@ -605,7 +650,7 @@ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
605650 }
606651
607652 @ Override
608- public void onDropViewInstance (SwipeRefreshLayout view ) {
653+ public void onDropViewInstance (SmartRefreshLayout view ) {
609654 super .onDropViewInstance (view );
610655 Log .w (TAG , "onDropViewInstance" );
611656 try {
0 commit comments