96 lines
3.8 KiB
Java
96 lines
3.8 KiB
Java
package com.afunx.ble.blelitelib.proxy.scheme;
|
|
|
|
import com.afunx.ble.blelitelib.log.BleLiteLog;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class BleGattReconnectSchemeDefaultImpl implements BleGattReconnectScheme {
|
|
private static final String TAG = "BleGattReconnectSchemeDefaultImpl";
|
|
private Runnable mDisconnectedCallback;
|
|
private final AtomicInteger mCount = new AtomicInteger();
|
|
private final Timer mTimer = new Timer();
|
|
private TimerTask mTimerTask = null;
|
|
private volatile long mTimeoutMilli = 0;
|
|
private volatile boolean mTryAgain = true;
|
|
|
|
private synchronized void addTimerTask(long j) {
|
|
BleLiteLog.i(TAG, "addTimerTask() delayMilli: " + j);
|
|
this.mTimerTask = new TimerTask() { // from class: com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectSchemeDefaultImpl.1
|
|
@Override // java.util.TimerTask, java.lang.Runnable
|
|
public void run() {
|
|
BleLiteLog.i(BleGattReconnectSchemeDefaultImpl.TAG, "addTimerTask() run()");
|
|
BleGattReconnectSchemeDefaultImpl.this.mTryAgain = false;
|
|
if (BleGattReconnectSchemeDefaultImpl.this.mDisconnectedCallback != null) {
|
|
BleGattReconnectSchemeDefaultImpl.this.mDisconnectedCallback.run();
|
|
}
|
|
}
|
|
};
|
|
this.mTimer.schedule(this.mTimerTask, j);
|
|
}
|
|
|
|
private synchronized boolean removeTimerTask() {
|
|
BleLiteLog.i(TAG, "removeTimerTask()");
|
|
if (this.mTimerTask == null) {
|
|
this.mTryAgain = true;
|
|
BleLiteLog.i(TAG, "removeTimerTask() mTryAgain = true");
|
|
return false;
|
|
}
|
|
BleLiteLog.i(TAG, "removeTimerTask() cancel()");
|
|
boolean cancel = this.mTimerTask.cancel();
|
|
this.mTimerTask = null;
|
|
return cancel;
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public int addAndGetRetryCount() {
|
|
return this.mCount.addAndGet(1);
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public synchronized void callDisconnectCallbackInstantly() {
|
|
BleLiteLog.i(TAG, "callDisconnectCallbackInstantly()");
|
|
if (this.mTimerTask == null) {
|
|
BleLiteLog.i(TAG, "callDisconnectCallbackInstantly() run()");
|
|
if (this.mDisconnectedCallback != null) {
|
|
this.mDisconnectedCallback.run();
|
|
}
|
|
} else if (removeTimerTask()) {
|
|
BleLiteLog.i(TAG, "callDisconnectCallbackInstantly() run() for cancelled already");
|
|
if (this.mDisconnectedCallback != null) {
|
|
this.mDisconnectedCallback.run();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public void clearRetryCount() {
|
|
removeTimerTask();
|
|
this.mCount.set(0);
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public synchronized long getSleepTimestamp(int i) {
|
|
BleLiteLog.i(TAG, "getSleepTimestamp() retryCount: " + i + ", mDisconnectedCallback: " + this.mDisconnectedCallback);
|
|
if (i == 1 && this.mDisconnectedCallback != null) {
|
|
addTimerTask(this.mTimeoutMilli);
|
|
}
|
|
return (2 << (i - 1)) * 1000;
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public synchronized void setDisconnectCallback(Runnable runnable, long j) {
|
|
if (j < 0) {
|
|
throw new IllegalArgumentException("timeoutMilli should >= 0");
|
|
}
|
|
this.mTimeoutMilli = j;
|
|
this.mDisconnectedCallback = runnable;
|
|
}
|
|
|
|
@Override // com.afunx.ble.blelitelib.proxy.scheme.BleGattReconnectScheme
|
|
public boolean tryAgain() {
|
|
return this.mTryAgain;
|
|
}
|
|
}
|