ADD week 5
This commit is contained in:
		| @@ -0,0 +1,281 @@ | ||||
| package androidx.recyclerview.widget; | ||||
|  | ||||
| import android.os.AsyncTask; | ||||
| import android.os.Handler; | ||||
| import android.os.Looper; | ||||
| import android.util.Log; | ||||
| import androidx.recyclerview.widget.ThreadUtil; | ||||
| import androidx.recyclerview.widget.TileList; | ||||
| import java.util.concurrent.Executor; | ||||
| import java.util.concurrent.atomic.AtomicBoolean; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class MessageThreadUtil<T> implements ThreadUtil<T> { | ||||
|     MessageThreadUtil() { | ||||
|     } | ||||
|  | ||||
|     /* renamed from: androidx.recyclerview.widget.MessageThreadUtil$1, reason: invalid class name */ | ||||
|     class AnonymousClass1 implements ThreadUtil.MainThreadCallback<T> { | ||||
|         static final int ADD_TILE = 2; | ||||
|         static final int REMOVE_TILE = 3; | ||||
|         static final int UPDATE_ITEM_COUNT = 1; | ||||
|         final /* synthetic */ ThreadUtil.MainThreadCallback val$callback; | ||||
|         final MessageQueue mQueue = new MessageQueue(); | ||||
|         private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper()); | ||||
|         private Runnable mMainThreadRunnable = new Runnable() { // from class: androidx.recyclerview.widget.MessageThreadUtil.1.1 | ||||
|             @Override // java.lang.Runnable | ||||
|             public void run() { | ||||
|                 SyncQueueItem next = AnonymousClass1.this.mQueue.next(); | ||||
|                 while (next != null) { | ||||
|                     int i = next.what; | ||||
|                     if (i == 1) { | ||||
|                         AnonymousClass1.this.val$callback.updateItemCount(next.arg1, next.arg2); | ||||
|                     } else if (i == 2) { | ||||
|                         AnonymousClass1.this.val$callback.addTile(next.arg1, (TileList.Tile) next.data); | ||||
|                     } else if (i == 3) { | ||||
|                         AnonymousClass1.this.val$callback.removeTile(next.arg1, next.arg2); | ||||
|                     } else { | ||||
|                         Log.e("ThreadUtil", "Unsupported message, what=" + next.what); | ||||
|                     } | ||||
|                     next = AnonymousClass1.this.mQueue.next(); | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         AnonymousClass1(ThreadUtil.MainThreadCallback mainThreadCallback) { | ||||
|             this.val$callback = mainThreadCallback; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.MainThreadCallback | ||||
|         public void updateItemCount(int i, int i2) { | ||||
|             sendMessage(SyncQueueItem.obtainMessage(1, i, i2)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.MainThreadCallback | ||||
|         public void addTile(int i, TileList.Tile<T> tile) { | ||||
|             sendMessage(SyncQueueItem.obtainMessage(2, i, tile)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.MainThreadCallback | ||||
|         public void removeTile(int i, int i2) { | ||||
|             sendMessage(SyncQueueItem.obtainMessage(3, i, i2)); | ||||
|         } | ||||
|  | ||||
|         private void sendMessage(SyncQueueItem syncQueueItem) { | ||||
|             this.mQueue.sendMessage(syncQueueItem); | ||||
|             this.mMainThreadHandler.post(this.mMainThreadRunnable); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.ThreadUtil | ||||
|     public ThreadUtil.MainThreadCallback<T> getMainThreadProxy(ThreadUtil.MainThreadCallback<T> mainThreadCallback) { | ||||
|         return new AnonymousClass1(mainThreadCallback); | ||||
|     } | ||||
|  | ||||
|     /* renamed from: androidx.recyclerview.widget.MessageThreadUtil$2, reason: invalid class name */ | ||||
|     class AnonymousClass2 implements ThreadUtil.BackgroundCallback<T> { | ||||
|         static final int LOAD_TILE = 3; | ||||
|         static final int RECYCLE_TILE = 4; | ||||
|         static final int REFRESH = 1; | ||||
|         static final int UPDATE_RANGE = 2; | ||||
|         final /* synthetic */ ThreadUtil.BackgroundCallback val$callback; | ||||
|         final MessageQueue mQueue = new MessageQueue(); | ||||
|         private final Executor mExecutor = AsyncTask.THREAD_POOL_EXECUTOR; | ||||
|         AtomicBoolean mBackgroundRunning = new AtomicBoolean(false); | ||||
|         private Runnable mBackgroundRunnable = new Runnable() { // from class: androidx.recyclerview.widget.MessageThreadUtil.2.1 | ||||
|             @Override // java.lang.Runnable | ||||
|             public void run() { | ||||
|                 while (true) { | ||||
|                     SyncQueueItem next = AnonymousClass2.this.mQueue.next(); | ||||
|                     if (next != null) { | ||||
|                         int i = next.what; | ||||
|                         if (i == 1) { | ||||
|                             AnonymousClass2.this.mQueue.removeMessages(1); | ||||
|                             AnonymousClass2.this.val$callback.refresh(next.arg1); | ||||
|                         } else if (i == 2) { | ||||
|                             AnonymousClass2.this.mQueue.removeMessages(2); | ||||
|                             AnonymousClass2.this.mQueue.removeMessages(3); | ||||
|                             AnonymousClass2.this.val$callback.updateRange(next.arg1, next.arg2, next.arg3, next.arg4, next.arg5); | ||||
|                         } else if (i == 3) { | ||||
|                             AnonymousClass2.this.val$callback.loadTile(next.arg1, next.arg2); | ||||
|                         } else if (i == 4) { | ||||
|                             AnonymousClass2.this.val$callback.recycleTile((TileList.Tile) next.data); | ||||
|                         } else { | ||||
|                             Log.e("ThreadUtil", "Unsupported message, what=" + next.what); | ||||
|                         } | ||||
|                     } else { | ||||
|                         AnonymousClass2.this.mBackgroundRunning.set(false); | ||||
|                         return; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         AnonymousClass2(ThreadUtil.BackgroundCallback backgroundCallback) { | ||||
|             this.val$callback = backgroundCallback; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.BackgroundCallback | ||||
|         public void refresh(int i) { | ||||
|             sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(1, i, (Object) null)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.BackgroundCallback | ||||
|         public void updateRange(int i, int i2, int i3, int i4, int i5) { | ||||
|             sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(2, i, i2, i3, i4, i5, null)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.BackgroundCallback | ||||
|         public void loadTile(int i, int i2) { | ||||
|             sendMessage(SyncQueueItem.obtainMessage(3, i, i2)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.ThreadUtil.BackgroundCallback | ||||
|         public void recycleTile(TileList.Tile<T> tile) { | ||||
|             sendMessage(SyncQueueItem.obtainMessage(4, 0, tile)); | ||||
|         } | ||||
|  | ||||
|         private void sendMessage(SyncQueueItem syncQueueItem) { | ||||
|             this.mQueue.sendMessage(syncQueueItem); | ||||
|             maybeExecuteBackgroundRunnable(); | ||||
|         } | ||||
|  | ||||
|         private void sendMessageAtFrontOfQueue(SyncQueueItem syncQueueItem) { | ||||
|             this.mQueue.sendMessageAtFrontOfQueue(syncQueueItem); | ||||
|             maybeExecuteBackgroundRunnable(); | ||||
|         } | ||||
|  | ||||
|         private void maybeExecuteBackgroundRunnable() { | ||||
|             if (this.mBackgroundRunning.compareAndSet(false, true)) { | ||||
|                 this.mExecutor.execute(this.mBackgroundRunnable); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.ThreadUtil | ||||
|     public ThreadUtil.BackgroundCallback<T> getBackgroundProxy(ThreadUtil.BackgroundCallback<T> backgroundCallback) { | ||||
|         return new AnonymousClass2(backgroundCallback); | ||||
|     } | ||||
|  | ||||
|     static class SyncQueueItem { | ||||
|         private static SyncQueueItem sPool; | ||||
|         private static final Object sPoolLock = new Object(); | ||||
|         public int arg1; | ||||
|         public int arg2; | ||||
|         public int arg3; | ||||
|         public int arg4; | ||||
|         public int arg5; | ||||
|         public Object data; | ||||
|         SyncQueueItem next; | ||||
|         public int what; | ||||
|  | ||||
|         SyncQueueItem() { | ||||
|         } | ||||
|  | ||||
|         void recycle() { | ||||
|             this.next = null; | ||||
|             this.arg5 = 0; | ||||
|             this.arg4 = 0; | ||||
|             this.arg3 = 0; | ||||
|             this.arg2 = 0; | ||||
|             this.arg1 = 0; | ||||
|             this.what = 0; | ||||
|             this.data = null; | ||||
|             synchronized (sPoolLock) { | ||||
|                 SyncQueueItem syncQueueItem = sPool; | ||||
|                 if (syncQueueItem != null) { | ||||
|                     this.next = syncQueueItem; | ||||
|                 } | ||||
|                 sPool = this; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         static SyncQueueItem obtainMessage(int i, int i2, int i3, int i4, int i5, int i6, Object obj) { | ||||
|             SyncQueueItem syncQueueItem; | ||||
|             synchronized (sPoolLock) { | ||||
|                 syncQueueItem = sPool; | ||||
|                 if (syncQueueItem == null) { | ||||
|                     syncQueueItem = new SyncQueueItem(); | ||||
|                 } else { | ||||
|                     sPool = syncQueueItem.next; | ||||
|                     syncQueueItem.next = null; | ||||
|                 } | ||||
|                 syncQueueItem.what = i; | ||||
|                 syncQueueItem.arg1 = i2; | ||||
|                 syncQueueItem.arg2 = i3; | ||||
|                 syncQueueItem.arg3 = i4; | ||||
|                 syncQueueItem.arg4 = i5; | ||||
|                 syncQueueItem.arg5 = i6; | ||||
|                 syncQueueItem.data = obj; | ||||
|             } | ||||
|             return syncQueueItem; | ||||
|         } | ||||
|  | ||||
|         static SyncQueueItem obtainMessage(int i, int i2, int i3) { | ||||
|             return obtainMessage(i, i2, i3, 0, 0, 0, null); | ||||
|         } | ||||
|  | ||||
|         static SyncQueueItem obtainMessage(int i, int i2, Object obj) { | ||||
|             return obtainMessage(i, i2, 0, 0, 0, 0, obj); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class MessageQueue { | ||||
|         private SyncQueueItem mRoot; | ||||
|  | ||||
|         MessageQueue() { | ||||
|         } | ||||
|  | ||||
|         synchronized SyncQueueItem next() { | ||||
|             SyncQueueItem syncQueueItem = this.mRoot; | ||||
|             if (syncQueueItem == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             this.mRoot = syncQueueItem.next; | ||||
|             return syncQueueItem; | ||||
|         } | ||||
|  | ||||
|         synchronized void sendMessageAtFrontOfQueue(SyncQueueItem syncQueueItem) { | ||||
|             syncQueueItem.next = this.mRoot; | ||||
|             this.mRoot = syncQueueItem; | ||||
|         } | ||||
|  | ||||
|         synchronized void sendMessage(SyncQueueItem syncQueueItem) { | ||||
|             SyncQueueItem syncQueueItem2 = this.mRoot; | ||||
|             if (syncQueueItem2 == null) { | ||||
|                 this.mRoot = syncQueueItem; | ||||
|                 return; | ||||
|             } | ||||
|             while (syncQueueItem2.next != null) { | ||||
|                 syncQueueItem2 = syncQueueItem2.next; | ||||
|             } | ||||
|             syncQueueItem2.next = syncQueueItem; | ||||
|         } | ||||
|  | ||||
|         synchronized void removeMessages(int i) { | ||||
|             while (true) { | ||||
|                 SyncQueueItem syncQueueItem = this.mRoot; | ||||
|                 if (syncQueueItem == null || syncQueueItem.what != i) { | ||||
|                     break; | ||||
|                 } | ||||
|                 SyncQueueItem syncQueueItem2 = this.mRoot; | ||||
|                 this.mRoot = syncQueueItem2.next; | ||||
|                 syncQueueItem2.recycle(); | ||||
|             } | ||||
|             SyncQueueItem syncQueueItem3 = this.mRoot; | ||||
|             if (syncQueueItem3 != null) { | ||||
|                 SyncQueueItem syncQueueItem4 = syncQueueItem3.next; | ||||
|                 while (syncQueueItem4 != null) { | ||||
|                     SyncQueueItem syncQueueItem5 = syncQueueItem4.next; | ||||
|                     if (syncQueueItem4.what == i) { | ||||
|                         syncQueueItem3.next = syncQueueItem5; | ||||
|                         syncQueueItem4.recycle(); | ||||
|                     } else { | ||||
|                         syncQueueItem3 = syncQueueItem4; | ||||
|                     } | ||||
|                     syncQueueItem4 = syncQueueItem5; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user