Merge pull request #2939 from Philoul/wear/new_custom_watchface
Wear CWF Several improvement for preferences integration + AAPS V2 replacement
This commit is contained in:
commit
9b2473fa1b
|
@ -170,7 +170,8 @@ enum class CwfMetadataKey(val key: String, @StringRes val label: Int, val isPref
|
||||||
CWF_PREF_WATCH_SHOW_AGO("key_show_ago", R.string.pref_show_ago, true),
|
CWF_PREF_WATCH_SHOW_AGO("key_show_ago", R.string.pref_show_ago, true),
|
||||||
CWF_PREF_WATCH_SHOW_BG("key_show_bg", R.string.pref_show_bg, true),
|
CWF_PREF_WATCH_SHOW_BG("key_show_bg", R.string.pref_show_bg, true),
|
||||||
CWF_PREF_WATCH_SHOW_LOOP_STATUS("key_show_loop_status", R.string.pref_show_loop_status, true),
|
CWF_PREF_WATCH_SHOW_LOOP_STATUS("key_show_loop_status", R.string.pref_show_loop_status, true),
|
||||||
CWF_PREF_WATCH_SHOW_WEEK_NUMBER("key_show_week_number", R.string.pref_show_week_number, true);
|
CWF_PREF_WATCH_SHOW_WEEK_NUMBER("key_show_week_number", R.string.pref_show_week_number, true),
|
||||||
|
CWF_PREF_WATCH_SHOW_DATE("key_show_date", R.string.pref_show_date, true);
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
@ -260,6 +261,7 @@ enum class JsonKeys(val key: String) {
|
||||||
INVALIDIMAGE("invalidImage"),
|
INVALIDIMAGE("invalidImage"),
|
||||||
INVALIDCOLOR("invalidColor"),
|
INVALIDCOLOR("invalidColor"),
|
||||||
INVALIDFONTCOLOR("invalidFontColor"),
|
INVALIDFONTCOLOR("invalidFontColor"),
|
||||||
|
INVALIDTEXTSIZE("invalidTextSize"),
|
||||||
TWINVIEW("twinView"),
|
TWINVIEW("twinView"),
|
||||||
TOPOFFSETTWINHIDDEN("topOffsetTwinHidden"),
|
TOPOFFSETTWINHIDDEN("topOffsetTwinHidden"),
|
||||||
LEFTOFFSETTWINHIDDEN("leftOffsetTwinHidden"),
|
LEFTOFFSETTWINHIDDEN("leftOffsetTwinHidden"),
|
||||||
|
|
|
@ -66,6 +66,7 @@
|
||||||
<string name="pref_show_direction_arrow">Show Direction Arrow</string>
|
<string name="pref_show_direction_arrow">Show Direction Arrow</string>
|
||||||
<string name="pref_show_ago">Show Ago</string>
|
<string name="pref_show_ago">Show Ago</string>
|
||||||
<string name="pref_show_week_number">Show Week number</string>
|
<string name="pref_show_week_number">Show Week number</string>
|
||||||
|
<string name="pref_show_date">Show Date</string>
|
||||||
<string name="default_custom_watchface_comment">Default watchface, you can click on EXPORT WATCHFACE button to generate a template</string>
|
<string name="default_custom_watchface_comment">Default watchface, you can click on EXPORT WATCHFACE button to generate a template</string>
|
||||||
<string name="wear_default_watchface">Default Watchface</string>
|
<string name="wear_default_watchface">Default Watchface</string>
|
||||||
<string name="cwf_comment_background">Background image</string>
|
<string name="cwf_comment_background">Background image</string>
|
||||||
|
|
BIN
plugins/configuration/src/main/assets/AAPS V2.zip
Normal file
BIN
plugins/configuration/src/main/assets/AAPS V2.zip
Normal file
Binary file not shown.
|
@ -95,31 +95,6 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service
|
|
||||||
android:name=".watchfaces.AapsV2Watchface"
|
|
||||||
android:allowEmbedded="true"
|
|
||||||
android:exported="false"
|
|
||||||
android:label="@string/label_watchface_v2"
|
|
||||||
android:permission="android.permission.BIND_WALLPAPER">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.service.wallpaper"
|
|
||||||
android:resource="@xml/watch_face" />
|
|
||||||
<meta-data
|
|
||||||
android:name="com.google.android.wearable.watchface.preview"
|
|
||||||
android:resource="@drawable/watchface_graph_2" />
|
|
||||||
<meta-data
|
|
||||||
android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
|
|
||||||
android:value="watch_face_configuration_home2" />
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.service.wallpaper.WallpaperService" />
|
|
||||||
<category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
|
|
||||||
|
|
||||||
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
|
|
||||||
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
|
|
||||||
</intent-filter>
|
|
||||||
</service>
|
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".watchfaces.AapsLargeWatchface"
|
android:name=".watchfaces.AapsLargeWatchface"
|
||||||
android:allowEmbedded="true"
|
android:allowEmbedded="true"
|
||||||
|
@ -602,7 +577,6 @@
|
||||||
<action android:name="watch_face_configuration_custom" />
|
<action android:name="watch_face_configuration_custom" />
|
||||||
<action android:name="watch_face_configuration_digitalstyle" />
|
<action android:name="watch_face_configuration_digitalstyle" />
|
||||||
<action android:name="watch_face_configuration_home" />
|
<action android:name="watch_face_configuration_home" />
|
||||||
<action android:name="watch_face_configuration_home2" />
|
|
||||||
<action android:name="watch_face_configuration_largehome" />
|
<action android:name="watch_face_configuration_largehome" />
|
||||||
<action android:name="watch_face_configuration_nochart" />
|
<action android:name="watch_face_configuration_nochart" />
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ import app.aaps.wear.tile.QuickWizardTileService
|
||||||
import app.aaps.wear.tile.TempTargetTileService
|
import app.aaps.wear.tile.TempTargetTileService
|
||||||
import app.aaps.wear.tile.TileBase
|
import app.aaps.wear.tile.TileBase
|
||||||
import app.aaps.wear.watchfaces.AapsLargeWatchface
|
import app.aaps.wear.watchfaces.AapsLargeWatchface
|
||||||
import app.aaps.wear.watchfaces.AapsV2Watchface
|
|
||||||
import app.aaps.wear.watchfaces.AapsWatchface
|
import app.aaps.wear.watchfaces.AapsWatchface
|
||||||
import app.aaps.wear.watchfaces.BigChartWatchface
|
import app.aaps.wear.watchfaces.BigChartWatchface
|
||||||
import app.aaps.wear.watchfaces.CircleWatchface
|
import app.aaps.wear.watchfaces.CircleWatchface
|
||||||
|
@ -53,7 +52,6 @@ abstract class WearServicesModule {
|
||||||
|
|
||||||
@ContributesAndroidInjector abstract fun contributesBaseWatchFace(): BaseWatchFace
|
@ContributesAndroidInjector abstract fun contributesBaseWatchFace(): BaseWatchFace
|
||||||
@ContributesAndroidInjector abstract fun contributesAapsWatchface(): AapsWatchface
|
@ContributesAndroidInjector abstract fun contributesAapsWatchface(): AapsWatchface
|
||||||
@ContributesAndroidInjector abstract fun contributesAapsV2Watchface(): AapsV2Watchface
|
|
||||||
@ContributesAndroidInjector abstract fun contributesAapsLargeWatchface(): AapsLargeWatchface
|
@ContributesAndroidInjector abstract fun contributesAapsLargeWatchface(): AapsLargeWatchface
|
||||||
@ContributesAndroidInjector abstract fun contributesDigitalStyleWatchface(): DigitalStyleWatchface
|
@ContributesAndroidInjector abstract fun contributesDigitalStyleWatchface(): DigitalStyleWatchface
|
||||||
@ContributesAndroidInjector abstract fun contributesBIGChart(): BigChartWatchface
|
@ContributesAndroidInjector abstract fun contributesBIGChart(): BigChartWatchface
|
||||||
|
|
|
@ -1,172 +0,0 @@
|
||||||
package app.aaps.wear.watchfaces
|
|
||||||
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import androidx.annotation.ColorInt
|
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.viewbinding.ViewBinding
|
|
||||||
import app.aaps.wear.R
|
|
||||||
import app.aaps.wear.databinding.ActivityHome2Binding
|
|
||||||
import app.aaps.wear.watchfaces.utils.BaseWatchFace
|
|
||||||
import com.ustwo.clockwise.common.WatchMode
|
|
||||||
|
|
||||||
class AapsV2Watchface : BaseWatchFace() {
|
|
||||||
|
|
||||||
private lateinit var binding: ActivityHome2Binding
|
|
||||||
|
|
||||||
override fun inflateLayout(inflater: LayoutInflater): ViewBinding {
|
|
||||||
binding = ActivityHome2Binding.inflate(inflater)
|
|
||||||
return binding
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setColorDark() {
|
|
||||||
@ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK
|
|
||||||
@ColorInt val dividerBatteryOkColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)
|
|
||||||
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)
|
|
||||||
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
|
|
||||||
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
|
|
||||||
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
|
|
||||||
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
setTextSizes()
|
|
||||||
val color = when (singleBg.sgvLevel) {
|
|
||||||
1L -> R.color.dark_highColor
|
|
||||||
0L -> R.color.dark_midColor
|
|
||||||
-1L -> R.color.dark_lowColor
|
|
||||||
else -> R.color.dark_midColor
|
|
||||||
}
|
|
||||||
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
|
|
||||||
binding.direction.setTextColor(ContextCompat.getColor(this, color))
|
|
||||||
|
|
||||||
val colorTime = if (ageLevel == 1) R.color.dark_midColor else R.color.dark_TimestampOld
|
|
||||||
binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime))
|
|
||||||
val colourBat = if (status.batteryLevel == 1) dividerBatteryOkColor else ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)
|
|
||||||
binding.uploaderBattery.setTextColor(colourBat)
|
|
||||||
|
|
||||||
binding.rigBattery.setTextColor(dividerTxtColor)
|
|
||||||
binding.delta.setTextColor(dividerTxtColor)
|
|
||||||
binding.avgDelta.setTextColor(dividerTxtColor)
|
|
||||||
binding.basalRate.setTextColor(dividerTxtColor)
|
|
||||||
binding.bgi.setTextColor(dividerTxtColor)
|
|
||||||
when (loopLevel) {
|
|
||||||
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
|
|
||||||
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
|
|
||||||
else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25)
|
|
||||||
}
|
|
||||||
|
|
||||||
highColor = ContextCompat.getColor(this, R.color.dark_highColor)
|
|
||||||
lowColor = ContextCompat.getColor(this, R.color.dark_lowColor)
|
|
||||||
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
|
|
||||||
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
|
|
||||||
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark)
|
|
||||||
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light)
|
|
||||||
pointSize = 2
|
|
||||||
setupCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setColorLowRes() {
|
|
||||||
@ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK
|
|
||||||
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)
|
|
||||||
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
|
|
||||||
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
|
|
||||||
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background))
|
|
||||||
binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
|
|
||||||
binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.direction.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp))
|
|
||||||
binding.delta.setTextColor(dividerTxtColor)
|
|
||||||
binding.avgDelta.setTextColor(dividerTxtColor)
|
|
||||||
binding.rigBattery.setTextColor(dividerTxtColor)
|
|
||||||
binding.uploaderBattery.setTextColor(dividerTxtColor)
|
|
||||||
binding.basalRate.setTextColor(dividerTxtColor)
|
|
||||||
binding.bgi.setTextColor(dividerTxtColor)
|
|
||||||
binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor))
|
|
||||||
binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime))
|
|
||||||
|
|
||||||
highColor = ContextCompat.getColor(this, R.color.dark_midColor)
|
|
||||||
lowColor = ContextCompat.getColor(this, R.color.dark_midColor)
|
|
||||||
midColor = ContextCompat.getColor(this, R.color.dark_midColor)
|
|
||||||
gridColor = ContextCompat.getColor(this, R.color.dark_gridColor)
|
|
||||||
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres)
|
|
||||||
basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres)
|
|
||||||
pointSize = 2
|
|
||||||
setupCharts()
|
|
||||||
|
|
||||||
setTextSizes()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setColorBright() {
|
|
||||||
if (currentWatchMode == WatchMode.INTERACTIVE) {
|
|
||||||
@ColorInt val dividerTxtColor = if (dividerMatchesBg) Color.BLACK else ContextCompat.getColor(this, R.color.dark_midColor)
|
|
||||||
@ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)
|
|
||||||
binding.secondaryLayout.setBackgroundColor(dividerBgColor)
|
|
||||||
binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background))
|
|
||||||
binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background))
|
|
||||||
binding.time.setTextColor(Color.BLACK)
|
|
||||||
binding.iob1.setTextColor(Color.BLACK)
|
|
||||||
binding.iob2.setTextColor(Color.BLACK)
|
|
||||||
binding.cob1.setTextColor(Color.BLACK)
|
|
||||||
binding.cob2.setTextColor(Color.BLACK)
|
|
||||||
binding.day.setTextColor(Color.BLACK)
|
|
||||||
binding.month.setTextColor(Color.BLACK)
|
|
||||||
binding.loop.setTextColor(Color.BLACK)
|
|
||||||
setTextSizes()
|
|
||||||
val color = when (singleBg.sgvLevel) {
|
|
||||||
1L -> R.color.light_highColor
|
|
||||||
0L -> R.color.light_midColor
|
|
||||||
-1L -> R.color.light_lowColor
|
|
||||||
else -> R.color.light_midColor
|
|
||||||
}
|
|
||||||
binding.sgv.setTextColor(ContextCompat.getColor(this, color))
|
|
||||||
binding.direction.setTextColor(ContextCompat.getColor(this, color))
|
|
||||||
val colorTime = if (ageLevel == 1) Color.BLACK else Color.RED
|
|
||||||
binding.timestamp.setTextColor(colorTime)
|
|
||||||
val colourBat = if (status.batteryLevel == 1) dividerTxtColor else Color.RED
|
|
||||||
binding.uploaderBattery.setTextColor(colourBat)
|
|
||||||
binding.rigBattery.setTextColor(dividerTxtColor)
|
|
||||||
binding.delta.setTextColor(dividerTxtColor)
|
|
||||||
binding.avgDelta.setTextColor(dividerTxtColor)
|
|
||||||
binding.basalRate.setTextColor(dividerTxtColor)
|
|
||||||
binding.bgi.setTextColor(dividerTxtColor)
|
|
||||||
when (loopLevel) {
|
|
||||||
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
|
|
||||||
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
|
|
||||||
else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25)
|
|
||||||
}
|
|
||||||
|
|
||||||
highColor = ContextCompat.getColor(this, R.color.light_highColor)
|
|
||||||
lowColor = ContextCompat.getColor(this, R.color.light_lowColor)
|
|
||||||
midColor = ContextCompat.getColor(this, R.color.light_midColor)
|
|
||||||
gridColor = ContextCompat.getColor(this, R.color.light_gridColor)
|
|
||||||
basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light)
|
|
||||||
basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark)
|
|
||||||
pointSize = 2
|
|
||||||
setupCharts()
|
|
||||||
|
|
||||||
} else {
|
|
||||||
setColorDark()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setTextSizes() {
|
|
||||||
if (detailedIob) {
|
|
||||||
binding.iob1.textSize = 14f
|
|
||||||
binding.iob2.textSize = 10f
|
|
||||||
} else {
|
|
||||||
binding.iob1.textSize = 10f
|
|
||||||
binding.iob2.textSize = 14f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -106,15 +106,15 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
|
|
||||||
override fun setColorDark() {
|
override fun setColorDark() {
|
||||||
setWatchfaceStyle()
|
setWatchfaceStyle()
|
||||||
if ((ViewMap.SGV.dynData?.stepFontColor ?: 0) == 0)
|
if ((ViewMap.SGV.dynData?.stepFontColor ?: 0) <= 0)
|
||||||
binding.sgv.setTextColor(bgColor)
|
binding.sgv.setTextColor(bgColor)
|
||||||
if ((ViewMap.DIRECTION.dynData?.stepColor ?: 0) == 0)
|
if ((ViewMap.DIRECTION.dynData?.stepColor ?: 0) <= 0)
|
||||||
binding.direction2.colorFilter = changeDrawableColor(bgColor)
|
binding.direction2.colorFilter = changeDrawableColor(bgColor)
|
||||||
if (ageLevel != 1 && (ViewMap.TIMESTAMP.dynData?.stepFontColor ?: 0) == 0)
|
if (ageLevel != 1 && (ViewMap.TIMESTAMP.dynData?.stepFontColor ?: 0) <= 0)
|
||||||
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld))
|
binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld))
|
||||||
if (status.batteryLevel != 1 && (ViewMap.UPLOADER_BATTERY.dynData?.stepFontColor ?: 0) == 0)
|
if (status.batteryLevel != 1 && (ViewMap.UPLOADER_BATTERY.dynData?.stepFontColor ?: 0) <= 0)
|
||||||
binding.uploaderBattery.setTextColor(lowBatColor)
|
binding.uploaderBattery.setTextColor(lowBatColor)
|
||||||
if ((ViewMap.LOOP.dynData?.stepDraw ?: 0) == 0) // Apply automatic background image only if no dynData or no step images
|
if ((ViewMap.LOOP.dynData?.stepDraw ?: 0) <= 0) // Apply automatic background image only if no dynData or no step images
|
||||||
when (loopLevel) {
|
when (loopLevel) {
|
||||||
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
|
-1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25)
|
||||||
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
|
1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25)
|
||||||
|
@ -393,10 +393,10 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
MINUTE(ViewKeys.MINUTE.key, R.id.minute),
|
MINUTE(ViewKeys.MINUTE.key, R.id.minute),
|
||||||
SECOND(ViewKeys.SECOND.key, R.id.second, R.string.key_show_seconds),
|
SECOND(ViewKeys.SECOND.key, R.id.second, R.string.key_show_seconds),
|
||||||
TIMEPERIOD(ViewKeys.TIMEPERIOD.key, R.id.timePeriod),
|
TIMEPERIOD(ViewKeys.TIMEPERIOD.key, R.id.timePeriod),
|
||||||
DAY_NAME(ViewKeys.DAY_NAME.key, R.id.day_name),
|
DAY_NAME(ViewKeys.DAY_NAME.key, R.id.day_name, R.string.key_show_date),
|
||||||
DAY(ViewKeys.DAY.key, R.id.day),
|
DAY(ViewKeys.DAY.key, R.id.day, R.string.key_show_date),
|
||||||
WEEKNUMBER(ViewKeys.WEEKNUMBER.key, R.id.week_number, R.string.key_show_week_number),
|
WEEKNUMBER(ViewKeys.WEEKNUMBER.key, R.id.week_number, R.string.key_show_week_number),
|
||||||
MONTH(ViewKeys.MONTH.key, R.id.month),
|
MONTH(ViewKeys.MONTH.key, R.id.month, R.string.key_show_date),
|
||||||
LOOP(ViewKeys.LOOP.key, R.id.loop, R.string.key_show_external_status),
|
LOOP(ViewKeys.LOOP.key, R.id.loop, R.string.key_show_external_status),
|
||||||
DIRECTION(ViewKeys.DIRECTION.key, R.id.direction2, R.string.key_show_direction),
|
DIRECTION(ViewKeys.DIRECTION.key, R.id.direction2, R.string.key_show_direction),
|
||||||
TIMESTAMP(ViewKeys.TIMESTAMP.key, R.id.timestamp, R.string.key_show_ago),
|
TIMESTAMP(ViewKeys.TIMESTAMP.key, R.id.timestamp, R.string.key_show_ago),
|
||||||
|
@ -507,7 +507,7 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
fun customizeTextView(view: TextView) {
|
fun customizeTextView(view: TextView) {
|
||||||
customizeViewCommon(view)
|
customizeViewCommon(view)
|
||||||
viewJson?.let { viewJson ->
|
viewJson?.let { viewJson ->
|
||||||
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, (viewJson.optInt(TEXTSIZE.key, 22) * cwf.zoomFactor).toFloat())
|
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, ((dynData?.getTextSize() ?: viewJson.optInt(TEXTSIZE.key, 22)) * cwf.zoomFactor).toFloat())
|
||||||
view.gravity = GravityMap.gravity(viewJson.optString(GRAVITY.key, GravityMap.CENTER.key))
|
view.gravity = GravityMap.gravity(viewJson.optString(GRAVITY.key, GravityMap.CENTER.key))
|
||||||
view.setTypeface(
|
view.setTypeface(
|
||||||
FontMap.font(viewJson.optString(FONT.key, FontMap.DEFAULT.key)),
|
FontMap.font(viewJson.optString(FONT.key, FontMap.DEFAULT.key)),
|
||||||
|
@ -673,6 +673,7 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
SHOW_BGI(CwfMetadataKey.CWF_PREF_WATCH_SHOW_BGI.key, R.string.key_show_bgi, true),
|
SHOW_BGI(CwfMetadataKey.CWF_PREF_WATCH_SHOW_BGI.key, R.string.key_show_bgi, true),
|
||||||
SHOW_LOOP_STATUS(CwfMetadataKey.CWF_PREF_WATCH_SHOW_LOOP_STATUS.key, R.string.key_show_external_status, true),
|
SHOW_LOOP_STATUS(CwfMetadataKey.CWF_PREF_WATCH_SHOW_LOOP_STATUS.key, R.string.key_show_external_status, true),
|
||||||
SHOW_WEEK_NUMBER(CwfMetadataKey.CWF_PREF_WATCH_SHOW_WEEK_NUMBER.key, R.string.key_show_week_number, true),
|
SHOW_WEEK_NUMBER(CwfMetadataKey.CWF_PREF_WATCH_SHOW_WEEK_NUMBER.key, R.string.key_show_week_number, true),
|
||||||
|
SHOW_DATE(CwfMetadataKey.CWF_PREF_WATCH_SHOW_DATE.key, R.string.key_show_date, true),
|
||||||
PREF_UNITS(JsonKeyValues.PREF_UNITS.key, R.string.key_units_mgdl, true),
|
PREF_UNITS(JsonKeyValues.PREF_UNITS.key, R.string.key_units_mgdl, true),
|
||||||
PREF_DARK(JsonKeyValues.PREF_DARK.key, R.string.key_dark, true),
|
PREF_DARK(JsonKeyValues.PREF_DARK.key, R.string.key_dark, true),
|
||||||
PREF_MATCH_DIVIDER(JsonKeyValues.PREF_MATCH_DIVIDER.key, R.string.key_match_divider, true);
|
PREF_MATCH_DIVIDER(JsonKeyValues.PREF_MATCH_DIVIDER.key, R.string.key_match_divider, true);
|
||||||
|
@ -727,16 +728,19 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
private val dynDrawable = mutableMapOf<Int, Drawable?>()
|
private val dynDrawable = mutableMapOf<Int, Drawable?>()
|
||||||
private val dynColor = mutableMapOf<Int, Int>()
|
private val dynColor = mutableMapOf<Int, Int>()
|
||||||
private val dynFontColor = mutableMapOf<Int, Int>()
|
private val dynFontColor = mutableMapOf<Int, Int>()
|
||||||
|
private val dynTextSize = mutableMapOf<Int, Int>()
|
||||||
private var dataRange: DataRange? = null
|
private var dataRange: DataRange? = null
|
||||||
private var topRange: DataRange? = null
|
private var topRange: DataRange? = null
|
||||||
private var leftRange: DataRange? = null
|
private var leftRange: DataRange? = null
|
||||||
private var rotationRange: DataRange? = null
|
private var rotationRange: DataRange? = null
|
||||||
val stepDraw: Int
|
val stepDraw: Int
|
||||||
get() = dynDrawable[0]?.let { dynDrawable.size - 1 } ?: dynDrawable.size
|
get() = dynDrawable.size - 1
|
||||||
val stepColor: Int
|
val stepColor: Int
|
||||||
get() = dynColor[0]?.let { dynColor.size - 1 } ?: dynColor.size
|
get() = dynColor[0]?.let { dynColor.size - 1 } ?: dynColor.size
|
||||||
val stepFontColor: Int
|
val stepFontColor: Int
|
||||||
get() = dynFontColor[0]?.let { dynFontColor.size - 1 } ?: dynFontColor.size
|
get() = dynFontColor[0]?.let { dynFontColor.size - 1 } ?: dynFontColor.size
|
||||||
|
val stepTextSize: Int
|
||||||
|
get() = dynTextSize[0]?.let { dynTextSize.size - 1 } ?: dynTextSize.size
|
||||||
|
|
||||||
val dataValue: Double?
|
val dataValue: Double?
|
||||||
get() = when (valueMap) {
|
get() = when (valueMap) {
|
||||||
|
@ -761,8 +765,9 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
fun getLeftOffset(): Int = dataRange?.let { dataRange -> leftRange?.let { leftRange -> dataValue?.let { (valueMap.dynValue(it, dataRange, leftRange) * cwf.zoomFactor).toInt() }
|
fun getLeftOffset(): Int = dataRange?.let { dataRange -> leftRange?.let { leftRange -> dataValue?.let { (valueMap.dynValue(it, dataRange, leftRange) * cwf.zoomFactor).toInt() }
|
||||||
?: (leftRange.invalidData * cwf.zoomFactor).toInt() } } ?: 0
|
?: (leftRange.invalidData * cwf.zoomFactor).toInt() } } ?: 0
|
||||||
fun getRotationOffset(): Int = dataRange?.let { dataRange -> rotationRange?.let { rotRange -> dataValue?.let { valueMap.dynValue(it, dataRange, rotRange) } ?: rotRange.invalidData } } ?: 0
|
fun getRotationOffset(): Int = dataRange?.let { dataRange -> rotationRange?.let { rotRange -> dataValue?.let { valueMap.dynValue(it, dataRange, rotRange) } ?: rotRange.invalidData } } ?: 0
|
||||||
fun getDrawable() = dataRange?.let { dataRange -> dataValue?.let { dynDrawable[valueMap.stepValue(it, dataRange, stepDraw)] } ?: dynDrawable[0] ?: dynDrawable[1] }
|
fun getDrawable() = dataRange?.let { dataRange -> dataValue?.let { dynDrawable[valueMap.stepValue(it, dataRange, stepDraw)] } ?: dynDrawable[0] }
|
||||||
fun getFontColor() = if (stepFontColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynFontColor[valueMap.stepValue(it, dataRange, stepFontColor)] } ?: dynFontColor[0] ?: dynFontColor[1] } else null
|
fun getFontColor() = if (stepFontColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynFontColor[valueMap.stepValue(it, dataRange, stepFontColor)] } ?: dynFontColor[0] ?: dynFontColor[1] } else null
|
||||||
|
fun getTextSize() = if (stepTextSize > 0) dataRange?.let { dataRange -> dataValue?.let { dynTextSize[valueMap.stepValue(it, dataRange, stepTextSize)] } ?: dynTextSize[0] ?: dynTextSize[1] } else null
|
||||||
fun getColor() = if (stepColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynColor[valueMap.stepValue(it, dataRange, stepColor)] } ?: dynColor[0] ?: dynColor[1] } else null
|
fun getColor() = if (stepColor > 0) dataRange?.let { dataRange -> dataValue?.let { dynColor[valueMap.stepValue(it, dataRange, stepColor)] } ?: dynColor[0] ?: dynColor[1] } else null
|
||||||
private fun load() {
|
private fun load() {
|
||||||
DataRange(dataJson.optDouble(MINDATA.key, valueMap.min), dataJson.optDouble(MAXDATA.key, valueMap.max)).let { defaultRange ->
|
DataRange(dataJson.optDouble(MINDATA.key, valueMap.min), dataJson.optDouble(MAXDATA.key, valueMap.max)).let { defaultRange ->
|
||||||
|
@ -792,6 +797,13 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
dynFontColor[idx] = cwf.getColor(dataJson.optString("${FONTCOLOR.key}$idx"))
|
dynFontColor[idx] = cwf.getColor(dataJson.optString("${FONTCOLOR.key}$idx"))
|
||||||
idx++
|
idx++
|
||||||
}
|
}
|
||||||
|
if (dataJson.has(INVALIDTEXTSIZE.key))
|
||||||
|
dynTextSize[0] = cwf.getColor(dataJson.optString(INVALIDTEXTSIZE.key))
|
||||||
|
idx = 1
|
||||||
|
while (dataJson.has("${TEXTSIZE.key}$idx")) {
|
||||||
|
dynTextSize[idx] = dataJson.optInt("${TEXTSIZE.key}$idx", 22)
|
||||||
|
idx++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -845,11 +857,12 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
valPref.clear()
|
valPref.clear()
|
||||||
dynPref.clear()
|
dynPref.clear()
|
||||||
dynJson?.keys()?.forEach { key ->
|
dynJson?.keys()?.forEach { key ->
|
||||||
dynJson.optJSONObject(key)?.let { buildDynPrefs(dynJson, it, key, mutableSetOf()) }
|
val targetJson = JSONObject()
|
||||||
|
dynJson.optJSONObject(key)?.let { buildDynPrefs(dynJson, targetJson, it, key, mutableSetOf()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildDynPrefs(dynJson: JSONObject, json: JSONObject, key: String, visitedKeys: MutableSet<String>) {
|
private fun buildDynPrefs(dynJson: JSONObject, targetJson: JSONObject, json: JSONObject, key: String, visitedKeys: MutableSet<String>) {
|
||||||
val prefKey = json.optString(PREFKEY.key)
|
val prefKey = json.optString(PREFKEY.key)
|
||||||
PrefMap.fromKey(prefKey)?.let { prefMap ->
|
PrefMap.fromKey(prefKey)?.let { prefMap ->
|
||||||
val value = valPref[prefMap.key]
|
val value = valPref[prefMap.key]
|
||||||
|
@ -858,16 +871,23 @@ class CustomWatchface : BaseWatchFace() {
|
||||||
}
|
}
|
||||||
json.optJSONObject(value)?.let { nextJson ->
|
json.optJSONObject(value)?.let { nextJson ->
|
||||||
if (nextJson.has(DYNPREF.key)) {
|
if (nextJson.has(DYNPREF.key)) {
|
||||||
|
nextJson.keys().forEach { key ->
|
||||||
|
if ( key != DYNPREF.key)
|
||||||
|
targetJson.putOpt(key, nextJson.opt(key))
|
||||||
|
}
|
||||||
val nextKey = nextJson.optString(DYNPREF.key)
|
val nextKey = nextJson.optString(DYNPREF.key)
|
||||||
if (nextKey.isNotEmpty() && nextKey !in visitedKeys) {
|
if (nextKey.isNotEmpty() && nextKey !in visitedKeys) {
|
||||||
visitedKeys += nextKey
|
visitedKeys += nextKey
|
||||||
dynJson.optJSONObject(nextKey)?.let {
|
dynJson.optJSONObject(nextKey)?.let {
|
||||||
buildDynPrefs(dynJson, it, key, visitedKeys)
|
buildDynPrefs(dynJson, targetJson, it, key, visitedKeys)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//aapsLogger.debug("XXXXX dynKey json $key $nextJson")
|
nextJson.keys().forEach { key ->
|
||||||
dynPref[key] = nextJson
|
if ( key != DYNPREF.key)
|
||||||
|
targetJson.putOpt(key, nextJson.opt(key))
|
||||||
|
}
|
||||||
|
dynPref[key] = targetJson
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import androidx.viewbinding.ViewBinding
|
||||||
import app.aaps.wear.databinding.ActivityBigchartBinding
|
import app.aaps.wear.databinding.ActivityBigchartBinding
|
||||||
import app.aaps.wear.databinding.ActivityCustomBinding
|
import app.aaps.wear.databinding.ActivityCustomBinding
|
||||||
import app.aaps.wear.databinding.ActivityDigitalstyleBinding
|
import app.aaps.wear.databinding.ActivityDigitalstyleBinding
|
||||||
import app.aaps.wear.databinding.ActivityHome2Binding
|
|
||||||
import app.aaps.wear.databinding.ActivityHomeBinding
|
import app.aaps.wear.databinding.ActivityHomeBinding
|
||||||
import app.aaps.wear.databinding.ActivityHomeLargeBinding
|
import app.aaps.wear.databinding.ActivityHomeLargeBinding
|
||||||
import app.aaps.wear.databinding.ActivityNochartBinding
|
import app.aaps.wear.databinding.ActivityNochartBinding
|
||||||
|
@ -15,7 +14,6 @@ import app.aaps.wear.databinding.ActivityNochartBinding
|
||||||
*/
|
*/
|
||||||
class WatchfaceViewAdapter(
|
class WatchfaceViewAdapter(
|
||||||
aL: ActivityHomeLargeBinding? = null,
|
aL: ActivityHomeLargeBinding? = null,
|
||||||
a2: ActivityHome2Binding? = null,
|
|
||||||
aa: ActivityHomeBinding? = null,
|
aa: ActivityHomeBinding? = null,
|
||||||
bC: ActivityBigchartBinding? = null,
|
bC: ActivityBigchartBinding? = null,
|
||||||
ds: ActivityDigitalstyleBinding? = null,
|
ds: ActivityDigitalstyleBinding? = null,
|
||||||
|
@ -24,7 +22,7 @@ class WatchfaceViewAdapter(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (aL == null && a2 == null && aa == null && bC == null && ds == null && nC == null && cU == null) {
|
if (aL == null && aa == null && bC == null && ds == null && nC == null && cU == null) {
|
||||||
throw IllegalArgumentException("Require at least on Binding parameter")
|
throw IllegalArgumentException("Require at least on Binding parameter")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,47 +31,46 @@ class WatchfaceViewAdapter(
|
||||||
|
|
||||||
// Required attributes
|
// Required attributes
|
||||||
val mainLayout =
|
val mainLayout =
|
||||||
aL?.mainLayout ?: a2?.mainLayout ?: aa?.mainLayout ?: bC?.mainLayout ?: bC?.mainLayout ?: ds?.mainLayout ?: nC?.mainLayout ?: cU?.mainLayout
|
aL?.mainLayout ?: aa?.mainLayout ?: bC?.mainLayout ?: bC?.mainLayout ?: ds?.mainLayout ?: nC?.mainLayout ?: cU?.mainLayout
|
||||||
?: throw IllegalArgumentException(errorMessage)
|
?: throw IllegalArgumentException(errorMessage)
|
||||||
val timestamp =
|
val timestamp =
|
||||||
aL?.timestamp ?: a2?.timestamp ?: aa?.timestamp ?: bC?.timestamp ?: bC?.timestamp ?: ds?.timestamp ?: nC?.timestamp ?: cU?.timestamp
|
aL?.timestamp ?: aa?.timestamp ?: bC?.timestamp ?: bC?.timestamp ?: ds?.timestamp ?: nC?.timestamp ?: cU?.timestamp
|
||||||
?: throw IllegalArgumentException(errorMessage)
|
?: throw IllegalArgumentException(errorMessage)
|
||||||
val root =
|
val root =
|
||||||
aL?.root ?: a2?.root ?: aa?.root ?: bC?.root ?: bC?.root ?: ds?.root ?: nC?.root ?: cU?.root
|
aL?.root ?: aa?.root ?: bC?.root ?: bC?.root ?: ds?.root ?: nC?.root ?: cU?.root
|
||||||
?: throw IllegalArgumentException(errorMessage)
|
?: throw IllegalArgumentException(errorMessage)
|
||||||
|
|
||||||
// Optional attributes
|
// Optional attributes
|
||||||
val sgv = aL?.sgv ?: a2?.sgv ?: aa?.sgv ?: bC?.sgv ?: bC?.sgv ?: ds?.sgv ?: nC?.sgv ?: cU?.sgv
|
val sgv = aL?.sgv ?: aa?.sgv ?: bC?.sgv ?: bC?.sgv ?: ds?.sgv ?: nC?.sgv ?: cU?.sgv
|
||||||
val direction = aL?.direction ?: a2?.direction ?: aa?.direction ?: ds?.direction
|
val direction = aL?.direction ?: aa?.direction ?: ds?.direction
|
||||||
val loop = a2?.loop ?: cU?.loop
|
val loop = cU?.loop
|
||||||
val delta = aL?.delta ?: a2?.delta ?: aa?.delta ?: bC?.delta ?: bC?.delta ?: ds?.delta ?: nC?.delta ?: cU?.delta
|
val delta = aL?.delta ?: aa?.delta ?: bC?.delta ?: bC?.delta ?: ds?.delta ?: nC?.delta ?: cU?.delta
|
||||||
val avgDelta = a2?.avgDelta ?: bC?.avgDelta ?: bC?.avgDelta ?: ds?.avgDelta ?: nC?.avgDelta ?: cU?.avgDelta
|
val avgDelta = bC?.avgDelta ?: bC?.avgDelta ?: ds?.avgDelta ?: nC?.avgDelta ?: cU?.avgDelta
|
||||||
val uploaderBattery = aL?.uploaderBattery ?: a2?.uploaderBattery ?: aa?.uploaderBattery ?: ds?.uploaderBattery ?: cU?.uploaderBattery
|
val uploaderBattery = aL?.uploaderBattery ?: aa?.uploaderBattery ?: ds?.uploaderBattery ?: cU?.uploaderBattery
|
||||||
val rigBattery = a2?.rigBattery ?: ds?.rigBattery ?: cU?.rigBattery
|
val rigBattery = ds?.rigBattery ?: cU?.rigBattery
|
||||||
val basalRate = a2?.basalRate ?: ds?.basalRate ?: cU?.basalRate
|
val basalRate = ds?.basalRate ?: cU?.basalRate
|
||||||
val bgi = a2?.bgi ?: ds?.bgi ?: cU?.bgi
|
val bgi = ds?.bgi ?: cU?.bgi
|
||||||
val AAPSv2 = a2?.AAPSv2 ?: ds?.AAPSv2 ?: cU?.AAPSv2
|
val AAPSv2 = ds?.AAPSv2 ?: cU?.AAPSv2
|
||||||
val cob1 = a2?.cob1 ?: ds?.cob1 ?: cU?.cob1
|
val cob1 = ds?.cob1 ?: cU?.cob1
|
||||||
val cob2 = a2?.cob2 ?: ds?.cob2 ?: cU?.cob2
|
val cob2 = ds?.cob2 ?: cU?.cob2
|
||||||
val time = aL?.time ?: a2?.time ?: aa?.time ?: bC?.time ?: bC?.time ?: nC?.time ?: cU?.time
|
val time = aL?.time ?: aa?.time ?: bC?.time ?: bC?.time ?: nC?.time ?: cU?.time
|
||||||
val second = cU?.second
|
val second = cU?.second
|
||||||
val minute = ds?.minute ?: cU?.minute
|
val minute = ds?.minute ?: cU?.minute
|
||||||
val hour = ds?.hour ?: cU?.hour
|
val hour = ds?.hour ?: cU?.hour
|
||||||
val day = a2?.day ?: ds?.day ?: cU?.day
|
val day = ds?.day ?: cU?.day
|
||||||
val month = a2?.month ?: ds?.month ?: cU?.month
|
val month = ds?.month ?: cU?.month
|
||||||
val iob1 = a2?.iob1 ?: ds?.iob1 ?: cU?.iob1
|
val iob1 = ds?.iob1 ?: cU?.iob1
|
||||||
val iob2 = a2?.iob2 ?: ds?.iob2 ?: cU?.iob2
|
val iob2 = ds?.iob2 ?: cU?.iob2
|
||||||
val chart = a2?.chart ?: aa?.chart ?: bC?.chart ?: bC?.chart ?: ds?.chart ?: cU?.chart
|
val chart = aa?.chart ?: bC?.chart ?: bC?.chart ?: ds?.chart ?: cU?.chart
|
||||||
val status = aL?.status ?: aa?.status ?: bC?.status ?: bC?.status ?: nC?.status
|
val status = aL?.status ?: aa?.status ?: bC?.status ?: bC?.status ?: nC?.status
|
||||||
val timePeriod = ds?.timePeriod ?: aL?.timePeriod ?: nC?.timePeriod ?: bC?.timePeriod ?: cU?.timePeriod
|
val timePeriod = ds?.timePeriod ?: aL?.timePeriod ?: nC?.timePeriod ?: bC?.timePeriod ?: cU?.timePeriod
|
||||||
val dayName = ds?.dayName ?: cU?.dayName
|
val dayName = ds?.dayName ?: cU?.dayName
|
||||||
val mainMenuTap = ds?.mainMenuTap
|
val mainMenuTap = ds?.mainMenuTap
|
||||||
val chartZoomTap = ds?.chartZoomTap
|
val chartZoomTap = ds?.chartZoomTap
|
||||||
val dateTime = ds?.dateTime ?: a2?.dateTime
|
val dateTime = ds?.dateTime
|
||||||
val weekNumber = ds?.weekNumber ?: cU?.weekNumber
|
val weekNumber = ds?.weekNumber ?: cU?.weekNumber
|
||||||
// val minuteHand = cU?.minuteHand
|
// val minuteHand = cU?.minuteHand
|
||||||
// val secondaryLayout = aL?.secondaryLayout ?: a2?.secondaryLayout ?: aa?.secondaryLayout ?: ds?.secondaryLayout
|
// val secondaryLayout = aL?.secondaryLayout ?: aa?.secondaryLayout ?: ds?.secondaryLayout
|
||||||
// val tertiaryLayout = a2?.tertiaryLayout
|
|
||||||
// val hourHand = cU?.hourHand
|
// val hourHand = cU?.hourHand
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -81,12 +78,11 @@ class WatchfaceViewAdapter(
|
||||||
fun getBinding(bindLayout: ViewBinding): WatchfaceViewAdapter {
|
fun getBinding(bindLayout: ViewBinding): WatchfaceViewAdapter {
|
||||||
return when (bindLayout) {
|
return when (bindLayout) {
|
||||||
is ActivityHomeLargeBinding -> WatchfaceViewAdapter(bindLayout)
|
is ActivityHomeLargeBinding -> WatchfaceViewAdapter(bindLayout)
|
||||||
is ActivityHome2Binding -> WatchfaceViewAdapter(null, bindLayout)
|
is ActivityHomeBinding -> WatchfaceViewAdapter(null, bindLayout)
|
||||||
is ActivityHomeBinding -> WatchfaceViewAdapter(null, null, bindLayout)
|
is ActivityBigchartBinding -> WatchfaceViewAdapter(null, null, bindLayout)
|
||||||
is ActivityBigchartBinding -> WatchfaceViewAdapter(null, null, null, bindLayout)
|
is ActivityDigitalstyleBinding -> WatchfaceViewAdapter(null, null, null, bindLayout)
|
||||||
is ActivityDigitalstyleBinding -> WatchfaceViewAdapter(null, null, null, null, bindLayout)
|
is ActivityNochartBinding -> WatchfaceViewAdapter(null, null, null, null, bindLayout)
|
||||||
is ActivityNochartBinding -> WatchfaceViewAdapter(null, null, null, null, null, bindLayout)
|
is ActivityCustomBinding -> WatchfaceViewAdapter(null, null, null, null, null, bindLayout)
|
||||||
is ActivityCustomBinding -> WatchfaceViewAdapter(null, null, null, null, null, null, bindLayout)
|
|
||||||
else -> throw IllegalArgumentException("ViewBinding is not implement in WatchfaceViewAdapter")
|
else -> throw IllegalArgumentException("ViewBinding is not implement in WatchfaceViewAdapter")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,285 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:id="@+id/main_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
tools:context=".watchfaces.AapsV2Watchface">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/primary_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/secondary_layout"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/loop"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="bottom"
|
|
||||||
android:background="@drawable/loop_grey_25"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="--'" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/sgv"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity=""
|
|
||||||
android:layout_marginBottom="-2dp"
|
|
||||||
android:paddingHorizontal="5dp"
|
|
||||||
android:textSize="38sp"
|
|
||||||
tools:text="---" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/direction"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textSize="22sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="--" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/timestamp"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="--'" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/secondary_layout"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:colorForeground"
|
|
||||||
android:paddingVertical="1dp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/tertiary_layout"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingHorizontal="5dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/delta"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="+/-" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/avg_delta"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="@string/abbreviation_average" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/uploader_battery"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="--%" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/rig_battery"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:visibility="visible"
|
|
||||||
tools:text="--%" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/basalRate"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1.7"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="@string/no_tmp_basal_u_h" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/bgi"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textSize="13sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:visibility="visible"
|
|
||||||
tools:text="bgi" />
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/AAPSv2"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/tertiary_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:weightSum="7"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/cob1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/activity_carb"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/cob2"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/no_cob_g"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
tools:ignore="NestedWeights" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/time"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="30sp"
|
|
||||||
tools:text="12:00" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/date_time"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/day"
|
|
||||||
android:layout_width="23dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="12sp"
|
|
||||||
tools:text="day" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/month"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="12sp"
|
|
||||||
tools:text="mth" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:textAlignment="center">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/iob1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="11sp"
|
|
||||||
tools:text="@string/activity_IOB" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/iob2"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:text="@string/no_iob_u" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<lecho.lib.hellocharts.view.LineChartView
|
|
||||||
android:id="@+id/chart"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginTop="-5dp"
|
|
||||||
android:layout_marginBottom="7dp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/tertiary_layout" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
|
@ -7,7 +7,6 @@
|
||||||
<string name="label_watchface_big_chart">AAPS(BigChart)</string>
|
<string name="label_watchface_big_chart">AAPS(BigChart)</string>
|
||||||
<string name="label_watchface_no_chart">AAPS(NoChart)</string>
|
<string name="label_watchface_no_chart">AAPS(NoChart)</string>
|
||||||
<string name="label_watchface_circle">AAPS(Circle)</string>
|
<string name="label_watchface_circle">AAPS(Circle)</string>
|
||||||
<string name="label_watchface_v2">AAPS(v2)</string>
|
|
||||||
<string name="label_watchface_digital_style">AAPS(DigitalStyle)</string>
|
<string name="label_watchface_digital_style">AAPS(DigitalStyle)</string>
|
||||||
<string name="label_watchface_custom">AAPS(Custom)</string>
|
<string name="label_watchface_custom">AAPS(Custom)</string>
|
||||||
<string name="label_actions_tile">AAPS(Actions)</string>
|
<string name="label_actions_tile">AAPS(Actions)</string>
|
||||||
|
|
|
@ -31,6 +31,13 @@
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
app:wear_iconOff="@drawable/settings_off"
|
||||||
app:wear_iconOn="@drawable/settings_on" />
|
app:wear_iconOn="@drawable/settings_on" />
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="@string/key_show_date"
|
||||||
|
android:title="@string/pref_show_date"
|
||||||
|
app:wear_iconOff="@drawable/settings_off"
|
||||||
|
app:wear_iconOn="@drawable/settings_on" />
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="@string/key_vibrate_hourly"
|
android:key="@string/key_vibrate_hourly"
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="@string/key_dark"
|
|
||||||
android:title="@string/pref_dark"
|
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
|
||||||
app:wear_iconOn="@drawable/settings_on" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="@string/key_match_divider"
|
|
||||||
android:summary="Status bar divider background matches watchface background"
|
|
||||||
android:title="@string/pref_matching_divider"
|
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
|
||||||
app:wear_iconOn="@drawable/settings_on" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="@string/key_show_date"
|
|
||||||
android:title="@string/pref_show_date"
|
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
|
||||||
app:wear_iconOn="@drawable/settings_on" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="@string/key_vibrate_hourly"
|
|
||||||
android:title="@string/pref_vibrate_hourly"
|
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
|
||||||
app:wear_iconOn="@drawable/settings_on" />
|
|
||||||
|
|
||||||
<ListPreference
|
|
||||||
android:defaultValue="off"
|
|
||||||
android:entries="@array/watchface_simplify_ui_name"
|
|
||||||
android:entryValues="@array/watchface_simplify_ui_values"
|
|
||||||
android:key="@string/key_simplify_ui"
|
|
||||||
android:summary="@string/pref_simplify_ui_sum"
|
|
||||||
android:title="@string/pref_simplify_ui" />
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
Loading…
Reference in a new issue