From dd4fbc12d5c5c028e7c40b02c13c49a63f91d712 Mon Sep 17 00:00:00 2001 From: andrekir Date: Sat, 8 Jan 2022 17:33:20 -0300 Subject: [PATCH] add ClassicScan button, timer & permissions check --- .../java/com/geeksville/mesh/MainActivity.kt | 8 ++--- .../geeksville/mesh/ui/SettingsFragment.kt | 32 ++++++++++++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index dd91a3397..96a84db5d 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -289,6 +289,9 @@ class MainActivity : AppCompatActivity(), Logging, return getMissingPermissions(perms) } + /** Ask the user to grant camera permission */ + fun requestBTScanPermission() = requestPermission(getCameraPermissions(), false) + /** Ask the user to grant camera permission */ fun requestCameraPermission() = requestPermission(getCameraPermissions(), false) @@ -331,7 +334,7 @@ class MainActivity : AppCompatActivity(), Logging, * * @return true if we already have the needed permissions */ - private fun requestPermission( + fun requestPermission( missingPerms: List = getMinimumPermissions(), shouldShowDialog: Boolean = true ): Boolean = @@ -534,9 +537,6 @@ class MainActivity : AppCompatActivity(), Logging, handleIntent(intent) askToRate() - - // if (!isInTestLab) - very important - even in test lab we must request permissions because we need location perms for some of our tests to pass - requestPermission() } private fun initToolbar() { diff --git a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt index 3e08d3a1a..4a640dfca 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt @@ -12,6 +12,8 @@ import android.content.pm.PackageManager import android.hardware.usb.UsbDevice import android.hardware.usb.UsbManager import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.os.RemoteException import android.view.LayoutInflater import android.view.View @@ -811,12 +813,32 @@ class SettingsFragment : ScreenFragment("Settings"), Logging { private fun initClassicScan() { - model.bluetoothEnabled.observe(viewLifecycleOwner, Observer { enabled -> - if (enabled) - scanModel.startScan() - else + binding.changeRadioButton.setOnClickListener { + if (myActivity.warnMissingPermissions()) { + myActivity.requestPermission() + } else scanLeDevice() + } + } + + // per https://developer.android.com/guide/topics/connectivity/bluetooth/find-ble-devices + private fun scanLeDevice() { + var scanning = false + val SCAN_PERIOD: Long = 5000 // Stops scanning after 5 seconds + + if (!scanning) { // Stops scanning after a pre-defined scan period. + Handler(Looper.getMainLooper()).postDelayed({ + scanning = false + binding.scanProgressBar.visibility = View.GONE scanModel.stopScan() - }) + }, SCAN_PERIOD) + scanning = true + binding.scanProgressBar.visibility = View.VISIBLE + scanModel.startScan() + } else { + scanning = false + binding.scanProgressBar.visibility = View.GONE + scanModel.stopScan() + } } private fun initModernScan() {