mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
204 lines
6.8 KiB
Java
204 lines
6.8 KiB
Java
package com.google.android.material.snackbar;
|
|
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.os.Message;
|
|
import java.lang.ref.WeakReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
class SnackbarManager {
|
|
private static final int LONG_DURATION_MS = 2750;
|
|
static final int MSG_TIMEOUT = 0;
|
|
private static final int SHORT_DURATION_MS = 1500;
|
|
private static SnackbarManager snackbarManager;
|
|
private SnackbarRecord currentSnackbar;
|
|
private SnackbarRecord nextSnackbar;
|
|
private final Object lock = new Object();
|
|
private final Handler handler = new Handler(Looper.getMainLooper(), new Handler.Callback() { // from class: com.google.android.material.snackbar.SnackbarManager.1
|
|
@Override // android.os.Handler.Callback
|
|
public boolean handleMessage(Message message) {
|
|
if (message.what != 0) {
|
|
return false;
|
|
}
|
|
SnackbarManager.this.handleTimeout((SnackbarRecord) message.obj);
|
|
return true;
|
|
}
|
|
});
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes2.dex */
|
|
public interface Callback {
|
|
void dismiss(int i);
|
|
|
|
void show();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public static SnackbarManager getInstance() {
|
|
if (snackbarManager == null) {
|
|
snackbarManager = new SnackbarManager();
|
|
}
|
|
return snackbarManager;
|
|
}
|
|
|
|
private SnackbarManager() {
|
|
}
|
|
|
|
public void show(int i, Callback callback) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback)) {
|
|
this.currentSnackbar.duration = i;
|
|
this.handler.removeCallbacksAndMessages(this.currentSnackbar);
|
|
scheduleTimeoutLocked(this.currentSnackbar);
|
|
return;
|
|
}
|
|
if (isNextSnackbarLocked(callback)) {
|
|
this.nextSnackbar.duration = i;
|
|
} else {
|
|
this.nextSnackbar = new SnackbarRecord(i, callback);
|
|
}
|
|
SnackbarRecord snackbarRecord = this.currentSnackbar;
|
|
if (snackbarRecord == null || !cancelSnackbarLocked(snackbarRecord, 4)) {
|
|
this.currentSnackbar = null;
|
|
showNextSnackbarLocked();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void dismiss(Callback callback, int i) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback)) {
|
|
cancelSnackbarLocked(this.currentSnackbar, i);
|
|
} else if (isNextSnackbarLocked(callback)) {
|
|
cancelSnackbarLocked(this.nextSnackbar, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onDismissed(Callback callback) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback)) {
|
|
this.currentSnackbar = null;
|
|
if (this.nextSnackbar != null) {
|
|
showNextSnackbarLocked();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onShown(Callback callback) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback)) {
|
|
scheduleTimeoutLocked(this.currentSnackbar);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void pauseTimeout(Callback callback) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback) && !this.currentSnackbar.paused) {
|
|
this.currentSnackbar.paused = true;
|
|
this.handler.removeCallbacksAndMessages(this.currentSnackbar);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void restoreTimeoutIfPaused(Callback callback) {
|
|
synchronized (this.lock) {
|
|
if (isCurrentSnackbarLocked(callback) && this.currentSnackbar.paused) {
|
|
this.currentSnackbar.paused = false;
|
|
scheduleTimeoutLocked(this.currentSnackbar);
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean isCurrent(Callback callback) {
|
|
boolean isCurrentSnackbarLocked;
|
|
synchronized (this.lock) {
|
|
isCurrentSnackbarLocked = isCurrentSnackbarLocked(callback);
|
|
}
|
|
return isCurrentSnackbarLocked;
|
|
}
|
|
|
|
public boolean isCurrentOrNext(Callback callback) {
|
|
boolean z;
|
|
synchronized (this.lock) {
|
|
z = isCurrentSnackbarLocked(callback) || isNextSnackbarLocked(callback);
|
|
}
|
|
return z;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes2.dex */
|
|
public static class SnackbarRecord {
|
|
final WeakReference<Callback> callback;
|
|
int duration;
|
|
boolean paused;
|
|
|
|
SnackbarRecord(int i, Callback callback) {
|
|
this.callback = new WeakReference<>(callback);
|
|
this.duration = i;
|
|
}
|
|
|
|
boolean isSnackbar(Callback callback) {
|
|
return callback != null && this.callback.get() == callback;
|
|
}
|
|
}
|
|
|
|
private void showNextSnackbarLocked() {
|
|
SnackbarRecord snackbarRecord = this.nextSnackbar;
|
|
if (snackbarRecord != null) {
|
|
this.currentSnackbar = snackbarRecord;
|
|
this.nextSnackbar = null;
|
|
Callback callback = snackbarRecord.callback.get();
|
|
if (callback != null) {
|
|
callback.show();
|
|
} else {
|
|
this.currentSnackbar = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean cancelSnackbarLocked(SnackbarRecord snackbarRecord, int i) {
|
|
Callback callback = snackbarRecord.callback.get();
|
|
if (callback == null) {
|
|
return false;
|
|
}
|
|
this.handler.removeCallbacksAndMessages(snackbarRecord);
|
|
callback.dismiss(i);
|
|
return true;
|
|
}
|
|
|
|
private boolean isCurrentSnackbarLocked(Callback callback) {
|
|
SnackbarRecord snackbarRecord = this.currentSnackbar;
|
|
return snackbarRecord != null && snackbarRecord.isSnackbar(callback);
|
|
}
|
|
|
|
private boolean isNextSnackbarLocked(Callback callback) {
|
|
SnackbarRecord snackbarRecord = this.nextSnackbar;
|
|
return snackbarRecord != null && snackbarRecord.isSnackbar(callback);
|
|
}
|
|
|
|
private void scheduleTimeoutLocked(SnackbarRecord snackbarRecord) {
|
|
int i;
|
|
if (snackbarRecord.duration == -2) {
|
|
return;
|
|
}
|
|
if (snackbarRecord.duration > 0) {
|
|
i = snackbarRecord.duration;
|
|
} else {
|
|
i = snackbarRecord.duration == -1 ? SHORT_DURATION_MS : LONG_DURATION_MS;
|
|
}
|
|
this.handler.removeCallbacksAndMessages(snackbarRecord);
|
|
Handler handler = this.handler;
|
|
handler.sendMessageDelayed(Message.obtain(handler, 0, snackbarRecord), i);
|
|
}
|
|
|
|
void handleTimeout(SnackbarRecord snackbarRecord) {
|
|
synchronized (this.lock) {
|
|
if (this.currentSnackbar == snackbarRecord || this.nextSnackbar == snackbarRecord) {
|
|
cancelSnackbarLocked(snackbarRecord, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|