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