diff --git a/.idea/dictionaries/project_dictionary.xml b/.idea/dictionaries/project_dictionary.xml index 49af19275e..d167564b60 100644 --- a/.idea/dictionaries/project_dictionary.xml +++ b/.idea/dictionaries/project_dictionary.xml @@ -5,6 +5,7 @@ abcdef acked actionstring + aidex allowednumbers androidaps autosens @@ -105,4 +106,4 @@ ypsopump - \ No newline at end of file + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 668d69029d..a5a5ddb79c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,10 @@ + + + + + + diff --git a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt index 52a5c486ea..ab12179b23 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.activities import android.annotation.SuppressLint -import android.app.DatePickerDialog import android.content.Context import android.os.Bundle import android.util.DisplayMetrics @@ -9,6 +8,7 @@ import android.view.ViewGroup import android.widget.LinearLayout import android.widget.RelativeLayout import android.widget.TextView +import com.google.android.material.datepicker.MaterialDatePicker import com.jjoe64.graphview.GraphView import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R @@ -148,33 +148,19 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() { true } - // create an OnDateSetListener - val dateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth -> - Calendar.getInstance().also { calendar -> - calendar.timeInMillis = overviewData.fromTime - calendar[Calendar.YEAR] = year - calendar[Calendar.MONTH] = monthOfYear - calendar[Calendar.DAY_OF_MONTH] = dayOfMonth - calendar[Calendar.MILLISECOND] = 0 - calendar[Calendar.SECOND] = 0 - calendar[Calendar.MINUTE] = 0 - calendar[Calendar.HOUR_OF_DAY] = 0 - setTime(calendar.timeInMillis) - binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime) - } - loadAll("onClickDate") - } - binding.date.setOnClickListener { - val cal = Calendar.getInstance() - cal.timeInMillis = overviewData.fromTime - DatePickerDialog( - this, R.style.MaterialPickerTheme, - dateSetListener, - cal.get(Calendar.YEAR), - cal.get(Calendar.MONTH), - cal.get(Calendar.DAY_OF_MONTH) - ).show() + MaterialDatePicker.Builder.datePicker() + .setSelection(dateUtil.timeStampToUtcDateMilis(overviewData.fromTime)) + .setTheme(R.style.DatePicker) + .build() + .apply { + addOnPositiveButtonClickListener { selection -> + setTime(dateUtil.mergeUtcDateToTimestamp(overviewData.fromTime, selection)) + binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime) + loadAll("onClickDate") + } + } + .show(supportFragmentManager, "history_date_picker") } val dm = DisplayMetrics() @@ -184,9 +170,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() { else windowManager.defaultDisplay.getMetrics(dm) - axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80 - binding.bgGraph.gridLabelRenderer?.gridColor = rh.gac(this, R.attr.graphgrid) + binding.bgGraph.gridLabelRenderer?.gridColor = rh.gac(this, R.attr.graphGrid) binding.bgGraph.gridLabelRenderer?.reloadStyles() binding.bgGraph.gridLabelRenderer?.labelVerticalWidth = axisWidth @@ -259,12 +244,12 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() { val graph = GraphView(this) graph.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, rh.dpToPx(100)).also { it.setMargins(0, rh.dpToPx(15), 0, rh.dpToPx(10)) } - graph.gridLabelRenderer?.gridColor = rh.gac(R.attr.graphgrid) + graph.gridLabelRenderer?.gridColor = rh.gac(R.attr.graphGrid) graph.gridLabelRenderer?.reloadStyles() graph.gridLabelRenderer?.isHorizontalLabelsVisible = false graph.gridLabelRenderer?.labelVerticalWidth = axisWidth graph.gridLabelRenderer?.numVerticalLabels = 3 - graph.viewport.backgroundColor = rh.gac(this, R.attr.viewPortbackgroundColor) + graph.viewport.backgroundColor = rh.gac(this, R.attr.viewPortBackgroundColor) relativeLayout.addView(graph) val label = TextView(this) @@ -421,4 +406,4 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() { binding.progressBar.progress = percent binding.progressBar.visibility = (percent != 100).toVisibilityKeepSpace() } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt index 57b39e4622..f4a679a9b0 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt @@ -87,6 +87,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang @Inject lateinit var poctechPlugin: PoctechPlugin @Inject lateinit var tomatoPlugin: TomatoPlugin @Inject lateinit var glunovoPlugin: GlunovoPlugin + @Inject lateinit var aidexPlugin: AidexPlugin @Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin @Inject lateinit var statusLinePlugin: StatusLinePlugin @Inject lateinit var tidepoolPlugin: TidepoolPlugin @@ -163,6 +164,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang addPreferencesFromResourceIfEnabled(tomatoPlugin, rootKey) addPreferencesFromResourceIfEnabled(glunovoPlugin, rootKey) addPreferencesFromResourceIfEnabled(poctechPlugin, rootKey) + addPreferencesFromResourceIfEnabled(aidexPlugin, rootKey) addPreferencesFromResourceIfEnabled(glimpPlugin, rootKey) addPreferencesFromResourceIfEnabled(loopPlugin, rootKey, config.APS) addPreferencesFromResourceIfEnabled(openAPSAMAPlugin, rootKey, config.APS) @@ -447,4 +449,4 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang this.filter = filter preferenceManager?.preferenceScreen?.let { updateFilterVisibility(filter, it) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt index 03c3362d9a..81563f0944 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt @@ -241,10 +241,10 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() { } ToastUtils.showToastInUiThread(this, R.string.invalidinput) } - binding.age.editText?.id?.let { binding.ageLabel.labelFor = it } - binding.tdd.editText?.id?.let { binding.tddLabel.labelFor = it } - binding.weight.editText?.id?.let { binding.weightLabel.labelFor = it } - binding.basalPctFromTdd.editText?.id?.let { binding.basalPctFromTddLabel.labelFor = it } + binding.ageLabel.labelFor = binding.age.editTextId + binding.tddLabel.labelFor = binding.tdd.editTextId + binding.weightLabel.labelFor = binding.weight.editTextId + binding.basalPctFromTddLabel.labelFor = binding.basalPctFromTdd.editTextId switchTab(0, typeSelected[0], false) } @@ -316,7 +316,7 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() { } private fun setBackgroundColorOnSelected(tab: Int) { - binding.menu1.setBackgroundColor(rh.gac(this, if (tab == 1) R.attr.defaultbackground else R.attr.helperProfileColor)) - binding.menu2.setBackgroundColor(rh.gac(this, if (tab == 0) R.attr.defaultbackground else R.attr.examinedProfileColor)) + binding.menu1.setBackgroundColor(rh.gac(this, if (tab == 1) R.attr.defaultBackground else R.attr.helperProfileColor)) + binding.menu2.setBackgroundColor(rh.gac(this, if (tab == 0) R.attr.defaultBackground else R.attr.examinedProfileColor)) } } diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt index e70e7a9cbe..a4fa56a699 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt @@ -269,8 +269,6 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() { } holder.binding.calculation.tag = ml - val nextTimestamp = if (mealLinks.size != position + 1) timestamp(mealLinks[position + 1]) else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(timestamp(ml), nextTimestamp).toVisibility() } override fun getItemCount() = mealLinks.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt index 37713a7e30..820b5d3b93 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt @@ -173,8 +173,6 @@ class TreatmentsCareportalFragment : DaggerFragment() { actionHelper.updateSelection(position, therapyEvent, holder.binding.cbRemove.isChecked) } holder.binding.cbRemove.isChecked = actionHelper.isSelected(position) - val nextTimestamp = if (therapyList.size != position + 1) therapyList[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(therapyEvent.timestamp, nextTimestamp).toVisibility() } override fun getItemCount() = therapyList.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt index b7ffd407c8..e21bd897ae 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt @@ -163,8 +163,6 @@ class TreatmentsExtendedBolusesFragment : DaggerFragment() { } holder.binding.cbRemove.isChecked = actionHelper.isSelected(position) } - val nextTimestamp = if (extendedBolusList.size != position + 1) extendedBolusList[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(extendedBolus.timestamp, nextTimestamp).toVisibility() } override fun getItemCount() = extendedBolusList.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt index 92f9d5f38b..49e8c4ca52 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt @@ -214,8 +214,6 @@ class TreatmentsProfileSwitchFragment : DaggerFragment() { } holder.binding.clone.visibility = (profileSwitch is ProfileSealed.PS).toVisibility() holder.binding.spacer.visibility = (profileSwitch is ProfileSealed.PS).toVisibility() - val nextTimestamp = if (profileSwitchList.size != position + 1) profileSwitchList[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(profileSwitch.timestamp, nextTimestamp).toVisibility() } override fun getItemCount() = profileSwitchList.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt index 028ae4f99a..137d6cf94c 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt @@ -192,8 +192,6 @@ class TreatmentsTempTargetFragment : DaggerFragment() { else -> holder.binding.reasonColon.currentTextColor } ) - val nextTimestamp = if (tempTargetList.size != position + 1) tempTargetList[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(tempTarget.timestamp, nextTimestamp).toVisibility() } override fun getItemCount() = tempTargetList.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt index da76998092..1f585ecd0a 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt @@ -204,8 +204,6 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() { } holder.binding.cbRemove.isChecked = actionHelper.isSelected(position) } - val nextTimestamp = if (tempBasalList.size != position + 1) tempBasalList[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(tempBasal.timestamp, nextTimestamp).toVisibility() } override fun getItemCount() = tempBasalList.size diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt index 0303f5bf7c..bd442ce723 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt @@ -134,8 +134,6 @@ class TreatmentsUserEntryFragment : DaggerFragment() { holder.binding.iconSource.setImageResource(userEntryPresentationHelper.iconId(current.source)) holder.binding.values.text = userEntryPresentationHelper.listToPresentationString(current.values) holder.binding.values.visibility = (holder.binding.values.text != "").toVisibility() - val nextTimestamp = if (entries.size != position + 1) entries[position + 1].timestamp else 0L - holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(current.timestamp, nextTimestamp).toVisibility() } inner class UserEntryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { diff --git a/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt b/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt index 127643b855..33259f2d18 100644 --- a/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt +++ b/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt @@ -358,6 +358,12 @@ abstract class PluginsModule { @IntKey(460) abstract fun bindTomatoPlugin(plugin: TomatoPlugin): PluginBase + @Binds + @AllConfigs + @IntoMap + @IntKey(465) + abstract fun bindAidexPlugin(plugin: AidexPlugin): PluginBase + @Binds @AllConfigs @IntoMap diff --git a/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt b/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt index 92c84687b7..78991d111f 100644 --- a/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt +++ b/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt @@ -32,4 +32,5 @@ abstract class WorkersModule { @ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker @ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker @ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker + @ContributesAndroidInjector abstract fun contributesAidexWorker(): AidexPlugin.AidexWorker } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt index bd5daaf965..303df14f60 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt @@ -64,7 +64,7 @@ class CalibrationDialog : DialogFragmentWithDate() { binding.bg.setParams(savedInstanceState?.getDouble("bg") ?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok) binding.units.text = if (units == GlucoseUnit.MMOL) rh.gs(R.string.mmol) else rh.gs(R.string.mgdl) - binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it } + binding.bgLabel.labelFor = binding.bg.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt index 59921a1611..cdf688b4c3 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt @@ -199,9 +199,9 @@ class CarbsDialog : DialogFragmentWithDate() { binding.hypoTt.isChecked = false binding.activityTt.isChecked = false } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.time.editText?.id?.let { binding.timeLabel.labelFor = it } - binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.timeLabel.labelFor = binding.time.editTextId + binding.carbsLabel.labelFor = binding.carbs.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt index 03cb215a7f..994613c38f 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt @@ -165,8 +165,8 @@ class CareDialog : DialogFragmentWithDate() { ?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok) if (options == EventType.NOTE || options == EventType.QUESTION || options == EventType.ANNOUNCEMENT || options == EventType.EXERCISE) binding.notesLayout.root.visibility = View.VISIBLE // independent to preferences - binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.bgLabel.labelFor = binding.bg.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt index 56e7856de9..e4f45c4e1e 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt @@ -75,8 +75,8 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { val extendedMaxDuration = pumpDescription.extendedBolusMaxDuration binding.duration.setParams(savedInstanceState?.getDouble("duration") ?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, binding.okcancel.ok) - binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.insulin.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt index 3d6e2850fd..c52ca8436b 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt @@ -99,7 +99,7 @@ class FillDialog : DialogFragmentWithDate() { } else { binding.fillPresetButton3.visibility = View.GONE } - binding.fillInsulinamount.editText?.id?.let { binding.fillLabel.labelFor = it } + binding.fillLabel.labelFor = binding.fillInsulinamount.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt index 53e5474dd1..5739902be0 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt @@ -150,8 +150,8 @@ class InsulinDialog : DialogFragmentWithDate() { binding.recordOnly.setOnCheckedChangeListener { _, isChecked: Boolean -> binding.timeLayout.visibility = isChecked.toVisibility() } - binding.amount.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.time.editText?.id?.let { binding.timeLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.amount.editTextId + binding.timeLabel.labelFor = binding.time.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt index c5e3059087..d7c7ecb809 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt @@ -152,9 +152,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() { } } binding.ttLayout.visibility = View.GONE - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.percentage.editText?.id?.let { binding.percentageLabel.labelFor = it } - binding.timeshift.editText?.id?.let { binding.timeshiftLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.percentageLabel.labelFor = binding.percentage.editTextId + binding.timeshiftLabel.labelFor = binding.timeshift.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt index 438ed77193..62bd73862d 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt @@ -89,9 +89,9 @@ class TempBasalDialog : DialogFragmentWithDate() { binding.percentLayout.visibility = View.GONE binding.absoluteLayout.visibility = View.VISIBLE } - binding.basalPercentInput.editText?.id?.let { binding.basalPercentLabel.labelFor = it } - binding.basalAbsoluteInput.editText?.id?.let { binding.basalAbsoluteLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.basalPercentLabel.labelFor = binding.basalPercentInput.editTextId + binding.basalAbsoluteLabel.labelFor = binding.basalAbsoluteInput.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt index dba15262a5..a1885c2d4e 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt @@ -123,8 +123,8 @@ class TempTargetDialog : DialogFragmentWithDate() { longClick(it) return@setOnLongClickListener true } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.temptarget.editText?.id?.let { binding.temptargetLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.temptargetLabel.labelFor = binding.temptarget.editTextId } } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt index 5ca98c146b..ff3dbfb30f 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt @@ -108,8 +108,8 @@ class TreatmentDialog : DialogFragmentWithDate() { binding.insulin.setParams(savedInstanceState?.getDouble("insulin") ?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, binding.okcancel.ok, textWatcher) binding.recordOnlyLayout.visibility = View.GONE - binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.insulin.editTextId + binding.carbsLabel.labelFor = binding.carbs.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt index 13fc6cc0b8..841344fae3 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -248,10 +248,10 @@ class WizardDialog : DaggerDialogFragment() { } private fun setA11yLabels() { - binding.bgInput.editText?.id?.let { binding.bgInputLabel.labelFor = it } - binding.carbsInput.editText?.id?.let { binding.carbsInputLabel.labelFor = it } - binding.correctionInput.editText?.id?.let { binding.correctionInputLabel.labelFor = it } - binding.carbTimeInput.editText?.id?.let { binding.carbTimeInputLabel.labelFor = it } + binding.bgInputLabel.labelFor = binding.bgInput.editTextId + binding.carbsInputLabel.labelFor = binding.carbsInput.editTextId + binding.correctionInputLabel.labelFor = binding.correctionInput.editTextId + binding.carbTimeInputLabel.labelFor = binding.carbTimeInput.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt index 63e03478dc..89b1da7047 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt @@ -130,7 +130,6 @@ class ProfileFunctionImplementation @Inject constructor( } } - return null } @@ -205,4 +204,4 @@ class ProfileFunctionImplementation @Inject constructor( } else returnValue = false return returnValue } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt index 5b412076b5..84cd7eebba 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt @@ -1,6 +1,6 @@ package info.nightscout.androidaps.plugins.constraints.objectives -import android.graphics.Color +import android.annotation.SuppressLint import android.os.Bundle import android.os.Handler import android.os.HandlerThread @@ -153,6 +153,7 @@ class ObjectivesFragment : DaggerFragment() { return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.objectives_item, parent, false)) } + @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: ViewHolder, position: Int) { val objective = objectivesPlugin.objectives[position] holder.binding.title.text = rh.gs(R.string.nth_objective, position + 1) @@ -167,7 +168,7 @@ class ObjectivesFragment : DaggerFragment() { } else holder.binding.gate.visibility = View.GONE if (!objective.isStarted) { - holder.binding.gate.setTextColor(-0x1) + holder.binding.gate.setTextColor(rh.gac(context, R.attr.defaultTextColor)) holder.binding.verify.visibility = View.GONE holder.binding.progress.visibility = View.GONE holder.binding.accomplished.visibility = View.GONE @@ -178,7 +179,7 @@ class ObjectivesFragment : DaggerFragment() { else holder.binding.start.visibility = View.GONE } else if (objective.isAccomplished) { - holder.binding.gate.setTextColor(-0xb350b0) + holder.binding.gate.setTextColor(rh.gac(context, R.attr.isAccomplishedColor)) holder.binding.verify.visibility = View.GONE holder.binding.progress.visibility = View.GONE holder.binding.start.visibility = View.GONE @@ -186,7 +187,7 @@ class ObjectivesFragment : DaggerFragment() { holder.binding.unfinish.visibility = View.VISIBLE holder.binding.unstart.visibility = View.GONE } else if (objective.isStarted) { - holder.binding.gate.setTextColor(-0x1) + holder.binding.gate.setTextColor(rh.gac(context,R.attr.defaultTextColor)) holder.binding.verify.visibility = View.VISIBLE holder.binding.verify.isEnabled = objective.isCompleted || binding.fake.isChecked holder.binding.start.visibility = View.GONE @@ -200,7 +201,7 @@ class ObjectivesFragment : DaggerFragment() { // name val name = TextView(holder.binding.progress.context) name.text = "${rh.gs(task.task)}:" - name.setTextColor(-0x1) + name.setTextColor(rh.gac(context,R.attr.defaultTextColor) ) holder.binding.progress.addView(name, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) // hint task.hints.forEach { h -> @@ -209,9 +210,9 @@ class ObjectivesFragment : DaggerFragment() { } // state val state = TextView(holder.binding.progress.context) - state.setTextColor(-0x1) + state.setTextColor(rh.gac(context,R.attr.defaultTextColor)) val basicHTML = "%2\$s" - val formattedHTML = String.format(basicHTML, if (task.isCompleted()) "#4CAF50" else "#FF9800", task.progress) + val formattedHTML = String.format(basicHTML, if (task.isCompleted()) rh.gac(context, R.attr.isCompletedColor) else rh.gac(context, R.attr.isNotCompletedColor), task.progress) state.text = HtmlHelper.fromHtml(formattedHTML) state.gravity = Gravity.END holder.binding.progress.addView(state, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) @@ -228,7 +229,7 @@ class ObjectivesFragment : DaggerFragment() { } // horizontal line val separator = View(holder.binding.progress.context) - separator.setBackgroundColor(Color.DKGRAY) + separator.setBackgroundColor(rh.gac(context, R.attr.separatorColor)) holder.binding.progress.addView(separator, LinearLayout.LayoutParams.MATCH_PARENT, 2) } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt index 0da7daa37c..9faa974d1f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt @@ -176,7 +176,7 @@ abstract class Objective(injector: HasAndroidInjector, spName: String, @StringRe textView.setText(hint) textView.autoLinkMask = Linkify.WEB_URLS textView.linksClickable = true - textView.setLinkTextColor(Color.YELLOW) + textView.setLinkTextColor(rh.gac(context, R.attr.colorSecondary)) Linkify.addLinks(textView, Linkify.WEB_URLS) return textView } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt index a45ae8dd50..8347a45715 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt @@ -80,7 +80,6 @@ class VersionCheckerPlugin @Inject constructor( return } - if (isOldVersion(gracePeriod.warning.daysToMillis()) && shouldWarnAgain()) { // store last notification time sp.putLong(R.string.key_last_versionchecker_plugin_warning, now) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt index b7435e3916..0b1ecc3105 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt @@ -4,8 +4,6 @@ import android.text.Spanned import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.Config -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.shared.logging.LTag import info.nightscout.androidaps.plugins.aps.loop.APSResult import info.nightscout.androidaps.plugins.configBuilder.RunningConfiguration import info.nightscout.androidaps.utils.DateUtil @@ -14,6 +12,8 @@ import info.nightscout.androidaps.utils.JsonHelper import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T 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 org.json.JSONArray import org.json.JSONException @@ -88,7 +88,7 @@ class NSDeviceStatus @Inject constructor( fun handleNewData(deviceStatuses: JSONArray) { aapsLogger.debug(LTag.NSCLIENT, "Got NS deviceStatus: \$deviceStatuses") try { - for (i in deviceStatuses.length() -1 downTo 0) { + for (i in deviceStatuses.length() - 1 downTo 0) { val devicestatusJson = deviceStatuses.getJSONObject(i) if (devicestatusJson != null) { setData(devicestatusJson) @@ -157,7 +157,7 @@ class NSDeviceStatus @Inject constructor( //String[] ALL_STATUS_FIELDS = {"reservoir", "battery", "clock", "status", "device"}; val string = StringBuilder() - .append("") + .append("") .append(rh.gs(R.string.pump)) .append(": ") @@ -165,13 +165,13 @@ class NSDeviceStatus @Inject constructor( val level = when { pumpData.clock + nsSettingsStatus.extendedPumpSettings("urgentClock") * 60 * 1000L < dateUtil.now() -> Levels.URGENT pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("urgentRes") -> Levels.URGENT - pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> Levels.URGENT + pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> Levels.URGENT !pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> Levels.URGENT pumpData.clock + nsSettingsStatus.extendedPumpSettings("warnClock") * 60 * 1000L < dateUtil.now() -> Levels.WARN pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("warnRes") -> Levels.WARN - pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> Levels.WARN - !pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN - else -> Levels.INFO + pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> Levels.WARN + !pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN + else -> Levels.INFO } string.append("") val fields = nsSettingsStatus.pumpExtendedSettingsFields() @@ -248,7 +248,7 @@ class NSDeviceStatus @Inject constructor( val openApsStatus: Spanned get() { val string = StringBuilder() - .append("") + .append("") .append(rh.gs(R.string.openaps_short)) .append(": ") @@ -256,7 +256,7 @@ class NSDeviceStatus @Inject constructor( val level = when { deviceStatusData.openAPSData.clockSuggested + T.mins(sp.getLong(R.string.key_nsalarm_urgent_staledatavalue, 31)).msecs() < dateUtil.now() -> Levels.URGENT deviceStatusData.openAPSData.clockSuggested + T.mins(sp.getLong(R.string.key_nsalarm_staledatavalue, 16)).msecs() < dateUtil.now() -> Levels.WARN - else -> Levels.INFO + else -> Levels.INFO } string.append("") if (deviceStatusData.openAPSData.clockSuggested != 0L) string.append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ") @@ -268,8 +268,10 @@ class NSDeviceStatus @Inject constructor( get() { val string = StringBuilder() try { - if (deviceStatusData.openAPSData.enacted != null && deviceStatusData.openAPSData.clockEnacted != deviceStatusData.openAPSData.clockSuggested) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockEnacted)).append(" ").append(deviceStatusData.openAPSData.enacted!!.getString("reason")).append("
") - if (deviceStatusData.openAPSData.suggested != null) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ").append(deviceStatusData.openAPSData.suggested!!.getString("reason")).append("
") + if (deviceStatusData.openAPSData.enacted != null && deviceStatusData.openAPSData.clockEnacted != deviceStatusData.openAPSData.clockSuggested) string.append("") + .append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockEnacted)).append(" ").append(deviceStatusData.openAPSData.enacted!!.getString("reason")).append("
") + if (deviceStatusData.openAPSData.suggested != null) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ") + .append(deviceStatusData.openAPSData.suggested!!.getString("reason")).append("
") return fromHtml(string.toString()) } catch (e: JSONException) { aapsLogger.error("Unhandled exception", e) @@ -321,7 +323,7 @@ class NSDeviceStatus @Inject constructor( val uploaderStatusSpanned: Spanned get() { val string = StringBuilder() - string.append("") + string.append("") string.append(rh.gs(R.string.uploader_short)) string.append(": ") val iterator: Iterator<*> = deviceStatusData.uploaderMap.entries.iterator() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt index c16b6e6273..deb355c24d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt @@ -183,7 +183,7 @@ class OverviewData @Inject constructor( } ?: R.drawable.ic_cp_basal_no_tbr fun temporaryBasalColor(context: Context?, iobCobCalculator: IobCobCalculator): Int = iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gac(context , R.attr.basal) } - ?: rh.gac(context, R.attr.textAppearancemediumColor) + ?: rh.gac(context, R.attr.defaultTextColor) /* * EXTENDED BOLUS diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt index 21a8ee9f95..cbcbcc07e9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt @@ -165,12 +165,12 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList val landscape = screenHeight < screenWidth skinProvider.activeSkin().preProcessLandscapeOverviewLayout(dm, binding, landscape, rh.gb(R.bool.isTablet), smallHeight) - binding.nsclientLayout.visibility = config.NSCLIENT.toVisibility() + binding.nsclientCard.visibility = config.NSCLIENT.toVisibility() binding.notifications.setHasFixedSize(false) binding.notifications.layoutManager = LinearLayoutManager(view.context) axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80 - binding.graphsLayout.bgGraph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphgrid) + binding.graphsLayout.bgGraph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphGrid) binding.graphsLayout.bgGraph.gridLabelRenderer?.reloadStyles() binding.graphsLayout.bgGraph.gridLabelRenderer?.labelVerticalWidth = axisWidth binding.graphsLayout.bgGraph.layoutParams?.height = rh.dpToPx(skinProvider.activeSkin().mainGraphHeight) @@ -179,7 +179,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList carbAnimation?.setEnterFadeDuration(1200) carbAnimation?.setExitFadeDuration(1200) - binding.graphsLayout.bgGraph.setOnLongClickListener { overviewData.rangeToDisplay += 6 overviewData.rangeToDisplay = if (overviewData.rangeToDisplay > 24) 6 else overviewData.rangeToDisplay @@ -549,16 +548,16 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList binding.buttonsLayout.cgmButton.setCompoundDrawablesWithIntrinsicBounds(null, rh.gd(R.drawable.ic_byoda), null, null) for (drawable in binding.buttonsLayout.cgmButton.compoundDrawables) { drawable?.mutate() - drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmdexColor), PorterDuff.Mode.SRC_IN) + drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmDexColor), PorterDuff.Mode.SRC_IN) } - binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmdexColor)) + binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmDexColor)) } else if (xDripIsBgSource) { binding.buttonsLayout.cgmButton.setCompoundDrawablesWithIntrinsicBounds(null, rh.gd(R.drawable.ic_xdrip), null, null) for (drawable in binding.buttonsLayout.cgmButton.compoundDrawables) { drawable?.mutate() - drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmxdripColor), PorterDuff.Mode.SRC_IN) + drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmXdripColor), PorterDuff.Mode.SRC_IN) } - binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmxdripColor)) + binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmXdripColor)) } binding.buttonsLayout.cgmButton.visibility = (sp.getBoolean(R.string.key_show_cgm_button, false) && (xDripIsBgSource || dexcomIsSource)).toVisibility() @@ -714,12 +713,12 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList val graph = GraphView(context) graph.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, rh.dpToPx(skinProvider.activeSkin().secondaryGraphHeight)).also { it.setMargins(0, rh.dpToPx(15), 0, rh.dpToPx(10)) } - graph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphgrid) + graph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphGrid) graph.gridLabelRenderer?.reloadStyles() graph.gridLabelRenderer?.isHorizontalLabelsVisible = false graph.gridLabelRenderer?.labelVerticalWidth = axisWidth graph.gridLabelRenderer?.numVerticalLabels = 3 - graph.viewport.backgroundColor = rh.gac(context, R.attr.viewPortbackgroundColor) + graph.viewport.backgroundColor = rh.gac(context, R.attr.viewPortBackgroundColor) relativeLayout.addView(graph) val label = TextView(context) @@ -753,6 +752,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList @SuppressLint("SetTextI18n") fun updateBg() { + _binding ?: return val units = profileFunction.getUnits() binding.infoLayout.bg.text = overviewData.lastBg?.valueToUnitsString(units) ?: rh.gs(R.string.notavailable) @@ -802,6 +802,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } fun updateProfile() { + _binding ?: return val profileBackgroundColor = profileFunction.getProfile()?.let { if (it is ProfileSealed.EPS) { @@ -834,6 +835,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } private fun updateTemporaryBasal() { + _binding ?: return binding.infoLayout.baseBasal.text = overviewData.temporaryBasalText(iobCobCalculator) binding.infoLayout.baseBasal.setTextColor(overviewData.temporaryBasalColor(context, iobCobCalculator)) binding.infoLayout.baseBasalIcon.setImageResource(overviewData.temporaryBasalIcon(iobCobCalculator)) @@ -843,6 +845,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } private fun updateExtendedBolus() { + _binding ?: return val pump = activePlugin.activePump binding.infoLayout.extendedBolus.text = overviewData.extendedBolusText(iobCobCalculator) binding.infoLayout.extendedLayout.setOnClickListener { @@ -852,6 +855,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } fun updateTime() { + _binding ?: return binding.infoLayout.time.text = dateUtil.timeString(dateUtil.now()) // Status lights val pump = activePlugin.activePump @@ -883,6 +887,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } fun updateIobCob() { + _binding ?: return binding.infoLayout.iob.text = overviewData.iobText(iobCobCalculator) binding.infoLayout.iobLayout.setOnClickListener { activity?.let { OKDialog.show(it, rh.gs(R.string.iob), overviewData.iobDialogText(iobCobCalculator)) } @@ -910,6 +915,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList @SuppressLint("SetTextI18n") fun updateTemporaryTarget() { + _binding ?: return val units = profileFunction.getUnits() val tempTarget = overviewData.temporaryTarget if (tempTarget != null) { @@ -936,6 +942,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } private fun updateGraph() { + _binding ?: return val pump = activePlugin.activePump val graphData = GraphData(injector, binding.graphsLayout.bgGraph, overviewData) val menuChartSettings = overviewMenus.setting @@ -1016,11 +1023,13 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } private fun updateCalcProgress() { + _binding ?: return binding.progressBar.progress = overviewData.calcProgressPct binding.progressBar.visibility = (overviewData.calcProgressPct != 100).toVisibility() } private fun updateSensitivity() { + _binding ?: return if (sp.getBoolean(R.string.key_openapsama_useautosens, false) && constraintChecker.isAutosensModeEnabled().value()) { binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_swap_vert_black_48dp_green) } else { @@ -1034,12 +1043,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } private fun updatePumpStatus() { + _binding ?: return val status = overviewData.pumpStatus binding.pumpStatus.text = status binding.pumpStatusLayout.visibility = (status != "").toVisibility() } private fun updateNotification() { + _binding ?: return binding.notifications.let { notificationStore.updateNotifications(it) } } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt index e0f2ace989..b055d92501 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt @@ -8,7 +8,6 @@ import android.view.Menu import android.view.View import android.widget.ImageButton import androidx.annotation.AttrRes -import androidx.annotation.ColorRes import androidx.annotation.StringRes import androidx.appcompat.widget.PopupMenu import com.google.gson.Gson @@ -34,18 +33,18 @@ class OverviewMenus @Inject constructor( private val loop: Loop, private val config: Config ) { - enum class CharType(@StringRes val nameId: Int, @AttrRes val attrId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) { - PRE(R.string.overview_show_predictions, R.attr.predictionColor, primary = true, secondary = false, shortnameId = R.string.prediction_shortname), - TREAT(R.string.overview_show_treatments, R.attr.predictionColor, primary = true, secondary = false, shortnameId = R.string.treatments_shortname), - BAS(R.string.overview_show_basals, R.attr.basal, primary = true, secondary = false,shortnameId = R.string.basal_shortname), - ABS(R.string.overview_show_absinsulin, R.attr.iobColor, primary = false, secondary = true,shortnameId = R.string.abs_insulin_shortname), - IOB(R.string.overview_show_iob, R.attr.iobColor, primary = false, secondary = true,shortnameId = R.string.iob), - COB(R.string.overview_show_cob, R.attr.cobColor, primary = false, secondary = true,shortnameId = R.string.cob), - DEV(R.string.overview_show_deviations, R.attr.bgiColor, primary = false, secondary = true,shortnameId = R.string.deviation_shortname), - BGI(R.string.overview_show_bgi, R.attr.bgiColor, primary = false, secondary = true,shortnameId = R.string.bgi_shortname), - SEN(R.string.overview_show_sensitivity, R.attr.ratioColor, primary = false, secondary = true,shortnameId = R.string.sensitivity_shortname), - ACT(R.string.overview_show_activity, R.attr.activityColor, primary = true, secondary = false,shortnameId = R.string.activity_shortname), - DEVSLOPE(R.string.overview_show_deviationslope, R.attr.devslopeposColor, primary = false, secondary = true,shortnameId = R.string.devslope_shortname) + enum class CharType(@StringRes val nameId: Int, @AttrRes val attrId: Int, @AttrRes val attrTextId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) { + PRE(R.string.overview_show_predictions, R.attr.predictionColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.prediction_shortname), + TREAT(R.string.overview_show_treatments, R.attr.predictionColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.treatments_shortname), + BAS(R.string.overview_show_basals, R.attr.basal, R.attr.menuTextColor, primary = true, secondary = false,shortnameId = R.string.basal_shortname), + ABS(R.string.overview_show_absinsulin, R.attr.iobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.abs_insulin_shortname), + IOB(R.string.overview_show_iob, R.attr.iobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.iob), + COB(R.string.overview_show_cob, R.attr.cobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.cob), + DEV(R.string.overview_show_deviations, R.attr.bgiColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.deviation_shortname), + BGI(R.string.overview_show_bgi, R.attr.bgiColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.bgi_shortname), + SEN(R.string.overview_show_sensitivity, R.attr.ratioColor, R.attr.menuTextColorInverse, primary = false, secondary = true,shortnameId = R.string.sensitivity_shortname), + ACT(R.string.overview_show_activity, R.attr.activityColor, R.attr.menuTextColor, primary = true, secondary = false,shortnameId = R.string.activity_shortname), + DEVSLOPE(R.string.overview_show_deviationslope, R.attr.devSlopePosColor, R.attr.menuTextColor, primary = false, secondary = true, shortnameId = R.string.devslope_shortname) } companion object { @@ -122,8 +121,8 @@ class OverviewMenus @Inject constructor( if (insert) { val item = popup.menu.add(Menu.NONE, m.ordinal + 100 * (g + 1), Menu.NONE, rh.gs(m.nameId)) val title = item.title - val s = SpannableString(title) - s.setSpan(ForegroundColorSpan(rh.gc(R.color.black)), 0, s.length, 0) + val s = SpannableString(" " + title + " ") + s.setSpan(ForegroundColorSpan(rh.gac(context, m.attrTextId)), 0, s.length, 0) s.setSpan(BackgroundColorSpan(rh.gac(context, m.attrId)), 0, s.length, 0) item.title = s item.isCheckable = true diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt index 128f6c6613..5c1ffc8c27 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt @@ -76,6 +76,10 @@ class QuickWizardListActivity : DaggerAppCompatActivityWithResult(), OnStartDrag else -> R.drawable.ic_smartphone } ) + holder.binding.device.contentDescription = when (quickWizard[position].device()) { + QuickWizardEntry.DEVICE_WATCH -> rh.gs(R.string.a11y_only_on_watch) + else -> rh.gs(R.string.a11y_only_on_phone) + } } holder.binding.root.setOnClickListener { if (actionHelper.isNoAction) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt index af5593e3ca..9341f74dc7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.general.overview.dialogs -import android.app.TimePickerDialog import android.os.Bundle import android.text.format.DateFormat import android.view.LayoutInflater @@ -8,6 +7,8 @@ import android.view.View import android.view.ViewGroup import android.view.Window import android.view.WindowManager +import com.google.android.material.timepicker.MaterialTimePicker +import com.google.android.material.timepicker.TimeFormat import dagger.android.support.DaggerDialogFragment import info.nightscout.androidaps.R import info.nightscout.androidaps.databinding.OverviewEditquickwizardDialogBinding @@ -24,6 +25,7 @@ import info.nightscout.androidaps.utils.wizard.QuickWizard import info.nightscout.androidaps.utils.wizard.QuickWizardEntry import info.nightscout.shared.sharedPreferences.SP import org.json.JSONException +import java.util.* import javax.inject.Inject class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener { @@ -40,8 +42,7 @@ class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener { private var _binding: OverviewEditquickwizardDialogBinding? = null - // This property is only valid between onCreateView and - // onDestroyView. + // This property is only valid between onCreateView and onDestroyView. private val binding get() = _binding!! override fun onCreateView( @@ -96,41 +97,35 @@ class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener { } binding.okcancel.cancel.setOnClickListener { dismiss() } - // create an OnTimeSetListener - val fromTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute -> - fromSeconds = (T.hours(hour.toLong()).secs() + T.mins(minute.toLong()).secs()).toInt() - binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds)) + binding.from.setOnClickListener { + val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H + val timePicker = MaterialTimePicker.Builder() + .setTimeFormat(clockFormat) + .setHour(T.secs(fromSeconds.toLong()).hours().toInt()) + .setMinute(T.secs((fromSeconds % 3600).toLong()).mins().toInt()) + .build() + timePicker.addOnPositiveButtonClickListener { + fromSeconds = (T.hours(timePicker.hour.toLong()).secs() + T.mins(timePicker.minute.toLong()).secs()).toInt() + binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds)) + } + timePicker.show(parentFragmentManager, "event_time_time_picker") } - binding.from.setOnClickListener { - context?.let { - TimePickerDialog( - it, R.style.MaterialPickerTheme, - fromTimeSetListener, - T.secs(fromSeconds.toLong()).hours().toInt(), - T.secs((fromSeconds % 3600).toLong()).mins().toInt(), - DateFormat.is24HourFormat(context) - ).show() - } - } fromSeconds = entry.validFrom() binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds)) - val toTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute -> - toSeconds = (T.hours(hour.toLong()).secs() + T.mins(minute.toLong()).secs()).toInt() - binding.to.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(toSeconds)) - } - binding.to.setOnClickListener { - context?.let { - TimePickerDialog( - it, R.style.MaterialPickerTheme, - toTimeSetListener, - T.secs(toSeconds.toLong()).hours().toInt(), - T.secs((toSeconds % 3600).toLong()).mins().toInt(), - DateFormat.is24HourFormat(context) - ).show() + val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H + val timePicker = MaterialTimePicker.Builder() + .setTimeFormat(clockFormat) + .setHour(T.secs(toSeconds.toLong()).hours().toInt()) + .setMinute(T.secs((toSeconds % 3600).toLong()).mins().toInt()) + .build() + timePicker.addOnPositiveButtonClickListener { + toSeconds = (T.hours(timePicker.hour.toLong()).secs() + T.mins(timePicker.minute.toLong()).secs()).toInt() + binding.to.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(toSeconds)) } + timePicker.show(parentFragmentManager, "event_time_time_picker") } fun usePercentage(custom: Boolean) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt index b63425970b..9b21d70219 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.general.overview.graphData -import android.graphics.Color import android.graphics.DashPathEffect import android.graphics.Paint import com.jjoe64.graphview.GraphView @@ -66,7 +65,7 @@ class GraphData( addSeries(AreaGraphSeries(inRangeAreaDataPoints).also { it.color = 0 it.isDrawBackground = true - it.backgroundColor = rh.gac(graph.context,R.attr.inrangeBackground) + it.backgroundColor = rh.gac(graph.context,R.attr.inRangeBackground) }) } @@ -201,7 +200,7 @@ class GraphData( paint.style = Paint.Style.STROKE paint.strokeWidth = 2f paint.pathEffect = DashPathEffect(floatArrayOf(10f, 20f), 0f) - paint.color = Color.WHITE + paint.color = rh.gac(graph.context, R.attr.dotLineColor) }) }) } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt index b9bbb79809..c354ad9fbb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt @@ -34,8 +34,7 @@ class BolusDataPoint @Inject constructor( else if (data.isValid) rh.gac(context, R.attr.bolusDataPointColor) else rh.gac(context, R.attr.alarmColor) - override fun setY(y: Double) { yValue = y } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt index 7067ddd073..5fb6b34605 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt @@ -16,7 +16,6 @@ class Session(val authHeader: String?, @Volatile internal var iterations: Int = 0 - fun populateHeaders(headers: Headers) { if (this.token == null) { this.token = headers.get(sessionTokenHeader) @@ -39,4 +38,4 @@ class Session(val authHeader: String?, datasetReply = obj } } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt index c4f47e5aa3..12c7b55fd7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt @@ -95,5 +95,3 @@ class ProfileElement(ps: EffectiveProfileSwitch, serialNumber: String, dateUtil: internal var amount: Double ) } - - diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt index f19070624b..9db4595c16 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.general.tidepool.messages - class DatasetReplyMessage { internal var data: Data? = null diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt index 21cef09f87..63312f8df9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt @@ -115,9 +115,7 @@ class LocalProfileFragment : DaggerFragment() { override fun onTabUnselected(tab: TabLayout.Tab) {} override fun onTabReselected(tab: TabLayout.Tab) {} }) - - binding.dia.editText?.id?.let { binding.diaLabel.labelFor = it } - + binding.diaLabel.labelFor = binding.dia.editTextId binding.unlock.setOnClickListener { queryProtection() } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt index ea85e983b5..d36c5225ea 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt @@ -47,10 +47,8 @@ class VirtualPumpFragment : DaggerFragment() { // onDestroyView. private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - _binding = VirtualpumpFragmentBinding.inflate(inflater, container, false) - return binding.root - } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = + VirtualpumpFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root @Synchronized override fun onResume() { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt new file mode 100644 index 0000000000..d4cb82ce83 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt @@ -0,0 +1,111 @@ +package info.nightscout.androidaps.plugins.source + +import android.content.Context +import androidx.work.Worker +import androidx.work.WorkerParameters +import androidx.work.workDataOf +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.Constants +import info.nightscout.androidaps.R +import info.nightscout.androidaps.database.AppRepository +import info.nightscout.androidaps.database.entities.GlucoseValue +import info.nightscout.androidaps.database.transactions.CgmSourceTransaction +import info.nightscout.androidaps.interfaces.BgSource +import info.nightscout.androidaps.interfaces.PluginBase +import info.nightscout.androidaps.interfaces.PluginDescription +import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import info.nightscout.androidaps.receivers.DataWorker +import info.nightscout.androidaps.services.Intents +import info.nightscout.androidaps.utils.resources.ResourceHelper +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.math.log + +@Singleton +class AidexPlugin @Inject constructor( + injector: HasAndroidInjector, + rh: ResourceHelper, + aapsLogger: AAPSLogger +) : PluginBase(PluginDescription() + .mainType(PluginType.BGSOURCE) + .fragmentClass(BGSourceFragment::class.java.name) + .pluginIcon((R.drawable.ic_blooddrop_48)) + .pluginName(R.string.aidex) + .shortName(R.string.aidex_short) + .description(R.string.description_source_aidex), + aapsLogger, rh, injector +), BgSource { + + private var advancedFiltering = false + + /** + * Aidex App doesn't have upload to NS + */ + override fun shouldUploadToNs(glucoseValue: GlucoseValue): Boolean = true + + override fun advancedFilteringSupported(): Boolean { + return advancedFiltering + } + + // cannot be inner class because of needed injection + class AidexWorker( + context: Context, + params: WorkerParameters + ) : Worker(context, params) { + + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var aidexPlugin: AidexPlugin + @Inject lateinit var repository: AppRepository + @Inject lateinit var dataWorker: DataWorker + + init { + (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) + } + + override fun doWork(): Result { + var ret = Result.success() + + if (!aidexPlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled")) + val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1)) + ?: return Result.failure(workDataOf("Error" to "missing input data")) + + aapsLogger.debug(LTag.BGSOURCE, "Received Aidex data: $bundle") + + if (bundle.containsKey(Intents.AIDEX_TRANSMITTER_SN)) aapsLogger.debug(LTag.BGSOURCE, "transmitterSerialNumber: " + bundle.getString(Intents.AIDEX_TRANSMITTER_SN)) + if (bundle.containsKey(Intents.AIDEX_SENSOR_ID)) aapsLogger.debug(LTag.BGSOURCE, "sensorId: " + bundle.getString(Intents.AIDEX_SENSOR_ID)) + + val glucoseValues = mutableListOf() + + val timestamp = bundle.getLong(Intents.AIDEX_TIMESTAMP, 0) + val bgType = bundle.getString(Intents.AIDEX_BG_TYPE, "mg/dl") + val bgValue = bundle.getDouble(Intents.AIDEX_BG_VALUE, 0.0) + + val bgValueTarget = if (bgType.equals("mg/dl")) bgValue else bgValue * Constants.MMOLL_TO_MGDL + + aapsLogger.debug(LTag.BGSOURCE, "Received Aidex broadcast [time=$timestamp, bgType=$bgType, value=$bgValue, targetValue=$bgValueTarget") + + glucoseValues += CgmSourceTransaction.TransactionGlucoseValue( + timestamp = timestamp, + value = bgValueTarget, + raw = null, + noise = null, + trendArrow = GlucoseValue.TrendArrow.fromString(bundle.getString(Intents.AIDEX_BG_SLOPE_NAME)), + sourceSensor = GlucoseValue.SourceSensor.AIDEX + ) + repository.runTransactionForResult(CgmSourceTransaction(glucoseValues, emptyList(), null)) + .doOnError { + aapsLogger.error(LTag.DATABASE, "Error while saving values from Aidex", it) + ret = Result.failure(workDataOf("Error" to it.toString())) + } + .blockingGet() + .also { savedValues -> + savedValues.all().forEach { + aapsLogger.debug(LTag.DATABASE, "Inserted bg $it") + } + } + return ret + } + } +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt index 264a999eb8..ad6e0f867d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt @@ -197,6 +197,7 @@ class BGSourceFragment : DaggerFragment() { R.string.tomato -> Sources.Tomato R.string.glunovo -> Sources.Glunovo R.string.xdrip -> Sources.Xdrip + R.string.aidex -> Sources.Aidex else -> Sources.Unknown } uel.log( diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt index 6be6a5ad2e..6bde38ee9a 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt +++ b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt @@ -28,7 +28,6 @@ open class DataReceiver : DaggerBroadcastReceiver() { val bundle = intent.extras ?: return aapsLogger.debug(LTag.DATABASE, "onReceive ${intent.action} ${BundleLogger.log(bundle)}") - when (intent.action) { Intents.ACTION_NEW_BG_ESTIMATE -> OneTimeWorkRequest.Builder(XdripPlugin.XdripWorker::class.java) @@ -67,8 +66,11 @@ open class DataReceiver : DaggerBroadcastReceiver() { Intents.DEXCOM_BG -> OneTimeWorkRequest.Builder(DexcomPlugin.DexcomWorker::class.java) .setInputData(dataWorker.storeInputData(bundle, intent)).build() + Intents.AIDEX_NEW_BG_ESTIMATE -> + OneTimeWorkRequest.Builder(AidexPlugin.AidexWorker::class.java) + .setInputData(dataWorker.storeInputData(bundle, intent)).build() else -> null }?.let { request -> dataWorker.enqueue(request) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/services/Intents.kt b/app/src/main/java/info/nightscout/androidaps/services/Intents.kt index bf3a8d3695..925c74eff8 100644 --- a/app/src/main/java/info/nightscout/androidaps/services/Intents.kt +++ b/app/src/main/java/info/nightscout/androidaps/services/Intents.kt @@ -31,6 +31,15 @@ interface Intents { const val POCTECH_BG = "com.china.poctech.data" const val TOMATO_BG = "com.fanqies.tomatofn.BgEstimate" + // Aidex -> AAPS + var AIDEX_NEW_BG_ESTIMATE = "com.microtechmd.cgms.aidex.action.BgEstimate" + var AIDEX_BG_TYPE = "com.microtechmd.cgms.aidex.BgType" + var AIDEX_BG_VALUE = "com.microtechmd.cgms.aidex.BgValue" + var AIDEX_BG_SLOPE_NAME = "com.microtechmd.cgms.aidex.BgSlopeName" + var AIDEX_TIMESTAMP = "com.microtechmd.cgms.aidex.Time" // epoch in ms + var AIDEX_TRANSMITTER_SN = "com.microtechmd.cgms.aidex.TransmitterSerialNumber" + var AIDEX_SENSOR_ID = "com.microtechmd.cgms.aidex.SensorId" + // Broadcast status const val AAPS_BROADCAST = "info.nightscout.androidaps.status" } diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt index 45ba680275..03206a0d46 100644 --- a/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt +++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt @@ -2,6 +2,8 @@ package info.nightscout.androidaps.skins import android.util.DisplayMetrics import android.view.View.GONE +import android.view.ViewGroup +import androidx.core.view.marginStart import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.R import info.nightscout.androidaps.databinding.ActionsFragmentBinding @@ -38,6 +40,38 @@ class SkinLowRes @Inject constructor(private val config: Config) : SkinInterface override fun preProcessLandscapeOverviewLayout(dm: DisplayMetrics, binding: OverviewFragmentBinding, isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean) { if (!config.NSCLIENT && isLandscape) moveButtonsLayout(binding.root) + + binding.apply { + infoCard.elevation = 0F + infoCard.radius = 0F + val paramInfo = (infoCard.layoutParams as ViewGroup.MarginLayoutParams).apply { + setMargins(0,0,0,0) + } + infoCard.layoutParams = paramInfo + + statusCard.elevation = 0F + statusCard.radius = 0F + statusCard.strokeWidth = 1 + val paramStatus = (statusCard.layoutParams as ViewGroup.MarginLayoutParams).apply { + setMargins(0,0,0,0) + } + statusCard.layoutParams = paramStatus + + nsclientCard.elevation = 0F + nsclientCard.radius = 0F + val paramNsClient = (nsclientCard.layoutParams as ViewGroup.MarginLayoutParams).apply { + setMargins(0,0,0,0) + } + nsclientCard.layoutParams = paramNsClient + + graphCard.elevation = 0F + graphCard.radius = 0F + val paramGraph = (graphCard.layoutParams as ViewGroup.MarginLayoutParams).apply { + setMargins(0,0,0,0) + } + graphCard.layoutParams = paramGraph + } + } } diff --git a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt index 46756397d5..60edb6b6ad 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt @@ -16,6 +16,7 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.annotation.StyleRes import androidx.appcompat.view.ContextThemeWrapper +import com.google.android.material.dialog.MaterialAlertDialogBuilder import info.nightscout.androidaps.R import info.nightscout.androidaps.extensions.runOnUiThread import info.nightscout.androidaps.plugins.general.maintenance.formats.Prefs @@ -49,7 +50,6 @@ object PrefImportSummaryDialog { var idx = 0 val details = LinkedList() - for ((metaKey, metaEntry) in prefs.metadata) { val rowLayout = LayoutInflater.from(themedCtx).inflate(R.layout.import_summary_item, null) val label = (rowLayout.findViewById(R.id.summary_text) as TextView) @@ -92,7 +92,7 @@ object PrefImportSummaryDialog { webView.setBackgroundColor(Color.TRANSPARENT) webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null) - AlertDialogHelper.Builder(context, R.style.DialogTheme) + MaterialAlertDialogBuilder(context, R.style.DialogTheme) .setCustomTitle( AlertDialogHelper.buildCustomTitle( context, @@ -109,11 +109,10 @@ object PrefImportSummaryDialog { } } - val builder = AlertDialogHelper.Builder(context, theme) + val builder = MaterialAlertDialogBuilder(context, theme) .setMessage(context.getString(messageRes)) .setCustomTitle(AlertDialogHelper.buildCustomTitle(context, context.getString(R.string.nav_import), headerIcon, theme)) .setView(innerLayout) - .setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _: Int -> dialog.dismiss() SystemClock.sleep(100) @@ -137,4 +136,4 @@ object PrefImportSummaryDialog { dialog.setCanceledOnTouchOutside(false) } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt index 0bfd1f72f9..d4f2787538 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt @@ -8,6 +8,7 @@ import android.view.LayoutInflater import android.view.View import android.widget.TextView import androidx.annotation.DrawableRes +import com.google.android.material.dialog.MaterialAlertDialogBuilder import info.nightscout.androidaps.R import info.nightscout.androidaps.extensions.runOnUiThread @@ -19,7 +20,7 @@ object TwoMessagesAlertDialog { val secondMessageLayout = LayoutInflater.from(context).inflate(R.layout.dialog_alert_two_messages, null) (secondMessageLayout.findViewById(R.id.password_prompt_title) as TextView).text = secondMessage - AlertDialogHelper.Builder(context, R.style.DialogTheme) + MaterialAlertDialogBuilder(context, R.style.DialogTheme) .setMessage(message) .setCustomTitle( AlertDialogHelper.buildCustomTitle( @@ -32,7 +33,6 @@ object TwoMessagesAlertDialog { dialog.dismiss() SystemClock.sleep(100) if (ok != null) runOnUiThread { ok() } - } .setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _: Int -> dialog.dismiss() @@ -43,4 +43,4 @@ object TwoMessagesAlertDialog { .setCanceledOnTouchOutside(false) } -} \ No newline at end of file +} diff --git a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt index 53b93ff5bc..e123a4cc0e 100644 --- a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt +++ b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt @@ -105,17 +105,17 @@ class Widget : AppWidgetProvider() { views.setTextViewText(R.id.bg, overviewData.lastBg?.valueToUnitsString(units) ?: rh.gs(R.string.notavailable)) views.setTextColor( R.id.bg, when { - overviewData.isLow -> rh.gc(R.color.low) - overviewData.isHigh -> rh.gc(R.color.high) - else -> rh.gc(R.color.inrange) + overviewData.isLow -> rh.gc(R.color.widget_low) + overviewData.isHigh -> rh.gc(R.color.widget_high) + else -> rh.gc(R.color.widget_inrange) } ) views.setImageViewResource(R.id.arrow, trendCalculator.getTrendArrow(overviewData.lastBg).directionToIcon()) views.setInt( R.id.arrow, "setColorFilter", when { - overviewData.isLow -> rh.gc(R.color.low) - overviewData.isHigh -> rh.gc(R.color.high) - else -> rh.gc(R.color.inrange) + overviewData.isLow -> rh.gc(R.color.widget_low) + overviewData.isHigh -> rh.gc(R.color.widget_high) + else -> rh.gc(R.color.widget_inrange) } ) @@ -140,7 +140,7 @@ class Widget : AppWidgetProvider() { private fun updateTemporaryBasal(views: RemoteViews) { views.setTextViewText(R.id.base_basal, overviewData.temporaryBasalText(iobCobCalculator)) - views.setTextColor(R.id.base_basal, iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gc(R.color.basal) } + views.setTextColor(R.id.base_basal, iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gc(R.color.widget_basal) } ?: rh.gc(R.color.white)) views.setImageViewResource(R.id.base_basal_icon, overviewData.temporaryBasalIcon(iobCobCalculator)) } @@ -176,7 +176,7 @@ class Widget : AppWidgetProvider() { // this is crashing, use background as text for now //views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextWarning)) //views.setInt(R.id.temp_target, "setBackgroundColor", rh.gc(R.color.ribbonWarning)) - views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonWarning)) + views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonWarning)) views.setTextViewText(R.id.temp_target, Profile.toTargetRangeString(tempTarget.lowTarget, tempTarget.highTarget, GlucoseUnit.MGDL, units) + " " + dateUtil.untilString(tempTarget.end, rh)) } else { // If the target is not the same as set in the profile then oref has overridden it @@ -189,12 +189,12 @@ class Widget : AppWidgetProvider() { // this is crashing, use background as text for now //views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextWarning)) //views.setInt(R.id.temp_target, "setBackgroundResource", rh.gc(R.color.tempTargetBackground)) - views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonWarning)) + views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonWarning)) } else { // this is crashing, use background as text for now //views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextDefault)) //views.setInt(R.id.temp_target, "setBackgroundColor", rh.gc(R.color.ribbonDefault)) - views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextDefault)) + views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonTextDefault)) views.setTextViewText(R.id.temp_target, Profile.toTargetRangeString(profile.getTargetLowMgdl(), profile.getTargetHighMgdl(), GlucoseUnit.MGDL, units)) } } @@ -206,14 +206,14 @@ class Widget : AppWidgetProvider() { profileFunction.getProfile()?.let { if (it is ProfileSealed.EPS) { if (it.value.originalPercentage != 100 || it.value.originalTimeshift != 0L || it.value.originalDuration != 0L) - rh.gc(R.color.ribbonWarning) - else rh.gc(R.color.ribbonTextDefault) + rh.gc(R.color.widget_ribbonWarning) + else rh.gc(R.color.widget_ribbonTextDefault) } else if (it is ProfileSealed.PS) { - rh.gc(R.color.ribbonTextDefault) + rh.gc(R.color.widget_ribbonTextDefault) } else { - rh.gc(R.color.ribbonTextDefault) + rh.gc(R.color.widget_ribbonTextDefault) } - } ?: rh.gc(R.color.ribbonCritical) + } ?: rh.gc(R.color.widget_ribbonCritical) views.setTextViewText(R.id.active_profile, profileFunction.getProfileNameWithRemainingTime()) // this is crashing, use background as text for now diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt index 8d47b1a675..3310638636 100644 --- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt @@ -30,9 +30,10 @@ class PrepareBasalDataWorker( @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var rh: ResourceHelper @Inject lateinit var rxBus: RxBus - + var ctx: Context init { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) + ctx = rh.getThemedCtx(context) } class PrepareBasalData( @@ -116,12 +117,12 @@ class PrepareBasalDataWorker( // create series data.overviewData.baseBasalGraphSeries = LineGraphSeries(Array(baseBasalArray.size) { i -> baseBasalArray[i] }).also { it.isDrawBackground = true - it.backgroundColor = rh.gc(R.color.basebasal) + it.backgroundColor = rh.gac(ctx, R.attr.baseBasalColor ) it.thickness = 0 } data.overviewData.tempBasalGraphSeries = LineGraphSeries(Array(tempBasalArray.size) { i -> tempBasalArray[i] }).also { it.isDrawBackground = true - it.backgroundColor = rh.gc(R.color.tempbasal) + it.backgroundColor = rh.gac(ctx, R.attr.tempBasalColor ) it.thickness = 0 } data.overviewData.basalLineGraphSeries = LineGraphSeries(Array(basalLineArray.size) { i -> basalLineArray[i] }).also { @@ -129,14 +130,14 @@ class PrepareBasalDataWorker( paint.style = Paint.Style.STROKE paint.strokeWidth = rh.getDisplayMetrics().scaledDensity * 2 paint.pathEffect = DashPathEffect(floatArrayOf(2f, 4f), 0f) - paint.color = rh.gc(R.color.basal) + paint.color = rh.gac(ctx, R.attr.basal ) }) } data.overviewData.absoluteBasalGraphSeries = LineGraphSeries(Array(absoluteBasalLineArray.size) { i -> absoluteBasalLineArray[i] }).also { it.setCustomPaint(Paint().also { absolutePaint -> absolutePaint.style = Paint.Style.STROKE absolutePaint.strokeWidth = rh.getDisplayMetrics().scaledDensity * 2 - absolutePaint.color = rh.gc(R.color.basal) + absolutePaint.color =rh.gac(ctx, R.attr.basal ) }) } rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_BASAL_DATA, 100, null)) diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt index 606258106c..35046e295b 100644 --- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt @@ -51,9 +51,10 @@ class PrepareIobAutosensGraphDataWorker( @Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var repository: AppRepository @Inject lateinit var rxBus: RxBus - + var ctx: Context init { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) + ctx = rh.getThemedCtx(context) } class PrepareIobAutosensData( @@ -64,7 +65,6 @@ class PrepareIobAutosensGraphDataWorker( override fun doWork(): Result { val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareIobAutosensData? ?: return Result.failure(workDataOf("Error" to "missing input data")) - rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_IOB_AUTOSENS_DATA, 0, null)) val iobArray: MutableList = ArrayList() val absIobArray: MutableList = ArrayList() @@ -158,15 +158,15 @@ class PrepareIobAutosensGraphDataWorker( // DEVIATIONS if (autosensData != null) { - var color = rh.gc(R.color.deviationblack) // "=" + var color = rh.gac( ctx, R.attr.deviationBlackColor) // "=" if (autosensData.type == "" || autosensData.type == "non-meal") { - if (autosensData.pastSensitivity == "C") color = rh.gc(R.color.deviationgrey) - if (autosensData.pastSensitivity == "+") color = rh.gc(R.color.deviationgreen) - if (autosensData.pastSensitivity == "-") color = rh.gc(R.color.deviationred) + if (autosensData.pastSensitivity == "C") color = rh.gac( ctx, R.attr.deviationGreyColor) + if (autosensData.pastSensitivity == "+") color = rh.gac( ctx, R.attr.deviationGreenColor) + if (autosensData.pastSensitivity == "-") color = rh.gac( ctx, R.attr.deviationRedColor) } else if (autosensData.type == "uam") { - color = rh.gc(R.color.uam) + color = rh.gac( ctx, R.attr.uamColor) } else if (autosensData.type == "csf") { - color = rh.gc(R.color.deviationgrey) + color = rh.gac( ctx, R.attr.deviationGreyColor) } devArray.add(OverviewPlugin.DeviationDataPoint(time.toDouble(), autosensData.deviation, color, data.overviewData.devScale)) data.overviewData.maxDevValueFound = maxOf(data.overviewData.maxDevValueFound, abs(autosensData.deviation), abs(bgi)) @@ -192,14 +192,14 @@ class PrepareIobAutosensGraphDataWorker( // IOB data.overviewData.iobSeries = FixedLineGraphSeries(Array(iobArray.size) { i -> iobArray[i] }).also { it.isDrawBackground = true - it.backgroundColor = -0x7f000001 and rh.gc(R.color.iob) //50% - it.color = rh.gc(R.color.iob) + it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.iobColor) //50% + it.color = rh.gac( ctx, R.attr.iobColor) it.thickness = 3 } data.overviewData.absIobSeries = FixedLineGraphSeries(Array(absIobArray.size) { i -> absIobArray[i] }).also { it.isDrawBackground = true - it.backgroundColor = -0x7f000001 and rh.gc(R.color.iob) //50% - it.color = rh.gc(R.color.iob) + it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.iobColor) //50% + it.color = rh.gac( ctx, R.attr.iobColor) it.thickness = 3 } @@ -210,7 +210,7 @@ class PrepareIobAutosensGraphDataWorker( val iobPrediction: MutableList = ArrayList() val iobPredictionArray = data.iobCobCalculator.calculateIobArrayForSMB(lastAutosensResult, SMBDefaults.exercise_mode, SMBDefaults.half_basal_exercise_target, isTempTarget) for (i in iobPredictionArray) { - iobPrediction.add(i.setColor(rh.gc(R.color.iobPredAS))) + iobPrediction.add(i.setColor(rh.gac( ctx, R.attr.iobPredASColor))) data.overviewData.maxIobValueFound = max(data.overviewData.maxIobValueFound, abs(i.iob)) } data.overviewData.iobPredictions1Series = PointsWithLabelGraphSeries(Array(iobPrediction.size) { i -> iobPrediction[i] }) @@ -222,8 +222,8 @@ class PrepareIobAutosensGraphDataWorker( // COB data.overviewData.cobSeries = FixedLineGraphSeries(Array(cobArray.size) { i -> cobArray[i] }).also { it.isDrawBackground = true - it.backgroundColor = -0x7f000001 and rh.gc(R.color.cob) //50% - it.color = rh.gc(R.color.cob) + it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.cobColor) //50% + it.color = rh.gac( ctx, R.attr.cobColor) it.thickness = 3 } data.overviewData.cobMinFailOverSeries = PointsWithLabelGraphSeries(Array(minFailOverActiveList.size) { i -> minFailOverActiveList[i] }) @@ -231,7 +231,7 @@ class PrepareIobAutosensGraphDataWorker( // ACTIVITY data.overviewData.activitySeries = FixedLineGraphSeries(Array(actArrayHist.size) { i -> actArrayHist[i] }).also { it.isDrawBackground = false - it.color = rh.gc(R.color.activity) + it.color = rh.gac( ctx, R.attr.activityColor) it.thickness = 3 } data.overviewData.activityPredictionSeries = FixedLineGraphSeries(Array(actArrayPrediction.size) { i -> actArrayPrediction[i] }).also { @@ -239,14 +239,14 @@ class PrepareIobAutosensGraphDataWorker( paint.style = Paint.Style.STROKE paint.strokeWidth = 3f paint.pathEffect = DashPathEffect(floatArrayOf(4f, 4f), 0f) - paint.color = rh.gc(R.color.activity) + paint.color = rh.gac( ctx, R.attr.activityColor) }) } // BGI data.overviewData.minusBgiSeries = FixedLineGraphSeries(Array(bgiArrayHist.size) { i -> bgiArrayHist[i] }).also { it.isDrawBackground = false - it.color = rh.gc(R.color.bgi) + it.color = rh.gac( ctx, R.attr.bgiColor) it.thickness = 3 } data.overviewData.minusBgiHistSeries = FixedLineGraphSeries(Array(bgiArrayPrediction.size) { i -> bgiArrayPrediction[i] }).also { @@ -254,7 +254,7 @@ class PrepareIobAutosensGraphDataWorker( paint.style = Paint.Style.STROKE paint.strokeWidth = 3f paint.pathEffect = DashPathEffect(floatArrayOf(4f, 4f), 0f) - paint.color = rh.gc(R.color.bgi) + paint.color = rh.gac( ctx, R.attr.bgiColor) }) } @@ -265,17 +265,17 @@ class PrepareIobAutosensGraphDataWorker( // RATIO data.overviewData.ratioSeries = LineGraphSeries(Array(ratioArray.size) { i -> ratioArray[i] }).also { - it.color = rh.gc(R.color.ratio) + it.color = rh.gac( ctx, R.attr.ratioColor) it.thickness = 3 } // DEV SLOPE data.overviewData.dsMaxSeries = LineGraphSeries(Array(dsMaxArray.size) { i -> dsMaxArray[i] }).also { - it.color = rh.gc(R.color.devslopepos) + it.color = rh.gac( ctx, R.attr.devSlopePosColor) it.thickness = 3 } data.overviewData.dsMinSeries = LineGraphSeries(Array(dsMinArray.size) { i -> dsMinArray[i] }).also { - it.color = rh.gc(R.color.devslopeneg) + it.color = rh.gac( ctx, R.attr.devSlopeNegColor) it.thickness = 3 } rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_IOB_AUTOSENS_DATA, 100, null)) diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt index 4f960fd187..49bedb98e2 100644 --- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt @@ -1,6 +1,7 @@ package info.nightscout.androidaps.workflow import android.content.Context +import androidx.core.content.ContextCompat import androidx.work.Worker import androidx.work.WorkerParameters import androidx.work.workDataOf @@ -33,9 +34,10 @@ class PrepareTemporaryTargetDataWorker( @Inject lateinit var repository: AppRepository @Inject lateinit var loop: Loop @Inject lateinit var rxBus: RxBus - + var ctx: Context init { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) + ctx = rh.getThemedCtx(context) } class PrepareTemporaryTargetData( @@ -76,7 +78,7 @@ class PrepareTemporaryTargetDataWorker( // create series data.overviewData.temporaryTargetSeries = LineGraphSeries(Array(targetsSeriesArray.size) { i -> targetsSeriesArray[i] }).also { it.isDrawBackground = false - it.color = rh.gc(R.color.tempTargetBackground) + it.color = rh.gac(ctx, R.attr.tempTargetBackgroundColor ) it.thickness = 2 } rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_TEMPORARY_TARGET_DATA, 100, null)) diff --git a/app/src/main/res/drawable/ic_byoda.xml b/app/src/main/res/drawable/ic_byoda.xml index da63bef0df..8a3de6c453 100644 --- a/app/src/main/res/drawable/ic_byoda.xml +++ b/app/src/main/res/drawable/ic_byoda.xml @@ -5,5 +5,5 @@ android:viewportHeight="24"> + android:fillColor="@color/byodaGray"/> diff --git a/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml b/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml index 840a639f9c..e9385125b6 100644 --- a/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml +++ b/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml @@ -5,5 +5,5 @@ android:viewportHeight="24"> + android:fillColor="?attr/basalNoTbrColor"/> diff --git a/app/src/main/res/drawable/ic_cp_basal_start.xml b/app/src/main/res/drawable/ic_cp_basal_start.xml index 1b7781daed..22ba9382ec 100644 --- a/app/src/main/res/drawable/ic_cp_basal_start.xml +++ b/app/src/main/res/drawable/ic_cp_basal_start.xml @@ -5,5 +5,5 @@ android:viewportHeight="24"> + android:fillColor="?attr/basalStartColor"/> diff --git a/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml b/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml index 1b7781daed..dba9f794d9 100644 --- a/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml +++ b/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml @@ -5,5 +5,5 @@ android:viewportHeight="24"> + android:fillColor="?attr/basalHighColor"/> diff --git a/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml b/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml index 9f3d94563f..bcac9407aa 100644 --- a/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml +++ b/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml @@ -5,5 +5,5 @@ android:viewportHeight="24"> + android:fillColor="?attr/basalLowColor"/> diff --git a/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml b/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml index f78eaede2c..e5dc16a43e 100644 --- a/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml +++ b/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_target_manual.xml b/app/src/main/res/drawable/ic_target_manual.xml index fc41c52757..086076077e 100644 --- a/app/src/main/res/drawable/ic_target_manual.xml +++ b/app/src/main/res/drawable/ic_target_manual.xml @@ -8,7 +8,7 @@ android:fillColor="@color/tempTargetConfirmation"/> + android:fillColor="@color/inRange"/> diff --git a/app/src/main/res/drawable/ic_temptarget_flat.xml b/app/src/main/res/drawable/ic_temptarget_flat.xml index bf1a2492a1..dff5ff88e4 100644 --- a/app/src/main/res/drawable/ic_temptarget_flat.xml +++ b/app/src/main/res/drawable/ic_temptarget_flat.xml @@ -5,7 +5,7 @@ android:viewportHeight="24"> + android:fillColor="@color/inRange"/> diff --git a/app/src/main/res/drawable/ic_temptarget_low.xml b/app/src/main/res/drawable/ic_temptarget_low.xml index a161fd12f4..b91b1dac51 100644 --- a/app/src/main/res/drawable/ic_temptarget_low.xml +++ b/app/src/main/res/drawable/ic_temptarget_low.xml @@ -5,7 +5,7 @@ android:viewportHeight="24"> + android:fillColor="@color/inRange"/> diff --git a/app/src/main/res/drawable/ic_trash_outline.xml b/app/src/main/res/drawable/ic_trash_outline.xml index a411c394e0..296cdd090a 100644 --- a/app/src/main/res/drawable/ic_trash_outline.xml +++ b/app/src/main/res/drawable/ic_trash_outline.xml @@ -3,5 +3,5 @@ android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_x_swap_vert.xml b/app/src/main/res/drawable/ic_x_swap_vert.xml index f5182fe7b4..3d6735ae12 100644 --- a/app/src/main/res/drawable/ic_x_swap_vert.xml +++ b/app/src/main/res/drawable/ic_x_swap_vert.xml @@ -4,7 +4,8 @@ android:viewportHeight="24" android:viewportWidth="24" xmlns:android="http://schemas.android.com/apk/res/android"> - - - + + + diff --git a/app/src/main/res/layout/actions_fragment.xml b/app/src/main/res/layout/actions_fragment.xml index d7b04c933f..aff0d78e1b 100644 --- a/app/src/main/res/layout/actions_fragment.xml +++ b/app/src/main/res/layout/actions_fragment.xml @@ -1,9 +1,9 @@ - - + android:layout_marginStart="4dp" + android:layout_marginEnd="4dp" + android:layout_marginTop="4dp" + app:cardCornerRadius="4dp" + app:contentPadding="2dp" + app:cardElevation="4dp" + app:cardUseCompatPadding="false" + android:layout_gravity="center"> - + + + + + + + + + + + + + + + + + + + + + android:layout_marginStart="4dp" + android:layout_marginEnd="4dp" + android:layout_marginTop="4dp" + app:cardCornerRadius="4dp" + app:contentPadding="2dp" + app:cardElevation="4dp" + app:cardUseCompatPadding="false" + android:layout_gravity="center"> - + android:layout_marginTop="10dp" /> - + - - - - - - - - - - - + android:layout_marginStart="4dp" + android:layout_marginEnd="4dp" + android:layout_marginTop="4dp" + app:cardCornerRadius="4dp" + app:contentPadding="2dp" + app:cardElevation="4dp" + app:cardUseCompatPadding="false" + android:layout_gravity="center"> - + - + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginStart="4dp" + android:layout_marginEnd="4dp" + android:layout_marginTop="4dp" + android:layout_marginBottom="4dp" + app:cardCornerRadius="4dp" + app:contentPadding="2dp" + app:cardElevation="4dp" + app:cardUseCompatPadding="false" + android:layout_gravity="center"> - - - + android:paddingStart="15dp" + android:paddingEnd="15dp" + android:text="@string/tools" /> - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="10dp" + android:padding="10dip" + app:columnCount="2"> - + - + + + + + - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_historybrowse.xml b/app/src/main/res/layout/activity_historybrowse.xml index f3792b7e91..f904a06eb4 100644 --- a/app/src/main/res/layout/activity_historybrowse.xml +++ b/app/src/main/res/layout/activity_historybrowse.xml @@ -59,7 +59,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" - android:text="24" /> + tools:text="24" /> @@ -111,5 +111,4 @@ - diff --git a/app/src/main/res/layout/activity_logsetting.xml b/app/src/main/res/layout/activity_logsetting.xml index cb1573ecf8..4236005fd8 100644 --- a/app/src/main/res/layout/activity_logsetting.xml +++ b/app/src/main/res/layout/activity_logsetting.xml @@ -31,8 +31,8 @@ android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" - android:layout_marginLeft="10dp" - android:layout_marginRight="10dp" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" android:text="@string/nav_logsettings" android:textAlignment="center" android:textAppearance="?android:attr/textAppearanceLarge" /> diff --git a/app/src/main/res/layout/activity_profilehelper.xml b/app/src/main/res/layout/activity_profilehelper.xml index 73353f3d1c..b9e2aaf3b5 100644 --- a/app/src/main/res/layout/activity_profilehelper.xml +++ b/app/src/main/res/layout/activity_profilehelper.xml @@ -15,7 +15,7 @@ @@ -25,10 +25,9 @@ android:layout_height="30dp" android:layout_weight="1" android:gravity="center" - android:paddingLeft="5dp" - android:paddingRight="5dp" - android:text="1" - tools:ignore="HardcodedText" /> + android:paddingStart="5dp" + android:paddingEnd="5dp" + android:text="Profile 1" /> + android:paddingStart="5dp" + android:paddingEnd="5dp" + android:text="Profile 2" /> @@ -178,7 +176,7 @@ @@ -64,8 +65,8 @@ android:layout_gravity="bottom|center_horizontal" android:background="@color/black_alpha_40" android:orientation="horizontal" - android:paddingLeft="16dp" - android:paddingRight="16dp"> + android:paddingStart="16dp" + android:paddingEnd="16dp">