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