diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..7643783
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 292aabd..ff66778 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/listerk/helible/AppState.kt b/app/src/main/java/com/listerk/helible/AppState.kt
new file mode 100644
index 0000000..02014fe
--- /dev/null
+++ b/app/src/main/java/com/listerk/helible/AppState.kt
@@ -0,0 +1,5 @@
+package com.listerk.helible
+
+object AppState {
+ lateinit var bleDevice: BleDevice;
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/listerk/helible/BleDevice.kt b/app/src/main/java/com/listerk/helible/BleDevice.kt
new file mode 100644
index 0000000..9183560
--- /dev/null
+++ b/app/src/main/java/com/listerk/helible/BleDevice.kt
@@ -0,0 +1,3 @@
+package com.listerk.helible
+
+data class BleDevice(val name: String, val address: String, val rssi: Int)
diff --git a/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt b/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt
new file mode 100644
index 0000000..716f87a
--- /dev/null
+++ b/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt
@@ -0,0 +1,39 @@
+package com.listerk.helible
+
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.recyclerview.widget.RecyclerView
+
+class BleDeviceAdapter(private val devices: List, private val gotoControlBtn: Button) :
+ RecyclerView.Adapter() {
+ private lateinit var itemView: View
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BleDeviceViewHolder {
+ itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_ble_device, parent, false)
+ return BleDeviceViewHolder(itemView)
+ }
+
+ override fun getItemCount(): Int = devices.size
+
+ override fun onBindViewHolder(holder: BleDeviceViewHolder, position: Int) {
+ holder.nameView.text = devices[position].name
+ holder.addressView.text = devices[position].address
+ holder.rssiView.text = devices[position].rssi.toString()
+ holder.cardView.setOnClickListener {
+ AppState.bleDevice = devices[position]
+ gotoControlBtn.isEnabled = true
+ }
+ }
+
+ class BleDeviceViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
+ val cardView = itemView.rootView
+ val nameView = itemView.findViewById(R.id.deviceName)
+ val addressView = itemView.findViewById(R.id.deviceAddress)
+ val rssiView = itemView.findViewById(R.id.deviceRssi)
+ }
+}
diff --git a/app/src/main/java/com/listerk/helible/ControlActivity.kt b/app/src/main/java/com/listerk/helible/ControlActivity.kt
new file mode 100644
index 0000000..ca3ca75
--- /dev/null
+++ b/app/src/main/java/com/listerk/helible/ControlActivity.kt
@@ -0,0 +1,67 @@
+package com.listerk.helible
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.widget.SeekBar
+import android.widget.TextView
+
+class ControlActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_control)
+
+ var sliderR1Value = 0
+ var sliderR2Value = 0
+ var sliderR3Value = 0
+
+ val sliderR1ValueText = findViewById(R.id.sliderR1Value)
+ val sliderR2ValueText = findViewById(R.id.sliderR2Value)
+ val sliderR3ValueText = findViewById(R.id.sliderR3Value)
+
+ val sliderR1 = findViewById(R.id.sliderR1)
+ val sliderR2 = findViewById(R.id.sliderR2)
+ val sliderR3 = findViewById(R.id.sliderR3)
+
+ sliderR1.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ sliderR1Value = progress
+ val val_text = getString(R.string.r_slider_text, 1, progress)
+ sliderR1ValueText.text = val_text
+ }
+
+ override fun onStartTrackingTouch(seekBar: SeekBar?) {}
+
+ override fun onStopTrackingTouch(seekBar: SeekBar?) {
+
+ }
+ })
+
+ sliderR2.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ sliderR2Value = progress
+ val val_text = getString(R.string.r_slider_text, 2, progress)
+ sliderR2ValueText.text = val_text
+ }
+
+ override fun onStartTrackingTouch(seekBar: SeekBar?) {}
+
+ override fun onStopTrackingTouch(seekBar: SeekBar?) {
+
+ }
+ })
+
+ sliderR3.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ sliderR3Value = progress
+ val val_text = getString(R.string.r_slider_text, 3, progress)
+ sliderR3ValueText.text = val_text
+ }
+
+ override fun onStartTrackingTouch(seekBar: SeekBar?) {}
+
+ override fun onStopTrackingTouch(seekBar: SeekBar?) {
+
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/listerk/helible/MainActivity.kt b/app/src/main/java/com/listerk/helible/MainActivity.kt
index 80942f3..f0cbe50 100644
--- a/app/src/main/java/com/listerk/helible/MainActivity.kt
+++ b/app/src/main/java/com/listerk/helible/MainActivity.kt
@@ -1,67 +1,74 @@
package com.listerk.helible
+import android.Manifest
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothManager
+import android.bluetooth.le.BluetoothLeScanner
+import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanResult
+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.widget.SeekBar
-import android.widget.TextView
+import android.os.Handler
+import android.util.Log
+import android.widget.Button
+import androidx.annotation.RequiresApi
+import androidx.core.app.ActivityCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
+ private val bluetoothAdapter: BluetoothAdapter by lazy {
+ val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
+ bluetoothManager.adapter
+ }
+ private val bleScanner: BluetoothLeScanner by lazy {
+ bluetoothAdapter.bluetoothLeScanner
+ }
+
+ private val foundDevices = mutableListOf()
+
+ private val leScanCallback: ScanCallback = object : ScanCallback() {
+ override fun onScanResult(callbackType: Int, result: ScanResult) {
+ super.onScanResult(callbackType, result)
+ val bleDevicesView = findViewById(R.id.bleDevicesView)
+ if (result.device.name.isNullOrBlank()) {
+ return
+ }
+ val deviceExists = foundDevices.any { it.address == result.device.address }
+ if (!deviceExists) {
+ foundDevices.add(BleDevice(result.device.name, result.device.address, result.rssi))
+ bleDevicesView.adapter?.notifyItemChanged(foundDevices.size - 1)
+ }
+ }
+ }
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- var sliderR1Value = 0
- var sliderR2Value = 0
- var sliderR3Value = 0
+ val gotoControlButton = findViewById