282 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			282 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |