mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-30 11:02:31 -06:00
295 lines
12 KiB
Java
295 lines
12 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: classes2.dex */
|
||
|
class MessageThreadUtil<T> implements ThreadUtil<T> {
|
||
|
|
||
|
/* renamed from: androidx.recyclerview.widget.MessageThreadUtil$1, reason: invalid class name */
|
||
|
/* loaded from: classes2.dex */
|
||
|
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 */
|
||
|
/* loaded from: classes2.dex */
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
/* loaded from: classes2.dex */
|
||
|
public 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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
/* loaded from: classes2.dex */
|
||
|
public static class MessageQueue {
|
||
|
private final Object mLock = new Object();
|
||
|
private SyncQueueItem mRoot;
|
||
|
|
||
|
MessageQueue() {
|
||
|
}
|
||
|
|
||
|
SyncQueueItem next() {
|
||
|
synchronized (this.mLock) {
|
||
|
SyncQueueItem syncQueueItem = this.mRoot;
|
||
|
if (syncQueueItem == null) {
|
||
|
return null;
|
||
|
}
|
||
|
this.mRoot = syncQueueItem.next;
|
||
|
return syncQueueItem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sendMessageAtFrontOfQueue(SyncQueueItem syncQueueItem) {
|
||
|
synchronized (this.mLock) {
|
||
|
syncQueueItem.next = this.mRoot;
|
||
|
this.mRoot = syncQueueItem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sendMessage(SyncQueueItem syncQueueItem) {
|
||
|
synchronized (this.mLock) {
|
||
|
SyncQueueItem syncQueueItem2 = this.mRoot;
|
||
|
if (syncQueueItem2 == null) {
|
||
|
this.mRoot = syncQueueItem;
|
||
|
return;
|
||
|
}
|
||
|
while (syncQueueItem2.next != null) {
|
||
|
syncQueueItem2 = syncQueueItem2.next;
|
||
|
}
|
||
|
syncQueueItem2.next = syncQueueItem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void removeMessages(int i) {
|
||
|
synchronized (this.mLock) {
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|