From d911d89e342c6a86fdff11594055c62775222e15 Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Wed, 2 Feb 2022 22:17:43 +0000 Subject: [PATCH] Added error checking for network connection issues - MainActivity logic needs correcting though - Airoplane mode shows as ok --- .../org/openseizuredetector/MainActivity.java | 38 +++++++++---- .../uk/org/openseizuredetector/OsdUtil.java | 7 ++- .../openseizuredetector/WebApiConnection.java | 55 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 + 4 files changed, 88 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java index 9ed902d..61b6435 100644 --- a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java @@ -577,20 +577,38 @@ public class MainActivity extends AppCompatActivity { if (!mConnection.mSdServer.mLogDataRemoteMobile) { Log.v(TAG,"mLogDataRemoteMobile="+mConnection.mSdServer.mLogDataRemoteMobile); Log.v(TAG,"mUtil.isMobileDataActive="+mUtil.isMobileDataActive()); - if (mUtil.isMobileDataActive()) { - tv = (TextView) findViewById(R.id.remoteDbTv); - tv.setText(getString(R.string.data_sharing_status) - + ": " - + getString(R.string.not_updating_mobile)); - tv.setBackgroundColor(warnColour); - tv.setTextColor(warnTextColour); + if (mUtil.isNetworkConnected()) { + if (mUtil.isMobileDataActive()) { + tv = (TextView) findViewById(R.id.remoteDbTv); + tv.setText(getString(R.string.data_sharing_status) + + ": " + + getString(R.string.not_updating_mobile)); + tv.setBackgroundColor(warnColour); + tv.setTextColor(warnTextColour); + } else { + if (mConnection.mSdServer.mLm.mWac.mServerConnectionOk) { + tv = (TextView) findViewById(R.id.remoteDbTv); + tv.setText(getString(R.string.data_sharing_status) + + ": " + + getString(R.string.data_sharing_setup_ok)); + tv.setBackgroundColor(okColour); + tv.setTextColor(okTextColour); + } else { + tv = (TextView) findViewById(R.id.remoteDbTv); + tv.setText(getString(R.string.data_sharing_status) + + ": " + + getString(R.string.error_connecting_to_server)); + tv.setBackgroundColor(warnColour); + tv.setTextColor(warnTextColour); + } + } } else { tv = (TextView) findViewById(R.id.remoteDbTv); tv.setText(getString(R.string.data_sharing_status) + ": " - + getString(R.string.data_sharing_setup_ok)); - tv.setBackgroundColor(okColour); - tv.setTextColor(okTextColour); + + getString(R.string.not_updating_no_network)); + tv.setBackgroundColor(warnColour); + tv.setTextColor(warnTextColour); } } else { tv = (TextView) findViewById(R.id.remoteDbTv); diff --git a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java index 35e3804..f3ad789 100644 --- a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java +++ b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java @@ -302,6 +302,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac // return true if we are using mobile data, otherwise return false ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + if (activeNetwork == null) return false; if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { return true; } else { @@ -313,7 +314,11 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac // return true if we have a network connection, otherwise false. ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); - return (activeNetwork.isConnected()); + if (activeNetwork != null) { + return (activeNetwork.isConnected()); + } else { + return (false); + } } /** diff --git a/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java b/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java index 7910bf9..de35333 100644 --- a/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java +++ b/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java @@ -36,6 +36,7 @@ import java.util.function.Consumer; public class WebApiConnection { public String retVal; public int retCode; + public boolean mServerConnectionOk = false; private String mUrlBase = "https://osdApi.ddns.net"; private String TAG = "WebApiConnection"; private String mAuthToken; @@ -76,6 +77,7 @@ public class WebApiConnection { try { JSONObject jo = new JSONObject(response); tokenStr = jo.getString("token"); + mServerConnectionOk = true; } catch (JSONException e) { tokenStr = "Error Parsing Rsponse"; } @@ -92,6 +94,7 @@ public class WebApiConnection { } else { Log.e(TAG, "Login Error: Returned null response"); } + mServerConnectionOk = false; setStoredToken(null); callback.accept(null); } @@ -167,12 +170,14 @@ public class WebApiConnection { @Override public void onResponse(String response) { Log.v(TAG, "Response is: " + response); + mServerConnectionOk = true; callback.accept(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + mServerConnectionOk = false; if (error != null) { String responseBody = new String(error.networkResponse.data); Log.e(TAG, "Create Event Error: " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); @@ -242,6 +247,7 @@ public class WebApiConnection { Log.e(TAG, "getEventTypes.onRespons(): Error: " + e.getMessage() + "," + e.toString()); callback.accept(null); } + mServerConnectionOk = true; } }, new Response.ErrorListener() { @@ -253,6 +259,7 @@ public class WebApiConnection { } else { Log.e(TAG, "Create Event Error: returned null response"); } + mServerConnectionOk = false; callback.accept(null); } }) { @@ -292,6 +299,7 @@ public class WebApiConnection { @Override public void onResponse(String response) { Log.v(TAG, "Response is: " + response); + mServerConnectionOk = true; try { JSONObject retObj = new JSONObject(); JSONArray eventArray = new JSONArray(response); @@ -306,10 +314,15 @@ public class WebApiConnection { new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - //if ((error != null) && (error.networkResponse != null) && (error.networkResponse.data != null)) { + //if ((error != null) && (error.networkResponse != null) && (error.networkResponse.data != null)) {# + mServerConnectionOk = false; if (error != null) { - String responseBody = new String(error.networkResponse.data); - Log.e(TAG, "getEvents(): Error: " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); + if (error.networkResponse != null) { + String responseBody = new String(error.networkResponse.data); + Log.e(TAG, "getEvents(): Error: " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); + } else { + Log.e(TAG, "getEvents(): Error: - request returned null networkResponse"); + } } else{ Log.e(TAG, "getEvents(): Error: - request returned null response"); } @@ -368,6 +381,7 @@ public class WebApiConnection { @Override public void onResponse(String response) { Log.v(TAG, "Response is: " + response); + mServerConnectionOk = true; try { JSONObject retObj = new JSONObject(response); callback.accept(retObj); @@ -380,6 +394,7 @@ public class WebApiConnection { new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + mServerConnectionOk = false; if (error != null) { String responseBody = new String(error.networkResponse.data); Log.e(TAG, "Create Event Error: " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); @@ -458,12 +473,14 @@ public class WebApiConnection { @Override public void onResponse(String response) { Log.v(TAG, "Response is: " + response); + mServerConnectionOk = true; callback.accept(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + mServerConnectionOk = false; if (error != null) { // Fixme = are we sure that networResponse.data is not null??? String responseBody = new String(error.networkResponse.data); @@ -534,6 +551,7 @@ public class WebApiConnection { @Override public void onResponse(String response) { Log.v(TAG, "getEventTypes.onResponse(): Response is: " + response); + mServerConnectionOk = true; try { JSONObject retObj = new JSONObject(response); callback.accept(retObj); @@ -546,6 +564,7 @@ public class WebApiConnection { new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + mServerConnectionOk = false; if (error != null) { String responseBody = new String(error.networkResponse.data); Log.e(TAG, "getEventTypes.onErrorResponse(): " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); @@ -570,5 +589,35 @@ public class WebApiConnection { } + /** + * Retrieve a trivial file from the server to check we have a good server connection. + * sets mServerConnectionOk. + * @return true if request sent successfully or else false. + */ + public boolean checkServerConnection() { + Log.v(TAG, "checkServerConnection()"); + String urlStr = mUrlBase + "/static/test.txt"; + Log.v(TAG, "urlStr=" + urlStr); + + StringRequest req = new StringRequest(Request.Method.GET, urlStr, + new Response.Listener() { + @Override + public void onResponse(String response) { + Log.v(TAG, "checkServerConnection.onResponse(): Response is: " + response); + mServerConnectionOk = true; + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.v(TAG, "checkServerConnection.onErrorResponse"); + mServerConnectionOk = false; + } + }); + + mQueue.add(req); + return (true); + + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aaa1552..e500dbc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -339,4 +339,6 @@ Please Check your Shared Seizure Events Data Sharing Log-In Not Updating using Mobile Internet + Not Updating - No Network Connection + Error Connecting to Server