diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fcd349..e1eec5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ OpenSeizureDetector Android App - Change Log ============================================ + V3.6.2 - Nov 2020 + - Extended Polish translation further + - Improved system log output to help with answering queries from users. V3.6.1 - Nov 2020 - Extended polish translation to all settings screens. - Possible fix for issue with failing to shutdown system sometimes. diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 0004c6e..45a2230 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c63a94d..c0ca217 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="uk.org.openseizuredetector" android:versionCode="83" - android:versionName="3.6.1"> + android:versionName="3.6.2"> diff --git a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java index 2e42e8d..b1eae7a 100644 --- a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java +++ b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java @@ -71,6 +71,7 @@ import org.apache.http.conn.util.InetAddressUtils; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.AbstractList; @@ -171,8 +172,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac if (nServers != 0) { Log.v(TAG, "isServerRunning() - " + nServers + " instances are running"); return true; - } - else + } else return false; } @@ -181,16 +181,16 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac */ public void startServer() { // Start the server - Log.d(TAG,"OsdUtil.startServer()"); + Log.d(TAG, "OsdUtil.startServer()"); writeToSysLogFile("startServer() - starting server"); Intent sdServerIntent; sdServerIntent = new Intent(mContext, SdServer.class); sdServerIntent.setData(Uri.parse("Start")); if (Build.VERSION.SDK_INT >= 26) { - Log.i(TAG,"Starting Foreground Service (Android 8 and above)"); + Log.i(TAG, "Starting Foreground Service (Android 8 and above)"); mContext.startForegroundService(sdServerIntent); } else { - Log.i(TAG,"Starting Normal Service (Pre-Android 8)"); + Log.i(TAG, "Starting Normal Service (Pre-Android 8)"); mContext.startService(sdServerIntent); } } @@ -219,7 +219,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac Intent intent = new Intent(sdServiceConnection.mContext, SdServer.class); activity.bindService(intent, sdServiceConnection, Context.BIND_AUTO_CREATE); mNbound = mNbound + 1; - Log.i(TAG,"OsdUtil.bindToServer() - mNbound = "+mNbound); + Log.i(TAG, "OsdUtil.bindToServer() - mNbound = " + mNbound); } /** @@ -234,16 +234,16 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac activity.unbindService(sdServiceConnection); sdServiceConnection.mBound = false; mNbound = mNbound - 1; - Log.i(TAG,"OsdUtil.unBindFromServer() - mNbound = "+mNbound); + Log.i(TAG, "OsdUtil.unBindFromServer() - mNbound = " + mNbound); } catch (Exception ex) { Log.e(TAG, "unbindFromServer() - error unbinding service - " + ex.toString()); - writeToSysLogFile("unbindFromServer() - error unbinding service - " +ex.toString()); - Log.i(TAG,"OsdUtil.unBindFromServer() - mNbound = "+mNbound); + writeToSysLogFile("unbindFromServer() - error unbinding service - " + ex.toString()); + Log.i(TAG, "OsdUtil.unBindFromServer() - mNbound = " + mNbound); } } else { Log.i(TAG, "unbindFromServer() - not bound to server - ignoring"); writeToSysLogFile("unbindFromServer() - not bound to server - ignoring"); - Log.i(TAG,"OsdUtil.unBindFromServer() - mNbound = "+mNbound); + Log.i(TAG, "OsdUtil.unBindFromServer() - mNbound = " + mNbound); } } @@ -299,7 +299,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac public boolean isMobileDataActive() { // return true if we are using mobile data, otherwise return false - ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { return true; @@ -310,7 +310,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac public boolean isNetworkConnected() { // return true if we have a network connection, otherwise false. - ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return (activeNetwork.isConnected()); } @@ -332,35 +332,38 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac /** * Write a message to the system log file, provided mLogSystem is true. + * * @param msgStr */ public void writeToSysLogFile(String msgStr) { if (mLogSystem) - writeToLogFile(SYSLOG,msgStr); + writeToLogFile(SYSLOG, msgStr); else - Log.v(TAG,"writeToSysLogFile - mLogSystem False so not writing"); + Log.v(TAG, "writeToSysLogFile - mLogSystem False so not writing"); } /** * Write a message to the alarm log file, provided mLogAlarms is true. + * * @param msgStr */ public void writeToAlarmLogFile(String msgStr) { if (mLogAlarms) - writeToLogFile(ALARMLOG,msgStr); + writeToLogFile(ALARMLOG, msgStr); else - Log.v(TAG,"writeToAlarmLogFile - mLogAlarms False so not writing"); + Log.v(TAG, "writeToAlarmLogFile - mLogAlarms False so not writing"); } /** * Write a message to the data log file, provided mLogData is true. + * * @param msgStr */ public void writeToDataLogFile(String msgStr) { if (mLogData) - writeToLogFile(DATALOG,msgStr); + writeToLogFile(DATALOG, msgStr); else - Log.v(TAG,"writeToDataLogFile - mLogData False so not writing"); + Log.v(TAG, "writeToDataLogFile - mLogData False so not writing"); } @@ -380,12 +383,11 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - Log.e(TAG,"ERROR: We do not have permission to write to external storage"); + Log.e(TAG, "ERROR: We do not have permission to write to external storage"); } else { if (isExternalStorageWritable()) { try { - FileWriter of = new FileWriter(getDataStorageDir().toString() - + "/" + fname, true); + FileWriter of = new FileWriter(getDataStorageDir() + "/" + fname, true); if (msgStr != null) { String dateTimeStr = tnow.format("%Y-%m-%d %H:%M:%S"); //Log.v(TAG, "writing msgStr"); @@ -396,7 +398,10 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac of.close(); } catch (Exception ex) { Log.e(TAG, "writeToLogFile - error " + ex.toString()); - showToast("ERROR Writing to Log File"); + for (int i = 0; i < (ex.getStackTrace().length); i++) { + Log.e(TAG, "writeToLogFile - error " + ex.getStackTrace()[i]); + } + showToast("ERROR Writing to Log File" + ex.toString()); } } else { Log.e(TAG, "ERROR - Can not Write to External Folder"); @@ -404,6 +409,16 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac } } + public File[] getDataFilesList() { + File[] files = getDataStorageDir().listFiles(); + Log.d("Files", "Size: "+ files.length); + for (int i = 0; i < files.length; i++) + { + Log.d("Files", "FileName:" + files[i].getName()); + } + return(files); + } + /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); @@ -419,14 +434,15 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac new File(Environment.getExternalStorageDirectory() , "OpenSeizureDetector"); if (!file.isDirectory()) { - Log.i(TAG,"getDataStorageDir() - creating directory"); - if (!file.mkdirs()) { + Log.i(TAG, "getDataStorageDir() - creating directory"); + if(!file.mkdirs()) { Log.e(TAG, "Failed to create directory"); } } return file; } + public String getPreferredPebbleAppPackageName() { // returns the package name of the preferred Android Pebble App. return "com.getpebble.android.basalt"; @@ -456,8 +472,8 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac public boolean arePermissionsOK() { boolean allOk = true; - Log.v(TAG,"arePermissionsOK"); - for (int i = 0; i< REQUIRED_PERMISSIONS.length; i++) { + Log.v(TAG, "arePermissionsOK"); + for (int i = 0; i < REQUIRED_PERMISSIONS.length; i++) { if (ContextCompat.checkSelfPermission(mContext, REQUIRED_PERMISSIONS[i]) != PackageManager.PERMISSION_GRANTED) { Log.i(TAG, REQUIRED_PERMISSIONS[i] + " Permission Not Granted"); @@ -469,8 +485,8 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac public boolean areSMSPermissionsOK() { boolean allOk = true; - Log.v(TAG,"areSMSPermissionsOK()"); - for (int i = 0; i< SMS_PERMISSIONS.length; i++) { + Log.v(TAG, "areSMSPermissionsOK()"); + for (int i = 0; i < SMS_PERMISSIONS.length; i++) { if (ContextCompat.checkSelfPermission(mContext, SMS_PERMISSIONS[i]) != PackageManager.PERMISSION_GRANTED) { Log.i(TAG, SMS_PERMISSIONS[i] + " Permission Not Granted"); @@ -481,10 +497,9 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac } - public void requestPermissions(Activity activity) { if (mPermissionsRequested) { - Log.i(TAG,"requestPermissions() - request already sent - not doing anything"); + Log.i(TAG, "requestPermissions() - request already sent - not doing anything"); } else { Log.i(TAG, "requestPermissions() - requesting permissions"); for (int i = 0; i < REQUIRED_PERMISSIONS.length; i++) { @@ -502,7 +517,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac public void requestSMSPermissions(Activity activity) { if (mSMSPermissionsRequested) { - Log.i(TAG,"requestSMSPermissions() - request already sent - not doing anything"); + Log.i(TAG, "requestSMSPermissions() - request already sent - not doing anything"); } else { Log.i(TAG, "requestSMSPermissions() - requesting permissions"); for (int i = 0; i < SMS_PERMISSIONS.length; i++) { @@ -522,7 +537,7 @@ public class OsdUtil implements ActivityCompat.OnRequestPermissionsResultCallbac @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { - Log.i(TAG,"onRequestPermissionsResult - Permission" + permissions + " = " + grantResults); + Log.i(TAG, "onRequestPermissionsResult - Permission" + permissions + " = " + grantResults); showToast("Permissions Changed - restarting server"); stopServer(); // Wait 0.1 second to give the server chance to shutdown, then re-start it diff --git a/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java b/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java index 3f23fe6..1218ee8 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java @@ -128,6 +128,7 @@ public abstract class SdDataSource { public void start() { Log.v(TAG, "start()"); + mUtil.writeToSysLogFile("SdDataSource.start()"); updatePrefs(); // Start timer to check status of watch regularly. mDataStatusTime = new Time(Time.getCurrentTimezone()); @@ -184,6 +185,7 @@ public abstract class SdDataSource { */ public void stop() { Log.v(TAG, "stop()"); + mUtil.writeToSysLogFile("SDDataSource.stop()"); try { // Stop the status timer if (mStatusTimer != null) { @@ -613,7 +615,7 @@ public abstract class SdDataSource { // Only make audible warning beep if we have not received data for more than mFaultTimerPeriod seconds. if (tdiff > (mDataUpdatePeriod + mFaultTimerPeriod) * 1000) { Log.v(TAG, "getStatus() - Watch App Not Running"); - mUtil.writeToSysLogFile("SDDataSourceBLE.getStatus() - Watch App not Running"); + mUtil.writeToSysLogFile("SDDataSource.getStatus() - Watch App not Running"); //mDataStatusTime.setToNow(); mSdData.roiPower = -1; mSdData.specPower = -1; @@ -662,7 +664,7 @@ public abstract class SdDataSource { */ public void updatePrefs() { Log.v(TAG, "updatePrefs()"); - mUtil.writeToSysLogFile("SDDataSourceBLE.updatePrefs()"); + mUtil.writeToSysLogFile("SDDataSource.updatePrefs()"); SharedPreferences SP = PreferenceManager .getDefaultSharedPreferences(mContext); try { @@ -671,8 +673,10 @@ public abstract class SdDataSource { String appRestartTimeoutStr = SP.getString("AppRestartTimeout", "10"); mAppRestartTimeout = Integer.parseInt(appRestartTimeoutStr); Log.v(TAG, "updatePrefs() - mAppRestartTimeout = " + mAppRestartTimeout); + mUtil.writeToSysLogFile( "updatePrefs() - mAppRestartTimeout = " + mAppRestartTimeout); } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem with AppRestartTimeout preference!"); + mUtil.writeToSysLogFile( "updatePrefs() - Problem with AppRestartTimeout preference!"); Toast toast = Toast.makeText(mContext, "Problem Parsing AppRestartTimeout Preference", Toast.LENGTH_SHORT); toast.show(); } @@ -682,8 +686,10 @@ public abstract class SdDataSource { String faultTimerPeriodStr = SP.getString("FaultTimerPeriod", "30"); mFaultTimerPeriod = Integer.parseInt(faultTimerPeriodStr); Log.v(TAG, "updatePrefs() - mFaultTimerPeriod = " + mFaultTimerPeriod); + mUtil.writeToSysLogFile( "updatePrefs() - mFaultTimerPeriod = " + mFaultTimerPeriod); } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem with FaultTimerPeriod preference!"); + mUtil.writeToSysLogFile( "updatePrefs() - Problem with FaultTimerPeriod preference!"); Toast toast = Toast.makeText(mContext, "Problem Parsing FaultTimerPeriod Preference", Toast.LENGTH_SHORT); toast.show(); } @@ -694,106 +700,130 @@ public abstract class SdDataSource { prefStr = SP.getString("BLE_Device_Addr", "SET_FROM_XML"); mBleDeviceAddr = prefStr; Log.v(TAG, "mBLEDeviceAddr=" + mBleDeviceAddr); + mUtil.writeToSysLogFile( "mBLEDeviceAddr=" + mBleDeviceAddr); prefStr = SP.getString("BLE_Device_Name", "SET_FROM_XML"); mBleDeviceName = prefStr; Log.v(TAG, "mBLEDeviceName=" + mBleDeviceName); + mUtil.writeToSysLogFile( "mBLEDeviceName=" + mBleDeviceName); prefStr = SP.getString("PebbleDebug", "SET_FROM_XML"); if (prefStr != null) { mDebug = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() Debug = " + mDebug); + mUtil.writeToSysLogFile( "updatePrefs() Debug = " + mDebug); prefStr = SP.getString("PebbleDisplaySpectrum", "SET_FROM_XML"); mDisplaySpectrum = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() DisplaySpectrum = " + mDisplaySpectrum); + mUtil.writeToSysLogFile( "updatePrefs() DisplaySpectrum = " + mDisplaySpectrum); prefStr = SP.getString("PebbleUpdatePeriod", "SET_FROM_XML"); mDataUpdatePeriod = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() DataUpdatePeriod = " + mDataUpdatePeriod); + mUtil.writeToSysLogFile( "updatePrefs() DataUpdatePeriod = " + mDataUpdatePeriod); prefStr = SP.getString("MutePeriod", "SET_FROM_XML"); mMutePeriod = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() MutePeriod = " + mMutePeriod); + mUtil.writeToSysLogFile( "updatePrefs() MutePeriod = " + mMutePeriod); prefStr = SP.getString("ManAlarmPeriod", "SET_FROM_XML"); mManAlarmPeriod = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() ManAlarmPeriod = " + mManAlarmPeriod); + mUtil.writeToSysLogFile( "updatePrefs() ManAlarmPeriod = " + mManAlarmPeriod); prefStr = SP.getString("PebbleSdMode", "SET_FROM_XML"); mPebbleSdMode = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() PebbleSdMode = " + mPebbleSdMode); + mUtil.writeToSysLogFile( "updatePrefs() PebbleSdMode = " + mPebbleSdMode); prefStr = SP.getString("SampleFreq", "SET_FROM_XML"); mSampleFreq = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() SampleFreq = " + mSampleFreq); + mUtil.writeToSysLogFile( "updatePrefs() SampleFreq = " + mSampleFreq); prefStr = SP.getString("SamplePeriod", "SET_FROM_XML"); mSamplePeriod = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AnalysisPeriod = " + mSamplePeriod); + mUtil.writeToSysLogFile( "updatePrefs() AnalysisPeriod = " + mSamplePeriod); prefStr = SP.getString("AlarmFreqMin", "SET_FROM_XML"); mAlarmFreqMin = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmFreqMin = " + mAlarmFreqMin); + mUtil.writeToSysLogFile( "updatePrefs() AlarmFreqMin = " + mAlarmFreqMin); prefStr = SP.getString("AlarmFreqMax", "SET_FROM_XML"); mAlarmFreqMax = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmFreqMax = " + mAlarmFreqMax); + mUtil.writeToSysLogFile("updatePrefs() AlarmFreqMax = " + mAlarmFreqMax); prefStr = SP.getString("WarnTime", "SET_FROM_XML"); mWarnTime = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() WarnTime = " + mWarnTime); + mUtil.writeToSysLogFile( "updatePrefs() WarnTime = " + mWarnTime); prefStr = SP.getString("AlarmTime", "SET_FROM_XML"); mAlarmTime = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmTime = " + mAlarmTime); + mUtil.writeToSysLogFile( "updatePrefs() AlarmTime = " + mAlarmTime); prefStr = SP.getString("AlarmThresh", "SET_FROM_XML"); mAlarmThresh = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmThresh = " + mAlarmThresh); + mUtil.writeToSysLogFile( "updatePrefs() AlarmThresh = " + mAlarmThresh); prefStr = SP.getString("AlarmRatioThresh", "SET_FROM_XML"); mAlarmRatioThresh = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmRatioThresh = " + mAlarmRatioThresh); + mUtil.writeToSysLogFile( "updatePrefs() AlarmRatioThresh = " + mAlarmRatioThresh); mFallActive = SP.getBoolean("FallActive", false); Log.v(TAG, "updatePrefs() FallActive = " + mFallActive); + mUtil.writeToSysLogFile( "updatePrefs() FallActive = " + mFallActive); prefStr = SP.getString("FallThreshMin", "SET_FROM_XML"); mFallThreshMin = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() FallThreshMin = " + mFallThreshMin); + mUtil.writeToSysLogFile( "updatePrefs() FallThreshMin = " + mFallThreshMin); prefStr = SP.getString("FallThreshMax", "SET_FROM_XML"); mFallThreshMax = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() FallThreshMax = " + mFallThreshMax); + mUtil.writeToSysLogFile( "updatePrefs() FallThreshMax = " + mFallThreshMax); prefStr = SP.getString("FallWindow", "SET_FROM_XML"); mFallWindow = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() FallWindow = " + mFallWindow); + mUtil.writeToSysLogFile( "updatePrefs() FallWindow = " + mFallWindow); mSdData.mHRAlarmActive = SP.getBoolean("HRAlarmActive", false); Log.v(TAG, "updatePrefs() HRAlarmActive = " + mSdData.mHRAlarmActive); + mUtil.writeToSysLogFile( "updatePrefs() HRAlarmActive = " + mSdData.mHRAlarmActive); mSdData.mHRNullAsAlarm = SP.getBoolean("HRNullAsAlarm", false); Log.v(TAG, "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm); + mUtil.writeToSysLogFile( "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm); prefStr = SP.getString("HRThreshMin", "SET_FROM_XML"); mSdData.mHRThreshMin = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() HRThreshMin = " + mSdData.mHRThreshMin); + mUtil.writeToSysLogFile( "updatePrefs() HRThreshMin = " + mSdData.mHRThreshMin); prefStr = SP.getString("HRThreshMax", "SET_FROM_XML"); mSdData.mHRThreshMax = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() HRThreshMax = " + mSdData.mHRThreshMax); + mUtil.writeToSysLogFile( "updatePrefs() HRThreshMax = " + mSdData.mHRThreshMax); } else { Log.v(TAG, "updatePrefs() - prefStr is null - WHY????"); - mUtil.writeToSysLogFile("SDDataSourceBLE.updatePrefs() - prefStr is null - WHY??"); + mUtil.writeToSysLogFile("SDDataSource.updatePrefs() - prefStr is null - WHY??"); Toast toast = Toast.makeText(mContext, "Problem Parsing Preferences - Something won't work - Please go back to Settings and correct it!", Toast.LENGTH_SHORT); toast.show(); } } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem parsing preferences!"); - mUtil.writeToSysLogFile("SDDataSourceBLE.updatePrefs() - ERROR " + ex.toString()); + mUtil.writeToSysLogFile("SDDataSource.updatePrefs() - ERROR " + ex.toString()); Toast toast = Toast.makeText(mContext, "Problem Parsing Preferences - Something won't work - Please go back to Settings and correct it!", Toast.LENGTH_SHORT); toast.show(); } diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index 864c25a..e475d34 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -978,7 +978,7 @@ public class SdServer extends Service implements SdDataReceiver { Log.i(TAG, "startWebServer()"); mUtil.writeToSysLogFile("SdServer.Start Web Server."); if (webServer == null) { - webServer = new SdWebServer(getApplicationContext(), mUtil.getDataStorageDir(), mSdData, this); + webServer = new SdWebServer(getApplicationContext(), mSdData, this); try { webServer.start(); } catch (IOException ioe) { @@ -1009,6 +1009,7 @@ public class SdServer extends Service implements SdDataReceiver { } else { if (webServer.isAlive()) { Log.w(TAG, "stopWebServer() - server still alive???"); + mUtil.writeToSysLogFile( "stopWebServer() - server still alive???"); } else { mUtil.writeToSysLogFile("stopWebServer() - server died ok"); Log.v(TAG, "stopWebServer() - server died ok"); @@ -1025,7 +1026,7 @@ public class SdServer extends Service implements SdDataReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v(TAG, "NetworkBroadCastReceiver.onReceive"); - //mUtil.writeToSysLogFile("Network State Changed" + intent.getAction()); + mUtil.writeToSysLogFile("NetworkBroadcastReceiver.onReceive(): Network State Changed" + intent.getAction()); //mUtil.showToast("Network State Changed" + intent.getAction()); ConnectivityManager cm = @@ -1086,53 +1087,71 @@ public class SdServer extends Service implements SdDataReceiver { try { mSdDataSourceName = SP.getString("DataSource", "Pebble"); Log.v(TAG, "updatePrefs() - DataSource = " + mSdDataSourceName); + mUtil.writeToSysLogFile("updatePrefs() - DataSource = " + mSdDataSourceName); mLatchAlarms = SP.getBoolean("LatchAlarms", false); Log.v(TAG, "updatePrefs() - mLatchAlarms = " + mLatchAlarms); + mUtil.writeToSysLogFile("updatePrefs() - mLatchAlarms = " + mLatchAlarms); // Parse the LatchAlarmPeriod setting. try { String latchAlarmPeriodStr = SP.getString("LatchAlarmTimerPeriod", "30"); mLatchAlarmPeriod = Integer.parseInt(latchAlarmPeriodStr); Log.v(TAG, "updatePrefs() - mLatchAlarmTimerPeriod = " + mLatchAlarmPeriod); + mUtil.writeToSysLogFile("updatePrefs() - mLatchAlarmTimerPeriod = " + mLatchAlarmPeriod); } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem with LatchAlarmTimerPeriod preference!"); + mUtil.writeToSysLogFile( "updatePrefs() - Problem with LatchAlarmTimerPeriod preference!"); mUtil.showToast("Problem Parsing LatchAlarmTimerPeriod Preference"); } mAudibleFaultWarning = SP.getBoolean("AudibleFaultWarning", true); Log.v(TAG, "updatePrefs() - mAuidbleFaultWarning = " + mAudibleFaultWarning); + mUtil.writeToSysLogFile("updatePrefs() - mAuidbleFaultWarning = " + mAudibleFaultWarning); // Parse the faultTimer period setting. try { String faultTimerPeriodStr = SP.getString("FaultTimerPeriod", "30"); mFaultTimerPeriod = Integer.parseInt(faultTimerPeriodStr); Log.v(TAG, "updatePrefs() - mFaultTimerPeriod = " + mFaultTimerPeriod); + mUtil.writeToSysLogFile("updatePrefs() - mFaultTimerPeriod = " + mFaultTimerPeriod); } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem with FaultTimerPeriod preference!"); + mUtil.writeToSysLogFile("updatePrefs() - Problem with FaultTimerPeriod preference!"); mUtil.showToast("Problem Parsing FaultTimerPeriod Preference"); } mAudibleAlarm = SP.getBoolean("AudibleAlarm", true); Log.v(TAG, "updatePrefs() - mAuidbleAlarm = " + mAudibleAlarm); + mUtil.writeToSysLogFile("updatePrefs() - mAuidbleAlarm = " + mAudibleAlarm); mAudibleWarning = SP.getBoolean("AudibleWarning", true); Log.v(TAG, "updatePrefs() - mAuidbleWarning = " + mAudibleWarning); + mUtil.writeToSysLogFile("updatePrefs() - mAuidbleWarning = " + mAudibleWarning); mMp3Alarm = SP.getBoolean("UseMp3Alarm", false); Log.v(TAG, "updatePrefs() - mMp3Alarm = " + mMp3Alarm); + mUtil.writeToSysLogFile( "updatePrefs() - mMp3Alarm = " + mMp3Alarm); mSMSAlarm = SP.getBoolean("SMSAlarm", false); Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm); + mUtil.writeToSysLogFile( "updatePrefs() - mSMSAlarm = " + mSMSAlarm); mPhoneAlarm = SP.getBoolean("PhoneCallAlarm", false); Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm); + mUtil.writeToSysLogFile( "updatePrefs() - mSMSAlarm = " + mSMSAlarm); String SMSNumberStr = SP.getString("SMSNumbers", ""); mSMSNumbers = SMSNumberStr.split(","); mSMSMsgStr = SP.getString("SMSMsg", "Seizure Detected!!!"); Log.v(TAG, "updatePrefs() - SMSNumberStr = " + SMSNumberStr); + mUtil.writeToSysLogFile( "updatePrefs() - SMSNumberStr = " + SMSNumberStr); Log.v(TAG, "updatePrefs() - mSMSNumbers = " + mSMSNumbers); + mUtil.writeToSysLogFile( "updatePrefs() - mSMSNumbers = " + mSMSNumbers); mLogAlarms = SP.getBoolean("LogAlarms", true); Log.v(TAG, "updatePrefs() - mLogAlarms = " + mLogAlarms); + mUtil.writeToSysLogFile("updatePrefs() - mLogAlarms = " + mLogAlarms); mLogData = SP.getBoolean("LogData", true); Log.v(TAG, "updatePrefs() - mLogData = " + mLogData); + mUtil.writeToSysLogFile( "updatePrefs() - mLogData = " + mLogData); mLogDataRemote = SP.getBoolean("LogDataRemote", false); Log.v(TAG, "updatePrefs() - mLogDataRemote = " + mLogDataRemote); + mUtil.writeToSysLogFile( "updatePrefs() - mLogDataRemote = " + mLogDataRemote); mLogDataRemoteMobile = SP.getBoolean("LogDataRemoteMobile", false); Log.v(TAG, "updatePrefs() - mLogDataRemoteMobile = " + mLogDataRemoteMobile); + mUtil.writeToSysLogFile("updatePrefs() - mLogDataRemoteMobile = " + mLogDataRemoteMobile); mOSDUname = SP.getString("OSDUname", ""); Log.v(TAG, "updatePrefs() - mOSDUname = " + mOSDUname); mOSDPasswd = SP.getString("OSDPasswd", ""); @@ -1141,6 +1160,7 @@ public class SdServer extends Service implements SdDataReceiver { Log.v(TAG, "updatePrefs() - mOSDWearerId = " + mOSDWearerId); mOSDUrl = SP.getString("OSDUrl", "http://openseizuredetector.org.uk/webApi"); Log.v(TAG, "updatePrefs() - mOSDUrl = " + mOSDUrl); + mUtil.writeToSysLogFile( "updatePrefs() - mOSDUrl = " + mOSDUrl); } catch (Exception ex) { Log.v(TAG, "updatePrefs() - Problem parsing preferences!"); mUtil.writeToSysLogFile("SdServer.updatePrefs() - Error " + ex.toString()); @@ -1184,7 +1204,7 @@ public class SdServer extends Service implements SdDataReceiver { // Open output directory on SD Card. if (mUtil.isExternalStorageWritable()) { try { - FileWriter of = new FileWriter(mUtil.getDataStorageDir().toString() + FileWriter of = new FileWriter(getExternalFilesDir(null).toString() + "/" + fname, true); if (mSdData != null) { if (alarm) { diff --git a/app/src/main/java/uk/org/openseizuredetector/SdWebServer.java b/app/src/main/java/uk/org/openseizuredetector/SdWebServer.java index 35d0647..2b0e182 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdWebServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdWebServer.java @@ -2,6 +2,7 @@ package uk.org.openseizuredetector; import android.content.Context; import android.content.res.AssetManager; +import android.os.Handler; import android.util.Log; import org.json.JSONArray; @@ -28,15 +29,17 @@ public class SdWebServer extends NanoHTTPD { private SdData mSdData; private SdServer mSdServer; private Context mContext; - private File mDataStorageDir = null; + private Handler mHandler; + private OsdUtil mUtil; - public SdWebServer(Context context, File storageDir, SdData sdData, SdServer sdServer) { + public SdWebServer(Context context, SdData sdData, SdServer sdServer) { // Set the port to listen on (8080) super(8080); mSdData = sdData; mContext = context; mSdServer = sdServer; - mDataStorageDir = storageDir; + mHandler = new Handler(); + mUtil = new OsdUtil(mContext, mHandler); } public void setSdData(SdData sdData) { @@ -235,16 +238,16 @@ public class SdWebServer extends NanoHTTPD { if (uriParts.countTokens() == 1) { Log.v(TAG, "Returning list of files"); - File dirs = mDataStorageDir; try { JSONObject jsonObj = new JSONObject(); - if (dirs.exists()) { - String[] fileList = dirs.list(); - JSONArray arr = new JSONArray(); - for (int i = 0; i < fileList.length; i++) - arr.put(fileList[i]); + File[] fileList = mUtil.getDataFilesList(); + Log.v(TAG, "serveLogFile(): fileList=" + fileList.toString()+", length="+fileList.length); + JSONArray arr = new JSONArray(); + for (int i = 0; i < fileList.length; i++) { + Log.v(TAG, "serveLogFile(): file[" + i + "]=" + fileList[i]); + arr.put(fileList[i].getName()); + } jsonObj.put("logFileList", arr); - } res = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/html", jsonObj.toString()); } catch (Exception ex) { @@ -256,7 +259,7 @@ public class SdWebServer extends NanoHTTPD { uripart = uriParts.nextToken(); // This will just be /logs uripart = uriParts.nextToken(); // this is the requested file. - String fname = mDataStorageDir.toString() + "/" + uripart; + String fname = mUtil.getDataStorageDir().toString() + "/" + uripart; Log.v(TAG, "serveLogFile - uri=" + uri + ", fname=" + fname); ip = new FileInputStream(fname); String mimeStr = "text/html"; diff --git a/build.gradle b/build.gradle index ba0e56c..eb2fbaf 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.android.tools.build:gradle:4.1.1' } } allprojects { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9e4548a..c1a9123 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Aug 21 22:56:16 BST 2020 +#Sat Nov 21 06:41:40 GMT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip