maintenance -> :core:configuration

This commit is contained in:
Milos Kozak 2022-11-27 22:19:40 +01:00
parent 57c96770b0
commit 25cf632008
96 changed files with 353 additions and 257 deletions

View file

@ -0,0 +1,3 @@
package info.nightscout.rx.events
class EventDiaconnG8PumpLogReset : Event()

View file

@ -70,7 +70,7 @@
android:exported="false" android:exported="false"
android:theme="@style/AppTheme"/> android:theme="@style/AppTheme"/>
<activity <activity
android:name=".plugins.general.maintenance.activities.PrefImportListActivity" android:name="info.nightscout.configuration.maintenance.activities.PrefImportListActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme" /> android:theme="@style/AppTheme" />
<activity <activity
@ -141,7 +141,7 @@
<service android:name=".plugins.general.persistentNotification.DummyService" /> <service android:name=".plugins.general.persistentNotification.DummyService" />
<activity <activity
android:name=".plugins.general.maintenance.activities.LogSettingActivity" android:name="info.nightscout.configuration.maintenance.activities.LogSettingActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme.NoActionBar" /> android:theme="@style/AppTheme.NoActionBar" />

View file

@ -33,8 +33,9 @@ import com.joanzapata.iconify.fonts.FontAwesomeModule
import info.nightscout.androidaps.activities.HistoryBrowseActivity import info.nightscout.androidaps.activities.HistoryBrowseActivity
import info.nightscout.androidaps.activities.PreferencesActivity import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.databinding.ActivityMainBinding import info.nightscout.androidaps.databinding.ActivityMainBinding
import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult
import info.nightscout.configuration.activities.SingleFragmentActivity
import info.nightscout.configuration.setupwizard.SetupWizardActivity import info.nightscout.configuration.setupwizard.SetupWizardActivity
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult
import info.nightscout.core.ui.UIRunnable import info.nightscout.core.ui.UIRunnable
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper
@ -67,7 +68,6 @@ import info.nightscout.rx.events.EventRebuildTabs
import info.nightscout.rx.logging.LTag import info.nightscout.rx.logging.LTag
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import info.nightscout.ui.activities.ProfileHelperActivity import info.nightscout.ui.activities.ProfileHelperActivity
import info.nightscout.ui.activities.SingleFragmentActivity
import info.nightscout.ui.activities.StatsActivity import info.nightscout.ui.activities.StatsActivity
import info.nightscout.ui.activities.TreatmentsActivity import info.nightscout.ui.activities.TreatmentsActivity
import info.nightscout.ui.tabs.TabPageAdapter import info.nightscout.ui.tabs.TabPageAdapter

View file

@ -21,14 +21,15 @@ import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin
import info.nightscout.androidaps.danaRv2.DanaRv2Plugin import info.nightscout.androidaps.danaRv2.DanaRv2Plugin
import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.DanaRPlugin
import info.nightscout.androidaps.plugin.general.openhumans.OpenHumansUploaderPlugin import info.nightscout.androidaps.plugin.general.openhumans.OpenHumansUploaderPlugin
import info.nightscout.androidaps.plugins.general.maintenance.MaintenancePlugin
import info.nightscout.androidaps.plugins.pump.eopatch.EopatchPumpPlugin import info.nightscout.androidaps.plugins.pump.eopatch.EopatchPumpPlugin
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin
import info.nightscout.automation.AutomationPlugin import info.nightscout.automation.AutomationPlugin
import info.nightscout.configuration.maintenance.MaintenancePlugin
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.implementation.plugin.PluginStore import info.nightscout.implementation.plugin.PluginStore
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileFunction
@ -53,7 +54,6 @@ import info.nightscout.plugins.source.IntelligoPlugin
import info.nightscout.plugins.source.PoctechPlugin import info.nightscout.plugins.source.PoctechPlugin
import info.nightscout.plugins.source.TomatoPlugin import info.nightscout.plugins.source.TomatoPlugin
import info.nightscout.plugins.sync.nsclient.NSClientPlugin import info.nightscout.plugins.sync.nsclient.NSClientPlugin
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin
import info.nightscout.plugins.sync.tidepool.TidepoolPlugin import info.nightscout.plugins.sync.tidepool.TidepoolPlugin
import info.nightscout.pump.combo.ComboPlugin import info.nightscout.pump.combo.ComboPlugin

View file

@ -9,7 +9,7 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.ActivityPreferencesBinding import info.nightscout.androidaps.databinding.ActivityPreferencesBinding
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper
class PreferencesActivity : DaggerAppCompatActivityWithResult(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback { class PreferencesActivity : DaggerAppCompatActivityWithResult(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {

View file

@ -5,8 +5,8 @@ import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.MainActivity import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.activities.HistoryBrowseActivity import info.nightscout.androidaps.activities.HistoryBrowseActivity
import info.nightscout.androidaps.activities.PreferencesActivity import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity import info.nightscout.configuration.activities.SingleFragmentActivity
import info.nightscout.ui.activities.SingleFragmentActivity import info.nightscout.configuration.maintenance.activities.LogSettingActivity
@Module @Module
@Suppress("unused") @Suppress("unused")
@ -14,7 +14,7 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector abstract fun contributesHistoryBrowseActivity(): HistoryBrowseActivity @ContributesAndroidInjector abstract fun contributesHistoryBrowseActivity(): HistoryBrowseActivity
@ContributesAndroidInjector abstract fun contributesLogSettingActivity(): LogSettingActivity @ContributesAndroidInjector abstract fun contributesLogSettingActivity(): LogSettingActivity
@ContributesAndroidInjector abstract fun contributeMainActivity(): MainActivity @ContributesAndroidInjector abstract fun contributesMainActivity(): MainActivity
@ContributesAndroidInjector abstract fun contributesPreferencesActivity(): PreferencesActivity @ContributesAndroidInjector abstract fun contributesPreferencesActivity(): PreferencesActivity
@ContributesAndroidInjector abstract fun contributesSingleFragmentActivity(): SingleFragmentActivity @ContributesAndroidInjector abstract fun contributesSingleFragmentActivity(): SingleFragmentActivity

View file

@ -47,7 +47,6 @@ import javax.inject.Singleton
ReceiversModule::class, ReceiversModule::class,
ServicesModule::class, ServicesModule::class,
WorkflowModule::class, WorkflowModule::class,
WorkersModule::class,
// Gradle modules // Gradle modules
AutomationModule::class, AutomationModule::class,

View file

@ -9,11 +9,9 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.implementations.ActivityNamesImpl import info.nightscout.androidaps.implementations.ActivityNamesImpl
import info.nightscout.androidaps.implementations.ConfigImpl import info.nightscout.androidaps.implementations.ConfigImpl
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefsImpl
import info.nightscout.androidaps.workflow.CalculationWorkflowImpl import info.nightscout.androidaps.workflow.CalculationWorkflowImpl
import info.nightscout.core.workflow.CalculationWorkflow import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.maintenance.ImportExportPrefs
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
@ -50,7 +48,6 @@ open class AppModule {
@Binds fun bindInjector(mainApp: MainApp): HasAndroidInjector @Binds fun bindInjector(mainApp: MainApp): HasAndroidInjector
@Binds fun bindConfigInterface(config: ConfigImpl): Config @Binds fun bindConfigInterface(config: ConfigImpl): Config
@Binds fun bindImportExportPrefsInterface(importExportPrefs: ImportExportPrefsImpl): ImportExportPrefs
@Binds fun bindActivityNamesInterface(activityNames: ActivityNamesImpl): ActivityNames @Binds fun bindActivityNamesInterface(activityNames: ActivityNamesImpl): ActivityNames
@Binds fun bindCalculationWorkflowInterface(calculationWorkflow: CalculationWorkflowImpl): CalculationWorkflow @Binds fun bindCalculationWorkflowInterface(calculationWorkflow: CalculationWorkflowImpl): CalculationWorkflow
} }

View file

@ -3,7 +3,7 @@ package info.nightscout.androidaps.di
import dagger.Module import dagger.Module
import dagger.android.ContributesAndroidInjector import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.activities.MyPreferenceFragment import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.plugins.general.maintenance.MaintenanceFragment import info.nightscout.configuration.maintenance.MaintenanceFragment
@Module @Module
@Suppress("unused") @Suppress("unused")

View file

@ -8,7 +8,6 @@ import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin
import info.nightscout.androidaps.danaRv2.DanaRv2Plugin import info.nightscout.androidaps.danaRv2.DanaRv2Plugin
import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.DanaRPlugin
import info.nightscout.androidaps.plugin.general.openhumans.OpenHumansUploaderPlugin import info.nightscout.androidaps.plugin.general.openhumans.OpenHumansUploaderPlugin
import info.nightscout.androidaps.plugins.general.maintenance.MaintenancePlugin
import info.nightscout.androidaps.plugins.general.persistentNotification.PersistentNotificationPlugin import info.nightscout.androidaps.plugins.general.persistentNotification.PersistentNotificationPlugin
import info.nightscout.androidaps.plugins.pump.eopatch.EopatchPumpPlugin import info.nightscout.androidaps.plugins.pump.eopatch.EopatchPumpPlugin
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
@ -17,6 +16,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.OmnipodDashPumpPlugi
import info.nightscout.androidaps.plugins.pump.omnipod.eros.OmnipodErosPumpPlugin import info.nightscout.androidaps.plugins.pump.omnipod.eros.OmnipodErosPumpPlugin
import info.nightscout.automation.AutomationPlugin import info.nightscout.automation.AutomationPlugin
import info.nightscout.configuration.configBuilder.ConfigBuilderPlugin import info.nightscout.configuration.configBuilder.ConfigBuilderPlugin
import info.nightscout.configuration.maintenance.MaintenancePlugin
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.plugins.aps.loop.LoopPlugin import info.nightscout.plugins.aps.loop.LoopPlugin
import info.nightscout.plugins.aps.openAPSAMA.OpenAPSAMAPlugin import info.nightscout.plugins.aps.openAPSAMA.OpenAPSAMAPlugin

View file

@ -1,12 +0,0 @@
package info.nightscout.androidaps.di
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefsImpl
@Module
@Suppress("unused")
abstract class WorkersModule {
@ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker
}

View file

@ -7,17 +7,18 @@ import androidx.annotation.RawRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import info.nightscout.androidaps.MainActivity import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.HistoryBrowseActivity import info.nightscout.androidaps.activities.HistoryBrowseActivity
import info.nightscout.androidaps.activities.MyPreferenceFragment import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.activities.PreferencesActivity import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.services.AlarmSoundService import info.nightscout.androidaps.services.AlarmSoundService
import info.nightscout.configuration.activities.SingleFragmentActivity
import info.nightscout.core.events.EventNewNotification import info.nightscout.core.events.EventNewNotification
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.ui.activities.BolusProgressHelperActivity import info.nightscout.ui.activities.BolusProgressHelperActivity
import info.nightscout.ui.activities.ErrorHelperActivity import info.nightscout.ui.activities.ErrorHelperActivity
import info.nightscout.ui.activities.SingleFragmentActivity
import info.nightscout.ui.activities.TDDStatsActivity import info.nightscout.ui.activities.TDDStatsActivity
import info.nightscout.ui.dialogs.BolusProgressDialog import info.nightscout.ui.dialogs.BolusProgressDialog
import info.nightscout.ui.dialogs.CalibrationDialog import info.nightscout.ui.dialogs.CalibrationDialog
@ -47,6 +48,7 @@ class ActivityNamesImpl @Inject constructor(
override val singleFragmentActivity: Class<*> = SingleFragmentActivity::class.java override val singleFragmentActivity: Class<*> = SingleFragmentActivity::class.java
override val preferencesActivity: Class<*> = PreferencesActivity::class.java override val preferencesActivity: Class<*> = PreferencesActivity::class.java
override val myPreferenceFragment: Class<*> = MyPreferenceFragment::class.java override val myPreferenceFragment: Class<*> = MyPreferenceFragment::class.java
override val prefGeneral: Int = R.xml.pref_general
override fun runAlarm(ctx: Context, status: String, title: String, @RawRes soundId: Int) { override fun runAlarm(ctx: Context, status: String, title: String, @RawRes soundId: Int) {
val i = Intent(ctx, errorHelperActivity) val i = Intent(ctx, errorHelperActivity)

View file

@ -22,6 +22,10 @@ class ConfigImpl @Inject constructor(
override val FLAVOR = BuildConfig.FLAVOR override val FLAVOR = BuildConfig.FLAVOR
override val VERSION_NAME = BuildConfig.VERSION_NAME override val VERSION_NAME = BuildConfig.VERSION_NAME
override val BUILD_VERSION = BuildConfig.BUILDVERSION override val BUILD_VERSION = BuildConfig.BUILDVERSION
override val REMOTE: String = BuildConfig.REMOTE
override val BUILD_TYPE: String = BuildConfig.BUILD_TYPE
override val VERSION: String = BuildConfig.VERSION
override val APPLICATION_ID: String = BuildConfig.APPLICATION_ID
override val DEBUG = BuildConfig.DEBUG override val DEBUG = BuildConfig.DEBUG
override val currentDeviceModelString = override val currentDeviceModelString =

View file

@ -14,7 +14,7 @@ import com.google.common.util.concurrent.ListenableFuture
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.BuildConfig import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
import info.nightscout.androidaps.plugins.general.maintenance.MaintenancePlugin import info.nightscout.configuration.maintenance.MaintenancePlugin
import info.nightscout.core.profile.ProfileSealed import info.nightscout.core.profile.ProfileSealed
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.core.utils.receivers.ReceiverStatusStore import info.nightscout.core.utils.receivers.ReceiverStatusStore
@ -22,13 +22,13 @@ import info.nightscout.database.impl.AppRepository
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.LocalAlertUtils import info.nightscout.interfaces.LocalAlertUtils
import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.configBuilder.RunningConfiguration
import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.queue.Command import info.nightscout.interfaces.queue.Command
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.configBuilder.RunningConfiguration
import info.nightscout.plugins.sync.nsclient.extensions.buildDeviceStatus import info.nightscout.plugins.sync.nsclient.extensions.buildDeviceStatus
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventProfileSwitchChanged import info.nightscout.rx.events.EventProfileSwitchChanged

View file

@ -32,31 +32,12 @@
<string name="key_protection_settings" translatable="false">protection</string> <string name="key_protection_settings" translatable="false">protection</string>
<string name="key_last_cleanup_run" translatable="false">last_cleanup_run</string> <string name="key_last_cleanup_run" translatable="false">last_cleanup_run</string>
<string name="nav_preferences_plugin">%1$s Preferences</string> <string name="nav_preferences_plugin">%1$s Preferences</string>
<string name="nav_preferences">Preferences</string>
<string name="nav_refreshtreatments">Refresh treatments from NS</string> <string name="nav_refreshtreatments">Refresh treatments from NS</string>
<string name="nav_resetdb">Reset Databases</string>
<string name="reset_db_confirm">Do you really want to reset the databases?</string>
<string name="nav_exit">Exit</string> <string name="nav_exit">Exit</string>
<string name="description_persistent_notification">Shows an ongoing notification with a short overview of what your loop is doing</string> <string name="description_persistent_notification">Shows an ongoing notification with a short overview of what your loop is doing</string>
<string name="delta">Delta</string> <string name="delta">Delta</string>
<string name="profile_label">Profile</string> <string name="profile_label">Profile</string>
<string name="configbuilder_nightscoutversion_label">Nightscout version:</string>
<string name="exported">Preferences exported</string>
<string name="ue_exported">User Entries exported</string>
<string name="export_to">Export settings to</string>
<string name="import_from">Import settings from</string>
<string name="setting_imported">Settings imported</string>
<string name="filenotfound">File not found</string>
<string name="nav_export">Export settings</string>
<string name="language" translatable="false">Language</string> <string name="language" translatable="false">Language</string>
<string name="password_preferences_encrypt_prompt">You will be asked for master password, which will be used to encrypt exported preferences.</string>
<string name="preferences_export_canceled">Export canceled! Preferences were NOT exported!</string>
<string name="preferences_import_canceled">Import canceled! Preferences were NOT imported!</string>
<string name="preferences_import_impossible">Cannot import preferences!</string>
<string name="goto_main_try_again">Please go back to main screen and try again.</string>
<string name="old_master_password">Old Master Password</string>
<string name="different_password_used">This file was exported and encrypted with different master password. Provide old master password to decrypt file.</string>
<string name="master_password_will_be_replaced">As a result of successful import current master password WILL BE REPLACED with that old master password!</string>
<string name="save">Save</string> <string name="save">Save</string>
<string name="reloadprofile">Reload profile</string> <string name="reloadprofile">Reload profile</string>
<string name="correctionbous">Corr</string> <string name="correctionbous">Corr</string>
@ -65,7 +46,6 @@
<string name="wear">Wear</string> <string name="wear">Wear</string>
<string name="ongoingnotificaction">Ongoing Notification</string> <string name="ongoingnotificaction">Ongoing Notification</string>
<string name="old_data">OLD DATA</string> <string name="old_data">OLD DATA</string>
<string name="restartingapp">Exiting application to apply settings.</string>
<string name="nav_about">About</string> <string name="nav_about">About</string>
<string name="smscommunicator_missingphonestatepermission">Missing phone state permission</string> <string name="smscommunicator_missingphonestatepermission">Missing phone state permission</string>
<string name="ns_alarm_options">Alarm options</string> <string name="ns_alarm_options">Alarm options</string>
@ -87,29 +67,13 @@
<string name="enable_pump_unreachable_alert">Alert if pump is unreachable</string> <string name="enable_pump_unreachable_alert">Alert if pump is unreachable</string>
<string name="pump_unreachable_threshold">Pump unreachable threshold [min]</string> <string name="pump_unreachable_threshold">Pump unreachable threshold [min]</string>
<string name="enable_carbs_req_alert">Alert if carbs are required</string> <string name="enable_carbs_req_alert">Alert if carbs are required</string>
<string name="engineering_mode_enabled">Engineering mode enabled</string>
<string name="open_navigation">Open navigation</string> <string name="open_navigation">Open navigation</string>
<string name="close_navigation">Close navigation</string> <string name="close_navigation">Close navigation</string>
<string name="remove_items">Remove items</string> <string name="remove_items">Remove items</string>
<string name="sort_items">Sort items</string> <string name="sort_items">Sort items</string>
<string name="error_adding_treatment_title">Treatment data incomplete</string> <string name="error_adding_treatment_title">Treatment data incomplete</string>
<string name="maintenance_settings">Maintenance Settings</string>
<string name="maintenance_email">Email recipient</string>
<string name="key_maintenance_logs_email" translatable="false">maintenance_logs_email</string>
<string name="key_maintenance_logs_amount" translatable="false">maintenance_logs_amount</string>
<string name="key_logshipper_amount" translatable="false">logshipper_amount</string>
<string name="maintenance_amount">No of Logs to send</string>
<string name="maintenance">Maintenance</string>
<string name="maintenance_shortname">MAINT</string>
<string name="description_maintenance">Provides several functions for maintenance (eg. log sending, log deletion).</string>
<string name="send_all_logs">Send Logs by Email</string>
<string name="delete_logs">Delete Logs</string>
<string name="error_adding_treatment_message">A treatment (insulin: %1$.2f, carbs: %2$d, at: %3$s) could not be added to treatments. Please check and manually add a record as appropriate.</string> <string name="error_adding_treatment_message">A treatment (insulin: %1$.2f, carbs: %2$d, at: %3$s) could not be added to treatments. Please check and manually add a record as appropriate.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), delay: %3$d m</string> <string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), delay: %3$d m</string>
<string name="log_files">Log files</string>
<string name="miscellaneous">Miscellaneous</string>
<string name="nav_logsettings">Log settings</string>
<string name="resettodefaults">Reset to defaults</string>
<string name="profile_total">== ∑ %1$s U</string> <string name="profile_total">== ∑ %1$s U</string>
<string name="unitsnosemicolon">Units</string> <string name="unitsnosemicolon">Units</string>
<string name="show_removed">Show removed</string> <string name="show_removed">Show removed</string>
@ -133,8 +97,4 @@
<string name="sort_label">Sort</string> <string name="sort_label">Sort</string>
<string name="search">Search</string> <string name="search">Search</string>
<string name="database_cleanup">Database cleanup</string>
<string name="cleanup_db_confirm">Do you want to cleanup the database?\nIt will remove tracked changes and historic data older than 3 months.</string>
<string name="cleared_entries">Cleared entries</string>
</resources> </resources>

View file

@ -7,6 +7,7 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.TestBaseWithProfile
import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.danar.DanaRPlugin
import info.nightscout.androidaps.implementations.ConfigImpl import info.nightscout.androidaps.implementations.ConfigImpl
import info.nightscout.androidaps.insight.database.InsightDatabase
import info.nightscout.androidaps.insight.database.InsightDatabaseDao import info.nightscout.androidaps.insight.database.InsightDatabaseDao
import info.nightscout.androidaps.insight.database.InsightDbHelper import info.nightscout.androidaps.insight.database.InsightDbHelper
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
@ -41,6 +42,7 @@ import info.nightscout.plugins.source.GlimpPlugin
import info.nightscout.pump.combo.ComboPlugin import info.nightscout.pump.combo.ComboPlugin
import info.nightscout.pump.combo.ruffyscripter.RuffyScripter import info.nightscout.pump.combo.ruffyscripter.RuffyScripter
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -68,6 +70,8 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
@Mock lateinit var ruffyScripter: RuffyScripter @Mock lateinit var ruffyScripter: RuffyScripter
@Mock lateinit var activityNames: ActivityNames @Mock lateinit var activityNames: ActivityNames
@Mock lateinit var profileInstantiator: ProfileInstantiator @Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@Mock lateinit var insightDatabase: InsightDatabase
private lateinit var hardLimits: HardLimits private lateinit var hardLimits: HardLimits
private lateinit var danaPump: DanaPump private lateinit var danaPump: DanaPump
@ -139,7 +143,8 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator) danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, rh, activePlugin, sp, config) objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, rh, activePlugin, sp, config)
comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, activityNames) comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, activityNames)
danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync, activityNames) danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync,
activityNames, danaHistoryDatabase)
danaRSPlugin = danaRSPlugin =
info.nightscout.pump.danars.DanaRSPlugin( info.nightscout.pump.danars.DanaRSPlugin(
injector, injector,
@ -158,9 +163,10 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
temporaryBasalStorage, temporaryBasalStorage,
fabricPrivacy, fabricPrivacy,
dateUtil, dateUtil,
activityNames activityNames,
danaHistoryDatabase
) )
insightPlugin = LocalInsightPlugin(injector, aapsLogger, rxBus, rh, sp, commandQueue, profileFunction, context, config, dateUtil, insightDbHelper, pumpSync) insightPlugin = LocalInsightPlugin(injector, aapsLogger, rxBus, rh, sp, commandQueue, profileFunction, context, config, dateUtil, insightDbHelper, pumpSync, insightDatabase)
openAPSSMBPlugin = openAPSSMBPlugin =
OpenAPSSMBPlugin( OpenAPSSMBPlugin(
injector, injector,

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.general.maintenance
import android.content.Context import android.content.Context
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.TestBase
import info.nightscout.configuration.maintenance.MaintenancePlugin
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.logging.LoggerUtils import info.nightscout.interfaces.logging.LoggerUtils
import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefFileListProvider

View file

@ -32,7 +32,7 @@ dependencies {
api "com.google.dagger:dagger-android-support:$dagger_version" api "com.google.dagger:dagger-android-support:$dagger_version"
//WorkManager //WorkManager
api "androidx.work:work-runtime:$work_version" // DataWorkerStorage api "androidx.work:work-runtime-ktx:$work_version" // DataWorkerStorage
} }
android { android {

View file

@ -1,15 +0,0 @@
package info.nightscout.core.di
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImportListActivity
import info.nightscout.core.ui.elements.SingleClickButton
@Module
@Suppress("unused")
abstract class CoreFragmentsModule {
@ContributesAndroidInjector abstract fun contributesPrefImportListActivity(): PrefImportListActivity
@ContributesAndroidInjector abstract fun contributesSingleClickButton(): SingleClickButton
}

View file

@ -9,7 +9,6 @@ import dagger.Provides
@Module( @Module(
includes = [ includes = [
CoreReceiversModule::class, CoreReceiversModule::class,
CoreFragmentsModule::class,
CoreDataClassesModule::class, CoreDataClassesModule::class,
PreferencesModule::class PreferencesModule::class
] ]

View file

@ -2,15 +2,11 @@ package info.nightscout.core.di
import dagger.Module import dagger.Module
import dagger.android.ContributesAndroidInjector import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.plugins.general.maintenance.formats.EncryptedPrefsFormat
import info.nightscout.core.utils.CryptoUtil import info.nightscout.core.utils.CryptoUtil
import info.nightscout.interfaces.maintenance.PrefFileListProvider
@Module @Module
@Suppress("unused") @Suppress("unused")
abstract class PreferencesModule { abstract class PreferencesModule {
@ContributesAndroidInjector abstract fun cryptoUtilInjector(): CryptoUtil @ContributesAndroidInjector abstract fun cryptoUtilInjector(): CryptoUtil
@ContributesAndroidInjector abstract fun encryptedPrefsFormatInjector(): EncryptedPrefsFormat
@ContributesAndroidInjector abstract fun prefImportListProviderInjector(): PrefFileListProvider
} }

View file

@ -10,6 +10,10 @@ interface Config {
val FLAVOR: String val FLAVOR: String
val VERSION_NAME: String val VERSION_NAME: String
val BUILD_VERSION: String val BUILD_VERSION: String
val REMOTE: String
val BUILD_TYPE: String
val VERSION: String
val APPLICATION_ID: String
val DEBUG: Boolean val DEBUG: Boolean
val currentDeviceModelString : String val currentDeviceModelString : String
val appName: Int val appName: Int

View file

@ -6,14 +6,18 @@ import info.nightscout.database.entities.Bolus
import info.nightscout.database.entities.BolusCalculatorResult import info.nightscout.database.entities.BolusCalculatorResult
import info.nightscout.database.entities.Carbs import info.nightscout.database.entities.Carbs
import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.TemporaryTarget
import info.nightscout.database.entities.UserEntry
import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.Callback
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
interface PersistenceLayer { interface PersistenceLayer {
fun clearDatabases()
fun cleanupDatabase(keepDays: Long, deleteTrackedChanges: Boolean): String
fun insertOrUpdate(bolusCalculatorResult: BolusCalculatorResult) fun insertOrUpdate(bolusCalculatorResult: BolusCalculatorResult)
fun insertOrUpdateCarbs(carbs: Carbs, callback: Callback? = null, injector: HasAndroidInjector? = null) fun insertOrUpdateCarbs(carbs: Carbs, callback: Callback? = null, injector: HasAndroidInjector? = null)
fun insertOrUpdateBolus(bolus: Bolus) fun insertOrUpdateBolus(bolus: Bolus)
fun getTemporaryTargetActiveAt(timestamp: Long): Single<ValueWrapper<TemporaryTarget>> fun getTemporaryTargetActiveAt(timestamp: Long): Single<ValueWrapper<TemporaryTarget>>
fun getUserEntryFilteredDataFromTime(timestamp: Long): Single<List<UserEntry>>
} }

View file

@ -0,0 +1,5 @@
package info.nightscout.interfaces.plugin
interface OwnDatabasePlugin {
fun clearAllTables()
}

View file

@ -20,6 +20,7 @@ interface ActivityNames {
val preferencesActivity: Class<*> val preferencesActivity: Class<*>
val myPreferenceFragment: Class<*> val myPreferenceFragment: Class<*>
val prefGeneral: Int
/** /**
* Show ErrorHelperActivity and start alarm * Show ErrorHelperActivity and start alarm
* @param ctx Context * @param ctx Context

View file

@ -29,6 +29,9 @@
<string name="superbolus">Superbolus</string> <string name="superbolus">Superbolus</string>
<string name="pump_paused">Pump paused</string> <string name="pump_paused">Pump paused</string>
<string name="and">And</string> <string name="and">And</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">User</string>
<string name="result">Result</string>
<string name="settings">Settings</string>
<!-- Pumps --> <!-- Pumps -->
<string name="battery_label">Battery</string> <string name="battery_label">Battery</string>
@ -106,4 +109,7 @@
<string name="location_not_found_title">Location Is Not Enabled</string> <string name="location_not_found_title">Location Is Not Enabled</string>
<string name="location_not_found_message">For Bluetooth discovery to work on newer devices, location must be enabled. AAPS does not track your location and it can be disabled after pairing is successful.</string> <string name="location_not_found_message">For Bluetooth discovery to work on newer devices, location must be enabled. AAPS does not track your location and it can be disabled after pairing is successful.</string>
<!-- Preferences -->
<string name="nav_plugin_preferences">Plugin preferences</string>
</resources> </resources>

View file

@ -35,5 +35,5 @@ dependencies {
api "com.google.crypto.tink:tink-android:$tink_version" api "com.google.crypto.tink:tink-android:$tink_version"
//WorkManager //WorkManager
api "androidx.work:work-runtime:$work_version" // DataWorkerStorage api "androidx.work:work-runtime-ktx:$work_version" // DataWorkerStorage
} }

View file

@ -7,6 +7,7 @@ import info.nightscout.database.entities.Bolus
import info.nightscout.database.entities.BolusCalculatorResult import info.nightscout.database.entities.BolusCalculatorResult
import info.nightscout.database.entities.Carbs import info.nightscout.database.entities.Carbs
import info.nightscout.database.entities.TemporaryTarget import info.nightscout.database.entities.TemporaryTarget
import info.nightscout.database.entities.UserEntry
import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.AppRepository
import info.nightscout.database.impl.transactions.InsertOrUpdateBolusCalculatorResultTransaction import info.nightscout.database.impl.transactions.InsertOrUpdateBolusCalculatorResultTransaction
import info.nightscout.database.impl.transactions.InsertOrUpdateBolusTransaction import info.nightscout.database.impl.transactions.InsertOrUpdateBolusTransaction
@ -28,6 +29,8 @@ class PersistenceLayerImpl @Inject constructor(
) : PersistenceLayer { ) : PersistenceLayer {
private val disposable = CompositeDisposable() private val disposable = CompositeDisposable()
override fun clearDatabases() = repository.clearDatabases()
override fun cleanupDatabase(keepDays: Long, deleteTrackedChanges: Boolean): String = cleanupDatabase(keepDays, deleteTrackedChanges)
override fun insertOrUpdate(bolusCalculatorResult: BolusCalculatorResult) { override fun insertOrUpdate(bolusCalculatorResult: BolusCalculatorResult) {
disposable += repository.runTransactionForResult(InsertOrUpdateBolusCalculatorResultTransaction(bolusCalculatorResult)) disposable += repository.runTransactionForResult(InsertOrUpdateBolusCalculatorResultTransaction(bolusCalculatorResult))
@ -64,4 +67,5 @@ class PersistenceLayerImpl @Inject constructor(
} }
override fun getTemporaryTargetActiveAt(timestamp: Long): Single<ValueWrapper<TemporaryTarget>> = repository.getTemporaryTargetActiveAt(timestamp) override fun getTemporaryTargetActiveAt(timestamp: Long): Single<ValueWrapper<TemporaryTarget>> = repository.getTemporaryTargetActiveAt(timestamp)
override fun getUserEntryFilteredDataFromTime(timestamp: Long): Single<List<UserEntry>> = repository.getUserEntryFilteredDataFromTime(timestamp)
} }

View file

@ -4,7 +4,6 @@ import dagger.Binds
import dagger.Module import dagger.Module
import dagger.android.ContributesAndroidInjector import dagger.android.ContributesAndroidInjector
import info.nightscout.core.graph.OverviewData import info.nightscout.core.graph.OverviewData
import info.nightscout.implementation.AndroidPermissionImpl
import info.nightscout.implementation.BolusTimerImpl import info.nightscout.implementation.BolusTimerImpl
import info.nightscout.implementation.CarbTimerImpl import info.nightscout.implementation.CarbTimerImpl
import info.nightscout.implementation.DefaultValueHelperImpl import info.nightscout.implementation.DefaultValueHelperImpl
@ -18,7 +17,6 @@ import info.nightscout.implementation.androidNotification.NotificationHolderImpl
import info.nightscout.implementation.constraints.ConstraintsImpl import info.nightscout.implementation.constraints.ConstraintsImpl
import info.nightscout.implementation.db.PersistenceLayerImpl import info.nightscout.implementation.db.PersistenceLayerImpl
import info.nightscout.implementation.logging.LoggerUtilsImpl import info.nightscout.implementation.logging.LoggerUtilsImpl
import info.nightscout.implementation.maintenance.PrefFileListProviderImpl
import info.nightscout.implementation.overview.OverviewDataImpl import info.nightscout.implementation.overview.OverviewDataImpl
import info.nightscout.implementation.plugin.PluginStore import info.nightscout.implementation.plugin.PluginStore
import info.nightscout.implementation.profile.ProfileFunctionImpl import info.nightscout.implementation.profile.ProfileFunctionImpl
@ -39,7 +37,6 @@ import info.nightscout.implementation.stats.DexcomTirCalculatorImpl
import info.nightscout.implementation.stats.TddCalculatorImpl import info.nightscout.implementation.stats.TddCalculatorImpl
import info.nightscout.implementation.stats.TirCalculatorImpl import info.nightscout.implementation.stats.TirCalculatorImpl
import info.nightscout.implementation.storage.FileStorage import info.nightscout.implementation.storage.FileStorage
import info.nightscout.interfaces.AndroidPermission
import info.nightscout.interfaces.BolusTimer import info.nightscout.interfaces.BolusTimer
import info.nightscout.interfaces.CarbTimer import info.nightscout.interfaces.CarbTimer
import info.nightscout.interfaces.LocalAlertUtils import info.nightscout.interfaces.LocalAlertUtils
@ -50,7 +47,6 @@ import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.db.PersistenceLayer import info.nightscout.interfaces.db.PersistenceLayer
import info.nightscout.interfaces.logging.LoggerUtils import info.nightscout.interfaces.logging.LoggerUtils
import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.profile.DefaultValueHelper
import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profile.ProfileFunction
@ -88,7 +84,6 @@ abstract class ImplementationModule {
interface Bindings { interface Bindings {
@Binds fun bindPersistenceLayer(persistenceLayerImpl: PersistenceLayerImpl): PersistenceLayer @Binds fun bindPersistenceLayer(persistenceLayerImpl: PersistenceLayerImpl): PersistenceLayer
@Binds fun bindActivePlugin(pluginStore: PluginStore): ActivePlugin @Binds fun bindActivePlugin(pluginStore: PluginStore): ActivePlugin
@Binds fun bindPrefFileListProvider(prefFileListProviderImpl: PrefFileListProviderImpl): PrefFileListProvider
@Binds fun bindOverviewData(overviewData: OverviewDataImpl): OverviewData @Binds fun bindOverviewData(overviewData: OverviewDataImpl): OverviewData
@Binds fun bindUserEntryLogger(userEntryLoggerImpl: UserEntryLoggerImpl): UserEntryLogger @Binds fun bindUserEntryLogger(userEntryLoggerImpl: UserEntryLoggerImpl): UserEntryLogger
@Binds fun bindDetailedBolusInfoStorage(detailedBolusInfoStorageImpl: DetailedBolusInfoStorageImpl): DetailedBolusInfoStorage @Binds fun bindDetailedBolusInfoStorage(detailedBolusInfoStorageImpl: DetailedBolusInfoStorageImpl): DetailedBolusInfoStorage
@ -113,7 +108,6 @@ abstract class ImplementationModule {
@Binds fun bindXDripBroadcastInterface(xDripBroadcastImpl: XDripBroadcastImpl): XDripBroadcast @Binds fun bindXDripBroadcastInterface(xDripBroadcastImpl: XDripBroadcastImpl): XDripBroadcast
@Binds fun bindCarbTimerInterface(carbTimer: CarbTimerImpl): CarbTimer @Binds fun bindCarbTimerInterface(carbTimer: CarbTimerImpl): CarbTimer
@Binds fun bindBolusTimerInterface(bolusTimer: BolusTimerImpl): BolusTimer @Binds fun bindBolusTimerInterface(bolusTimer: BolusTimerImpl): BolusTimer
@Binds fun bindAndroidPermissionInterface(androidPermission: AndroidPermissionImpl): AndroidPermission
@Binds fun bindLocalAlertUtilsInterface(localAlertUtils: LocalAlertUtilsImpl): LocalAlertUtils @Binds fun bindLocalAlertUtilsInterface(localAlertUtils: LocalAlertUtilsImpl): LocalAlertUtils
@Binds fun bindIconsProviderInterface(iconsProvider: IconsProviderImplementation): IconsProvider @Binds fun bindIconsProviderInterface(iconsProvider: IconsProviderImplementation): IconsProvider
@Binds fun bindNotificationHolderInterface(notificationHolder: NotificationHolderImpl): NotificationHolder @Binds fun bindNotificationHolderInterface(notificationHolder: NotificationHolderImpl): NotificationHolder

View file

@ -10,10 +10,7 @@
<string name="time_to_bolus">Time to bolus!\nRun Bolus wizard and do calculation again.</string> <string name="time_to_bolus">Time to bolus!\nRun Bolus wizard and do calculation again.</string>
<string name="executing_right_now">Command is executed right now</string> <string name="executing_right_now">Command is executed right now</string>
<string name="basal_value_below_minimum">Basal value below minimum. Profile not set!</string> <string name="basal_value_below_minimum">Basal value below minimum. Profile not set!</string>
<string name="request">Request</string>
<string name="permission">Permission</string> <string name="permission">Permission</string>
<string name="error_asking_for_permissions">Error asking for permissions</string>
<string name="alert_dialog_permission_battery_optimization_failed">This device does not appear to support battery optimization whitelisting - you may experience performance issues.</string>
<string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string> <string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string>
<string name="need_location_permission">Application needs location permission for BT scan and WiFi identification</string> <string name="need_location_permission">Application needs location permission for BT scan and WiFi identification</string>
<string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string> <string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string>

View file

@ -29,6 +29,7 @@ import javax.inject.Singleton;
import dagger.android.HasAndroidInjector; import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.insight.R; import info.nightscout.androidaps.insight.R;
import info.nightscout.androidaps.insight.database.InsightBolusID; import info.nightscout.androidaps.insight.database.InsightBolusID;
import info.nightscout.androidaps.insight.database.InsightDatabase;
import info.nightscout.androidaps.insight.database.InsightDbHelper; import info.nightscout.androidaps.insight.database.InsightDbHelper;
import info.nightscout.androidaps.insight.database.InsightHistoryOffset; import info.nightscout.androidaps.insight.database.InsightHistoryOffset;
import info.nightscout.androidaps.insight.database.InsightPumpID; import info.nightscout.androidaps.insight.database.InsightPumpID;
@ -104,6 +105,7 @@ import info.nightscout.interfaces.Config;
import info.nightscout.interfaces.constraints.Constraint; import info.nightscout.interfaces.constraints.Constraint;
import info.nightscout.interfaces.constraints.Constraints; import info.nightscout.interfaces.constraints.Constraints;
import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.notifications.Notification;
import info.nightscout.interfaces.plugin.OwnDatabasePlugin;
import info.nightscout.interfaces.plugin.PluginDescription; import info.nightscout.interfaces.plugin.PluginDescription;
import info.nightscout.interfaces.plugin.PluginType; import info.nightscout.interfaces.plugin.PluginType;
import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.profile.Profile;
@ -132,7 +134,7 @@ import info.nightscout.shared.utils.DateUtil;
import info.nightscout.shared.utils.T; import info.nightscout.shared.utils.T;
@Singleton @Singleton
public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, Constraints, public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight, Constraints, OwnDatabasePlugin,
InsightConnectionService.StateCallback { InsightConnectionService.StateCallback {
private final AAPSLogger aapsLogger; private final AAPSLogger aapsLogger;
@ -145,6 +147,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight,
private final DateUtil dateUtil; private final DateUtil dateUtil;
private final InsightDbHelper insightDbHelper; private final InsightDbHelper insightDbHelper;
private final PumpSync pumpSync; private final PumpSync pumpSync;
private final InsightDatabase insightDatabase;
public static final String ALERT_CHANNEL_ID = "AAPS-InsightAlert"; public static final String ALERT_CHANNEL_ID = "AAPS-InsightAlert";
@ -205,7 +208,8 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight,
Config config, Config config,
DateUtil dateUtil, DateUtil dateUtil,
InsightDbHelper insightDbHelper, InsightDbHelper insightDbHelper,
PumpSync pumpSync PumpSync pumpSync,
InsightDatabase insightDatabase
) { ) {
super(new PluginDescription() super(new PluginDescription()
.pluginIcon(R.drawable.ic_insight_128) .pluginIcon(R.drawable.ic_insight_128)
@ -228,6 +232,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight,
this.dateUtil = dateUtil; this.dateUtil = dateUtil;
this.insightDbHelper = insightDbHelper; this.insightDbHelper = insightDbHelper;
this.pumpSync = pumpSync; this.pumpSync = pumpSync;
this.insightDatabase = insightDatabase;
pumpDescription = new PumpDescription(); pumpDescription = new PumpDescription();
pumpDescription.fillFor(PumpType.ACCU_CHEK_INSIGHT); pumpDescription.fillFor(PumpType.ACCU_CHEK_INSIGHT);
@ -1646,4 +1651,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Insight,
return true; return true;
} }
@Override public void clearAllTables() {
insightDatabase.clearAllTables();
}
} }

View file

@ -60,7 +60,6 @@
<string name="openapsma_iob_data_label">IOB data</string> <string name="openapsma_iob_data_label">IOB data</string>
<string name="openapsma_profile_label">Profile</string> <string name="openapsma_profile_label">Profile</string>
<string name="openapsma_meal_data_label">Meal data</string> <string name="openapsma_meal_data_label">Meal data</string>
<string name="result">Result</string>
<string name="openapsma_request_label">Request</string> <string name="openapsma_request_label">Request</string>
<string name="constraints">Constraints</string> <string name="constraints">Constraints</string>
<string name="openapsma_autosensdata_label">Autosens data</string> <string name="openapsma_autosensdata_label">Autosens data</string>

View file

@ -20,8 +20,13 @@ dependencies {
implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared')
implementation project(':database:entities') implementation project(':database:entities')
implementation project(':core:core-main') implementation project(':core:core-main')
implementation project(':core:graph')
implementation project(':core:interfaces') implementation project(':core:interfaces')
implementation project(':core:ns-sdk') implementation project(':core:ns-sdk')
implementation project(':core:utils') implementation project(':core:utils')
implementation project(':core:ui') implementation project(':core:ui')
//WorkManager
api "androidx.work:work-runtime-ktx:$work_version"
// Maintenance
api "androidx.gridlayout:gridlayout:$gridlayout_version"
} }

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<application> <application>
<activity <activity

View file

@ -1,4 +1,4 @@
package info.nightscout.implementation package info.nightscout.configuration
import android.Manifest import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
@ -13,7 +13,7 @@ import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.ui.toast.ToastUtils
import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.AndroidPermission

View file

@ -1,4 +1,4 @@
package info.nightscout.core.activities package info.nightscout.configuration.activities
import android.Manifest import android.Manifest
import android.content.Context import android.content.Context
@ -7,7 +7,7 @@ import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import dagger.android.support.DaggerAppCompatActivity import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract import info.nightscout.configuration.maintenance.PrefsFileContract
import info.nightscout.core.main.R import info.nightscout.core.main.R
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper

View file

@ -1,17 +1,16 @@
package info.nightscout.ui.activities package info.nightscout.configuration.activities
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult import info.nightscout.configuration.R
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.protection.ProtectionCheck
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.ui.R
import javax.inject.Inject import javax.inject.Inject
class SingleFragmentActivity : DaggerAppCompatActivityWithResult() { class SingleFragmentActivity : DaggerAppCompatActivityWithResult() {

View file

@ -3,11 +3,19 @@ package info.nightscout.configuration.di
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.android.ContributesAndroidInjector import dagger.android.ContributesAndroidInjector
import info.nightscout.configuration.AndroidPermissionImpl
import info.nightscout.configuration.configBuilder.ConfigBuilderFragment import info.nightscout.configuration.configBuilder.ConfigBuilderFragment
import info.nightscout.configuration.configBuilder.ConfigBuilderPlugin import info.nightscout.configuration.configBuilder.ConfigBuilderPlugin
import info.nightscout.configuration.configBuilder.RunningConfigurationImpl import info.nightscout.configuration.configBuilder.RunningConfigurationImpl
import info.nightscout.configuration.maintenance.ImportExportPrefsImpl
import info.nightscout.configuration.maintenance.PrefFileListProviderImpl
import info.nightscout.configuration.maintenance.activities.PrefImportListActivity
import info.nightscout.configuration.maintenance.formats.EncryptedPrefsFormat
import info.nightscout.interfaces.AndroidPermission
import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.ConfigBuilder
import info.nightscout.interfaces.configBuilder.RunningConfiguration import info.nightscout.interfaces.configBuilder.RunningConfiguration
import info.nightscout.interfaces.maintenance.ImportExportPrefs
import info.nightscout.interfaces.maintenance.PrefFileListProvider
@Module( @Module(
includes = [ includes = [
@ -17,11 +25,18 @@ import info.nightscout.interfaces.configBuilder.RunningConfiguration
abstract class ConfigurationModule { abstract class ConfigurationModule {
@ContributesAndroidInjector abstract fun contributesConfigBuilderFragment(): ConfigBuilderFragment @ContributesAndroidInjector abstract fun contributesConfigBuilderFragment(): ConfigBuilderFragment
@ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker
@ContributesAndroidInjector abstract fun contributesPrefImportListActivity(): PrefImportListActivity
@ContributesAndroidInjector abstract fun encryptedPrefsFormatInjector(): EncryptedPrefsFormat
@ContributesAndroidInjector abstract fun prefImportListProviderInjector(): PrefFileListProvider
@Module @Module
interface Bindings { interface Bindings {
@Binds fun bindAndroidPermissionInterface(androidPermission: AndroidPermissionImpl): AndroidPermission
@Binds fun bindPrefFileListProvider(prefFileListProviderImpl: PrefFileListProviderImpl): PrefFileListProvider
@Binds fun bindRunningConfiguration(runningConfigurationImpl: RunningConfigurationImpl): RunningConfiguration @Binds fun bindRunningConfiguration(runningConfigurationImpl: RunningConfigurationImpl): RunningConfiguration
@Binds fun bindConfigBuilderInterface(configBuilderPlugin: ConfigBuilderPlugin): ConfigBuilder @Binds fun bindConfigBuilderInterface(configBuilderPlugin: ConfigBuilderPlugin): ConfigBuilder
@Binds fun bindImportExportPrefsInterface(importExportPrefs: ImportExportPrefsImpl): ImportExportPrefs
} }
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance package info.nightscout.configuration.maintenance
import android.Manifest import android.Manifest
import android.bluetooth.BluetoothManager import android.bluetooth.BluetoothManager
@ -20,21 +20,21 @@ import androidx.work.Worker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.workDataOf import androidx.work.workDataOf
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.plugins.general.maintenance.formats.EncryptedPrefsFormat
import info.nightscout.androidaps.utils.userEntry.UserEntryPresentationHelper import info.nightscout.androidaps.utils.userEntry.UserEntryPresentationHelper
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult import info.nightscout.configuration.R
import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult
import info.nightscout.configuration.maintenance.dialogs.PrefImportSummaryDialog
import info.nightscout.configuration.maintenance.formats.EncryptedPrefsFormat
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.ui.dialogs.TwoMessagesAlertDialog import info.nightscout.core.ui.dialogs.TwoMessagesAlertDialog
import info.nightscout.core.ui.dialogs.WarningDialog
import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.ui.toast.ToastUtils
import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry
import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Action
import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.UserEntry.Sources
import info.nightscout.database.impl.AppRepository
import info.nightscout.interfaces.AndroidPermission import info.nightscout.interfaces.AndroidPermission
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.db.PersistenceLayer
import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.maintenance.ImportExportPrefs import info.nightscout.interfaces.maintenance.ImportExportPrefs
import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefFileListProvider
@ -48,17 +48,17 @@ import info.nightscout.interfaces.maintenance.PrefsMetadataKey
import info.nightscout.interfaces.maintenance.PrefsStatus import info.nightscout.interfaces.maintenance.PrefsStatus
import info.nightscout.interfaces.protection.PasswordCheck import info.nightscout.interfaces.protection.PasswordCheck
import info.nightscout.interfaces.storage.Storage import info.nightscout.interfaces.storage.Storage
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.MidnightTime import info.nightscout.interfaces.utils.MidnightTime
import info.nightscout.pump.diaconn.events.EventDiaconnG8PumpLogReset
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventAppExit import info.nightscout.rx.events.EventAppExit
import info.nightscout.rx.events.EventDiaconnG8PumpLogReset
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag import info.nightscout.rx.logging.LTag
import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.DateUtil
import info.nightscout.shared.utils.T import info.nightscout.shared.utils.T
import info.nightscout.ui.alertDialogs.PrefImportSummaryDialog
import java.io.File import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.io.IOException import java.io.IOException
@ -82,7 +82,8 @@ class ImportExportPrefsImpl @Inject constructor(
private val encryptedPrefsFormat: EncryptedPrefsFormat, private val encryptedPrefsFormat: EncryptedPrefsFormat,
private val prefFileList: PrefFileListProvider, private val prefFileList: PrefFileListProvider,
private val uel: UserEntryLogger, private val uel: UserEntryLogger,
private val dateUtil: DateUtil private val dateUtil: DateUtil,
private val activityNames: ActivityNames
) : ImportExportPrefs { ) : ImportExportPrefs {
override fun prefsFileExists(): Boolean { override fun prefsFileExists(): Boolean {
@ -111,8 +112,8 @@ class ImportExportPrefsImpl @Inject constructor(
metadata[PrefsMetadataKey.DEVICE_NAME] = PrefMetadata(detectUserName(context), PrefsStatus.OK) metadata[PrefsMetadataKey.DEVICE_NAME] = PrefMetadata(detectUserName(context), PrefsStatus.OK)
metadata[PrefsMetadataKey.CREATED_AT] = PrefMetadata(dateUtil.toISOString(dateUtil.now()), PrefsStatus.OK) metadata[PrefsMetadataKey.CREATED_AT] = PrefMetadata(dateUtil.toISOString(dateUtil.now()), PrefsStatus.OK)
metadata[PrefsMetadataKey.AAPS_VERSION] = PrefMetadata(BuildConfig.VERSION_NAME, PrefsStatus.OK) metadata[PrefsMetadataKey.AAPS_VERSION] = PrefMetadata(config.VERSION_NAME, PrefsStatus.OK)
metadata[PrefsMetadataKey.AAPS_FLAVOUR] = PrefMetadata(BuildConfig.FLAVOR, PrefsStatus.OK) metadata[PrefsMetadataKey.AAPS_FLAVOUR] = PrefMetadata(config.FLAVOR, PrefsStatus.OK)
metadata[PrefsMetadataKey.DEVICE_MODEL] = PrefMetadata(config.currentDeviceModelString, PrefsStatus.OK) metadata[PrefsMetadataKey.DEVICE_MODEL] = PrefMetadata(config.currentDeviceModelString, PrefsStatus.OK)
metadata[PrefsMetadataKey.ENCRYPTION] = PrefMetadata("Enabled", PrefsStatus.OK) metadata[PrefsMetadataKey.ENCRYPTION] = PrefMetadata("Enabled", PrefsStatus.OK)
@ -171,12 +172,12 @@ class ImportExportPrefsImpl @Inject constructor(
private fun assureMasterPasswordSet(activity: FragmentActivity, @StringRes wrongPwdTitle: Int): Boolean { private fun assureMasterPasswordSet(activity: FragmentActivity, @StringRes wrongPwdTitle: Int): Boolean {
if (!sp.contains(R.string.key_master_password) || (sp.getString(R.string.key_master_password, "") == "")) { if (!sp.contains(R.string.key_master_password) || (sp.getString(R.string.key_master_password, "") == "")) {
info.nightscout.core.ui.dialogs.WarningDialog.showWarning(activity, WarningDialog.showWarning(activity,
rh.gs(wrongPwdTitle), rh.gs(wrongPwdTitle),
rh.gs(R.string.master_password_missing, rh.gs(R.string.configbuilder_general), rh.gs(R.string.protection)), rh.gs(R.string.master_password_missing, rh.gs(R.string.configbuilder_general), rh.gs(R.string.protection)),
R.string.nav_preferences, { R.string.nav_preferences, {
val intent = Intent(activity, PreferencesActivity::class.java).apply { val intent = Intent(activity, activityNames.preferencesActivity).apply {
putExtra("id", R.xml.pref_general) putExtra("id", activityNames.prefGeneral)
} }
activity.startActivity(intent) activity.startActivity(intent)
}) })
@ -384,19 +385,19 @@ class ImportExportPrefsImpl @Inject constructor(
@Inject lateinit var injector: HasAndroidInjector @Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var repository: AppRepository
@Inject lateinit var rh: ResourceHelper @Inject lateinit var rh: ResourceHelper
@Inject lateinit var prefFileList: PrefFileListProvider @Inject lateinit var prefFileList: PrefFileListProvider
@Inject lateinit var context: Context @Inject lateinit var context: Context
@Inject lateinit var userEntryPresentationHelper: UserEntryPresentationHelper @Inject lateinit var userEntryPresentationHelper: UserEntryPresentationHelper
@Inject lateinit var storage: Storage @Inject lateinit var storage: Storage
@Inject lateinit var persistenceLayer: PersistenceLayer
init { init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this) (context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
} }
override fun doWork(): Result { override fun doWork(): Result {
val entries = repository.getUserEntryFilteredDataFromTime(MidnightTime.calc() - T.days(90).msecs()).blockingGet() val entries = persistenceLayer.getUserEntryFilteredDataFromTime(MidnightTime.calc() - T.days(90).msecs()).blockingGet()
prefFileList.ensureExportDirExists() prefFileList.ensureExportDirExists()
val newFile = prefFileList.newExportCsvFile() val newFile = prefFileList.newExportCsvFile()
var ret = Result.success() var ret = Result.success()

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance package info.nightscout.configuration.maintenance
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
@ -7,29 +7,26 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.text.toSpanned import androidx.core.text.toSpanned
import dagger.android.support.DaggerFragment import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R import info.nightscout.configuration.R
import info.nightscout.androidaps.databinding.MaintenanceFragmentBinding import info.nightscout.configuration.databinding.MaintenanceFragmentBinding
import info.nightscout.androidaps.insight.database.InsightDatabase import info.nightscout.configuration.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.DashHistoryDatabase
import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryDatabase
import info.nightscout.core.graph.OverviewData import info.nightscout.core.graph.OverviewData
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Action
import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.UserEntry.Sources
import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.db.PersistenceLayer
import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.maintenance.ImportExportPrefs import info.nightscout.interfaces.maintenance.ImportExportPrefs
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.OwnDatabasePlugin
import info.nightscout.interfaces.protection.ProtectionCheck import info.nightscout.interfaces.protection.ProtectionCheck
import info.nightscout.interfaces.protection.ProtectionCheck.Protection.PREFERENCES import info.nightscout.interfaces.protection.ProtectionCheck.Protection.PREFERENCES
import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.DataSyncSelector
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.interfaces.utils.HtmlHelper
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.pump.diaconn.database.DiaconnHistoryDatabase
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventPreferenceChange import info.nightscout.rx.events.EventPreferenceChange
@ -51,12 +48,7 @@ class MaintenanceFragment : DaggerFragment() {
@Inject lateinit var rh: ResourceHelper @Inject lateinit var rh: ResourceHelper
@Inject lateinit var importExportPrefs: ImportExportPrefs @Inject lateinit var importExportPrefs: ImportExportPrefs
@Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var repository: AppRepository @Inject lateinit var persistenceLayer: PersistenceLayer
@Inject lateinit var danaHistoryDatabase: DanaHistoryDatabase
@Inject lateinit var insightDatabase: InsightDatabase
@Inject lateinit var diaconnDatabase: DiaconnHistoryDatabase
@Inject lateinit var erosDatabase: ErosHistoryDatabase
@Inject lateinit var dashDatabase: DashHistoryDatabase
@Inject lateinit var protectionCheck: ProtectionCheck @Inject lateinit var protectionCheck: ProtectionCheck
@Inject lateinit var uel: UserEntryLogger @Inject lateinit var uel: UserEntryLogger
@Inject lateinit var dataSyncSelector: DataSyncSelector @Inject lateinit var dataSyncSelector: DataSyncSelector
@ -65,6 +57,7 @@ class MaintenanceFragment : DaggerFragment() {
@Inject lateinit var overviewData: OverviewData @Inject lateinit var overviewData: OverviewData
@Inject lateinit var fabricPrivacy: FabricPrivacy @Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var activityNames: ActivityNames @Inject lateinit var activityNames: ActivityNames
@Inject lateinit var activePlugin: ActivePlugin
private val disposable = CompositeDisposable() private val disposable = CompositeDisposable()
private var inMenu = false private var inMenu = false
@ -96,12 +89,10 @@ class MaintenanceFragment : DaggerFragment() {
OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.reset_db_confirm), Runnable { OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.reset_db_confirm), Runnable {
disposable += disposable +=
Completable.fromAction { Completable.fromAction {
repository.clearDatabases() persistenceLayer.clearDatabases()
danaHistoryDatabase.clearAllTables() for (plugin in activePlugin.getSpecificPluginsListByInterface(OwnDatabasePlugin::class.java)) {
insightDatabase.clearAllTables() (plugin as OwnDatabasePlugin).clearAllTables()
diaconnDatabase.clearAllTables() }
erosDatabase.clearAllTables()
dashDatabase.clearAllTables()
dataSyncSelector.resetToNextFullSync() dataSyncSelector.resetToNextFullSync()
pumpSync.connectNewPump() pumpSync.connectNewPump()
overviewData.reset() overviewData.reset()
@ -121,7 +112,7 @@ class MaintenanceFragment : DaggerFragment() {
activity?.let { activity -> activity?.let { activity ->
var result = "" var result = ""
OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.cleanup_db_confirm), Runnable { OKDialog.showConfirmation(activity, rh.gs(R.string.maintenance), rh.gs(R.string.cleanup_db_confirm), Runnable {
disposable += Completable.fromAction { result = repository.cleanupDatabase(93, deleteTrackedChanges = true) } disposable += Completable.fromAction { result = persistenceLayer.cleanupDatabase(93, deleteTrackedChanges = true) }
.subscribeOn(aapsSchedulers.io) .subscribeOn(aapsSchedulers.io)
.observeOn(aapsSchedulers.main) .observeOn(aapsSchedulers.main)
.subscribeBy( .subscribeBy(

View file

@ -1,19 +1,18 @@
package info.nightscout.androidaps.plugins.general.maintenance package info.nightscout.configuration.maintenance
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.BuildConfig import info.nightscout.configuration.R
import info.nightscout.androidaps.R
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.logging.LoggerUtils import info.nightscout.interfaces.logging.LoggerUtils
import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
@ -63,7 +62,7 @@ class MaintenancePlugin @Inject constructor(
aapsLogger.debug("zipFile: ${zipFile.absolutePath}") aapsLogger.debug("zipFile: ${zipFile.absolutePath}")
val zip = zipLogs(zipFile, logs) val zip = zipLogs(zipFile, logs)
val attachmentUri = val attachmentUri =
FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileprovider", zip) FileProvider.getUriForFile(context, config.APPLICATION_ID + ".fileprovider", zip)
val emailIntent: Intent = this.sendMail(attachmentUri, recipient, "Log Export") val emailIntent: Intent = this.sendMail(attachmentUri, recipient, "Log Export")
aapsLogger.debug("sending emailIntent") aapsLogger.debug("sending emailIntent")
context.startActivity(emailIntent) context.startActivity(emailIntent)
@ -185,11 +184,11 @@ class MaintenancePlugin @Inject constructor(
builder.append("If you want to provide logs for event older than a few hours," + System.lineSeparator()) builder.append("If you want to provide logs for event older than a few hours," + System.lineSeparator())
builder.append("you have to do it manually)" + System.lineSeparator()) builder.append("you have to do it manually)" + System.lineSeparator())
builder.append("-------------------------------------------------------" + System.lineSeparator()) builder.append("-------------------------------------------------------" + System.lineSeparator())
builder.append(rh.gs(R.string.app_name) + " " + BuildConfig.VERSION + System.lineSeparator()) builder.append(rh.gs(config.appName) + " " + config.VERSION + System.lineSeparator())
if (config.NSCLIENT) builder.append("NSCLIENT" + System.lineSeparator()) if (config.NSCLIENT) builder.append("NSCLIENT" + System.lineSeparator())
builder.append("Build: " + BuildConfig.BUILDVERSION + System.lineSeparator()) builder.append("Build: " + config.BUILD_VERSION + System.lineSeparator())
builder.append("Remote: " + BuildConfig.REMOTE + System.lineSeparator()) builder.append("Remote: " + config.REMOTE + System.lineSeparator())
builder.append("Flavor: " + BuildConfig.FLAVOR + BuildConfig.BUILD_TYPE + System.lineSeparator()) builder.append("Flavor: " + config.FLAVOR + config.BUILD_TYPE + System.lineSeparator())
builder.append(rh.gs(R.string.configbuilder_nightscoutversion_label) + " " + nsSettingsStatus.getVersion() + System.lineSeparator()) builder.append(rh.gs(R.string.configbuilder_nightscoutversion_label) + " " + nsSettingsStatus.getVersion() + System.lineSeparator())
if (config.isEngineeringMode()) builder.append(rh.gs(R.string.engineering_mode_enabled)) if (config.isEngineeringMode()) builder.append(rh.gs(R.string.engineering_mode_enabled))
return sendMail(attachmentUri, recipient, subject, builder.toString()) return sendMail(attachmentUri, recipient, subject, builder.toString())

View file

@ -1,13 +1,12 @@
package info.nightscout.implementation.maintenance package info.nightscout.configuration.maintenance
import android.content.Context import android.content.Context
import android.os.Environment import android.os.Environment
import dagger.Lazy import dagger.Lazy
import dagger.Reusable import dagger.Reusable
import info.nightscout.androidaps.annotations.OpenForTesting import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.plugins.general.maintenance.formats.EncryptedPrefsFormat import info.nightscout.configuration.maintenance.formats.EncryptedPrefsFormat
import info.nightscout.core.main.R import info.nightscout.core.main.R
import info.nightscout.interfaces.versionChecker.VersionCheckerUtils
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.maintenance.PrefMetadata import info.nightscout.interfaces.maintenance.PrefMetadata
@ -17,6 +16,7 @@ import info.nightscout.interfaces.maintenance.PrefsImportDir
import info.nightscout.interfaces.maintenance.PrefsMetadataKey import info.nightscout.interfaces.maintenance.PrefsMetadataKey
import info.nightscout.interfaces.maintenance.PrefsStatus import info.nightscout.interfaces.maintenance.PrefsStatus
import info.nightscout.interfaces.storage.Storage import info.nightscout.interfaces.storage.Storage
import info.nightscout.interfaces.versionChecker.VersionCheckerUtils
import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.interfaces.ResourceHelper
import org.joda.time.DateTime import org.joda.time.DateTime
import org.joda.time.Days import org.joda.time.Days

View file

@ -1,10 +1,10 @@
package info.nightscout.androidaps.plugins.general.maintenance package info.nightscout.configuration.maintenance
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.activity.result.contract.ActivityResultContract import androidx.activity.result.contract.ActivityResultContract
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImportListActivity import info.nightscout.configuration.maintenance.activities.PrefImportListActivity
import info.nightscout.core.utils.extensions.safeGetParcelableExtra import info.nightscout.core.utils.extensions.safeGetParcelableExtra
import info.nightscout.interfaces.maintenance.PrefsFile import info.nightscout.interfaces.maintenance.PrefsFile
@ -26,4 +26,3 @@ class PrefsFileContract : ActivityResultContract<Void?, PrefsFile?>() {
return Intent(context, PrefImportListActivity::class.java) return Intent(context, PrefImportListActivity::class.java)
} }
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance.activities package info.nightscout.configuration.maintenance.activities
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
@ -6,8 +6,8 @@ import android.widget.CheckBox
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import dagger.android.support.DaggerAppCompatActivity import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R import info.nightscout.configuration.R
import info.nightscout.androidaps.databinding.ActivityLogsettingBinding import info.nightscout.configuration.databinding.ActivityLogsettingBinding
import info.nightscout.rx.interfaces.L import info.nightscout.rx.interfaces.L
import info.nightscout.rx.interfaces.LogElement import info.nightscout.rx.interfaces.LogElement
import javax.inject.Inject import javax.inject.Inject

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance.activities package info.nightscout.configuration.maintenance.activities
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -11,10 +11,10 @@ import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerAppCompatActivity import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract import info.nightscout.configuration.databinding.MaintenanceImportListActivityBinding
import info.nightscout.configuration.databinding.MaintenanceImportListItemBinding
import info.nightscout.configuration.maintenance.PrefsFileContract
import info.nightscout.core.main.R import info.nightscout.core.main.R
import info.nightscout.core.main.databinding.MaintenanceImportListActivityBinding
import info.nightscout.core.main.databinding.MaintenanceImportListItemBinding
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper
import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.maintenance.PrefsFile import info.nightscout.interfaces.maintenance.PrefsFile

View file

@ -1,4 +1,4 @@
package info.nightscout.ui.alertDialogs package info.nightscout.configuration.maintenance.dialogs
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
@ -17,11 +17,11 @@ import androidx.annotation.StringRes
import androidx.annotation.StyleRes import androidx.annotation.StyleRes
import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.view.ContextThemeWrapper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.configuration.R
import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.ui.toast.ToastUtils
import info.nightscout.interfaces.maintenance.Prefs import info.nightscout.interfaces.maintenance.Prefs
import info.nightscout.interfaces.maintenance.PrefsStatus import info.nightscout.interfaces.maintenance.PrefsStatus
import info.nightscout.shared.extensions.runOnUiThread import info.nightscout.shared.extensions.runOnUiThread
import info.nightscout.ui.R
import java.util.LinkedList import java.util.LinkedList
object PrefImportSummaryDialog { object PrefImportSummaryDialog {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance.formats package info.nightscout.configuration.maintenance.formats
import info.nightscout.core.main.R import info.nightscout.core.main.R
import info.nightscout.core.utils.CryptoUtil import info.nightscout.core.utils.CryptoUtil

View file

@ -6,9 +6,9 @@ import android.view.View
import android.widget.TextView import android.widget.TextView
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.configuration.R import info.nightscout.configuration.R
import info.nightscout.configuration.activities.DaggerAppCompatActivityWithResult
import info.nightscout.configuration.databinding.ActivitySetupwizardBinding import info.nightscout.configuration.databinding.ActivitySetupwizardBinding
import info.nightscout.configuration.setupwizard.elements.SWItem import info.nightscout.configuration.setupwizard.elements.SWItem
import info.nightscout.core.activities.DaggerAppCompatActivityWithResult
import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.core.ui.locale.LocaleHelper.update import info.nightscout.core.ui.locale.LocaleHelper.update
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
tools:context=".plugins.general.maintenance.activities.LogSettingActivity"> tools:context="info.nightscout.configuration.maintenance.activities.LogSettingActivity">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -24,7 +24,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:importantForAccessibility="no" android:importantForAccessibility="no"
app:srcCompat="@mipmap/ic_launcher" /> app:srcCompat="@drawable/ic_aaps" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingTop="2dp" android:paddingTop="2dp"
tools:context=".plugins.general.maintenance.MaintenanceFragment"> tools:context="info.nightscout.configuration.maintenance.MaintenanceFragment">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -4,7 +4,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:orientation="vertical" android:orientation="vertical"
tools:context="info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImportListActivity"> tools:context="info.nightscout.configuration.maintenance.activities.PrefImportListActivity">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview" android:id="@+id/recyclerview"

View file

@ -24,7 +24,6 @@
<string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string> <string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string>
<string name="askforpermission">Ask for permission</string> <string name="askforpermission">Ask for permission</string>
<string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string> <string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string>
<string name="import_setting">Import settings</string>
<string name="storedsettingsfound">Stored settings found</string> <string name="storedsettingsfound">Stored settings found</string>
<string name="master_password_summary">Master password is used for backup encryption and to override security in application. Remember it or store on a safe place.</string> <string name="master_password_summary">Master password is used for backup encryption and to override security in application. Remember it or store on a safe place.</string>
<string name="current_master_password">Current master password</string> <string name="current_master_password">Current master password</string>
@ -54,9 +53,11 @@
<string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string> <string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string>
<string name="summary_email_for_crash_report">This identification will attached to crash reports so we can contact you in urgent cases. It\'s optional.</string> <string name="summary_email_for_crash_report">This identification will attached to crash reports so we can contact you in urgent cases. It\'s optional.</string>
<string name="identification">Identification (email, FB or Discord nick etc)</string> <string name="identification">Identification (email, FB or Discord nick etc)</string>
<string name="request">Request</string>
<string name="apsmode_title">APS Mode</string> <string name="apsmode_title">APS Mode</string>
<string name="setupwizard_preferred_aps_mode">Preferred APS mode</string> <string name="setupwizard_preferred_aps_mode">Preferred APS mode</string>
<string name="error_asking_for_permissions">Error asking for permissions</string>
<string name="alert_dialog_permission_battery_optimization_failed">This device does not appear to support battery optimization whitelisting - you may experience performance issues.</string>
<!-- ConfigBuilder--> <!-- ConfigBuilder-->
<string name="config_builder">Config Builder</string> <string name="config_builder">Config Builder</string>
@ -83,5 +84,56 @@
<string name="allow_hardware_pump_text">Attention: If you activate and connect to a hardware pump, AAPS will copy the basal settings from the profile to the pump, overwriting the existing basal rate stored on the pump. Make sure you have the correct basal setting in AAPS. If you are not sure or don\'t want to overwrite the basal settings on your pump, press cancel and repeat switching to the pump at a later time.</string> <string name="allow_hardware_pump_text">Attention: If you activate and connect to a hardware pump, AAPS will copy the basal settings from the profile to the pump, overwriting the existing basal rate stored on the pump. Make sure you have the correct basal setting in AAPS. If you are not sure or don\'t want to overwrite the basal settings on your pump, press cancel and repeat switching to the pump at a later time.</string>
<string name="a11y_open_settings">open settings</string> <string name="a11y_open_settings">open settings</string>
<!--ImportExport-->
<string name="nav_preferences">Preferences</string>
<string name="password_preferences_encrypt_prompt">You will be asked for master password, which will be used to encrypt exported preferences.</string>
<string name="preferences_export_canceled">Export canceled! Preferences were NOT exported!</string>
<string name="preferences_import_canceled">Import canceled! Preferences were NOT imported!</string>
<string name="preferences_import_impossible">Cannot import preferences!</string>
<string name="check_preferences_details_btn">Explain import issues…</string>
<string name="check_preferences_details_title">Import issues details</string>
<string name="check_preferences_import_btn">Import</string>
<string name="check_preferences_import_anyway_btn">Import anyway (DANGEROUS!)</string>
<string name="import_setting">Import settings</string>
<string name="check_preferences_before_import">Please check preferences before importing:</string>
<string name="check_preferences_cannot_import">Preferences cannot be imported!</string>
<string name="check_preferences_dangerous_import">Preferences should not be imported!</string>
<string name="nav_export">Export settings</string>
<string name="export_to">Export settings to</string>
<string name="import_from">Import settings from</string>
<string name="setting_imported">Settings imported</string>
<string name="old_master_password">Old Master Password</string>
<string name="different_password_used">This file was exported and encrypted with different master password. Provide old master password to decrypt file.</string>
<string name="master_password_will_be_replaced">As a result of successful import current master password WILL BE REPLACED with that old master password!</string>
<string name="exported">Preferences exported</string>
<string name="filenotfound">File not found</string>
<string name="goto_main_try_again">Please go back to main screen and try again.</string>
<string name="restartingapp">Exiting application to apply settings.</string>
<string name="ue_exported">User Entries exported</string>
<!-- Maintenance-->
<string name="maintenance">Maintenance</string>
<string name="maintenance_shortname">MAINT</string>
<string name="description_maintenance">Provides several functions for maintenance (eg. log sending, log deletion).</string>
<string name="database_cleanup">Database cleanup</string>
<string name="cleanup_db_confirm">Do you want to cleanup the database?\nIt will remove tracked changes and historic data older than 3 months.</string>
<string name="cleared_entries">Cleared entries</string>
<string name="reset_db_confirm">Do you really want to reset the databases?</string>
<string name="maintenance_settings">Maintenance Settings</string>
<string name="maintenance_email">Email recipient</string>
<string name="key_maintenance_logs_email" translatable="false">maintenance_logs_email</string>
<string name="key_maintenance_logs_amount" translatable="false">maintenance_logs_amount</string>
<string name="key_logshipper_amount" translatable="false">logshipper_amount</string>
<string name="maintenance_amount">No of Logs to send</string>
<string name="send_all_logs">Send Logs by Email</string>
<string name="delete_logs">Delete Logs</string>
<string name="configbuilder_nightscoutversion_label">Nightscout version:</string>
<string name="engineering_mode_enabled">Engineering mode enabled</string>
<string name="log_files">Log files</string>
<string name="nav_logsettings">Log settings</string>
<string name="miscellaneous">Miscellaneous</string>
<string name="nav_resetdb">Reset Databases</string>
<string name="resettodefaults">Reset to defaults</string>
</resources> </resources>

View file

@ -0,0 +1,39 @@
package info.nightscout.androidaps
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.TestAapsSchedulers
import info.nightscout.rx.logging.AAPSLoggerTest
import org.junit.Before
import org.junit.Rule
import org.mockito.Mockito
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoRule
import java.util.Locale
open class TestBase {
val aapsLogger = AAPSLoggerTest()
val aapsSchedulers: AapsSchedulers = TestAapsSchedulers()
// Add a JUnit rule that will setup the @Mock annotated vars and log.
// Another possibility would be to add `MockitoAnnotations.initMocks(this) to the setup method.
@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Before
fun setupLocale() {
Locale.setDefault(Locale.ENGLISH)
System.setProperty("disableFirebase", "true")
}
// Workaround for Kotlin nullability.
// https://medium.com/@elye.project/befriending-kotlin-and-mockito-1c2e7b0ef791
// https://stackoverflow.com/questions/30305217/is-it-possible-to-use-mockito-in-kotlin
fun <T> anyObject(): T {
Mockito.any<T>()
return uninitialized()
}
@Suppress("Unchecked_Cast")
fun <T> uninitialized(): T = null as T
}

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance.formats package info.nightscout.configuration.maintenance.formats
import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.TestBase
import info.nightscout.core.utils.CryptoUtil import info.nightscout.core.utils.CryptoUtil

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.plugins.general.maintenance.formats package info.nightscout.configuration.maintenance.formats
import info.nightscout.interfaces.storage.Storage import info.nightscout.interfaces.storage.Storage
import java.io.File import java.io.File

View file

@ -54,7 +54,6 @@ dependencies {
api 'com.google.android.flexbox:flexbox:3.0.0' api 'com.google.android.flexbox:flexbox:3.0.0'
// Food // Food
api "androidx.work:work-runtime:$work_version"
api "androidx.work:work-runtime-ktx:$work_version" api "androidx.work:work-runtime-ktx:$work_version"
// DataLayerListenerService // DataLayerListenerService

View file

@ -33,7 +33,6 @@
<string name="smscommunicator_otp_reset_warning">By resetting authenticator you make all already provisioned authenticators invalid. You will need to set up them again!</string> <string name="smscommunicator_otp_reset_warning">By resetting authenticator you make all already provisioned authenticators invalid. You will need to set up them again!</string>
<string name="sms_wrong_code">Wrong code. Command cancelled.</string> <string name="sms_wrong_code">Wrong code. Command cancelled.</string>
<string name="sms_timeout_while_waiting">Timeout while waiting for finish of previous pump communication</string> <string name="sms_timeout_while_waiting">Timeout while waiting for finish of previous pump communication</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">User</string>
<string name="smscommunicator_allowednumbers">Allowed phone numbers</string> <string name="smscommunicator_allowednumbers">Allowed phone numbers</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string> <string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>
<string name="smscommunicator_bolus_reply_with_code">To deliver bolus %1$.2fU reply with code %2$s</string> <string name="smscommunicator_bolus_reply_with_code">To deliver bolus %1$.2fU reply with code %2$s</string>

View file

@ -28,7 +28,6 @@ dependencies {
api "androidx.browser:browser:1.4.0" api "androidx.browser:browser:1.4.0"
//WorkManager //WorkManager
api "androidx.work:work-runtime:$work_version"
api "androidx.work:work-runtime-ktx:$work_version" api "androidx.work:work-runtime-ktx:$work_version"
//api "androidx.work:work-rxjava3:$work_version" //api "androidx.work:work-rxjava3:$work_version"
//api 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' //api 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

View file

@ -23,6 +23,7 @@ import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.Round import info.nightscout.interfaces.utils.Round
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventAppExit import info.nightscout.rx.events.EventAppExit
@ -55,8 +56,9 @@ class DanaRKoreanPlugin @Inject constructor(
dateUtil: DateUtil, dateUtil: DateUtil,
private val fabricPrivacy: FabricPrivacy, private val fabricPrivacy: FabricPrivacy,
pumpSync: PumpSync, pumpSync: PumpSync,
activityNames: ActivityNames activityNames: ActivityNames,
) : AbstractDanaRPlugin(injector, danaPump, rh, constraintChecker, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames) { danaHistoryDatabase: DanaHistoryDatabase
) : AbstractDanaRPlugin(injector, danaPump, rh, constraintChecker, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames, danaHistoryDatabase) {
init { init {
pluginDescription.description(R.string.description_pump_dana_r_korean) pluginDescription.description(R.string.description_pump_dana_r_korean)

View file

@ -30,6 +30,7 @@ import info.nightscout.interfaces.queue.CommandQueue;
import info.nightscout.interfaces.ui.ActivityNames; import info.nightscout.interfaces.ui.ActivityNames;
import info.nightscout.interfaces.utils.Round; import info.nightscout.interfaces.utils.Round;
import info.nightscout.pump.dana.DanaPump; import info.nightscout.pump.dana.DanaPump;
import info.nightscout.pump.dana.database.DanaHistoryDatabase;
import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.AapsSchedulers;
import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.bus.RxBus;
import info.nightscout.rx.events.EventAppExit; import info.nightscout.rx.events.EventAppExit;
@ -74,9 +75,10 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
DateUtil dateUtil, DateUtil dateUtil,
FabricPrivacy fabricPrivacy, FabricPrivacy fabricPrivacy,
PumpSync pumpSync, PumpSync pumpSync,
ActivityNames activityNames ActivityNames activityNames,
DanaHistoryDatabase danaHistoryDatabase
) { ) {
super(injector, danaPump, rh, constraintChecker, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames); super(injector, danaPump, rh, constraintChecker, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames, danaHistoryDatabase);
this.aapsLogger = aapsLogger; this.aapsLogger = aapsLogger;
this.context = context; this.context = context;
this.rh = rh; this.rh = rh;

View file

@ -11,6 +11,7 @@ import info.nightscout.interfaces.constraints.Constraint;
import info.nightscout.interfaces.constraints.Constraints; import info.nightscout.interfaces.constraints.Constraints;
import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.notifications.Notification;
import info.nightscout.interfaces.plugin.ActivePlugin; import info.nightscout.interfaces.plugin.ActivePlugin;
import info.nightscout.interfaces.plugin.OwnDatabasePlugin;
import info.nightscout.interfaces.plugin.PluginDescription; import info.nightscout.interfaces.plugin.PluginDescription;
import info.nightscout.interfaces.plugin.PluginType; import info.nightscout.interfaces.plugin.PluginType;
import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.profile.Profile;
@ -28,6 +29,7 @@ import info.nightscout.interfaces.utils.Round;
import info.nightscout.pump.dana.DanaFragment; import info.nightscout.pump.dana.DanaFragment;
import info.nightscout.pump.dana.DanaPump; import info.nightscout.pump.dana.DanaPump;
import info.nightscout.pump.dana.comm.RecordTypes; import info.nightscout.pump.dana.comm.RecordTypes;
import info.nightscout.pump.dana.database.DanaHistoryDatabase;
import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.AapsSchedulers;
import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.bus.RxBus;
import info.nightscout.rx.events.EventConfigBuilderChange; import info.nightscout.rx.events.EventConfigBuilderChange;
@ -44,7 +46,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
* Created by mike on 28.01.2018. * Created by mike on 28.01.2018.
*/ */
public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump, Dana, Constraints { public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump, Dana, Constraints, OwnDatabasePlugin {
protected AbstractDanaRExecutionService sExecutionService; protected AbstractDanaRExecutionService sExecutionService;
protected CompositeDisposable disposable = new CompositeDisposable(); protected CompositeDisposable disposable = new CompositeDisposable();
@ -61,7 +63,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump
protected AapsSchedulers aapsSchedulers; protected AapsSchedulers aapsSchedulers;
protected PumpSync pumpSync; protected PumpSync pumpSync;
protected ActivityNames activityNames; protected ActivityNames activityNames;
protected DanaHistoryDatabase danaHistoryDatabase;
protected AbstractDanaRPlugin( protected AbstractDanaRPlugin(
HasAndroidInjector injector, HasAndroidInjector injector,
DanaPump danaPump, DanaPump danaPump,
@ -75,7 +77,8 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump
SP sp, SP sp,
DateUtil dateUtil, DateUtil dateUtil,
PumpSync pumpSync, PumpSync pumpSync,
ActivityNames activityNames ActivityNames activityNames,
DanaHistoryDatabase danaHistoryDatabase
) { ) {
super(new PluginDescription() super(new PluginDescription()
.mainType(PluginType.PUMP) .mainType(PluginType.PUMP)
@ -96,6 +99,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump
this.aapsSchedulers = aapsSchedulers; this.aapsSchedulers = aapsSchedulers;
this.pumpSync = pumpSync; this.pumpSync = pumpSync;
this.activityNames = activityNames; this.activityNames = activityNames;
this.danaHistoryDatabase = danaHistoryDatabase;
} }
@Override protected void onStart() { @Override protected void onStart() {
@ -516,4 +520,8 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump
@Override public void clearPairing() { @Override public void clearPairing() {
} }
@Override public void clearAllTables() {
danaHistoryDatabase.clearAllTables();
}
} }

View file

@ -26,6 +26,7 @@ import info.nightscout.interfaces.queue.CommandQueue;
import info.nightscout.interfaces.ui.ActivityNames; import info.nightscout.interfaces.ui.ActivityNames;
import info.nightscout.interfaces.utils.Round; import info.nightscout.interfaces.utils.Round;
import info.nightscout.pump.dana.DanaPump; import info.nightscout.pump.dana.DanaPump;
import info.nightscout.pump.dana.database.DanaHistoryDatabase;
import info.nightscout.rx.AapsSchedulers; import info.nightscout.rx.AapsSchedulers;
import info.nightscout.rx.bus.RxBus; import info.nightscout.rx.bus.RxBus;
import info.nightscout.rx.events.EventAppExit; import info.nightscout.rx.events.EventAppExit;
@ -64,9 +65,10 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
DateUtil dateUtil, DateUtil dateUtil,
FabricPrivacy fabricPrivacy, FabricPrivacy fabricPrivacy,
PumpSync pumpSync, PumpSync pumpSync,
ActivityNames activityNames ActivityNames activityNames,
DanaHistoryDatabase danaHistoryDatabase
) { ) {
super(injector, danaPump, rh, constraints, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames); super(injector, danaPump, rh, constraints, aapsLogger, aapsSchedulers, commandQueue, rxBus, activePlugin, sp, dateUtil, pumpSync, activityNames, danaHistoryDatabase);
this.aapsLogger = aapsLogger; this.aapsLogger = aapsLogger;
this.context = context; this.context = context;
this.rh = rh; this.rh = rh;

View file

@ -14,6 +14,7 @@ import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -29,6 +30,7 @@ class DanaRPluginTest : TestBaseWithProfile() {
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator @Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var activityNames: ActivityNames @Mock lateinit var activityNames: ActivityNames
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
lateinit var danaPump: DanaPump lateinit var danaPump: DanaPump
@ -46,7 +48,8 @@ class DanaRPluginTest : TestBaseWithProfile() {
`when`(rh.gs(R.string.limitingbasalratio)).thenReturn("Limiting max basal rate to %1\$.2f U/h because of %2\$s") `when`(rh.gs(R.string.limitingbasalratio)).thenReturn("Limiting max basal rate to %1\$.2f U/h because of %2\$s")
`when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s") `when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator) danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync, activityNames) danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync,
activityNames, danaHistoryDatabase)
} }
@Test @Throws(Exception::class) @Test @Throws(Exception::class)

View file

@ -14,6 +14,7 @@ import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -29,6 +30,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator @Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var activityNames: ActivityNames @Mock lateinit var activityNames: ActivityNames
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
lateinit var danaPump: DanaPump lateinit var danaPump: DanaPump
@ -47,7 +49,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
`when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s") `when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator) danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaRPlugin = DanaRKoreanPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, danaRPlugin = DanaRKoreanPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy,
pumpSync, activityNames) pumpSync, activityNames, danaHistoryDatabase)
} }
@Test @Throws(Exception::class) @Test @Throws(Exception::class)

View file

@ -16,6 +16,7 @@ import info.nightscout.interfaces.pump.TemporaryBasalStorage
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -32,6 +33,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator @Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var activityNames: ActivityNames @Mock lateinit var activityNames: ActivityNames
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
lateinit var danaPump: DanaPump lateinit var danaPump: DanaPump
@ -50,7 +52,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
`when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s") `when`(rh.gs(R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator) danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaRv2Plugin = DanaRv2Plugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump,detailedBolusInfoStorage, danaRv2Plugin = DanaRv2Plugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump,detailedBolusInfoStorage,
temporaryBasalStorage, dateUtil, fabricPrivacy, pumpSync, activityNames) temporaryBasalStorage, dateUtil, fabricPrivacy, pumpSync, activityNames, danaHistoryDatabase)
} }
@Test @Test

View file

@ -13,6 +13,7 @@ import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.OwnDatabasePlugin
import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.Profile
@ -35,6 +36,7 @@ import info.nightscout.interfaces.utils.Round
import info.nightscout.pump.dana.DanaFragment import info.nightscout.pump.dana.DanaFragment
import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.comm.RecordTypes import info.nightscout.pump.dana.comm.RecordTypes
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.pump.danars.events.EventDanaRSDeviceChange import info.nightscout.pump.danars.events.EventDanaRSDeviceChange
import info.nightscout.pump.danars.services.DanaRSService import info.nightscout.pump.danars.services.DanaRSService
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
@ -76,7 +78,8 @@ class DanaRSPlugin @Inject constructor(
private val temporaryBasalStorage: TemporaryBasalStorage, private val temporaryBasalStorage: TemporaryBasalStorage,
private val fabricPrivacy: FabricPrivacy, private val fabricPrivacy: FabricPrivacy,
private val dateUtil: DateUtil, private val dateUtil: DateUtil,
private val activityNames: ActivityNames private val activityNames: ActivityNames,
private val danaHistoryDatabase: DanaHistoryDatabase
) : PumpPluginBase( ) : PumpPluginBase(
PluginDescription() PluginDescription()
.mainType(PluginType.PUMP) .mainType(PluginType.PUMP)
@ -88,7 +91,7 @@ class DanaRSPlugin @Inject constructor(
.preferencesId(R.xml.pref_danars) .preferencesId(R.xml.pref_danars)
.description(R.string.description_pump_dana_rs), .description(R.string.description_pump_dana_rs),
injector, aapsLogger, rh, commandQueue injector, aapsLogger, rh, commandQueue
), Pump, Dana, Constraints { ), Pump, Dana, Constraints, OwnDatabasePlugin {
private val disposable = CompositeDisposable() private val disposable = CompositeDisposable()
private var danaRSService: DanaRSService? = null private var danaRSService: DanaRSService? = null
@ -637,4 +640,6 @@ class DanaRSPlugin @Inject constructor(
sp.remove(rh.gs(R.string.key_danars_v3_randomsynckey) + mDeviceName) sp.remove(rh.gs(R.string.key_danars_v3_randomsynckey) + mDeviceName)
sp.remove(rh.gs(R.string.key_dana_ble5_pairingkey) + mDeviceName) sp.remove(rh.gs(R.string.key_dana_ble5_pairingkey) + mDeviceName)
} }
override fun clearAllTables() = danaHistoryDatabase.clearAllTables()
} }

View file

@ -10,6 +10,7 @@ import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.TemporaryBasalStorage import info.nightscout.interfaces.pump.TemporaryBasalStorage
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -26,6 +27,7 @@ class DanaRSPluginTest : DanaRSTestBase() {
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
@Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
private lateinit var danaRSPlugin: DanaRSPlugin private lateinit var danaRSPlugin: DanaRSPlugin
@ -77,7 +79,8 @@ class DanaRSPluginTest : DanaRSTestBase() {
temporaryBasalStorage, temporaryBasalStorage,
fabricPrivacy, fabricPrivacy,
dateUtil, dateUtil,
activityNames activityNames,
danaHistoryDatabase
) )
} }
} }

View file

@ -9,6 +9,7 @@ import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.TemporaryBasalStorage import info.nightscout.interfaces.pump.TemporaryBasalStorage
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.pump.danars.DanaRSTestBase import info.nightscout.pump.danars.DanaRSTestBase
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -24,6 +25,7 @@ class DanaRsPacketBolusSetStepBolusStartTest : DanaRSTestBase() {
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
@Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
private lateinit var danaRSPlugin: info.nightscout.pump.danars.DanaRSPlugin private lateinit var danaRSPlugin: info.nightscout.pump.danars.DanaRSPlugin
@ -71,7 +73,8 @@ class DanaRsPacketBolusSetStepBolusStartTest : DanaRSTestBase() {
temporaryBasalStorage, temporaryBasalStorage,
fabricPrivacy, fabricPrivacy,
dateUtil, dateUtil,
activityNames activityNames,
danaHistoryDatabase
) )
Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0)) Mockito.`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(Constraint(0.0))
} }

View file

@ -4,11 +4,11 @@ import android.content.Context
import dagger.android.AndroidInjector import dagger.android.AndroidInjector
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.TemporaryBasalStorage import info.nightscout.interfaces.pump.TemporaryBasalStorage
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.pump.danars.DanaRSTestBase import info.nightscout.pump.danars.DanaRSTestBase
import info.nightscout.rx.events.EventOverviewBolusProgress import info.nightscout.rx.events.EventOverviewBolusProgress
import org.junit.Assert import org.junit.Assert
@ -20,7 +20,7 @@ import org.mockito.Mockito.`when`
class DanaRsPacketNotifyDeliveryRateDisplayTest : DanaRSTestBase() { class DanaRsPacketNotifyDeliveryRateDisplayTest : DanaRSTestBase() {
@Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@Mock lateinit var constraintChecker: Constraints @Mock lateinit var constraintChecker: Constraints
@Mock lateinit var commandQueue: CommandQueue @Mock lateinit var commandQueue: CommandQueue
@Mock lateinit var context: Context @Mock lateinit var context: Context
@ -77,7 +77,8 @@ class DanaRsPacketNotifyDeliveryRateDisplayTest : DanaRSTestBase() {
temporaryBasalStorage, temporaryBasalStorage,
fabricPrivacy, fabricPrivacy,
dateUtil, dateUtil,
activityNames activityNames,
danaHistoryDatabase
) )
danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0)
} }

View file

@ -14,6 +14,7 @@ import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.OwnDatabasePlugin
import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.Profile
@ -35,6 +36,7 @@ import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.DecimalFormatter
import info.nightscout.interfaces.utils.Round import info.nightscout.interfaces.utils.Round
import info.nightscout.pump.diaconn.database.DiaconnHistoryDatabase
import info.nightscout.pump.diaconn.events.EventDiaconnG8DeviceChange import info.nightscout.pump.diaconn.events.EventDiaconnG8DeviceChange
import info.nightscout.pump.diaconn.service.DiaconnG8Service import info.nightscout.pump.diaconn.service.DiaconnG8Service
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
@ -75,7 +77,8 @@ class DiaconnG8Plugin @Inject constructor(
private val fabricPrivacy: FabricPrivacy, private val fabricPrivacy: FabricPrivacy,
private val dateUtil: DateUtil, private val dateUtil: DateUtil,
private val aapsSchedulers: AapsSchedulers, private val aapsSchedulers: AapsSchedulers,
private val activityNames: ActivityNames private val activityNames: ActivityNames,
private val diaconnHistoryDatabase: DiaconnHistoryDatabase
) : PumpPluginBase( ) : PumpPluginBase(
PluginDescription() PluginDescription()
.mainType(PluginType.PUMP) .mainType(PluginType.PUMP)
@ -86,7 +89,7 @@ class DiaconnG8Plugin @Inject constructor(
.preferencesId(R.xml.pref_diaconn) .preferencesId(R.xml.pref_diaconn)
.description(R.string.description_pump_diaconn_g8), .description(R.string.description_pump_diaconn_g8),
injector, aapsLogger, rh, commandQueue injector, aapsLogger, rh, commandQueue
), Pump, Diaconn, Constraints { ), Pump, Diaconn, Constraints, OwnDatabasePlugin {
private val disposable = CompositeDisposable() private val disposable = CompositeDisposable()
private var diaconnG8Service: DiaconnG8Service? = null private var diaconnG8Service: DiaconnG8Service? = null
@ -605,4 +608,6 @@ class DiaconnG8Plugin @Inject constructor(
} }
} }
override fun clearAllTables() = diaconnHistoryDatabase.clearAllTables()
} }

View file

@ -1,5 +0,0 @@
package info.nightscout.pump.diaconn.events
import info.nightscout.rx.events.Event
class EventDiaconnG8PumpLogReset : Event()

View file

@ -30,6 +30,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.BasalVa
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.BolusRecord import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.BolusRecord
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.BolusType import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.BolusType
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.TempBasalRecord import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.data.TempBasalRecord
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.DashHistoryDatabase
import info.nightscout.androidaps.plugins.pump.omnipod.dash.ui.OmnipodDashOverviewFragment import info.nightscout.androidaps.plugins.pump.omnipod.dash.ui.OmnipodDashOverviewFragment
import info.nightscout.androidaps.plugins.pump.omnipod.dash.util.Constants import info.nightscout.androidaps.plugins.pump.omnipod.dash.util.Constants
import info.nightscout.androidaps.plugins.pump.omnipod.dash.util.mapProfileToBasalProgram import info.nightscout.androidaps.plugins.pump.omnipod.dash.util.mapProfileToBasalProgram
@ -37,6 +38,7 @@ import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.utils.DateTimeUtil import info.nightscout.core.utils.DateTimeUtil
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.OwnDatabasePlugin
import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.Profile
@ -105,8 +107,9 @@ class OmnipodDashPumpPlugin @Inject constructor(
injector: HasAndroidInjector, injector: HasAndroidInjector,
aapsLogger: AAPSLogger, aapsLogger: AAPSLogger,
rh: ResourceHelper, rh: ResourceHelper,
commandQueue: CommandQueue commandQueue: CommandQueue,
) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, OmnipodDash { private val dashHistoryDatabase: DashHistoryDatabase
) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, OmnipodDash, OwnDatabasePlugin {
@Volatile var bolusCanceled = false @Volatile var bolusCanceled = false
@Volatile var bolusDeliveryInProgress = false @Volatile var bolusDeliveryInProgress = false
@ -1524,4 +1527,6 @@ class OmnipodDashPumpPlugin @Inject constructor(
else -> true else -> true
} }
} }
override fun clearAllTables() = dashHistoryDatabase.clearAllTables()
} }

View file

@ -62,6 +62,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodEr
import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosPumpValuesChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosTbrChanged; import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosTbrChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosUncertainTbrRecovered; import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosUncertainTbrRecovered;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryDatabase;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsOmnipodErosManager; import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsOmnipodErosManager;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.queue.command.CommandGetPodStatus; import info.nightscout.androidaps.plugins.pump.omnipod.eros.queue.command.CommandGetPodStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.eros.queue.command.CommandReadPulseLog; import info.nightscout.androidaps.plugins.pump.omnipod.eros.queue.command.CommandReadPulseLog;
@ -76,6 +77,7 @@ import info.nightscout.core.utils.DateTimeUtil;
import info.nightscout.core.utils.fabric.FabricPrivacy; import info.nightscout.core.utils.fabric.FabricPrivacy;
import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.notifications.Notification;
import info.nightscout.interfaces.plugin.ActivePlugin; import info.nightscout.interfaces.plugin.ActivePlugin;
import info.nightscout.interfaces.plugin.OwnDatabasePlugin;
import info.nightscout.interfaces.plugin.PluginDescription; import info.nightscout.interfaces.plugin.PluginDescription;
import info.nightscout.interfaces.plugin.PluginType; import info.nightscout.interfaces.plugin.PluginType;
import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.profile.Profile;
@ -120,7 +122,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
* @author Andy Rozman (andy.rozman@gmail.com) * @author Andy Rozman (andy.rozman@gmail.com)
*/ */
@Singleton @Singleton
public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, RileyLinkPumpDevice, OmnipodEros { public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, RileyLinkPumpDevice, OmnipodEros, OwnDatabasePlugin {
private static final long RILEY_LINK_CONNECT_TIMEOUT_MILLIS = 3 * 60 * 1_000L; // 3 minutes private static final long RILEY_LINK_CONNECT_TIMEOUT_MILLIS = 3 * 60 * 1_000L; // 3 minutes
private static final long STATUS_CHECK_INTERVAL_MILLIS = 60 * 1_000L; // 1 minute private static final long STATUS_CHECK_INTERVAL_MILLIS = 60 * 1_000L; // 1 minute
public static final int STARTUP_STATUS_REQUEST_TRIES = 2; public static final int STARTUP_STATUS_REQUEST_TRIES = 2;
@ -147,6 +149,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
private final PumpType pumpType = PumpType.OMNIPOD_EROS; private final PumpType pumpType = PumpType.OMNIPOD_EROS;
private final PumpSync pumpSync; private final PumpSync pumpSync;
private final ActivityNames activityNames; private final ActivityNames activityNames;
private final ErosHistoryDatabase erosHistoryDatabase;
private final CompositeDisposable disposable = new CompositeDisposable(); private final CompositeDisposable disposable = new CompositeDisposable();
@ -186,7 +189,8 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
OmnipodAlertUtil omnipodAlertUtil, OmnipodAlertUtil omnipodAlertUtil,
ProfileFunction profileFunction, ProfileFunction profileFunction,
PumpSync pumpSync, PumpSync pumpSync,
ActivityNames activityNames ActivityNames activityNames,
ErosHistoryDatabase erosHistoryDatabase
) { ) {
super(new PluginDescription() // super(new PluginDescription() //
.mainType(PluginType.PUMP) // .mainType(PluginType.PUMP) //
@ -215,6 +219,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
this.profileFunction = profileFunction; this.profileFunction = profileFunction;
this.pumpSync = pumpSync; this.pumpSync = pumpSync;
this.activityNames = activityNames; this.activityNames = activityNames;
this.erosHistoryDatabase = erosHistoryDatabase;
pumpDescription = new PumpDescription(pumpType); pumpDescription = new PumpDescription(pumpType);
@ -1180,4 +1185,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(resourceId); return new PumpEnactResult(getInjector()).success(false).enacted(false).comment(resourceId);
} }
@Override public void clearAllTables() {
erosHistoryDatabase.clearAllTables();
}
} }

View file

@ -4,6 +4,7 @@ import dagger.android.AndroidInjector
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.TestBase
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil
import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryDatabase
import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsOmnipodErosManager import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsOmnipodErosManager
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.Profile
@ -38,6 +39,7 @@ class OmnipodErosPumpPluginTest : TestBase() {
@Mock lateinit var commandQueue: CommandQueue @Mock lateinit var commandQueue: CommandQueue
@Mock lateinit var rileyLinkUtil: RileyLinkUtil @Mock lateinit var rileyLinkUtil: RileyLinkUtil
@Mock lateinit var pumpSync: PumpSync @Mock lateinit var pumpSync: PumpSync
@Mock lateinit var erosHistoryDatabase: ErosHistoryDatabase
private var rxBusWrapper = RxBus(TestAapsSchedulers(), aapsLogger) private var rxBusWrapper = RxBus(TestAapsSchedulers(), aapsLogger)
@ -54,7 +56,7 @@ class OmnipodErosPumpPluginTest : TestBase() {
injector, aapsLogger, TestAapsSchedulers(), rxBusWrapper, null, injector, aapsLogger, TestAapsSchedulers(), rxBusWrapper, null,
rh, activePlugin, null, null, aapsOmnipodErosManager, commandQueue, rh, activePlugin, null, null, aapsOmnipodErosManager, commandQueue,
null, null, null, null, null, null, null, null,
rileyLinkUtil, null, null, pumpSync, activityNames rileyLinkUtil, null, null, pumpSync, activityNames, erosHistoryDatabase
) )
val pumpState = PumpSync.PumpState(null, null, null, null, "") val pumpState = PumpSync.PumpState(null, null, null, null, "")
`when`(pumpSync.expectedPumpState()).thenReturn(pumpState) `when`(pumpSync.expectedPumpState()).thenReturn(pumpState)

View file

@ -46,13 +46,13 @@
<activity <activity
android:name=".activities.TreatmentsActivity" android:name=".activities.TreatmentsActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme" /> android:theme="@style/AppTheme.NoActionBar" />
<activity <activity
android:name=".activities.ProfileHelperActivity" android:name=".activities.ProfileHelperActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme.NoActionBar" /> android:theme="@style/AppTheme.NoActionBar" />
<activity <activity
android:name=".activities.SingleFragmentActivity" android:name="info.nightscout.configuration.activities.SingleFragmentActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme" /> android:theme="@style/AppTheme" />

View file

@ -147,16 +147,4 @@
<!-- BolusProgressDialog--> <!-- BolusProgressDialog-->
<string name="stop_pressed">STOP PRESSED</string> <string name="stop_pressed">STOP PRESSED</string>
<!-- PrefImport-->
<string name="check_preferences_details_btn">Explain import issues…</string>
<string name="check_preferences_details_title">Import issues details</string>
<string name="check_preferences_import_btn">Import</string>
<string name="check_preferences_import_anyway_btn">Import anyway (DANGEROUS!)</string>
<string name="import_setting">Import settings</string>
<string name="check_preferences_before_import">Please check preferences before importing:</string>
<string name="check_preferences_cannot_import">Preferences cannot be imported!</string>
<string name="check_preferences_dangerous_import">Preferences should not be imported!</string>
<!-- Preferences -->
<string name="nav_plugin_preferences">Plugin preferences</string>
</resources> </resources>