TreatmentsPlugin -> dagger

This commit is contained in:
Milos Kozak 2019-12-28 22:51:04 +01:00
parent 377b5a9991
commit ca9486fab3
23 changed files with 276 additions and 215 deletions

View file

@ -37,9 +37,6 @@ import com.joanzapata.iconify.fonts.FontAwesomeModule;
import javax.inject.Inject;
import dagger.android.AndroidInjection;
import dagger.android.AndroidInjector;
import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.activities.HistoryBrowseActivity;
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
import info.nightscout.androidaps.activities.PreferencesActivity;
@ -68,10 +65,7 @@ import info.nightscout.androidaps.utils.SP;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
public class MainActivity extends NoSplashAppCompatActivity implements HasAndroidInjector {
@Inject
DispatchingAndroidInjector<Object> androidInjector;
public class MainActivity extends NoSplashAppCompatActivity {
private CompositeDisposable disposable = new CompositeDisposable();
@ -354,12 +348,4 @@ public class MainActivity extends NoSplashAppCompatActivity implements HasAndroi
return actionBarDrawerToggle.onOptionsItemSelected(item);
}
/**
* Returns an {@link AndroidInjector}.
*/
@Override
public AndroidInjector<Object> androidInjector() {
return androidInjector;
}
}

View file

@ -136,6 +136,7 @@ public class MainApp extends DaggerApplication {
@Inject OpenAPSAMAPlugin openAPSAMAPlugin;
@Inject OpenAPSSMBPlugin openAPSSMBPlugin;
@Inject StatusLinePlugin statusLinePlugin;
@Inject TreatmentsPlugin treatmentsPlugin;
@Override
public void onCreate() {
@ -215,7 +216,7 @@ public class MainApp extends DaggerApplication {
if (Config.APS) pluginsList.add(openAPSSMBPlugin);
pluginsList.add(NSProfilePlugin.getPlugin());
if (!Config.NSCLIENT) pluginsList.add(LocalProfilePlugin.INSTANCE);
pluginsList.add(TreatmentsPlugin.getPlugin());
pluginsList.add(treatmentsPlugin);
if (!Config.NSCLIENT) pluginsList.add(safetyPlugin);
if (!Config.NSCLIENT) pluginsList.add(VersionCheckerPlugin.INSTANCE);
if (Config.APS) pluginsList.add(StorageConstraintPlugin.getPlugin());

View file

@ -2,11 +2,13 @@ package info.nightscout.androidaps.activities
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.utils.LocaleHelper
open class NoSplashAppCompatActivity : AppCompatActivity() {
@Suppress("registered")
open class NoSplashAppCompatActivity : DaggerAppCompatActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme_NoActionBar)
super.onCreate(savedInstanceState)

View file

@ -8,14 +8,18 @@ import info.nightscout.androidaps.utils.OKDialog
import info.nightscout.androidaps.utils.TddCalculator
import info.nightscout.androidaps.utils.TirCalculator
import kotlinx.android.synthetic.main.stats_activity.*
import javax.inject.Inject
class StatsActivity : NoSplashAppCompatActivity() {
@Inject
lateinit var tddCalculator: TddCalculator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.stats_activity)
stats_tdds.text = TddCalculator.stats()
stats_tdds.text = tddCalculator.stats()
stats_tir.text = TirCalculator.stats()
stats_activity.text = ActivityMonitor.stats()

View file

@ -12,10 +12,14 @@ import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.utils.*
import kotlinx.android.synthetic.main.survey_activity.*
import org.slf4j.LoggerFactory
import javax.inject.Inject
class SurveyActivity : NoSplashAppCompatActivity() {
private val log = LoggerFactory.getLogger(SurveyActivity::class.java)
@Inject
lateinit var tddCalculator: TddCalculator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.survey_activity)
@ -26,7 +30,7 @@ class SurveyActivity : NoSplashAppCompatActivity() {
val profileList = profileStore?.getProfileList() ?: return
survey_spinner.adapter = ArrayAdapter(this, R.layout.spinner_centered, profileList)
survey_tdds.text = TddCalculator.stats()
survey_tdds.text = tddCalculator.stats()
survey_tir.text = TirCalculator.stats()
survey_activity.text = ActivityMonitor.stats()

View file

@ -3,14 +3,44 @@ package info.nightscout.androidaps.dependencyInjection
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.activities.*
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.androidaps.plugins.pump.common.dialog.RileyLinkBLEScanActivity
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
import info.nightscout.androidaps.plugins.pump.danaR.activities.DanaRHistoryActivity
import info.nightscout.androidaps.plugins.pump.danaR.activities.DanaRUserOptionsActivity
import info.nightscout.androidaps.plugins.pump.danaRS.activities.BLEScanActivity
import info.nightscout.androidaps.plugins.pump.danaRS.activities.PairingHelperActivity
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightAlertActivity
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightPairingActivity
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightPairingInformationActivity
import info.nightscout.androidaps.plugins.pump.medtronic.dialog.MedtronicHistoryActivity
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
@Module
abstract class ActivitiesModule {
@ContributesAndroidInjector
abstract fun contributeMainActivity(): MainActivity
@ContributesAndroidInjector
abstract fun contributesPreferencesActivity(): PreferencesActivity
@ContributesAndroidInjector abstract fun contributesBLEScanActivity(): BLEScanActivity
@ContributesAndroidInjector abstract fun contributeBolusProgressHelperActivity(): BolusProgressHelperActivity
@ContributesAndroidInjector abstract fun contributeDanaRHistoryActivity(): DanaRHistoryActivity
@ContributesAndroidInjector abstract fun contributeDanaRUserOptionsActivity(): DanaRUserOptionsActivity
@ContributesAndroidInjector abstract fun contributeErrorHelperActivity(): ErrorHelperActivity
@ContributesAndroidInjector abstract fun contributesHistoryBrowseActivity(): HistoryBrowseActivity
@ContributesAndroidInjector abstract fun contributesInsightAlertActivity(): InsightAlertActivity
@ContributesAndroidInjector abstract fun contributesInsightPairingActivity(): InsightPairingActivity
@ContributesAndroidInjector abstract fun contributesInsightPairingInformationActivity(): InsightPairingInformationActivity
@ContributesAndroidInjector abstract fun contributesLogSettingActivity(): LogSettingActivity
@ContributesAndroidInjector abstract fun contributeMainActivity(): MainActivity
@ContributesAndroidInjector abstract fun contributesMedtronicHistoryActivity(): MedtronicHistoryActivity
@ContributesAndroidInjector abstract fun contributesPairingHelperActivity(): PairingHelperActivity
@ContributesAndroidInjector abstract fun contributesPreferencesActivity(): PreferencesActivity
@ContributesAndroidInjector abstract fun contributesQuickWizardListActivity(): QuickWizardListActivity
@ContributesAndroidInjector abstract fun contributesRequestDexcomPermissionActivity(): RequestDexcomPermissionActivity
@ContributesAndroidInjector abstract fun contributesRileyLinkStatusActivity(): RileyLinkStatusActivity
@ContributesAndroidInjector abstract fun contributesRileyLinkBLEScanActivity(): RileyLinkBLEScanActivity
@ContributesAndroidInjector abstract fun contributesSetupWizardActivity(): SetupWizardActivity
@ContributesAndroidInjector abstract fun contributesStatsActivity(): StatsActivity
@ContributesAndroidInjector abstract fun contributesSurveyActivity(): SurveyActivity
@ContributesAndroidInjector abstract fun contributesTDDStatsActivity(): TDDStatsActivity
}

View file

@ -17,6 +17,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctionImplementation
import info.nightscout.androidaps.plugins.constraints.objectives.objectives.Objective5
import info.nightscout.androidaps.plugins.general.automation.actions.ActionSendSMS
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.commands.CommandSetProfile
import info.nightscout.androidaps.services.DataService
import info.nightscout.androidaps.utils.resources.ResourceHelper

View file

@ -8,39 +8,22 @@ import info.nightscout.androidaps.plugins.aps.openAPSAMA.OpenAPSAMAFragment
import info.nightscout.androidaps.plugins.aps.openAPSMA.OpenAPSMAFragment
import info.nightscout.androidaps.plugins.aps.openAPSSMB.OpenAPSSMBFragment
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorFragment
import info.nightscout.androidaps.plugins.profile.ns.NSProfileFragment
@Module
abstract class FragmentsModule {
@ContributesAndroidInjector
abstract fun contributesPreferencesFragment(): MyPreferenceFragment
@ContributesAndroidInjector
abstract fun contributesOpenAPSAMAFragment(): OpenAPSAMAFragment
@ContributesAndroidInjector
abstract fun contributesOpenAPSMAFragment(): OpenAPSMAFragment
@ContributesAndroidInjector
abstract fun contributesOpenAPSSMBFragment(): OpenAPSSMBFragment
@ContributesAndroidInjector
abstract fun contributesSmsCommunicatorFragment(): SmsCommunicatorFragment
@ContributesAndroidInjector
abstract fun contributesCalibrationDialog(): CalibrationDialog
@ContributesAndroidInjector
abstract fun contributesCarbsDialog(): CarbsDialog
@ContributesAndroidInjector
abstract fun contributesCareDialog(): CareDialog
@ContributesAndroidInjector
abstract fun contributesExtendedBolusDialog(): ExtendedBolusDialog
@ContributesAndroidInjector
abstract fun contributesFillDialog(): FillDialog
@ContributesAndroidInjector abstract fun contributesPreferencesFragment(): MyPreferenceFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSAMAFragment(): OpenAPSAMAFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSMAFragment(): OpenAPSMAFragment
@ContributesAndroidInjector abstract fun contributesOpenAPSSMBFragment(): OpenAPSSMBFragment
@ContributesAndroidInjector abstract fun contributesNSProfileFragment(): NSProfileFragment
@ContributesAndroidInjector abstract fun contributesSmsCommunicatorFragment(): SmsCommunicatorFragment
@ContributesAndroidInjector abstract fun contributesCalibrationDialog(): CalibrationDialog
@ContributesAndroidInjector abstract fun contributesCarbsDialog(): CarbsDialog
@ContributesAndroidInjector abstract fun contributesCareDialog(): CareDialog
@ContributesAndroidInjector abstract fun contributesExtendedBolusDialog(): ExtendedBolusDialog
@ContributesAndroidInjector abstract fun contributesFillDialog(): FillDialog
@ContributesAndroidInjector
abstract fun contributesInsulinDialog(): InsulinDialog

View file

@ -30,6 +30,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
@Inject
lateinit var profileFunction: ProfileFunction
@Inject
lateinit var treatmentsPlugin: TreatmentsPlugin
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_profileswitch_duration", overview_profileswitch_duration.value)
@ -104,7 +107,7 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_profileswitch), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
profileFunction.doProfileSwitch(profileStore, profile, duration.toInt(), percent, timeShift, eventTime)
treatmentsPlugin.doProfileSwitch(profileStore, profile, duration.toInt(), percent, timeShift, eventTime)
})
}
return true

View file

@ -1,19 +1,21 @@
package info.nightscout.androidaps.interfaces;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Intervals;
import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.NonOverlappingIntervals;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileIntervals;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.plugins.treatments.Treatment;
import info.nightscout.androidaps.data.Intervals;
import info.nightscout.androidaps.data.ProfileIntervals;
/**
* Created by mike on 14.06.2016.
@ -62,6 +64,8 @@ public interface TreatmentsInterface {
ProfileSwitch getProfileSwitchFromHistory(long time);
ProfileIntervals<ProfileSwitch> getProfileSwitchesFromHistory();
void addToHistoryProfileSwitch(ProfileSwitch profileSwitch);
void doProfileSwitch(@NotNull final ProfileStore profileStore, @NotNull final String profileName, final int duration, final int percentage, final int timeShift, final long date);
void doProfileSwitch(final int duration, final int percentage, final int timeShift);
long oldestDataAvailable();

View file

@ -6,8 +6,12 @@ package info.nightscout.androidaps.logging
interface AAPSLogger {
fun debug(message: String)
fun debug(enable: Boolean, tag: LTag, message: String)
fun debug(tag: LTag, message: String)
fun info(tag: LTag, message: String)
fun error(tag: LTag, message: String)
fun error(message: String)
fun error(message: String, throwable: Throwable)
fun error(tag: LTag, message: String, throwable: Throwable)
}

View file

@ -8,6 +8,14 @@ import android.util.Log
class AAPSLoggerDebug : AAPSLogger {
override fun debug(message: String) {
Log.d(LTag.CORE.tag, message)
}
override fun debug(enable: Boolean, tag: LTag, message: String) {
if (enable) Log.d(LTag.CORE.tag, message)
}
override fun debug(tag: LTag, message: String) {
Log.d(tag.tag, message)
}
@ -21,6 +29,14 @@ class AAPSLoggerDebug : AAPSLogger {
}
override fun error(message: String) {
Log.e(LTag.CORE.tag, message)
}
override fun error(message: String, throwable: Throwable) {
Log.e(LTag.CORE.tag, message, throwable)
}
override fun error(tag: LTag, message: String, throwable: Throwable) {
Log.e(tag.tag, message, throwable)

View file

@ -8,10 +8,19 @@ import org.slf4j.LoggerFactory
class AAPSLoggerProduction : AAPSLogger {
override fun debug(message: String) {
LoggerFactory.getLogger(LTag.CORE.tag).debug(message)
}
override fun debug(enable: Boolean, tag: LTag, message: String) {
if (enable && L.isEnabled(tag.tag)) {
LoggerFactory.getLogger(tag.tag).debug(message)
}
}
override fun debug(tag: LTag, message: String) {
if (L.isEnabled(tag.tag)) {
LoggerFactory.getLogger(tag.tag).debug(message)
}
}
@ -25,14 +34,20 @@ class AAPSLoggerProduction : AAPSLogger {
override fun error(tag: LTag, message: String) {
if (L.isEnabled(tag.tag)) {
LoggerFactory.getLogger(tag.tag).error(message)
}
}
override fun error(message: String) {
LoggerFactory.getLogger(LTag.CORE.tag).error(message)
}
override fun error(message: String, throwable: Throwable) {
LoggerFactory.getLogger(LTag.CORE.tag).error(message, throwable)
}
override fun error(tag: LTag, message: String, throwable: Throwable) {
if (L.isEnabled(tag.tag)) {
LoggerFactory.getLogger(tag.tag).error(message, throwable)
}
}
}

View file

@ -14,6 +14,4 @@ interface ProfileFunction {
fun getUnits(): String
fun getProfile(time: Long): Profile?
fun prepareProfileSwitch(profileStore: ProfileStore, profileName: String, duration: Int, percentage: Int, timeShift: Int, date: Long): ProfileSwitch
fun doProfileSwitch(profileStore: ProfileStore, profileName: String, duration: Int, percentage: Int, timeShift: Int, date: Long)
fun doProfileSwitch(duration: Int, percentage: Int, timeShift: Int)
}

View file

@ -6,12 +6,11 @@ import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.data.ProfileStore
import info.nightscout.androidaps.db.ProfileSwitch
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.sharedPreferences.SP
import java.security.spec.InvalidParameterSpecException
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class ProfileFunctionImplementation constructor(private val sp: SP) : ProfileFunction {
override fun getProfileName(): String =
@ -34,7 +33,7 @@ class ProfileFunctionImplementation constructor(private val sp: SP) : ProfileFun
}
override fun getProfile(time: Long): Profile? =
getProfile(System.currentTimeMillis())
ProfileFunctions.getInstance().getProfile(System.currentTimeMillis())
override fun getUnits(): String =
sp.getString(R.string.key_units, Constants.MGDL)
@ -54,27 +53,4 @@ class ProfileFunctionImplementation constructor(private val sp: SP) : ProfileFun
profileSwitch.percentage = percentage
return profileSwitch
}
override fun doProfileSwitch(profileStore: ProfileStore, profileName: String, duration: Int, percentage: Int, timeShift: Int, date: Long) {
val profileSwitch = prepareProfileSwitch(profileStore, profileName, duration, percentage, timeShift, date)
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch)
if (percentage == 90 && duration == 10)
sp.putBoolean(R.string.key_objectiveuseprofileswitch, true)
}
override fun doProfileSwitch(duration: Int, percentage: Int, timeShift: Int) {
getProfile()?.let {
val profileSwitch = ProfileSwitch()
profileSwitch.date = System.currentTimeMillis()
profileSwitch.source = Source.USER
profileSwitch.profileName = ProfileFunctions.getInstance().getProfileName(System.currentTimeMillis(), customized = false, showRemainingTime = false)
profileSwitch.profileJson = it.data.toString()
profileSwitch.profilePlugin = ConfigBuilderPlugin.getPlugin().activeProfileInterface::class.java.name
profileSwitch.durationInMinutes = duration
profileSwitch.isCPP = percentage != 100 || timeShift != 0
profileSwitch.timeshift = timeShift
profileSwitch.percentage = percentage
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch)
}
}
}

View file

@ -182,30 +182,4 @@ public class ProfileFunctions implements ProfileFunction {
return profileSwitch;
}
public void doProfileSwitch(@NotNull final ProfileStore profileStore, @NotNull final String profileName, final int duration, final int percentage, final int timeShift, final long date) {
ProfileSwitch profileSwitch = prepareProfileSwitch(profileStore, profileName, duration, percentage, timeShift, date);
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch);
if (percentage == 90 && duration == 10)
SP.putBoolean(R.string.key_objectiveuseprofileswitch, true);
}
public void doProfileSwitch(final int duration, final int percentage, final int timeShift) {
ProfileSwitch profileSwitch = TreatmentsPlugin.getPlugin().getProfileSwitchFromHistory(System.currentTimeMillis());
if (profileSwitch != null) {
profileSwitch = new ProfileSwitch();
profileSwitch.date = System.currentTimeMillis();
profileSwitch.source = Source.USER;
profileSwitch.profileName = getInstance().getProfileName(System.currentTimeMillis(), false, false);
profileSwitch.profileJson = getInstance().getProfile().getData().toString();
profileSwitch.profilePlugin = ConfigBuilderPlugin.getPlugin().getActiveProfileInterface().getClass().getName();
profileSwitch.durationInMinutes = duration;
profileSwitch.isCPP = percentage != 100 || timeShift != 0;
profileSwitch.timeshift = timeShift;
profileSwitch.percentage = percentage;
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch);
} else {
log.error("No profile switch existing");
}
}
}

View file

@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
import info.nightscout.androidaps.plugins.general.automation.elements.InputProfileName;
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement;
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.JsonHelper;
@ -33,7 +34,7 @@ public class ActionProfileSwitch extends Action {
// Prevent action if active profile is already active
// but we don't have a trigger IS_NOT_EQUAL
// so check is in the doRun()
ProfileInterface profileInterface = ConfigBuilderPlugin.getPlugin().getActiveProfileInterface();
ProfileInterface profileInterface = ConfigBuilderPlugin.getPlugin().getActiveProfileInterface();
if (profileInterface != null) {
ProfileStore profileStore = profileInterface.getProfile();
if (profileStore != null) {
@ -62,13 +63,13 @@ public class ActionProfileSwitch extends Action {
String activeProfileName = ProfileFunctions.getInstance().getProfileName();
//Check for uninitialized profileName
if ( profileName.equals("")){
if (profileName.equals("")) {
log.error("Selected profile not initialized");
if (callback != null)
callback.result(new PumpEnactResult().success(false).comment(R.string.error_field_must_not_be_empty)).run();
return;
}
if ( ProfileFunctions.getInstance().getProfile() == null){
if (ProfileFunctions.getInstance().getProfile() == null) {
log.error("ProfileFunctions not initialized");
if (callback != null)
callback.result(new PumpEnactResult().success(false).comment(R.string.noprofile)).run();
@ -90,15 +91,15 @@ public class ActionProfileSwitch extends Action {
}
ProfileStore profileStore = activeProfile.getProfile();
if (profileStore == null) return;
if(profileStore.getSpecificProfile(profileName) == null) {
if (profileStore.getSpecificProfile(profileName) == null) {
if (L.isEnabled(L.AUTOMATION))
log.error("Selected profile does not exist! - "+ profileName);
log.error("Selected profile does not exist! - " + profileName);
if (callback != null)
callback.result(new PumpEnactResult().success(false).comment(R.string.notexists)).run();
return;
}
ProfileFunctions.getInstance().doProfileSwitch(profileStore, profileName, 0, 100, 0, DateUtil.now());
TreatmentsPlugin.getPlugin().doProfileSwitch(profileStore, profileName, 0, 100, 0, DateUtil.now());
if (callback != null)
callback.result(new PumpEnactResult().success(true).comment(R.string.ok)).run();
}

View file

@ -6,21 +6,21 @@ import com.google.common.base.Optional;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator;
import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration;
import info.nightscout.androidaps.plugins.general.automation.elements.InputPercent;
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement;
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder;
import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerProfilePercent;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.utils.JsonHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ActionProfileSwitchPercent extends Action {
private static final Logger log = LoggerFactory.getLogger(ActionProfileSwitchPercent.class);
@ -47,7 +47,7 @@ public class ActionProfileSwitchPercent extends Action {
@Override
public void doAction(Callback callback) {
ProfileFunctions.getInstance().doProfileSwitch((int) duration.getValue(), (int) pct.getValue(), 0);
TreatmentsPlugin.getPlugin().doProfileSwitch((int) duration.getValue(), (int) pct.getValue(), 0);
if (callback != null)
callback.result(new PumpEnactResult().success(true).comment(R.string.ok)).run();
}

View file

@ -54,6 +54,7 @@ import javax.inject.Singleton
@Singleton
class SmsCommunicatorPlugin @Inject constructor(
val configBuilderPlugin: ConfigBuilderPlugin,
val treatmentsPlugin: TreatmentsPlugin,
val resourceHelper: ResourceHelper,
val constraintChecker: ConstraintChecker,
val aapsLogger: AAPSLogger
@ -467,7 +468,7 @@ class SmsCommunicatorPlugin @Inject constructor(
val finalPercentage = percentage
messageToConfirm = AuthRequest(this, receivedSms, reply, passCode, object : SmsAction(list[pindex - 1] as String, finalPercentage) {
override fun run() {
ProfileFunctions.getInstance().doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
treatmentsPlugin.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
sendSMS(Sms(receivedSms.phoneNumber, R.string.profileswitchcreated))
}
})

View file

@ -679,8 +679,7 @@ public class ActionStringHandler {
}
//send profile to pumpe
new NewNSTreatmentDialog(); //init
ProfileFunctions.getInstance().doProfileSwitch(0, percentage, timeshift);
TreatmentsPlugin.getPlugin().doProfileSwitch(0, percentage, timeshift);
}
private static void generateTempTarget(int duration, double low, double high) {

View file

@ -6,12 +6,13 @@ import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions
import info.nightscout.androidaps.plugins.profile.ns.events.EventNSProfileUpdateGUI
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.FabricPrivacy
@ -21,8 +22,13 @@ import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.close.*
import kotlinx.android.synthetic.main.nsprofile_fragment.*
import kotlinx.android.synthetic.main.profileviewer_fragment.*
import javax.inject.Inject
class NSProfileFragment : DaggerFragment() {
@Inject
lateinit var treatmentsPlugin: TreatmentsPlugin
class NSProfileFragment : Fragment() {
private var disposable: CompositeDisposable = CompositeDisposable()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
@ -42,7 +48,7 @@ class NSProfileFragment : Fragment() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, MainApp.gs(R.string.nsprofile),
MainApp.gs(R.string.activate_profile) + ": " + name + " ?", Runnable {
ProfileFunctions.getInstance().doProfileSwitch(store, name, 0, 100, 0, DateUtil.now())
treatmentsPlugin.doProfileSwitch(store, name, 0, 100, 0, DateUtil.now())
})
}
}

View file

@ -7,16 +7,18 @@ import androidx.annotation.Nullable;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Intervals;
import info.nightscout.androidaps.data.Iob;
@ -26,8 +28,10 @@ import info.nightscout.androidaps.data.NonOverlappingIntervals;
import info.nightscout.androidaps.data.OverlappingIntervals;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileIntervals;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventReloadProfileSwitchData;
@ -40,12 +44,12 @@ import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData;
@ -59,26 +63,33 @@ import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.FabricPrivacy;
import info.nightscout.androidaps.utils.SP;
import info.nightscout.androidaps.utils.T;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
/**
* Created by mike on 05.08.2016.
*/
@Singleton
public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface {
private Logger log = LoggerFactory.getLogger(L.DATATREATMENTS);
private final AAPSLogger aapsLogger;
private final MainApp mainApp;
private final ResourceHelper resourceHelper;
private final ProfileFunction profileFunction;
private final ConfigBuilderPlugin configBuilderPlugin;
private CompositeDisposable disposable = new CompositeDisposable();
private static TreatmentsPlugin treatmentsPlugin;
/**
* @deprecated Use dagger to get an instance
*/
@Deprecated
public static TreatmentsPlugin getPlugin() {
if (treatmentsPlugin == null)
treatmentsPlugin = new TreatmentsPlugin();
throw new IllegalStateException("Accessing TreatmentsPlugin before first instantiation");
return treatmentsPlugin;
}
private TreatmentService service;
protected TreatmentService service;
private IobTotal lastTreatmentCalculation;
private IobTotal lastTempBasalsCalculation;
@ -89,7 +100,13 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
private final Intervals<TempTarget> tempTargets = new OverlappingIntervals<>();
private final ProfileIntervals<ProfileSwitch> profiles = new ProfileIntervals<>();
public TreatmentsPlugin() {
@Inject
public TreatmentsPlugin(AAPSLogger aapsLogger,
ResourceHelper resourceHelper,
MainApp mainApp,
ConfigBuilderPlugin configBuilderPlugin,
ProfileFunction profileFunction
) {
super(new PluginDescription()
.mainType(PluginType.TREATMENT)
.fragmentClass(TreatmentsFragment.class.getName())
@ -98,19 +115,24 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
.alwaysEnabled(true)
.description(R.string.description_treatments)
);
this.service = new TreatmentService();
this.aapsLogger = aapsLogger;
this.resourceHelper = resourceHelper;
this.mainApp = mainApp;
this.configBuilderPlugin = configBuilderPlugin;
this.profileFunction = profileFunction;
treatmentsPlugin = this;
}
@Override
protected void onStart() {
this.service = new TreatmentService();
initializeData(range());
super.onStart();
disposable.add(RxBus.INSTANCE
.toObservable(EventReloadTreatmentData.class)
.observeOn(Schedulers.io())
.subscribe(event -> {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("EventReloadTreatmentData");
aapsLogger.debug(LTag.DATATREATMENTS, "EventReloadTreatmentData");
initializeTreatmentData(range());
initializeExtendedBolusData(range());
updateTotalIOBTreatments();
@ -134,8 +156,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
.toObservable(EventReloadTempBasalData.class)
.observeOn(Schedulers.io())
.subscribe(event -> {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("EventReloadTempBasalData");
aapsLogger.debug(LTag.DATATREATMENTS, "EventReloadTempBasalData");
initializeTempBasalData(range());
updateTotalIOBTempBasals();
},
@ -155,9 +176,9 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
private long range() {
double dia = Constants.defaultDIA;
if (ConfigBuilderPlugin.getPlugin() != null && ProfileFunctions.getInstance().getProfile() != null)
dia = ProfileFunctions.getInstance().getProfile().getDia();
return (long) (60 * 60 * 1000L * (24 + dia));
if (profileFunction.getProfile() != null)
dia = profileFunction.getProfile().getDia();
return (long) (60 * 60 * 1000L * (24 + dia));
}
public void initializeData(long range) {
@ -169,8 +190,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
}
private void initializeTreatmentData(long range) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("initializeTreatmentData");
aapsLogger.debug(LTag.DATATREATMENTS, "initializeTreatmentData");
synchronized (treatments) {
treatments.clear();
treatments.addAll(getService().getTreatmentDataFromTime(DateUtil.now() - range, false));
@ -178,8 +198,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
}
private void initializeTempBasalData(long range) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("initializeTempBasalData");
aapsLogger.debug(LTag.DATATREATMENTS, "initializeTempBasalData");
synchronized (tempBasals) {
tempBasals.reset().add(MainApp.getDbHelper().getTemporaryBasalsDataFromTime(DateUtil.now() - range, false));
}
@ -187,8 +206,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
}
private void initializeExtendedBolusData(long range) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("initializeExtendedBolusData");
aapsLogger.debug(LTag.DATATREATMENTS, "initializeExtendedBolusData");
synchronized (extendedBoluses) {
extendedBoluses.reset().add(MainApp.getDbHelper().getExtendedBolusDataFromTime(DateUtil.now() - range, false));
}
@ -196,16 +214,14 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
}
private void initializeTempTargetData(long range) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("initializeTempTargetData");
aapsLogger.debug(LTag.DATATREATMENTS, "initializeTempTargetData");
synchronized (tempTargets) {
tempTargets.reset().add(MainApp.getDbHelper().getTemptargetsDataFromTime(DateUtil.now() - range, false));
}
}
private void initializeProfileSwitchData(long range) {
if (L.isEnabled(L.DATATREATMENTS))
log.debug("initializeProfileSwitchData");
aapsLogger.debug(LTag.DATATREATMENTS, "initializeProfileSwitchData");
synchronized (profiles) {
profiles.reset().add(MainApp.getDbHelper().getProfileSwitchData(DateUtil.now() - range, false));
}
@ -220,22 +236,22 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public IobTotal getCalculationToTimeTreatments(long time) {
IobTotal total = new IobTotal(time);
Profile profile = ProfileFunctions.getInstance().getProfile();
Profile profile = profileFunction.getProfile();
if (profile == null)
return total;
InsulinInterface insulinInterface = ConfigBuilderPlugin.getPlugin().getActiveInsulin();
InsulinInterface insulinInterface = configBuilderPlugin.getActiveInsulin();
if (insulinInterface == null)
return total;
PumpInterface pumpInterface = ConfigBuilderPlugin.getPlugin().getActivePump();
PumpInterface pumpInterface = configBuilderPlugin.getActivePump();
if (pumpInterface == null)
return total;
double dia = profile.getDia();
synchronized (treatments) {
for (Integer pos = 0; pos < treatments.size(); pos++) {
for (int pos = 0; pos < treatments.size(); pos++) {
Treatment t = treatments.get(pos);
if (!t.isValid) continue;
if (t.date > time) continue;
@ -276,7 +292,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public MealData getMealData() {
MealData result = new MealData();
Profile profile = ProfileFunctions.getInstance().getProfile();
Profile profile = profileFunction.getProfile();
if (profile == null) return result;
long now = System.currentTimeMillis();
@ -344,17 +360,13 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
long time = System.currentTimeMillis();
synchronized (treatments) {
if (MedtronicHistoryData.doubleBolusDebug)
log.debug("DoubleBolusDebug: AllTreatmentsInDb: {}", MedtronicUtil.getGsonInstanceCore().toJson(treatments));
aapsLogger.debug(MedtronicHistoryData.doubleBolusDebug, LTag.DATATREATMENTS, "DoubleBolusDebug: AllTreatmentsInDb: " + MedtronicUtil.getGsonInstanceCore().toJson(treatments));
for (Treatment t : treatments) {
if (t.date <= time && t.date >= fromTimestamp)
in5minback.add(t);
}
if (MedtronicHistoryData.doubleBolusDebug)
log.debug("DoubleBolusDebug: FilteredTreatments: AfterTime={}, Items={}", fromTimestamp, MedtronicUtil.getGsonInstanceCore().toJson(in5minback));
aapsLogger.debug(MedtronicHistoryData.doubleBolusDebug, LTag.DATATREATMENTS, "DoubleBolusDebug: FilteredTreatments: AfterTime={}, Items={} " + fromTimestamp + " " + MedtronicUtil.getGsonInstanceCore().toJson(in5minback));
return in5minback;
}
}
@ -364,7 +376,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public List<Treatment> getTreatments5MinBackFromHistory(long time) {
List<Treatment> in5minback = new ArrayList<>();
synchronized (treatments) {
for (Integer pos = 0; pos < treatments.size(); pos++) {
for (int pos = 0; pos < treatments.size(); pos++) {
Treatment t = treatments.get(pos);
if (!t.isValid)
continue;
@ -383,12 +395,11 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
for (Treatment t : treatments) {
if (!t.isValid)
continue;
if (t.date > last && t.insulin > 0 && t.isValid && t.date <= now)
if (t.date > last && t.insulin > 0 && t.date <= now)
last = t.date;
}
}
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Last bolus time: " + new Date(last).toLocaleString());
aapsLogger.debug(LTag.DATATREATMENTS, "Last bolus time: " + DateUtil.dateAndTimeString(last));
return last;
}
@ -399,12 +410,11 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
for (Treatment t : treatments) {
if (!t.isValid)
continue;
if (t.date > last && t.insulin > 0 && t.isValid && t.date <= now && isSMB == t.isSMB)
if (t.date > last && t.insulin > 0 && t.date <= now && isSMB == t.isSMB)
last = t.date;
}
}
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Last manual bolus time: " + new Date(last).toLocaleString());
aapsLogger.debug(LTag.DATATREATMENTS, "Last manual bolus time: " + DateUtil.dateAndTimeString(last));
return last;
}
@ -443,16 +453,20 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public IobTotal getCalculationToTimeTempBasals(long time, boolean truncate, long truncateTime) {
IobTotal total = new IobTotal(time);
InsulinInterface insulinInterface = ConfigBuilderPlugin.getPlugin().getActiveInsulin();
InsulinInterface insulinInterface = configBuilderPlugin.getActiveInsulin();
if (insulinInterface == null)
return total;
PumpInterface pumpInterface = configBuilderPlugin.getActivePump();
if (pumpInterface == null)
return total;
synchronized (tempBasals) {
for (Integer pos = 0; pos < tempBasals.size(); pos++) {
TemporaryBasal t = tempBasals.get(pos);
if (t.date > time) continue;
IobTotal calc;
Profile profile = ProfileFunctions.getInstance().getProfile(t.date);
Profile profile = profileFunction.getProfile(t.date);
if (profile == null) continue;
if (truncate && t.end() > truncateTime) {
TemporaryBasal dummyTemp = new TemporaryBasal();
@ -466,14 +480,14 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
total.plus(calc);
}
}
if (ConfigBuilderPlugin.getPlugin().getActivePump().isFakingTempsByExtendedBoluses()) {
if (pumpInterface.isFakingTempsByExtendedBoluses()) {
IobTotal totalExt = new IobTotal(time);
synchronized (extendedBoluses) {
for (Integer pos = 0; pos < extendedBoluses.size(); pos++) {
for (int pos = 0; pos < extendedBoluses.size(); pos++) {
ExtendedBolus e = extendedBoluses.get(pos);
if (e.date > time) continue;
IobTotal calc;
Profile profile = ProfileFunctions.getInstance().getProfile(e.date);
Profile profile = profileFunction.getProfile(e.date);
if (profile == null) continue;
if (truncate && e.end() > truncateTime) {
ExtendedBolus dummyExt = new ExtendedBolus();
@ -499,16 +513,20 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public IobTotal getCalculationToTimeTempBasals(long time, long truncateTime, AutosensResult lastAutosensResult, boolean exercise_mode, int half_basal_exercise_target, boolean isTempTarget) {
IobTotal total = new IobTotal(time);
InsulinInterface insulinInterface = ConfigBuilderPlugin.getPlugin().getActiveInsulin();
InsulinInterface insulinInterface = configBuilderPlugin.getActiveInsulin();
if (insulinInterface == null)
return total;
PumpInterface pumpInterface = configBuilderPlugin.getActivePump();
if (pumpInterface == null)
return total;
synchronized (tempBasals) {
for (int pos = 0; pos < tempBasals.size(); pos++) {
TemporaryBasal t = tempBasals.get(pos);
if (t.date > time) continue;
IobTotal calc;
Profile profile = ProfileFunctions.getInstance().getProfile(t.date);
Profile profile = profileFunction.getProfile(t.date);
if (profile == null) continue;
if (t.end() > truncateTime) {
TemporaryBasal dummyTemp = new TemporaryBasal();
@ -522,14 +540,14 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
total.plus(calc);
}
}
if (ConfigBuilderPlugin.getPlugin().getActivePump().isFakingTempsByExtendedBoluses()) {
if (pumpInterface.isFakingTempsByExtendedBoluses()) {
IobTotal totalExt = new IobTotal(time);
synchronized (extendedBoluses) {
for (int pos = 0; pos < extendedBoluses.size(); pos++) {
ExtendedBolus e = extendedBoluses.get(pos);
if (e.date > time) continue;
IobTotal calc;
Profile profile = ProfileFunctions.getInstance().getProfile(e.date);
Profile profile = profileFunction.getProfile(e.date);
if (profile == null) continue;
if (e.end() > truncateTime) {
ExtendedBolus dummyExt = new ExtendedBolus();
@ -564,7 +582,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
if (tb != null)
return tb;
ExtendedBolus eb = getExtendedBolusFromHistory(time);
if (eb != null && ConfigBuilderPlugin.getPlugin().getActivePump().isFakingTempsByExtendedBoluses())
if (eb != null && configBuilderPlugin.getActivePump().isFakingTempsByExtendedBoluses())
return new TemporaryBasal(eb);
return null;
}
@ -582,11 +600,11 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
boolean newRecordCreated = MainApp.getDbHelper().createOrUpdate(extendedBolus);
if (newRecordCreated) {
if (extendedBolus.durationInMinutes == 0) {
if (ConfigBuilderPlugin.getPlugin().getActivePump().isFakingTempsByExtendedBoluses())
if (configBuilderPlugin.getActivePump().isFakingTempsByExtendedBoluses())
NSUpload.uploadTempBasalEnd(extendedBolus.date, true, extendedBolus.pumpId);
else
NSUpload.uploadExtendedBolusEnd(extendedBolus.date, extendedBolus.pumpId);
} else if (ConfigBuilderPlugin.getPlugin().getActivePump().isFakingTempsByExtendedBoluses())
} else if (configBuilderPlugin.getActivePump().isFakingTempsByExtendedBoluses())
NSUpload.uploadTempBasalStartAbsolute(new TemporaryBasal(extendedBolus), extendedBolus.insulin);
else
NSUpload.uploadExtendedBolus(extendedBolus);
@ -628,8 +646,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
public boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo, boolean allowUpdate) {
boolean medtronicPump = MedtronicUtil.isMedtronicPump();
if (MedtronicHistoryData.doubleBolusDebug)
log.debug("DoubleBolusDebug: addToHistoryTreatment::isMedtronicPump={}", medtronicPump);
aapsLogger.debug(MedtronicHistoryData.doubleBolusDebug, LTag.DATATREATMENTS, "DoubleBolusDebug: addToHistoryTreatment::isMedtronicPump={} " + medtronicPump);
Treatment treatment = new Treatment();
treatment.date = detailedBolusInfo.date;
@ -640,13 +657,11 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
treatment.isSMB = detailedBolusInfo.isSMB;
if (detailedBolusInfo.carbTime == 0)
treatment.carbs = detailedBolusInfo.carbs;
treatment.source = detailedBolusInfo.source;
treatment.mealBolus = treatment.carbs > 0;
treatment.boluscalc = detailedBolusInfo.boluscalc != null ? detailedBolusInfo.boluscalc.toString() : null;
TreatmentService.UpdateReturn creatOrUpdateResult;
if (medtronicPump && MedtronicHistoryData.doubleBolusDebug)
log.debug("DoubleBolusDebug: addToHistoryTreatment::treatment={}", treatment);
aapsLogger.debug(medtronicPump && MedtronicHistoryData.doubleBolusDebug, LTag.DATATREATMENTS, "DoubleBolusDebug: addToHistoryTreatment::treatment={} " + treatment);
if (!medtronicPump)
creatOrUpdateResult = getService().createOrUpdate(treatment);
@ -662,10 +677,8 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
carbsTreatment.pumpId = detailedBolusInfo.pumpId; // but this should never happen
carbsTreatment.date = detailedBolusInfo.date + detailedBolusInfo.carbTime * 60 * 1000L + 1000L; // add 1 sec to make them different records
carbsTreatment.carbs = detailedBolusInfo.carbs;
carbsTreatment.source = detailedBolusInfo.source;
if (medtronicPump && MedtronicHistoryData.doubleBolusDebug)
log.debug("DoubleBolusDebug: carbTime!=0, creating second treatment. CarbsTreatment={}", carbsTreatment);
aapsLogger.debug(medtronicPump && MedtronicHistoryData.doubleBolusDebug, LTag.DATATREATMENTS, "DoubleBolusDebug: carbTime!=0, creating second treatment. CarbsTreatment={}" + carbsTreatment);
if (!medtronicPump)
getService().createOrUpdate(carbsTreatment);
@ -677,16 +690,16 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
NSUpload.uploadTreatmentRecord(detailedBolusInfo);
if (!allowUpdate && !creatOrUpdateResult.success) {
log.error("Treatment could not be added to DB", new Exception());
aapsLogger.error("Treatment could not be added to DB", new Exception());
String status = String.format(MainApp.gs(R.string.error_adding_treatment_message), treatment.insulin, (int) treatment.carbs, DateUtil.dateAndTimeString(treatment.date));
String status = String.format(resourceHelper.gs(R.string.error_adding_treatment_message), treatment.insulin, (int) treatment.carbs, DateUtil.dateAndTimeString(treatment.date));
Intent i = new Intent(MainApp.instance(), ErrorHelperActivity.class);
Intent i = new Intent(mainApp, ErrorHelperActivity.class);
i.putExtra("soundid", R.raw.error);
i.putExtra("title", MainApp.gs(R.string.error_adding_treatment_title));
i.putExtra("title", resourceHelper.gs(R.string.error_adding_treatment_title));
i.putExtra("status", status);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainApp.instance().startActivity(i);
mainApp.startActivity(i);
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "TreatmentClash");
@ -769,5 +782,32 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
NSUpload.uploadProfileSwitch(profileSwitch);
}
@Override
public void doProfileSwitch(@NotNull final ProfileStore profileStore, @NotNull final String profileName, final int duration, final int percentage, final int timeShift, final long date) {
ProfileSwitch profileSwitch = profileFunction.prepareProfileSwitch(profileStore, profileName, duration, percentage, timeShift, date);
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch);
if (percentage == 90 && duration == 10)
SP.putBoolean(R.string.key_objectiveuseprofileswitch, true);
}
@Override
public void doProfileSwitch(final int duration, final int percentage, final int timeShift) {
ProfileSwitch profileSwitch = TreatmentsPlugin.getPlugin().getProfileSwitchFromHistory(System.currentTimeMillis());
if (profileSwitch != null) {
profileSwitch = new ProfileSwitch();
profileSwitch.date = System.currentTimeMillis();
profileSwitch.source = Source.USER;
profileSwitch.profileName = profileFunction.getProfileName(System.currentTimeMillis(), false, false);
profileSwitch.profileJson = profileFunction.getProfile().getData().toString();
profileSwitch.profilePlugin = ConfigBuilderPlugin.getPlugin().getActiveProfileInterface().getClass().getName();
profileSwitch.durationInMinutes = duration;
profileSwitch.isCPP = percentage != 100 || timeShift != 0;
profileSwitch.timeshift = timeShift;
profileSwitch.percentage = percentage;
TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch);
} else {
aapsLogger.error(LTag.PROFILE, "No profile switch exists");
}
}
}

View file

@ -5,13 +5,26 @@ import android.util.LongSparseArray
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.db.TDD
import info.nightscout.androidaps.logging.L
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
import info.nightscout.androidaps.plugins.treatments.TreatmentService
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import org.slf4j.LoggerFactory
import info.nightscout.androidaps.utils.resources.ResourceHelper
import javax.inject.Inject
object TddCalculator : TreatmentsPlugin() {
private val log = LoggerFactory.getLogger(L.DATATREATMENTS)
class TddCalculator @Inject constructor(
val aapsLogger: AAPSLogger,
val resourceHelper: ResourceHelper,
val mainApp: MainApp,
val configBuilderPlugin: ConfigBuilderPlugin,
val profileFunction: ProfileFunction
) : TreatmentsPlugin(aapsLogger, resourceHelper, mainApp, configBuilderPlugin, profileFunction) {
init {
service = TreatmentService() // plugin is not started
}
fun calculate(days: Long): LongSparseArray<TDD> {
val range = T.days(days + 1).msecs()
@ -33,7 +46,7 @@ object TddCalculator : TreatmentsPlugin() {
val midnight = MidnightTime.calc(t)
val tdd = result[midnight] ?: TDD(midnight, 0.0, 0.0, 0.0)
val tbr = getTempBasalFromHistory(t)
val profile = ProfileFunctions.getInstance().getProfile(t) ?: continue
val profile = profileFunction.getProfile(t) ?: continue
val absoluteRate = tbr?.tempBasalConvertedToAbsolute(t, profile) ?: profile.getBasal(t)
tdd.basal += absoluteRate / 60.0 * 5.0
result.put(midnight, tdd)
@ -42,11 +55,11 @@ object TddCalculator : TreatmentsPlugin() {
val tdd = result.valueAt(i)
tdd.total = tdd.bolus + tdd.basal
}
log.debug(result.toString())
aapsLogger.debug(LTag.CORE, result.toString())
return result
}
fun averageTDD(tdds: LongSparseArray<TDD>): TDD {
private fun averageTDD(tdds: LongSparseArray<TDD>): TDD {
val totalTdd = TDD()
for (i in 0 until tdds.size()) {
val tdd = tdds.valueAt(i)
@ -71,7 +84,7 @@ object TddCalculator : TreatmentsPlugin() {
)
}
fun toText(tdds: LongSparseArray<TDD>): String {
private fun toText(tdds: LongSparseArray<TDD>): String {
var t = ""
for (i in 0 until tdds.size()) {
t += "${tdds.valueAt(i).toText()}<br>"