package com.arslaancodes.zwznfreefit import android.Manifest import android.bluetooth.BluetoothDevice import android.content.pm.PackageManager import android.os.Bundle import android.widget.* import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import android.content.Intent class MainActivity : AppCompatActivity() { private lateinit var bleManager: BleManager private lateinit var statusText: TextView private lateinit var scanButton: Button private lateinit var deviceList: ListView private val devices = mutableListOf() private val deviceNames = mutableListOf() private lateinit var adapter: ArrayAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.decorView.systemUiVisibility = ( android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY ) bleManager = BleManager(this) statusText = findViewById(R.id.statusText) scanButton = findViewById(R.id.scanButton) deviceList = findViewById(R.id.deviceList) adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, deviceNames) deviceList.adapter = adapter deviceList.setOnItemClickListener { _, _, position, _ -> val device = devices[position] statusText.text = "Connecting to ${device.name ?: device.address}..." bleManager.connect(device) { runOnUiThread { val intent = Intent(this, DeviceActivity::class.java) intent.putExtra("device_address", device.address) startActivity(intent) } } } scanButton.setOnClickListener { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, arrayOf( Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.ACCESS_FINE_LOCATION ), 1) return@setOnClickListener } devices.clear() deviceNames.clear() adapter.notifyDataSetChanged() statusText.text = "Scanning..." bleManager.scan { device -> runOnUiThread { if (devices.none { it.address == device.address }) { devices.add(device) deviceNames.add(device.name ?: device.address) adapter.notifyDataSetChanged() } } } } } }