Skip to content

Commit c1998d2

Browse files
committed
Fix large screen widget charging time text alignment + remove decimal on power level when fast charging
1 parent 4098d69 commit c1998d2

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

src/app.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
getChargingIcon,
1717
dateStringOptions,
1818
getChargeCompletionString,
19+
getChargingPowerString,
1920
} from 'lib/util'
2021

2122
interface updatingActions {
@@ -264,7 +265,7 @@ const pageIcons = connect(
264265
const lastSeen = new Date(lastUpdated)
265266
const batteryIcon = isCharging ? 'charging' : 'not-charging'
266267
const batteryText = 'Not Charging'
267-
const chargingPowerText = chargingPower > 0 ? `${chargingPower.toFixed(1).toString()} kW` : '- kW'
268+
const chargingPowerText = getChargingPowerString(chargingPower)
268269
let chargingPowerTextRowPercentage = '25%'
269270

270271
// annoying but impacts UI fairly significantly.

src/lib/util.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,13 @@ export const dateStringOptions = {
112112
// minute: '2-digit',
113113
// } as Intl.DateTimeFormatOptions
114114

115+
export function getChargingPowerString(chargingPower: number): string {
116+
if (chargingPower === 0) return '-'
117+
// if DC charging (power above 11kw) then drop any decimal
118+
const power = chargingPower >= 12 ? chargingPower.toFixed(0) : chargingPower.toFixed(1)
119+
return `${power} kW`
120+
}
121+
115122
export function getChargeCompletionString(
116123
dateFrom: Date,
117124
minutes: number,

src/widget.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
getChargingIcon,
66
dateStringOptions,
77
getChargeCompletionString,
8+
getChargingPowerString,
89
sleep,
910
} from './lib/util'
1011
import { Bluelink, Status } from './lib/bluelink-regions/base'
@@ -281,7 +282,7 @@ export async function createMediumWidget(config: Config, bl: Bluelink) {
281282
const isPluggedIn = status.status.isPluggedIn
282283
const batteryPercent = status.status.soc
283284
const remainingChargingTime = status.status.remainingChargeTimeMins
284-
const chargingKw = status.status.chargingPower > 0 ? `${status.status.chargingPower.toFixed(1).toString()} kW` : '-'
285+
const chargingKw = getChargingPowerString(status.status.chargingPower)
285286
const odometer =
286287
status.car.odometer === undefined
287288
? status.status.odometer
@@ -413,7 +414,7 @@ export async function createSmallWidget(config: Config, bl: Bluelink) {
413414
const isPluggedIn = status.status.isPluggedIn
414415
const batteryPercent = status.status.soc
415416
const remainingChargingTime = status.status.remainingChargeTimeMins
416-
const chargingKw = status.status.chargingPower > 0 ? `${status.status.chargingPower.toFixed(1).toString()} kW` : '-'
417+
const chargingKw = getChargingPowerString(status.status.chargingPower)
417418
const lastSeen = new Date(status.status.lastRemoteStatusCheck)
418419

419420
// Battery Percent Value
@@ -536,15 +537,17 @@ export async function createHomeScreenRectangleWidget(config: Config, bl: Blueli
536537

537538
// Battery Percent Value
538539
const batteryPercentStack = batteryInfoStack.addStack()
540+
batteryPercentStack.centerAlignContent()
539541
batteryPercentStack.addSpacer()
540542
const chargingIcon = getChargingIcon(isCharging, isPluggedIn, true)
541543
if (chargingIcon) {
542544
const chargingElement = batteryPercentStack.addImage(await getTintedIconAsync(chargingIcon))
543545
chargingElement.tintColor = new Color('#ffffff')
544546
chargingElement.imageSize = new Size(15, 15)
547+
chargingElement.rightAlignImage()
545548
}
546549

547-
batteryPercentStack.addSpacer(5)
550+
batteryPercentStack.addSpacer(3)
548551
const batteryPercentText = batteryPercentStack.addText(`${batteryPercent.toString()}%`)
549552
batteryPercentText.textColor = getBatteryPercentColor(status.status.soc)
550553
batteryPercentText.font = Font.boldSystemFont(15)
@@ -553,20 +556,18 @@ export async function createHomeScreenRectangleWidget(config: Config, bl: Blueli
553556
const chargeComplete = getChargeCompletionString(lastSeen, remainingChargingTime, 'short', true)
554557
const batteryChargingTimeStack = batteryInfoStack.addStack()
555558

556-
// bug in dynamic spacing means we set a small size if lenght of string is > 7
557-
if (chargeComplete.length > 7) {
558-
batteryChargingTimeStack.addSpacer(5)
559-
} else {
559+
// bug in dynamic spacing means we only set spacing if string is less than 10 characters
560+
if (chargeComplete.length < 10) {
560561
batteryChargingTimeStack.addSpacer()
561562
}
562563

563564
const chargingTimeIconElement = batteryChargingTimeStack.addImage(SFSymbol.named('clock.fill').image)
564565
chargingTimeIconElement.tintColor = new Color('#ffffff')
565-
chargingTimeIconElement.imageSize = new Size(15, 15)
566+
chargingTimeIconElement.imageSize = new Size(14, 14)
566567
batteryChargingTimeStack.addSpacer(3)
567568

568569
const chargingTimeElement = batteryChargingTimeStack.addText(`${chargeComplete}`)
569-
chargingTimeElement.font = Font.mediumSystemFont(12)
570+
chargingTimeElement.font = Font.mediumMonospacedSystemFont(12)
570571
chargingTimeElement.textOpacity = 0.9
571572
chargingTimeElement.textColor = Color.white()
572573
chargingTimeElement.rightAlignText()

0 commit comments

Comments
 (0)