1919import java .util .Set ;
2020
2121/**
22- *
2322 * @author SilenceDut
2423 * @date 2018/12/19
2524 */
2625class AsyncListUpdateDiffer <T extends BaseMutableData > {
27- private static final String TAG ="AsyncListUpdateDiffer" ;
26+ private static final String TAG = "AsyncListUpdateDiffer" ;
2827 private final ListUpdateCallback mUpdateCallback ;
2928 private final AsyncDifferConfig <T > mConfig ;
3029 private final ListChangedCallback <T > mListChangedCallback ;
@@ -36,42 +35,48 @@ class AsyncListUpdateDiffer<T extends BaseMutableData> {
3635 static final int DELAY_STEP = 5 ;
3736 private Handler mDiffHandler ;
3837
39- AsyncListUpdateDiffer (@ NonNull DiffAdapter adapter , @ NonNull ListChangedCallback <T > listChangedCallback , @ NonNull DiffUtil .ItemCallback <T > diffCallback ) {
38+ AsyncListUpdateDiffer (@ NonNull DiffAdapter adapter , @ NonNull ListChangedCallback <T > listChangedCallback ,
39+ @ NonNull DiffUtil .ItemCallback <T > diffCallback ) {
4040 this .mDiffHandler = adapter .mDiffHandler ;
4141 this .mUpdateCallback = new AdapterListUpdateCallback (adapter );
4242 this .mConfig = new AsyncDifferConfig .Builder <>(diffCallback ).build ();
4343 this .mListChangedCallback = listChangedCallback ;
4444 updateCurrentList (new ArrayList <T >());
4545 }
4646
47-
48-
4947 void submitList (@ Nullable final List <T > newList ) {
5048 final long runGeneration = ++this .mMaxScheduledGeneration ;
5149 mGenerations .add (runGeneration );
52- Log .d (TAG ,"latchList submitList runGeneration add :" + runGeneration + ";;size" + mGenerations .size ());
50+ Log .d (TAG , "latchList submitList runGeneration add :" + runGeneration + ";;size" + mGenerations .size ());
5351 if (newList != this .mOldList ) {
5452 if (newList == null ) {
5553 int countRemoved = this .mOldList .size ();
5654 syncOldList (null );
5755 updateCurrentList (new ArrayList <T >());
5856 this .mUpdateCallback .onRemoved (0 , countRemoved );
5957 mGenerations .remove (runGeneration );
60- Log .d (TAG ,"latchList submitList newList == null runGeneration :" +runGeneration +";;size" +mGenerations .size ());
58+ Log .d (TAG , "latchList submitList newList == null runGeneration :" + runGeneration + ";;size" +
59+ mGenerations .size ());
6160 } else if (this .mOldList == null ) {
6261 syncOldList (newList );
6362 updateSyncTime (newList );
6463 updateCurrentList (new ArrayList <>(newList ));
6564 this .mUpdateCallback .onInserted (0 , newList .size ());
6665 mGenerations .remove (runGeneration );
67- Log .d (TAG ,"latchList submitList mOldList == null runGeneration :" +runGeneration +";;size" +mGenerations .size ());
66+ Log .d (TAG , "latchList submitList mOldList == null runGeneration :" + runGeneration + ";;size" +
67+ mGenerations .size ());
6868 } else {
69- doDiff (newList ,runGeneration );
69+ doDiff (newList , runGeneration );
7070 }
7171 }
7272 }
7373
74- private void doDiff (@ NonNull final List <T > newList ,final long runGeneration ) {
74+ private void doDiff (@ NonNull final List <T > newList , final long runGeneration ) {
75+
76+ if (this .mOldList == null ) {
77+ return ;
78+ }
79+
7580 final List <T > oldList = new ArrayList <>(this .mOldList );
7681
7782 this .mConfig .getBackgroundThreadExecutor ().execute (new Runnable () {
@@ -82,19 +87,22 @@ public void run() {
8287 public int getOldListSize () {
8388 return oldList .size ();
8489 }
90+
8591 @ Override
8692 public int getNewListSize () {
8793 return newList .size ();
8894 }
95+
8996 @ Override
9097 public boolean areItemsTheSame (int oldItemPosition , int newItemPosition ) {
9198
9299 T oldItem = oldList .get (oldItemPosition );
93100 T newItem = newList .get (newItemPosition );
94- if (oldItem == null || newItem == null ) {
101+ if (oldItem == null || newItem == null ) {
95102 return false ;
96103 }
97- if (oldItem .getItemViewId ()!=newItem .getItemViewId () || oldItem .getClass () != newItem .getClass ()) {
104+ if (oldItem .getItemViewId () != newItem .getItemViewId () ||
105+ oldItem .getClass () != newItem .getClass ()) {
98106 return false ;
99107 }
100108 return AsyncListUpdateDiffer .this .mConfig .getDiffCallback ().areItemsTheSame (oldItem , newItem );
@@ -105,32 +113,37 @@ public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
105113
106114 T oldItem = oldList .get (oldItemPosition );
107115 T newItem = newList .get (newItemPosition );
108- if (oldItem != null && newItem != null && oldItem .getClass () == newItem .getClass () ) {
109- return AsyncListUpdateDiffer .this .mConfig .getDiffCallback ().areContentsTheSame (oldItem , newItem );
110- } else {
116+ if (oldItem != null && newItem != null && oldItem .getClass () == newItem .getClass ()) {
117+ return AsyncListUpdateDiffer .this .mConfig .getDiffCallback ()
118+ .areContentsTheSame (oldItem , newItem );
119+ } else {
111120 return oldItem == null && newItem == null ;
112121 }
113122 }
123+
114124 @ Override
115125 @ Nullable
116126 public Object getChangePayload (int oldItemPosition , int newItemPosition ) {
117127 T oldItem = oldList .get (oldItemPosition );
118128 T newItem = newList .get (newItemPosition );
119129 if (oldItem != null && newItem != null && oldItem .getClass () == newItem .getClass ()) {
120- return AsyncListUpdateDiffer .this .mConfig .getDiffCallback ().getChangePayload (oldItem , newItem );
130+ return AsyncListUpdateDiffer .this .mConfig .getDiffCallback ()
131+ .getChangePayload (oldItem , newItem );
121132 } else {
122133 return null ;
123134 }
124135 }
125136 });
126- mDiffHandler .post ( new Runnable () {
137+ mDiffHandler .post (new Runnable () {
127138 @ Override
128139 public void run () {
129140 if (AsyncListUpdateDiffer .this .mMaxScheduledGeneration == runGeneration ) {
130- AsyncListUpdateDiffer .this .latchList (newList , result ,runGeneration );
131- Log .d (TAG ,"latchList doDiff runGeneration :" +runGeneration +";;size" +mGenerations .size ());
141+ AsyncListUpdateDiffer .this .latchList (newList , result , runGeneration );
142+ Log .d (TAG , "latchList doDiff runGeneration :" + runGeneration + ";;size" +
143+ mGenerations .size ());
132144 } else {
133- Log .d (TAG ,"latchList doDiff else runGeneration :" +runGeneration +";;size" +mGenerations .size ());
145+ Log .d (TAG , "latchList doDiff else runGeneration :" + runGeneration + ";;size" +
146+ mGenerations .size ());
134147 mGenerations .remove (runGeneration );
135148 }
136149 }
@@ -139,17 +152,18 @@ public void run() {
139152 });
140153 }
141154
142- private void latchList (@ NonNull final List <T > newList , @ NonNull final DiffUtil .DiffResult diffResult ,final long runGeneration ) {
155+ private void latchList (@ NonNull final List <T > newList , @ NonNull final DiffUtil .DiffResult diffResult ,
156+ final long runGeneration ) {
143157
144- long needDelay = mCanSyncTime - SystemClock .elapsedRealtime () ;
145- if (needDelay <= 0 ) {
158+ long needDelay = mCanSyncTime - SystemClock .elapsedRealtime ();
159+ if (needDelay <= 0 ) {
146160
147161 syncOldList (newList );
148162 updateSyncTime (newList );
149163 updateCurrentList (new ArrayList <>(newList ));
150164 diffResult .dispatchUpdatesTo (AsyncListUpdateDiffer .this .mUpdateCallback );
151165 mGenerations .remove (runGeneration );
152- Log .d (TAG ,"latchList needDelay <= 0 runGeneration :" + runGeneration + ";;size" + mGenerations .size ());
166+ Log .d (TAG , "latchList needDelay <= 0 runGeneration :" + runGeneration + ";;size" + mGenerations .size ());
153167
154168 } else {
155169
@@ -165,29 +179,28 @@ public void run() {
165179 diffResult .dispatchUpdatesTo (AsyncListUpdateDiffer .this .mUpdateCallback );
166180
167181 }
168- Log .d (TAG ,"latchList else runGeneration :" + runGeneration + ";;size" + mGenerations .size ());
182+ Log .d (TAG , "latchList else runGeneration :" + runGeneration + ";;size" + mGenerations .size ());
169183 mGenerations .remove (runGeneration );
170184 }
171- }, needDelay );
185+ }, needDelay );
172186 }
173187
174188 }
175189
176-
177- void updateOldListSize (final @ NonNull Runnable listSizeRunnable , final List <T > oldDatas ) {
178- if (mGenerations .size () > 0 ) {
190+ void updateOldListSize (final @ NonNull Runnable listSizeRunnable , final List <T > oldDatas ) {
191+ if (mGenerations .size () > 0 ) {
179192 return ;
180193 }
181194
182195 long currentTimeMillis = SystemClock .elapsedRealtime ();
183196
184- if (currentTimeMillis >= mCanSyncTime ) {
197+ if (currentTimeMillis >= mCanSyncTime ) {
185198
186199 listSizeRunnable .run ();
187200 syncOldList (oldDatas );
188201
189- }else {
190- final long runGeneration = AsyncListUpdateDiffer .this .mMaxScheduledGeneration ;
202+ } else {
203+ final long runGeneration = AsyncListUpdateDiffer .this .mMaxScheduledGeneration ;
191204 mDiffHandler .postDelayed (new Runnable () {
192205 @ Override
193206 public void run () {
@@ -198,20 +211,20 @@ public void run() {
198211 syncOldList (oldDatas );
199212 }
200213 }
201- }, mCanSyncTime - currentTimeMillis );
214+ }, mCanSyncTime - currentTimeMillis );
202215 }
203216 }
204217
205218 private void updateCurrentList (List <T > currentList ) {
206219 this .mListChangedCallback .onListChanged (currentList );
207220 }
208221
209- private void syncOldList (@ Nullable List <T > oldData ) {
222+ private void syncOldList (@ Nullable List <T > oldData ) {
210223 this .mOldList = oldData ;
211224 }
212225
213- private void updateSyncTime (@ Nullable List <T > oldData ) {
214- mCanSyncTime = SystemClock .elapsedRealtime () + (oldData != null ? oldData .size () * DELAY_STEP : 0 ) ;
226+ private void updateSyncTime (@ Nullable List <T > oldData ) {
227+ mCanSyncTime = SystemClock .elapsedRealtime () + (oldData != null ? oldData .size () * DELAY_STEP : 0 ) ;
215228 }
216229
217230
0 commit comments