Module Detail Overview Implementation #1

This commit is contained in:
Caesar2011
2018-05-16 23:43:47 +02:00
parent 9673973f97
commit 857027c789
25 changed files with 758 additions and 402 deletions

View File

@@ -2,6 +2,7 @@ package de.sebse.fuplanner.tools;
import android.support.annotation.NonNull;
import java.util.HashMap;
import java.util.LinkedList;
import de.sebse.fuplanner.tools.network.NetworkCallback;
@@ -9,22 +10,22 @@ import de.sebse.fuplanner.tools.network.NetworkError;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
public class AsyncQueue {
private LinkedList<AsyncQueueCallback> mQueue = new LinkedList<>();
private boolean mRunning = false;
private HashMap<String, LinkedList<AsyncQueueCallback>> mQueues = new HashMap<>();
private HashMap<String, Boolean> mRunnings = new HashMap<>();
public void add(AsyncQueueCallback callback) {
if (mRunning)
mQueue.addLast(callback);
public void add(String hash, AsyncQueueCallback callback) {
if (isRunning(hash))
getQueue(hash).addLast(callback);
else {
mRunning = true;
setRunning(hash, true);
callback.run();
}
}
public void next() {
AsyncQueueCallback callback = mQueue.pollFirst();
public void next(String hash) {
AsyncQueueCallback callback = getQueue(hash).pollFirst();
if (callback == null)
mRunning = false;
setRunning(hash, false);
else
callback.run();
}
@@ -33,25 +34,33 @@ public class AsyncQueue {
void run();
}
public NetworkErrorCallback check(final NetworkErrorCallback value) {
return new NetworkErrorCallback() {
@Override
public void onError(NetworkError error) {
value.onError(error);
next();
}
public NetworkErrorCallback check(String hash, NetworkErrorCallback value) {
return error -> {
value.onError(error);
next(hash);
};
}
public <T> NetworkCallback<T> check(final NetworkCallback<T> value) {
return new NetworkCallback<T>() {
@Override
public void onResponse(@NonNull T success) {
value.onResponse(success);
next();
}
public <T> NetworkCallback<T> check(String hash, NetworkCallback<T> value) {
return success -> {
value.onResponse(success);
next(hash);
};
}
private boolean isRunning(String hash) {
return mRunnings.containsKey(hash) && mRunnings.get(hash);
}
private void setRunning(String hash, boolean value) {
mRunnings.put(hash, value);
}
private LinkedList<AsyncQueueCallback> getQueue(String hash) {
if (mQueues.get(hash) == null)
mQueues.put(hash, new LinkedList<>());
return mQueues.get(hash);
}
}
/*public class AsyncQueue<T, U> {