diff --git a/android/app/build.gradle b/android/app/build.gradle
index b091c04..71f9cf9 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -4,14 +4,14 @@ plugins {
}
android {
- namespace 'com.eddy.atomrelay'
+ namespace 'nl.eddydevink.sylda'
// compileSdk/targetSdk stays on 34 (Android 14) by deliberate choice. The target audience
// consists of physically disabled users who are very reluctant to update their phones. Staying
// on API 34 maximises device compatibility. Re-evaluate when the user base has migrated.
compileSdk 34
defaultConfig {
- applicationId "com.eddy.atomrelay"
+ applicationId "nl.eddydevink.sylda"
minSdk 26
targetSdk 34
versionCode 1
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 5059ef3..44d9552 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -13,7 +13,7 @@
@@ -30,6 +30,15 @@
+ android:parentActivityName=".MainActivity"
+ android:launchMode="singleTop"
+ android:exported="true">
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/assets/firmware/firmware.bin b/android/app/src/main/assets/firmware/firmware.bin
index e5bf28e..4f086b7 100644
Binary files a/android/app/src/main/assets/firmware/firmware.bin and b/android/app/src/main/assets/firmware/firmware.bin differ
diff --git a/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt b/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt
similarity index 99%
rename from android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt
index 713c683..0f137f9 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
import android.Manifest
import android.annotation.SuppressLint
diff --git a/android/app/src/main/java/com/eddy/atomrelay/BleStatus.kt b/android/app/src/main/java/nl/eddydevink/sylda/BleStatus.kt
similarity index 92%
rename from android/app/src/main/java/com/eddy/atomrelay/BleStatus.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/BleStatus.kt
index 19a0046..110aac8 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/BleStatus.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/BleStatus.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
enum class BleStatus {
Scanning,
diff --git a/android/app/src/main/java/com/eddy/atomrelay/EspFlasher.kt b/android/app/src/main/java/nl/eddydevink/sylda/EspFlasher.kt
similarity index 99%
rename from android/app/src/main/java/com/eddy/atomrelay/EspFlasher.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/EspFlasher.kt
index ba3377b..7a1b75d 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/EspFlasher.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/EspFlasher.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
import android.content.Context
import android.hardware.usb.UsbConstants
diff --git a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt b/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt
similarity index 99%
rename from android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt
index e67457e..81adfec 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/MainActivity.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
import android.content.Intent
import android.content.pm.PackageManager
diff --git a/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt b/android/app/src/main/java/nl/eddydevink/sylda/PrefsHelper.kt
similarity index 97%
rename from android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/PrefsHelper.kt
index 31147f9..5b123ac 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/PrefsHelper.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/PrefsHelper.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
import android.content.Context
import android.content.SharedPreferences
diff --git a/android/app/src/main/java/com/eddy/atomrelay/SettingsActivity.kt b/android/app/src/main/java/nl/eddydevink/sylda/SettingsActivity.kt
similarity index 91%
rename from android/app/src/main/java/com/eddy/atomrelay/SettingsActivity.kt
rename to android/app/src/main/java/nl/eddydevink/sylda/SettingsActivity.kt
index e1946e1..a860c32 100644
--- a/android/app/src/main/java/com/eddy/atomrelay/SettingsActivity.kt
+++ b/android/app/src/main/java/nl/eddydevink/sylda/SettingsActivity.kt
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0-or-later
-package com.eddy.atomrelay
+package nl.eddydevink.sylda
import android.app.AlertDialog
import android.app.PendingIntent
@@ -52,7 +52,7 @@ class SettingsActivity : AppCompatActivity() {
private const val FLUSH_TIMEOUT_MS = 100
private const val READ_CHUNK_TIMEOUT_MS = 500
private const val CDC_CONTROL_TIMEOUT_MS = 500
- private const val ACTION_USB_PERMISSION = "com.eddy.atomrelay.USB_PERMISSION"
+ private const val ACTION_USB_PERMISSION = "nl.eddydevink.sylda.USB_PERMISSION"
private const val STYLE_SPINNER = 0
private const val STYLE_HORIZONTAL = 1
private const val USB_READ_BUF_SIZE = 512
@@ -60,11 +60,17 @@ class SettingsActivity : AppCompatActivity() {
private const val UUID_HEX_LEN = 32
private const val UUID_BYTE_COUNT = 16
private const val HMAC_BYTE_COUNT = 32
+ private const val VERSION_TIMEOUT_MS = 3000L
+ private const val REBOOT_WAIT_MS = 5000L
+ private const val REBOOT_POLL_MS = 500L
+ private const val REBOOT_MAX_WAIT_MS = 15000L
+ private const val EXPECTED_FIRMWARE_VERSION = "1"
}
private enum class UsbAction { NONE, EXCHANGE_KEY, FLASH }
private var currentAction = UsbAction.NONE
+ private var expectingReboot = false
private var progressDialog: AlertDialog? = null
private var dialog: AlertDialog? = null
private var flasherJob: Job? = null
@@ -109,6 +115,7 @@ class SettingsActivity : AppCompatActivity() {
if (intent.action == UsbManager.ACTION_USB_DEVICE_DETACHED) {
val device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
if (device?.vendorId == ESP_VENDOR_ID) {
+ if (expectingReboot) return
if (dialog != null && currentAction == UsbAction.NONE) {
dialog?.dismiss()
dialog = null
@@ -129,16 +136,10 @@ class SettingsActivity : AppCompatActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.title = getString(R.string.title_settings)
- findViewById