Widget: show sensitivity, clickable
This commit is contained in:
parent
2525cdaaf0
commit
5cae3bb8be
3 changed files with 60 additions and 1 deletions
|
@ -1,11 +1,13 @@
|
|||
package info.nightscout.androidaps
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.appwidget.AppWidgetProvider
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Paint
|
||||
import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.data.ProfileSealed
|
||||
|
@ -15,6 +17,8 @@ import info.nightscout.androidaps.extensions.isInProgress
|
|||
import info.nightscout.androidaps.extensions.toVisibility
|
||||
import info.nightscout.androidaps.extensions.valueToUnitsString
|
||||
import info.nightscout.androidaps.interfaces.*
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSSMB.DetermineBasalResultSMB
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
|
@ -22,6 +26,8 @@ import info.nightscout.androidaps.utils.TrendCalculator
|
|||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.shared.logging.AAPSLogger
|
||||
import info.nightscout.shared.logging.LTag
|
||||
import info.nightscout.shared.sharedPreferences.SP
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.abs
|
||||
|
||||
|
@ -41,6 +47,10 @@ class Widget : AppWidgetProvider() {
|
|||
@Inject lateinit var iobCobCalculator: IobCobCalculator
|
||||
@Inject lateinit var loop: Loop
|
||||
@Inject lateinit var config: Config
|
||||
@Inject lateinit var sp: SP
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
|
||||
private val intentAction = "OpenApp"
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent?) {
|
||||
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
|
||||
|
@ -66,12 +76,19 @@ class Widget : AppWidgetProvider() {
|
|||
aapsLogger.debug(LTag.WIDGET, "updateAppWidget called")
|
||||
val views = RemoteViews(context.packageName, R.layout.widget_layout)
|
||||
|
||||
// Create an Intent to launch MainActivity when clicked
|
||||
val intent = Intent(context, MainActivity::class.java).also { it.action = intentAction }
|
||||
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
|
||||
// Widgets allow click handlers to only launch pending intents
|
||||
views.setOnClickPendingIntent(R.id.widget_layout, pendingIntent)
|
||||
|
||||
updateBg(views)
|
||||
updateTemporaryBasal(views)
|
||||
updateExtendedBolus(views)
|
||||
updateIobCob(views)
|
||||
updateTemporaryTarget(views)
|
||||
updateProfile(views)
|
||||
updateSensitivity(views)
|
||||
|
||||
// Instruct the widget manager to update the widget
|
||||
appWidgetManager.updateAppWidget(appWidgetId, views)
|
||||
|
@ -192,6 +209,34 @@ class Widget : AppWidgetProvider() {
|
|||
//views.setTextColor(R.id.active_profile, profileTextColor)
|
||||
views.setTextColor(R.id.active_profile, profileTextColor)
|
||||
}
|
||||
|
||||
fun updateSensitivity(views: RemoteViews) {
|
||||
if (sp.getBoolean(R.string.key_openapsama_useautosens, false) && constraintChecker.isAutosensModeEnabled().value())
|
||||
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_swap_vert_black_48dp_green)
|
||||
else
|
||||
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_x_swap_vert)
|
||||
views.setTextViewText(R.id.sensitivity, overviewData.lastAutosensData?.let { autosensData ->
|
||||
String.format(Locale.ENGLISH, "%.0f%%", autosensData.autosensResult.ratio * 100)
|
||||
} ?: "")
|
||||
|
||||
// Show variable sensitivity
|
||||
val request = loop.lastRun?.request
|
||||
if (request is DetermineBasalResultSMB) {
|
||||
val isfMgdl = profileFunction.getProfile()?.getIsfMgdl()
|
||||
val variableSens = request.variableSens
|
||||
if (variableSens != isfMgdl && variableSens != null && isfMgdl != null) {
|
||||
views.setTextViewText(
|
||||
R.id.variable_sensitivity,
|
||||
String.format(
|
||||
Locale.getDefault(), "%1$.1f→%2$.1f",
|
||||
Profile.toUnits(isfMgdl, isfMgdl * Constants.MGDL_TO_MMOLL, profileFunction.getUnits()),
|
||||
Profile.toUnits(variableSens, variableSens * Constants.MGDL_TO_MMOLL, profileFunction.getUnits())
|
||||
)
|
||||
)
|
||||
views.setViewVisibility(R.id.variable_sensitivity, View.VISIBLE)
|
||||
} else views.setViewVisibility(R.id.variable_sensitivity, View.GONE)
|
||||
} else views.setViewVisibility(R.id.variable_sensitivity, View.GONE)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun updateWidget(context: Context) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
style="@style/Widget.AndroidAPS.AppWidget.Container"
|
||||
android:id="@+id/widget_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
|
@ -337,6 +338,19 @@
|
|||
android:textStyle="bold"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/variable_sensitivity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="-9dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:paddingBottom="3dp"
|
||||
android:text="n/a"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||
android:textStyle="bold"
|
||||
android:visibility="visible"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
android:minWidth="250dp"
|
||||
android:minHeight="110dp"
|
||||
android:previewImage="@drawable/widget_preview"
|
||||
android:resizeMode="horizontal"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:updatePeriodMillis="86400000"
|
||||
android:widgetCategory="home_screen" />
|
Loading…
Reference in a new issue