From 013553e119d97f6203c110f386e070bf758eae3c Mon Sep 17 00:00:00 2001
From: Greisa Ajdini <greisa.ajdini@bytebuzzer.com>
Date: Fri, 20 Jan 2023 06:35:21 +0100
Subject: [PATCH] nearest beacon setup

---
 .../main/java/com/tooz/woodz/BaseActivity.kt  | 53 +++++++++++++------
 .../main/java/com/tooz/woodz/MainActivity.kt  | 20 +++----
 2 files changed, 46 insertions(+), 27 deletions(-)

diff --git a/app/src/main/java/com/tooz/woodz/BaseActivity.kt b/app/src/main/java/com/tooz/woodz/BaseActivity.kt
index 42d5a40..02aa3e1 100644
--- a/app/src/main/java/com/tooz/woodz/BaseActivity.kt
+++ b/app/src/main/java/com/tooz/woodz/BaseActivity.kt
@@ -4,19 +4,19 @@ import android.Manifest
 import android.app.Activity
 import android.app.AlertDialog
 import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
 import android.bluetooth.BluetoothManager
 import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanFilter
 import android.bluetooth.le.ScanResult
 import android.bluetooth.le.ScanSettings
 import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
 import android.os.Build
-import androidx.appcompat.app.AppCompatActivity
-import android.os.Bundle
-import android.util.Log
 import android.widget.Toast
 import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import org.altbeacon.beacon.BeaconManager
@@ -26,7 +26,11 @@ private const val LOCATION_PERMISSION_REQUEST_CODE = 2
 
 abstract class BaseActivity : AppCompatActivity() {
 
+    private var addresses = arrayOf("AC:23:3F:88:10:51", "AC:23:3F:88:10:53", "AC:23:3F:88:10:57")
     private var beaconManager: BeaconManager? = null
+    private var filters: MutableList<ScanFilter> = mutableListOf()
+    private val scanResults = mutableListOf<ScanResult>()
+    var nearestBeacon: BluetoothDevice? = null
     private var isScanning = false
 
 
@@ -43,13 +47,9 @@ abstract class BaseActivity : AppCompatActivity() {
         bluetoothManager.adapter
     }
 
-    val isLocationPermissionGranted
+    private val isLocationPermissionGranted
         get() = hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)
 
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-    }
-
     override fun onResume() {
         super.onResume()
         if (checkPermissions()) {
@@ -86,7 +86,11 @@ abstract class BaseActivity : AppCompatActivity() {
         if (isLocationPermissionGranted) {
             return
         }
-        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)){
+        if (!ActivityCompat.shouldShowRequestPermissionRationale(
+                this,
+                Manifest.permission.ACCESS_FINE_LOCATION
+            )
+        ) {
             val alertDialogBuilder = AlertDialog.Builder(this)
             alertDialogBuilder.setTitle(R.string.location_permission_alert_title)
             alertDialogBuilder.setMessage(R.string.location_permission_alert_message)
@@ -103,23 +107,38 @@ abstract class BaseActivity : AppCompatActivity() {
 
     private val scanCallback = object : ScanCallback() {
         override fun onScanResult(callbackType: Int, result: ScanResult) {
-            Log.i("ScanCallBack", result.device.toString())
-            with(result.device) {
-                Log.i("ScanCallback", "Found BLE device! Name: ${name ?: "Unnamed"}, address: $address $")
-            }
+            scanResults.add(result)
+            scanResults.sortByDescending { it.rssi }
+            nearestBeacon = scanResults[0].device
+//            Log.i("ScanCallback",scanResults[0].toString())
+//            with(result.device) {
+//                Log.i(
+//                    "ScanCallback",
+//                    "Found BLE device! Name: ${name ?: "Unnamed"}, address: $address ${result.rssi} $"
+//                )
+//            }
         }
     }
 
     private fun doBleScan() {
         //todo delete
-        Toast.makeText(this, "heyyyyy",
-            Toast.LENGTH_SHORT).show()
+        Toast.makeText(
+            this, "hey",
+            Toast.LENGTH_SHORT
+        ).show()
+
+        scanResults.clear()
+
+        for (i in addresses.indices) {
+            val filter = ScanFilter.Builder().setDeviceAddress(addresses[i]).build()
+            filters.add(filter)
+        }
 
+        bleScanner.startScan(filters, scanSettings, scanCallback)
         isScanning = true
-        bleScanner.startScan(null, scanSettings, scanCallback)
     }
 
-    fun Context.hasPermission(permissionType: String): Boolean {
+    private fun Context.hasPermission(permissionType: String): Boolean {
         return ContextCompat.checkSelfPermission(this, permissionType) ==
                 PackageManager.PERMISSION_GRANTED
     }
diff --git a/app/src/main/java/com/tooz/woodz/MainActivity.kt b/app/src/main/java/com/tooz/woodz/MainActivity.kt
index cc846a4..cc19c3f 100644
--- a/app/src/main/java/com/tooz/woodz/MainActivity.kt
+++ b/app/src/main/java/com/tooz/woodz/MainActivity.kt
@@ -25,21 +25,21 @@ class MainActivity : BaseActivity() {
         val navHostFragment = supportFragmentManager
             .findFragmentById(R.id.nav_fragment) as NavHostFragment
         navController = navHostFragment.navController
-        val bottomNavigationView = findViewById<BottomNavigationView
-                >(R.id.bottom_navigation_view)
+        val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
         setupActionBarWithNavController(navController)
         bottomNavigationView.setupWithNavController(navController)
 
-        val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
-            when (item.itemId) {
-                R.id.camera -> {
-                    val intent = Intent(this, BarcodeScannerActivity::class.java)
-                    startActivity(intent)
-                    return@OnNavigationItemSelectedListener true
+        val mOnNavigationItemSelectedListener =
+            BottomNavigationView.OnNavigationItemSelectedListener { item ->
+                when (item.itemId) {
+                    R.id.camera -> {
+                        val intent = Intent(this, BarcodeScannerActivity::class.java)
+                        startActivity(intent)
+                        return@OnNavigationItemSelectedListener true
+                    }
                 }
+                false
             }
-            false
-        }
 
         bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
     }
-- 
GitLab