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