- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
104 lines
4.0 KiB
Java
104 lines
4.0 KiB
Java
package androidx.work.impl.utils;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.work.Logger;
|
|
import androidx.work.RunnableScheduler;
|
|
import androidx.work.impl.model.WorkGenerationalId;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
|
|
/* loaded from: classes.dex */
|
|
public class WorkTimer {
|
|
private static final String TAG = Logger.tagWithPrefix("WorkTimer");
|
|
final RunnableScheduler mRunnableScheduler;
|
|
final Map<WorkGenerationalId, WorkTimerRunnable> mTimerMap = new HashMap();
|
|
final Map<WorkGenerationalId, TimeLimitExceededListener> mListeners = new HashMap();
|
|
final Object mLock = new Object();
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
|
|
public interface TimeLimitExceededListener {
|
|
void onTimeLimitExceeded(@NonNull WorkGenerationalId workGenerationalId);
|
|
}
|
|
|
|
public WorkTimer(@NonNull RunnableScheduler runnableScheduler) {
|
|
this.mRunnableScheduler = runnableScheduler;
|
|
}
|
|
|
|
public void startTimer(@NonNull WorkGenerationalId workGenerationalId, long j, @NonNull TimeLimitExceededListener timeLimitExceededListener) {
|
|
synchronized (this.mLock) {
|
|
Logger.get().debug(TAG, "Starting timer for " + workGenerationalId);
|
|
stopTimer(workGenerationalId);
|
|
WorkTimerRunnable workTimerRunnable = new WorkTimerRunnable(this, workGenerationalId);
|
|
this.mTimerMap.put(workGenerationalId, workTimerRunnable);
|
|
this.mListeners.put(workGenerationalId, timeLimitExceededListener);
|
|
this.mRunnableScheduler.scheduleWithDelay(j, workTimerRunnable);
|
|
}
|
|
}
|
|
|
|
public void stopTimer(@NonNull WorkGenerationalId workGenerationalId) {
|
|
synchronized (this.mLock) {
|
|
try {
|
|
if (this.mTimerMap.remove(workGenerationalId) != null) {
|
|
Logger.get().debug(TAG, "Stopping timer for " + workGenerationalId);
|
|
this.mListeners.remove(workGenerationalId);
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
@VisibleForTesting
|
|
public Map<WorkGenerationalId, WorkTimerRunnable> getTimerMap() {
|
|
Map<WorkGenerationalId, WorkTimerRunnable> map;
|
|
synchronized (this.mLock) {
|
|
map = this.mTimerMap;
|
|
}
|
|
return map;
|
|
}
|
|
|
|
@NonNull
|
|
@VisibleForTesting
|
|
public Map<WorkGenerationalId, TimeLimitExceededListener> getListeners() {
|
|
Map<WorkGenerationalId, TimeLimitExceededListener> map;
|
|
synchronized (this.mLock) {
|
|
map = this.mListeners;
|
|
}
|
|
return map;
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
|
|
public static class WorkTimerRunnable implements Runnable {
|
|
static final String TAG = "WrkTimerRunnable";
|
|
private final WorkGenerationalId mWorkGenerationalId;
|
|
private final WorkTimer mWorkTimer;
|
|
|
|
public WorkTimerRunnable(@NonNull WorkTimer workTimer, @NonNull WorkGenerationalId workGenerationalId) {
|
|
this.mWorkTimer = workTimer;
|
|
this.mWorkGenerationalId = workGenerationalId;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
synchronized (this.mWorkTimer.mLock) {
|
|
try {
|
|
if (this.mWorkTimer.mTimerMap.remove(this.mWorkGenerationalId) != null) {
|
|
TimeLimitExceededListener remove = this.mWorkTimer.mListeners.remove(this.mWorkGenerationalId);
|
|
if (remove != null) {
|
|
remove.onTimeLimitExceeded(this.mWorkGenerationalId);
|
|
}
|
|
} else {
|
|
Logger.get().debug(TAG, String.format("Timer with %s is already marked as complete.", this.mWorkGenerationalId));
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|