diff --git a/app/src/main/java/com/example/sensortestingapp/DeviceListAdapter.kt b/app/src/main/java/com/example/sensortestingapp/DeviceListAdapter.kt index 978b6bb..66b8df5 100644 --- a/app/src/main/java/com/example/sensortestingapp/DeviceListAdapter.kt +++ b/app/src/main/java/com/example/sensortestingapp/DeviceListAdapter.kt @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView interface Action { fun getLabel(): String - fun getIcon(): String + fun getIcon(): Int? fun execute(): Unit } @@ -70,6 +70,7 @@ class DeviceListAdapter( deviceActions = view.findViewById(R.id.device_actions) } + @SuppressLint("RestrictedApi") fun bind(result: DeviceListEntry) { deviceNameView.text = result.name ?: "" macAddressView.text = result.address @@ -90,13 +91,18 @@ class DeviceListAdapter( deviceActions.setOnClickListener { val popup = PopupMenu(context, deviceActions) result.getActions().forEach { action -> - popup.menu.add(action.getLabel()) - .setOnMenuItemClickListener { menuItem -> - action.execute() - true - } + val menuItem = popup.menu.add(action.getLabel()) + menuItem.setOnMenuItemClickListener { item -> + action.execute() + true + } + val menuIcon = action.getIcon() + if (menuIcon != null) { + menuItem.setIcon(menuIcon) + } } val inflater = popup.menuInflater + popup.setForceShowIcon(true) inflater.inflate(R.menu.device_menu, popup.menu) popup.show() } diff --git a/app/src/main/java/com/example/sensortestingapp/KirbyDevice.kt b/app/src/main/java/com/example/sensortestingapp/KirbyDevice.kt index fd0a7fa..f1050bf 100644 --- a/app/src/main/java/com/example/sensortestingapp/KirbyDevice.kt +++ b/app/src/main/java/com/example/sensortestingapp/KirbyDevice.kt @@ -195,8 +195,8 @@ class KirbyDevice( return "Connect" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int { + return R.drawable.action_icon_connect } override fun execute() { @@ -213,8 +213,8 @@ class KirbyDevice( return "Disconnect" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int { + return R.drawable.action_icon_disconnect } override fun execute() { @@ -227,8 +227,8 @@ class KirbyDevice( return "Fetch Measurement" } - override fun getIcon(): String { - TODO("Not yet implemented") + override fun getIcon(): Int { + return R.drawable.action_icon_fetch_measurement } override fun execute() { @@ -242,8 +242,8 @@ class KirbyDevice( return "Subscribe" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int { + return R.drawable.action_icon_subscribe } override fun execute() { @@ -261,8 +261,8 @@ class KirbyDevice( return "Unsubscribe" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int { + return R.drawable.action_icon_subscribe_disable } override fun execute() { diff --git a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt index 5a71f2d..cedb0b0 100644 --- a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt +++ b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt @@ -121,6 +121,9 @@ class MainActivity : AppCompatActivity() { override fun onScanningStateChange(isScanning: Boolean) { runOnUiThread { binding.fab.setText(if (isScanning) "Stop Scan" else "Start Scan") + binding.fab.setIconResource( + if (isScanning) R.drawable.action_icon_disconnect else R.drawable.action_icon_scan + ) } } @@ -338,8 +341,8 @@ class DummyListEntry(override val address: String) : DeviceListEntry { return "Test action 1" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int? { + return R.drawable.action_icon_disconnect } override fun execute() { @@ -350,8 +353,8 @@ class DummyListEntry(override val address: String) : DeviceListEntry { return "Test action 2" } - override fun getIcon(): String { - return "" + override fun getIcon(): Int? { + return R.drawable.action_icon_connect } override fun execute() { diff --git a/app/src/main/res/drawable/action_icon_connect.xml b/app/src/main/res/drawable/action_icon_connect.xml new file mode 100644 index 0000000..8997222 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_connect.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/action_icon_disconnect.xml b/app/src/main/res/drawable/action_icon_disconnect.xml new file mode 100644 index 0000000..482ba53 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_disconnect.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/action_icon_fetch_measurement.xml b/app/src/main/res/drawable/action_icon_fetch_measurement.xml new file mode 100644 index 0000000..9e345b8 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_fetch_measurement.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/action_icon_scan.xml b/app/src/main/res/drawable/action_icon_scan.xml new file mode 100644 index 0000000..52a87a5 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_scan.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/action_icon_subscribe.xml b/app/src/main/res/drawable/action_icon_subscribe.xml new file mode 100644 index 0000000..6c2e2b7 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_subscribe.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/action_icon_subscribe_disable.xml b/app/src/main/res/drawable/action_icon_subscribe_disable.xml new file mode 100644 index 0000000..bda9864 --- /dev/null +++ b/app/src/main/res/drawable/action_icon_subscribe_disable.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 30bf963..f768434 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -33,12 +33,13 @@ \ No newline at end of file