From fc5d6e91d4348e148d35a209bccb8a36ae0e7827 Mon Sep 17 00:00:00 2001 From: Nikonell Date: Sat, 24 Jun 2023 22:10:50 +0700 Subject: [PATCH] Prettified devices --- .../java/com/listerk/helible/BleDevice.kt | 2 +- .../com/listerk/helible/BleDeviceAdapter.kt | 6 ++++ .../com/listerk/helible/ControlActivity.kt | 33 +++++++------------ .../java/com/listerk/helible/MainActivity.kt | 24 ++++++++++---- app/src/main/res/drawable/ble_device_bg.xml | 16 +++++++++ app/src/main/res/layout/activity_control.xml | 6 ++-- app/src/main/res/layout/activity_main.xml | 1 + app/src/main/res/layout/item_ble_device.xml | 5 ++- app/src/main/res/values-night/themes.xml | 4 +-- app/src/main/res/values/attrs.xml | 5 +++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/themes.xml | 4 +-- build.gradle | 4 +-- 13 files changed, 73 insertions(+), 38 deletions(-) create mode 100644 app/src/main/res/drawable/ble_device_bg.xml create mode 100644 app/src/main/res/values/attrs.xml diff --git a/app/src/main/java/com/listerk/helible/BleDevice.kt b/app/src/main/java/com/listerk/helible/BleDevice.kt index 9183560..d0b6750 100644 --- a/app/src/main/java/com/listerk/helible/BleDevice.kt +++ b/app/src/main/java/com/listerk/helible/BleDevice.kt @@ -1,3 +1,3 @@ package com.listerk.helible -data class BleDevice(val name: String, val address: String, val rssi: Int) +data class BleDevice(val name: String, val address: String, var rssi: Int) diff --git a/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt b/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt index 716f87a..15c301f 100644 --- a/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt +++ b/app/src/main/java/com/listerk/helible/BleDeviceAdapter.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView class BleDeviceAdapter(private val devices: List, private val gotoControlBtn: Button) : RecyclerView.Adapter() { private lateinit var itemView: View + private var selectedPosition = -1 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BleDeviceViewHolder { itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_ble_device, parent, false) @@ -24,9 +25,14 @@ class BleDeviceAdapter(private val devices: List, private val gotoCon holder.nameView.text = devices[position].name holder.addressView.text = devices[position].address holder.rssiView.text = devices[position].rssi.toString() + holder.cardView.isSelected = position == selectedPosition holder.cardView.setOnClickListener { AppState.bleDevice = devices[position] gotoControlBtn.isEnabled = true + notifyItemChanged(selectedPosition) + selectedPosition = holder.adapterPosition + notifyItemChanged(selectedPosition) + } } diff --git a/app/src/main/java/com/listerk/helible/ControlActivity.kt b/app/src/main/java/com/listerk/helible/ControlActivity.kt index ca3ca75..2470d74 100644 --- a/app/src/main/java/com/listerk/helible/ControlActivity.kt +++ b/app/src/main/java/com/listerk/helible/ControlActivity.kt @@ -6,13 +6,16 @@ import android.widget.SeekBar import android.widget.TextView class ControlActivity : AppCompatActivity() { + private var sliderR1Value = 0 + private var sliderR2Value = 0 + private var sliderR3Value = 0 + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_control) - var sliderR1Value = 0 - var sliderR2Value = 0 - var sliderR3Value = 0 + val deviceNameText = findViewById(R.id.controlDeviceName) + deviceNameText.text = getString(R.string.control_device_text, AppState.bleDevice.name) val sliderR1ValueText = findViewById(R.id.sliderR1Value) val sliderR2ValueText = findViewById(R.id.sliderR2Value) @@ -28,12 +31,8 @@ class ControlActivity : AppCompatActivity() { 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?) { - - } + override fun onStartTrackingTouch(p0: SeekBar?) {} + override fun onStopTrackingTouch(p0: SeekBar?) {} }) sliderR2.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { @@ -42,12 +41,8 @@ class ControlActivity : AppCompatActivity() { 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?) { - - } + override fun onStartTrackingTouch(p0: SeekBar?) {} + override fun onStopTrackingTouch(p0: SeekBar?) {} }) sliderR3.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { @@ -56,12 +51,8 @@ class ControlActivity : AppCompatActivity() { 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?) { - - } + override fun onStartTrackingTouch(p0: SeekBar?) {} + override fun onStopTrackingTouch(p0: 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 f0cbe50..ad40f42 100644 --- a/app/src/main/java/com/listerk/helible/MainActivity.kt +++ b/app/src/main/java/com/listerk/helible/MainActivity.kt @@ -38,11 +38,15 @@ class MainActivity : AppCompatActivity() { if (result.device.name.isNullOrBlank()) { return } - val deviceExists = foundDevices.any { it.address == result.device.address } - if (!deviceExists) { + + var deviceIndex = foundDevices.indexOfFirst { it.address == result.device.address } + if (deviceIndex < 0) { + deviceIndex = foundDevices.size foundDevices.add(BleDevice(result.device.name, result.device.address, result.rssi)) - bleDevicesView.adapter?.notifyItemChanged(foundDevices.size - 1) + } else { + foundDevices[deviceIndex].rssi = result.rssi } + bleDevicesView.adapter?.notifyItemChanged(deviceIndex) } } @@ -59,16 +63,24 @@ class MainActivity : AppCompatActivity() { val bleDevicesView = findViewById(R.id.bleDevicesView) bleDevicesView.layoutManager = LinearLayoutManager(this) bleDevicesView.adapter = BleDeviceAdapter(foundDevices, gotoControlButton) - - bleScanner.startScan(leScanCallback) + bleDevicesView.itemAnimator = null } override fun onResume() { super.onResume() if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT), 1) + } else { + bleScanner.startScan(leScanCallback) } } - + override fun onPause() { + super.onPause() + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT), 1) + } else { + bleScanner.stopScan(leScanCallback) + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ble_device_bg.xml b/app/src/main/res/drawable/ble_device_bg.xml new file mode 100644 index 0000000..1ff5f45 --- /dev/null +++ b/app/src/main/res/drawable/ble_device_bg.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_control.xml b/app/src/main/res/layout/activity_control.xml index 49fe867..83a0c03 100644 --- a/app/src/main/res/layout/activity_control.xml +++ b/app/src/main/res/layout/activity_control.xml @@ -7,10 +7,10 @@ tools:context=".MainActivity"> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3ee780f..da61d44 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -25,6 +25,7 @@ app:layout_constraintTop_toBottomOf="@id/devicesTitle" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" + android:layout_marginTop="4dp" tools:listitem="@layout/item_ble_device" />