CrackMe.apk
Download file
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;
class MessageThreadUtil<T> implements ThreadUtil<T> {
MessageThreadUtil() {
}
public ThreadUtil.MainThreadCallback<T> getMainThreadProxy(final ThreadUtil.MainThreadCallback<T> mainThreadCallback) {
return new ThreadUtil.MainThreadCallback<T>() {
static final int ADD_TILE = 2;
static final int REMOVE_TILE = 3;
static final int UPDATE_ITEM_COUNT = 1;
private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
private Runnable mMainThreadRunnable = new Runnable() {
public void run() {
SyncQueueItem next = AnonymousClass1.this.mQueue.next();
while (next != null) {
int i = next.what;
if (i == 1) {
mainThreadCallback.updateItemCount(next.arg1, next.arg2);
} else if (i == 2) {
mainThreadCallback.addTile(next.arg1, (TileList.Tile) next.data);
} else if (i != 3) {
Log.e("ThreadUtil", "Unsupported message, what=" + next.what);
} else {
mainThreadCallback.removeTile(next.arg1, next.arg2);
}
next = AnonymousClass1.this.mQueue.next();
}
}
};
final MessageQueue mQueue = new MessageQueue();
public void updateItemCount(int i, int i2) {
sendMessage(SyncQueueItem.obtainMessage(1, i, i2));
}
public void addTile(int i, TileList.Tile<T> tile) {
sendMessage(SyncQueueItem.obtainMessage(2, i, (Object) tile));
}
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);
}
};
}
public ThreadUtil.BackgroundCallback<T> getBackgroundProxy(final ThreadUtil.BackgroundCallback<T> backgroundCallback) {
return new 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;
private Runnable mBackgroundRunnable = new Runnable() {
public void run() {
while (true) {
SyncQueueItem next = AnonymousClass2.this.mQueue.next();
if (next == null) {
AnonymousClass2.this.mBackgroundRunning.set(false);
return;
}
int i = next.what;
if (i == 1) {
AnonymousClass2.this.mQueue.removeMessages(1);
backgroundCallback.refresh(next.arg1);
} else if (i == 2) {
AnonymousClass2.this.mQueue.removeMessages(2);
AnonymousClass2.this.mQueue.removeMessages(3);
backgroundCallback.updateRange(next.arg1, next.arg2, next.arg3, next.arg4, next.arg5);
} else if (i == 3) {
backgroundCallback.loadTile(next.arg1, next.arg2);
} else if (i != 4) {
Log.e("ThreadUtil", "Unsupported message, what=" + next.what);
} else {
backgroundCallback.recycleTile((TileList.Tile) next.data);
}
}
}
};
AtomicBoolean mBackgroundRunning = new AtomicBoolean(false);
private final Executor mExecutor = AsyncTask.THREAD_POOL_EXECUTOR;
final MessageQueue mQueue = new MessageQueue();
public void refresh(int i) {
sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(1, i, (Object) null));
}
public void updateRange(int i, int i2, int i3, int i4, int i5) {
sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(2, i, i2, i3, i4, i5, (Object) null));
}
public void loadTile(int i, int i2) {
sendMessage(SyncQueueItem.obtainMessage(3, i, i2));
}
public void recycleTile(TileList.Tile<T> tile) {
sendMessage(SyncQueueItem.obtainMessage(4, 0, (Object) 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);
}
}
};
}
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() {
}
/* access modifiers changed from: package-private */
public 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, (Object) 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() {
}
/* access modifiers changed from: package-private */
public synchronized SyncQueueItem next() {
SyncQueueItem syncQueueItem = this.mRoot;
if (syncQueueItem == null) {
return null;
}
this.mRoot = syncQueueItem.next;
return syncQueueItem;
}
/* access modifiers changed from: package-private */
public synchronized void sendMessageAtFrontOfQueue(SyncQueueItem syncQueueItem) {
syncQueueItem.next = this.mRoot;
this.mRoot = syncQueueItem;
}
/* access modifiers changed from: package-private */
public 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;
}
/* access modifiers changed from: package-private */
public synchronized void removeMessages(int i) {
while (true) {
SyncQueueItem syncQueueItem = this.mRoot;
if (syncQueueItem == null || syncQueueItem.what != i) {
SyncQueueItem syncQueueItem2 = this.mRoot;
} else {
SyncQueueItem syncQueueItem3 = this.mRoot;
this.mRoot = syncQueueItem3.next;
syncQueueItem3.recycle();
}
}
SyncQueueItem syncQueueItem22 = this.mRoot;
if (syncQueueItem22 != null) {
SyncQueueItem syncQueueItem4 = syncQueueItem22.next;
while (syncQueueItem4 != null) {
SyncQueueItem syncQueueItem5 = syncQueueItem4.next;
if (syncQueueItem4.what == i) {
syncQueueItem22.next = syncQueueItem5;
syncQueueItem4.recycle();
} else {
syncQueueItem22 = syncQueueItem4;
}
syncQueueItem4 = syncQueueItem5;
}
}
}
}
}
Download file