more of dagger
This commit is contained in:
parent
d82141e6d6
commit
ac5ea83d38
213 changed files with 3829 additions and 3798 deletions
|
@ -7,7 +7,6 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Resources;
|
||||
import android.os.SystemClock;
|
||||
|
||||
import androidx.annotation.ColorRes;
|
||||
import androidx.annotation.PluralsRes;
|
||||
|
@ -39,7 +38,6 @@ import info.nightscout.androidaps.db.DatabaseHelper;
|
|||
import info.nightscout.androidaps.dependencyInjection.DaggerAppComponent;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginType;
|
||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||
import info.nightscout.androidaps.logging.AAPSLogger;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.logging.LTag;
|
||||
|
@ -89,13 +87,13 @@ import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin;
|
|||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin;
|
||||
import info.nightscout.androidaps.plugins.source.NSClientSourcePlugin;
|
||||
import info.nightscout.androidaps.plugins.source.RandomBgPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.DexcomPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.EversensePlugin;
|
||||
import info.nightscout.androidaps.plugins.source.GlimpPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.MM640gPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.NSClientSourcePlugin;
|
||||
import info.nightscout.androidaps.plugins.source.PoctechPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.RandomBgPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.TomatoPlugin;
|
||||
import info.nightscout.androidaps.plugins.source.XdripPlugin;
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
||||
|
@ -120,7 +118,7 @@ public class MainApp extends DaggerApplication {
|
|||
|
||||
static DatabaseHelper sDatabaseHelper = null;
|
||||
|
||||
static ArrayList<PluginBase> pluginsList = null;
|
||||
static ArrayList<PluginBase> pluginsList = new ArrayList<>();
|
||||
|
||||
static DataReceiver dataReceiver = new DataReceiver();
|
||||
TimeDateOrTZChangeReceiver timeDateOrTZChangeReceiver;
|
||||
|
@ -140,6 +138,7 @@ public class MainApp extends DaggerApplication {
|
|||
|
||||
@Inject ActionsPlugin actionsPlugin;
|
||||
@Inject AutomationPlugin automationPlugin;
|
||||
@Inject ComboPlugin comboPlugin;
|
||||
@Inject CareportalPlugin careportalPlugin;
|
||||
@Inject ConfigBuilderPlugin configBuilderPlugin;
|
||||
@Inject DanaRPlugin danaRPlugin;
|
||||
|
@ -152,8 +151,12 @@ public class MainApp extends DaggerApplication {
|
|||
@Inject InsulinOrefRapidActingPlugin insulinOrefRapidActingPlugin;
|
||||
@Inject InsulinOrefUltraRapidActingPlugin insulinOrefUltraRapidActingPlugin;
|
||||
@Inject IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
@Inject LocalInsightPlugin localInsightPlugin;
|
||||
@Inject LocalProfilePlugin localProfilePlugin;
|
||||
@Inject LoopPlugin loopPlugin;
|
||||
@Inject MedtronicPumpPlugin medtronicPumpPlugin;
|
||||
@Inject MDIPlugin mdiPlugin;
|
||||
@Inject NSProfilePlugin nsProfilePlugin;
|
||||
@Inject ObjectivesPlugin objectivesPlugin;
|
||||
@Inject SafetyPlugin safetyPlugin;
|
||||
@Inject SmsCommunicatorPlugin smsCommunicatorPlugin;
|
||||
|
@ -163,12 +166,18 @@ public class MainApp extends DaggerApplication {
|
|||
@Inject OverviewPlugin overviewPlugin;
|
||||
@Inject PersistentNotificationPlugin persistentNotificationPlugin;
|
||||
@Inject RandomBgPlugin randomBgPlugin;
|
||||
@Inject SensitivityOref1Plugin sensitivityOref1Plugin;
|
||||
@Inject SensitivityAAPSPlugin sensitivityAAPSPlugin;
|
||||
@Inject SensitivityOref0Plugin sensitivityOref0Plugin;
|
||||
@Inject SensitivityWeightedAveragePlugin sensitivityWeightedAveragePlugin;
|
||||
@Inject SignatureVerifierPlugin signatureVerifierPlugin;
|
||||
@Inject StorageConstraintPlugin storageConstraintPlugin;
|
||||
@Inject DexcomPlugin dexcomPlugin;
|
||||
@Inject EversensePlugin eversensePlugin;
|
||||
@Inject GlimpPlugin glimpPlugin;
|
||||
@Inject MaintenancePlugin maintenancePlugin;
|
||||
@Inject MM640gPlugin mM640GPlugin;
|
||||
@Inject NSClientPlugin nsClientPlugin;
|
||||
@Inject NSClientSourcePlugin nSClientSourcePlugin;
|
||||
@Inject PoctechPlugin poctechPlugin;
|
||||
@Inject TomatoPlugin tomatoPlugin;
|
||||
|
@ -232,77 +241,66 @@ public class MainApp extends DaggerApplication {
|
|||
//trigger here to see the new version on app start after an update
|
||||
versionCheckersUtils.triggerCheckVersion();
|
||||
|
||||
if (pluginsList == null) {
|
||||
pluginsList = new ArrayList<>();
|
||||
// Register all tabs in app here
|
||||
pluginsList.add(overviewPlugin);
|
||||
pluginsList.add(iobCobCalculatorPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(actionsPlugin);
|
||||
pluginsList.add(insulinOrefRapidActingPlugin);
|
||||
pluginsList.add(insulinOrefUltraRapidActingPlugin);
|
||||
pluginsList.add(insulinOrefFreePeakPlugin);
|
||||
pluginsList.add(SensitivityOref0Plugin.getPlugin());
|
||||
pluginsList.add(SensitivityAAPSPlugin.getPlugin());
|
||||
pluginsList.add(SensitivityWeightedAveragePlugin.getPlugin());
|
||||
pluginsList.add(SensitivityOref1Plugin.getPlugin());
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRKoreanPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRv2Plugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRSPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(LocalInsightPlugin.getPlugin());
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(ComboPlugin.getPlugin());
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(MedtronicPumpPlugin.getPlugin());
|
||||
if (!Config.NSCLIENT) pluginsList.add(MDIPlugin.getPlugin());
|
||||
pluginsList.add(virtualPumpPlugin);
|
||||
pluginsList.add(careportalPlugin);
|
||||
if (Config.APS) pluginsList.add(loopPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSMAPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSAMAPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSSMBPlugin);
|
||||
pluginsList.add(NSProfilePlugin.getPlugin());
|
||||
if (!Config.NSCLIENT) pluginsList.add(localProfilePlugin);
|
||||
pluginsList.add(treatmentsPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(safetyPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(versionCheckerPlugin);
|
||||
if (Config.APS) pluginsList.add(StorageConstraintPlugin.getPlugin());
|
||||
if (Config.APS) pluginsList.add(signatureVerifierPlugin);
|
||||
if (Config.APS) pluginsList.add(objectivesPlugin);
|
||||
pluginsList.add(xdripPlugin);
|
||||
pluginsList.add(nSClientSourcePlugin);
|
||||
pluginsList.add(mM640GPlugin);
|
||||
pluginsList.add(glimpPlugin);
|
||||
pluginsList.add(dexcomPlugin);
|
||||
pluginsList.add(poctechPlugin);
|
||||
pluginsList.add(tomatoPlugin);
|
||||
pluginsList.add(eversensePlugin);
|
||||
pluginsList.add(randomBgPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(smsCommunicatorPlugin);
|
||||
pluginsList.add(foodPlugin);
|
||||
// Register all tabs in app here
|
||||
pluginsList.add(overviewPlugin);
|
||||
pluginsList.add(iobCobCalculatorPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(actionsPlugin);
|
||||
pluginsList.add(insulinOrefRapidActingPlugin);
|
||||
pluginsList.add(insulinOrefUltraRapidActingPlugin);
|
||||
pluginsList.add(insulinOrefFreePeakPlugin);
|
||||
pluginsList.add(sensitivityOref0Plugin);
|
||||
pluginsList.add(sensitivityAAPSPlugin);
|
||||
pluginsList.add(sensitivityWeightedAveragePlugin);
|
||||
pluginsList.add(sensitivityOref1Plugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRKoreanPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRv2Plugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(danaRSPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(localInsightPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(comboPlugin);
|
||||
if (Config.PUMPDRIVERS) pluginsList.add(medtronicPumpPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(mdiPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(virtualPumpPlugin);
|
||||
pluginsList.add(careportalPlugin);
|
||||
if (Config.APS) pluginsList.add(loopPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSMAPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSAMAPlugin);
|
||||
if (Config.APS) pluginsList.add(openAPSSMBPlugin);
|
||||
pluginsList.add(nsProfilePlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(localProfilePlugin);
|
||||
pluginsList.add(treatmentsPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(safetyPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(versionCheckerPlugin);
|
||||
if (Config.APS) pluginsList.add(storageConstraintPlugin);
|
||||
if (Config.APS) pluginsList.add(signatureVerifierPlugin);
|
||||
if (Config.APS) pluginsList.add(objectivesPlugin);
|
||||
pluginsList.add(xdripPlugin);
|
||||
pluginsList.add(nSClientSourcePlugin);
|
||||
pluginsList.add(mM640GPlugin);
|
||||
pluginsList.add(glimpPlugin);
|
||||
pluginsList.add(dexcomPlugin);
|
||||
pluginsList.add(poctechPlugin);
|
||||
pluginsList.add(tomatoPlugin);
|
||||
pluginsList.add(eversensePlugin);
|
||||
pluginsList.add(randomBgPlugin);
|
||||
if (!Config.NSCLIENT) pluginsList.add(smsCommunicatorPlugin);
|
||||
pluginsList.add(foodPlugin);
|
||||
|
||||
pluginsList.add(wearPlugin);
|
||||
pluginsList.add(statusLinePlugin);
|
||||
pluginsList.add(persistentNotificationPlugin);
|
||||
pluginsList.add(NSClientPlugin.getPlugin());
|
||||
pluginsList.add(wearPlugin);
|
||||
pluginsList.add(statusLinePlugin);
|
||||
pluginsList.add(persistentNotificationPlugin);
|
||||
pluginsList.add(nsClientPlugin);
|
||||
// if (engineeringMode) pluginsList.add(tidepoolPlugin);
|
||||
pluginsList.add(maintenancePlugin);
|
||||
pluginsList.add(automationPlugin);
|
||||
pluginsList.add(dstHelperPlugin);
|
||||
pluginsList.add(maintenancePlugin);
|
||||
pluginsList.add(automationPlugin);
|
||||
pluginsList.add(dstHelperPlugin);
|
||||
|
||||
pluginsList.add(configBuilderPlugin);
|
||||
pluginsList.add(configBuilderPlugin);
|
||||
|
||||
configBuilderPlugin.initialize();
|
||||
}
|
||||
configBuilderPlugin.initialize();
|
||||
|
||||
NSUpload.uploadAppStart();
|
||||
|
||||
final PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
if (pump != null) {
|
||||
new Thread(() -> {
|
||||
SystemClock.sleep(5000);
|
||||
configBuilderPlugin.getCommandQueue().readStatus("Initialization", null);
|
||||
}).start();
|
||||
}
|
||||
|
||||
new Thread(() -> keepAliveManager.setAlarm(this)).start();
|
||||
doMigrations();
|
||||
}
|
||||
|
@ -498,7 +496,7 @@ public class MainApp extends DaggerApplication {
|
|||
}
|
||||
|
||||
public Notification getNotification() {
|
||||
return notification;
|
||||
return notification;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -41,7 +41,6 @@ import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
|
|||
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin
|
||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin
|
||||
import info.nightscout.androidaps.plugins.source.DexcomPlugin
|
||||
|
@ -53,7 +52,6 @@ import info.nightscout.androidaps.utils.OKDialog.show
|
|||
import info.nightscout.androidaps.utils.SafeParse
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener, HasAndroidInjector {
|
||||
|
@ -69,12 +67,20 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
@Inject lateinit var danaRv2Plugin: DanaRv2Plugin
|
||||
@Inject lateinit var danaRSPlugin: DanaRSPlugin
|
||||
@Inject lateinit var careportalPlugin: CareportalPlugin
|
||||
@Inject lateinit var comboPlugin: ComboPlugin
|
||||
@Inject lateinit var insulinOrefFreePeakPlugin: InsulinOrefFreePeakPlugin
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var localInsightPlugin: LocalInsightPlugin
|
||||
@Inject lateinit var medtronicPumpPlugin: MedtronicPumpPlugin
|
||||
@Inject lateinit var nsClientPlugin: NSClientPlugin
|
||||
@Inject lateinit var openAPSAMAPlugin: OpenAPSAMAPlugin
|
||||
@Inject lateinit var openAPSMAPlugin: OpenAPSMAPlugin
|
||||
@Inject lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin
|
||||
@Inject lateinit var safetyPlugin: SafetyPlugin
|
||||
@Inject lateinit var sensitivityAAPSPlugin: SensitivityAAPSPlugin
|
||||
@Inject lateinit var sensitivityOref0Plugin: SensitivityOref1Plugin
|
||||
@Inject lateinit var sensitivityOref1Plugin: SensitivityOref1Plugin
|
||||
@Inject lateinit var sensitivityWeightedAveragePlugin: SensitivityWeightedAveragePlugin
|
||||
@Inject lateinit var dexcomPlugin: DexcomPlugin
|
||||
@Inject lateinit var eversensePlugin: EversensePlugin
|
||||
@Inject lateinit var glimpPlugin: GlimpPlugin
|
||||
|
@ -144,20 +150,20 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
addPreferencesFromResourceIfEnabled(openAPSMAPlugin, rootKey, Config.APS)
|
||||
addPreferencesFromResourceIfEnabled(openAPSAMAPlugin, rootKey, Config.APS)
|
||||
addPreferencesFromResourceIfEnabled(openAPSSMBPlugin, rootKey, Config.APS)
|
||||
addPreferencesFromResourceIfEnabled(SensitivityAAPSPlugin.getPlugin(), rootKey)
|
||||
addPreferencesFromResourceIfEnabled(SensitivityWeightedAveragePlugin.getPlugin(), rootKey)
|
||||
addPreferencesFromResourceIfEnabled(SensitivityOref0Plugin.getPlugin(), rootKey)
|
||||
addPreferencesFromResourceIfEnabled(SensitivityOref1Plugin.getPlugin(), rootKey)
|
||||
addPreferencesFromResourceIfEnabled(sensitivityAAPSPlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(sensitivityWeightedAveragePlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(sensitivityOref0Plugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(sensitivityOref1Plugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(danaRPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(danaRKoreanPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(danaRv2Plugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(danaRSPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(LocalInsightPlugin.getPlugin(), rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(ComboPlugin.getPlugin(), rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(MedtronicPumpPlugin.getPlugin(), rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(localInsightPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(comboPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(medtronicPumpPlugin, rootKey, Config.PUMPDRIVERS)
|
||||
addPreferencesFromResourceIfEnabled(virtualPumpPlugin, rootKey, !Config.NSCLIENT)
|
||||
addPreferencesFromResourceIfEnabled(insulinOrefFreePeakPlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(NSClientPlugin.getPlugin(), rootKey)
|
||||
addPreferencesFromResourceIfEnabled(nsClientPlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(tidepoolPlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(smsCommunicatorPlugin, rootKey)
|
||||
addPreferencesFromResourceIfEnabled(automationPlugin, rootKey)
|
||||
|
@ -195,7 +201,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
updatePrefSummary(findPreference(key))
|
||||
}
|
||||
|
||||
fun addPreferencesFromResource(@XmlRes preferencesResId: Int, key: String?) {
|
||||
private fun addPreferencesFromResource(@XmlRes preferencesResId: Int, key: String?) {
|
||||
val xmlRoot = preferenceManager.inflateFromResource(context,
|
||||
preferencesResId, null)
|
||||
val root: Preference?
|
||||
|
@ -220,7 +226,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
resourceHelper.gs(R.string.key_high_mark),
|
||||
resourceHelper.gs(R.string.key_low_mark)
|
||||
)
|
||||
if (Arrays.asList(*unitDependent).contains(pref.key)) {
|
||||
if (listOf(*unitDependent).contains(pref.key)) {
|
||||
val editTextPref = pref as EditTextPreference
|
||||
val converted = Profile.toCurrentUnitsString(SafeParse.stringToDouble(editTextPref.text))
|
||||
editTextPref.summary = converted
|
||||
|
@ -233,12 +239,11 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
pref.setSummary(pref.entry)
|
||||
}
|
||||
if (pref is EditTextPreference) {
|
||||
val editTextPref = pref
|
||||
if (pref.getKey().contains("password") || pref.getKey().contains("secret")) {
|
||||
pref.setSummary("******")
|
||||
} else if (editTextPref.text != null) {
|
||||
pref.dialogMessage = editTextPref.dialogMessage
|
||||
pref.setSummary(editTextPref.text)
|
||||
} else if (pref.text != null) {
|
||||
pref.dialogMessage = pref.dialogMessage
|
||||
pref.setSummary(pref.text)
|
||||
} else {
|
||||
for (plugin in MainApp.getPluginsList()) {
|
||||
plugin.updatePreferenceSummary(pref)
|
||||
|
@ -251,9 +256,8 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
|
|||
private fun initSummary(p: Preference) {
|
||||
p.isIconSpaceReserved = false // remove extra spacing on left after migration to androidx
|
||||
if (p is PreferenceGroup) {
|
||||
val pGrp = p
|
||||
for (i in 0 until pGrp.preferenceCount) {
|
||||
initSummary(pGrp.getPreference(i))
|
||||
for (i in 0 until p.preferenceCount) {
|
||||
initSummary(p.getPreference(i))
|
||||
}
|
||||
} else {
|
||||
updatePrefSummary(p)
|
||||
|
|
|
@ -11,7 +11,7 @@ class RequestDexcomPermissionActivity : NoSplashAppCompatActivity() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
requestPermissions(arrayOf(dexcomPlugin.PERMISSION), requestCode)
|
||||
requestPermissions(arrayOf(DexcomPlugin.PERMISSION), requestCode)
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
|
|
|
@ -11,7 +11,11 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
|||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.utils.*
|
||||
import info.nightscout.androidaps.utils.ActivityMonitor
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.InstanceId
|
||||
import info.nightscout.androidaps.utils.SafeParse
|
||||
import info.nightscout.androidaps.utils.ToastUtils
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.stats.TddCalculator
|
||||
import info.nightscout.androidaps.utils.stats.TirCalculator
|
||||
|
@ -21,7 +25,7 @@ import javax.inject.Inject
|
|||
class SurveyActivity : NoSplashAppCompatActivity() {
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePluginProvider: ActivePluginProvider
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var tddCalculator: TddCalculator
|
||||
@Inject lateinit var tirCalculator: TirCalculator
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
|
@ -33,7 +37,7 @@ class SurveyActivity : NoSplashAppCompatActivity() {
|
|||
|
||||
survey_id.text = InstanceId.instanceId()
|
||||
|
||||
val profileStore = activePluginProvider.activeProfileInterface.profile
|
||||
val profileStore = activePlugin.activeProfileInterface.profile
|
||||
val profileList = profileStore?.getProfileList() ?: return
|
||||
survey_spinner.adapter = ArrayAdapter(this, R.layout.spinner_centered, profileList)
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ import info.nightscout.androidaps.data.Profile;
|
|||
import info.nightscout.androidaps.db.TDD;
|
||||
import info.nightscout.androidaps.events.EventPumpStatusChanged;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
|
||||
|
@ -60,12 +61,14 @@ public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
|||
@Inject RxBusWrapper rxBus;
|
||||
@Inject SP sp;
|
||||
@Inject ProfileFunction profileFunction;
|
||||
@Inject ActivePluginProvider activePluginProvider;
|
||||
@Inject ActivePluginProvider activePlugin;
|
||||
@Inject DanaRSPlugin danaRSPlugin;
|
||||
@Inject DanaRPlugin danaRPlugin;
|
||||
@Inject DanaRv2Plugin danaRv2Plugin;
|
||||
@Inject DanaRKoreanPlugin danaRKoreanPlugin;
|
||||
@Inject LocalInsightPlugin localInsightPlugin;
|
||||
@Inject ConfigBuilderPlugin configBuilderPlugin;
|
||||
@Inject CommandQueueProvider commandQueue;
|
||||
|
||||
private static Logger log = LoggerFactory.getLogger(TDDStatsActivity.class);
|
||||
private CompositeDisposable disposable = new CompositeDisposable();
|
||||
|
@ -157,7 +160,7 @@ public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
|||
}
|
||||
totalBaseBasal.setText(TBB);
|
||||
|
||||
if (!activePluginProvider.getActivePump().getPumpDescription().needsManualTDDLoad)
|
||||
if (!activePlugin.getActivePump().getPumpDescription().needsManualTDDLoad)
|
||||
reloadButton.setVisibility(View.GONE);
|
||||
|
||||
// stats table
|
||||
|
@ -261,7 +264,7 @@ public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
|||
statsMessage.setVisibility(View.VISIBLE);
|
||||
statsMessage.setText(resourceHelper.gs(R.string.danar_stats_warning_Message));
|
||||
});
|
||||
configBuilderPlugin.getCommandQueue().loadTDDs(new Callback() {
|
||||
commandQueue.loadTDDs(new Callback() {
|
||||
@Override
|
||||
public void run() {
|
||||
loadDataFromDB();
|
||||
|
@ -445,7 +448,7 @@ public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
|||
TableLayout.LayoutParams.WRAP_CONTENT));
|
||||
}
|
||||
|
||||
if (isOldData(historyList) && activePluginProvider.getActivePump().getPumpDescription().needsManualTDDLoad) {
|
||||
if (isOldData(historyList) && activePlugin.getActivePump().getPumpDescription().needsManualTDDLoad) {
|
||||
statsMessage.setVisibility(View.VISIBLE);
|
||||
statsMessage.setText(resourceHelper.gs(R.string.danar_stats_olddata_Message));
|
||||
|
||||
|
@ -525,7 +528,7 @@ public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
|||
|
||||
public boolean isOldData(List<TDD> historyList) {
|
||||
|
||||
boolean startsYesterday = danaRPlugin.isEnabled() || danaRSPlugin.isEnabled() || danaRv2Plugin.isEnabled() || danaRKoreanPlugin.isEnabled() || LocalInsightPlugin.getPlugin().isEnabled();
|
||||
boolean startsYesterday = danaRPlugin.isEnabled() || danaRSPlugin.isEnabled() || danaRv2Plugin.isEnabled() || danaRKoreanPlugin.isEnabled() || localInsightPlugin.isEnabled();
|
||||
|
||||
DateFormat df = new SimpleDateFormat("dd.MM.", Locale.getDefault());
|
||||
return (historyList.size() < 3 || !(df.format(new Date(historyList.get(0).date)).equals(df.format(new Date(System.currentTimeMillis() - (startsYesterday ? 1000 * 60 * 60 * 24 : 0))))));
|
||||
|
|
|
@ -228,7 +228,7 @@ public class Profile {
|
|||
|
||||
if (isValid) {
|
||||
// Check for hours alignment
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePumpPlugin();
|
||||
if (pump != null && !pump.getPumpDescription().is30minBasalRatesCapable) {
|
||||
for (int index = 0; index < basal_v.size(); index++) {
|
||||
long secondsFromMidnight = basal_v.keyAt(index);
|
||||
|
|
|
@ -191,4 +191,8 @@ public class PumpEnactResult {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static PumpEnactResult error(String message) {
|
||||
return new PumpEnactResult().enacted(false).success(false).comment(message);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import info.nightscout.androidaps.Constants;
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
import info.nightscout.androidaps.data.OverlappingIntervals;
|
||||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.data.ProfileStore;
|
||||
|
@ -48,9 +47,9 @@ import info.nightscout.androidaps.events.EventTempBasalChange;
|
|||
import info.nightscout.androidaps.events.EventTempTargetChange;
|
||||
import info.nightscout.androidaps.interfaces.ProfileInterface;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData;
|
||||
import info.nightscout.androidaps.plugins.pump.danaR.activities.DanaRNSHistorySync;
|
||||
import info.nightscout.androidaps.plugins.pump.danaR.comm.RecordTypes;
|
||||
|
@ -418,40 +417,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
|||
|
||||
}
|
||||
|
||||
/*
|
||||
* Return last BgReading from database or null if db is empty
|
||||
*/
|
||||
@Nullable
|
||||
public static BgReading lastBg() {
|
||||
List<BgReading> bgList = IobCobCalculatorPlugin.getPlugin().getBgReadings();
|
||||
|
||||
if (bgList == null)
|
||||
return null;
|
||||
|
||||
for (int i = 0; i < bgList.size(); i++)
|
||||
if (bgList.get(i).value >= 39)
|
||||
return bgList.get(i);
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return bg reading if not old ( <9 min )
|
||||
* or null if older
|
||||
*/
|
||||
@Nullable
|
||||
public static BgReading actualBg() {
|
||||
BgReading lastBg = lastBg();
|
||||
|
||||
if (lastBg == null)
|
||||
return null;
|
||||
|
||||
if (lastBg.date > System.currentTimeMillis() - 9 * 60 * 1000)
|
||||
return lastBg;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public List<BgReading> getBgreadingsDataFromTime(long mills, boolean ascending) {
|
||||
try {
|
||||
Dao<BgReading, Long> daoBgreadings = getDaoBgReadings();
|
||||
|
|
|
@ -13,8 +13,12 @@ import info.nightscout.androidaps.plugins.general.automation.actions.*
|
|||
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
||||
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
||||
import info.nightscout.androidaps.plugins.treatments.Treatment
|
||||
import info.nightscout.androidaps.queue.commands.CommandSetProfile
|
||||
import info.nightscout.androidaps.queue.CommandQueue
|
||||
import info.nightscout.androidaps.queue.commands.*
|
||||
import info.nightscout.androidaps.utils.wizard.BolusWizard
|
||||
import info.nightscout.androidaps.utils.wizard.QuickWizardEntry
|
||||
import javax.inject.Singleton
|
||||
|
@ -32,7 +36,21 @@ import javax.inject.Singleton
|
|||
)
|
||||
interface AppComponent : AndroidInjector<MainApp> {
|
||||
|
||||
fun injectCommandQueue(commandQueue: CommandQueue)
|
||||
fun injectCommandBolus(commandBolus: CommandBolus)
|
||||
fun injectCommandCancelExtendedBolus(commandCancelExtendedBolus: CommandCancelExtendedBolus)
|
||||
fun injectCommandCancelTempBasal(commandCancelTempBasal: CommandCancelTempBasal)
|
||||
fun injectCommandExtendedBolus(commandExtendedBolus: CommandExtendedBolus)
|
||||
fun injectCommandInsightSetTBROverNotification(commandInsightSetTBROverNotification: CommandInsightSetTBROverNotification)
|
||||
fun injectCommandLoadEvents(commandLoadEvents: CommandLoadEvents)
|
||||
fun injectCommandLoadHistory(commandLoadHistory: CommandLoadHistory)
|
||||
fun injectCommandReadStatus(commandReadStatus: CommandReadStatus)
|
||||
fun injectCommandSetProfile(commandSetProfile: CommandSetProfile)
|
||||
fun injectCommandCommandSMBBolus(commandSMBBolus: CommandSMBBolus)
|
||||
fun injectCommandStartPump(commandStartPump: CommandStartPump)
|
||||
fun injectCommandStopPump(commandStopPump: CommandStopPump)
|
||||
fun injectCommandTempBasalAbsolute(commandTempBasalAbsolute: CommandTempBasalAbsolute)
|
||||
fun injectCommandTempBasalPercent(commandTempBasalPercent: CommandTempBasalPercent)
|
||||
|
||||
fun injectObjective0(objective0: Objective0)
|
||||
fun injectObjective1(objective1: Objective1)
|
||||
|
@ -58,7 +76,7 @@ interface AppComponent : AndroidInjector<MainApp> {
|
|||
fun injectTrigger(triggerRecurringTime: TriggerRecurringTime)
|
||||
fun injectTrigger(triggerTempTarget: TriggerTempTarget)
|
||||
fun injectTrigger(triggerTime: TriggerTime)
|
||||
fun injectTrigger(triggerTimeRange : TriggerTimeRange)
|
||||
fun injectTrigger(triggerTimeRange: TriggerTimeRange)
|
||||
fun injectTrigger(triggerWifiSsid: TriggerWifiSsid)
|
||||
|
||||
fun injectAction(action: Action)
|
||||
|
@ -95,6 +113,10 @@ interface AppComponent : AndroidInjector<MainApp> {
|
|||
fun injectElement(labelWithElement: LabelWithElement)
|
||||
fun injectElement(staticLabel: StaticLabel)
|
||||
|
||||
fun injectAutosensDate(autosensData: AutosensData)
|
||||
fun injectIobCobThread(iobCobThread: IobCobThread)
|
||||
fun injectIobCobOref1Thread(iobCobOref1Thread: IobCobOref1Thread)
|
||||
|
||||
fun injectTreatment(treatment: Treatment)
|
||||
fun injectBgReading(bgReading: BgReading)
|
||||
|
||||
|
|
|
@ -25,8 +25,12 @@ import info.nightscout.androidaps.plugins.general.automation.actions.*
|
|||
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
||||
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
||||
import info.nightscout.androidaps.plugins.treatments.Treatment
|
||||
import info.nightscout.androidaps.queue.commands.CommandSetProfile
|
||||
import info.nightscout.androidaps.queue.CommandQueue
|
||||
import info.nightscout.androidaps.queue.commands.*
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelperImplementation
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
|
@ -46,8 +50,8 @@ open class AppModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideProfileFunction(sp: SP, configBuilderPlugin: ConfigBuilderPlugin): ProfileFunction {
|
||||
return ProfileFunctionImplementation(sp, configBuilderPlugin)
|
||||
fun provideProfileFunction(sp: SP): ProfileFunction {
|
||||
return ProfileFunctionImplementation(sp)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -69,7 +73,25 @@ open class AppModule {
|
|||
@Module
|
||||
interface AppBindings {
|
||||
|
||||
@ContributesAndroidInjector fun commandQueueInjector(): CommandQueue
|
||||
@ContributesAndroidInjector fun commandBolusInjector(): CommandBolus
|
||||
@ContributesAndroidInjector
|
||||
fun commandCancelExtendedBolusInjector(): CommandCancelExtendedBolus
|
||||
|
||||
@ContributesAndroidInjector fun commandCancelTempBasalInjector(): CommandCancelTempBasal
|
||||
@ContributesAndroidInjector fun commandExtendedBolusInjector(): CommandExtendedBolus
|
||||
@ContributesAndroidInjector
|
||||
fun commandInsightSetTBROverNotificationInjector(): CommandInsightSetTBROverNotification
|
||||
|
||||
@ContributesAndroidInjector fun commandLoadEventsInjector(): CommandLoadEvents
|
||||
@ContributesAndroidInjector fun commandLoadHistoryInjector(): CommandLoadHistory
|
||||
@ContributesAndroidInjector fun commandReadStatusInjector(): CommandReadStatus
|
||||
@ContributesAndroidInjector fun commandSetProfileInjector(): CommandSetProfile
|
||||
@ContributesAndroidInjector fun commandCommandSMBBolusInjector(): CommandSMBBolus
|
||||
@ContributesAndroidInjector fun commandStartPumpInjector(): CommandStartPump
|
||||
@ContributesAndroidInjector fun commandStopPumpInjector(): CommandStopPump
|
||||
@ContributesAndroidInjector fun commandTempBasalAbsoluteInjector(): CommandTempBasalAbsolute
|
||||
@ContributesAndroidInjector fun commandTempBasalPercentInjector(): CommandTempBasalPercent
|
||||
|
||||
@ContributesAndroidInjector fun objective0Injector(): Objective0
|
||||
@ContributesAndroidInjector fun objective1Injector(): Objective1
|
||||
|
@ -107,7 +129,9 @@ open class AppModule {
|
|||
@ContributesAndroidInjector fun actionLoopSuspendInjector(): ActionLoopSuspend
|
||||
@ContributesAndroidInjector fun actionNotificationInjector(): ActionNotification
|
||||
@ContributesAndroidInjector fun actionProfileSwitchInjector(): ActionProfileSwitch
|
||||
@ContributesAndroidInjector fun actionProfileSwitchPercentInjector(): ActionProfileSwitchPercent
|
||||
@ContributesAndroidInjector
|
||||
fun actionProfileSwitchPercentInjector(): ActionProfileSwitchPercent
|
||||
|
||||
@ContributesAndroidInjector fun actionSendSMSInjector(): ActionSendSMS
|
||||
@ContributesAndroidInjector fun actionStartTempTargetInjector(): ActionStartTempTarget
|
||||
@ContributesAndroidInjector fun actionStopTempTargetInjector(): ActionStopTempTarget
|
||||
|
@ -134,6 +158,10 @@ open class AppModule {
|
|||
@ContributesAndroidInjector fun labelWithElementInjector(): LabelWithElement
|
||||
@ContributesAndroidInjector fun staticLabelInjector(): StaticLabel
|
||||
|
||||
@ContributesAndroidInjector fun autosensDataInjector(): AutosensData
|
||||
@ContributesAndroidInjector fun iobCobThreadInjector(): IobCobThread
|
||||
@ContributesAndroidInjector fun iobCobOref1ThreadInjector(): IobCobOref1Thread
|
||||
|
||||
@ContributesAndroidInjector fun bgReadingInjector(): BgReading
|
||||
@ContributesAndroidInjector fun treatmentInjector(): Treatment
|
||||
|
||||
|
@ -146,9 +174,10 @@ open class AppModule {
|
|||
@Binds fun bindContext(mainApp: MainApp): Context
|
||||
@Binds fun bindInjector(mainApp: MainApp): HasAndroidInjector
|
||||
|
||||
@Binds fun bindActivePluginProvider(configBuilderPlugin: ConfigBuilderPlugin): ActivePluginProvider
|
||||
@Binds
|
||||
fun bindActivePluginProvider(configBuilderPlugin: ConfigBuilderPlugin): ActivePluginProvider
|
||||
|
||||
@Binds fun bindCommandQueueProvider(configBuilderPlugin: ConfigBuilderPlugin): CommandQueueProvider
|
||||
@Binds fun commandQueueProvider(commandQueue: CommandQueue): CommandQueueProvider
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,22 +19,24 @@ import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseTrigg
|
|||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditActionDialog
|
||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog
|
||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditTriggerDialog
|
||||
import info.nightscout.androidaps.plugins.general.careportal.CareportalFragment
|
||||
import info.nightscout.androidaps.plugins.general.careportal.Dialogs.NewNSTreatmentDialog
|
||||
import info.nightscout.androidaps.plugins.general.food.FoodFragment
|
||||
import info.nightscout.androidaps.plugins.general.maintenance.MaintenanceFragment
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSClientFragment
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewFragment
|
||||
import info.nightscout.androidaps.plugins.general.overview.dialogs.EditQuickWizardDialog
|
||||
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorFragment
|
||||
import info.nightscout.androidaps.plugins.general.tidepool.TidepoolFragment
|
||||
import info.nightscout.androidaps.plugins.profile.local.LocalProfileFragment
|
||||
import info.nightscout.androidaps.plugins.profile.ns.NSProfileFragment
|
||||
import info.nightscout.androidaps.plugins.pump.combo.ComboFragment
|
||||
import info.nightscout.androidaps.plugins.pump.danaR.DanaRFragment
|
||||
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightFragment
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicFragment
|
||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpFragment
|
||||
import info.nightscout.androidaps.plugins.source.BGSourceFragment
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsFragment
|
||||
import info.nightscout.androidaps.dialogs.WizardInfoDialog
|
||||
import info.nightscout.androidaps.plugins.general.careportal.CareportalFragment
|
||||
import info.nightscout.androidaps.plugins.general.careportal.Dialogs.NewNSTreatmentDialog
|
||||
import info.nightscout.androidaps.plugins.general.food.FoodFragment
|
||||
import info.nightscout.androidaps.plugins.general.maintenance.MaintenanceFragment
|
||||
import info.nightscout.androidaps.plugins.treatments.fragments.TreatmentsBolusFragment
|
||||
import info.nightscout.androidaps.plugins.treatments.fragments.TreatmentsCareportalFragment
|
||||
import info.nightscout.androidaps.plugins.treatments.fragments.TreatmentsProfileSwitchFragment
|
||||
|
@ -49,7 +51,10 @@ abstract class FragmentsModule {
|
|||
@ContributesAndroidInjector abstract fun contributesAutomationFragment(): AutomationFragment
|
||||
@ContributesAndroidInjector abstract fun contributesBGSourceFragment(): BGSourceFragment
|
||||
@ContributesAndroidInjector abstract fun contributesCareportalFragment(): CareportalFragment
|
||||
@ContributesAndroidInjector abstract fun contributesConfigBuilderFragment(): ConfigBuilderFragment
|
||||
@ContributesAndroidInjector abstract fun contributesComboFragment(): ComboFragment
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesConfigBuilderFragment(): ConfigBuilderFragment
|
||||
|
||||
@ContributesAndroidInjector abstract fun contributesDanaRFragment(): DanaRFragment
|
||||
@ContributesAndroidInjector abstract fun contributesFoodFragment(): FoodFragment
|
||||
@ContributesAndroidInjector abstract fun contributesLocalProfileFragment(): LocalProfileFragment
|
||||
|
@ -58,16 +63,26 @@ abstract class FragmentsModule {
|
|||
@ContributesAndroidInjector abstract fun contributesOpenAPSMAFragment(): OpenAPSMAFragment
|
||||
@ContributesAndroidInjector abstract fun contributesOpenAPSSMBFragment(): OpenAPSSMBFragment
|
||||
@ContributesAndroidInjector abstract fun contributesOverviewFragment(): OverviewFragment
|
||||
@ContributesAndroidInjector abstract fun contributesLocalInsightFragment(): LocalInsightFragment
|
||||
@ContributesAndroidInjector abstract fun contributesLoopFragment(): LoopFragment
|
||||
@ContributesAndroidInjector abstract fun contributesMaintenanceFragment(): MaintenanceFragment
|
||||
@ContributesAndroidInjector abstract fun contributesMedtronicFragment(): MedtronicFragment
|
||||
@ContributesAndroidInjector abstract fun contributesNSProfileFragment(): NSProfileFragment
|
||||
@ContributesAndroidInjector abstract fun contributesSmsCommunicatorFragment(): SmsCommunicatorFragment
|
||||
@ContributesAndroidInjector abstract fun contributesNSClientFragment(): NSClientFragment
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesSmsCommunicatorFragment(): SmsCommunicatorFragment
|
||||
|
||||
@ContributesAndroidInjector abstract fun contributesTidepoolFragment(): TidepoolFragment
|
||||
@ContributesAndroidInjector abstract fun contributesTreatmentsFragment(): TreatmentsFragment
|
||||
@ContributesAndroidInjector abstract fun contributesTreatmentsBolusFragment(): TreatmentsBolusFragment
|
||||
@ContributesAndroidInjector abstract fun contributesTreatmentsCareportalFragment(): TreatmentsCareportalFragment
|
||||
@ContributesAndroidInjector abstract fun contributesTreatmentsProfileSwitchFragment(): TreatmentsProfileSwitchFragment
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesTreatmentsBolusFragment(): TreatmentsBolusFragment
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesTreatmentsCareportalFragment(): TreatmentsCareportalFragment
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesTreatmentsProfileSwitchFragment(): TreatmentsProfileSwitchFragment
|
||||
|
||||
@ContributesAndroidInjector abstract fun contributesVirtualPumpFragment(): VirtualPumpFragment
|
||||
|
||||
@ContributesAndroidInjector abstract fun contributesBolusProgressDialog(): BolusProgressDialog
|
||||
|
@ -77,7 +92,9 @@ abstract class FragmentsModule {
|
|||
@ContributesAndroidInjector abstract fun contributesEditActionDialog(): EditActionDialog
|
||||
@ContributesAndroidInjector abstract fun contributesEditEventDialog(): EditEventDialog
|
||||
@ContributesAndroidInjector abstract fun contributesEditTriggerDialog(): EditTriggerDialog
|
||||
@ContributesAndroidInjector abstract fun contributesEditQuickWizardDialog(): EditQuickWizardDialog
|
||||
@ContributesAndroidInjector
|
||||
abstract fun contributesEditQuickWizardDialog(): EditQuickWizardDialog
|
||||
|
||||
@ContributesAndroidInjector abstract fun contributesErrorDialog(): ErrorDialog
|
||||
@ContributesAndroidInjector abstract fun contributesExtendedBolusDialog(): ExtendedBolusDialog
|
||||
@ContributesAndroidInjector abstract fun contributesFillDialog(): FillDialog
|
||||
|
|
|
@ -12,10 +12,10 @@ import dagger.android.support.DaggerDialogFragment
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.BolusProgressHelperActivity
|
||||
import info.nightscout.androidaps.events.EventPumpStatusChanged
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
|
||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||
|
@ -29,7 +29,7 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
||||
|
||||
private val disposable = CompositeDisposable()
|
||||
|
@ -73,7 +73,7 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
stopPressed = true
|
||||
overview_bolusprogress_stoppressed.visibility = View.VISIBLE
|
||||
overview_bolusprogress_stop.visibility = View.INVISIBLE
|
||||
configBuilderPlugin.commandQueue.cancelAllBoluses()
|
||||
commandQueue.cancelAllBoluses()
|
||||
}
|
||||
val defaultState = resourceHelper.gs(R.string.waitingforpump)
|
||||
overview_bolusprogress_progressbar.max = 100
|
||||
|
@ -90,7 +90,7 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
override fun onResume() {
|
||||
super.onResume()
|
||||
aapsLogger.debug(LTag.UI, "onResume")
|
||||
if (!configBuilderPlugin.commandQueue.bolusInQueue())
|
||||
if (!commandQueue.bolusInQueue())
|
||||
bolusEnded = true
|
||||
|
||||
if (bolusEnded) dismiss()
|
||||
|
|
|
@ -12,13 +12,13 @@ import info.nightscout.androidaps.MainApp
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.db.CareportalEvent
|
||||
import info.nightscout.androidaps.db.DatabaseHelper
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.db.TempTarget
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
||||
import info.nightscout.androidaps.plugins.treatments.CarbsGenerator
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.utils.*
|
||||
|
@ -38,6 +38,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin;
|
||||
|
||||
companion object {
|
||||
private const val FAV1_DEFAULT = 5
|
||||
|
@ -118,7 +119,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
|||
validateInputs()
|
||||
}
|
||||
|
||||
DatabaseHelper.actualBg()?.let { bgReading ->
|
||||
iobCobCalculatorPlugin.actualBg()?.let { bgReading ->
|
||||
if (bgReading.value < 72)
|
||||
overview_carbs_hypo_tt.isChecked = true
|
||||
}
|
||||
|
|
|
@ -9,8 +9,9 @@ import com.google.common.base.Joiner
|
|||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.HtmlHelper
|
||||
|
@ -28,7 +29,8 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
|
|||
@Inject lateinit var mainApp: MainApp
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
||||
super.onSaveInstanceState(savedInstanceState)
|
||||
|
@ -45,7 +47,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val pumpDescription = configBuilderPlugin.activePump?.pumpDescription ?: return
|
||||
val pumpDescription = activePlugin.activePump.pumpDescription
|
||||
|
||||
val maxInsulin = constraintChecker.getMaxExtendedBolusAllowed().value()
|
||||
val extendedStep = pumpDescription.extendedBolusStep
|
||||
|
@ -70,7 +72,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
|
|||
|
||||
activity?.let { activity ->
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.extended_bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
|
||||
configBuilderPlugin.commandQueue.extendedBolus(insulinAfterConstraint, durationInMinutes, object : Callback() {
|
||||
commandQueue.extendedBolus(insulinAfterConstraint, durationInMinutes, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package info.nightscout.androidaps.dialogs
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
|
@ -12,8 +13,9 @@ import info.nightscout.androidaps.activities.ErrorHelperActivity
|
|||
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||
import info.nightscout.androidaps.db.CareportalEvent
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
|
@ -35,8 +37,9 @@ import kotlin.math.abs
|
|||
class FillDialog : DialogFragmentWithDate() {
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var mainApp: MainApp
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var ctx: Context
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
||||
super.onSaveInstanceState(savedInstanceState)
|
||||
|
@ -53,7 +56,7 @@ class FillDialog : DialogFragmentWithDate() {
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
|
||||
val bolusStep = configBuilderPlugin.activePump!!.pumpDescription.bolusStep
|
||||
val bolusStep = activePlugin.activePump.pumpDescription.bolusStep
|
||||
fill_insulinamount.setParams(savedInstanceState?.getDouble("fill_insulin_amount")
|
||||
?: 0.0, 0.0, maxInsulin, bolusStep, DecimalFormatter.pumpSupportedBolusFormat(), true, ok)
|
||||
val amount1 = sp.getDouble("fill_button1", 0.3)
|
||||
|
@ -119,15 +122,15 @@ class FillDialog : DialogFragmentWithDate() {
|
|||
detailedBolusInfo.source = Source.USER
|
||||
detailedBolusInfo.isValid = false // do not count it in IOB (for pump history)
|
||||
detailedBolusInfo.notes = notes
|
||||
configBuilderPlugin.commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
val i = Intent(ctx, ErrorHelperActivity::class.java)
|
||||
i.putExtra("soundid", R.raw.boluserror)
|
||||
i.putExtra("status", result.comment)
|
||||
i.putExtra("title", resourceHelper.gs(R.string.treatmentdeliveryerror))
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
mainApp.startActivity(i)
|
||||
ctx.startActivity(i)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -158,7 +161,7 @@ class FillDialog : DialogFragmentWithDate() {
|
|||
return true
|
||||
}
|
||||
|
||||
fun generateJson(careportalEvent: String, time: Long, notes: String): JSONObject {
|
||||
private fun generateJson(careportalEvent: String, time: Long, notes: String): JSONObject {
|
||||
val data = JSONObject()
|
||||
try {
|
||||
data.put("eventType", careportalEvent)
|
||||
|
|
|
@ -9,7 +9,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import com.google.common.base.Joiner
|
||||
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
|
||||
|
@ -17,11 +16,11 @@ import info.nightscout.androidaps.data.Profile
|
|||
import info.nightscout.androidaps.db.CareportalEvent
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.db.TempTarget
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.*
|
||||
import info.nightscout.androidaps.utils.extensions.toSignedString
|
||||
|
@ -37,12 +36,11 @@ import kotlin.math.max
|
|||
|
||||
class InsulinDialog : DialogFragmentWithDate() {
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
@Inject lateinit var mainApp: MainApp
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
companion object {
|
||||
private const val PLUS1_DEFAULT = 0.5
|
||||
|
@ -63,11 +61,11 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
|
||||
if (abs(overview_insulin_time.value.toInt()) > 12 * 60) {
|
||||
overview_insulin_time.value = 0.0
|
||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.constraintapllied))
|
||||
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.constraintapllied))
|
||||
}
|
||||
if (overview_insulin_amount.value > maxInsulin) {
|
||||
overview_insulin_amount.value = 0.0
|
||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.bolusconstraintapplied))
|
||||
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.bolusconstraintapplied))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,7 +89,7 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
overview_insulin_time.setParams(savedInstanceState?.getDouble("overview_insulin_time")
|
||||
?: 0.0, -12 * 60.0, 12 * 60.0, 5.0, DecimalFormat("0"), false, ok, textWatcher)
|
||||
overview_insulin_amount.setParams(savedInstanceState?.getDouble("overview_insulin_amount")
|
||||
?: 0.0, 0.0, maxInsulin, configBuilderPlugin.activePump!!.pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(), false, ok, textWatcher)
|
||||
?: 0.0, 0.0, maxInsulin, activePlugin.activePump.pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(), false, ok, textWatcher)
|
||||
|
||||
overview_insulin_plus05.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_1), PLUS1_DEFAULT).toSignedString()
|
||||
overview_insulin_plus05.setOnClickListener {
|
||||
|
@ -107,7 +105,7 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
overview_insulin_plus20.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_3), PLUS3_DEFAULT).toSignedString()
|
||||
overview_insulin_plus20.setOnClickListener {
|
||||
overview_insulin_amount.value = Math.max(0.0, overview_insulin_amount.value
|
||||
overview_insulin_amount.value = max(0.0, overview_insulin_amount.value
|
||||
+ sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_3), PLUS3_DEFAULT))
|
||||
validateInputs()
|
||||
}
|
||||
|
@ -119,7 +117,7 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
|
||||
override fun submit(): Boolean {
|
||||
val pumpDescription = configBuilderPlugin.activePump?.pumpDescription
|
||||
val pumpDescription = activePlugin.activePumpPlugin?.pumpDescription
|
||||
?: return false
|
||||
val insulin = SafeParse.stringToDouble(overview_insulin_amount.text)
|
||||
val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value()
|
||||
|
@ -161,7 +159,7 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
.source(Source.USER)
|
||||
.low(Profile.toMgdl(eatingSoonTT, profileFunction.getUnits()))
|
||||
.high(Profile.toMgdl(eatingSoonTT, profileFunction.getUnits()))
|
||||
treatmentsPlugin.addToHistoryTempTarget(tempTarget)
|
||||
activePlugin.activeTreatments.addToHistoryTempTarget(tempTarget)
|
||||
}
|
||||
if (insulinAfterConstraints > 0) {
|
||||
val detailedBolusInfo = DetailedBolusInfo()
|
||||
|
@ -172,18 +170,18 @@ class InsulinDialog : DialogFragmentWithDate() {
|
|||
detailedBolusInfo.notes = notes
|
||||
if (recordOnlyChecked) {
|
||||
detailedBolusInfo.date = time
|
||||
treatmentsPlugin.addToHistoryTreatment(detailedBolusInfo, false)
|
||||
activePlugin.activeTreatments.addToHistoryTreatment(detailedBolusInfo, false)
|
||||
} else {
|
||||
detailedBolusInfo.date = DateUtil.now()
|
||||
configBuilderPlugin.commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
val i = Intent(context, ErrorHelperActivity::class.java)
|
||||
i.putExtra("soundid", R.raw.boluserror)
|
||||
i.putExtra("status", result.comment)
|
||||
i.putExtra("title", resourceHelper.gs(R.string.treatmentdeliveryerror))
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
mainApp.startActivity(i)
|
||||
context?.startActivity(i)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -6,15 +6,14 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.google.common.base.Joiner
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.interfaces.PumpDescription
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.HtmlHelper
|
||||
import info.nightscout.androidaps.utils.OKDialog
|
||||
|
@ -29,10 +28,10 @@ import kotlin.math.abs
|
|||
|
||||
class TempBasalDialog : DialogFragmentWithDate() {
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
@Inject lateinit var mainApp: MainApp
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
|
||||
private var isPercentPump = true
|
||||
|
||||
|
@ -52,7 +51,7 @@ class TempBasalDialog : DialogFragmentWithDate() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val pumpDescription = configBuilderPlugin.activePump?.pumpDescription ?: return
|
||||
val pumpDescription = activePlugin.activePumpPlugin?.pumpDescription ?: return
|
||||
val profile = profileFunction.getProfile() ?: return
|
||||
|
||||
val maxTempPercent = pumpDescription.maxTempPercent.toDouble()
|
||||
|
@ -104,20 +103,19 @@ class TempBasalDialog : DialogFragmentWithDate() {
|
|||
val callback: Callback = object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
val i = Intent(context, ErrorHelperActivity::class.java)
|
||||
i.putExtra("soundid", R.raw.boluserror)
|
||||
i.putExtra("status", result.comment)
|
||||
i.putExtra("title", resourceHelper.gs(R.string.tempbasaldeliveryerror))
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
mainApp.startActivity(i)
|
||||
context?.startActivity(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isPercentPump) {
|
||||
configBuilderPlugin.commandQueue.tempBasalPercent(percent, durationInMinutes, true, profile, callback)
|
||||
} else {
|
||||
configBuilderPlugin.commandQueue.tempBasalAbsolute(absolute, durationInMinutes, true, profile, callback)
|
||||
}
|
||||
if (isPercentPump)
|
||||
commandQueue.tempBasalPercent(percent, durationInMinutes, true, profile, callback)
|
||||
else
|
||||
commandQueue.tempBasalAbsolute(absolute, durationInMinutes, true, profile, callback)
|
||||
})
|
||||
}
|
||||
return true
|
||||
|
|
|
@ -8,16 +8,15 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.google.common.base.Joiner
|
||||
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.db.CareportalEvent
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.HtmlHelper
|
||||
|
@ -34,10 +33,9 @@ import kotlin.math.abs
|
|||
|
||||
class TreatmentDialog : DialogFragmentWithDate() {
|
||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
||||
@Inject lateinit var mainApp: MainApp
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
|
||||
private val textWatcher: TextWatcher = object : TextWatcher {
|
||||
override fun afterTextChanged(s: Editable) {}
|
||||
|
@ -52,11 +50,11 @@ class TreatmentDialog : DialogFragmentWithDate() {
|
|||
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
|
||||
if (SafeParse.stringToInt(overview_treatment_carbs.text) > maxCarbs) {
|
||||
overview_treatment_carbs.value = 0.0
|
||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.carbsconstraintapplied))
|
||||
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.carbsconstraintapplied))
|
||||
}
|
||||
if (SafeParse.stringToDouble(overview_treatment_insulin.text) > maxInsulin) {
|
||||
overview_treatment_insulin.value = 0.0
|
||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.bolusconstraintapplied))
|
||||
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.bolusconstraintapplied))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,7 +75,7 @@ class TreatmentDialog : DialogFragmentWithDate() {
|
|||
|
||||
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value().toDouble()
|
||||
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
|
||||
val pumpDescription = configBuilderPlugin.activePump?.pumpDescription ?: return
|
||||
val pumpDescription = activePlugin.activePumpPlugin?.pumpDescription ?: return
|
||||
overview_treatment_carbs.setParams(savedInstanceState?.getDouble("overview_treatment_carbs")
|
||||
?: 0.0, 0.0, maxCarbs, 1.0, DecimalFormat("0"), false, ok, textWatcher)
|
||||
overview_treatment_insulin.setParams(savedInstanceState?.getDouble("overview_treatment_insulin")
|
||||
|
@ -85,7 +83,7 @@ class TreatmentDialog : DialogFragmentWithDate() {
|
|||
}
|
||||
|
||||
override fun submit(): Boolean {
|
||||
val pumpDescription = configBuilderPlugin.activePump?.pumpDescription
|
||||
val pumpDescription = activePlugin.activePumpPlugin?.pumpDescription
|
||||
?: return false
|
||||
val insulin = SafeParse.stringToDouble(overview_treatment_insulin.text)
|
||||
val carbs = SafeParse.stringToInt(overview_treatment_carbs.text)
|
||||
|
@ -117,20 +115,20 @@ class TreatmentDialog : DialogFragmentWithDate() {
|
|||
detailedBolusInfo.context = context
|
||||
detailedBolusInfo.source = Source.USER
|
||||
if (!(recordOnlyChecked && (detailedBolusInfo.insulin > 0 || pumpDescription.storesCarbInfo))) {
|
||||
configBuilderPlugin.commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
commandQueue.bolus(detailedBolusInfo, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
val i = Intent(context, ErrorHelperActivity::class.java)
|
||||
i.putExtra("soundid", R.raw.boluserror)
|
||||
i.putExtra("status", result.comment)
|
||||
i.putExtra("title", resourceHelper.gs(R.string.treatmentdeliveryerror))
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
mainApp.startActivity(i)
|
||||
context?.startActivity(i)
|
||||
}
|
||||
}
|
||||
})
|
||||
} else
|
||||
treatmentsPlugin.addToHistoryTreatment(detailedBolusInfo, false)
|
||||
activePlugin.activeTreatments.addToHistoryTreatment(detailedBolusInfo, false)
|
||||
})
|
||||
}
|
||||
} else
|
||||
|
|
|
@ -18,7 +18,6 @@ import info.nightscout.androidaps.MainApp
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.db.BgReading
|
||||
import info.nightscout.androidaps.db.DatabaseHelper
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -110,8 +109,7 @@ class WizardDialog : DaggerDialogFragment() {
|
|||
?: 0.0, 0.0, 500.0, 0.1, DecimalFormat("0.0"), false, ok, textWatcher)
|
||||
treatments_wizard_carbs_input.setParams(savedInstanceState?.getDouble("treatments_wizard_carbs_input")
|
||||
?: 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false, ok, textWatcher)
|
||||
val bolusStep = configBuilderPlugin.activePump?.pumpDescription?.bolusStep
|
||||
?: 0.1
|
||||
val bolusStep = configBuilderPlugin.activePump.pumpDescription.bolusStep
|
||||
treatments_wizard_correction_input.setParams(savedInstanceState?.getDouble("treatments_wizard_correction_input")
|
||||
?: 0.0, -maxCorrection, maxCorrection, bolusStep, DecimalFormatter.pumpSupportedBolusFormat(), false, ok, textWatcher)
|
||||
treatments_wizard_carb_time_input.setParams(savedInstanceState?.getDouble("treatments_wizard_carb_time_input")
|
||||
|
@ -238,7 +236,7 @@ class WizardDialog : DaggerDialogFragment() {
|
|||
treatments_wizard_bg_input.setStep(0.1)
|
||||
|
||||
// Set BG if not old
|
||||
val lastBg = DatabaseHelper.actualBg()
|
||||
val lastBg = iobCobCalculatorPlugin.actualBg()
|
||||
|
||||
if (lastBg != null) {
|
||||
treatments_wizard_bg_input.value = lastBg.valueToUnits(units)
|
||||
|
|
|
@ -1,24 +1,34 @@
|
|||
package info.nightscout.androidaps.historyBrowser
|
||||
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import javax.inject.Inject
|
||||
|
||||
class IobCobStaticCalculatorPlugin @Inject constructor(
|
||||
injector: HasAndroidInjector,
|
||||
aapsLogger: AAPSLogger,
|
||||
rxBus: RxBusWrapper,
|
||||
sp: SP,
|
||||
resourceHelper: ResourceHelper,
|
||||
profileFunction: ProfileFunction,
|
||||
configBuilderPlugin: ConfigBuilderPlugin,
|
||||
treatmentsPlugin: TreatmentsPlugin
|
||||
) : IobCobCalculatorPlugin(aapsLogger, rxBus, sp, resourceHelper, profileFunction, configBuilderPlugin, treatmentsPlugin) {
|
||||
treatmentsPlugin: TreatmentsPlugin,
|
||||
sensitivityOref1Plugin: SensitivityOref1Plugin,
|
||||
sensitivityAAPSPlugin: SensitivityAAPSPlugin,
|
||||
sensitivityWeightedAveragePlugin: SensitivityWeightedAveragePlugin
|
||||
) : IobCobCalculatorPlugin(injector, aapsLogger, rxBus, sp, resourceHelper, profileFunction,
|
||||
configBuilderPlugin, treatmentsPlugin, sensitivityOref1Plugin, sensitivityAAPSPlugin, sensitivityWeightedAveragePlugin) {
|
||||
|
||||
override fun onStart() { // do not attach to rxbus
|
||||
}
|
||||
}
|
|
@ -1,23 +1,25 @@
|
|||
package info.nightscout.androidaps.interfaces;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Created by adrian on 2020-01-07.
|
||||
*/
|
||||
|
||||
public interface ActivePluginProvider {
|
||||
|
||||
@Nullable BgSourceInterface getActiveBgSource();
|
||||
|
||||
@NotNull ProfileInterface getActiveProfileInterface();
|
||||
@NotNull ProfileInterface getActiveProfileInterface(); // Forced to LocalProfile if not changed
|
||||
|
||||
@Nullable InsulinInterface getActiveInsulin();
|
||||
@NonNull InsulinInterface getActiveInsulin(); // Forced to RapidActing if not changed
|
||||
|
||||
@Nullable APSInterface getActiveAPS();
|
||||
|
||||
@Nullable PumpInterface getActivePump();
|
||||
@Nullable PumpInterface getActivePumpPlugin(); // Use in UI to disable buttons or check if pump is selected
|
||||
|
||||
@Nullable SensitivityInterface getActiveSensitivity();
|
||||
@NotNull PumpInterface getActivePump(); // Use in places not reachable without active pump. Otherwise IllegalStateException is thrown
|
||||
|
||||
@NotNull SensitivityInterface getActiveSensitivity(); // Forced to oref1 if not changed
|
||||
|
||||
@NotNull TreatmentsInterface getActiveTreatments();
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package info.nightscout.androidaps.interfaces;
|
||||
|
||||
import info.nightscout.androidaps.queue.CommandQueue;
|
||||
|
||||
/**
|
||||
* Created by adrian on 2020-01-07.
|
||||
*/
|
||||
|
||||
public interface CommandQueueProvider {
|
||||
CommandQueue getCommandQueue();
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package info.nightscout.androidaps.interfaces
|
||||
|
||||
import android.text.Spanned
|
||||
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.queue.commands.Command
|
||||
|
||||
interface CommandQueueProvider {
|
||||
|
||||
fun isRunning(type: Command.CommandType): Boolean
|
||||
fun pickup()
|
||||
fun clear()
|
||||
fun size(): Int
|
||||
fun performing(): Command?
|
||||
fun resetPerforming()
|
||||
fun independentConnect(reason: String, callback: Callback?)
|
||||
fun bolusInQueue(): Boolean
|
||||
fun bolus(detailedBolusInfo: DetailedBolusInfo, callback: Callback?): Boolean
|
||||
fun cancelAllBoluses()
|
||||
fun stopPump(callback: Callback?)
|
||||
fun startPump(callback: Callback?)
|
||||
fun setTBROverNotification(callback: Callback?, enable: Boolean)
|
||||
fun tempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, enforceNew: Boolean, profile: Profile, callback: Callback?): Boolean
|
||||
fun tempBasalPercent(percent: Int, durationInMinutes: Int, enforceNew: Boolean, profile: Profile, callback: Callback?): Boolean
|
||||
fun extendedBolus(insulin: Double, durationInMinutes: Int, callback: Callback?): Boolean
|
||||
fun cancelTempBasal(enforceNew: Boolean, callback: Callback?): Boolean
|
||||
fun cancelExtended(callback: Callback?): Boolean
|
||||
fun setProfile(profile: Profile, callback: Callback?): Boolean
|
||||
fun readStatus(reason: String, callback: Callback?): Boolean
|
||||
fun statusInQueue(): Boolean
|
||||
fun loadHistory(type: Byte, callback: Callback?): Boolean
|
||||
fun setUserOptions(callback: Callback?): Boolean
|
||||
fun loadTDDs(callback: Callback?): Boolean
|
||||
fun loadEvents(callback: Callback?): Boolean
|
||||
fun spannedStatus(): Spanned
|
||||
fun isThisProfileSet(profile: Profile): Boolean
|
||||
}
|
|
@ -1,32 +1,19 @@
|
|||
package info.nightscout.androidaps.interfaces
|
||||
|
||||
import android.os.SystemClock
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.events.EventConfigBuilderChange
|
||||
import info.nightscout.androidaps.events.EventRebuildTabs
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.L
|
||||
import info.nightscout.androidaps.logging.L.isEnabled
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.EventConfigBuilderUpdateGui
|
||||
import info.nightscout.androidaps.utils.OKDialog.showConfirmation
|
||||
import info.nightscout.androidaps.utils.SP
|
||||
import org.slf4j.LoggerFactory
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
|
||||
/**
|
||||
* Created by mike on 09.06.2016.
|
||||
*/
|
||||
abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: RxBusWrapper, val aapsLogger: AAPSLogger) {
|
||||
|
||||
companion object {
|
||||
private val log = LoggerFactory.getLogger(L.CORE)
|
||||
}
|
||||
abstract class PluginBase(
|
||||
val pluginDescription: PluginDescription,
|
||||
val aapsLogger: AAPSLogger,
|
||||
val resourceHelper: ResourceHelper
|
||||
) {
|
||||
|
||||
enum class State {
|
||||
NOT_INITIALIZED, ENABLED, DISABLED
|
||||
|
@ -34,61 +21,22 @@ abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: R
|
|||
|
||||
private var state = State.NOT_INITIALIZED
|
||||
private var fragmentVisible = false
|
||||
// Specific plugin with more Interfaces
|
||||
protected var isProfileInterfaceEnabled = false
|
||||
|
||||
// Default always calls invoke
|
||||
// Plugins that have special constraints if they get switched to may override this method
|
||||
open fun switchAllowed(newState: Boolean, activity: FragmentActivity?, type: PluginType) {
|
||||
performPluginSwitch(newState, type)
|
||||
}
|
||||
|
||||
protected fun confirmPumpPluginActivation(newState: Boolean, activity: FragmentActivity?, type: PluginType) {
|
||||
if (type == PluginType.PUMP) {
|
||||
val allowHardwarePump = SP.getBoolean("allow_hardware_pump", false)
|
||||
if (allowHardwarePump || activity == null) {
|
||||
performPluginSwitch(newState, type)
|
||||
} else {
|
||||
showConfirmation(activity, MainApp.gs(R.string.allow_hardware_pump_text), Runnable {
|
||||
performPluginSwitch(newState, type)
|
||||
SP.putBoolean("allow_hardware_pump", true)
|
||||
if (isEnabled(L.PUMP)) log.debug("First time HW pump allowed!")
|
||||
}, Runnable {
|
||||
RxBus.INSTANCE.send(EventConfigBuilderUpdateGui())
|
||||
if (isEnabled(L.PUMP)) log.debug("User does not allow switching to HW pump!")
|
||||
})
|
||||
}
|
||||
} else {
|
||||
performPluginSwitch(newState, type)
|
||||
}
|
||||
}
|
||||
|
||||
private fun performPluginSwitch(enabled: Boolean, type: PluginType) {
|
||||
setPluginEnabled(type, enabled)
|
||||
setFragmentVisible(type, enabled)
|
||||
ConfigBuilderPlugin.getPlugin().processOnEnabledCategoryChanged(this, type)
|
||||
ConfigBuilderPlugin.getPlugin().storeSettings("CheckedCheckboxEnabled")
|
||||
RxBus.INSTANCE.send(EventRebuildTabs())
|
||||
RxBus.INSTANCE.send(EventConfigBuilderChange())
|
||||
RxBus.INSTANCE.send(EventConfigBuilderUpdateGui())
|
||||
ConfigBuilderPlugin.getPlugin().logPluginStatus()
|
||||
}
|
||||
|
||||
open val name: String
|
||||
get() = if (pluginDescription.pluginName == -1) "UNKNOWN" else MainApp.gs(pluginDescription.pluginName)
|
||||
get() = if (pluginDescription.pluginName == -1) "UNKNOWN" else resourceHelper.gs(pluginDescription.pluginName)
|
||||
|
||||
//only if translation exists
|
||||
// use long name as fallback
|
||||
val nameShort: String
|
||||
get() {
|
||||
if (pluginDescription.shortName == -1) return name
|
||||
val translatedName = MainApp.gs(pluginDescription.shortName)
|
||||
val translatedName = resourceHelper.gs(pluginDescription.shortName)
|
||||
return if (!translatedName.trim { it <= ' ' }.isEmpty()) translatedName else name
|
||||
// use long name as fallback
|
||||
}
|
||||
|
||||
val description: String?
|
||||
get() = if (pluginDescription.description == -1) null else MainApp.gs(pluginDescription.description)
|
||||
get() = if (pluginDescription.description == -1) null else resourceHelper.gs(pluginDescription.description)
|
||||
|
||||
fun getType(): PluginType = pluginDescription.mainType
|
||||
|
||||
|
@ -103,7 +51,7 @@ abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: R
|
|||
if (type == pluginDescription.mainType) return state == State.ENABLED && specialEnableCondition()
|
||||
if (type == PluginType.CONSTRAINTS && pluginDescription.mainType == PluginType.PUMP && isEnabled(PluginType.PUMP)) return true
|
||||
if (type == PluginType.CONSTRAINTS && pluginDescription.mainType == PluginType.APS && isEnabled(PluginType.APS)) return true
|
||||
return if (type == PluginType.PROFILE && pluginDescription.mainType == PluginType.PUMP) isProfileInterfaceEnabled else false
|
||||
return false
|
||||
}
|
||||
|
||||
fun hasFragment(): Boolean {
|
||||
|
@ -121,7 +69,7 @@ abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: R
|
|||
if (state != State.ENABLED) {
|
||||
onStateChange(type, state, State.ENABLED)
|
||||
state = State.ENABLED
|
||||
if (isEnabled(L.CORE)) log.debug("Starting: $name")
|
||||
aapsLogger.debug(LTag.CORE, "Starting: $name")
|
||||
onStart()
|
||||
}
|
||||
} else { // disabling plugin
|
||||
|
@ -129,11 +77,9 @@ abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: R
|
|||
onStateChange(type, state, State.DISABLED)
|
||||
state = State.DISABLED
|
||||
onStop()
|
||||
if (isEnabled(L.CORE)) log.debug("Stopping: $name")
|
||||
aapsLogger.debug(LTag.CORE, "Stopping: $name")
|
||||
}
|
||||
}
|
||||
} else if (type == PluginType.PROFILE) {
|
||||
isProfileInterfaceEnabled = newState
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,16 +107,7 @@ abstract class PluginBase(val pluginDescription: PluginDescription, val rxBus: R
|
|||
return true
|
||||
}
|
||||
|
||||
protected open fun onStart() {
|
||||
if (getType() == PluginType.PUMP) {
|
||||
Thread(Runnable {
|
||||
SystemClock.sleep(3000)
|
||||
val commandQueue = ConfigBuilderPlugin.getPlugin().commandQueue
|
||||
commandQueue?.readStatus("Pump driver changed.", null)
|
||||
}).start()
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun onStart() {}
|
||||
protected open fun onStop() {}
|
||||
protected open fun onStateChange(type: PluginType?, oldState: State?, newState: State?) {}
|
||||
open fun preprocessPreferences(preferenceFragment: PreferenceFragmentCompat) {}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package info.nightscout.androidaps.interfaces;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -42,6 +43,7 @@ public interface PumpInterface {
|
|||
void getPumpStatus();
|
||||
|
||||
// Upload to pump new basal profile
|
||||
@NotNull
|
||||
PumpEnactResult setNewBasalProfile(Profile profile);
|
||||
|
||||
boolean isThisProfileSet(Profile profile);
|
||||
|
@ -54,39 +56,52 @@ public interface PumpInterface {
|
|||
|
||||
int getBatteryLevel(); // in percent as integer
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo);
|
||||
|
||||
void stopBolusDelivering();
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, Profile profile, boolean enforceNew);
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes, Profile profile, boolean enforceNew);
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes);
|
||||
|
||||
//some pumps might set a very short temp close to 100% as cancelling a temp can be noisy
|
||||
//when the cancel request is requested by the user (forced), the pump should always do a real cancel
|
||||
@NotNull
|
||||
PumpEnactResult cancelTempBasal(boolean enforceNew);
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult cancelExtendedBolus();
|
||||
|
||||
// Status to be passed to NS
|
||||
@NotNull
|
||||
JSONObject getJSONStatus(Profile profile, String profileName);
|
||||
|
||||
@NotNull
|
||||
ManufacturerType manufacturer();
|
||||
|
||||
@NotNull
|
||||
PumpType model();
|
||||
|
||||
@NotNull
|
||||
String serialNumber();
|
||||
|
||||
// Pump capabilities
|
||||
@NotNull
|
||||
PumpDescription getPumpDescription();
|
||||
|
||||
// Short info for SMS, Wear etc
|
||||
@NotNull
|
||||
String shortStatus(boolean veryShort);
|
||||
|
||||
boolean isFakingTempsByExtendedBoluses();
|
||||
|
||||
@NotNull
|
||||
PumpEnactResult loadTDDs();
|
||||
|
||||
boolean canHandleDST();
|
||||
|
@ -101,5 +116,4 @@ public interface PumpInterface {
|
|||
* example update clock on pump).
|
||||
*/
|
||||
void timeDateOrTimeZoneChanged();
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package info.nightscout.androidaps.interfaces
|
||||
|
||||
import android.os.SystemClock
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
|
||||
abstract class PumpPluginBase(
|
||||
pluginDescription: PluginDescription,
|
||||
aapsLogger: AAPSLogger,
|
||||
resourceHelper: ResourceHelper,
|
||||
val commandQueue: CommandQueueProvider
|
||||
) : PluginBase(pluginDescription, aapsLogger, resourceHelper) {
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
if (getType() == PluginType.PUMP) {
|
||||
Thread(Runnable {
|
||||
SystemClock.sleep(3000)
|
||||
commandQueue.readStatus("Pump driver changed.", null)
|
||||
}).start()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,13 +29,13 @@ import info.nightscout.androidaps.data.Profile;
|
|||
import info.nightscout.androidaps.data.PumpEnactResult;
|
||||
import info.nightscout.androidaps.db.BgReading;
|
||||
import info.nightscout.androidaps.db.CareportalEvent;
|
||||
import info.nightscout.androidaps.db.DatabaseHelper;
|
||||
import info.nightscout.androidaps.db.Source;
|
||||
import info.nightscout.androidaps.db.TemporaryBasal;
|
||||
import info.nightscout.androidaps.events.EventAcceptOpenLoopChange;
|
||||
import info.nightscout.androidaps.events.EventNewBG;
|
||||
import info.nightscout.androidaps.events.EventTempTargetChange;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
|
||||
import info.nightscout.androidaps.interfaces.Constraint;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription;
|
||||
|
@ -54,6 +54,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
|||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
|
||||
import info.nightscout.androidaps.plugins.general.wear.ActionStringHandler;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventAutosensCalculationFinished;
|
||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin;
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
||||
|
@ -69,14 +70,17 @@ import io.reactivex.schedulers.Schedulers;
|
|||
@Singleton
|
||||
public class LoopPlugin extends PluginBase {
|
||||
private final SP sp;
|
||||
private final RxBusWrapper rxBus;
|
||||
private final ConstraintChecker constraintChecker;
|
||||
private final ResourceHelper resourceHelper;
|
||||
private final ProfileFunction profileFunction;
|
||||
private final MainApp mainApp;
|
||||
private final CommandQueueProvider commandQueue;
|
||||
private final ConfigBuilderPlugin configBuilderPlugin;
|
||||
private final TreatmentsPlugin treatmentsPlugin;
|
||||
private final VirtualPumpPlugin virtualPumpPlugin;
|
||||
private final Lazy<ActionStringHandler> actionStringHandler;
|
||||
private final IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
|
||||
private CompositeDisposable disposable = new CompositeDisposable();
|
||||
|
||||
|
@ -104,35 +108,40 @@ public class LoopPlugin extends PluginBase {
|
|||
@Inject
|
||||
public LoopPlugin(
|
||||
AAPSLogger aapsLogger,
|
||||
RxBusWrapper rxBusWrapper,
|
||||
RxBusWrapper rxBus,
|
||||
SP sp,
|
||||
ConstraintChecker constraintChecker,
|
||||
ResourceHelper resourceHelper,
|
||||
ProfileFunction profileFunction,
|
||||
MainApp mainApp,
|
||||
CommandQueueProvider commandQueue,
|
||||
ConfigBuilderPlugin configBuilderPlugin,
|
||||
TreatmentsPlugin treatmentsPlugin,
|
||||
VirtualPumpPlugin virtualPumpPlugin,
|
||||
Lazy<ActionStringHandler> actionStringHandler // TODO Adrian use RxBus instead of Lazy
|
||||
Lazy<ActionStringHandler> actionStringHandler, // TODO Adrian use RxBus instead of Lazy
|
||||
IobCobCalculatorPlugin iobCobCalculatorPlugin
|
||||
) {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.LOOP)
|
||||
.fragmentClass(LoopFragment.class.getName())
|
||||
.pluginName(R.string.loop)
|
||||
.shortName(R.string.loop_shortname)
|
||||
.preferencesId(R.xml.pref_loop)
|
||||
.description(R.string.description_loop),
|
||||
rxBusWrapper, aapsLogger
|
||||
.mainType(PluginType.LOOP)
|
||||
.fragmentClass(LoopFragment.class.getName())
|
||||
.pluginName(R.string.loop)
|
||||
.shortName(R.string.loop_shortname)
|
||||
.preferencesId(R.xml.pref_loop)
|
||||
.description(R.string.description_loop),
|
||||
aapsLogger, resourceHelper
|
||||
);
|
||||
this.sp = sp;
|
||||
this.rxBus = rxBus;
|
||||
this.constraintChecker = constraintChecker;
|
||||
this.resourceHelper = resourceHelper;
|
||||
this.profileFunction = profileFunction;
|
||||
this.mainApp = mainApp;
|
||||
this.configBuilderPlugin = configBuilderPlugin;
|
||||
this.commandQueue = commandQueue;
|
||||
this.treatmentsPlugin = treatmentsPlugin;
|
||||
this.virtualPumpPlugin = virtualPumpPlugin;
|
||||
this.actionStringHandler = actionStringHandler;
|
||||
this.iobCobCalculatorPlugin = iobCobCalculatorPlugin;
|
||||
|
||||
loopSuspendedTill = sp.getLong("loopSuspendedTill", 0L);
|
||||
isSuperBolus = sp.getBoolean("isSuperBolus", false);
|
||||
|
@ -143,7 +152,7 @@ public class LoopPlugin extends PluginBase {
|
|||
protected void onStart() {
|
||||
createNotificationChannel();
|
||||
super.onStart();
|
||||
disposable.add(getRxBus()
|
||||
disposable.add(rxBus
|
||||
.toObservable(EventTempTargetChange.class)
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(event -> invoke("EventTempTargetChange", true), exception -> FabricPrivacy.getInstance().logException(exception))
|
||||
|
@ -155,14 +164,14 @@ public class LoopPlugin extends PluginBase {
|
|||
* the event causing the calculation is not EventNewBg.
|
||||
* <p>
|
||||
*/
|
||||
disposable.add(getRxBus()
|
||||
disposable.add(rxBus
|
||||
.toObservable(EventAutosensCalculationFinished.class)
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(event -> {
|
||||
// Autosens calculation not triggered by a new BG
|
||||
if (!(event.getCause() instanceof EventNewBG)) return;
|
||||
|
||||
BgReading bgReading = DatabaseHelper.actualBg();
|
||||
BgReading bgReading = iobCobCalculatorPlugin.actualBg();
|
||||
// BG outdated
|
||||
if (bgReading == null) return;
|
||||
// already looped with that value
|
||||
|
@ -194,7 +203,7 @@ public class LoopPlugin extends PluginBase {
|
|||
|
||||
@Override
|
||||
public boolean specialEnableCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
|
||||
|
@ -297,10 +306,10 @@ public class LoopPlugin extends PluginBase {
|
|||
if (!loopEnabled.value()) {
|
||||
String message = resourceHelper.gs(R.string.loopdisabled) + "\n" + loopEnabled.getReasons();
|
||||
getAapsLogger().debug(LTag.APS, message);
|
||||
getRxBus().send(new EventLoopSetLastRunGui(message));
|
||||
rxBus.send(new EventLoopSetLastRunGui(message));
|
||||
return;
|
||||
}
|
||||
final PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
final PumpInterface pump = configBuilderPlugin.getActivePumpPlugin();
|
||||
if (pump == null)
|
||||
return;
|
||||
APSResult result = null;
|
||||
|
@ -313,7 +322,7 @@ public class LoopPlugin extends PluginBase {
|
|||
if (profile == null || !profileFunction.isProfileValid("Loop")) {
|
||||
if (L.isEnabled(L.APS))
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.noprofileselected));
|
||||
getRxBus().send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
rxBus.send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -328,7 +337,7 @@ public class LoopPlugin extends PluginBase {
|
|||
|
||||
// Check if we have any result
|
||||
if (result == null) {
|
||||
getRxBus().send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.noapsselected)));
|
||||
rxBus.send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.noapsselected)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -368,13 +377,13 @@ public class LoopPlugin extends PluginBase {
|
|||
|
||||
if (isSuspended()) {
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.loopsuspended));
|
||||
getRxBus().send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.loopsuspended)));
|
||||
rxBus.send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.loopsuspended)));
|
||||
return;
|
||||
}
|
||||
|
||||
if (pump.isSuspended()) {
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.pumpsuspended));
|
||||
getRxBus().send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.pumpsuspended)));
|
||||
rxBus.send(new EventLoopSetLastRunGui(resourceHelper.gs(R.string.pumpsuspended)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -382,15 +391,15 @@ public class LoopPlugin extends PluginBase {
|
|||
|
||||
if (closedLoopEnabled.value()) {
|
||||
if (resultAfterConstraints.isChangeRequested()
|
||||
&& !configBuilderPlugin.getCommandQueue().bolusInQueue()
|
||||
&& !configBuilderPlugin.getCommandQueue().isRunning(Command.CommandType.BOLUS)) {
|
||||
&& !commandQueue.bolusInQueue()
|
||||
&& !commandQueue.isRunning(Command.CommandType.BOLUS)) {
|
||||
final PumpEnactResult waiting = new PumpEnactResult();
|
||||
waiting.queued = true;
|
||||
if (resultAfterConstraints.tempBasalRequested)
|
||||
lastRun.tbrSetByPump = waiting;
|
||||
if (resultAfterConstraints.bolusRequested)
|
||||
lastRun.smbSetByPump = waiting;
|
||||
getRxBus().send(new EventLoopUpdateGui());
|
||||
rxBus.send(new EventLoopUpdateGui());
|
||||
FabricPrivacy.getInstance().logCustom("APSRequest");
|
||||
applyTBRRequest(resultAfterConstraints, profile, new Callback() {
|
||||
@Override
|
||||
|
@ -411,11 +420,11 @@ public class LoopPlugin extends PluginBase {
|
|||
invoke("tempBasalFallback", allowNotification, true);
|
||||
}).start();
|
||||
}
|
||||
getRxBus().send(new EventLoopUpdateGui());
|
||||
rxBus.send(new EventLoopUpdateGui());
|
||||
}
|
||||
});
|
||||
}
|
||||
getRxBus().send(new EventLoopUpdateGui());
|
||||
rxBus.send(new EventLoopUpdateGui());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
@ -456,7 +465,7 @@ public class LoopPlugin extends PluginBase {
|
|||
(NotificationManager) mainApp.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
// mId allows you to update the notification later on.
|
||||
mNotificationManager.notify(Constants.notificationID, builder.build());
|
||||
getRxBus().send(new EventNewOpenLoopNotification());
|
||||
rxBus.send(new EventNewOpenLoopNotification());
|
||||
|
||||
// Send to Wear
|
||||
actionStringHandler.get().handleInitiate("changeRequest");
|
||||
|
@ -469,7 +478,7 @@ public class LoopPlugin extends PluginBase {
|
|||
}
|
||||
}
|
||||
|
||||
getRxBus().send(new EventLoopUpdateGui());
|
||||
rxBus.send(new EventLoopUpdateGui());
|
||||
} finally {
|
||||
getAapsLogger().debug(LTag.APS, "invoke end");
|
||||
}
|
||||
|
@ -488,7 +497,7 @@ public class LoopPlugin extends PluginBase {
|
|||
NSUpload.uploadDeviceStatus(lp);
|
||||
sp.incInt(R.string.key_ObjectivesmanualEnacts);
|
||||
}
|
||||
getRxBus().send(new EventAcceptOpenLoopChange());
|
||||
rxBus.send(new EventAcceptOpenLoopChange());
|
||||
}
|
||||
});
|
||||
FabricPrivacy.getInstance().logCustom("AcceptTemp");
|
||||
|
@ -509,7 +518,7 @@ public class LoopPlugin extends PluginBase {
|
|||
return;
|
||||
}
|
||||
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePumpPlugin();
|
||||
if (pump == null) {
|
||||
if (callback != null)
|
||||
callback.result(new PumpEnactResult().enacted(false).success(false).comment(resourceHelper.gs(R.string.nopumpselected))).run();
|
||||
|
@ -540,7 +549,7 @@ public class LoopPlugin extends PluginBase {
|
|||
if (request.percent == 100 && request.duration == 0) {
|
||||
if (activeTemp != null) {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: cancelTempBasal()");
|
||||
configBuilderPlugin.getCommandQueue().cancelTempBasal(false, callback);
|
||||
commandQueue.cancelTempBasal(false, callback);
|
||||
} else {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: Basal set correctly");
|
||||
if (callback != null) {
|
||||
|
@ -560,13 +569,13 @@ public class LoopPlugin extends PluginBase {
|
|||
}
|
||||
} else {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: tempBasalPercent()");
|
||||
configBuilderPlugin.getCommandQueue().tempBasalPercent(request.percent, request.duration, false, profile, callback);
|
||||
commandQueue.tempBasalPercent(request.percent, request.duration, false, profile, callback);
|
||||
}
|
||||
} else {
|
||||
if ((request.rate == 0 && request.duration == 0) || Math.abs(request.rate - pump.getBaseBasalRate()) < pump.getPumpDescription().basalStep) {
|
||||
if (activeTemp != null) {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: cancelTempBasal()");
|
||||
configBuilderPlugin.getCommandQueue().cancelTempBasal(false, callback);
|
||||
commandQueue.cancelTempBasal(false, callback);
|
||||
} else {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: Basal set correctly");
|
||||
if (callback != null) {
|
||||
|
@ -586,7 +595,7 @@ public class LoopPlugin extends PluginBase {
|
|||
}
|
||||
} else {
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: setTempBasalAbsolute()");
|
||||
configBuilderPlugin.getCommandQueue().tempBasalAbsolute(request.rate, request.duration, false, profile, callback);
|
||||
commandQueue.tempBasalAbsolute(request.rate, request.duration, false, profile, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -596,7 +605,7 @@ public class LoopPlugin extends PluginBase {
|
|||
return;
|
||||
}
|
||||
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePumpPlugin();
|
||||
if (pump == null) {
|
||||
if (callback != null)
|
||||
callback.result(new PumpEnactResult().enacted(false).success(false).comment(resourceHelper.gs(R.string.nopumpselected))).run();
|
||||
|
@ -641,18 +650,18 @@ public class LoopPlugin extends PluginBase {
|
|||
detailedBolusInfo.source = Source.USER;
|
||||
detailedBolusInfo.deliverAt = request.deliverAt;
|
||||
getAapsLogger().debug(LTag.APS, "applyAPSRequest: bolus()");
|
||||
configBuilderPlugin.getCommandQueue().bolus(detailedBolusInfo, callback);
|
||||
commandQueue.bolus(detailedBolusInfo, callback);
|
||||
}
|
||||
|
||||
public void disconnectPump(int durationInMinutes, Profile profile) {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePumpPlugin();
|
||||
if (pump == null)
|
||||
return;
|
||||
|
||||
disconnectTo(System.currentTimeMillis() + durationInMinutes * 60 * 1000L);
|
||||
|
||||
if (pump.getPumpDescription().tempBasalStyle == PumpDescription.ABSOLUTE) {
|
||||
configBuilderPlugin.getCommandQueue().tempBasalAbsolute(0, durationInMinutes, true, profile, new Callback() {
|
||||
commandQueue.tempBasalAbsolute(0, durationInMinutes, true, profile, new Callback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!result.success) {
|
||||
|
@ -666,7 +675,7 @@ public class LoopPlugin extends PluginBase {
|
|||
}
|
||||
});
|
||||
} else {
|
||||
configBuilderPlugin.getCommandQueue().tempBasalPercent(0, durationInMinutes, true, profile, new Callback() {
|
||||
commandQueue.tempBasalPercent(0, durationInMinutes, true, profile, new Callback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!result.success) {
|
||||
|
@ -682,7 +691,7 @@ public class LoopPlugin extends PluginBase {
|
|||
}
|
||||
|
||||
if (pump.getPumpDescription().isExtendedBolusCapable && treatmentsPlugin.isInHistoryExtendedBoluslInProgress()) {
|
||||
configBuilderPlugin.getCommandQueue().cancelExtended(new Callback() {
|
||||
commandQueue.cancelExtended(new Callback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!result.success) {
|
||||
|
@ -701,7 +710,7 @@ public class LoopPlugin extends PluginBase {
|
|||
|
||||
public void suspendLoop(int durationInMinutes) {
|
||||
suspendTo(System.currentTimeMillis() + durationInMinutes * 60 * 1000);
|
||||
configBuilderPlugin.getCommandQueue().cancelTempBasal(true, new Callback() {
|
||||
commandQueue.cancelTempBasal(true, new Callback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!result.success) {
|
||||
|
|
|
@ -12,6 +12,7 @@ import info.nightscout.androidaps.data.MealData;
|
|||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.db.TempTarget;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription;
|
||||
import info.nightscout.androidaps.interfaces.PluginType;
|
||||
|
@ -23,7 +24,6 @@ import info.nightscout.androidaps.plugins.aps.loop.ScriptReader;
|
|||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateGui;
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateResultGui;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData;
|
||||
|
@ -46,7 +46,7 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
|
|||
private final ResourceHelper resourceHelper;
|
||||
private final ProfileFunction profileFunction;
|
||||
private final MainApp mainApp;
|
||||
private final ConfigBuilderPlugin configBuilderPlugin;
|
||||
private final ActivePluginProvider activePlugin;
|
||||
private final TreatmentsPlugin treatmentsPlugin;
|
||||
private final IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
|
||||
|
@ -64,18 +64,18 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
|
|||
ResourceHelper resourceHelper,
|
||||
ProfileFunction profileFunction,
|
||||
MainApp mainApp,
|
||||
ConfigBuilderPlugin configBuilderPlugin,
|
||||
ActivePluginProvider activePlugin,
|
||||
TreatmentsPlugin treatmentsPlugin,
|
||||
IobCobCalculatorPlugin iobCobCalculatorPlugin
|
||||
) {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.APS)
|
||||
.fragmentClass(OpenAPSAMAFragment.class.getName())
|
||||
.pluginName(R.string.openapsama)
|
||||
.shortName(R.string.oaps_shortname)
|
||||
.preferencesId(R.xml.pref_openapsama)
|
||||
.description(R.string.description_ama),
|
||||
rxBus, aapsLogger
|
||||
.mainType(PluginType.APS)
|
||||
.fragmentClass(OpenAPSAMAFragment.class.getName())
|
||||
.pluginName(R.string.openapsama)
|
||||
.shortName(R.string.oaps_shortname)
|
||||
.preferencesId(R.xml.pref_openapsama)
|
||||
.description(R.string.description_ama),
|
||||
aapsLogger, resourceHelper
|
||||
);
|
||||
this.aapsLogger = aapsLogger;
|
||||
this.rxBus = rxBus;
|
||||
|
@ -83,20 +83,24 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
|
|||
this.resourceHelper = resourceHelper;
|
||||
this.profileFunction = profileFunction;
|
||||
this.mainApp = mainApp;
|
||||
this.configBuilderPlugin = configBuilderPlugin;
|
||||
this.activePlugin = activePlugin;
|
||||
this.treatmentsPlugin = treatmentsPlugin;
|
||||
this.iobCobCalculatorPlugin = iobCobCalculatorPlugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialEnableCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
// main fail during init
|
||||
if (activePlugin != null) {
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialShowInListCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
|
||||
|
@ -119,7 +123,7 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
|
|||
|
||||
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
|
||||
Profile profile = profileFunction.getProfile();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePump();
|
||||
|
||||
if (profile == null) {
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
|
@ -207,7 +211,7 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
|
|||
start = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
determineBasalAdapterAMAJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, configBuilderPlugin.getActivePump().getBaseBasalRate(), iobArray, glucoseStatus, mealData,
|
||||
determineBasalAdapterAMAJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, activePlugin.getActivePump().getBaseBasalRate(), iobArray, glucoseStatus, mealData,
|
||||
lastAutosensResult.ratio, //autosensDataRatio
|
||||
isTempTarget
|
||||
);
|
||||
|
|
|
@ -12,6 +12,7 @@ import info.nightscout.androidaps.data.MealData;
|
|||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.db.TempTarget;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription;
|
||||
import info.nightscout.androidaps.interfaces.PluginType;
|
||||
|
@ -23,7 +24,6 @@ import info.nightscout.androidaps.plugins.aps.loop.ScriptReader;
|
|||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateGui;
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateResultGui;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus;
|
||||
|
@ -41,11 +41,12 @@ import static info.nightscout.androidaps.utils.HardLimits.verifyHardLimits;
|
|||
|
||||
@Singleton
|
||||
public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
||||
private final RxBusWrapper rxBus;
|
||||
private final ConstraintChecker constraintChecker;
|
||||
private final ResourceHelper resourceHelper;
|
||||
private final ProfileFunction profileFunction;
|
||||
private final MainApp mainApp;
|
||||
private final ConfigBuilderPlugin configBuilderPlugin;
|
||||
private final ActivePluginProvider activePlugin;
|
||||
private final TreatmentsPlugin treatmentsPlugin;
|
||||
private final IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
|
||||
|
@ -57,12 +58,12 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
|||
@Inject
|
||||
public OpenAPSMAPlugin(
|
||||
AAPSLogger aapsLogger,
|
||||
RxBusWrapper rxBusWrapper,
|
||||
RxBusWrapper rxBus,
|
||||
ConstraintChecker constraintChecker,
|
||||
ResourceHelper resourceHelper,
|
||||
ProfileFunction profileFunction,
|
||||
MainApp mainApp,
|
||||
ConfigBuilderPlugin configBuilderPlugin,
|
||||
ActivePluginProvider activePlugin,
|
||||
TreatmentsPlugin treatmentsPlugin,
|
||||
IobCobCalculatorPlugin iobCobCalculatorPlugin
|
||||
) {
|
||||
|
@ -73,27 +74,32 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
|||
.shortName(R.string.oaps_shortname)
|
||||
.preferencesId(R.xml.pref_openapsma)
|
||||
.description(R.string.description_ma),
|
||||
rxBusWrapper, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
);
|
||||
|
||||
this.constraintChecker = constraintChecker;
|
||||
this.resourceHelper = resourceHelper;
|
||||
this.profileFunction = profileFunction;
|
||||
this.mainApp = mainApp;
|
||||
this.configBuilderPlugin = configBuilderPlugin;
|
||||
this.rxBus = rxBus;
|
||||
this.activePlugin = activePlugin;
|
||||
this.treatmentsPlugin = treatmentsPlugin;
|
||||
this.iobCobCalculatorPlugin = iobCobCalculatorPlugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialEnableCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
// main fail during init
|
||||
if (activePlugin != null) {
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialShowInListCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
|
||||
|
@ -116,28 +122,28 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
|||
|
||||
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
|
||||
Profile profile = profileFunction.getProfile();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
|
||||
if (profile == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.noprofileselected));
|
||||
return;
|
||||
}
|
||||
|
||||
if (pump == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.nopumpselected)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.nopumpselected)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.nopumpselected));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isEnabled(PluginType.APS)) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_disabled)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_disabled)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.openapsma_disabled));
|
||||
return;
|
||||
}
|
||||
|
||||
if (glucoseStatus == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_noglucosedata)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_noglucosedata)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.openapsma_noglucosedata));
|
||||
return;
|
||||
}
|
||||
|
@ -188,7 +194,7 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
|||
|
||||
start = System.currentTimeMillis();
|
||||
try {
|
||||
determineBasalAdapterMAJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, configBuilderPlugin.getActivePump().getBaseBasalRate(), iobTotal, glucoseStatus, mealData);
|
||||
determineBasalAdapterMAJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, activePlugin.getActivePump().getBaseBasalRate(), iobTotal, glucoseStatus, mealData);
|
||||
} catch (JSONException e) {
|
||||
FabricPrivacy.getInstance().logException(e);
|
||||
return;
|
||||
|
@ -221,7 +227,7 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
|
|||
lastAPSResult = determineBasalResultMA;
|
||||
lastAPSRun = now;
|
||||
}
|
||||
getRxBus().send(new EventOpenAPSUpdateGui());
|
||||
rxBus.send(new EventOpenAPSUpdateGui());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import info.nightscout.androidaps.data.MealData;
|
|||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.db.TempTarget;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.Constraint;
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
|
@ -26,7 +27,6 @@ import info.nightscout.androidaps.plugins.aps.loop.ScriptReader;
|
|||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateGui;
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSMA.events.EventOpenAPSUpdateResultGui;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction;
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
|
||||
|
@ -49,7 +49,8 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
private final ResourceHelper resourceHelper;
|
||||
private final ProfileFunction profileFunction;
|
||||
private final MainApp mainApp;
|
||||
private final ConfigBuilderPlugin configBuilderPlugin;
|
||||
private final RxBusWrapper rxBus;
|
||||
private final ActivePluginProvider activePlugin;
|
||||
private final TreatmentsPlugin treatmentsPlugin;
|
||||
private final IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
|
||||
|
@ -62,15 +63,15 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
@Inject
|
||||
public OpenAPSSMBPlugin(
|
||||
AAPSLogger aapsLogger,
|
||||
RxBusWrapper rxBusWrapper,
|
||||
RxBusWrapper rxBus,
|
||||
ConstraintChecker constraintChecker,
|
||||
ResourceHelper resourceHelper,
|
||||
ProfileFunction profileFunction,
|
||||
MainApp mainApp,
|
||||
ConfigBuilderPlugin configBuilderPlugin,
|
||||
ActivePluginProvider activePlugin,
|
||||
TreatmentsPlugin treatmentsPlugin,
|
||||
IobCobCalculatorPlugin iobCobCalculatorPlugin
|
||||
) {
|
||||
) {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.APS)
|
||||
.fragmentClass(OpenAPSSMBFragment.class.getName())
|
||||
|
@ -78,27 +79,32 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
.shortName(R.string.smb_shortname)
|
||||
.preferencesId(R.xml.pref_openapssmb)
|
||||
.description(R.string.description_smb),
|
||||
rxBusWrapper, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
);
|
||||
|
||||
this.constraintChecker = constraintChecker;
|
||||
this.resourceHelper = resourceHelper;
|
||||
this.profileFunction = profileFunction;
|
||||
this.rxBus = rxBus;
|
||||
this.mainApp = mainApp;
|
||||
this.configBuilderPlugin = configBuilderPlugin;
|
||||
this.activePlugin = activePlugin;
|
||||
this.treatmentsPlugin = treatmentsPlugin;
|
||||
this.iobCobCalculatorPlugin = iobCobCalculatorPlugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialEnableCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
// main fail during init
|
||||
if (activePlugin != null) {
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean specialShowInListCondition() {
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
return pump == null || pump.getPumpDescription().isTempBasalCapable;
|
||||
}
|
||||
|
||||
|
@ -121,28 +127,28 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
|
||||
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
|
||||
Profile profile = profileFunction.getProfile();
|
||||
PumpInterface pump = configBuilderPlugin.getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePump();
|
||||
|
||||
if (profile == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.noprofileselected)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.noprofileselected));
|
||||
return;
|
||||
}
|
||||
|
||||
if (pump == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.nopumpselected)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.nopumpselected)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.nopumpselected));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isEnabled(PluginType.APS)) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_disabled)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_disabled)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.openapsma_disabled));
|
||||
return;
|
||||
}
|
||||
|
||||
if (glucoseStatus == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_noglucosedata)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openapsma_noglucosedata)));
|
||||
getAapsLogger().debug(LTag.APS, resourceHelper.gs(R.string.openapsma_noglucosedata));
|
||||
return;
|
||||
}
|
||||
|
@ -198,7 +204,7 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
if (constraintChecker.isAutosensModeEnabled().value()) {
|
||||
AutosensData autosensData = iobCobCalculatorPlugin.getLastAutosensDataSynchronized("OpenAPSPlugin");
|
||||
if (autosensData == null) {
|
||||
getRxBus().send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openaps_noasdata)));
|
||||
rxBus.send(new EventOpenAPSUpdateResultGui(resourceHelper.gs(R.string.openaps_noasdata)));
|
||||
return;
|
||||
}
|
||||
lastAutosensResult = autosensData.autosensResult;
|
||||
|
@ -228,7 +234,7 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
|
||||
start = System.currentTimeMillis();
|
||||
try {
|
||||
determineBasalAdapterSMBJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, configBuilderPlugin.getActivePump().getBaseBasalRate(), iobArray, glucoseStatus, mealData,
|
||||
determineBasalAdapterSMBJS.setData(profile, maxIob, maxBasal, minBg, maxBg, targetBg, activePlugin.getActivePump().getBaseBasalRate(), iobArray, glucoseStatus, mealData,
|
||||
lastAutosensResult.ratio, //autosensDataRatio
|
||||
isTempTarget,
|
||||
smbAllowed.value(),
|
||||
|
@ -269,7 +275,7 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface, Constr
|
|||
lastAPSResult = determineBasalResultSMB;
|
||||
lastAPSRun = now;
|
||||
}
|
||||
getRxBus().send(new EventOpenAPSUpdateGui());
|
||||
rxBus.send(new EventOpenAPSUpdateGui());
|
||||
|
||||
//deviceStatus.suggested = determineBasalResultAMA.json;
|
||||
}
|
||||
|
|
|
@ -136,10 +136,10 @@ class ConfigBuilderFragment : DaggerFragment() {
|
|||
}
|
||||
|
||||
enabledExclusive.setOnClickListener {
|
||||
plugin.switchAllowed(if (enabledExclusive.visibility == View.VISIBLE) enabledExclusive.isChecked else enabledInclusive.isChecked, fragment.activity, pluginType)
|
||||
configBuilderPlugin.switchAllowed(plugin, if (enabledExclusive.visibility == View.VISIBLE) enabledExclusive.isChecked else enabledInclusive.isChecked, fragment.activity, pluginType)
|
||||
}
|
||||
enabledInclusive.setOnClickListener {
|
||||
plugin.switchAllowed(if (enabledExclusive.visibility == View.VISIBLE) enabledExclusive.isChecked else enabledInclusive.isChecked, fragment.activity, pluginType)
|
||||
configBuilderPlugin.switchAllowed(plugin, if (enabledExclusive.visibility == View.VISIBLE) enabledExclusive.isChecked else enabledInclusive.isChecked, fragment.activity, pluginType)
|
||||
}
|
||||
|
||||
pluginPreferences.setOnClickListener {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package info.nightscout.androidaps.plugins.configBuilder;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -13,6 +15,8 @@ import dagger.Lazy;
|
|||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.events.EventAppInitialized;
|
||||
import info.nightscout.androidaps.events.EventConfigBuilderChange;
|
||||
import info.nightscout.androidaps.events.EventRebuildTabs;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.BgSourceInterface;
|
||||
|
@ -24,30 +28,45 @@ import info.nightscout.androidaps.interfaces.PluginType;
|
|||
import info.nightscout.androidaps.interfaces.ProfileInterface;
|
||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||
import info.nightscout.androidaps.interfaces.SensitivityInterface;
|
||||
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
|
||||
import info.nightscout.androidaps.logging.AAPSLogger;
|
||||
import info.nightscout.androidaps.logging.LTag;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.insulin.InsulinOrefRapidActingPlugin;
|
||||
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin;
|
||||
import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin;
|
||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin;
|
||||
import info.nightscout.androidaps.queue.CommandQueue;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin;
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
||||
import info.nightscout.androidaps.utils.OKDialog;
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper;
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP;
|
||||
|
||||
/**
|
||||
* Created by mike on 05.08.2016.
|
||||
*/
|
||||
@Singleton
|
||||
public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvider, CommandQueueProvider {
|
||||
public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvider {
|
||||
private static ConfigBuilderPlugin configBuilderPlugin;
|
||||
private final SP sp;
|
||||
|
||||
private final AAPSLogger aapsLogger;
|
||||
private final RxBusWrapper rxBus;
|
||||
private final ResourceHelper resourceHelper;
|
||||
private final CommandQueueProvider commandQueue;
|
||||
private final NSProfilePlugin nsProfilePlugin;
|
||||
|
||||
/**
|
||||
* @deprecated Use dagger to get an instance
|
||||
*/
|
||||
|
||||
@Deprecated
|
||||
public CommandQueueProvider getCommandQueue() {
|
||||
if (commandQueue == null)
|
||||
throw new IllegalStateException("Accessing commandQueue before first instantiation");
|
||||
return commandQueue;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
static public ConfigBuilderPlugin getPlugin() {
|
||||
if (configBuilderPlugin == null)
|
||||
|
@ -61,11 +80,12 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
private APSInterface activeAPS;
|
||||
private InsulinInterface activeInsulin;
|
||||
private SensitivityInterface activeSensitivity;
|
||||
private Lazy<TreatmentsPlugin> treatmentsPlugin;
|
||||
private Lazy<SensitivityOref0Plugin> sensitivityOref0Plugin;
|
||||
private Lazy<SensitivityOref1Plugin> sensitivityOref1Plugin;
|
||||
|
||||
private ArrayList<PluginBase> pluginList;
|
||||
|
||||
private CommandQueue commandQueue = new CommandQueue();
|
||||
|
||||
private final Lazy<InsulinOrefRapidActingPlugin> insulinOrefRapidActingPlugin;
|
||||
private final Lazy<LocalProfilePlugin> localProfilePlugin;
|
||||
private final Lazy<VirtualPumpPlugin> virtualPumpPlugin;
|
||||
|
@ -82,9 +102,16 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
Lazy<InsulinOrefRapidActingPlugin> insulinOrefRapidActingPlugin,
|
||||
Lazy<LocalProfilePlugin> localProfilePlugin,
|
||||
Lazy<VirtualPumpPlugin> virtualPumpPlugin,
|
||||
Lazy<TreatmentsPlugin> treatmentsPlugin,
|
||||
Lazy<SensitivityOref0Plugin> sensitivityOref0Plugin,
|
||||
Lazy<SensitivityOref1Plugin> sensitivityOref1Plugin,
|
||||
SP sp,
|
||||
RxBusWrapper rxBus,
|
||||
AAPSLogger aapsLogger) {
|
||||
AAPSLogger aapsLogger,
|
||||
ResourceHelper resourceHelper,
|
||||
CommandQueueProvider commandQueue,
|
||||
NSProfilePlugin nsProfilePlugin
|
||||
) {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(ConfigBuilderFragment.class.getName())
|
||||
|
@ -94,12 +121,20 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
.pluginName(R.string.configbuilder)
|
||||
.shortName(R.string.configbuilder_shortname)
|
||||
.description(R.string.description_config_builder),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
);
|
||||
this.insulinOrefRapidActingPlugin = insulinOrefRapidActingPlugin;
|
||||
this.localProfilePlugin = localProfilePlugin;
|
||||
this.virtualPumpPlugin = virtualPumpPlugin;
|
||||
this.treatmentsPlugin = treatmentsPlugin;
|
||||
this.sensitivityOref0Plugin = sensitivityOref0Plugin;
|
||||
this.sensitivityOref1Plugin = sensitivityOref1Plugin;
|
||||
this.sp = sp;
|
||||
this.rxBus = rxBus;
|
||||
this.aapsLogger = aapsLogger;
|
||||
this.resourceHelper = resourceHelper;
|
||||
this.commandQueue = commandQueue;
|
||||
this.nsProfilePlugin = nsProfilePlugin;
|
||||
configBuilderPlugin = this; // TODO: only while transitioning to Dagger
|
||||
}
|
||||
|
||||
|
@ -108,7 +143,7 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
upgradeSettings();
|
||||
loadSettings();
|
||||
setAlwaysEnabledPluginsEnabled();
|
||||
RxBus.Companion.getINSTANCE().send(new EventAppInitialized());
|
||||
rxBus.send(new EventAppInitialized());
|
||||
}
|
||||
|
||||
private void setAlwaysEnabledPluginsEnabled() {
|
||||
|
@ -246,39 +281,58 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
}
|
||||
}
|
||||
|
||||
@Override public CommandQueue getCommandQueue() {
|
||||
return commandQueue;
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
@Override
|
||||
@Nullable
|
||||
public BgSourceInterface getActiveBgSource() {
|
||||
return activeBgSource;
|
||||
}
|
||||
|
||||
@Override @NotNull
|
||||
@Override
|
||||
@NotNull
|
||||
public ProfileInterface getActiveProfileInterface() {
|
||||
if (activeProfile != null) return activeProfile;
|
||||
else return localProfilePlugin.get();
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
@Override
|
||||
@NotNull
|
||||
public InsulinInterface getActiveInsulin() {
|
||||
if (activeInsulin == null)
|
||||
return insulinOrefRapidActingPlugin.get();
|
||||
return activeInsulin;
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
@Override
|
||||
@Nullable
|
||||
public APSInterface getActiveAPS() {
|
||||
return activeAPS;
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
@Override
|
||||
@NotNull
|
||||
public PumpInterface getActivePump() {
|
||||
if (activePump == null)
|
||||
throw new IllegalStateException("No pump selected");
|
||||
return activePump;
|
||||
}
|
||||
|
||||
@Override @Nullable
|
||||
@Override
|
||||
@Nullable
|
||||
public PumpInterface getActivePumpPlugin() {
|
||||
return activePump;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public SensitivityInterface getActiveSensitivity() {
|
||||
return activeSensitivity;
|
||||
if (activeSensitivity == null)
|
||||
return sensitivityOref1Plugin.get();
|
||||
else
|
||||
return activeSensitivity;
|
||||
}
|
||||
|
||||
@NonNull @Override public TreatmentsInterface getActiveTreatments() {
|
||||
return treatmentsPlugin.get();
|
||||
}
|
||||
|
||||
public void logPluginStatus() {
|
||||
|
@ -318,8 +372,8 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
pluginsInCategory = MainApp.getSpecificPluginsList(PluginType.SENSITIVITY);
|
||||
activeSensitivity = (SensitivityInterface) getTheOneEnabledInArray(pluginsInCategory, PluginType.SENSITIVITY);
|
||||
if (activeSensitivity == null) {
|
||||
activeSensitivity = SensitivityOref0Plugin.getPlugin();
|
||||
SensitivityOref0Plugin.getPlugin().setPluginEnabled(PluginType.SENSITIVITY, true);
|
||||
activeSensitivity = sensitivityOref0Plugin.get();
|
||||
sensitivityOref0Plugin.get().setPluginEnabled(PluginType.SENSITIVITY, true);
|
||||
getAapsLogger().debug(LTag.CONFIGBUILDER, "Defaulting SensitivityOref0Plugin");
|
||||
}
|
||||
this.setFragmentVisiblities(((PluginBase) activeSensitivity).getName(), pluginsInCategory, PluginType.SENSITIVITY);
|
||||
|
@ -359,13 +413,6 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
return this.determineActivePlugin(pluginsInCategory, pluginType);
|
||||
}
|
||||
|
||||
private <T> T determineActivePlugin(PluginType pluginType) {
|
||||
ArrayList<PluginBase> pluginsInCategory;
|
||||
pluginsInCategory = MainApp.getSpecificPluginsList(pluginType);
|
||||
|
||||
return this.determineActivePlugin(pluginsInCategory, pluginType);
|
||||
}
|
||||
|
||||
/**
|
||||
* disables the visibility for all fragments of Plugins in the given pluginsInCategory
|
||||
* with the given PluginType which are not equally named to the Plugin implementing the
|
||||
|
@ -419,6 +466,45 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
return found;
|
||||
}
|
||||
|
||||
// Ask when switching to physical pump plugin
|
||||
public void switchAllowed(@NonNull PluginBase changedPlugin, boolean newState, @Nullable FragmentActivity activity, @NonNull PluginType type) {
|
||||
if (changedPlugin.getType() == PluginType.PUMP && !changedPlugin.getName().equals(resourceHelper.gs(R.string.virtualpump)))
|
||||
confirmPumpPluginActivation(changedPlugin, newState, activity, type);
|
||||
else
|
||||
performPluginSwitch(changedPlugin, newState, type);
|
||||
}
|
||||
|
||||
private void confirmPumpPluginActivation(@NonNull PluginBase changedPlugin, boolean newState, @Nullable FragmentActivity activity, @NonNull PluginType type) {
|
||||
if (type == PluginType.PUMP) {
|
||||
boolean allowHardwarePump = sp.getBoolean("allow_hardware_pump", false);
|
||||
if (allowHardwarePump || activity == null) {
|
||||
performPluginSwitch(changedPlugin, newState, type);
|
||||
} else {
|
||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.allow_hardware_pump_text), () -> {
|
||||
performPluginSwitch(changedPlugin, newState, type);
|
||||
sp.putBoolean("allow_hardware_pump", true);
|
||||
aapsLogger.debug(LTag.PUMP, "First time HW pump allowed!");
|
||||
}, () -> {
|
||||
rxBus.send(new EventConfigBuilderUpdateGui());
|
||||
aapsLogger.debug(LTag.PUMP, "User does not allow switching to HW pump!");
|
||||
});
|
||||
}
|
||||
} else {
|
||||
performPluginSwitch(changedPlugin, newState, type);
|
||||
}
|
||||
}
|
||||
|
||||
private void performPluginSwitch(PluginBase changedPlugin, boolean enabled, @NonNull PluginType type) {
|
||||
setPluginEnabled(type, enabled);
|
||||
setFragmentVisible(type, enabled);
|
||||
processOnEnabledCategoryChanged(changedPlugin, type);
|
||||
storeSettings("CheckedCheckboxEnabled");
|
||||
rxBus.send(new EventRebuildTabs());
|
||||
rxBus.send(new EventConfigBuilderChange());
|
||||
rxBus.send(new EventConfigBuilderUpdateGui());
|
||||
logPluginStatus();
|
||||
}
|
||||
|
||||
public void processOnEnabledCategoryChanged(PluginBase changedPlugin, PluginType type) {
|
||||
ArrayList<PluginBase> pluginsInCategory = null;
|
||||
switch (type) {
|
||||
|
@ -461,13 +547,13 @@ public class ConfigBuilderPlugin extends PluginBase implements ActivePluginProvi
|
|||
}
|
||||
} else { // enable first plugin in list
|
||||
if (type == PluginType.PUMP)
|
||||
VirtualPumpPlugin.Companion.getPlugin().setPluginEnabled(type, true);
|
||||
virtualPumpPlugin.get().setPluginEnabled(type, true);
|
||||
else if (type == PluginType.INSULIN)
|
||||
insulinOrefRapidActingPlugin.get().setPluginEnabled(type, true);
|
||||
else if (type == PluginType.SENSITIVITY)
|
||||
SensitivityOref0Plugin.getPlugin().setPluginEnabled(type, true);
|
||||
sensitivityOref0Plugin.get().setPluginEnabled(type, true);
|
||||
else if (type == PluginType.PROFILE)
|
||||
NSProfilePlugin.getPlugin().setPluginEnabled(type, true);
|
||||
nsProfilePlugin.setPluginEnabled(type, true);
|
||||
else
|
||||
pluginsInCategory.get(0).setPluginEnabled(type, true);
|
||||
}
|
||||
|
|
|
@ -13,8 +13,7 @@ import javax.inject.Singleton
|
|||
|
||||
@Singleton
|
||||
class ProfileFunctionImplementation @Inject constructor(
|
||||
private val sp: SP,
|
||||
private val configBuilderPlugin: ConfigBuilderPlugin
|
||||
private val sp: SP
|
||||
) : ProfileFunction {
|
||||
|
||||
override fun getProfileName(): String =
|
||||
|
@ -50,7 +49,6 @@ class ProfileFunctionImplementation @Inject constructor(
|
|||
profileSwitch.source = Source.USER
|
||||
profileSwitch.profileName = profileName
|
||||
profileSwitch.profileJson = profile.data.toString()
|
||||
profileSwitch.profilePlugin = configBuilderPlugin.activeProfileInterface::class.java.name
|
||||
profileSwitch.durationInMinutes = duration
|
||||
profileSwitch.isCPP = percentage != 100 || timeShift != 0
|
||||
profileSwitch.timeshift = timeShift
|
||||
|
|
|
@ -1,17 +1,12 @@
|
|||
package info.nightscout.androidaps.plugins.constraints.dstHelper
|
||||
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface
|
||||
import info.nightscout.androidaps.interfaces.PluginBase
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.interfaces.*
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
||||
|
@ -24,29 +19,31 @@ import javax.inject.Singleton
|
|||
|
||||
@Singleton
|
||||
class DstHelperPlugin @Inject constructor(
|
||||
private var injector: HasAndroidInjector,
|
||||
aapsLogger: AAPSLogger,
|
||||
rxBus: RxBusWrapper,
|
||||
var resourceHelper: ResourceHelper,
|
||||
var mainApp: MainApp,
|
||||
var sp: SP,
|
||||
var configBuilderPlugin: ConfigBuilderPlugin,
|
||||
var loopPlugin: LoopPlugin
|
||||
) : PluginBase(PluginDescription()
|
||||
private var rxBus: RxBusWrapper,
|
||||
resourceHelper: ResourceHelper,
|
||||
private var sp: SP,
|
||||
private var activePlugin: ActivePluginProvider,
|
||||
private var loopPlugin: LoopPlugin
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.dst_plugin_name),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
), ConstraintsInterface {
|
||||
|
||||
private val DISABLE_TIMEFRAME_HOURS = -3
|
||||
private val WARN_PRIOR_TIMEFRAME_HOURS = 12
|
||||
companion object {
|
||||
private const val DISABLE_TIME_FRAME_HOURS = -3
|
||||
private const val WARN_PRIOR_TIME_FRAME_HOURS = 12
|
||||
}
|
||||
|
||||
//Return false if time to DST change happened in the last 3 hours.
|
||||
override fun isLoopInvocationAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
|
||||
val pump = configBuilderPlugin.activePump
|
||||
if (pump == null || pump.canHandleDST()) {
|
||||
val pump = activePlugin.activePumpPlugin ?: return value
|
||||
if (pump.canHandleDST()) {
|
||||
aapsLogger.debug(LTag.CONSTRAINTS, "Pump can handle DST")
|
||||
return value
|
||||
}
|
||||
|
@ -54,7 +51,7 @@ class DstHelperPlugin @Inject constructor(
|
|||
if (willBeDST(cal)) {
|
||||
val snoozedTo: Long = sp.getLong(R.string.key_snooze_dst_in24h, 0L)
|
||||
if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) {
|
||||
val notification = NotificationWithAction(mainApp, Notification.DST_IN_24H, resourceHelper.gs(R.string.dst_in_24h_warning), Notification.LOW)
|
||||
val notification = NotificationWithAction(injector, Notification.DST_IN_24H, resourceHelper.gs(R.string.dst_in_24h_warning), Notification.LOW)
|
||||
notification.action(R.string.snooze, Runnable {
|
||||
sp.putLong(R.string.key_snooze_dst_in24h, System.currentTimeMillis() + T.hours(24).msecs())
|
||||
})
|
||||
|
@ -69,7 +66,7 @@ class DstHelperPlugin @Inject constructor(
|
|||
if (!loopPlugin.isSuspended) {
|
||||
val snoozedTo: Long = sp.getLong(R.string.key_snooze_loopdisabled, 0L)
|
||||
if (snoozedTo == 0L || System.currentTimeMillis() > snoozedTo) {
|
||||
val notification = NotificationWithAction(mainApp, Notification.DST_LOOP_DISABLED, resourceHelper.gs(R.string.dst_loop_disabled_warning), Notification.LOW)
|
||||
val notification = NotificationWithAction(injector, Notification.DST_LOOP_DISABLED, resourceHelper.gs(R.string.dst_loop_disabled_warning), Notification.LOW)
|
||||
notification.action(R.string.snooze, Runnable {
|
||||
sp.putLong(R.string.key_snooze_loopdisabled, System.currentTimeMillis() + T.hours(24).msecs())
|
||||
})
|
||||
|
@ -85,13 +82,13 @@ class DstHelperPlugin @Inject constructor(
|
|||
|
||||
fun wasDST(now: Calendar): Boolean {
|
||||
val ago = now.clone() as Calendar
|
||||
ago.add(Calendar.HOUR, DISABLE_TIMEFRAME_HOURS)
|
||||
ago.add(Calendar.HOUR, DISABLE_TIME_FRAME_HOURS)
|
||||
return now[Calendar.DST_OFFSET] != ago[Calendar.DST_OFFSET]
|
||||
}
|
||||
|
||||
fun willBeDST(now: Calendar): Boolean {
|
||||
val ago = now.clone() as Calendar
|
||||
ago.add(Calendar.HOUR, WARN_PRIOR_TIMEFRAME_HOURS)
|
||||
ago.add(Calendar.HOUR, WARN_PRIOR_TIME_FRAME_HOURS)
|
||||
return now[Calendar.DST_OFFSET] != ago[Calendar.DST_OFFSET]
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.constraints.objectives
|
|||
import android.app.Activity
|
||||
import com.google.common.base.Charsets
|
||||
import com.google.common.hash.Hashing
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.BuildConfig
|
||||
import info.nightscout.androidaps.Config
|
||||
import info.nightscout.androidaps.R
|
||||
|
@ -12,7 +13,6 @@ import info.nightscout.androidaps.interfaces.PluginBase
|
|||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.constraints.objectives.objectives.*
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
|
@ -25,10 +25,11 @@ import javax.inject.Singleton
|
|||
|
||||
@Singleton
|
||||
class ObjectivesPlugin @Inject constructor(
|
||||
private val sp: SP,
|
||||
private val resourceHelper: ResourceHelper,
|
||||
private val injector: HasAndroidInjector,
|
||||
aapsLogger: AAPSLogger,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val configBuilderPlugin: ConfigBuilderPlugin,
|
||||
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
private val sp: SP
|
||||
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
|
@ -38,21 +39,23 @@ class ObjectivesPlugin @Inject constructor(
|
|||
.pluginName(R.string.objectives)
|
||||
.shortName(R.string.objectives_shortname)
|
||||
.description(R.string.description_objectives),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
), ConstraintsInterface {
|
||||
|
||||
var objectives: MutableList<Objective> = ArrayList()
|
||||
|
||||
val FIRST_OBJECTIVE = 0
|
||||
val USAGE_OBJECTIVE = 1
|
||||
val EXAM_OBJECTIVE = 2
|
||||
val OPENLOOP_OBJECTIVE = 3
|
||||
val MAXBASAL_OBJECTIVE = 4
|
||||
val MAXIOB_ZERO_CL_OBJECTIVE = 5
|
||||
val MAXIOB_OBJECTIVE = 6
|
||||
val AUTOSENS_OBJECTIVE = 7
|
||||
val AMA_OBJECTIVE = 8
|
||||
val SMB_OBJECTIVE = 9
|
||||
companion object {
|
||||
const val FIRST_OBJECTIVE = 0
|
||||
@Suppress("unused") const val USAGE_OBJECTIVE = 1
|
||||
@Suppress("unused") const val EXAM_OBJECTIVE = 2
|
||||
@Suppress("unused") const val OPENLOOP_OBJECTIVE = 3
|
||||
@Suppress("unused") const val MAXBASAL_OBJECTIVE = 4
|
||||
const val MAXIOB_ZERO_CL_OBJECTIVE = 5
|
||||
@Suppress("unused") const val MAXIOB_OBJECTIVE = 6
|
||||
const val AUTOSENS_OBJECTIVE = 7
|
||||
const val AMA_OBJECTIVE = 8
|
||||
const val SMB_OBJECTIVE = 9
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
|
@ -61,7 +64,7 @@ class ObjectivesPlugin @Inject constructor(
|
|||
}
|
||||
|
||||
override fun specialEnableCondition(): Boolean {
|
||||
val pump = configBuilderPlugin.activePump
|
||||
val pump = configBuilderPlugin.activePumpPlugin
|
||||
return pump == null || pump.pumpDescription.isTempBasalCapable
|
||||
}
|
||||
|
||||
|
@ -92,7 +95,7 @@ class ObjectivesPlugin @Inject constructor(
|
|||
objectives.add(Objective2())
|
||||
objectives.add(Objective3())
|
||||
objectives.add(Objective4())
|
||||
objectives.add(Objective5())
|
||||
objectives.add(Objective5(injector))
|
||||
objectives.add(Objective6())
|
||||
objectives.add(Objective7())
|
||||
objectives.add(Objective8())
|
||||
|
@ -118,7 +121,7 @@ class ObjectivesPlugin @Inject constructor(
|
|||
|
||||
fun completeObjectives(activity: Activity, request: String) {
|
||||
val requestCode = sp.getString(R.string.key_objectives_request_code, "")
|
||||
var url = sp.getString(R.string.key_nsclientinternal_url, "").toLowerCase()
|
||||
var url = sp.getString(R.string.key_nsclientinternal_url, "").toLowerCase(Locale.getDefault())
|
||||
if (!url.endsWith("/")) url = "$url/"
|
||||
@Suppress("DEPRECATION") val hashNS = Hashing.sha1().hashString(url + BuildConfig.APPLICATION_ID + "/" + requestCode, Charsets.UTF_8).toString()
|
||||
if (request.equals(hashNS.substring(0, 10), ignoreCase = true)) {
|
||||
|
@ -181,5 +184,4 @@ class ObjectivesPlugin @Inject constructor(
|
|||
maxIob.set(0.0, resourceHelper.gs(R.string.objectivenotfinished, MAXIOB_ZERO_CL_OBJECTIVE + 1), this)
|
||||
return maxIob
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,13 +6,13 @@ import javax.inject.Inject;
|
|||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.db.DatabaseHelper;
|
||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginType;
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSClientPlugin;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin;
|
||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin;
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
||||
import info.nightscout.androidaps.utils.DateUtil;
|
||||
|
@ -24,6 +24,8 @@ public class Objective0 extends Objective {
|
|||
@Inject VirtualPumpPlugin virtualPumpPlugin;
|
||||
@Inject TreatmentsPlugin treatmentsPlugin;
|
||||
@Inject LoopPlugin loopPlugin;
|
||||
@Inject NSClientPlugin nsClientPlugin;
|
||||
@Inject IobCobCalculatorPlugin iobCobCalculatorPlugin;
|
||||
|
||||
public Objective0() {
|
||||
super("config", R.string.objectives_0_objective, R.string.objectives_0_gate);
|
||||
|
@ -41,7 +43,7 @@ public class Objective0 extends Objective {
|
|||
tasks.add(new Task(R.string.nsclienthaswritepermission) {
|
||||
@Override
|
||||
public boolean isCompleted() {
|
||||
return NSClientPlugin.getPlugin().hasWritePermission();
|
||||
return nsClientPlugin.hasWritePermission();
|
||||
}
|
||||
});
|
||||
tasks.add(new Task(R.string.virtualpump_uploadstatus_title) {
|
||||
|
@ -64,7 +66,7 @@ public class Objective0 extends Objective {
|
|||
tasks.add(new Task(R.string.hasbgdata) {
|
||||
@Override
|
||||
public boolean isCompleted() {
|
||||
return DatabaseHelper.lastBg() != null;
|
||||
return iobCobCalculatorPlugin.lastBg() != null;
|
||||
}
|
||||
});
|
||||
tasks.add(new Task(R.string.loopenabled) {
|
||||
|
|
|
@ -18,6 +18,7 @@ public class Objective3 extends Objective {
|
|||
@Inject SP sp;
|
||||
@Inject ObjectivesPlugin objectivesPlugin;
|
||||
@Inject ResourceHelper resourceHelper;
|
||||
@Inject NSClientPlugin nsClientPlugin;
|
||||
|
||||
private final int MANUAL_ENACTS_NEEDED = 20;
|
||||
|
||||
|
@ -49,7 +50,7 @@ public class Objective3 extends Objective {
|
|||
|
||||
@Override
|
||||
public boolean specialActionEnabled() {
|
||||
return NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth;
|
||||
return nsClientPlugin.nsClientService.isConnected && nsClientPlugin.nsClientService.hasWriteAuth;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,7 +4,7 @@ import java.util.List;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import dagger.android.HasAndroidInjector;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.interfaces.Constraint;
|
||||
import info.nightscout.androidaps.plugins.constraints.safety.SafetyPlugin;
|
||||
|
@ -13,9 +13,9 @@ import info.nightscout.androidaps.utils.T;
|
|||
public class Objective5 extends Objective {
|
||||
@Inject SafetyPlugin safetyPlugin;
|
||||
|
||||
public Objective5() {
|
||||
public Objective5(HasAndroidInjector injector) {
|
||||
super("maxiobzero", R.string.objectives_maxiobzero_objective, R.string.objectives_maxiobzero_gate);
|
||||
MainApp.instance().androidInjector().inject(this); // TODO inject or pass itno constructor once AutomationPlugin is prepared for Dagger
|
||||
injector.androidInjector().inject(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package info.nightscout.androidaps.plugins.constraints.safety;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -7,6 +9,7 @@ import info.nightscout.androidaps.Config;
|
|||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||
import info.nightscout.androidaps.interfaces.BgSourceInterface;
|
||||
import info.nightscout.androidaps.interfaces.Constraint;
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface;
|
||||
|
@ -19,9 +22,7 @@ import info.nightscout.androidaps.logging.AAPSLogger;
|
|||
import info.nightscout.androidaps.plugins.aps.openAPSAMA.OpenAPSAMAPlugin;
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSMA.OpenAPSMAPlugin;
|
||||
import info.nightscout.androidaps.plugins.aps.openAPSSMB.OpenAPSSMBPlugin;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
|
||||
|
@ -29,132 +30,133 @@ import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin;
|
|||
import info.nightscout.androidaps.utils.DecimalFormatter;
|
||||
import info.nightscout.androidaps.utils.HardLimits;
|
||||
import info.nightscout.androidaps.utils.Round;
|
||||
import info.nightscout.androidaps.utils.SP;
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper;
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP;
|
||||
|
||||
@Singleton
|
||||
public class SafetyPlugin extends PluginBase implements ConstraintsInterface {
|
||||
|
||||
//TODO: dagger
|
||||
// TODO: dagger
|
||||
@Inject SP sp;
|
||||
@Inject RxBusWrapper rxBus;
|
||||
@Inject ResourceHelper resourceHelper;
|
||||
@Inject ConstraintChecker constraintChecker;
|
||||
@Inject OpenAPSAMAPlugin openAPSAMAPlugin;
|
||||
@Inject OpenAPSMAPlugin openAPSMAPlugin;
|
||||
@Inject OpenAPSSMBPlugin openAPSSMBPlugin;
|
||||
@Inject SensitivityOref1Plugin sensitivityOref1Plugin;
|
||||
@Inject ActivePluginProvider activePlugin;
|
||||
|
||||
@Inject
|
||||
OpenAPSAMAPlugin openAPSAMAPlugin;
|
||||
|
||||
@Inject
|
||||
OpenAPSMAPlugin openAPSMAPlugin;
|
||||
|
||||
@Inject
|
||||
OpenAPSSMBPlugin openAPSSMBPlugin;
|
||||
|
||||
@Inject
|
||||
public SafetyPlugin(RxBusWrapper rxBusWrapper, AAPSLogger aapsLogger) {
|
||||
public SafetyPlugin(AAPSLogger aapsLogger, ResourceHelper resourceHelper) {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.safety)
|
||||
.preferencesId(R.xml.pref_safety), rxBusWrapper, aapsLogger
|
||||
.preferencesId(R.xml.pref_safety), aapsLogger, resourceHelper
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constraints interface
|
||||
**/
|
||||
@Override
|
||||
public Constraint<Boolean> isLoopInvocationAllowed(Constraint<Boolean> value) {
|
||||
if (!ConfigBuilderPlugin.getPlugin().getActivePump().getPumpDescription().isTempBasalCapable)
|
||||
value.set(false, MainApp.gs(R.string.pumpisnottempbasalcapable), this);
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isLoopInvocationAllowed(@NonNull Constraint<Boolean> value) {
|
||||
if (!activePlugin.getActivePumpPlugin().getPumpDescription().isTempBasalCapable)
|
||||
value.set(false, resourceHelper.gs(R.string.pumpisnottempbasalcapable), this);
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isClosedLoopAllowed(Constraint<Boolean> value) {
|
||||
String mode = SP.getString(R.string.key_aps_mode, "open");
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isClosedLoopAllowed(@NonNull Constraint<Boolean> value) {
|
||||
String mode = sp.getString(R.string.key_aps_mode, "open");
|
||||
if (!mode.equals("closed"))
|
||||
value.set(false, MainApp.gs(R.string.closedmodedisabledinpreferences), this);
|
||||
value.set(false, resourceHelper.gs(R.string.closedmodedisabledinpreferences), this);
|
||||
|
||||
if (!MainApp.isEngineeringModeOrRelease()) {
|
||||
if (value.value()) {
|
||||
Notification n = new Notification(Notification.TOAST_ALARM, MainApp.gs(R.string.closed_loop_disabled_on_dev_branch), Notification.NORMAL);
|
||||
RxBus.Companion.getINSTANCE().send(new EventNewNotification(n));
|
||||
Notification n = new Notification(Notification.TOAST_ALARM, resourceHelper.gs(R.string.closed_loop_disabled_on_dev_branch), Notification.NORMAL);
|
||||
rxBus.send(new EventNewNotification(n));
|
||||
}
|
||||
value.set(false, MainApp.gs(R.string.closed_loop_disabled_on_dev_branch), this);
|
||||
value.set(false, resourceHelper.gs(R.string.closed_loop_disabled_on_dev_branch), this);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isAutosensModeEnabled(Constraint<Boolean> value) {
|
||||
boolean enabled = SP.getBoolean(R.string.key_openapsama_useautosens, false);
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isAutosensModeEnabled(@NonNull Constraint<Boolean> value) {
|
||||
boolean enabled = sp.getBoolean(R.string.key_openapsama_useautosens, false);
|
||||
if (!enabled)
|
||||
value.set(false, MainApp.gs(R.string.autosensdisabledinpreferences), this);
|
||||
value.set(false, resourceHelper.gs(R.string.autosensdisabledinpreferences), this);
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isSMBModeEnabled(Constraint<Boolean> value) {
|
||||
boolean enabled = SP.getBoolean(R.string.key_use_smb, false);
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isSMBModeEnabled(@NonNull Constraint<Boolean> value) {
|
||||
boolean enabled = sp.getBoolean(R.string.key_use_smb, false);
|
||||
if (!enabled)
|
||||
value.set(false, MainApp.gs(R.string.smbdisabledinpreferences), this);
|
||||
Constraint<Boolean> closedLoop = ConstraintChecker.getInstance().isClosedLoopAllowed();
|
||||
value.set(false, resourceHelper.gs(R.string.smbdisabledinpreferences), this);
|
||||
Constraint<Boolean> closedLoop = constraintChecker.isClosedLoopAllowed();
|
||||
if (!closedLoop.value())
|
||||
value.set(false, MainApp.gs(R.string.smbnotallowedinopenloopmode), this);
|
||||
value.set(false, resourceHelper.gs(R.string.smbnotallowedinopenloopmode), this);
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isUAMEnabled(Constraint<Boolean> value) {
|
||||
boolean enabled = SP.getBoolean(R.string.key_use_uam, false);
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isUAMEnabled(@NonNull Constraint<Boolean> value) {
|
||||
boolean enabled = sp.getBoolean(R.string.key_use_uam, false);
|
||||
if (!enabled)
|
||||
value.set(false, MainApp.gs(R.string.uamdisabledinpreferences), this);
|
||||
boolean oref1Enabled = SensitivityOref1Plugin.getPlugin().isEnabled(PluginType.SENSITIVITY);
|
||||
value.set(false, resourceHelper.gs(R.string.uamdisabledinpreferences), this);
|
||||
boolean oref1Enabled = sensitivityOref1Plugin.isEnabled(PluginType.SENSITIVITY);
|
||||
if (!oref1Enabled)
|
||||
value.set(false, MainApp.gs(R.string.uamdisabledoref1notselected), this);
|
||||
value.set(false, resourceHelper.gs(R.string.uamdisabledoref1notselected), this);
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isAdvancedFilteringEnabled(Constraint<Boolean> value) {
|
||||
BgSourceInterface bgSource = ConfigBuilderPlugin.getPlugin().getActiveBgSource();
|
||||
@NonNull @Override
|
||||
public Constraint<Boolean> isAdvancedFilteringEnabled(@NonNull Constraint<Boolean> value) {
|
||||
BgSourceInterface bgSource = activePlugin.getActiveBgSource();
|
||||
|
||||
if (bgSource != null) {
|
||||
if (!bgSource.advancedFilteringSupported())
|
||||
value.set(false, MainApp.gs(R.string.smbalwaysdisabled), this);
|
||||
value.set(false, resourceHelper.gs(R.string.smbalwaysdisabled), this);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Double> applyBasalConstraints(Constraint<Double> absoluteRate, Profile profile) {
|
||||
@NonNull @Override
|
||||
public Constraint<Double> applyBasalConstraints(Constraint<Double> absoluteRate, @NonNull Profile profile) {
|
||||
|
||||
absoluteRate.setIfGreater(0d, String.format(MainApp.gs(R.string.limitingbasalratio), 0d, MainApp.gs(R.string.itmustbepositivevalue)), this);
|
||||
absoluteRate.setIfGreater(0d, String.format(resourceHelper.gs(R.string.limitingbasalratio), 0d, resourceHelper.gs(R.string.itmustbepositivevalue)), this);
|
||||
|
||||
if (Config.APS) {
|
||||
double maxBasal = SP.getDouble(R.string.key_openapsma_max_basal, 1d);
|
||||
double maxBasal = sp.getDouble(R.string.key_openapsma_max_basal, 1d);
|
||||
if (maxBasal < profile.getMaxDailyBasal()) {
|
||||
maxBasal = profile.getMaxDailyBasal();
|
||||
absoluteRate.addReason(MainApp.gs(R.string.increasingmaxbasal), this);
|
||||
absoluteRate.addReason(resourceHelper.gs(R.string.increasingmaxbasal), this);
|
||||
}
|
||||
absoluteRate.setIfSmaller(maxBasal, String.format(MainApp.gs(R.string.limitingbasalratio), maxBasal, MainApp.gs(R.string.maxvalueinpreferences)), this);
|
||||
absoluteRate.setIfSmaller(maxBasal, String.format(resourceHelper.gs(R.string.limitingbasalratio), maxBasal, resourceHelper.gs(R.string.maxvalueinpreferences)), this);
|
||||
|
||||
// Check percentRate but absolute rate too, because we know real current basal in pump
|
||||
Double maxBasalMult = SP.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4d);
|
||||
Double maxBasalMult = sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4d);
|
||||
double maxFromBasalMult = Math.floor(maxBasalMult * profile.getBasal() * 100) / 100;
|
||||
absoluteRate.setIfSmaller(maxFromBasalMult, String.format(MainApp.gs(R.string.limitingbasalratio), maxFromBasalMult, MainApp.gs(R.string.maxbasalmultiplier)), this);
|
||||
absoluteRate.setIfSmaller(maxFromBasalMult, String.format(resourceHelper.gs(R.string.limitingbasalratio), maxFromBasalMult, resourceHelper.gs(R.string.maxbasalmultiplier)), this);
|
||||
|
||||
Double maxBasalFromDaily = SP.getDouble(R.string.key_openapsama_max_daily_safety_multiplier, 3d);
|
||||
Double maxBasalFromDaily = sp.getDouble(R.string.key_openapsama_max_daily_safety_multiplier, 3d);
|
||||
double maxFromDaily = Math.floor(profile.getMaxDailyBasal() * maxBasalFromDaily * 100) / 100;
|
||||
absoluteRate.setIfSmaller(maxFromDaily, String.format(MainApp.gs(R.string.limitingbasalratio), maxFromDaily, MainApp.gs(R.string.maxdailybasalmultiplier)), this);
|
||||
absoluteRate.setIfSmaller(maxFromDaily, String.format(resourceHelper.gs(R.string.limitingbasalratio), maxFromDaily, resourceHelper.gs(R.string.maxdailybasalmultiplier)), this);
|
||||
}
|
||||
|
||||
absoluteRate.setIfSmaller(HardLimits.maxBasal(), String.format(MainApp.gs(R.string.limitingbasalratio), HardLimits.maxBasal(), MainApp.gs(R.string.hardlimit)), this);
|
||||
absoluteRate.setIfSmaller(HardLimits.maxBasal(), String.format(resourceHelper.gs(R.string.limitingbasalratio), HardLimits.maxBasal(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
// check for pump max
|
||||
if (pump != null && pump.getPumpDescription().tempBasalStyle == PumpDescription.ABSOLUTE) {
|
||||
double pumpLimit = pump.getPumpDescription().pumpType.getTbrSettings().getMaxDose();
|
||||
absoluteRate.setIfSmaller(pumpLimit, String.format(MainApp.gs(R.string.limitingbasalratio), pumpLimit, MainApp.gs(R.string.pumplimit)), this);
|
||||
absoluteRate.setIfSmaller(pumpLimit, String.format(resourceHelper.gs(R.string.limitingbasalratio), pumpLimit, resourceHelper.gs(R.string.pumplimit)), this);
|
||||
}
|
||||
|
||||
// do rounding
|
||||
|
@ -164,7 +166,7 @@ public class SafetyPlugin extends PluginBase implements ConstraintsInterface {
|
|||
return absoluteRate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull @Override
|
||||
public Constraint<Integer> applyBasalPercentConstraints(Constraint<Integer> percentRate, Profile profile) {
|
||||
|
||||
Double currentBasal = profile.getBasal();
|
||||
|
@ -176,7 +178,7 @@ public class SafetyPlugin extends PluginBase implements ConstraintsInterface {
|
|||
applyBasalConstraints(absoluteConstraint, profile);
|
||||
percentRate.copyReasons(absoluteConstraint);
|
||||
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
|
||||
Integer percentRateAfterConst = Double.valueOf(absoluteConstraint.value() / currentBasal * 100).intValue();
|
||||
if (pump != null) {
|
||||
|
@ -186,75 +188,75 @@ public class SafetyPlugin extends PluginBase implements ConstraintsInterface {
|
|||
percentRateAfterConst = Round.floorTo((double) percentRateAfterConst, (double) pump.getPumpDescription().tempPercentStep).intValue();
|
||||
}
|
||||
|
||||
percentRate.set(percentRateAfterConst, String.format(MainApp.gs(R.string.limitingpercentrate), percentRateAfterConst, MainApp.gs(R.string.pumplimit)), this);
|
||||
percentRate.set(percentRateAfterConst, String.format(resourceHelper.gs(R.string.limitingpercentrate), percentRateAfterConst, resourceHelper.gs(R.string.pumplimit)), this);
|
||||
|
||||
if (pump != null && pump.getPumpDescription().tempBasalStyle == PumpDescription.PERCENT) {
|
||||
double pumpLimit = pump.getPumpDescription().pumpType.getTbrSettings().getMaxDose();
|
||||
percentRate.setIfSmaller((int) pumpLimit, String.format(MainApp.gs(R.string.limitingbasalratio), pumpLimit, MainApp.gs(R.string.pumplimit)), this);
|
||||
percentRate.setIfSmaller((int) pumpLimit, String.format(resourceHelper.gs(R.string.limitingbasalratio), pumpLimit, resourceHelper.gs(R.string.pumplimit)), this);
|
||||
}
|
||||
|
||||
return percentRate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull @Override
|
||||
public Constraint<Double> applyBolusConstraints(Constraint<Double> insulin) {
|
||||
insulin.setIfGreater(0d, String.format(MainApp.gs(R.string.limitingbolus), 0d, MainApp.gs(R.string.itmustbepositivevalue)), this);
|
||||
insulin.setIfGreater(0d, String.format(resourceHelper.gs(R.string.limitingbolus), 0d, resourceHelper.gs(R.string.itmustbepositivevalue)), this);
|
||||
|
||||
Double maxBolus = SP.getDouble(R.string.key_treatmentssafety_maxbolus, 3d);
|
||||
insulin.setIfSmaller(maxBolus, String.format(MainApp.gs(R.string.limitingbolus), maxBolus, MainApp.gs(R.string.maxvalueinpreferences)), this);
|
||||
Double maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3d);
|
||||
insulin.setIfSmaller(maxBolus, String.format(resourceHelper.gs(R.string.limitingbolus), maxBolus, resourceHelper.gs(R.string.maxvalueinpreferences)), this);
|
||||
|
||||
insulin.setIfSmaller(HardLimits.maxBolus(), String.format(MainApp.gs(R.string.limitingbolus), HardLimits.maxBolus(), MainApp.gs(R.string.hardlimit)), this);
|
||||
insulin.setIfSmaller(HardLimits.maxBolus(), String.format(resourceHelper.gs(R.string.limitingbolus), HardLimits.maxBolus(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
if (pump != null) {
|
||||
double rounded = pump.getPumpDescription().pumpType.determineCorrectBolusSize(insulin.value());
|
||||
insulin.setIfDifferent(rounded, MainApp.gs(R.string.pumplimit), this);
|
||||
insulin.setIfDifferent(rounded, resourceHelper.gs(R.string.pumplimit), this);
|
||||
}
|
||||
return insulin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull @Override
|
||||
public Constraint<Double> applyExtendedBolusConstraints(Constraint<Double> insulin) {
|
||||
insulin.setIfGreater(0d, String.format(MainApp.gs(R.string.limitingextendedbolus), 0d, MainApp.gs(R.string.itmustbepositivevalue)), this);
|
||||
insulin.setIfGreater(0d, String.format(resourceHelper.gs(R.string.limitingextendedbolus), 0d, resourceHelper.gs(R.string.itmustbepositivevalue)), this);
|
||||
|
||||
Double maxBolus = SP.getDouble(R.string.key_treatmentssafety_maxbolus, 3d);
|
||||
insulin.setIfSmaller(maxBolus, String.format(MainApp.gs(R.string.limitingextendedbolus), maxBolus, MainApp.gs(R.string.maxvalueinpreferences)), this);
|
||||
Double maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3d);
|
||||
insulin.setIfSmaller(maxBolus, String.format(resourceHelper.gs(R.string.limitingextendedbolus), maxBolus, resourceHelper.gs(R.string.maxvalueinpreferences)), this);
|
||||
|
||||
insulin.setIfSmaller(HardLimits.maxBolus(), String.format(MainApp.gs(R.string.limitingextendedbolus), HardLimits.maxBolus(), MainApp.gs(R.string.hardlimit)), this);
|
||||
insulin.setIfSmaller(HardLimits.maxBolus(), String.format(resourceHelper.gs(R.string.limitingextendedbolus), HardLimits.maxBolus(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
|
||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
||||
PumpInterface pump = activePlugin.getActivePumpPlugin();
|
||||
if (pump != null) {
|
||||
double rounded = pump.getPumpDescription().pumpType.determineCorrectExtendedBolusSize(insulin.value());
|
||||
insulin.setIfDifferent(rounded, MainApp.gs(R.string.pumplimit), this);
|
||||
insulin.setIfDifferent(rounded, resourceHelper.gs(R.string.pumplimit), this);
|
||||
}
|
||||
return insulin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull @Override
|
||||
public Constraint<Integer> applyCarbsConstraints(Constraint<Integer> carbs) {
|
||||
carbs.setIfGreater(0, String.format(MainApp.gs(R.string.limitingcarbs), 0, MainApp.gs(R.string.itmustbepositivevalue)), this);
|
||||
carbs.setIfGreater(0, String.format(resourceHelper.gs(R.string.limitingcarbs), 0, resourceHelper.gs(R.string.itmustbepositivevalue)), this);
|
||||
|
||||
Integer maxCarbs = SP.getInt(R.string.key_treatmentssafety_maxcarbs, 48);
|
||||
carbs.setIfSmaller(maxCarbs, String.format(MainApp.gs(R.string.limitingcarbs), maxCarbs, MainApp.gs(R.string.maxvalueinpreferences)), this);
|
||||
Integer maxCarbs = sp.getInt(R.string.key_treatmentssafety_maxcarbs, 48);
|
||||
carbs.setIfSmaller(maxCarbs, String.format(resourceHelper.gs(R.string.limitingcarbs), maxCarbs, resourceHelper.gs(R.string.maxvalueinpreferences)), this);
|
||||
|
||||
return carbs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Constraint<Double> applyMaxIOBConstraints(Constraint<Double> maxIob) {
|
||||
@NonNull @Override
|
||||
public Constraint<Double> applyMaxIOBConstraints(@NonNull Constraint<Double> maxIob) {
|
||||
double maxIobPref;
|
||||
if (openAPSSMBPlugin.isEnabled(PluginType.APS))
|
||||
maxIobPref = SP.getDouble(R.string.key_openapssmb_max_iob, 3d);
|
||||
maxIobPref = sp.getDouble(R.string.key_openapssmb_max_iob, 3d);
|
||||
else
|
||||
maxIobPref = SP.getDouble(R.string.key_openapsma_max_iob, 1.5d);
|
||||
maxIob.setIfSmaller(maxIobPref, String.format(MainApp.gs(R.string.limitingiob), maxIobPref, MainApp.gs(R.string.maxvalueinpreferences)), this);
|
||||
maxIobPref = sp.getDouble(R.string.key_openapsma_max_iob, 1.5d);
|
||||
maxIob.setIfSmaller(maxIobPref, String.format(resourceHelper.gs(R.string.limitingiob), maxIobPref, resourceHelper.gs(R.string.maxvalueinpreferences)), this);
|
||||
|
||||
if (openAPSMAPlugin.isEnabled(PluginType.APS))
|
||||
maxIob.setIfSmaller(HardLimits.maxIobAMA(), String.format(MainApp.gs(R.string.limitingiob), HardLimits.maxIobAMA(), MainApp.gs(R.string.hardlimit)), this);
|
||||
maxIob.setIfSmaller(HardLimits.maxIobAMA(), String.format(resourceHelper.gs(R.string.limitingiob), HardLimits.maxIobAMA(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
if (openAPSAMAPlugin.isEnabled(PluginType.APS))
|
||||
maxIob.setIfSmaller(HardLimits.maxIobAMA(), String.format(MainApp.gs(R.string.limitingiob), HardLimits.maxIobAMA(), MainApp.gs(R.string.hardlimit)), this);
|
||||
maxIob.setIfSmaller(HardLimits.maxIobAMA(), String.format(resourceHelper.gs(R.string.limitingiob), HardLimits.maxIobAMA(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
if (openAPSSMBPlugin.isEnabled(PluginType.APS))
|
||||
maxIob.setIfSmaller(HardLimits.maxIobSMB(), String.format(MainApp.gs(R.string.limitingiob), HardLimits.maxIobSMB(), MainApp.gs(R.string.hardlimit)), this);
|
||||
maxIob.setIfSmaller(HardLimits.maxIobSMB(), String.format(resourceHelper.gs(R.string.limitingiob), HardLimits.maxIobSMB(), resourceHelper.gs(R.string.hardlimit)), this);
|
||||
return maxIob;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.androidaps.plugins.constraints.signatureVerifier
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface
|
||||
|
@ -34,17 +34,18 @@ import javax.inject.Singleton
|
|||
*/
|
||||
@Singleton
|
||||
class SignatureVerifierPlugin @Inject constructor(
|
||||
aapsLogger: AAPSLogger,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val sp: SP,
|
||||
private val resourceHelper: ResourceHelper,
|
||||
private val mainApp: MainApp,
|
||||
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
private val rxBus: RxBusWrapper,
|
||||
private val context: Context
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.signature_verifier),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
), ConstraintsInterface {
|
||||
|
||||
private val REVOKED_CERTS_URL = "https://raw.githubusercontent.com/MilosKozak/AndroidAPS/master/app/src/main/assets/revoked_certs.txt"
|
||||
|
@ -56,7 +57,7 @@ class SignatureVerifierPlugin @Inject constructor(
|
|||
private var revokedCerts: List<ByteArray>? = null
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
revokedCertsFile = File(mainApp.filesDir, "revoked_certs.txt")
|
||||
revokedCertsFile = File(context.filesDir, "revoked_certs.txt")
|
||||
Thread(Runnable {
|
||||
loadLocalRevokedCerts()
|
||||
if (shouldDownloadCerts()) {
|
||||
|
@ -98,7 +99,7 @@ class SignatureVerifierPlugin @Inject constructor(
|
|||
if (revokedCerts == null) return false
|
||||
// TODO Change after raising min API to 28
|
||||
@Suppress("DEPRECATION", "PackageManagerGetSignatures")
|
||||
val signatures = mainApp.packageManager.getPackageInfo(mainApp.packageName, PackageManager.GET_SIGNATURES).signatures
|
||||
val signatures = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES).signatures
|
||||
if (signatures != null) {
|
||||
for (signature in signatures) {
|
||||
val digest = MessageDigest.getInstance("SHA256")
|
||||
|
@ -124,7 +125,7 @@ class SignatureVerifierPlugin @Inject constructor(
|
|||
try {
|
||||
// TODO Change after raising min API to 28
|
||||
@Suppress("DEPRECATION", "PackageManagerGetSignatures")
|
||||
val signatures = mainApp.packageManager.getPackageInfo(mainApp.packageName, PackageManager.GET_SIGNATURES).signatures
|
||||
val signatures = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES).signatures
|
||||
if (signatures != null) {
|
||||
for (signature in signatures) {
|
||||
val digest = MessageDigest.getInstance("SHA256")
|
||||
|
@ -212,7 +213,7 @@ class SignatureVerifierPlugin @Inject constructor(
|
|||
}
|
||||
|
||||
@Throws(IOException::class) private fun readRevokedCertsInAssets(): String {
|
||||
val inputStream = mainApp.assets.open("revoked_certs.txt")
|
||||
val inputStream = context.assets.open("revoked_certs.txt")
|
||||
return readInputStream(inputStream)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
package info.nightscout.androidaps.plugins.constraints.storage;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.os.StatFs;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import info.nightscout.androidaps.Constants;
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.interfaces.Constraint;
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription;
|
||||
import info.nightscout.androidaps.interfaces.PluginType;
|
||||
import info.nightscout.androidaps.logging.AAPSLoggerProduction;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
|
||||
|
||||
/**
|
||||
* Created by Rumen on 06.03.2019.
|
||||
*/
|
||||
public class StorageConstraintPlugin extends PluginBase implements ConstraintsInterface {
|
||||
private static Logger log = LoggerFactory.getLogger(L.CONSTRAINTS);
|
||||
static StorageConstraintPlugin plugin = null;
|
||||
|
||||
@Deprecated
|
||||
public static StorageConstraintPlugin getPlugin() {
|
||||
if (plugin == null)
|
||||
plugin = new StorageConstraintPlugin();
|
||||
return plugin;
|
||||
}
|
||||
|
||||
// TODO: dagger
|
||||
|
||||
public StorageConstraintPlugin() {
|
||||
super(new PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.storage),
|
||||
new RxBusWrapper(), new AAPSLoggerProduction() // TODO: dagger
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constraints interface
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Constraint<Boolean> isClosedLoopAllowed(Constraint<Boolean> value) {
|
||||
long diskfree = getAvailableInternalMemorySize();
|
||||
if (L.isEnabled(L.CONSTRAINTS))
|
||||
log.debug("Internal storage free (Mb):" + diskfree);
|
||||
if (diskfree < Constants.MINIMUM_FREE_SPACE) {
|
||||
value.set(false, MainApp.gs(R.string.diskfull, Constants.MINIMUM_FREE_SPACE), this);
|
||||
Notification notification = new Notification(Notification.DISKFULL, MainApp.gs(R.string.diskfull, Constants.MINIMUM_FREE_SPACE), Notification.NORMAL);
|
||||
RxBus.Companion.getINSTANCE().send(new EventNewNotification(notification));
|
||||
} else {
|
||||
RxBus.Companion.getINSTANCE().send(new EventDismissNotification(Notification.DISKFULL));
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public static long getAvailableInternalMemorySize() {
|
||||
File path = Environment.getDataDirectory();
|
||||
StatFs stat = new StatFs(path.getPath());
|
||||
long blockSize = stat.getBlockSizeLong();
|
||||
long blocksAvailable = stat.getAvailableBlocksLong();
|
||||
int size = 1048576; // blocksize of 1 Mb
|
||||
return ((blocksAvailable * blockSize) / size);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package info.nightscout.androidaps.plugins.constraints.storage
|
||||
|
||||
import android.os.Environment
|
||||
import android.os.StatFs
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.interfaces.Constraint
|
||||
import info.nightscout.androidaps.interfaces.ConstraintsInterface
|
||||
import info.nightscout.androidaps.interfaces.PluginBase
|
||||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
open class StorageConstraintPlugin @Inject constructor(
|
||||
aapsLogger: AAPSLogger,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val rxBus: RxBusWrapper
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.storage),
|
||||
aapsLogger, resourceHelper
|
||||
), ConstraintsInterface {
|
||||
|
||||
override fun isClosedLoopAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
|
||||
val diskFree = availableInternalMemorySize
|
||||
aapsLogger.debug(LTag.CONSTRAINTS, "Internal storage free (Mb):$diskFree")
|
||||
if (diskFree < Constants.MINIMUM_FREE_SPACE) {
|
||||
value[false, resourceHelper.gs(R.string.diskfull, Constants.MINIMUM_FREE_SPACE)] = this
|
||||
val notification = Notification(Notification.DISKFULL, resourceHelper.gs(R.string.diskfull, Constants.MINIMUM_FREE_SPACE), Notification.NORMAL)
|
||||
rxBus.send(EventNewNotification(notification))
|
||||
} else {
|
||||
rxBus.send(EventDismissNotification(Notification.DISKFULL))
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
val availableInternalMemorySize: Long
|
||||
get() {
|
||||
val path = Environment.getDataDirectory()
|
||||
val stat = StatFs(path.path)
|
||||
val blockSize = stat.blockSizeLong
|
||||
val blocksAvailable = stat.availableBlocksLong
|
||||
val size = 1048576 // block size of 1 Mb
|
||||
return blocksAvailable * blockSize / size
|
||||
}
|
||||
}
|
|
@ -22,16 +22,17 @@ import kotlin.math.roundToInt
|
|||
@Singleton
|
||||
class VersionCheckerPlugin @Inject constructor(
|
||||
private val sp: SP,
|
||||
private val resourceHelper: ResourceHelper,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val versionCheckerUtils: VersionCheckerUtils,
|
||||
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
val rxBus: RxBusWrapper,
|
||||
aapsLogger: AAPSLogger
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.CONSTRAINTS)
|
||||
.neverVisible(true)
|
||||
.alwaysEnabled(true)
|
||||
.showInList(false)
|
||||
.pluginName(R.string.versionChecker),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
), ConstraintsInterface {
|
||||
|
||||
enum class GracePeriod(val warning: Long, val old: Long, val veryOld: Long) {
|
||||
|
|
|
@ -16,12 +16,12 @@ import info.nightscout.androidaps.activities.TDDStatsActivity
|
|||
import info.nightscout.androidaps.dialogs.*
|
||||
import info.nightscout.androidaps.events.*
|
||||
import info.nightscout.androidaps.historyBrowser.HistoryBrowseActivity
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction
|
||||
import info.nightscout.androidaps.plugins.general.overview.StatusLightHandler
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||
import info.nightscout.androidaps.utils.SingleClickButton
|
||||
|
@ -44,8 +44,8 @@ class ActionsFragment : DaggerFragment() {
|
|||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var statusLightHandler: StatusLightHandler
|
||||
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
|
||||
private var disposable: CompositeDisposable = CompositeDisposable()
|
||||
|
||||
|
@ -70,8 +70,8 @@ class ActionsFragment : DaggerFragment() {
|
|||
fragmentManager?.let { ExtendedBolusDialog().show(it, "Actions") }
|
||||
}
|
||||
actions_extendedbolus_cancel.setOnClickListener {
|
||||
if (treatmentsPlugin.isInHistoryExtendedBoluslInProgress) {
|
||||
configBuilderPlugin.commandQueue.cancelExtended(object : Callback() {
|
||||
if (activePlugin.activeTreatments.isInHistoryExtendedBoluslInProgress) {
|
||||
commandQueue.cancelExtended(object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
|
@ -89,8 +89,8 @@ class ActionsFragment : DaggerFragment() {
|
|||
fragmentManager?.let { TempBasalDialog().show(it, "Actions") }
|
||||
}
|
||||
actions_canceltempbasal.setOnClickListener {
|
||||
if (treatmentsPlugin.isTempBasalInProgress) {
|
||||
configBuilderPlugin.commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
if (activePlugin.activeTreatments.isTempBasalInProgress) {
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
if (!result.success) {
|
||||
val i = Intent(mainApp, ErrorHelperActivity::class.java)
|
||||
|
@ -159,20 +159,22 @@ class ActionsFragment : DaggerFragment() {
|
|||
@Synchronized
|
||||
fun updateGui() {
|
||||
actions_profileswitch?.visibility =
|
||||
if (configBuilderPlugin.activeProfileInterface.profile != null) View.VISIBLE
|
||||
if (activePlugin.activeProfileInterface.profile != null) View.VISIBLE
|
||||
else View.GONE
|
||||
|
||||
if (profileFunction.getProfile() == null) {
|
||||
actions_temptarget?.visibility = View.GONE
|
||||
actions_extendedbolus?.visibility = View.GONE
|
||||
actions_extendedbolus_cancel?.visibility = View.GONE
|
||||
actions_settempbasal?.visibility = View.GONE
|
||||
actions_canceltempbasal?.visibility = View.GONE
|
||||
actions_fill?.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
val profile = profileFunction.getProfile()
|
||||
val pump = activePlugin.activePumpPlugin
|
||||
|
||||
actions_temptarget?.visibility = (profile != null).toVisibility()
|
||||
actions_canceltempbasal.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_settempbasal.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_fill.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_extendedbolus.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_extendedbolus_cancel.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_historybrowser.visibility = (pump != null || profile == null).toVisibility()
|
||||
actions_tddstats.visibility = (pump != null || profile == null).toVisibility()
|
||||
if (pump == null) return
|
||||
|
||||
val pump = configBuilderPlugin.activePump ?: return
|
||||
val basalProfileEnabled = MainApp.isEngineeringModeOrRelease() && pump.pumpDescription.isSetBasalProfileCapable
|
||||
|
||||
actions_profileswitch?.visibility = if (!basalProfileEnabled || !pump.isInitialized || pump.isSuspended) View.GONE else View.VISIBLE
|
||||
|
@ -181,7 +183,7 @@ class ActionsFragment : DaggerFragment() {
|
|||
actions_extendedbolus?.visibility = View.GONE
|
||||
actions_extendedbolus_cancel?.visibility = View.GONE
|
||||
} else {
|
||||
val activeExtendedBolus = treatmentsPlugin.getExtendedBolusFromHistory(System.currentTimeMillis())
|
||||
val activeExtendedBolus = activePlugin.activeTreatments.getExtendedBolusFromHistory(System.currentTimeMillis())
|
||||
if (activeExtendedBolus != null) {
|
||||
actions_extendedbolus?.visibility = View.GONE
|
||||
actions_extendedbolus_cancel?.visibility = View.VISIBLE
|
||||
|
@ -197,7 +199,7 @@ class ActionsFragment : DaggerFragment() {
|
|||
actions_settempbasal?.visibility = View.GONE
|
||||
actions_canceltempbasal?.visibility = View.GONE
|
||||
} else {
|
||||
val activeTemp = treatmentsPlugin.getTempBasalFromHistory(System.currentTimeMillis())
|
||||
val activeTemp = activePlugin.activeTreatments.getTempBasalFromHistory(System.currentTimeMillis())
|
||||
if (activeTemp != null) {
|
||||
actions_settempbasal?.visibility = View.GONE
|
||||
actions_canceltempbasal?.visibility = View.VISIBLE
|
||||
|
@ -220,7 +222,7 @@ class ActionsFragment : DaggerFragment() {
|
|||
}
|
||||
|
||||
private fun checkPumpCustomActions() {
|
||||
val activePump = configBuilderPlugin.activePump ?: return
|
||||
val activePump = activePlugin.activePumpPlugin ?: return
|
||||
val customActions = activePump.customActions ?: return
|
||||
removePumpCustomActions()
|
||||
|
||||
|
@ -237,8 +239,9 @@ class ActionsFragment : DaggerFragment() {
|
|||
btn.layoutParams = layoutParams
|
||||
btn.setOnClickListener { v ->
|
||||
val b = v as SingleClickButton
|
||||
val action = this.pumpCustomActions[b.text.toString()]
|
||||
configBuilderPlugin.activePump!!.executeCustomAction(action!!.customActionType)
|
||||
this.pumpCustomActions[b.text.toString()]?.let {
|
||||
activePlugin.activePump.executeCustomAction(it.customActionType)
|
||||
}
|
||||
}
|
||||
val top = activity?.let { ContextCompat.getDrawable(it, customAction.iconResourceId) }
|
||||
btn.setCompoundDrawablesWithIntrinsicBounds(null, top, null, null)
|
||||
|
|
|
@ -6,12 +6,12 @@ import info.nightscout.androidaps.interfaces.PluginBase
|
|||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class ActionsPlugin @Inject constructor(rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
class ActionsPlugin @Inject constructor(aapsLogger: AAPSLogger, resourceHelper: ResourceHelper
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(ActionsFragment::class.qualifiedName)
|
||||
|
@ -20,5 +20,5 @@ class ActionsPlugin @Inject constructor(rxBus: RxBusWrapper, aapsLogger: AAPSLog
|
|||
.pluginName(R.string.actions)
|
||||
.shortName(R.string.actions_shortname)
|
||||
.description(R.string.description_actions),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation
|
||||
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.general.automation.actions.Action
|
||||
import info.nightscout.androidaps.plugins.general.automation.actions.ActionDummy
|
||||
|
@ -14,21 +14,21 @@ import org.json.JSONObject
|
|||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class AutomationEvent(private val mainApp: MainApp) {
|
||||
class AutomationEvent(private val injector: HasAndroidInjector) {
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
|
||||
var trigger: Trigger = TriggerConnector(mainApp)
|
||||
var trigger: Trigger = TriggerConnector(injector)
|
||||
val actions: MutableList<Action> = ArrayList()
|
||||
var title: String? = null
|
||||
var isEnabled = true
|
||||
var lastRun: Long = 0
|
||||
|
||||
init {
|
||||
mainApp.androidInjector().inject(this)
|
||||
injector.androidInjector().inject(this)
|
||||
}
|
||||
|
||||
fun getPreconditions(): TriggerConnector {
|
||||
val trigger = TriggerConnector(mainApp, TriggerConnector.Type.AND)
|
||||
val trigger = TriggerConnector(injector, TriggerConnector.Type.AND)
|
||||
for (action in actions) {
|
||||
action.precondition?.let { trigger.list.add(it) }
|
||||
}
|
||||
|
@ -52,19 +52,19 @@ class AutomationEvent(private val mainApp: MainApp) {
|
|||
val d = JSONObject(data)
|
||||
title = d.optString("title", "")
|
||||
isEnabled = d.optBoolean("enabled", true)
|
||||
trigger = TriggerDummy(mainApp).instantiate(JSONObject(d.getString("trigger")))
|
||||
?: TriggerConnector(mainApp)
|
||||
trigger = TriggerDummy(injector).instantiate(JSONObject(d.getString("trigger")))
|
||||
?: TriggerConnector(injector)
|
||||
val array = d.getJSONArray("actions")
|
||||
actions.clear()
|
||||
for (i in 0 until array.length()) {
|
||||
ActionDummy(mainApp).instantiate(JSONObject(array.getString(i)))?.let {
|
||||
ActionDummy(injector).instantiate(JSONObject(array.getString(i)))?.let {
|
||||
actions.add(it)
|
||||
}
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
fun shouldRun() : Boolean{
|
||||
fun shouldRun(): Boolean {
|
||||
return lastRun <= DateUtil.now() - T.mins(5).msecs()
|
||||
}
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.events.EventChargingState
|
||||
import info.nightscout.androidaps.events.EventLocationChange
|
||||
|
@ -40,19 +41,21 @@ import javax.inject.Singleton
|
|||
|
||||
@Singleton
|
||||
class AutomationPlugin @Inject constructor(
|
||||
private val resourceHelper: ResourceHelper,
|
||||
private val mainApp: MainApp,
|
||||
private val injector: HasAndroidInjector,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val context: Context,
|
||||
private val sp: SP,
|
||||
private val fabricPrivacy: FabricPrivacy,
|
||||
private val loopPlugin: LoopPlugin,
|
||||
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
private val rxBus: RxBusWrapper,
|
||||
aapsLogger: AAPSLogger
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(AutomationFragment::class.qualifiedName)
|
||||
.pluginName(R.string.automation)
|
||||
.shortName(R.string.automation_short)
|
||||
.preferencesId(R.xml.pref_automation)
|
||||
.description(R.string.automation_description), rxBus, aapsLogger
|
||||
.description(R.string.automation_description), aapsLogger, resourceHelper
|
||||
) {
|
||||
|
||||
private var disposable: CompositeDisposable = CompositeDisposable()
|
||||
|
@ -74,9 +77,9 @@ class AutomationPlugin @Inject constructor(
|
|||
|
||||
override fun onStart() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||
mainApp.startForegroundService(Intent(mainApp, LocationService::class.java))
|
||||
context.startForegroundService(Intent(context, LocationService::class.java))
|
||||
else
|
||||
mainApp.startService(Intent(mainApp, LocationService::class.java))
|
||||
context.startService(Intent(context, LocationService::class.java))
|
||||
|
||||
super.onStart()
|
||||
loadFromSP()
|
||||
|
@ -87,11 +90,11 @@ class AutomationPlugin @Inject constructor(
|
|||
.observeOn(Schedulers.io())
|
||||
.subscribe({ e ->
|
||||
if (e.isChanged(resourceHelper, R.string.key_location)) {
|
||||
mainApp.stopService(Intent(mainApp, LocationService::class.java))
|
||||
context.stopService(Intent(context, LocationService::class.java))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||
mainApp.startForegroundService(Intent(mainApp, LocationService::class.java))
|
||||
context.startForegroundService(Intent(context, LocationService::class.java))
|
||||
else
|
||||
mainApp.startService(Intent(mainApp, LocationService::class.java))
|
||||
context.startService(Intent(context, LocationService::class.java))
|
||||
}
|
||||
}, { fabricPrivacy.logException(it) })
|
||||
disposable += rxBus
|
||||
|
@ -124,7 +127,7 @@ class AutomationPlugin @Inject constructor(
|
|||
override fun onStop() {
|
||||
disposable.clear()
|
||||
loopHandler.removeCallbacks(refreshLoop)
|
||||
mainApp.stopService(Intent(mainApp, LocationService::class.java))
|
||||
context.stopService(Intent(context, LocationService::class.java))
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
|
@ -149,7 +152,7 @@ class AutomationPlugin @Inject constructor(
|
|||
val array = JSONArray(data)
|
||||
for (i in 0 until array.length()) {
|
||||
val o = array.getJSONObject(i)
|
||||
val event = AutomationEvent(mainApp).fromJSON(o.toString())
|
||||
val event = AutomationEvent(injector).fromJSON(o.toString())
|
||||
automationEvents.add(event)
|
||||
}
|
||||
} catch (e: JSONException) {
|
||||
|
@ -198,36 +201,36 @@ class AutomationPlugin @Inject constructor(
|
|||
|
||||
fun getActionDummyObjects(): List<Action> {
|
||||
return listOf(
|
||||
//ActionLoopDisable(mainApp),
|
||||
//ActionLoopEnable(mainApp),
|
||||
//ActionLoopResume(mainApp),
|
||||
//ActionLoopSuspend(mainApp),
|
||||
ActionStartTempTarget(mainApp),
|
||||
ActionStopTempTarget(mainApp),
|
||||
ActionNotification(mainApp),
|
||||
ActionProfileSwitchPercent(mainApp),
|
||||
ActionProfileSwitch(mainApp),
|
||||
ActionSendSMS(mainApp)
|
||||
//ActionLoopDisable(injector),
|
||||
//ActionLoopEnable(injector),
|
||||
//ActionLoopResume(injector),
|
||||
//ActionLoopSuspend(injector),
|
||||
ActionStartTempTarget(injector),
|
||||
ActionStopTempTarget(injector),
|
||||
ActionNotification(injector),
|
||||
ActionProfileSwitchPercent(injector),
|
||||
ActionProfileSwitch(injector),
|
||||
ActionSendSMS(injector)
|
||||
)
|
||||
}
|
||||
|
||||
fun getTriggerDummyObjects(): List<Trigger> {
|
||||
return listOf(
|
||||
TriggerConnector(mainApp),
|
||||
TriggerTime(mainApp),
|
||||
TriggerRecurringTime(mainApp),
|
||||
TriggerTimeRange(mainApp),
|
||||
TriggerBg(mainApp),
|
||||
TriggerDelta(mainApp),
|
||||
TriggerIob(mainApp),
|
||||
TriggerCOB(mainApp),
|
||||
TriggerProfilePercent(mainApp),
|
||||
TriggerTempTarget(mainApp),
|
||||
TriggerWifiSsid(mainApp),
|
||||
TriggerLocation(mainApp),
|
||||
TriggerAutosensValue(mainApp),
|
||||
TriggerBolusAgo(mainApp),
|
||||
TriggerPumpLastConnection(mainApp)
|
||||
TriggerConnector(injector),
|
||||
TriggerTime(injector),
|
||||
TriggerRecurringTime(injector),
|
||||
TriggerTimeRange(injector),
|
||||
TriggerBg(injector),
|
||||
TriggerDelta(injector),
|
||||
TriggerIob(injector),
|
||||
TriggerCOB(injector),
|
||||
TriggerProfilePercent(injector),
|
||||
TriggerTempTarget(injector),
|
||||
TriggerWifiSsid(injector),
|
||||
TriggerLocation(injector),
|
||||
TriggerAutosensValue(injector),
|
||||
TriggerBolusAgo(injector),
|
||||
TriggerPumpLastConnection(injector)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,33 +2,17 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.general.automation.triggers.Trigger
|
||||
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
import kotlin.reflect.full.primaryConstructor
|
||||
|
||||
abstract class Action(val mainApp: MainApp) {
|
||||
abstract class Action(val injector: HasAndroidInjector) {
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var sp: SP
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
||||
|
||||
var precondition: Trigger? = null
|
||||
|
||||
|
@ -38,7 +22,7 @@ abstract class Action(val mainApp: MainApp) {
|
|||
@DrawableRes abstract fun icon(): Int
|
||||
|
||||
init {
|
||||
mainApp.androidInjector().inject(this)
|
||||
injector.androidInjector().inject(this)
|
||||
}
|
||||
|
||||
open fun generateDialog(root: LinearLayout) {}
|
||||
|
@ -62,7 +46,7 @@ abstract class Action(val mainApp: MainApp) {
|
|||
val type = obj.getString("type")
|
||||
val data = obj.optJSONObject("data")
|
||||
val clazz = Class.forName(type).kotlin
|
||||
return (clazz.primaryConstructor?.call(mainApp) as Action).fromJSON(data?.toString()
|
||||
return (clazz.primaryConstructor?.call(injector) as Action).fromJSON(data?.toString()
|
||||
?: "")
|
||||
//return (clazz.newInstance() as Action).fromJSON(data?.toString() ?: "")
|
||||
} catch (e: ClassNotFoundException) {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
|
||||
// Used for instantiation of other actions only
|
||||
class ActionDummy(mainApp: MainApp) : Action(mainApp) {
|
||||
class ActionDummy(injector: HasAndroidInjector) : Action(injector) {
|
||||
|
||||
override fun friendlyName(): Int {
|
||||
throw NotImplementedError("An operation is not implemented")
|
||||
|
|
|
@ -1,14 +1,25 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionLoopDisable(mainApp: MainApp) : Action(mainApp) {
|
||||
class ActionLoopDisable(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
|
||||
override fun friendlyName(): Int = R.string.disableloop
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.disableloop)
|
||||
|
@ -18,7 +29,7 @@ class ActionLoopDisable(mainApp: MainApp) : Action(mainApp) {
|
|||
if (loopPlugin.isEnabled(PluginType.LOOP)) {
|
||||
loopPlugin.setPluginEnabled(PluginType.LOOP, false)
|
||||
configBuilderPlugin.storeSettings("ActionLoopDisable")
|
||||
configBuilderPlugin.commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||
override fun run() {
|
||||
rxBus.send(EventRefreshOverview("ActionLoopDisable"))
|
||||
callback.result(result).run()
|
||||
|
|
|
@ -1,14 +1,23 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionLoopEnable(mainApp: MainApp) : Action(mainApp) {
|
||||
class ActionLoopEnable(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
|
||||
override fun friendlyName(): Int = R.string.enableloop
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.enableloop)
|
||||
|
|
|
@ -1,14 +1,23 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionLoopResume(mainApp: MainApp) : Action(mainApp) {
|
||||
class ActionLoopResume(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
|
||||
override fun friendlyName(): Int = R.string.resumeloop
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.resumeloop)
|
||||
|
|
|
@ -2,19 +2,27 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionLoopSuspend(mainApp: MainApp) : Action(mainApp) {
|
||||
var minutes = InputDuration(mainApp, 0, InputDuration.TimeUnit.MINUTES)
|
||||
class ActionLoopSuspend(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var loopPlugin: LoopPlugin
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
|
||||
var minutes = InputDuration(injector, 0, InputDuration.TimeUnit.MINUTES)
|
||||
|
||||
override fun friendlyName(): Int = R.string.suspendloop
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.suspendloopforXmin, minutes.getMinutes())
|
||||
|
@ -48,7 +56,7 @@ class ActionLoopSuspend(mainApp: MainApp) : Action(mainApp) {
|
|||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", minutes))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", minutes))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,10 +2,11 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputString
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder
|
||||
|
@ -14,10 +15,15 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotifi
|
|||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionNotification(mainApp: MainApp) : Action(mainApp) {
|
||||
var text = InputString(mainApp)
|
||||
class ActionNotification(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
|
||||
var text = InputString(injector)
|
||||
|
||||
override fun friendlyName(): Int = R.string.notification
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.notification_message, text.value)
|
||||
|
@ -49,7 +55,7 @@ class ActionNotification(mainApp: MainApp) : Action(mainApp) {
|
|||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp,resourceHelper.gs(R.string.message_short), "", text))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.message_short), "", text))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,20 +2,28 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
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.queue.Callback
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionProfileSwitch(mainApp: MainApp) : Action(mainApp) {
|
||||
var inputProfileName: InputProfileName = InputProfileName(mainApp, "")
|
||||
class ActionProfileSwitch(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
|
||||
var inputProfileName: InputProfileName = InputProfileName(injector, "")
|
||||
|
||||
override fun friendlyName(): Int = R.string.profilename
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.changengetoprofilename, inputProfileName.value)
|
||||
|
@ -39,19 +47,19 @@ class ActionProfileSwitch(mainApp: MainApp) : Action(mainApp) {
|
|||
callback.result(PumpEnactResult().success(true).comment(R.string.alreadyset))?.run()
|
||||
return
|
||||
}
|
||||
val profileStore = configBuilderPlugin.activeProfileInterface.profile ?: return
|
||||
val profileStore = activePlugin.activeProfileInterface.profile ?: return
|
||||
if (profileStore.getSpecificProfile(inputProfileName.value) == null) {
|
||||
aapsLogger.error(LTag.AUTOMATION, "Selected profile does not exist! - ${inputProfileName.value}")
|
||||
callback.result(PumpEnactResult().success(false).comment(R.string.notexists))?.run()
|
||||
return
|
||||
}
|
||||
treatmentsPlugin.doProfileSwitch(profileStore, inputProfileName.value, 0, 100, 0, DateUtil.now())
|
||||
activePlugin.activeTreatments.doProfileSwitch(profileStore, inputProfileName.value, 0, 100, 0, DateUtil.now())
|
||||
callback.result(PumpEnactResult().success(true).comment(R.string.ok))?.run()
|
||||
}
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.profilename), "", inputProfileName))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.profilename), "", inputProfileName))
|
||||
.build(root)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,10 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
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
|
||||
|
@ -13,11 +14,16 @@ import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuil
|
|||
import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerProfilePercent
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionProfileSwitchPercent(mainApp: MainApp) : Action(mainApp) {
|
||||
var pct = InputPercent(mainApp)
|
||||
var duration = InputDuration(mainApp, 0, InputDuration.TimeUnit.MINUTES)
|
||||
class ActionProfileSwitchPercent(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
var pct = InputPercent(injector)
|
||||
var duration = InputDuration(injector, 0, InputDuration.TimeUnit.MINUTES)
|
||||
|
||||
override fun friendlyName(): Int = R.string.profilepercentage
|
||||
override fun shortDescription(): String =
|
||||
|
@ -27,18 +33,18 @@ class ActionProfileSwitchPercent(mainApp: MainApp) : Action(mainApp) {
|
|||
@DrawableRes override fun icon(): Int = R.drawable.icon_actions_profileswitch
|
||||
|
||||
init {
|
||||
precondition = TriggerProfilePercent(mainApp, 100.0, Comparator.Compare.IS_EQUAL)
|
||||
precondition = TriggerProfilePercent(injector, 100.0, Comparator.Compare.IS_EQUAL)
|
||||
}
|
||||
|
||||
override fun doAction(callback: Callback) {
|
||||
treatmentsPlugin.doProfileSwitch(duration.value, pct.value.toInt(), 0)
|
||||
activePlugin.activeTreatments.doProfileSwitch(duration.value, pct.value.toInt(), 0)
|
||||
callback.result(PumpEnactResult().success(true).comment(R.string.ok))?.run()
|
||||
}
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.percent_u), "", pct))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", duration))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.percent_u), "", pct))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", duration))
|
||||
.build(root)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputString
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder
|
||||
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionSendSMS(mainApp: MainApp) : Action(mainApp) {
|
||||
var text = InputString(mainApp)
|
||||
class ActionSendSMS(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
||||
|
||||
var text = InputString(injector)
|
||||
|
||||
override fun friendlyName(): Int = R.string.sendsmsactiondescription
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.sendsmsactionlabel, text.value)
|
||||
|
@ -41,7 +47,7 @@ class ActionSendSMS(mainApp: MainApp) : Action(mainApp) {
|
|||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.sendsmsactiontext), "", text))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.sendsmsactiontext), "", text))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,13 +2,14 @@ package info.nightscout.androidaps.plugins.general.automation.actions
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.db.TempTarget
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.ComparatorExists
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputTempTarget
|
||||
|
@ -19,14 +20,19 @@ import info.nightscout.androidaps.queue.Callback
|
|||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetDouble
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import org.json.JSONObject
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionStartTempTarget(mainApp: MainApp) : Action(mainApp) {
|
||||
var value = InputTempTarget(mainApp)
|
||||
var duration = InputDuration(mainApp, 0, InputDuration.TimeUnit.MINUTES)
|
||||
class ActionStartTempTarget(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
var value = InputTempTarget(injector)
|
||||
var duration = InputDuration(injector, 0, InputDuration.TimeUnit.MINUTES)
|
||||
|
||||
init {
|
||||
precondition = TriggerTempTarget(mainApp, ComparatorExists.Compare.NOT_EXISTS)
|
||||
precondition = TriggerTempTarget(injector, ComparatorExists.Compare.NOT_EXISTS)
|
||||
}
|
||||
|
||||
override fun friendlyName(): Int = R.string.starttemptarget
|
||||
|
@ -34,15 +40,15 @@ class ActionStartTempTarget(mainApp: MainApp) : Action(mainApp) {
|
|||
@DrawableRes override fun icon(): Int = R.drawable.icon_cp_cgm_target
|
||||
|
||||
override fun doAction(callback: Callback) {
|
||||
treatmentsPlugin.addToHistoryTempTarget(tt())
|
||||
activePlugin.activeTreatments.addToHistoryTempTarget(tt())
|
||||
callback.result(PumpEnactResult().success(true).comment(R.string.ok))?.run()
|
||||
}
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
val unitResId = if (value.units == Constants.MGDL) R.string.mgdl else R.string.mmol
|
||||
LayoutBuilder()
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.careportal_temporarytarget) + "\n[" + resourceHelper.gs(unitResId) + "]", "", value))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", duration))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.careportal_temporarytarget) + "\n[" + resourceHelper.gs(unitResId) + "]", "", value))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.careportal_newnstreatment_duration_min_label), "", duration))
|
||||
.build(root)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.actions
|
||||
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.db.Source
|
||||
import info.nightscout.androidaps.db.TempTarget
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.queue.Callback
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActionStopTempTarget(mainApp: MainApp) : Action(mainApp) {
|
||||
class ActionStopTempTarget(injector: HasAndroidInjector) : Action(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
override fun friendlyName(): Int = R.string.stoptemptarget
|
||||
override fun shortDescription(): String = resourceHelper.gs(R.string.stoptemptarget)
|
||||
|
@ -21,7 +26,7 @@ class ActionStopTempTarget(mainApp: MainApp) : Action(mainApp) {
|
|||
.reason("Automation")
|
||||
.source(Source.USER)
|
||||
.low(0.0).high(0.0)
|
||||
treatmentsPlugin.addToHistoryTempTarget(tempTarget)
|
||||
activePlugin.activeTreatments.addToHistoryTempTarget(tempTarget)
|
||||
callback.result(PumpEnactResult().success(true).comment(R.string.ok))?.run()
|
||||
}
|
||||
}
|
|
@ -6,12 +6,15 @@ import android.widget.ArrayAdapter
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.Spinner
|
||||
import androidx.annotation.StringRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class Comparator(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class Comparator(mainApp: MainApp) : Element(mainApp) {
|
||||
enum class Compare {
|
||||
IS_LESSER,
|
||||
IS_EQUAL_OR_LESSER,
|
||||
|
@ -53,7 +56,7 @@ class Comparator(mainApp: MainApp) : Element(mainApp) {
|
|||
}
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, value : Compare) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Compare) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
|
|
|
@ -6,12 +6,15 @@ import android.widget.ArrayAdapter
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.Spinner
|
||||
import androidx.annotation.StringRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class ComparatorExists(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class ComparatorExists(mainApp: MainApp) : Element(mainApp) {
|
||||
enum class Compare {
|
||||
EXISTS, NOT_EXISTS;
|
||||
|
||||
|
@ -30,7 +33,7 @@ class ComparatorExists(mainApp: MainApp) : Element(mainApp) {
|
|||
}
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, value: Compare) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Compare) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,13 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import dagger.android.HasAndroidInjector
|
||||
|
||||
abstract class Element(val mainApp: MainApp) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||
abstract class Element(val injector: HasAndroidInjector) {
|
||||
|
||||
abstract fun addToLayout(root: LinearLayout)
|
||||
|
||||
init {
|
||||
mainApp.androidInjector().inject(this)
|
||||
injector.androidInjector().inject(this)
|
||||
}
|
||||
}
|
|
@ -1,13 +1,17 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputBg(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
|
||||
class InputBg(mainApp: MainApp) : Element(mainApp) {
|
||||
var units = Constants.MGDL
|
||||
var value = 0.0
|
||||
private var minValue = 0.0
|
||||
|
@ -15,9 +19,7 @@ class InputBg(mainApp: MainApp) : Element(mainApp) {
|
|||
private var step = 0.0
|
||||
private var decimalFormat: DecimalFormat? = null
|
||||
|
||||
|
||||
|
||||
constructor(mainApp: MainApp, value : Double, units: String) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Double, units: String) : this(injector) {
|
||||
setUnits(units)
|
||||
this.value = value
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@ package info.nightscout.androidaps.plugins.general.automation.elements
|
|||
|
||||
import android.widget.Button
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
|
||||
class InputButton(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputButton(injector: HasAndroidInjector) : Element(injector) {
|
||||
var text: String? = null
|
||||
var runnable: Runnable? = null
|
||||
|
||||
constructor(mainApp: MainApp, text: String, runnable: Runnable) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, text: String, runnable: Runnable) : this(injector) {
|
||||
this.text = text
|
||||
this.runnable = runnable
|
||||
}
|
||||
|
|
|
@ -2,22 +2,29 @@ package info.nightscout.androidaps.plugins.general.automation.elements
|
|||
|
||||
import android.app.DatePickerDialog
|
||||
import android.app.TimePickerDialog
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.text.format.DateFormat
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputDateTime(mainApp: MainApp) : Element(mainApp) {
|
||||
var value : Long = DateUtil.now()
|
||||
class InputDateTime(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var context: Context
|
||||
|
||||
constructor(mainApp: MainApp, value : Long) : this(mainApp) {
|
||||
var value: Long = DateUtil.now()
|
||||
|
||||
constructor(injector: HasAndroidInjector, value: Long) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
override fun addToLayout(root: LinearLayout) {
|
||||
val label = TextView(root.context)
|
||||
val dateButton = TextView(root.context)
|
||||
|
@ -66,7 +73,7 @@ class InputDateTime(mainApp: MainApp) : Element(mainApp) {
|
|||
TimePickerDialog(it, timeSetListener,
|
||||
cal.get(Calendar.HOUR_OF_DAY),
|
||||
cal.get(Calendar.MINUTE),
|
||||
DateFormat.is24HourFormat(mainApp)
|
||||
DateFormat.is24HourFormat(context)
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,14 +7,17 @@ import android.widget.ArrayAdapter
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.Spinner
|
||||
import androidx.annotation.StringRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.text.DecimalFormat
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputDelta(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class InputDelta(mainApp: MainApp) : Element(mainApp) {
|
||||
enum class DeltaType {
|
||||
DELTA, SHORT_AVERAGE, LONG_AVERAGE;
|
||||
|
||||
|
@ -43,7 +46,7 @@ class InputDelta(mainApp: MainApp) : Element(mainApp) {
|
|||
private var decimalFormat: DecimalFormat? = null
|
||||
var deltaType: DeltaType = DeltaType.DELTA
|
||||
|
||||
constructor(mainApp: MainApp, value: Double, minValue: Double, maxValue: Double, step: Double, decimalFormat: DecimalFormat, deltaType: DeltaType) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Double, minValue: Double, maxValue: Double, step: Double, decimalFormat: DecimalFormat, deltaType: DeltaType) : this(injector) {
|
||||
this.value = value
|
||||
this.minValue = minValue
|
||||
this.maxValue = maxValue
|
||||
|
@ -52,7 +55,7 @@ class InputDelta(mainApp: MainApp) : Element(mainApp) {
|
|||
this.deltaType = deltaType
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, inputDelta: InputDelta) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, inputDelta: InputDelta) : this(injector) {
|
||||
value = inputDelta.value
|
||||
minValue = inputDelta.minValue
|
||||
maxValue = inputDelta.maxValue
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class InputDouble(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputDouble(injector: HasAndroidInjector) : Element(injector) {
|
||||
var value = 0.0
|
||||
private var minValue = 0.0
|
||||
private var maxValue = 0.0
|
||||
|
@ -14,7 +14,7 @@ class InputDouble(mainApp: MainApp) : Element(mainApp) {
|
|||
private var decimalFormat: DecimalFormat? = null
|
||||
private var numberPicker: NumberPicker? = null
|
||||
|
||||
constructor(mainApp: MainApp, value: Double, minValue: Double, maxValue: Double, step: Double, decimalFormat: DecimalFormat) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Double, minValue: Double, maxValue: Double, step: Double, decimalFormat: DecimalFormat) : this(injector) {
|
||||
this.value = value
|
||||
this.minValue = minValue
|
||||
this.maxValue = maxValue
|
||||
|
@ -22,7 +22,7 @@ class InputDouble(mainApp: MainApp) : Element(mainApp) {
|
|||
this.decimalFormat = decimalFormat
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, inputDouble: InputDouble) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, inputDouble: InputDouble) : this(injector) {
|
||||
this.value = inputDouble.value
|
||||
this.minValue = inputDouble.minValue
|
||||
this.maxValue = inputDouble.maxValue
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class InputDuration(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputDuration(injector: HasAndroidInjector) : Element(injector) {
|
||||
enum class TimeUnit {
|
||||
MINUTES, HOURS
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, value: Int, unit: TimeUnit) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Int, unit: TimeUnit) : this(injector) {
|
||||
this.unit = unit
|
||||
this.value = value
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ class InputDuration(mainApp: MainApp) : Element(mainApp) {
|
|||
}
|
||||
|
||||
fun duplicate(): InputDuration {
|
||||
val i = InputDuration(mainApp)
|
||||
val i = InputDuration(injector)
|
||||
i.unit = unit
|
||||
i.value = value
|
||||
return i
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class InputInsulin(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputInsulin(injector: HasAndroidInjector) : Element(injector) {
|
||||
var value = 0.0
|
||||
|
||||
constructor(mainApp: MainApp, another: InputInsulin) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, another: InputInsulin) : this(injector) {
|
||||
value = another.value
|
||||
}
|
||||
|
||||
|
|
|
@ -6,12 +6,15 @@ import android.widget.ArrayAdapter
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.Spinner
|
||||
import androidx.annotation.StringRes
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputLocationMode(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class InputLocationMode(mainApp: MainApp) : Element(mainApp) {
|
||||
enum class Mode {
|
||||
INSIDE, OUTSIDE, GOING_IN, GOING_OUT;
|
||||
|
||||
|
@ -43,7 +46,7 @@ class InputLocationMode(mainApp: MainApp) : Element(mainApp) {
|
|||
|
||||
var value: Mode = Mode.INSIDE
|
||||
|
||||
constructor(mainApp: MainApp, value: InputLocationMode.Mode) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: InputLocationMode.Mode) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class InputPercent(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputPercent(injector: HasAndroidInjector) : Element(injector) {
|
||||
var value: Double = 100.0
|
||||
|
||||
constructor(mainApp: MainApp, value: Double) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: Double) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
|
|
|
@ -6,19 +6,24 @@ import android.widget.AdapterView
|
|||
import android.widget.ArrayAdapter
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.Spinner
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputProfileName(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
|
||||
class InputProfileName(mainApp: MainApp) : Element(mainApp) {
|
||||
var value: String = ""
|
||||
|
||||
constructor(mainApp: MainApp, name: String) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, name: String) : this(injector) {
|
||||
value = name
|
||||
}
|
||||
|
||||
override fun addToLayout(root: LinearLayout) {
|
||||
val profileStore = configBuilderPlugin.activeProfileInterface.profile ?: return
|
||||
val profileStore = activePlugin.activeProfileInterface.profile ?: return
|
||||
val profileList = profileStore.getProfileList()
|
||||
val adapter = ArrayAdapter(root.context, R.layout.spinner_centered, profileList)
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
|
|
|
@ -5,9 +5,9 @@ import android.text.TextWatcher
|
|||
import android.view.ViewGroup
|
||||
import android.widget.EditText
|
||||
import android.widget.LinearLayout
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
|
||||
class InputString(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputString(injector: HasAndroidInjector) : Element(injector) {
|
||||
var textWatcher: TextWatcher = object : TextWatcher {
|
||||
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
|
||||
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
|
||||
|
@ -17,7 +17,7 @@ class InputString(mainApp: MainApp) : Element(mainApp) {
|
|||
}
|
||||
var value = ""
|
||||
|
||||
constructor(mainApp: MainApp, value: String) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, value: String) : this(injector) {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.widget.LinearLayout
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.utils.NumberPicker
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class InputTempTarget(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputTempTarget(injector: HasAndroidInjector) : Element(injector) {
|
||||
var units = Constants.MGDL
|
||||
var value = 0.0
|
||||
|
||||
|
@ -15,7 +15,7 @@ class InputTempTarget(mainApp: MainApp) : Element(mainApp) {
|
|||
value = if (units == Constants.MMOL) 6.0 else 110.0
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, inputTempTarget: InputTempTarget) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, inputTempTarget: InputTempTarget) : this(injector) {
|
||||
value = inputTempTarget.value
|
||||
units = inputTempTarget.units
|
||||
}
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.app.TimePickerDialog
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.text.format.DateFormat
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.MidnightTime
|
||||
import info.nightscout.androidaps.utils.T
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputTime(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var context: Context
|
||||
|
||||
class InputTime(mainApp: MainApp) : Element(mainApp) {
|
||||
var value: Int = getMinSinceMidnight(DateUtil.now())
|
||||
|
||||
override fun addToLayout(root: LinearLayout) {
|
||||
|
@ -34,7 +40,7 @@ class InputTime(mainApp: MainApp) : Element(mainApp) {
|
|||
TimePickerDialog(it, startTimeSetListener,
|
||||
cal.get(Calendar.HOUR_OF_DAY),
|
||||
cal.get(Calendar.MINUTE),
|
||||
DateFormat.is24HourFormat(mainApp)
|
||||
DateFormat.is24HourFormat(context)
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.elements
|
||||
|
||||
import android.app.TimePickerDialog
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.text.format.DateFormat
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.utils.DateUtil
|
||||
import info.nightscout.androidaps.utils.MidnightTime
|
||||
import info.nightscout.androidaps.utils.T
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class InputTimeRange(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
@Inject lateinit var context: Context
|
||||
|
||||
class InputTimeRange(mainApp: MainApp) : Element(mainApp) {
|
||||
var start: Int = getMinSinceMidnight(DateUtil.now())
|
||||
var end: Int = getMinSinceMidnight(DateUtil.now())
|
||||
|
||||
|
@ -38,7 +44,7 @@ class InputTimeRange(mainApp: MainApp) : Element(mainApp) {
|
|||
TimePickerDialog(it, startTimeSetListener,
|
||||
cal.get(Calendar.HOUR_OF_DAY),
|
||||
cal.get(Calendar.MINUTE),
|
||||
DateFormat.is24HourFormat(mainApp)
|
||||
DateFormat.is24HourFormat(context)
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +61,7 @@ class InputTimeRange(mainApp: MainApp) : Element(mainApp) {
|
|||
TimePickerDialog(it, endTimeSetListener,
|
||||
cal.get(Calendar.HOUR_OF_DAY),
|
||||
cal.get(Calendar.MINUTE),
|
||||
DateFormat.is24HourFormat(mainApp)
|
||||
DateFormat.is24HourFormat(context)
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,11 @@ import android.view.ViewGroup
|
|||
import android.widget.LinearLayout
|
||||
import androidx.annotation.StringRes
|
||||
import com.dpro.widgets.WeekdaysPicker
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import java.util.*
|
||||
|
||||
class InputWeekDay(mainApp: MainApp) : Element(mainApp) {
|
||||
class InputWeekDay(injector: HasAndroidInjector) : Element(injector) {
|
||||
|
||||
enum class DayOfWeek {
|
||||
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
|
||||
|
|
|
@ -5,14 +5,18 @@ import android.view.ViewGroup
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.TableLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class LabelWithElement(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class LabelWithElement(mainApp: MainApp) : Element(mainApp) {
|
||||
var element: Element? = null
|
||||
var textPre: String = ""
|
||||
var textPost: String = ""
|
||||
|
||||
constructor(mainApp: MainApp, textPre: String, textPost: String, element: Element) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, textPre: String, textPost: String, element: Element) : this(injector) {
|
||||
this.textPre = textPre
|
||||
this.textPost = textPost
|
||||
this.element = element
|
||||
|
|
|
@ -4,19 +4,23 @@ import android.graphics.Typeface
|
|||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.automation.triggers.Trigger
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class StaticLabel(injector: HasAndroidInjector) : Element(injector) {
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
||||
class StaticLabel(mainApp: MainApp) : Element(mainApp) {
|
||||
var label = ""
|
||||
var trigger: Trigger? = null
|
||||
|
||||
constructor(mainApp: MainApp, label: String, trigger: Trigger) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, label: String, trigger: Trigger) : this(injector) {
|
||||
this.label = label
|
||||
this.trigger = trigger
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, resourceId: Int, trigger: Trigger) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, resourceId: Int, trigger: Trigger) : this(injector) {
|
||||
label = resourceHelper.gs(resourceId)
|
||||
this.trigger = trigger
|
||||
}
|
||||
|
|
|
@ -8,12 +8,11 @@ import android.widget.LinearLayout
|
|||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.ChooseTriggerDialog
|
||||
import info.nightscout.androidaps.plugins.general.automation.events.EventTriggerChanged
|
||||
|
@ -22,7 +21,6 @@ import info.nightscout.androidaps.plugins.general.automation.events.EventTrigger
|
|||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||
import info.nightscout.androidaps.services.LastLocationDataContainer
|
||||
import info.nightscout.androidaps.services.LocationService
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
import org.json.JSONException
|
||||
|
@ -30,7 +28,7 @@ import org.json.JSONObject
|
|||
import javax.inject.Inject
|
||||
import kotlin.reflect.full.primaryConstructor
|
||||
|
||||
abstract class Trigger(val mainApp: MainApp) {
|
||||
abstract class Trigger(val injector: HasAndroidInjector) {
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var rxBus: RxBusWrapper
|
||||
@Inject lateinit var resourceHelper: ResourceHelper
|
||||
|
@ -38,11 +36,11 @@ abstract class Trigger(val mainApp: MainApp) {
|
|||
@Inject lateinit var sp: SP
|
||||
@Inject lateinit var locationDataContainer: LastLocationDataContainer
|
||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||
@Inject lateinit var activePluginProvider: ActivePluginProvider
|
||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||
@Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin
|
||||
|
||||
init {
|
||||
mainApp.androidInjector().inject(this)
|
||||
injector.androidInjector().inject(this)
|
||||
}
|
||||
|
||||
abstract fun shouldRun(): Boolean
|
||||
|
@ -77,7 +75,7 @@ abstract class Trigger(val mainApp: MainApp) {
|
|||
val type = obj.getString("type")
|
||||
val data = obj.getJSONObject("data")
|
||||
val clazz = Class.forName(type).kotlin
|
||||
return (clazz.primaryConstructor?.call(mainApp) as Trigger).fromJSON(data?.toString()
|
||||
return (clazz.primaryConstructor?.call(injector) as Trigger).fromJSON(data?.toString()
|
||||
?: "")
|
||||
} catch (e: ClassNotFoundException) {
|
||||
aapsLogger.error("Unhandled exception", e)
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -15,18 +15,18 @@ import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
|||
import org.json.JSONObject
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class TriggerAutosensValue(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerAutosensValue(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private val minValue = (sp.getDouble(R.string.key_openapsama_autosens_min, 0.7) * 100).toInt()
|
||||
private val maxValue = (sp.getDouble(R.string.key_openapsama_autosens_max, 1.2) * 100).toInt()
|
||||
private val step = 1.0
|
||||
private val decimalFormat = DecimalFormat("1")
|
||||
private var autosens: InputDouble = InputDouble(mainApp, 100.0, minValue.toDouble(), maxValue.toDouble(), step, decimalFormat)
|
||||
private var autosens: InputDouble = InputDouble(injector, 100.0, minValue.toDouble(), maxValue.toDouble(), step, decimalFormat)
|
||||
|
||||
var comparator: Comparator = Comparator(mainApp)
|
||||
var comparator: Comparator = Comparator(injector)
|
||||
|
||||
private constructor(mainApp: MainApp, triggerAutosensValue: TriggerAutosensValue) : this(mainApp) {
|
||||
autosens = InputDouble(mainApp, triggerAutosensValue.autosens)
|
||||
comparator = Comparator(mainApp, triggerAutosensValue.comparator.value)
|
||||
private constructor(injector: HasAndroidInjector, triggerAutosensValue: TriggerAutosensValue) : this(injector) {
|
||||
autosens = InputDouble(injector, triggerAutosensValue.autosens)
|
||||
comparator = Comparator(injector, triggerAutosensValue.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -70,13 +70,13 @@ class TriggerAutosensValue(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.`as`)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerAutosensValue(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerAutosensValue(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.autosenslabel, this))
|
||||
.add(StaticLabel(injector, R.string.autosenslabel, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.autosenslabel) + ": ", "", autosens))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.autosenslabel) + ": ", "", autosens))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,8 +2,8 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -16,18 +16,18 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
|||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerBg(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var bg = InputBg(mainApp)
|
||||
var comparator = Comparator(mainApp)
|
||||
class TriggerBg(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var bg = InputBg(injector)
|
||||
var comparator = Comparator(injector)
|
||||
|
||||
constructor(mainApp: MainApp, value: Double, units: String, compare: Comparator.Compare) : this(mainApp) {
|
||||
bg = InputBg(mainApp, value, units)
|
||||
comparator = Comparator(mainApp, compare)
|
||||
constructor(injector: HasAndroidInjector, value: Double, units: String, compare: Comparator.Compare) : this(injector) {
|
||||
bg = InputBg(injector, value, units)
|
||||
comparator = Comparator(injector, compare)
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerBg: TriggerBg) : this(mainApp) {
|
||||
bg = InputBg(mainApp, triggerBg.bg.value, triggerBg.bg.units)
|
||||
comparator = Comparator(mainApp, triggerBg.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerBg: TriggerBg) : this(injector) {
|
||||
bg = InputBg(injector, triggerBg.bg.value, triggerBg.bg.units)
|
||||
comparator = Comparator(injector, triggerBg.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -78,13 +78,13 @@ class TriggerBg(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.icon_cp_bgcheck)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerBg(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerBg(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.glucose, this))
|
||||
.add(StaticLabel(injector, R.string.glucose, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.glucose_u, bg.units), "", bg))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.glucose_u, bg.units), "", bg))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -15,13 +15,13 @@ import info.nightscout.androidaps.utils.JsonHelper
|
|||
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerBolusAgo(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var minutesAgo: InputDuration = InputDuration(mainApp, 0, InputDuration.TimeUnit.MINUTES)
|
||||
var comparator: Comparator = Comparator(mainApp)
|
||||
class TriggerBolusAgo(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var minutesAgo: InputDuration = InputDuration(injector, 0, InputDuration.TimeUnit.MINUTES)
|
||||
var comparator: Comparator = Comparator(injector)
|
||||
|
||||
private constructor(mainApp: MainApp, triggerBolusAgo: TriggerBolusAgo) : this(mainApp) {
|
||||
minutesAgo = InputDuration(mainApp, triggerBolusAgo.minutesAgo.value, InputDuration.TimeUnit.MINUTES)
|
||||
comparator = Comparator(mainApp, triggerBolusAgo.comparator.value)
|
||||
private constructor(injector: HasAndroidInjector, triggerBolusAgo: TriggerBolusAgo) : this(injector) {
|
||||
minutesAgo = InputDuration(injector, triggerBolusAgo.minutesAgo.value, InputDuration.TimeUnit.MINUTES)
|
||||
comparator = Comparator(injector, triggerBolusAgo.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -69,13 +69,13 @@ class TriggerBolusAgo(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.icon_bolus)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerBolusAgo(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerBolusAgo(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.lastboluslabel, this))
|
||||
.add(StaticLabel(injector, R.string.lastboluslabel, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.lastboluslabel) + ": ", "", minutesAgo))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.lastboluslabel) + ": ", "", minutesAgo))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -15,15 +15,15 @@ import info.nightscout.androidaps.utils.JsonHelper.safeGetDouble
|
|||
import org.json.JSONObject
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class TriggerCOB(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerCOB(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private val minValue = 0
|
||||
private val maxValue = sp.getInt(R.string.key_treatmentssafety_maxcarbs, 48)
|
||||
private var cob: InputDouble = InputDouble(mainApp, 0.0, minValue.toDouble(), maxValue.toDouble(), 1.0, DecimalFormat("1"))
|
||||
var comparator: Comparator = Comparator(mainApp)
|
||||
private var cob: InputDouble = InputDouble(injector, 0.0, minValue.toDouble(), maxValue.toDouble(), 1.0, DecimalFormat("1"))
|
||||
var comparator: Comparator = Comparator(injector)
|
||||
|
||||
private constructor(mainApp: MainApp, triggerCOB: TriggerCOB) : this(mainApp) {
|
||||
cob = InputDouble(mainApp, triggerCOB.cob)
|
||||
comparator = Comparator(mainApp, triggerCOB.comparator.value)
|
||||
private constructor(injector: HasAndroidInjector, triggerCOB: TriggerCOB) : this(injector) {
|
||||
cob = InputDouble(injector, triggerCOB.cob)
|
||||
comparator = Comparator(injector, triggerCOB.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -69,13 +69,13 @@ class TriggerCOB(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.icon_cp_bolus_carbs)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerCOB(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerCOB(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.triggercoblabel, this))
|
||||
.add(StaticLabel(injector, R.string.triggercoblabel, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.triggercoblabel) + ": ", "", cob))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.triggercoblabel) + ": ", "", cob))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ import android.widget.LinearLayout
|
|||
import android.widget.Spinner
|
||||
import androidx.annotation.StringRes
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
||||
|
@ -18,11 +18,11 @@ import org.json.JSONArray
|
|||
import org.json.JSONObject
|
||||
import java.util.*
|
||||
|
||||
class TriggerConnector(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerConnector(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
var list: MutableList<Trigger> = ArrayList()
|
||||
private var connectorType: Type = Type.AND
|
||||
// TODO move to TriggerConnector
|
||||
//var connector: TriggerConnector = TriggerConnector(mainApp, TriggerConnector.Type.AND)
|
||||
//var connector: TriggerConnector = TriggerConnector(injector, TriggerConnector.Type.AND)
|
||||
|
||||
enum class Type {
|
||||
AND, OR, XOR;
|
||||
|
@ -52,7 +52,7 @@ class TriggerConnector(mainApp: MainApp) : Trigger(mainApp) {
|
|||
}
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, connectorType: Type) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, connectorType: Type) : this(injector) {
|
||||
this.connectorType = connectorType
|
||||
}
|
||||
|
||||
|
@ -120,7 +120,7 @@ class TriggerConnector(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.absent()
|
||||
|
||||
override fun duplicate(): Trigger = TriggerConnector(mainApp, connectorType)
|
||||
override fun duplicate(): Trigger = TriggerConnector(injector, connectorType)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
val padding = resourceHelper.dpToPx(5)
|
||||
|
|
|
@ -2,8 +2,8 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.Constants
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -18,11 +18,11 @@ import info.nightscout.androidaps.utils.JsonHelper
|
|||
import org.json.JSONObject
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class TriggerDelta(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerDelta(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
|
||||
var units: String = Constants.MGDL
|
||||
private var delta: InputDelta = InputDelta(mainApp)
|
||||
var comparator: Comparator = Comparator(mainApp)
|
||||
private var delta: InputDelta = InputDelta(injector)
|
||||
var comparator: Comparator = Comparator(injector)
|
||||
|
||||
companion object {
|
||||
private const val MMOL_MAX = 4.0
|
||||
|
@ -31,14 +31,14 @@ class TriggerDelta(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
init {
|
||||
units = profileFunction.getUnits()
|
||||
delta = if (units == Constants.MMOL) InputDelta(mainApp, 0.0, (-MMOL_MAX), MMOL_MAX, 0.1, DecimalFormat("0.1"), DeltaType.DELTA)
|
||||
else InputDelta(mainApp, 0.0, (-MGDL_MAX), MGDL_MAX, 1.0, DecimalFormat("1"), DeltaType.DELTA)
|
||||
delta = if (units == Constants.MMOL) InputDelta(injector, 0.0, (-MMOL_MAX), MMOL_MAX, 0.1, DecimalFormat("0.1"), DeltaType.DELTA)
|
||||
else InputDelta(injector, 0.0, (-MGDL_MAX), MGDL_MAX, 1.0, DecimalFormat("1"), DeltaType.DELTA)
|
||||
}
|
||||
|
||||
private constructor(mainApp: MainApp, triggerDelta: TriggerDelta) : this(mainApp) {
|
||||
private constructor(injector: HasAndroidInjector, triggerDelta: TriggerDelta) : this(injector) {
|
||||
units = triggerDelta.units
|
||||
delta = InputDelta(mainApp, triggerDelta.delta)
|
||||
comparator = Comparator(mainApp, triggerDelta.comparator.value)
|
||||
delta = InputDelta(injector, triggerDelta.delta)
|
||||
comparator = Comparator(injector, triggerDelta.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -81,8 +81,8 @@ class TriggerDelta(mainApp: MainApp) : Trigger(mainApp) {
|
|||
val type = DeltaType.valueOf(JsonHelper.safeGetString(d, "deltaType", ""))
|
||||
val value = JsonHelper.safeGetDouble(d, "value")
|
||||
delta =
|
||||
if (units == Constants.MMOL) InputDelta(mainApp, value, (-MMOL_MAX), MMOL_MAX, 0.1, DecimalFormat("0.1"), type)
|
||||
else InputDelta(mainApp, value, (-MGDL_MAX), MGDL_MAX, 1.0, DecimalFormat("1"), type)
|
||||
if (units == Constants.MMOL) InputDelta(injector, value, (-MMOL_MAX), MMOL_MAX, 0.1, DecimalFormat("0.1"), type)
|
||||
else InputDelta(injector, value, (-MGDL_MAX), MGDL_MAX, 1.0, DecimalFormat("1"), type)
|
||||
comparator.setValue(Comparator.Compare.valueOf(JsonHelper.safeGetString(d, "comparator")!!))
|
||||
return this
|
||||
}
|
||||
|
@ -94,13 +94,13 @@ class TriggerDelta(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.icon_auto_delta)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerDelta(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerDelta(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.deltalabel, this))
|
||||
.add(StaticLabel(injector, R.string.deltalabel, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.deltalabel_u, units) + ": ", "", delta))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.deltalabel_u, units) + ": ", "", delta))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package info.nightscout.androidaps.plugins.general.automation.triggers
|
||||
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
|
||||
// Used for instantiation of other triggers only
|
||||
class TriggerDummy(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerDummy(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
throw NotImplementedError("An operation is not implemented")
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -14,13 +14,13 @@ import info.nightscout.androidaps.utils.DateUtil
|
|||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerIob(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var insulin = InputInsulin(mainApp)
|
||||
var comparator: Comparator = Comparator(mainApp)
|
||||
class TriggerIob(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var insulin = InputInsulin(injector)
|
||||
var comparator: Comparator = Comparator(injector)
|
||||
|
||||
constructor(mainApp: MainApp, triggerIob: TriggerIob) : this(mainApp) {
|
||||
insulin = InputInsulin(mainApp, triggerIob.insulin)
|
||||
comparator = Comparator(mainApp, triggerIob.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerIob: TriggerIob) : this(injector) {
|
||||
insulin = InputInsulin(injector, triggerIob.insulin)
|
||||
comparator = Comparator(injector, triggerIob.comparator.value)
|
||||
}
|
||||
|
||||
val value: Double = 0.0
|
||||
|
@ -60,13 +60,13 @@ class TriggerIob(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_keyboard_capslock)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerIob(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerIob(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.iob, this))
|
||||
.add(StaticLabel(injector, R.string.iob, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.iob_u), "", insulin))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.iob_u), "", insulin))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
import android.location.Location
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
||||
|
@ -11,12 +11,12 @@ import info.nightscout.androidaps.utils.JsonHelper
|
|||
import org.json.JSONObject
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class TriggerLocation(mainApp: MainApp) : Trigger(mainApp) {
|
||||
var latitude = InputDouble(mainApp, 0.0, -90.0, +90.0, 0.000001, DecimalFormat("0.000000"))
|
||||
var longitude = InputDouble(mainApp, 0.0, -180.0, +180.0, 0.000001, DecimalFormat("0.000000"))
|
||||
var distance = InputDouble(mainApp, 200.0, 0.0, 100000.0, 10.0, DecimalFormat("0"))
|
||||
var modeSelected = InputLocationMode(mainApp)
|
||||
var name: InputString = InputString(mainApp)
|
||||
class TriggerLocation(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
var latitude = InputDouble(injector, 0.0, -90.0, +90.0, 0.000001, DecimalFormat("0.000000"))
|
||||
var longitude = InputDouble(injector, 0.0, -180.0, +180.0, 0.000001, DecimalFormat("0.000000"))
|
||||
var distance = InputDouble(injector, 200.0, 0.0, 100000.0, 10.0, DecimalFormat("0"))
|
||||
var modeSelected = InputLocationMode(injector)
|
||||
var name: InputString = InputString(injector)
|
||||
|
||||
var lastMode = InputLocationMode.Mode.INSIDE
|
||||
private val buttonAction = Runnable {
|
||||
|
@ -27,11 +27,11 @@ class TriggerLocation(mainApp: MainApp) : Trigger(mainApp) {
|
|||
}
|
||||
}
|
||||
|
||||
private constructor(mainApp: MainApp, triggerLocation: TriggerLocation) : this(mainApp) {
|
||||
latitude = InputDouble(mainApp, triggerLocation.latitude)
|
||||
longitude = InputDouble(mainApp, triggerLocation.longitude)
|
||||
distance = InputDouble(mainApp, triggerLocation.distance)
|
||||
modeSelected = InputLocationMode(mainApp, triggerLocation.modeSelected.value)
|
||||
private constructor(injector: HasAndroidInjector, triggerLocation: TriggerLocation) : this(injector) {
|
||||
latitude = InputDouble(injector, triggerLocation.latitude)
|
||||
longitude = InputDouble(injector, triggerLocation.longitude)
|
||||
distance = InputDouble(injector, triggerLocation.distance)
|
||||
modeSelected = InputLocationMode(injector, triggerLocation.modeSelected.value)
|
||||
if (modeSelected.value == InputLocationMode.Mode.GOING_OUT)
|
||||
lastMode = InputLocationMode.Mode.OUTSIDE
|
||||
name = triggerLocation.name
|
||||
|
@ -87,17 +87,17 @@ class TriggerLocation(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_location_on)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerLocation(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerLocation(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.location, this))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.name_short), "", name))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.latitude_short), "", latitude))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.longitude_short), "", longitude))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.distance_short), "", distance))
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.location_mode), "", modeSelected))
|
||||
.add(InputButton(mainApp, resourceHelper.gs(R.string.currentlocation), buttonAction), locationDataContainer.lastLocation != null)
|
||||
.add(StaticLabel(injector, R.string.location, this))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.name_short), "", name))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.latitude_short), "", latitude))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.longitude_short), "", longitude))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.distance_short), "", distance))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.location_mode), "", modeSelected))
|
||||
.add(InputButton(injector, resourceHelper.gs(R.string.currentlocation), buttonAction), locationDataContainer.lastLocation != null)
|
||||
.build(root)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -13,18 +13,18 @@ import info.nightscout.androidaps.plugins.general.automation.elements.StaticLabe
|
|||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerProfilePercent(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var pct = InputPercent(mainApp)
|
||||
var comparator = Comparator(mainApp)
|
||||
class TriggerProfilePercent(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var pct = InputPercent(injector)
|
||||
var comparator = Comparator(injector)
|
||||
|
||||
constructor(mainApp: MainApp, value: Double, compare: Comparator.Compare) : this(mainApp) {
|
||||
pct = InputPercent(mainApp, value)
|
||||
comparator = Comparator(mainApp, compare)
|
||||
constructor(injector: HasAndroidInjector, value: Double, compare: Comparator.Compare) : this(injector) {
|
||||
pct = InputPercent(injector, value)
|
||||
comparator = Comparator(injector, compare)
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerProfilePercent: TriggerProfilePercent) : this(mainApp) {
|
||||
pct = InputPercent(mainApp, triggerProfilePercent.pct.value)
|
||||
comparator = Comparator(mainApp, triggerProfilePercent.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerProfilePercent: TriggerProfilePercent) : this(injector) {
|
||||
pct = InputPercent(injector, triggerProfilePercent.pct.value)
|
||||
comparator = Comparator(injector, triggerProfilePercent.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -69,13 +69,13 @@ class TriggerProfilePercent(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.icon_actions_profileswitch)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerProfilePercent(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerProfilePercent(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.profilepercentage, this))
|
||||
.add(StaticLabel(injector, R.string.profilepercentage, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.percent_u), "", pct))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.percent_u), "", pct))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -15,22 +15,22 @@ import info.nightscout.androidaps.utils.JsonHelper.safeGetInt
|
|||
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerPumpLastConnection(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var minutesAgo = InputDuration(mainApp)
|
||||
private var comparator = Comparator(mainApp)
|
||||
class TriggerPumpLastConnection(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var minutesAgo = InputDuration(injector)
|
||||
private var comparator = Comparator(injector)
|
||||
|
||||
constructor(mainApp: MainApp, value: Int, unit: InputDuration.TimeUnit, compare: Comparator.Compare) : this(mainApp) {
|
||||
minutesAgo = InputDuration(mainApp, value, unit)
|
||||
comparator = Comparator(mainApp, compare)
|
||||
constructor(injector: HasAndroidInjector, value: Int, unit: InputDuration.TimeUnit, compare: Comparator.Compare) : this(injector) {
|
||||
minutesAgo = InputDuration(injector, value, unit)
|
||||
comparator = Comparator(injector, compare)
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerPumpLastConnection: TriggerPumpLastConnection) : this(mainApp) {
|
||||
minutesAgo = InputDuration(mainApp, triggerPumpLastConnection.minutesAgo.value, triggerPumpLastConnection.minutesAgo.unit)
|
||||
comparator = Comparator(mainApp, triggerPumpLastConnection.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerPumpLastConnection: TriggerPumpLastConnection) : this(injector) {
|
||||
minutesAgo = InputDuration(injector, triggerPumpLastConnection.minutesAgo.value, triggerPumpLastConnection.minutesAgo.unit)
|
||||
comparator = Comparator(injector, triggerPumpLastConnection.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
val lastConnection = activePluginProvider.activePump?.lastDataTime() ?: return false
|
||||
val lastConnection = activePlugin.activePumpPlugin?.lastDataTime() ?: return false
|
||||
if (lastConnection == 0L && comparator.value === Comparator.Compare.IS_NOT_AVAILABLE) {
|
||||
aapsLogger.debug(LTag.AUTOMATION, "Ready for execution: " + friendlyDescription())
|
||||
return true
|
||||
|
@ -69,13 +69,13 @@ class TriggerPumpLastConnection(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.remove)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerPumpLastConnection(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerPumpLastConnection(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.automation_trigger_pump_last_connection_label, this))
|
||||
.add(StaticLabel(injector, R.string.automation_trigger_pump_last_connection_label, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.automation_trigger_pump_last_connection_description) + ": ", "", minutesAgo))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.automation_trigger_pump_last_connection_description) + ": ", "", minutesAgo))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -17,11 +17,11 @@ import info.nightscout.androidaps.utils.T
|
|||
import org.json.JSONObject
|
||||
import java.util.*
|
||||
|
||||
class TriggerRecurringTime(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private val days = InputWeekDay(mainApp)
|
||||
private val time = InputTime(mainApp)
|
||||
class TriggerRecurringTime(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private val days = InputWeekDay(injector)
|
||||
private val time = InputTime(injector)
|
||||
|
||||
constructor(mainApp: MainApp, triggerRecurringTime: TriggerRecurringTime) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, triggerRecurringTime: TriggerRecurringTime) : this(injector) {
|
||||
this.time.value = triggerRecurringTime.time.value
|
||||
if (days.weekdays.size >= 0)
|
||||
System.arraycopy(triggerRecurringTime.days.weekdays, 0, days.weekdays, 0, triggerRecurringTime.days.weekdays.size)
|
||||
|
@ -86,7 +86,7 @@ class TriggerRecurringTime(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_access_alarm_24dp)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerRecurringTime(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerRecurringTime(injector, this)
|
||||
|
||||
private fun toMills(minutesSinceMidnight: Int): Long = MidnightTime.calc() + T.mins(minutesSinceMidnight.toLong()).msecs()
|
||||
|
||||
|
@ -94,7 +94,7 @@ class TriggerRecurringTime(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.recurringTime, this))
|
||||
.add(StaticLabel(injector, R.string.recurringTime, this))
|
||||
.add(days)
|
||||
.add(time)
|
||||
.build(root)
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.ComparatorExists
|
||||
|
@ -11,15 +11,15 @@ import info.nightscout.androidaps.plugins.general.automation.elements.StaticLabe
|
|||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerTempTarget(mainApp: MainApp) : Trigger(mainApp) {
|
||||
var comparator = ComparatorExists(mainApp)
|
||||
class TriggerTempTarget(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
var comparator = ComparatorExists(injector)
|
||||
|
||||
constructor(mainApp: MainApp, compare: ComparatorExists.Compare) : this(mainApp) {
|
||||
comparator = ComparatorExists(mainApp, compare)
|
||||
constructor(injector: HasAndroidInjector, compare: ComparatorExists.Compare) : this(injector) {
|
||||
comparator = ComparatorExists(injector, compare)
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerTempTarget: TriggerTempTarget) : this(mainApp) {
|
||||
comparator = ComparatorExists(mainApp, triggerTempTarget.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerTempTarget: TriggerTempTarget) : this(injector) {
|
||||
comparator = ComparatorExists(injector, triggerTempTarget.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -58,11 +58,11 @@ class TriggerTempTarget(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_keyboard_tab)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerTempTarget(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerTempTarget(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.careportal_temporarytarget, this))
|
||||
.add(StaticLabel(injector, R.string.careportal_temporarytarget, this))
|
||||
.add(comparator)
|
||||
.build(root)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.InputDateTime
|
||||
|
@ -13,14 +13,14 @@ import info.nightscout.androidaps.utils.JsonHelper
|
|||
import info.nightscout.androidaps.utils.T
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerTime(mainApp: MainApp) : Trigger(mainApp) {
|
||||
var time = InputDateTime(mainApp)
|
||||
class TriggerTime(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
var time = InputDateTime(injector)
|
||||
|
||||
constructor(mainApp: MainApp, runAt: Long) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, runAt: Long) : this(injector) {
|
||||
this.time.value = runAt
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerTime: TriggerTime) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, triggerTime: TriggerTime) : this(injector) {
|
||||
this.time.value = triggerTime.time.value
|
||||
}
|
||||
|
||||
|
@ -56,11 +56,11 @@ class TriggerTime(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_access_alarm_24dp)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerTime(mainApp, time.value)
|
||||
override fun duplicate(): Trigger = TriggerTime(injector, time.value)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.time, this))
|
||||
.add(StaticLabel(injector, R.string.time, this))
|
||||
.add(time)
|
||||
.build(root)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.data.Profile
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
|
@ -16,17 +16,17 @@ import info.nightscout.androidaps.utils.T
|
|||
import org.json.JSONObject
|
||||
|
||||
// Trigger for time range ( from 10:00AM till 13:00PM )
|
||||
class TriggerTimeRange(mainApp: MainApp) : Trigger(mainApp) {
|
||||
class TriggerTimeRange(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
|
||||
// in minutes since midnight 60 means 1AM
|
||||
var range = InputTimeRange(mainApp)
|
||||
var range = InputTimeRange(injector)
|
||||
|
||||
constructor(mainApp: MainApp, start: Int, end: Int) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, start: Int, end: Int) : this(injector) {
|
||||
range.start = start
|
||||
range.end = end
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerTimeRange: TriggerTimeRange) : this(mainApp) {
|
||||
constructor(injector: HasAndroidInjector, triggerTimeRange: TriggerTimeRange) : this(injector) {
|
||||
range.start = triggerTimeRange.range.start
|
||||
range.end = triggerTimeRange.range.end
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ class TriggerTimeRange(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_access_alarm_24dp)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerTimeRange(mainApp, range.start, range.end)
|
||||
override fun duplicate(): Trigger = TriggerTimeRange(injector, range.start, range.end)
|
||||
|
||||
private fun toMills(minutesSinceMidnight: Int): Long = MidnightTime.calc() + T.mins(minutesSinceMidnight.toLong()).msecs()
|
||||
|
||||
|
@ -76,7 +76,7 @@ class TriggerTimeRange(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.time_range, this))
|
||||
.add(StaticLabel(injector, R.string.time_range, this))
|
||||
.add(range)
|
||||
.build(root)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
|
|||
|
||||
import android.widget.LinearLayout
|
||||
import com.google.common.base.Optional
|
||||
import info.nightscout.androidaps.MainApp
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.logging.LTag
|
||||
import info.nightscout.androidaps.plugins.general.automation.elements.Comparator
|
||||
|
@ -14,18 +14,18 @@ import info.nightscout.androidaps.receivers.NetworkChangeReceiver
|
|||
import info.nightscout.androidaps.utils.JsonHelper
|
||||
import org.json.JSONObject
|
||||
|
||||
class TriggerWifiSsid(mainApp: MainApp) : Trigger(mainApp) {
|
||||
private var ssid = InputString(mainApp)
|
||||
var comparator = Comparator(mainApp)
|
||||
class TriggerWifiSsid(injector: HasAndroidInjector) : Trigger(injector) {
|
||||
private var ssid = InputString(injector)
|
||||
var comparator = Comparator(injector)
|
||||
|
||||
constructor(mainApp: MainApp, ssid: String, compare: Comparator.Compare) : this(mainApp) {
|
||||
this.ssid = InputString(mainApp, ssid)
|
||||
comparator = Comparator(mainApp, compare)
|
||||
constructor(injector: HasAndroidInjector, ssid: String, compare: Comparator.Compare) : this(injector) {
|
||||
this.ssid = InputString(injector, ssid)
|
||||
comparator = Comparator(injector, compare)
|
||||
}
|
||||
|
||||
constructor(mainApp: MainApp, triggerWifiSsid: TriggerWifiSsid) : this(mainApp) {
|
||||
this.ssid = InputString(mainApp, triggerWifiSsid.ssid.value)
|
||||
comparator = Comparator(mainApp, triggerWifiSsid.comparator.value)
|
||||
constructor(injector: HasAndroidInjector, triggerWifiSsid: TriggerWifiSsid) : this(injector) {
|
||||
this.ssid = InputString(injector, triggerWifiSsid.ssid.value)
|
||||
comparator = Comparator(injector, triggerWifiSsid.comparator.value)
|
||||
}
|
||||
|
||||
override fun shouldRun(): Boolean {
|
||||
|
@ -66,13 +66,13 @@ class TriggerWifiSsid(mainApp: MainApp) : Trigger(mainApp) {
|
|||
|
||||
override fun icon(): Optional<Int?> = Optional.of(R.drawable.ic_network_wifi)
|
||||
|
||||
override fun duplicate(): Trigger = TriggerWifiSsid(mainApp, this)
|
||||
override fun duplicate(): Trigger = TriggerWifiSsid(injector, this)
|
||||
|
||||
override fun generateDialog(root: LinearLayout) {
|
||||
LayoutBuilder()
|
||||
.add(StaticLabel(mainApp, R.string.ns_wifi_ssids, this))
|
||||
.add(StaticLabel(injector, R.string.ns_wifi_ssids, this))
|
||||
.add(comparator)
|
||||
.add(LabelWithElement(mainApp, resourceHelper.gs(R.string.ns_wifi_ssids) + ": ", "", ssid))
|
||||
.add(LabelWithElement(injector, resourceHelper.gs(R.string.ns_wifi_ssids) + ": ", "", ssid))
|
||||
.build(root)
|
||||
}
|
||||
}
|
|
@ -6,12 +6,12 @@ import info.nightscout.androidaps.interfaces.PluginBase
|
|||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class CareportalPlugin @Inject constructor(rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
class CareportalPlugin @Inject constructor(aapsLogger: AAPSLogger, resourceHelper: ResourceHelper
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(CareportalFragment::class.java.name)
|
||||
|
@ -20,11 +20,6 @@ class CareportalPlugin @Inject constructor(rxBus: RxBusWrapper, aapsLogger: AAPS
|
|||
.visibleByDefault(Config.NSCLIENT)
|
||||
.enableByDefault(Config.NSCLIENT)
|
||||
.description(R.string.description_careportal),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
|
||||
) {
|
||||
|
||||
override fun specialEnableCondition(): Boolean {
|
||||
return Config.NSCLIENT
|
||||
}
|
||||
}
|
||||
)
|
|
@ -5,19 +5,19 @@ import info.nightscout.androidaps.interfaces.PluginBase
|
|||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class FoodPlugin @Inject constructor(rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
class FoodPlugin @Inject constructor(aapsLogger: AAPSLogger, resourceHelper: ResourceHelper
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(FoodFragment::class.java.name)
|
||||
.pluginName(R.string.food)
|
||||
.shortName(R.string.food_short)
|
||||
.description(R.string.description_food),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
) {
|
||||
|
||||
var service: FoodService? = null
|
||||
|
|
|
@ -11,7 +11,6 @@ import info.nightscout.androidaps.interfaces.PluginBase
|
|||
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||
import info.nightscout.androidaps.interfaces.PluginType
|
||||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||
|
@ -25,10 +24,10 @@ import javax.inject.Singleton
|
|||
@Singleton
|
||||
class MaintenancePlugin @Inject constructor(
|
||||
private val mainApp: MainApp,
|
||||
private val resourceHelper: ResourceHelper,
|
||||
resourceHelper: ResourceHelper,
|
||||
private val sp: SP,
|
||||
private val nsSettingsStatus: NSSettingsStatus,
|
||||
rxBus: RxBusWrapper, aapsLogger: AAPSLogger
|
||||
aapsLogger: AAPSLogger
|
||||
) : PluginBase(PluginDescription()
|
||||
.mainType(PluginType.GENERAL)
|
||||
.fragmentClass(MaintenanceFragment::class.java.name)
|
||||
|
@ -38,7 +37,7 @@ class MaintenancePlugin @Inject constructor(
|
|||
.shortName(R.string.maintenance_shortname)
|
||||
.preferencesId(R.xml.pref_maintenance)
|
||||
.description(R.string.description_maintenance),
|
||||
rxBus, aapsLogger
|
||||
aapsLogger, resourceHelper
|
||||
) {
|
||||
|
||||
fun sendLogs() {
|
||||
|
|
|
@ -13,8 +13,9 @@ import android.widget.CompoundButton;
|
|||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.android.support.DaggerFragment;
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||
|
@ -27,7 +28,9 @@ import info.nightscout.androidaps.utils.SP;
|
|||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
|
||||
public class NSClientFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
public class NSClientFragment extends DaggerFragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
@Inject NSClientPlugin nsClientPlugin;
|
||||
|
||||
private CompositeDisposable disposable = new CompositeDisposable();
|
||||
|
||||
private TextView logTextView;
|
||||
|
@ -50,10 +53,10 @@ public class NSClientFragment extends Fragment implements View.OnClickListener,
|
|||
|
||||
logScrollview = (ScrollView) view.findViewById(R.id.nsclientinternal_logscrollview);
|
||||
autoscrollCheckbox = (CheckBox) view.findViewById(R.id.nsclientinternal_autoscroll);
|
||||
autoscrollCheckbox.setChecked(NSClientPlugin.getPlugin().autoscroll);
|
||||
autoscrollCheckbox.setChecked(nsClientPlugin.autoscroll);
|
||||
autoscrollCheckbox.setOnCheckedChangeListener(this);
|
||||
pausedCheckbox = (CheckBox) view.findViewById(R.id.nsclientinternal_paused);
|
||||
pausedCheckbox.setChecked(NSClientPlugin.getPlugin().paused);
|
||||
pausedCheckbox.setChecked(nsClientPlugin.paused);
|
||||
pausedCheckbox.setOnCheckedChangeListener(this);
|
||||
logTextView = (TextView) view.findViewById(R.id.nsclientinternal_log);
|
||||
queueTextView = (TextView) view.findViewById(R.id.nsclientinternal_queue);
|
||||
|
@ -104,21 +107,21 @@ public class NSClientFragment extends Fragment implements View.OnClickListener,
|
|||
FabricPrivacy.getInstance().logCustom("NSClientRestart");
|
||||
break;
|
||||
case R.id.nsclientinternal_delivernow:
|
||||
NSClientPlugin.getPlugin().resend("GUI");
|
||||
nsClientPlugin.resend("GUI");
|
||||
FabricPrivacy.getInstance().logCustom("NSClientDeliverNow");
|
||||
break;
|
||||
case R.id.nsclientinternal_clearlog:
|
||||
NSClientPlugin.getPlugin().clearLog();
|
||||
nsClientPlugin.clearLog();
|
||||
break;
|
||||
case R.id.nsclientinternal_clearqueue:
|
||||
OKDialog.showConfirmation(getContext(),MainApp.gs(R.string.nsclientinternal), MainApp.gs(R.string.clearqueueconfirm), () -> {
|
||||
OKDialog.showConfirmation(getContext(), MainApp.gs(R.string.nsclientinternal), MainApp.gs(R.string.clearqueueconfirm), () -> {
|
||||
UploadQueue.clearQueue();
|
||||
updateGui();
|
||||
FabricPrivacy.getInstance().logCustom("NSClientClearQueue");
|
||||
});
|
||||
break;
|
||||
case R.id.nsclientinternal_showqueue:
|
||||
RxBus.Companion.getINSTANCE().send(new EventNSClientNewLog("QUEUE", NSClientPlugin.getPlugin().queue().textList()));
|
||||
RxBus.Companion.getINSTANCE().send(new EventNSClientNewLog("QUEUE", nsClientPlugin.queue().textList()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -127,29 +130,29 @@ public class NSClientFragment extends Fragment implements View.OnClickListener,
|
|||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
switch (buttonView.getId()) {
|
||||
case R.id.nsclientinternal_paused:
|
||||
NSClientPlugin.getPlugin().pause(isChecked);
|
||||
nsClientPlugin.pause(isChecked);
|
||||
updateGui();
|
||||
FabricPrivacy.getInstance().logCustom("NSClientPause");
|
||||
break;
|
||||
case R.id.nsclientinternal_autoscroll:
|
||||
SP.putBoolean(R.string.key_nsclientinternal_autoscroll, isChecked);
|
||||
NSClientPlugin.getPlugin().autoscroll = isChecked;
|
||||
nsClientPlugin.autoscroll = isChecked;
|
||||
updateGui();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected void updateGui() {
|
||||
NSClientPlugin.getPlugin().updateLog();
|
||||
nsClientPlugin.updateLog();
|
||||
pausedCheckbox.setChecked(SP.getBoolean(R.string.key_nsclientinternal_paused, false));
|
||||
logTextView.setText(NSClientPlugin.getPlugin().textLog);
|
||||
if (NSClientPlugin.getPlugin().autoscroll) {
|
||||
logTextView.setText(nsClientPlugin.textLog);
|
||||
if (nsClientPlugin.autoscroll) {
|
||||
logScrollview.fullScroll(ScrollView.FOCUS_DOWN);
|
||||
}
|
||||
urlTextView.setText(NSClientPlugin.getPlugin().url());
|
||||
urlTextView.setText(nsClientPlugin.url());
|
||||
Spanned queuetext = Html.fromHtml(MainApp.gs(R.string.queue) + " <b>" + UploadQueue.size() + "</b>");
|
||||
queueTextView.setText(queuetext);
|
||||
statusTextView.setText(NSClientPlugin.getPlugin().status);
|
||||
statusTextView.setText(nsClientPlugin.status);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue