diff --git a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt index d83c695..9af284c 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt @@ -166,14 +166,14 @@ class MainActivity : AppCompatActivity() { bluetoothGatt = null relayCharacteristic = null seq = 1 - loadHmacKey() + loadState() handler.postDelayed(scanRunnable, 500) } } override fun onResume() { super.onResume() - loadHmacKey() + loadState() if (hmacKey == null) { statusText.text = "Geen HMAC sleutel - open Instellingen" } else if (!isScanning && bluetoothGatt == null) { @@ -187,11 +187,12 @@ class MainActivity : AppCompatActivity() { stopScan() } - private fun loadHmacKey() { + private fun loadState() { val prefs = PrefsHelper.getPrefs(this) val hexKey = prefs.getString(PrefsHelper.PREF_KEY, null) hmacKey = hexKey?.let { hexStringToBytes(it) } - Log.d(TAG, "HMAC key loaded: ${if (hmacKey != null) "${hmacKey!!.size} bytes" else "none"}") + seq = prefs.getInt(PrefsHelper.PREF_SEQ, 1).coerceAtMost(PrefsHelper.SEQ_MAX) + Log.d(TAG, "HMAC key loaded: ${if (hmacKey != null) "${hmacKey!!.size} bytes" else "none"}, seq=$seq") } private fun hexStringToBytes(hex: String): ByteArray? { @@ -314,6 +315,8 @@ class MainActivity : AppCompatActivity() { char.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE gatt.writeCharacteristic(char) seq++ + if (seq > PrefsHelper.SEQ_MAX) seq = 1 + PrefsHelper.getPrefs(this).edit().putInt(PrefsHelper.PREF_SEQ, seq).apply() Log.d(TAG, "Sent relay ${if (on) "ON" else "OFF"} (seq=${seq - 1})") } diff --git a/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt b/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt index 2eff494..f17480e 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt @@ -12,6 +12,8 @@ object PrefsHelper { private const val TAG = "PrefsHelper" const val PREFS_NAME = "relay_prefs" const val PREF_KEY = "hmac_key" + const val PREF_SEQ = "seq_counter" + const val SEQ_MAX = 1_000_000 fun getPrefs(context: Context): SharedPreferences { return try {