diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 62de00f5fb25ac1c6247eb6d2bb56bf45aaea915..a1b4c48e96c7826ef8d6d6ea2931fb3e2e9fabfe 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,6 +16,8 @@
+
+
diff --git a/app/src/main/java/com/github/antweb/donkey/DeviceListAdapter.kt b/app/src/main/java/com/github/antweb/donkey/DeviceListAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d50317a4fcc553c273f2166915a274376dbbead8
--- /dev/null
+++ b/app/src/main/java/com/github/antweb/donkey/DeviceListAdapter.kt
@@ -0,0 +1,27 @@
+package com.github.antweb.donkey
+
+import android.bluetooth.BluetoothDevice
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ArrayAdapter
+import android.widget.TextView
+import kotlinx.android.synthetic.main.activity_main.view.*
+
+class DeviceListAdapter(context: Context, private val list: ArrayList = ArrayList()) :
+ ArrayAdapter(context, android.R.layout.simple_list_item_1, list) {
+
+ override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
+ val view = if (convertView == null) {
+ LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false)
+ } else {
+ convertView
+ }
+
+ val device = list[position]
+ val label = "${device.name} (${device.address})"
+ view.findViewById(android.R.id.text1).text = label
+ return view
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/antweb/donkey/MainActivity.kt b/app/src/main/java/com/github/antweb/donkey/MainActivity.kt
index a5b44fad8708a5225eb19a5f6133051539e46a68..2f79f33cb9831770297e55345f93c0cbf7cfc034 100644
--- a/app/src/main/java/com/github/antweb/donkey/MainActivity.kt
+++ b/app/src/main/java/com/github/antweb/donkey/MainActivity.kt
@@ -2,6 +2,7 @@ package com.github.antweb.donkey
import android.bluetooth.*
import android.content.Context
+import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
@@ -10,9 +11,9 @@ import android.widget.Button
import android.widget.TextView
import java.lang.NullPointerException
-class MainActivity : AppCompatActivity() {
+private const val TAG = "MainActivity"
- private val TAG = "MainActivity"
+class MainActivity : AppCompatActivity() {
private val targetDeviceName = "card10"
private val mtu = 128
@@ -47,15 +48,12 @@ class MainActivity : AppCompatActivity() {
buttonConnect = findViewById(R.id.button_connect)
buttonConnect.setOnClickListener {
- scanLeDevice()
- }
- }
+// scanLeDevice()
+
- private fun checkPermissions() {
-// if (bluetoothAdapter == null || !(bluetoothAdapter?.isEnabled)) {
-// val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
-// startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
-// }
+ val intent = Intent(this, ScanActivity::class.java)
+ startActivity(intent)
+ }
}
private fun scanLeDevice() {
diff --git a/app/src/main/java/com/github/antweb/donkey/ScanActivity.kt b/app/src/main/java/com/github/antweb/donkey/ScanActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e24419af80064a80ea43acb7315cc3258e7ff676
--- /dev/null
+++ b/app/src/main/java/com/github/antweb/donkey/ScanActivity.kt
@@ -0,0 +1,72 @@
+package com.github.antweb.donkey
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothManager
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.os.Handler
+import android.widget.ListView
+import androidx.appcompat.app.AppCompatActivity
+
+private const val TAG = "ScanActivity"
+
+class ScanActivity : AppCompatActivity() {
+
+ private lateinit var listView: ListView
+ private lateinit var listAdapter: DeviceListAdapter
+
+ private var mScanning = false
+
+ private val bluetoothAdapter: BluetoothAdapter? by lazy(LazyThreadSafetyMode.NONE) {
+ val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
+ bluetoothManager.adapter
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_scan)
+
+ listView = findViewById(R.id.list_view_devices)
+ listAdapter = DeviceListAdapter(applicationContext)
+ listView.adapter = listAdapter
+
+ checkPermissions()
+ scan()
+ }
+
+ private fun checkPermissions() {
+ bluetoothAdapter?.takeIf { !it.isEnabled }?.apply {
+ val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
+ startActivity(enableBtIntent)
+ }
+ }
+
+ private fun scan() {
+ val foundDevices = mutableSetOf()
+
+ val leScanCallback = BluetoothAdapter.LeScanCallback { device, _, _ ->
+// if (device.name == targetDeviceName) {
+// if (!connected) {
+// connected = true
+// bluetoothGatt = device.connectGatt(this, true, gattCallback, BluetoothDevice.TRANSPORT_LE)
+// }
+// }
+
+ if (!foundDevices.contains(device)) {
+ foundDevices.add(device)
+ listAdapter.add(device)
+
+ }
+ }
+
+ // Stops scanning after a pre-defined period
+ Handler().postDelayed({
+ mScanning = false
+ bluetoothAdapter?.stopLeScan(leScanCallback)
+ }, 5000)
+ mScanning = true
+ bluetoothAdapter?.startLeScan(leScanCallback)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_scan.xml b/app/src/main/res/layout/activity_scan.xml
index fb3d8a258054c81b274252adffcf37b375659a36..62fc90a05695224e4c79dca8674c9901bd7f3319 100644
--- a/app/src/main/res/layout/activity_scan.xml
+++ b/app/src/main/res/layout/activity_scan.xml
@@ -4,4 +4,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
\ No newline at end of file