aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/com/arslaancodes/zwznfreefit/MainActivity.kt
blob: 59bff657c54337858b90eb47850575c06db7264e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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<BluetoothDevice>()
	private val deviceNames = mutableListOf<String>()
	private lateinit var adapter: ArrayAdapter<String>

	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()
					}
				}
			}
		}
	}
}