diff --git a/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt b/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt index 011096c874ea9ba3a3534fe4e353c11ec38a6199..8ac75d7562a26dd1c96a77cdf92d683ec42c9e56 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt @@ -31,9 +31,6 @@ import de.ccc.events.badge.card10.FILE_SERVICE_UUID import de.ccc.events.badge.card10.R import de.ccc.events.badge.card10.filetransfer.LowEffortService import de.ccc.events.badge.card10.time.Card10Service -import java.lang.IllegalStateException -import java.lang.NullPointerException -import java.util.* private const val TAG = "ConnectionService" @@ -127,9 +124,7 @@ object ConnectionService { override fun onMtuChanged(gatt: BluetoothGatt?, newMtu: Int, status: Int) { Log.d(TAG, "MTU changed to: $newMtu") - if (gatt == null) { - throw IllegalStateException() - } + checkNotNull(gatt) mtu = newMtu - 3 // Very precise science @@ -143,10 +138,8 @@ object ConnectionService { characteristic: BluetoothGattCharacteristic?, status: Int ) { - if (gatt == null || characteristic == null) { - throw IllegalStateException() - } - + checkNotNull(gatt) + checkNotNull(characteristic) connection = gatt gattListeners.values.map { it.onCharacteristicWrite(characteristic, status) } @@ -155,9 +148,8 @@ object ConnectionService { override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) { connection = gatt - if (gatt == null || characteristic == null) { - throw IllegalStateException() - } + checkNotNull(gatt) + checkNotNull(characteristic) gattListeners.values.map { it.onCharacteristicChanged(characteristic) } } diff --git a/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt b/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt index f9224c5e68a627da2225ad00f5a02aaa5accf3ba..0723cec73ea7e4ca898d1c6d1d9b7c1d26a68b2b 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt @@ -27,33 +27,33 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import de.ccc.events.badge.card10.PersonalState import de.ccc.events.badge.card10.R import de.ccc.events.badge.card10.common.ConnectionService -import de.ccc.events.badge.card10.time.Card10Service import kotlinx.android.synthetic.main.mood_fragment.* class MoodFragment : Fragment() { - private var card10Service: Card10Service? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - card10Service = ConnectionService.card10Service - } + private val card10Service = ConnectionService.card10Service override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.mood_fragment, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - mood_good.setOnClickListener{ - card10Service?.setRocketValue(ubyteArrayOf(0xffu, 0x00u, 0x00u).toByteArray()) + mood_congress.setOnClickListener{ + card10Service?.setPersonalState(PersonalState.CHAOS) + } + mood_chaos.setOnClickListener{ + card10Service?.setPersonalState(PersonalState.COMMUNICATION) + } + mood_congress.setOnClickListener{ + card10Service?.setPersonalState(PersonalState.CAMP) } - mood_neutral.setOnClickListener{ - card10Service?.setRocketValue(ubyteArrayOf(0x00u, 0xffu, 0x00u).toByteArray()) + no_contact.setOnClickListener{ + card10Service?.setPersonalState(PersonalState.NO_CONTACT) } - mood_bad.setOnClickListener{ - card10Service?.setRocketValue(ubyteArrayOf(0x00u, 0x00u, 0xffu).toByteArray()) + no_contact.setOnClickListener{ + card10Service?.setPersonalState(PersonalState.NONE) } } } diff --git a/app/src/main/java/de/ccc/events/badge/card10/time/Card10Service.kt b/app/src/main/java/de/ccc/events/badge/card10/time/Card10Service.kt index db1501c62425951bcb5f367a34fd02aea30469b6..13bf87028d4a51d6f88fcf2c388ff33e3c821252 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/time/Card10Service.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/time/Card10Service.kt @@ -24,9 +24,7 @@ package de.ccc.events.badge.card10.time import android.bluetooth.BluetoothGattCharacteristic import android.bluetooth.BluetoothGattService -import de.ccc.events.badge.card10.LEDS_ABOVE_CHARACTERISTIC_UUID -import de.ccc.events.badge.card10.ROCKETS_CHARACTERISTIC_UUID -import de.ccc.events.badge.card10.TIME_CHARACTERISTIC_UUID +import de.ccc.events.badge.card10.* import de.ccc.events.badge.card10.common.ConnectionService import java.nio.ByteBuffer @@ -35,12 +33,16 @@ class Card10Service( ) { private val timeCharacteristic = service.getCharacteristic(TIME_CHARACTERISTIC_UUID) private val rocketsCharacteristic = service.getCharacteristic(ROCKETS_CHARACTERISTIC_UUID) - private var ledsAboveCharacteristic = service.getCharacteristic(LEDS_ABOVE_CHARACTERISTIC_UUID) + private val ledsAboveCharacteristic = service.getCharacteristic(LEDS_ABOVE_CHARACTERISTIC_UUID) + private val personalStateCharacteristic = service.getCharacteristic(PERSONAL_STATE_CHARACTERISTIC_UUID) + init { timeCharacteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE rocketsCharacteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE ledsAboveCharacteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE + personalStateCharacteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE + } fun setTime() { @@ -59,4 +61,10 @@ class Card10Service( ledsAboveCharacteristic.value = value ConnectionService.writeCharacteristic(ledsAboveCharacteristic) } + + fun setPersonalState(value: PersonalState) { + personalStateCharacteristic.value = ByteArray(1) + personalStateCharacteristic.value[0] = value.v + ConnectionService.writeCharacteristic(personalStateCharacteristic) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/mood_fragment.xml b/app/src/main/res/layout/mood_fragment.xml index ce9e4f30b397c4c580879b703a9dce313b0341cd..ee8f213892a372c8007b0e30d1320f8720a13284 100644 --- a/app/src/main/res/layout/mood_fragment.xml +++ b/app/src/main/res/layout/mood_fragment.xml @@ -8,11 +8,15 @@ android:padding="16dp" > <TextView android:layout_width="wrap_content" - android:layout_height="wrap_content" android:text="Mood"/> - <Button android:id="@+id/mood_good" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Good"/> - <Button android:id="@+id/mood_neutral" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Neutral"/> - <Button android:id="@+id/mood_bad" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Bad"/> + android:layout_height="wrap_content" android:text="@string/personal_state"/> + <Button android:id="@+id/mood_chaos" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:text="@string/chaos"/> + <Button android:id="@+id/mood_communication" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:text="@string/communication"/> + <Button android:id="@+id/mood_congress" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:text="@string/congress"/> + <Button android:id="@+id/no_contact" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:text="@string/no_contact"/> + <Button android:id="@+id/no_state" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:text="@string/off"/> </LinearLayout> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 15ca45bfa675ecc8dd94eea2e0dacaf0694e6d29..ae99bfcb225bdad0e491dc11d20eaa77eab835eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,4 +44,10 @@ <string name="connection_error_generic">Connection error</string> <string name="connection_error_no_bonded_device">No bonded card10s available</string> + <string name="personal_state">Personal State</string> + <string name="chaos">Chaos</string> + <string name="communication">Communication</string> + <string name="congress">Congress</string> + <string name="no_contact">No Contact</string> + <string name="off">Off</string> </resources>