From 43515f7b17e7b3b45e7b5a14e0ec53aef4fb06db Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Tue, 28 Feb 2023 08:29:45 +0100 Subject: [PATCH] Buttons in overview --- pump/medtrum/build.gradle | 5 +- .../nightscout/pump/medtrum/MedtrumPlugin.kt | 4 +- .../medtrum/di/MedtrumActivitiesModule.kt | 13 - .../pump/medtrum/di/MedtrumInjectHelpers.kt | 12 + .../pump/medtrum/di/MedtrumModule.kt | 47 ++- .../pump/medtrum/di/MedtrumServicesModule.kt | 11 - .../pump/medtrum/ui/BaseNavigator.kt | 7 + ...Fragment.kt => MedtrumOverviewFragment.kt} | 10 +- .../medtrum/ui/viewmodel/BaseViewModel.kt | 31 ++ .../medtrum/ui/viewmodel/OverviewViewModel.kt | 31 ++ .../medtrum/ui/viewmodel/ViewModelFactory.kt | 40 +++ .../res/layout/medtrum_overview_fragment.xml | 304 +++++++++++++++++ .../main/res/layout/medtrum_pump_fragment.xml | 306 ------------------ pump/medtrum/src/main/res/values/strings.xml | 2 + 14 files changed, 479 insertions(+), 344 deletions(-) delete mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumActivitiesModule.kt create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumInjectHelpers.kt delete mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumServicesModule.kt create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/BaseNavigator.kt rename pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/{MedtrumPumpFragment.kt => MedtrumOverviewFragment.kt} (90%) create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/BaseViewModel.kt create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/OverviewViewModel.kt create mode 100644 pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/ViewModelFactory.kt create mode 100644 pump/medtrum/src/main/res/layout/medtrum_overview_fragment.xml delete mode 100644 pump/medtrum/src/main/res/layout/medtrum_pump_fragment.xml diff --git a/pump/medtrum/build.gradle b/pump/medtrum/build.gradle index 9163baf95a..c24e386377 100644 --- a/pump/medtrum/build.gradle +++ b/pump/medtrum/build.gradle @@ -13,13 +13,16 @@ apply from: "${project.rootDir}/core/main/test_dependencies.gradle" apply from: "${project.rootDir}/core/main/jacoco_global.gradle" android { - namespace 'info.nightscout.pump.medtrum' + dataBinding { + enabled = true + } } dependencies { implementation project(':app-wear-shared:shared') implementation project(':database:entities') + implementation project(':core:libraries') implementation project(':core:interfaces') implementation project(':core:main') implementation project(':core:ui') diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index f799d15e51..959fac5b59 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -26,7 +26,7 @@ import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CustomCommand import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.TimeChangeType -import info.nightscout.pump.medtrum.ui.MedtrumPumpFragment +import info.nightscout.pump.medtrum.ui.MedtrumOverviewFragment import info.nightscout.pump.medtrum.services.MedtrumService import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus @@ -67,7 +67,7 @@ class MedtrumPlugin @Inject constructor( ) : PumpPluginBase( PluginDescription() .mainType(PluginType.PUMP) - .fragmentClass(MedtrumPumpFragment::class.java.name) + .fragmentClass(MedtrumOverviewFragment::class.java.name) .pluginIcon(info.nightscout.core.ui.R.drawable.ic_eopatch2_128) // TODO .pluginName(R.string.medtrum) .shortName(R.string.medtrum_pump_shortname) diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumActivitiesModule.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumActivitiesModule.kt deleted file mode 100644 index 8bac156f22..0000000000 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumActivitiesModule.kt +++ /dev/null @@ -1,13 +0,0 @@ -package info.nightscout.pump.medtrum.di - -import dagger.Module -import dagger.android.ContributesAndroidInjector -import info.nightscout.pump.medtrum.ui.MedtrumPumpFragment - -@Module -@Suppress("unused") -abstract class MedtrumActivitiesModule { - - @ContributesAndroidInjector abstract fun contributesMedtrumPumpFragment(): MedtrumPumpFragment - -} diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumInjectHelpers.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumInjectHelpers.kt new file mode 100644 index 0000000000..96118f4670 --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumInjectHelpers.kt @@ -0,0 +1,12 @@ +package info.nightscout.pump.medtrum.di + +import javax.inject.Qualifier +import javax.inject.Scope + +@Qualifier +annotation class MedtrumPluginQualifier + +@MustBeDocumented +@Scope +@Retention(AnnotationRetention.RUNTIME) +annotation class FragmentScope diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt index 612053b6ec..9fcaf5d9d8 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumModule.kt @@ -1,9 +1,46 @@ package info.nightscout.pump.medtrum.di +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import dagger.Binds import dagger.Module +import dagger.Provides +import dagger.android.ContributesAndroidInjector +import dagger.multibindings.IntoMap +// import info.nightscout.androidaps.plugins.pump.eopatch.ui.viewmodel.OverviewViewModel +import info.nightscout.pump.medtrum.services.MedtrumService +import info.nightscout.pump.medtrum.ui.MedtrumOverviewFragment +import info.nightscout.pump.medtrum.ui.viewmodel.OverviewViewModel +// import info.nightscout.pump.medtrum.ui.viewmodel.ViewModel +import info.nightscout.pump.medtrum.ui.viewmodel.ViewModelFactory +import info.nightscout.pump.medtrum.ui.viewmodel.ViewModelKey +import javax.inject.Provider -@Module(includes = [ - MedtrumActivitiesModule::class, - MedtrumServicesModule::class -]) -open class MedtrumModule \ No newline at end of file + +@Module +@Suppress("unused") +abstract class MedtrumModule { + companion object { + + @Provides + @MedtrumPluginQualifier + fun providesViewModelFactory(@MedtrumPluginQualifier viewModels: MutableMap, @JvmSuppressWildcards Provider>): ViewModelProvider.Factory { + return ViewModelFactory(viewModels) + } + } + + // VIEW MODELS + @Binds + @IntoMap + @MedtrumPluginQualifier + @ViewModelKey(OverviewViewModel::class) + internal abstract fun bindsOverviewViewmodel(viewModel: OverviewViewModel): ViewModel + + // FRAGMENTS + @ContributesAndroidInjector + abstract fun contributesMedtrumOverviewFragment(): MedtrumOverviewFragment + + // SERVICE + @ContributesAndroidInjector + abstract fun contributesDanaRSService(): MedtrumService +} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumServicesModule.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumServicesModule.kt deleted file mode 100644 index 0c587bacc2..0000000000 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/di/MedtrumServicesModule.kt +++ /dev/null @@ -1,11 +0,0 @@ -package info.nightscout.pump.medtrum.di - -import dagger.Module -import dagger.android.ContributesAndroidInjector -import info.nightscout.pump.medtrum.services.MedtrumService - -@Module -@Suppress("unused") -abstract class MedtrumServicesModule { - @ContributesAndroidInjector abstract fun contributesDanaRSService(): MedtrumService -} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/BaseNavigator.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/BaseNavigator.kt new file mode 100644 index 0000000000..c1bebb0a93 --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/BaseNavigator.kt @@ -0,0 +1,7 @@ +package info.nightscout.pump.medtrum.ui + +interface BaseNavigator { + fun back() + + fun finish(finishAffinity: Boolean = false) +} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPumpFragment.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt similarity index 90% rename from pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPumpFragment.kt rename to pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt index ac94004d8b..76f36dded1 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumPumpFragment.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/MedtrumOverviewFragment.kt @@ -11,7 +11,7 @@ import info.nightscout.core.extensions.toStringFull import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.pump.medtrum.databinding.MedtrumPumpFragmentBinding +import info.nightscout.pump.medtrum.databinding.MedtrumOverviewFragmentBinding import info.nightscout.pump.medtrum.events.EventMedtrumPumpUpdateGui import info.nightscout.pump.medtrum.MedtrumPlugin import info.nightscout.rx.AapsSchedulers @@ -25,7 +25,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import javax.inject.Inject -class MedtrumPumpFragment : DaggerFragment() { +class MedtrumOverviewFragment : DaggerFragment() { @Inject lateinit var rxBus: RxBus @Inject lateinit var rh: ResourceHelper @@ -41,14 +41,14 @@ class MedtrumPumpFragment : DaggerFragment() { private lateinit var refreshLoop: Runnable private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) - private var _binding: MedtrumPumpFragmentBinding? = null + private var _binding: MedtrumOverviewFragmentBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = - MedtrumPumpFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root + MedtrumOverviewFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root @Synchronized override fun onResume() { @@ -93,8 +93,6 @@ class MedtrumPumpFragment : DaggerFragment() { binding.baseBasalRate.text = rh.gs(info.nightscout.core.ui.R.string.pump_base_basal_rate, MedtrumPlugin.baseBasalRate) binding.tempbasal.text = iobCobCalculator.getTempBasal(dateUtil.now())?.toStringFull(profile, dateUtil) ?: "" - binding.extendedbolus.text = iobCobCalculator.getExtendedBolus(dateUtil.now())?.toStringFull(dateUtil) - ?: "" binding.battery.text = rh.gs(info.nightscout.core.ui.R.string.format_percent, 0) // TODO binding.reservoir.text = rh.gs(info.nightscout.interfaces.R.string.format_insulin_units, 0.0) // TODO diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/BaseViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/BaseViewModel.kt new file mode 100644 index 0000000000..2ff064649f --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/BaseViewModel.kt @@ -0,0 +1,31 @@ +package info.nightscout.pump.medtrum.ui.viewmodel + +import androidx.lifecycle.ViewModel +import info.nightscout.pump.medtrum.ui.BaseNavigator +import io.reactivex.rxjava3.disposables.CompositeDisposable +import io.reactivex.rxjava3.disposables.Disposable +import java.lang.ref.WeakReference + +abstract class BaseViewModel : ViewModel() { + + private var _navigator: WeakReference? = null + var navigator: N? + set(value) { + _navigator = WeakReference(value) + } + get() = _navigator?.get() + + private val compositeDisposable = CompositeDisposable() + + override fun onCleared() { + compositeDisposable.clear() + super.onCleared() + } + + fun back() = navigator?.back() + + fun finish() = navigator?.finish() + + fun Disposable.addTo() = apply { compositeDisposable.add(this) } + +} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/OverviewViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/OverviewViewModel.kt new file mode 100644 index 0000000000..c2288e5e23 --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/OverviewViewModel.kt @@ -0,0 +1,31 @@ +package info.nightscout.pump.medtrum.ui.viewmodel + +import info.nightscout.pump.medtrum.ui.BaseNavigator +import info.nightscout.pump.medtrum.ui.viewmodel.BaseViewModel +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag +import javax.inject.Inject + +class OverviewViewModel @Inject constructor( + private val aapsLogger: AAPSLogger +) : BaseViewModel() { + + val isPatchActivated : Boolean + get() = false // TODO + val isPatchConnected: Boolean + get() = false // TODO + + init { + // TODO + } + + fun onClickActivation(){ + aapsLogger.debug(LTag.PUMP, "Start Patch clicked!") + // TODO + } + + fun onClickDeactivation(){ + aapsLogger.debug(LTag.PUMP, "Stop Patch clicked!") + // TODO + } +} \ No newline at end of file diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/ViewModelFactory.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/ViewModelFactory.kt new file mode 100644 index 0000000000..6acf7d4404 --- /dev/null +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/ViewModelFactory.kt @@ -0,0 +1,40 @@ +package info.nightscout.pump.medtrum.ui.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import dagger.MapKey +import javax.inject.Inject +import javax.inject.Provider +import javax.inject.Singleton +import kotlin.reflect.KClass + +@MustBeDocumented +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) +@Retention(AnnotationRetention.RUNTIME) +@MapKey +internal annotation class ViewModelKey(val value: KClass) + +@Singleton +class ViewModelFactory @Inject constructor(private val creators: Map, @JvmSuppressWildcards Provider>) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + var creator: Provider? = creators[modelClass] + if (creator == null) { + for ((key, value) in creators) { + if (modelClass.isAssignableFrom(key)) { + creator = value + break + } + } + } + if (creator == null) { + throw IllegalArgumentException("unknown model class $modelClass") + } + try { + @Suppress("UNCHECKED_CAST") + return creator.get() as T + } catch (e: Exception) { + throw IllegalStateException(e) + } + + } +} \ No newline at end of file diff --git a/pump/medtrum/src/main/res/layout/medtrum_overview_fragment.xml b/pump/medtrum/src/main/res/layout/medtrum_overview_fragment.xml new file mode 100644 index 0000000000..f104a351de --- /dev/null +++ b/pump/medtrum/src/main/res/layout/medtrum_overview_fragment.xml @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +