Implemented Network Callback
This commit is contained in:
@@ -8,6 +8,7 @@ import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.volley.NetworkResponse;
|
||||
import com.google.android.material.navigation.NavigationView;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -547,4 +548,14 @@ public class MainActivity extends AppCompatActivity
|
||||
public void onModuleListChange() {
|
||||
updateNavigation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNetworkError(NetworkResponse networkResponse) {
|
||||
setRefreshFailedBanner(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNetworkSuccess() {
|
||||
setRefreshFailedBanner(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package de.sebse.fuplanner.services.KVV;
|
||||
|
||||
import com.android.volley.NetworkResponse;
|
||||
|
||||
import de.sebse.fuplanner.services.GoogleAuth.Credentials;
|
||||
import de.sebse.fuplanner.services.KVV.types.LoginToken;
|
||||
import de.sebse.fuplanner.tools.network.NetworkCallback;
|
||||
@@ -13,4 +15,8 @@ public interface KVVListener {
|
||||
void handleLogout();
|
||||
|
||||
void onModuleListChange();
|
||||
|
||||
void onNetworkError(NetworkResponse networkResponse);
|
||||
|
||||
void onNetworkSuccess();
|
||||
}
|
||||
|
||||
@@ -56,6 +56,8 @@ public class KVVModules {
|
||||
public KVVModulesList list() {
|
||||
if (mList == null) {
|
||||
mList = new KVVModulesList(mLogin, mListener, context);
|
||||
mList.addErrorListener("KVVModules", error -> mListener.onNetworkError(error.networkResponse));
|
||||
mList.addSuccessListener("KVVModules", success -> mListener.onNetworkSuccess());
|
||||
}
|
||||
return mList;
|
||||
}
|
||||
@@ -66,6 +68,8 @@ public class KVVModules {
|
||||
Part o = mAddons.get(addon);
|
||||
if (o == null) {
|
||||
o = creatorInterface.create();
|
||||
o.addErrorListener("KVVModules", error -> mListener.onNetworkError(error.networkResponse));
|
||||
o.addSuccessListener("KVVModules", success -> mListener.onNetworkSuccess());
|
||||
mAddons.put(addon, o);
|
||||
}
|
||||
return o;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package de.sebse.fuplanner.tools;
|
||||
|
||||
import com.google.android.gms.common.util.Function;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class EventListener<T> {
|
||||
private HashMap<String, EventFunction<T>> list = new HashMap<>();
|
||||
|
||||
public void add(String id,EventFunction<T> listener) {
|
||||
list.put(id, listener);
|
||||
}
|
||||
|
||||
public void remove(String id) {
|
||||
list.remove(id);
|
||||
}
|
||||
|
||||
public void emit(T value) {
|
||||
for (EventFunction<T> listener : list.values()) {
|
||||
listener.apply(value);
|
||||
}
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface EventFunction<T> {
|
||||
void apply(T value);
|
||||
}
|
||||
}
|
||||
@@ -19,10 +19,10 @@ public interface MainActivityListener {
|
||||
|
||||
GoogleAuth getGoogleAuth();
|
||||
|
||||
void onRefreshCompleted(boolean isFailed);
|
||||
|
||||
CanteenBrowser getCanteenBrowser();
|
||||
|
||||
void onRefreshCompleted(boolean isFailed);
|
||||
|
||||
void addRequestPermissionsResultListener(RequestPermissionsResultListener listener, String id);
|
||||
|
||||
void removeRequestPermissionsResultListener(String id);
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.android.volley.Response;
|
||||
import com.android.volley.TimeoutError;
|
||||
import com.android.volley.VolleyError;
|
||||
import com.android.volley.toolbox.Volley;
|
||||
import com.google.android.gms.common.util.Function;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
@@ -17,6 +18,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import de.sebse.fuplanner.tools.EventListener;
|
||||
import de.sebse.fuplanner.tools.logging.Logger;
|
||||
|
||||
/**
|
||||
@@ -27,35 +29,64 @@ public class HTTPService {
|
||||
private final RequestQueue requestQueue;
|
||||
private final Context mContext;
|
||||
protected Logger log = new Logger(this);
|
||||
private EventListener<VolleyError> errorResponseListener = new EventListener<>();
|
||||
private EventListener<Result> successResponseListener = new EventListener<>();
|
||||
|
||||
protected HTTPService(Context context) {
|
||||
this.mContext = context;
|
||||
requestQueue = Volley.newRequestQueue(context, new BetterHurlStack(false));
|
||||
}
|
||||
|
||||
public void addErrorListener(String id, EventListener.EventFunction<VolleyError> listener) {
|
||||
errorResponseListener.add(id, listener);
|
||||
}
|
||||
|
||||
public void removeErrorListener(String id) {
|
||||
errorResponseListener.remove(id);
|
||||
}
|
||||
|
||||
public void addSuccessListener(String id, EventListener.EventFunction<Result> listener) {
|
||||
successResponseListener.add(id, listener);
|
||||
}
|
||||
|
||||
public void removeSuccessListener(String id) {
|
||||
successResponseListener.remove(id);
|
||||
}
|
||||
|
||||
protected void get(String url, @Nullable final HashMap<String, String> cookies, Response.Listener<Result> response, Response.ErrorListener error) {
|
||||
HttpRequest request = new HttpRequest(Request.Method.GET, url, response, error) {
|
||||
@Override
|
||||
public void deliverError(VolleyError error) {
|
||||
if (error == null) {
|
||||
super.deliverError(new VolleyError(new NetworkResponse(500, null, true, 0, null)));
|
||||
deliver(new VolleyError(new NetworkResponse(500, null, true, 0, null)));
|
||||
} else if (error.networkResponse == null) {
|
||||
int statusCode;
|
||||
if (error instanceof TimeoutError)
|
||||
statusCode = 408;
|
||||
else
|
||||
statusCode = 500;
|
||||
super.deliverError(new VolleyError(new NetworkResponse(statusCode, null, true, error.getNetworkTimeMs(), null)));
|
||||
deliver(new VolleyError(new NetworkResponse(statusCode, null, true, error.getNetworkTimeMs(), null)));
|
||||
} else {
|
||||
final int status = error.networkResponse.statusCode;
|
||||
if (status == 302) {
|
||||
super.deliverResponse(new Result(null, error.networkResponse.headers));
|
||||
deliverResponse(new Result(null, error.networkResponse.headers));
|
||||
} else {
|
||||
super.deliverError(error);
|
||||
deliver(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void deliverResponse(Result response) {
|
||||
successResponseListener.emit(response);
|
||||
super.deliverResponse(response);
|
||||
}
|
||||
|
||||
private void deliver(VolleyError error) {
|
||||
errorResponseListener.emit(error);
|
||||
super.deliverError(error);
|
||||
}
|
||||
|
||||
public Map<String, String> getHeaders() throws AuthFailureError {
|
||||
Map<String, String> params = super.getHeaders();
|
||||
if (cookies != null) {
|
||||
@@ -109,24 +140,35 @@ public class HTTPService {
|
||||
@Override
|
||||
public void deliverError(VolleyError error) {
|
||||
if (error == null) {
|
||||
super.deliverError(new VolleyError(new NetworkResponse(500, null, true, 0, null)));
|
||||
deliver(new VolleyError(new NetworkResponse(500, null, true, 0, null)));
|
||||
} else if (error.networkResponse == null) {
|
||||
int statusCode;
|
||||
if (error instanceof TimeoutError)
|
||||
statusCode = 408;
|
||||
else
|
||||
statusCode = 500;
|
||||
super.deliverError(new VolleyError(new NetworkResponse(statusCode, null, true, error.getNetworkTimeMs(), null)));
|
||||
deliver(new VolleyError(new NetworkResponse(statusCode, null, true, error.getNetworkTimeMs(), null)));
|
||||
} else {
|
||||
final int status = error.networkResponse.statusCode;
|
||||
if (status == 302) {
|
||||
super.deliverResponse(new Result(null, error.networkResponse.headers));
|
||||
deliverResponse(new Result(null, error.networkResponse.headers));
|
||||
} else {
|
||||
super.deliverError(error);
|
||||
deliver(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deliver(VolleyError error) {
|
||||
errorResponseListener.emit(error);
|
||||
super.deliverError(error);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void deliverResponse(Result response) {
|
||||
successResponseListener.emit(response);
|
||||
super.deliverResponse(response);
|
||||
}
|
||||
|
||||
public Map<String, String> getHeaders() throws AuthFailureError {
|
||||
Map<String, String> params = super.getHeaders();
|
||||
if (cookies != null) {
|
||||
|
||||
Reference in New Issue
Block a user