diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index 885c2b3..0000000
--- a/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a68bb0a..e119821 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,12 +4,20 @@ plugins {
}
android {
+ signingConfigs {
+ debug {
+ storeFile file('/home/gogacoder/AndroidStudioProjects/keychain/key.jks')
+ storePassword '123456'
+ keyPassword '123456'
+ keyAlias 'key0'
+ }
+ }
namespace 'com.listerk.helible'
compileSdk 34
defaultConfig {
applicationId "com.listerk.helible"
- minSdk 31
+ minSdk 30
targetSdk 34
versionCode 1
versionName "1.0"
diff --git a/app/debug/output-metadata.json b/app/debug/output-metadata.json
new file mode 100644
index 0000000..c142ade
--- /dev/null
+++ b/app/debug/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.listerk.helible",
+ "variantName": "debug",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-debug.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b0adb6d..878542a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,10 +2,18 @@
-
+
+
+
+
+
+
+
-
+
, private val gotoControlBtn: Button) :
RecyclerView.Adapter() {
@@ -41,9 +42,9 @@ class BleDeviceAdapter(private val devices: List, private val gotoCon
}
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)
+ val cardView: View = itemView.rootView
+ val nameView: TextView = itemView.findViewById(R.id.deviceName)
+ val addressView: TextView = itemView.findViewById(R.id.deviceAddress)
+ val rssiView: ImageView = 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
index 2470d74..9b7447d 100644
--- a/app/src/main/java/com/listerk/helible/ControlActivity.kt
+++ b/app/src/main/java/com/listerk/helible/ControlActivity.kt
@@ -28,8 +28,7 @@ class ControlActivity : AppCompatActivity() {
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
+ sliderR1ValueText.text = getString(R.string.r_slider_text, 1, progress)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
@@ -38,8 +37,7 @@ class ControlActivity : AppCompatActivity() {
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
+ sliderR2ValueText.text = getString(R.string.r_slider_text, 2, progress)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
@@ -48,8 +46,7 @@ class ControlActivity : AppCompatActivity() {
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
+ sliderR3ValueText.text = getString(R.string.r_slider_text, 3, progress)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
diff --git a/app/src/main/java/com/listerk/helible/MainActivity.kt b/app/src/main/java/com/listerk/helible/MainActivity.kt
index a8fc630..e6d1195 100644
--- a/app/src/main/java/com/listerk/helible/MainActivity.kt
+++ b/app/src/main/java/com/listerk/helible/MainActivity.kt
@@ -1,6 +1,7 @@
package com.listerk.helible
import android.Manifest
+import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.bluetooth.le.BluetoothLeScanner
@@ -13,16 +14,17 @@ import android.graphics.drawable.Animatable
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import android.os.Handler
import android.util.Log
+//import android.os.Handler
import android.view.View
import android.widget.Button
import android.widget.ImageView
-import androidx.annotation.RequiresApi
+//import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+@SuppressLint("MissingPermission")
class MainActivity : AppCompatActivity() {
private val bluetoothAdapter: BluetoothAdapter by lazy {
val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
@@ -31,7 +33,7 @@ class MainActivity : AppCompatActivity() {
private val bleScanner: BluetoothLeScanner by lazy {
bluetoothAdapter.bluetoothLeScanner
}
-
+ private val requiredPermissions: MutableSet = mutableSetOf(Manifest.permission.BLUETOOTH_SCAN)
private val foundDevices = mutableListOf()
private val leScanCallback: ScanCallback = object : ScanCallback() {
@@ -39,6 +41,7 @@ class MainActivity : AppCompatActivity() {
super.onScanResult(callbackType, result)
val bleDevicesView = findViewById(R.id.bleDevicesView)
val loader = findViewById(R.id.bleDevicesLoader)
+
if (result.device.name.isNullOrBlank()) {
return
}
@@ -48,7 +51,7 @@ class MainActivity : AppCompatActivity() {
loader.visibility = View.GONE
}
- var deviceIndex = foundDevices.indexOfFirst { it.address == result.device.address }
+ var deviceIndex: Int = foundDevices.indexOfFirst { it.address == result.device.address }
if (deviceIndex < 0) {
deviceIndex = foundDevices.size
foundDevices.add(BleDevice(result.device.name, result.device.address, result.rssi))
@@ -76,23 +79,62 @@ class MainActivity : AppCompatActivity() {
bleDevicesView.layoutManager = LinearLayoutManager(this)
bleDevicesView.adapter = BleDeviceAdapter(foundDevices, gotoControlButton)
bleDevicesView.itemAnimator = null
+
+ if (ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)
+ {
+ Log.e("StartActivity", "We have denied permissions")
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
+ {
+ ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), 2)
+ return
+ }
+ }
+
+ /*if(Build.VERSION.SDK_INT < 31) {
+ requiredPermissions.add(android.Manifest.permission.ACCESS_FINE_LOCATION)
+ requiredPermissions.add(android.Manifest.permission.ACCESS_COARSE_LOCATION)
+ requiredPermissions.add(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)
+ }
+ requestPermissions()*/
}
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 {
+ /*if (!hasNecessaryPermissions()) {
+ requestPermissions()
+ } 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 {
+ /*if (!hasNecessaryPermissions()) {
+ requestPermissions()
+ } else {*/
bleScanner.stopScan(leScanCallback)
+ //}
+ }
+
+ private fun hasNecessaryPermissions(): Boolean
+ {
+ for (it in requiredPermissions) {
+ if (ActivityCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED) {
+ Log.i("ScanActivity", "Permission isn't allowed: $it")
+ return false
+ }
+ }
+ return true
+ }
+ private fun requestPermissions()
+ {
+ Log.i("ScanActivity", "Trying to request permissions: $requiredPermissions")
+ ActivityCompat.requestPermissions(this@MainActivity, requiredPermissions.toTypedArray(), 1)
+ if(!hasNecessaryPermissions())
+ {
+ Log.e("ScanActivity", "Failed to get all permissions")
+ } else {
+ Log.i("ScanActivity", "App got permissions: $requiredPermissions")
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 8eb95a2..b919055 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -22,10 +22,11 @@
android:id="@+id/bleDevicesView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/devicesTitle"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="12dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/devicesTitle"
tools:listitem="@layout/item_ble_device" />
+ app:layout_constraintTop_toBottomOf="@id/bleDevicesView" />