Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
android:name="io.hammerhead.karooext.MANIFEST_URL"
android:value="https://github.com/valterc/ki2/releases/latest/download/manifest.json" />

<receiver android:name="com.valterc.ki2.receivers.ChangeShiftModeReceiver" />
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import android.content.Context
import androidx.compose.ui.unit.DpSize
import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
import androidx.glance.appwidget.GlanceRemoteViews
import androidx.glance.appwidget.action.actionSendBroadcast
import com.valterc.ki2.data.connection.ConnectionInfo
import com.valterc.ki2.data.device.DeviceId
import com.valterc.ki2.data.shifting.ShiftingInfo
import com.valterc.ki2.karoo.Ki2ExtensionContext
import com.valterc.ki2.karoo.datatypes.views.NotAvailable
import com.valterc.ki2.karoo.datatypes.views.TextView
import com.valterc.ki2.karoo.datatypes.views.Waiting
import com.valterc.ki2.receivers.ChangeShiftModeReceiver
import io.hammerhead.karooext.extension.DataTypeImpl
import io.hammerhead.karooext.internal.ViewEmitter
import io.hammerhead.karooext.models.ShowCustomStreamState
Expand All @@ -26,6 +28,7 @@ class ShiftingModeDataType(private val extensionContext: Ki2ExtensionContext) :
DataTypeImpl(extensionContext.extension, "DATATYPE_SHIFTING_MODE") {

private val glance = GlanceRemoteViews()
private var deviceId: DeviceId? = null
private var connectionInfo: ConnectionInfo? = null
private var shiftingInfo: ShiftingInfo? = null

Expand All @@ -34,7 +37,8 @@ class ShiftingModeDataType(private val extensionContext: Ki2ExtensionContext) :
emitter.onNext(ShowCustomStreamState(message = "", color = null))

val connectionInfoListener =
BiConsumer<DeviceId, ConnectionInfo> { _: DeviceId, connectionInfo: ConnectionInfo ->
BiConsumer<DeviceId, ConnectionInfo> { deviceId: DeviceId, connectionInfo: ConnectionInfo ->
this.deviceId = deviceId
this.connectionInfo = connectionInfo
CoroutineScope(Dispatchers.IO).launch {
emitViewUpdate(context, config, emitter)
Expand Down Expand Up @@ -68,13 +72,16 @@ class ShiftingModeDataType(private val extensionContext: Ki2ExtensionContext) :

private suspend fun emitViewUpdate(context: Context, config: ViewConfig, emitter: ViewEmitter) {
val shiftingInfo = shiftingInfo
val deviceId = deviceId

val compositionResult =
if (connectionInfo?.isConnected == true && shiftingInfo != null) {
if (deviceId != null && connectionInfo?.isConnected == true && shiftingInfo != null) {
glance.compose(context, DpSize.Unspecified) {
TextView(
shiftingInfo.shiftingMode.mode,
config.alignment,
config.textSize
config.textSize,
actionSendBroadcast(ChangeShiftModeReceiver.getIntent(context, deviceId))
)
}
} else if (connectionInfo?.isClosed == true) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ fun NotAvailable(
Box(
modifier = GlanceModifier
.fillMaxSize()
.padding(5.dp),
.padding(5.dp, 0.dp),
contentAlignment = Alignment(
vertical = Alignment.Vertical.CenterVertically,
horizontal = when (dataAlignment) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceModifier
import androidx.glance.action.Action
import androidx.glance.action.clickable
import androidx.glance.appwidget.background
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Alignment
Expand All @@ -24,12 +26,19 @@ import io.hammerhead.karooext.models.ViewConfig
fun TextView(
text: String? = "",
dataAlignment: ViewConfig.Alignment = ViewConfig.Alignment.RIGHT,
fontSize: Int = 50
fontSize: Int = 50,
action: Action? = null,
) {
var boxModifier = GlanceModifier
.fillMaxSize()
.padding(start = 5.dp, top = 0.dp, end = 5.dp, bottom = 0.dp)

if (action != null) {
boxModifier = boxModifier.clickable(action)
}

Box(
modifier = GlanceModifier
.fillMaxSize()
.padding(start = 5.dp, top = 0.dp, end = 5.dp, bottom = 0.dp),
modifier = boxModifier,
contentAlignment = Alignment(
vertical = Alignment.Vertical.CenterVertically,
horizontal = when (dataAlignment) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ fun Waiting(
Box(
modifier = GlanceModifier
.fillMaxSize()
.padding(5.dp),
.padding(5.dp, 0.dp),
contentAlignment = Alignment(
vertical = Alignment.Vertical.CenterVertically,
horizontal = when (dataAlignment) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.valterc.ki2.receivers

import android.content.BroadcastReceiver
import android.content.Context
import com.valterc.ki2.data.device.DeviceId
import com.valterc.ki2.services.IKi2Service
import com.valterc.ki2.services.Ki2Service
import timber.log.Timber

class BroadcastReceiverServiceClient {

private var service: IKi2Service? = null

constructor(context: Context, broadcastReceiver: BroadcastReceiver) {
val binder = broadcastReceiver.peekService(context, Ki2Service.getIntent())
service = IKi2Service.Stub.asInterface(binder)
Timber.i("Peek service: %s", service != null)
}

fun changeShiftMode(deviceId: DeviceId): Boolean {
service?.let { service ->
try {
service.changeShiftMode(deviceId)
return true
} catch (e: Exception) {
Timber.e(e, "Error changing shift mode for device %s", deviceId)
}
}

return false
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.valterc.ki2.receivers

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.valterc.ki2.data.device.DeviceId
import timber.log.Timber

@Suppress("DEPRECATION")
class ChangeShiftModeReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {
try {
val serviceClient = BroadcastReceiverServiceClient(context, this)
val deviceId = intent.extras?.getParcelable<DeviceId>(DEVICE_ID_KEY)
Timber.i("Received intent to change shift mode for device: %s", deviceId)
deviceId?.let { deviceId ->
serviceClient.changeShiftMode(deviceId)
}
} catch (e: Exception) {
Timber.e(e, "Error when receiving broadcast to change shift mode")
}
}

companion object {
const val DEVICE_ID_KEY = "DeviceId"

fun getIntent(context: Context, deviceId: DeviceId): Intent {
return Intent(context, ChangeShiftModeReceiver::class.java).apply {
putExtra(DEVICE_ID_KEY, deviceId)
}
}
}
}
2 changes: 1 addition & 1 deletion app/src/main/res/xml/karoo_extension_info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
typeId="DATATYPE_SHIFTING_BATTERY_PERCENTAGE" />

<DataType
description="Shifting mode."
description="Shifting mode. Pressing the text will change the shifting mode."
displayName="Shifting Mode"
graphical="true"
icon="@drawable/ic_hh_gear"
Expand Down