commit
6c8a5aee47
79 changed files with 955 additions and 473 deletions
|
@ -225,8 +225,8 @@ dependencies {
|
||||||
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
implementation 'com.google.android.gms:play-services-wearable:17.0.0'
|
implementation 'com.google.android.gms:play-services-wearable:17.0.0'
|
||||||
implementation 'com.google.firebase:firebase-core:17.2.0'
|
implementation 'com.google.firebase:firebase-core:17.2.1'
|
||||||
implementation("com.crashlytics.sdk.android:crashlytics:2.9.9@aar") {
|
implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') {
|
||||||
transitive = true;
|
transitive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,11 +234,11 @@ dependencies {
|
||||||
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.0.0'
|
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||||
implementation 'androidx.gridlayout:gridlayout:1.0.0'
|
implementation 'androidx.gridlayout:gridlayout:1.0.0'
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation 'com.google.android.material:material:1.0.0'
|
||||||
implementation 'androidx.percentlayout:percentlayout:1.0.0'
|
implementation 'androidx.percentlayout:percentlayout:1.0.0'
|
||||||
implementation "com.wdullaer:materialdatetimepicker:2.3.0"
|
implementation 'com.wdullaer:materialdatetimepicker:4.2.3'
|
||||||
|
|
||||||
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
|
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
|
||||||
|
|
||||||
|
@ -247,11 +247,11 @@ dependencies {
|
||||||
implementation("com.github.tony19:logback-android-classic:1.1.1-6") {
|
implementation("com.github.tony19:logback-android-classic:1.1.1-6") {
|
||||||
exclude group: "com.google.android", module: "android"
|
exclude group: "com.google.android", module: "android"
|
||||||
}
|
}
|
||||||
implementation "org.apache.commons:commons-lang3:3.7"
|
implementation "org.apache.commons:commons-lang3:3.9"
|
||||||
implementation "org.slf4j:slf4j-api:1.7.21"
|
implementation "org.slf4j:slf4j-api:1.7.29"
|
||||||
// Graphview cannot be upgraded
|
// Graphview cannot be upgraded
|
||||||
implementation "com.jjoe64:graphview:4.0.1"
|
implementation "com.jjoe64:graphview:4.0.1"
|
||||||
implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.1.1"
|
implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.2.2"
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||||
implementation(name: "android-edittext-validator-v1.3.4-mod", ext: "aar")
|
implementation(name: "android-edittext-validator-v1.3.4-mod", ext: "aar")
|
||||||
implementation 'com.madgag.spongycastle:core:1.58.0.0'
|
implementation 'com.madgag.spongycastle:core:1.58.0.0'
|
||||||
|
@ -263,24 +263,23 @@ dependencies {
|
||||||
// excluding org.json which is provided by Android
|
// excluding org.json which is provided by Android
|
||||||
exclude group: "org.json", module: "json"
|
exclude group: "org.json", module: "json"
|
||||||
}
|
}
|
||||||
implementation "com.google.code.gson:gson:2.8.5"
|
implementation "com.google.code.gson:gson:2.8.6"
|
||||||
implementation "com.google.guava:guava:24.1-jre"
|
implementation "com.google.guava:guava:24.1-jre"
|
||||||
|
|
||||||
implementation "net.danlew:android.joda:2.9.9.1"
|
implementation "net.danlew:android.joda:2.10.3"
|
||||||
implementation "uk.com.robust-it:cloning:1.9.9"
|
|
||||||
|
|
||||||
implementation 'org.mozilla:rhino:1.7.7.2'
|
implementation 'org.mozilla:rhino:1.7.11'
|
||||||
|
|
||||||
implementation 'com.github.DavidProdinger:weekdays-selector:1.1.0'
|
implementation 'com.github.DavidProdinger:weekdays-selector:1.1.0'
|
||||||
|
|
||||||
testImplementation "junit:junit:4.12"
|
testImplementation "junit:junit:4.12"
|
||||||
testImplementation "org.json:json:20140107"
|
testImplementation "org.json:json:20190722"
|
||||||
testImplementation "org.mockito:mockito-core:2.8.47"
|
testImplementation "org.mockito:mockito-core:2.8.47"
|
||||||
testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}"
|
testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}"
|
||||||
testImplementation "org.powermock:powermock-module-junit4-rule-agent:${powermockVersion}"
|
testImplementation "org.powermock:powermock-module-junit4-rule-agent:${powermockVersion}"
|
||||||
testImplementation "org.powermock:powermock-module-junit4-rule:${powermockVersion}"
|
testImplementation "org.powermock:powermock-module-junit4-rule:${powermockVersion}"
|
||||||
testImplementation "org.powermock:powermock-module-junit4:${powermockVersion}"
|
testImplementation "org.powermock:powermock-module-junit4:${powermockVersion}"
|
||||||
testImplementation "joda-time:joda-time:2.9.9"
|
testImplementation "joda-time:joda-time:2.10.5"
|
||||||
testImplementation("com.google.truth:truth:0.39") {
|
testImplementation("com.google.truth:truth:0.39") {
|
||||||
exclude group: "com.google.guava", module: "guava"
|
exclude group: "com.google.guava", module: "guava"
|
||||||
}
|
}
|
||||||
|
@ -300,11 +299,11 @@ dependencies {
|
||||||
|
|
||||||
|
|
||||||
// new for tidepool
|
// new for tidepool
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
|
||||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
|
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.2'
|
||||||
implementation "com.squareup.retrofit2:retrofit:2.4.0"
|
implementation "com.squareup.retrofit2:retrofit:2.6.2"
|
||||||
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
|
implementation "com.squareup.retrofit2:adapter-rxjava2:2.6.2"
|
||||||
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
|
implementation "com.squareup.retrofit2:converter-gson:2.6.2"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,12 +37,10 @@ import com.joanzapata.iconify.fonts.FontAwesomeModule;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import info.nightscout.androidaps.activities.AgreementActivity;
|
|
||||||
import info.nightscout.androidaps.activities.HistoryBrowseActivity;
|
import info.nightscout.androidaps.activities.HistoryBrowseActivity;
|
||||||
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
|
||||||
import info.nightscout.androidaps.activities.PreferencesActivity;
|
import info.nightscout.androidaps.activities.PreferencesActivity;
|
||||||
import info.nightscout.androidaps.activities.SingleFragmentActivity;
|
import info.nightscout.androidaps.activities.SingleFragmentActivity;
|
||||||
import info.nightscout.androidaps.data.Profile;
|
|
||||||
import info.nightscout.androidaps.events.EventAppExit;
|
import info.nightscout.androidaps.events.EventAppExit;
|
||||||
import info.nightscout.androidaps.events.EventPreferenceChange;
|
import info.nightscout.androidaps.events.EventPreferenceChange;
|
||||||
import info.nightscout.androidaps.events.EventRebuildTabs;
|
import info.nightscout.androidaps.events.EventRebuildTabs;
|
||||||
|
@ -51,7 +49,6 @@ import info.nightscout.androidaps.interfaces.PluginType;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin;
|
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin;
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
|
|
||||||
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtilsKt;
|
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtilsKt;
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus;
|
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus;
|
||||||
import info.nightscout.androidaps.setupwizard.SetupWizardActivity;
|
import info.nightscout.androidaps.setupwizard.SetupWizardActivity;
|
||||||
|
@ -59,7 +56,6 @@ import info.nightscout.androidaps.tabs.TabPageAdapter;
|
||||||
import info.nightscout.androidaps.utils.AndroidPermission;
|
import info.nightscout.androidaps.utils.AndroidPermission;
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy;
|
import info.nightscout.androidaps.utils.FabricPrivacy;
|
||||||
import info.nightscout.androidaps.utils.LocaleHelper;
|
import info.nightscout.androidaps.utils.LocaleHelper;
|
||||||
import info.nightscout.androidaps.utils.OKDialog;
|
|
||||||
import info.nightscout.androidaps.utils.PasswordProtection;
|
import info.nightscout.androidaps.utils.PasswordProtection;
|
||||||
import info.nightscout.androidaps.utils.SP;
|
import info.nightscout.androidaps.utils.SP;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
@ -141,11 +137,9 @@ public class MainActivity extends NoSplashAppCompatActivity {
|
||||||
.subscribe(this::processPreferenceChange, FabricPrivacy::logException)
|
.subscribe(this::processPreferenceChange, FabricPrivacy::logException)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!SP.getBoolean(R.string.key_setupwizard_processed, false)) {
|
if (!SP.getBoolean(R.string.key_setupwizard_processed, false) || !SP.contains(R.string.key_units)) {
|
||||||
Intent intent = new Intent(this, SetupWizardActivity.class);
|
Intent intent = new Intent(this, SetupWizardActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else {
|
|
||||||
checkEula();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidPermission.notifyForStoragePermission(this);
|
AndroidPermission.notifyForStoragePermission(this);
|
||||||
|
@ -237,16 +231,6 @@ public class MainActivity extends NoSplashAppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkEula() {
|
|
||||||
//SP.removeBoolean(R.string.key_i_understand);
|
|
||||||
boolean IUnderstand = SP.getBoolean(R.string.key_i_understand, false);
|
|
||||||
if (!IUnderstand) {
|
|
||||||
Intent intent = new Intent(getApplicationContext(), AgreementActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doMigrations() {
|
private void doMigrations() {
|
||||||
|
|
||||||
// guarantee that the unreachable threshold is at least 30 and of type String
|
// guarantee that the unreachable threshold is at least 30 and of type String
|
||||||
|
@ -255,11 +239,6 @@ public class MainActivity extends NoSplashAppCompatActivity {
|
||||||
SP.remove(R.string.key_pump_unreachable_threshold);
|
SP.remove(R.string.key_pump_unreachable_threshold);
|
||||||
if (unreachable_threshold < 30) unreachable_threshold = 30;
|
if (unreachable_threshold < 30) unreachable_threshold = 30;
|
||||||
SP.putString(R.string.key_pump_unreachable_threshold, Integer.toString(unreachable_threshold));
|
SP.putString(R.string.key_pump_unreachable_threshold, Integer.toString(unreachable_threshold));
|
||||||
|
|
||||||
if (!SP.contains(R.string.key_units)) {
|
|
||||||
Intent intent = new Intent(this, SetupWizardActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
package info.nightscout.androidaps.activities;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.CheckBox;
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainActivity;
|
|
||||||
import info.nightscout.androidaps.R;
|
|
||||||
import info.nightscout.androidaps.utils.SP;
|
|
||||||
|
|
||||||
public class AgreementActivity extends NoSplashActivity {
|
|
||||||
boolean IUnderstand;
|
|
||||||
CheckBox agreeCheckBox;
|
|
||||||
Button saveButton;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_agreement);
|
|
||||||
IUnderstand = SP.getBoolean(R.string.key_i_understand, false);
|
|
||||||
setContentView(R.layout.activity_agreement);
|
|
||||||
agreeCheckBox = (CheckBox)findViewById(R.id.agreementCheckBox);
|
|
||||||
agreeCheckBox.setChecked(IUnderstand);
|
|
||||||
saveButton = (Button)findViewById(R.id.agreementSaveButton);
|
|
||||||
addListenerOnButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addListenerOnButton() {
|
|
||||||
saveButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
SP.putBoolean(R.string.key_i_understand, agreeCheckBox.isChecked());
|
|
||||||
|
|
||||||
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -45,7 +45,7 @@ import info.nightscout.androidaps.utils.T;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
|
||||||
public class HistoryBrowseActivity extends NoSplashActivity {
|
public class HistoryBrowseActivity extends NoSplashAppCompatActivity {
|
||||||
private static Logger log = LoggerFactory.getLogger(HistoryBrowseActivity.class);
|
private static Logger log = LoggerFactory.getLogger(HistoryBrowseActivity.class);
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ public class HistoryBrowseActivity extends NoSplashActivity {
|
||||||
);
|
);
|
||||||
dpd.setThemeDark(true);
|
dpd.setThemeDark(true);
|
||||||
dpd.dismissOnPause(true);
|
dpd.dismissOnPause(true);
|
||||||
dpd.show(getFragmentManager(), "Datepickerdialog");
|
dpd.show(getSupportFragmentManager(), "Datepickerdialog");
|
||||||
});
|
});
|
||||||
|
|
||||||
bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
|
bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
package info.nightscout.androidaps.activities
|
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.os.Bundle
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.R
|
|
||||||
|
|
||||||
open class NoSplashActivity : Activity() {
|
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
setTheme(R.style.AppTheme_NoActionBar)
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +1,18 @@
|
||||||
package info.nightscout.androidaps.activities
|
package info.nightscout.androidaps.activities
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
|
import info.nightscout.androidaps.utils.LocaleHelper
|
||||||
|
|
||||||
open class NoSplashAppCompatActivity : AppCompatActivity() {
|
open class NoSplashAppCompatActivity : AppCompatActivity() {
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
setTheme(R.style.AppTheme_NoActionBar)
|
setTheme(R.style.AppTheme_NoActionBar)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override fun attachBaseContext(newBase: Context) {
|
||||||
|
super.attachBaseContext(LocaleHelper.wrap(newBase))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.androidaps.activities;
|
package info.nightscout.androidaps.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
|
@ -47,6 +48,7 @@ import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin;
|
||||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin;
|
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin;
|
||||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin;
|
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin;
|
||||||
import info.nightscout.androidaps.plugins.source.SourceDexcomPlugin;
|
import info.nightscout.androidaps.plugins.source.SourceDexcomPlugin;
|
||||||
|
import info.nightscout.androidaps.utils.LocaleHelper;
|
||||||
import info.nightscout.androidaps.utils.OKDialog;
|
import info.nightscout.androidaps.utils.OKDialog;
|
||||||
import info.nightscout.androidaps.utils.SP;
|
import info.nightscout.androidaps.utils.SP;
|
||||||
import info.nightscout.androidaps.utils.SafeParse;
|
import info.nightscout.androidaps.utils.SafeParse;
|
||||||
|
@ -66,6 +68,11 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
|
||||||
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void attachBaseContext(Context newBase) {
|
||||||
|
super.attachBaseContext(LocaleHelper.INSTANCE.wrap(newBase));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
RxBus.INSTANCE.send(new EventPreferenceChange(key));
|
RxBus.INSTANCE.send(new EventPreferenceChange(key));
|
||||||
|
@ -122,6 +129,7 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (pref != null)
|
||||||
adjustUnitDependentPrefs(pref);
|
adjustUnitDependentPrefs(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ import info.nightscout.androidaps.utils.SafeParse;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
|
||||||
public class TDDStatsActivity extends NoSplashActivity {
|
public class TDDStatsActivity extends NoSplashAppCompatActivity {
|
||||||
private static Logger log = LoggerFactory.getLogger(TDDStatsActivity.class);
|
private static Logger log = LoggerFactory.getLogger(TDDStatsActivity.class);
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package info.nightscout.androidaps.data;
|
package info.nightscout.androidaps.data;
|
||||||
|
|
||||||
import com.rits.cloning.Cloner;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -37,8 +35,19 @@ public class IobTotal implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
|
|
||||||
public IobTotal copy() {
|
public IobTotal copy() {
|
||||||
Cloner cloner = new Cloner();
|
IobTotal i = new IobTotal(time);
|
||||||
return cloner.deepClone(this);
|
i.iob = iob;
|
||||||
|
i.activity = activity;
|
||||||
|
i.bolussnooze = bolussnooze;
|
||||||
|
i.basaliob = basaliob;
|
||||||
|
i.netbasalinsulin = netbasalinsulin;
|
||||||
|
i.hightempinsulin = hightempinsulin;
|
||||||
|
i.lastBolusTime = lastBolusTime;
|
||||||
|
if (iobWithZeroTemp != null) i.iobWithZeroTemp = iobWithZeroTemp.copy();
|
||||||
|
i.netInsulin = netInsulin;
|
||||||
|
i.netRatio = netRatio;
|
||||||
|
i.extendedBolusInsulin = extendedBolusInsulin;
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IobTotal(long time) {
|
public IobTotal(long time) {
|
||||||
|
@ -137,7 +146,7 @@ public class IobTotal implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
// DataPoint interface
|
// DataPoint interface
|
||||||
|
|
||||||
int color;
|
private int color;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getX() {
|
public double getX() {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
|
@ -19,10 +20,11 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewPlugin;
|
||||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface;
|
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface;
|
||||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries;
|
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries;
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter;
|
import info.nightscout.androidaps.utils.DecimalFormatter;
|
||||||
|
import info.nightscout.androidaps.utils.T;
|
||||||
|
|
||||||
@DatabaseTable(tableName = DatabaseHelper.DATABASE_BGREADINGS)
|
@DatabaseTable(tableName = DatabaseHelper.DATABASE_BGREADINGS)
|
||||||
public class BgReading implements DataPointWithLabelInterface {
|
public class BgReading implements DataPointWithLabelInterface {
|
||||||
private static Logger log = LoggerFactory.getLogger(L.DATABASE);
|
private static Logger log = LoggerFactory.getLogger(L.GLUCOSE);
|
||||||
|
|
||||||
@DatabaseField(id = true)
|
@DatabaseField(id = true)
|
||||||
public long date;
|
public long date;
|
||||||
|
@ -73,9 +75,10 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
public String directionToSymbol() {
|
public String directionToSymbol() {
|
||||||
String symbol = "";
|
String symbol = "";
|
||||||
if (direction == null) {
|
if (direction == null)
|
||||||
symbol = "??";
|
direction = calculateDirection();
|
||||||
} else if (direction.compareTo("DoubleDown") == 0) {
|
|
||||||
|
if (direction.compareTo("DoubleDown") == 0) {
|
||||||
symbol = "\u21ca";
|
symbol = "\u21ca";
|
||||||
} else if (direction.compareTo("SingleDown") == 0) {
|
} else if (direction.compareTo("SingleDown") == 0) {
|
||||||
symbol = "\u2193";
|
symbol = "\u2193";
|
||||||
|
@ -95,18 +98,13 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSlopeNameInvalid(String direction) {
|
private static boolean isSlopeNameInvalid(String direction) {
|
||||||
if (direction.compareTo("NOT_COMPUTABLE") == 0 ||
|
return direction.compareTo("NOT_COMPUTABLE") == 0 ||
|
||||||
direction.compareTo("NOT COMPUTABLE") == 0 ||
|
direction.compareTo("NOT COMPUTABLE") == 0 ||
|
||||||
direction.compareTo("OUT_OF_RANGE") == 0 ||
|
direction.compareTo("OUT_OF_RANGE") == 0 ||
|
||||||
direction.compareTo("OUT OF RANGE") == 0 ||
|
direction.compareTo("OUT OF RANGE") == 0 ||
|
||||||
direction.compareTo("NONE") == 0 ||
|
direction.compareTo("NONE") == 0 ||
|
||||||
direction.compareTo("NotComputable") == 0
|
direction.compareTo("NotComputable") == 0;
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,6 +121,7 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
public boolean isDataChanging(BgReading other) {
|
public boolean isDataChanging(BgReading other) {
|
||||||
if (date != other.date) {
|
if (date != other.date) {
|
||||||
|
if (L.isEnabled(L.GLUCOSE))
|
||||||
log.error("Comparing different");
|
log.error("Comparing different");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -133,6 +132,7 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
public boolean isEqual(BgReading other) {
|
public boolean isEqual(BgReading other) {
|
||||||
if (date != other.date) {
|
if (date != other.date) {
|
||||||
|
if (L.isEnabled(L.GLUCOSE))
|
||||||
log.error("Comparing different");
|
log.error("Comparing different");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,7 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
|
|
||||||
public void copyFrom(BgReading other) {
|
public void copyFrom(BgReading other) {
|
||||||
if (date != other.date) {
|
if (date != other.date) {
|
||||||
|
if (L.isEnabled(L.GLUCOSE))
|
||||||
log.error("Copying different");
|
log.error("Copying different");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -245,4 +246,53 @@ public class BgReading implements DataPointWithLabelInterface {
|
||||||
return isaCOBPrediction || isCOBPrediction || isIOBPrediction || isUAMPrediction || isZTPrediction;
|
return isaCOBPrediction || isCOBPrediction || isIOBPrediction || isUAMPrediction || isZTPrediction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Copied from xDrip+
|
||||||
|
String calculateDirection() {
|
||||||
|
// Rework to get bgreaings from internal DB and calculate on that base
|
||||||
|
|
||||||
|
List<BgReading> bgReadingsList = MainApp.getDbHelper().getAllBgreadingsDataFromTime(this.date - T.mins(10).msecs(), false);
|
||||||
|
if (bgReadingsList == null || bgReadingsList.size() < 2)
|
||||||
|
return "NONE";
|
||||||
|
BgReading current = bgReadingsList.get(1);
|
||||||
|
BgReading previous = bgReadingsList.get(0);
|
||||||
|
|
||||||
|
if (bgReadingsList.get(1).date < bgReadingsList.get(0).date) {
|
||||||
|
current = bgReadingsList.get(0);
|
||||||
|
previous = bgReadingsList.get(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
double slope;
|
||||||
|
|
||||||
|
// Avoid division by 0
|
||||||
|
if (current.date == previous.date)
|
||||||
|
slope = 0;
|
||||||
|
else
|
||||||
|
slope = (previous.value - current.value) / (previous.date - current.date);
|
||||||
|
|
||||||
|
if (L.isEnabled(L.GLUCOSE))
|
||||||
|
log.debug("Slope is :" + slope + " delta " + (previous.value - current.value) + " date difference " + (current.date - previous.date));
|
||||||
|
|
||||||
|
double slope_by_minute = slope * 60000;
|
||||||
|
String arrow = "NONE";
|
||||||
|
|
||||||
|
if (slope_by_minute <= (-3.5)) {
|
||||||
|
arrow = "DoubleDown";
|
||||||
|
} else if (slope_by_minute <= (-2)) {
|
||||||
|
arrow = "SingleDown";
|
||||||
|
} else if (slope_by_minute <= (-1)) {
|
||||||
|
arrow = "FortyFiveDown";
|
||||||
|
} else if (slope_by_minute <= (1)) {
|
||||||
|
arrow = "Flat";
|
||||||
|
} else if (slope_by_minute <= (2)) {
|
||||||
|
arrow = "FortyFiveUp";
|
||||||
|
} else if (slope_by_minute <= (3.5)) {
|
||||||
|
arrow = "SingleUp";
|
||||||
|
} else if (slope_by_minute <= (40)) {
|
||||||
|
arrow = "DoubleUp";
|
||||||
|
}
|
||||||
|
if (L.isEnabled(L.GLUCOSE))
|
||||||
|
log.debug("Direction set to: " + arrow);
|
||||||
|
return arrow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,14 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog
|
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.dragHelpers.OnStartDragListener
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.dragHelpers.SimpleItemTouchHelperCallback
|
||||||
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationDataChanged
|
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationDataChanged
|
||||||
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateGui
|
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateGui
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
|
@ -17,11 +21,14 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
import kotlinx.android.synthetic.main.automation_fragment.*
|
import kotlinx.android.synthetic.main.automation_fragment.*
|
||||||
|
|
||||||
class AutomationFragment : Fragment() {
|
|
||||||
|
class AutomationFragment : Fragment(), OnStartDragListener {
|
||||||
|
|
||||||
private var disposable: CompositeDisposable = CompositeDisposable()
|
private var disposable: CompositeDisposable = CompositeDisposable()
|
||||||
private var eventListAdapter: EventListAdapter? = null
|
private var eventListAdapter: EventListAdapter? = null
|
||||||
|
|
||||||
|
private var itemTouchHelper: ItemTouchHelper? = null
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
return inflater.inflate(R.layout.automation_fragment, container, false)
|
return inflater.inflate(R.layout.automation_fragment, container, false)
|
||||||
}
|
}
|
||||||
|
@ -29,7 +36,7 @@ class AutomationFragment : Fragment() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
eventListAdapter = EventListAdapter(AutomationPlugin.automationEvents, fragmentManager, activity)
|
eventListAdapter = EventListAdapter(AutomationPlugin.automationEvents, fragmentManager, activity, this)
|
||||||
automation_eventListView.layoutManager = LinearLayoutManager(context)
|
automation_eventListView.layoutManager = LinearLayoutManager(context)
|
||||||
automation_eventListView.adapter = eventListAdapter
|
automation_eventListView.adapter = eventListAdapter
|
||||||
|
|
||||||
|
@ -42,6 +49,10 @@ class AutomationFragment : Fragment() {
|
||||||
fragmentManager?.let { dialog.show(it, "EditEventDialog") }
|
fragmentManager?.let { dialog.show(it, "EditEventDialog") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val callback: ItemTouchHelper.Callback = SimpleItemTouchHelperCallback(eventListAdapter!!)
|
||||||
|
itemTouchHelper = ItemTouchHelper(callback)
|
||||||
|
itemTouchHelper?.attachToRecyclerView(automation_eventListView)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -81,4 +92,8 @@ class AutomationFragment : Fragment() {
|
||||||
automation_logView?.text = sb.toString()
|
automation_logView?.text = sb.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onStartDrag(viewHolder: RecyclerView.ViewHolder) {
|
||||||
|
itemTouchHelper?.startDrag(viewHolder);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ object AutomationPlugin : PluginBase(PluginDescription()
|
||||||
private fun processActions() {
|
private fun processActions() {
|
||||||
if (!isEnabled(PluginType.GENERAL))
|
if (!isEnabled(PluginType.GENERAL))
|
||||||
return
|
return
|
||||||
if (LoopPlugin.getPlugin().isSuspended) {
|
if (LoopPlugin.getPlugin().isSuspended || !LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) {
|
||||||
if (L.isEnabled(L.AUTOMATION))
|
if (L.isEnabled(L.AUTOMATION))
|
||||||
log.debug("Loop deactivated")
|
log.debug("Loop deactivated")
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.general.automation;
|
package info.nightscout.androidaps.plugins.general.automation;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
|
@ -17,6 +20,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -25,19 +29,26 @@ import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||||
import info.nightscout.androidaps.plugins.general.automation.actions.Action;
|
import info.nightscout.androidaps.plugins.general.automation.actions.Action;
|
||||||
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog;
|
import info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog;
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.dragHelpers.ItemTouchHelperAdapter;
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.dragHelpers.ItemTouchHelperViewHolder;
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.dragHelpers.OnStartDragListener;
|
||||||
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationDataChanged;
|
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationDataChanged;
|
||||||
|
import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateGui;
|
||||||
import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerConnector;
|
import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerConnector;
|
||||||
import info.nightscout.androidaps.utils.OKDialog;
|
import info.nightscout.androidaps.utils.OKDialog;
|
||||||
|
|
||||||
class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder> {
|
class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder> implements ItemTouchHelperAdapter {
|
||||||
private final List<AutomationEvent> eventList;
|
private final List<AutomationEvent> eventList;
|
||||||
private final FragmentManager fragmentManager;
|
private final FragmentManager fragmentManager;
|
||||||
private final Activity activity;
|
private final Activity activity;
|
||||||
|
|
||||||
EventListAdapter(List<AutomationEvent> events, FragmentManager fragmentManager, Activity activity) {
|
private final OnStartDragListener mDragStartListener;
|
||||||
|
|
||||||
|
EventListAdapter(List<AutomationEvent> events, FragmentManager fragmentManager, Activity activity, OnStartDragListener dragStartListener) {
|
||||||
this.eventList = events;
|
this.eventList = events;
|
||||||
this.fragmentManager = fragmentManager;
|
this.fragmentManager = fragmentManager;
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
|
mDragStartListener = dragStartListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -54,6 +65,7 @@ class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder>
|
||||||
layout.addView(iv);
|
layout.addView(iv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||||
final AutomationEvent event = eventList.get(position);
|
final AutomationEvent event = eventList.get(position);
|
||||||
|
@ -91,16 +103,10 @@ class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder>
|
||||||
RxBus.INSTANCE.send(new EventAutomationDataChanged());
|
RxBus.INSTANCE.send(new EventAutomationDataChanged());
|
||||||
});
|
});
|
||||||
|
|
||||||
// remove event
|
|
||||||
holder.iconTrash.setOnClickListener(v ->
|
|
||||||
OKDialog.showConfirmation(activity, MainApp.gs(R.string.removerecord) + " " + event.getTitle(), () -> {
|
|
||||||
eventList.remove(event);
|
|
||||||
RxBus.INSTANCE.send(new EventAutomationDataChanged());
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
// edit event
|
// edit event
|
||||||
holder.rootLayout.setOnClickListener(v -> {
|
holder.rootLayout.setOnClickListener(v ->
|
||||||
|
|
||||||
|
{
|
||||||
//EditEventDialog dialog = EditEventDialog.Companion.newInstance(event, false);
|
//EditEventDialog dialog = EditEventDialog.Companion.newInstance(event, false);
|
||||||
EditEventDialog dialog = new EditEventDialog();
|
EditEventDialog dialog = new EditEventDialog();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
@ -110,6 +116,17 @@ class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder>
|
||||||
if (fragmentManager != null)
|
if (fragmentManager != null)
|
||||||
dialog.show(fragmentManager, "EditEventDialog");
|
dialog.show(fragmentManager, "EditEventDialog");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Start a drag whenever the handle view it touched
|
||||||
|
holder.iconSort.setOnTouchListener((v, motionEvent) ->
|
||||||
|
|
||||||
|
{
|
||||||
|
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
|
mDragStartListener.onStartDrag(holder);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return v.onTouchEvent(motionEvent);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -117,12 +134,33 @@ class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder>
|
||||||
return eventList.size();
|
return eventList.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
@Override
|
||||||
|
public boolean onItemMove(int fromPosition, int toPosition) {
|
||||||
|
Collections.swap(eventList, fromPosition, toPosition);
|
||||||
|
notifyItemMoved(fromPosition, toPosition);
|
||||||
|
RxBus.INSTANCE.send(new EventAutomationDataChanged());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemDismiss(int position) {
|
||||||
|
OKDialog.showConfirmation(activity, MainApp.gs(R.string.removerecord) + " " + eventList.get(position).getTitle(),
|
||||||
|
() -> {
|
||||||
|
eventList.remove(position);
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
RxBus.INSTANCE.send(new EventAutomationDataChanged());
|
||||||
|
RxBus.INSTANCE.send(new EventAutomationUpdateGui());
|
||||||
|
}, () -> {
|
||||||
|
RxBus.INSTANCE.send(new EventAutomationUpdateGui());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static class ViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder {
|
||||||
final RelativeLayout rootLayout;
|
final RelativeLayout rootLayout;
|
||||||
final LinearLayout iconLayout;
|
final LinearLayout iconLayout;
|
||||||
final TextView eventTitle;
|
final TextView eventTitle;
|
||||||
final Context context;
|
final Context context;
|
||||||
final ImageView iconTrash;
|
final ImageView iconSort;
|
||||||
final CheckBox enabled;
|
final CheckBox enabled;
|
||||||
|
|
||||||
ViewHolder(View view, Context context) {
|
ViewHolder(View view, Context context) {
|
||||||
|
@ -131,8 +169,18 @@ class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.ViewHolder>
|
||||||
eventTitle = view.findViewById(R.id.viewEventTitle);
|
eventTitle = view.findViewById(R.id.viewEventTitle);
|
||||||
rootLayout = view.findViewById(R.id.rootLayout);
|
rootLayout = view.findViewById(R.id.rootLayout);
|
||||||
iconLayout = view.findViewById(R.id.iconLayout);
|
iconLayout = view.findViewById(R.id.iconLayout);
|
||||||
iconTrash = view.findViewById(R.id.iconTrash);
|
iconSort = view.findViewById(R.id.iconSort);
|
||||||
enabled = view.findViewById(R.id.automation_enabled);
|
enabled = view.findViewById(R.id.automation_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemSelected() {
|
||||||
|
itemView.setBackgroundColor(Color.LTGRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemClear() {
|
||||||
|
itemView.setBackgroundColor(MainApp.gc(R.color.ribbonDefault));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package info.nightscout.androidaps.plugins.general.automation.dragHelpers
|
||||||
|
|
||||||
|
|
||||||
|
interface ItemTouchHelperAdapter {
|
||||||
|
/**
|
||||||
|
* Called when an item has been dragged far enough to trigger a move. This is called every time
|
||||||
|
* an item is shifted, and **not** at the end of a "drop" event.<br></br>
|
||||||
|
* <br></br>
|
||||||
|
* Implementations should call [RecyclerView.Adapter.notifyItemMoved] after
|
||||||
|
* adjusting the underlying data to reflect this move.
|
||||||
|
*
|
||||||
|
* @param fromPosition The start position of the moved item.
|
||||||
|
* @param toPosition Then resolved position of the moved item.
|
||||||
|
* @return True if the item was moved to the new adapter position.
|
||||||
|
*
|
||||||
|
* @see RecyclerView.getAdapterPositionFor
|
||||||
|
* @see RecyclerView.ViewHolder.getAdapterPosition
|
||||||
|
*/
|
||||||
|
fun onItemMove(fromPosition: Int, toPosition: Int): Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when an item has been dismissed by a swipe.<br></br>
|
||||||
|
* <br></br>
|
||||||
|
* Implementations should call [RecyclerView.Adapter.notifyItemRemoved] after
|
||||||
|
* adjusting the underlying data to reflect this removal.
|
||||||
|
*
|
||||||
|
* @param position The position of the item dismissed.
|
||||||
|
*
|
||||||
|
* @see RecyclerView.getAdapterPositionFor
|
||||||
|
* @see RecyclerView.ViewHolder.getAdapterPosition
|
||||||
|
*/
|
||||||
|
fun onItemDismiss(position: Int)
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package info.nightscout.androidaps.plugins.general.automation.dragHelpers
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface to notify an item ViewHolder of relevant callbacks from [ ].
|
||||||
|
*
|
||||||
|
* @author Paul Burke (ipaulpro)
|
||||||
|
*/
|
||||||
|
interface ItemTouchHelperViewHolder {
|
||||||
|
/**
|
||||||
|
* Called when the [ItemTouchHelper] first registers an item as being moved or swiped.
|
||||||
|
* Implementations should update the item view to indicate it's active state.
|
||||||
|
*/
|
||||||
|
fun onItemSelected()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the [ItemTouchHelper] has completed the move or swipe, and the active item
|
||||||
|
* state should be cleared.
|
||||||
|
*/
|
||||||
|
fun onItemClear()
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package info.nightscout.androidaps.plugins.general.automation.dragHelpers
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
|
||||||
|
interface OnStartDragListener {
|
||||||
|
/**
|
||||||
|
* Called when a view is requesting a start of a drag.
|
||||||
|
*
|
||||||
|
* @param viewHolder The holder of the view to drag.
|
||||||
|
*/
|
||||||
|
fun onStartDrag(viewHolder: RecyclerView.ViewHolder)
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
package info.nightscout.androidaps.plugins.general.automation.dragHelpers
|
||||||
|
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An implementation of [ItemTouchHelper.Callback] that enables basic drag & drop and
|
||||||
|
* swipe-to-dismiss. Drag events are automatically started by an item long-press.<br></br>
|
||||||
|
*
|
||||||
|
* Expects the `RecyclerView.Adapter` to listen for [ ] callbacks and the `RecyclerView.ViewHolder` to implement
|
||||||
|
* [ItemTouchHelperViewHolder].
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class SimpleItemTouchHelperCallback(private val mAdapter: ItemTouchHelperAdapter) : ItemTouchHelper.Callback() {
|
||||||
|
override fun isLongPressDragEnabled(): Boolean {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isItemViewSwipeEnabled(): Boolean {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int { // Set movement flags based on the layout manager
|
||||||
|
return if (recyclerView.layoutManager is GridLayoutManager) {
|
||||||
|
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN or ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
|
||||||
|
val swipeFlags = 0
|
||||||
|
makeMovementFlags(dragFlags, swipeFlags)
|
||||||
|
} else {
|
||||||
|
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
|
||||||
|
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
|
||||||
|
makeMovementFlags(dragFlags, swipeFlags)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onMove(recyclerView: RecyclerView, source: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
|
||||||
|
if (source.itemViewType != target.itemViewType) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Notify the adapter of the move
|
||||||
|
mAdapter.onItemMove(source.adapterPosition, target.adapterPosition)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, i: Int) { // Notify the adapter of the dismissal
|
||||||
|
mAdapter.onItemDismiss(viewHolder.adapterPosition)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
|
||||||
|
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { // Fade out the view as it is swiped out of the parent's bounds
|
||||||
|
val alpha = ALPHA_FULL - abs(dX) / viewHolder.itemView.width.toFloat()
|
||||||
|
viewHolder.itemView.alpha = alpha
|
||||||
|
viewHolder.itemView.translationX = dX
|
||||||
|
} else {
|
||||||
|
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { // We only want the active item to change
|
||||||
|
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
|
||||||
|
if (viewHolder is ItemTouchHelperViewHolder) { // Let the view holder know that this item is being moved or dragged
|
||||||
|
val itemViewHolder: ItemTouchHelperViewHolder = viewHolder
|
||||||
|
itemViewHolder.onItemSelected()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.onSelectedChanged(viewHolder, actionState)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
|
||||||
|
super.clearView(recyclerView, viewHolder)
|
||||||
|
viewHolder.itemView.alpha = ALPHA_FULL
|
||||||
|
if (viewHolder is ItemTouchHelperViewHolder) { // Tell the view holder it's time to restore the idle state
|
||||||
|
val itemViewHolder: ItemTouchHelperViewHolder = viewHolder
|
||||||
|
itemViewHolder.onItemClear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val ALPHA_FULL = 1.0f
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
||||||
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.ContextWrapper;
|
import android.content.ContextWrapper;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
|
@ -84,11 +84,11 @@ public abstract class Trigger {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
Activity scanForActivity(Context cont) {
|
AppCompatActivity scanForActivity(Context cont) {
|
||||||
if (cont == null)
|
if (cont == null)
|
||||||
return null;
|
return null;
|
||||||
else if (cont instanceof Activity)
|
else if (cont instanceof AppCompatActivity)
|
||||||
return (Activity) cont;
|
return (AppCompatActivity) cont;
|
||||||
else if (cont instanceof ContextWrapper)
|
else if (cont instanceof ContextWrapper)
|
||||||
return scanForActivity(((ContextWrapper) cont).getBaseContext());
|
return scanForActivity(((ContextWrapper) cont).getBaseContext());
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -9,6 +8,7 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.dpro.widgets.WeekdaysPicker;
|
import com.dpro.widgets.WeekdaysPicker;
|
||||||
|
@ -269,6 +269,8 @@ public class TriggerRecurringTime extends Trigger {
|
||||||
weekdaysPicker.setSelectedDays(getSelectedDays());
|
weekdaysPicker.setSelectedDays(getSelectedDays());
|
||||||
weekdaysPicker.setOnWeekdaysChangeListener((view, i, list) -> set(DayOfWeek.fromCalendarInt(i), list.contains(i)));
|
weekdaysPicker.setOnWeekdaysChangeListener((view, i, list) -> set(DayOfWeek.fromCalendarInt(i), list.contains(i)));
|
||||||
weekdaysPicker.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
weekdaysPicker.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
weekdaysPicker.setSundayFirstDay(Calendar.getInstance().getFirstDayOfWeek() == Calendar.SUNDAY);
|
||||||
|
weekdaysPicker.redrawDays();
|
||||||
|
|
||||||
root.addView(weekdaysPicker);
|
root.addView(weekdaysPicker);
|
||||||
|
|
||||||
|
@ -294,9 +296,9 @@ public class TriggerRecurringTime extends Trigger {
|
||||||
);
|
);
|
||||||
tpd.setThemeDark(true);
|
tpd.setThemeDark(true);
|
||||||
tpd.dismissOnPause(true);
|
tpd.dismissOnPause(true);
|
||||||
Activity a = scanForActivity(root.getContext());
|
AppCompatActivity a = scanForActivity(root.getContext());
|
||||||
if (a != null)
|
if (a != null)
|
||||||
tpd.show(a.getFragmentManager(), "TimePickerDialog");
|
tpd.show(a.getSupportFragmentManager(), "TimePickerDialog");
|
||||||
});
|
});
|
||||||
|
|
||||||
int px = MainApp.dpToPx(10);
|
int px = MainApp.dpToPx(10);
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
|
@ -142,9 +142,9 @@ public class TriggerTime extends Trigger {
|
||||||
);
|
);
|
||||||
dpd.setThemeDark(true);
|
dpd.setThemeDark(true);
|
||||||
dpd.dismissOnPause(true);
|
dpd.dismissOnPause(true);
|
||||||
Activity a = scanForActivity(root.getContext());
|
AppCompatActivity a = scanForActivity(root.getContext());
|
||||||
if (a != null)
|
if (a != null)
|
||||||
dpd.show(a.getFragmentManager(), "DatePickerDialog");
|
dpd.show(a.getSupportFragmentManager(), "DatePickerDialog");
|
||||||
});
|
});
|
||||||
timeButton.setOnClickListener(view -> {
|
timeButton.setOnClickListener(view -> {
|
||||||
GregorianCalendar calendar = new GregorianCalendar();
|
GregorianCalendar calendar = new GregorianCalendar();
|
||||||
|
@ -162,9 +162,9 @@ public class TriggerTime extends Trigger {
|
||||||
);
|
);
|
||||||
tpd.setThemeDark(true);
|
tpd.setThemeDark(true);
|
||||||
tpd.dismissOnPause(true);
|
tpd.dismissOnPause(true);
|
||||||
Activity a = scanForActivity(root.getContext());
|
AppCompatActivity a = scanForActivity(root.getContext());
|
||||||
if (a != null)
|
if (a != null)
|
||||||
tpd.show(a.getFragmentManager(), "TimePickerDialog");
|
tpd.show(a.getSupportFragmentManager(), "TimePickerDialog");
|
||||||
});
|
});
|
||||||
|
|
||||||
int px = MainApp.dpToPx(10);
|
int px = MainApp.dpToPx(10);
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
package info.nightscout.androidaps.plugins.general.automation.triggers;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
|
@ -18,7 +18,6 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
@ -60,11 +59,11 @@ public class TriggerTimeRange extends Trigger {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boolean doRun = false;
|
boolean doRun = false;
|
||||||
if ( start < end && start < currentMinSinceMidnight && currentMinSinceMidnight < end)
|
if (start < end && start < currentMinSinceMidnight && currentMinSinceMidnight < end)
|
||||||
doRun = true;
|
doRun = true;
|
||||||
|
|
||||||
// handle cases like 10PM to 6AM
|
// handle cases like 10PM to 6AM
|
||||||
else if ( start > end && (start < currentMinSinceMidnight || currentMinSinceMidnight < end))
|
else if (start > end && (start < currentMinSinceMidnight || currentMinSinceMidnight < end))
|
||||||
doRun = true;
|
doRun = true;
|
||||||
|
|
||||||
if (doRun) {
|
if (doRun) {
|
||||||
|
@ -129,8 +128,8 @@ public class TriggerTimeRange extends Trigger {
|
||||||
}
|
}
|
||||||
|
|
||||||
TriggerTimeRange period(int start, int end) {
|
TriggerTimeRange period(int start, int end) {
|
||||||
this.start = getMinSinceMidnight(start*60000);
|
this.start = getMinSinceMidnight(start * 60000);
|
||||||
this.end = getMinSinceMidnight(end*60000);
|
this.end = getMinSinceMidnight(end * 60000);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +144,7 @@ public class TriggerTimeRange extends Trigger {
|
||||||
}
|
}
|
||||||
|
|
||||||
long toMilis(long minutesSinceMidnight) {
|
long toMilis(long minutesSinceMidnight) {
|
||||||
return minutesSinceMidnight*60*1000;
|
return minutesSinceMidnight * 60 * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMinSinceMidnight(long time) {
|
public int getMinSinceMidnight(long time) {
|
||||||
|
@ -157,11 +156,11 @@ public class TriggerTimeRange extends Trigger {
|
||||||
return (calendar.get(Calendar.HOUR_OF_DAY) * 60) + calendar.get(Calendar.MINUTE);
|
return (calendar.get(Calendar.HOUR_OF_DAY) * 60) + calendar.get(Calendar.MINUTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getStart(){
|
int getStart() {
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getEnd(){
|
int getEnd() {
|
||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,8 +169,8 @@ public class TriggerTimeRange extends Trigger {
|
||||||
TextView label = new TextView(root.getContext());
|
TextView label = new TextView(root.getContext());
|
||||||
TextView startButton = new TextView(root.getContext());
|
TextView startButton = new TextView(root.getContext());
|
||||||
TextView endButton = new TextView(root.getContext());
|
TextView endButton = new TextView(root.getContext());
|
||||||
log.debug("Start is: " + start );
|
log.debug("Start is: " + start);
|
||||||
log.debug("End is: " + end );
|
log.debug("End is: " + end);
|
||||||
startButton.setText(DateUtil.timeString(toMilis(start) - timeZoneOffset));
|
startButton.setText(DateUtil.timeString(toMilis(start) - timeZoneOffset));
|
||||||
endButton.setText(MainApp.gs(R.string.and) + " " + DateUtil.timeString(toMilis(end) - timeZoneOffset));
|
endButton.setText(MainApp.gs(R.string.and) + " " + DateUtil.timeString(toMilis(end) - timeZoneOffset));
|
||||||
|
|
||||||
|
@ -193,9 +192,9 @@ public class TriggerTimeRange extends Trigger {
|
||||||
);
|
);
|
||||||
tpd.setThemeDark(true);
|
tpd.setThemeDark(true);
|
||||||
tpd.dismissOnPause(true);
|
tpd.dismissOnPause(true);
|
||||||
Activity a = scanForActivity(root.getContext());
|
AppCompatActivity a = scanForActivity(root.getContext());
|
||||||
if (a != null)
|
if (a != null)
|
||||||
tpd.show(a.getFragmentManager(), "TimePickerDialog");
|
tpd.show(a.getSupportFragmentManager(), "TimePickerDialog");
|
||||||
});
|
});
|
||||||
endButton.setOnClickListener(view -> {
|
endButton.setOnClickListener(view -> {
|
||||||
GregorianCalendar calendar = new GregorianCalendar();
|
GregorianCalendar calendar = new GregorianCalendar();
|
||||||
|
@ -213,9 +212,9 @@ public class TriggerTimeRange extends Trigger {
|
||||||
);
|
);
|
||||||
tpd.setThemeDark(true);
|
tpd.setThemeDark(true);
|
||||||
tpd.dismissOnPause(true);
|
tpd.dismissOnPause(true);
|
||||||
Activity a = scanForActivity(root.getContext());
|
AppCompatActivity a = scanForActivity(root.getContext());
|
||||||
if (a != null)
|
if (a != null)
|
||||||
tpd.show(a.getFragmentManager(), "TimePickerDialog");
|
tpd.show(a.getSupportFragmentManager(), "TimePickerDialog");
|
||||||
});
|
});
|
||||||
|
|
||||||
int px = MainApp.dpToPx(10);
|
int px = MainApp.dpToPx(10);
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package info.nightscout.androidaps.plugins.general.careportal.Dialogs;
|
package info.nightscout.androidaps.plugins.general.careportal.Dialogs;
|
||||||
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.fragment.app.DialogFragment;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
|
@ -20,9 +18,12 @@ import android.widget.RadioButton;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
|
||||||
import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout;
|
|
||||||
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
|
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -39,7 +40,6 @@ import java.util.List;
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus;
|
|
||||||
import info.nightscout.androidaps.data.Profile;
|
import info.nightscout.androidaps.data.Profile;
|
||||||
import info.nightscout.androidaps.data.ProfileStore;
|
import info.nightscout.androidaps.data.ProfileStore;
|
||||||
import info.nightscout.androidaps.db.BgReading;
|
import info.nightscout.androidaps.db.BgReading;
|
||||||
|
@ -51,6 +51,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
|
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
|
||||||
import info.nightscout.androidaps.plugins.general.careportal.OptionsToShow;
|
import info.nightscout.androidaps.plugins.general.careportal.OptionsToShow;
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
|
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
|
||||||
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus;
|
||||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
||||||
import info.nightscout.androidaps.utils.DateUtil;
|
import info.nightscout.androidaps.utils.DateUtil;
|
||||||
import info.nightscout.androidaps.utils.DefaultValueHelper;
|
import info.nightscout.androidaps.utils.DefaultValueHelper;
|
||||||
|
@ -61,11 +62,9 @@ import info.nightscout.androidaps.utils.SP;
|
||||||
import info.nightscout.androidaps.utils.SafeParse;
|
import info.nightscout.androidaps.utils.SafeParse;
|
||||||
import info.nightscout.androidaps.utils.Translator;
|
import info.nightscout.androidaps.utils.Translator;
|
||||||
|
|
||||||
public class NewNSTreatmentDialog extends DialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
|
public class NewNSTreatmentDialog extends AppCompatDialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
|
||||||
private static Logger log = LoggerFactory.getLogger(NewNSTreatmentDialog.class);
|
private static Logger log = LoggerFactory.getLogger(NewNSTreatmentDialog.class);
|
||||||
|
|
||||||
private Activity context;
|
|
||||||
|
|
||||||
private static OptionsToShow options;
|
private static OptionsToShow options;
|
||||||
private static String event;
|
private static String event;
|
||||||
|
|
||||||
|
@ -119,18 +118,6 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
context = activity;
|
|
||||||
super.onAttach(activity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDetach() {
|
|
||||||
super.onDetach();
|
|
||||||
this.context = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
@ -421,18 +408,18 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
);
|
);
|
||||||
dpd.setThemeDark(true);
|
dpd.setThemeDark(true);
|
||||||
dpd.dismissOnPause(true);
|
dpd.dismissOnPause(true);
|
||||||
dpd.show(context.getFragmentManager(), "Datepickerdialog");
|
dpd.show(getActivity().getSupportFragmentManager(), "Datepickerdialog");
|
||||||
break;
|
break;
|
||||||
case R.id.careportal_newnstreatment_eventtime:
|
case R.id.careportal_newnstreatment_eventtime:
|
||||||
TimePickerDialog tpd = TimePickerDialog.newInstance(
|
TimePickerDialog tpd = TimePickerDialog.newInstance(
|
||||||
this,
|
this,
|
||||||
calendar.get(Calendar.HOUR_OF_DAY),
|
calendar.get(Calendar.HOUR_OF_DAY),
|
||||||
calendar.get(Calendar.MINUTE),
|
calendar.get(Calendar.MINUTE),
|
||||||
DateFormat.is24HourFormat(context)
|
DateFormat.is24HourFormat(getContext())
|
||||||
);
|
);
|
||||||
tpd.setThemeDark(true);
|
tpd.setThemeDark(true);
|
||||||
tpd.dismissOnPause(true);
|
tpd.dismissOnPause(true);
|
||||||
tpd.show(context.getFragmentManager(), "Timepickerdialog");
|
tpd.show(getActivity().getSupportFragmentManager(), "Timepickerdialog");
|
||||||
break;
|
break;
|
||||||
case R.id.ok:
|
case R.id.ok:
|
||||||
confirmNSTreatmentCreation();
|
confirmNSTreatmentCreation();
|
||||||
|
@ -469,7 +456,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int second) {
|
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
|
||||||
eventTime.setHours(hourOfDay);
|
eventTime.setHours(hourOfDay);
|
||||||
eventTime.setMinutes(minute);
|
eventTime.setMinutes(minute);
|
||||||
eventTime.setSeconds(this.seconds++); // randomize seconds to prevent creating record of the same time, if user choose time manually
|
eventTime.setSeconds(this.seconds++); // randomize seconds to prevent creating record of the same time, if user choose time manually
|
||||||
|
@ -477,7 +464,6 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
updateBGforDateTime();
|
updateBGforDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JSONObject gatherData() {
|
JSONObject gatherData() {
|
||||||
String enteredBy = SP.getString("careportal_enteredby", "");
|
String enteredBy = SP.getString("careportal_enteredby", "");
|
||||||
JSONObject data = new JSONObject();
|
JSONObject data = new JSONObject();
|
||||||
|
@ -702,6 +688,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
}
|
}
|
||||||
|
|
||||||
void confirmNSTreatmentCreation() {
|
void confirmNSTreatmentCreation() {
|
||||||
|
Context context = getContext();
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
final JSONObject data = gatherData();
|
final JSONObject data = gatherData();
|
||||||
final String confirmText = buildConfirmText(data);
|
final String confirmText = buildConfirmText(data);
|
||||||
|
@ -715,7 +702,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void createNSTreatment(JSONObject data) {
|
void createNSTreatment(JSONObject data) {
|
||||||
if (options.executeProfileSwitch) {
|
if (options.executeProfileSwitch) {
|
||||||
if (data.has("profile")) {
|
if (data.has("profile")) {
|
||||||
ProfileFunctions.doProfileSwitch(profileStore, JsonHelper.safeGetString(data, "profile"), JsonHelper.safeGetInt(data, "duration"), JsonHelper.safeGetInt(data, "percentage"), JsonHelper.safeGetInt(data, "timeshift"));
|
ProfileFunctions.doProfileSwitch(profileStore, JsonHelper.safeGetString(data, "profile"), JsonHelper.safeGetInt(data, "duration"), JsonHelper.safeGetInt(data, "percentage"), JsonHelper.safeGetInt(data, "timeshift"));
|
||||||
|
|
|
@ -30,6 +30,7 @@ import info.nightscout.androidaps.events.EventAppExit;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||||
import info.nightscout.androidaps.utils.OKDialog;
|
import info.nightscout.androidaps.utils.OKDialog;
|
||||||
|
import info.nightscout.androidaps.utils.SP;
|
||||||
import info.nightscout.androidaps.utils.ToastUtils;
|
import info.nightscout.androidaps.utils.ToastUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,27 +114,24 @@ public class ImportExportPrefs {
|
||||||
.setMessage(MainApp.gs(R.string.import_from) + " " + file + " ?")
|
.setMessage(MainApp.gs(R.string.import_from) + " " + file + " ?")
|
||||||
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
|
||||||
String line;
|
String line;
|
||||||
String[] lineParts;
|
String[] lineParts;
|
||||||
try {
|
try {
|
||||||
editor.clear();
|
SP.clear();
|
||||||
editor.commit();
|
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||||
while ((line = reader.readLine()) != null) {
|
while ((line = reader.readLine()) != null) {
|
||||||
lineParts = line.split("::");
|
lineParts = line.split("::");
|
||||||
if (lineParts.length == 2) {
|
if (lineParts.length == 2) {
|
||||||
if (lineParts[1].equals("true") || lineParts[1].equals("false")) {
|
if (lineParts[1].equals("true") || lineParts[1].equals("false")) {
|
||||||
editor.putBoolean(lineParts[0], Boolean.parseBoolean(lineParts[1]));
|
SP.putBoolean(lineParts[0], Boolean.parseBoolean(lineParts[1]));
|
||||||
} else {
|
} else {
|
||||||
editor.putString(lineParts[0], lineParts[1]);
|
SP.putString(lineParts[0], lineParts[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reader.close();
|
reader.close();
|
||||||
editor.commit();
|
SP.putBoolean(R.string.key_setupwizard_processed, true);
|
||||||
OKDialog.show(context, MainApp.gs(R.string.setting_imported), MainApp.gs(R.string.restartingapp), () -> {
|
OKDialog.show(context, MainApp.gs(R.string.setting_imported), MainApp.gs(R.string.restartingapp), () -> {
|
||||||
log.debug("Exiting");
|
log.debug("Exiting");
|
||||||
MainApp.instance().stopKeepAliveService();
|
MainApp.instance().stopKeepAliveService();
|
||||||
|
|
|
@ -6,11 +6,11 @@ import android.widget.CheckBox
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.activities.NoSplashActivity
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
|
||||||
import info.nightscout.androidaps.logging.L
|
import info.nightscout.androidaps.logging.L
|
||||||
import kotlinx.android.synthetic.main.activity_logsetting.*
|
import kotlinx.android.synthetic.main.activity_logsetting.*
|
||||||
|
|
||||||
class LogSettingActivity : NoSplashActivity() {
|
class LogSettingActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
|
@ -19,7 +19,7 @@ class InfoInterceptor(tag: String) : Interceptor {
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
override fun intercept(chain: Interceptor.Chain): Response {
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
val request = chain.request()
|
val request = chain.request()
|
||||||
request?.body()?.let {
|
request.body?.let {
|
||||||
if (L.isEnabled(L.TIDEPOOL)) {
|
if (L.isEnabled(L.TIDEPOOL)) {
|
||||||
log.debug("Interceptor Body size: " + it.contentLength())
|
log.debug("Interceptor Body size: " + it.contentLength())
|
||||||
val requestBuffer = Buffer()
|
val requestBuffer = Buffer()
|
||||||
|
|
|
@ -14,9 +14,9 @@ import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.OKDialog
|
import info.nightscout.androidaps.utils.OKDialog
|
||||||
import info.nightscout.androidaps.utils.SP
|
import info.nightscout.androidaps.utils.SP
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import okhttp3.MediaType
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.RequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
import okhttp3.logging.HttpLoggingInterceptor
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
@ -43,7 +43,7 @@ object TidepoolUploader {
|
||||||
|
|
||||||
val PUMPTYPE = "Tandem"
|
val PUMPTYPE = "Tandem"
|
||||||
|
|
||||||
var connectionStatus: ConnectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
var connectionStatus: ConnectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
|
|
||||||
fun getRetrofitInstance(): Retrofit? {
|
fun getRetrofitInstance(): Retrofit? {
|
||||||
if (retrofit == null) {
|
if (retrofit == null) {
|
||||||
|
@ -75,7 +75,7 @@ object TidepoolUploader {
|
||||||
retrofit = null
|
retrofit = null
|
||||||
if (L.isEnabled(L.TIDEPOOL))
|
if (L.isEnabled(L.TIDEPOOL))
|
||||||
log.debug("Instance reset")
|
log.debug("Instance reset")
|
||||||
connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
connectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -197,7 +197,7 @@ object TidepoolUploader {
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val body = RequestBody.create(MediaType.parse("application/json"), chunk)
|
val body = chunk.toRequestBody("application/json".toMediaTypeOrNull())
|
||||||
|
|
||||||
RxBus.send(EventTidepoolStatus(("Uploading")))
|
RxBus.send(EventTidepoolStatus(("Uploading")))
|
||||||
if (session.service != null && session.token != null && session.datasetReply != null) {
|
if (session.service != null && session.token != null && session.datasetReply != null) {
|
||||||
|
@ -231,11 +231,11 @@ object TidepoolUploader {
|
||||||
extendWakeLock(60000)
|
extendWakeLock(60000)
|
||||||
val call = session!!.service?.deleteDataSet(session!!.token!!, session!!.datasetReply!!.id!!)
|
val call = session!!.service?.deleteDataSet(session!!.token!!, session!!.datasetReply!!.id!!)
|
||||||
call?.enqueue(TidepoolCallback(session!!, "Delete Dataset", {
|
call?.enqueue(TidepoolCallback(session!!, "Delete Dataset", {
|
||||||
connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
connectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
RxBus.send(EventTidepoolStatus(("Dataset removed OK")))
|
RxBus.send(EventTidepoolStatus(("Dataset removed OK")))
|
||||||
releaseWakeLock()
|
releaseWakeLock()
|
||||||
}, {
|
}, {
|
||||||
connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
connectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
RxBus.send(EventTidepoolStatus(("Dataset remove FAILED")))
|
RxBus.send(EventTidepoolStatus(("Dataset remove FAILED")))
|
||||||
releaseWakeLock()
|
releaseWakeLock()
|
||||||
}))
|
}))
|
||||||
|
@ -255,11 +255,11 @@ object TidepoolUploader {
|
||||||
extendWakeLock(60000)
|
extendWakeLock(60000)
|
||||||
val call = session.service?.deleteAllData(token, userid)
|
val call = session.service?.deleteAllData(token, userid)
|
||||||
call?.enqueue(TidepoolCallback(session, "Delete all data", {
|
call?.enqueue(TidepoolCallback(session, "Delete all data", {
|
||||||
connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
connectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
RxBus.send(EventTidepoolStatus(("All data removed OK")))
|
RxBus.send(EventTidepoolStatus(("All data removed OK")))
|
||||||
releaseWakeLock()
|
releaseWakeLock()
|
||||||
}, {
|
}, {
|
||||||
connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED
|
connectionStatus = ConnectionStatus.DISCONNECTED
|
||||||
RxBus.send(EventTidepoolStatus(("All data remove FAILED")))
|
RxBus.send(EventTidepoolStatus(("All data remove FAILED")))
|
||||||
releaseWakeLock()
|
releaseWakeLock()
|
||||||
}))
|
}))
|
||||||
|
|
|
@ -3,9 +3,9 @@ package info.nightscout.androidaps.plugins.general.tidepool.events
|
||||||
import info.nightscout.androidaps.events.Event
|
import info.nightscout.androidaps.events.Event
|
||||||
import info.nightscout.androidaps.logging.L
|
import info.nightscout.androidaps.logging.L
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.LocaleHelper
|
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class EventTidepoolStatus(val status: String) : Event() {
|
class EventTidepoolStatus(val status: String) : Event() {
|
||||||
private val log = LoggerFactory.getLogger(L.TIDEPOOL)
|
private val log = LoggerFactory.getLogger(L.TIDEPOOL)
|
||||||
|
@ -17,7 +17,7 @@ class EventTidepoolStatus(val status: String) : Event() {
|
||||||
log.debug("New status: $status")
|
log.debug("New status: $status")
|
||||||
}
|
}
|
||||||
|
|
||||||
private var timeFormat = SimpleDateFormat("HH:mm:ss", LocaleHelper.currentLocale())
|
private var timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
|
||||||
|
|
||||||
fun toPreparedHtml(): StringBuilder {
|
fun toPreparedHtml(): StringBuilder {
|
||||||
val stringBuilder = StringBuilder()
|
val stringBuilder = StringBuilder()
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package info.nightscout.androidaps.plugins.general.tidepool.messages
|
package info.nightscout.androidaps.plugins.general.tidepool.messages
|
||||||
|
|
||||||
import info.nightscout.androidaps.plugins.general.tidepool.utils.GsonInstance
|
import info.nightscout.androidaps.plugins.general.tidepool.utils.GsonInstance
|
||||||
import okhttp3.MediaType
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||||
import okhttp3.RequestBody
|
import okhttp3.RequestBody
|
||||||
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
|
|
||||||
open class BaseMessage {
|
open class BaseMessage {
|
||||||
private fun toS(): String {
|
private fun toS(): String {
|
||||||
|
@ -10,7 +11,7 @@ open class BaseMessage {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getBody(): RequestBody {
|
fun getBody(): RequestBody {
|
||||||
return RequestBody.create(MediaType.parse("application/json"), this.toS())
|
return this.toS().toRequestBody("application/json".toMediaTypeOrNull())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ import java.util.List;
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.activities.NoSplashActivity;
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
|
||||||
import info.nightscout.androidaps.data.Profile;
|
import info.nightscout.androidaps.data.Profile;
|
||||||
import info.nightscout.androidaps.db.DanaRHistoryRecord;
|
import info.nightscout.androidaps.db.DanaRHistoryRecord;
|
||||||
import info.nightscout.androidaps.events.EventPumpStatusChanged;
|
import info.nightscout.androidaps.events.EventPumpStatusChanged;
|
||||||
|
@ -44,7 +44,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
|
||||||
public class DanaRHistoryActivity extends NoSplashActivity {
|
public class DanaRHistoryActivity extends NoSplashAppCompatActivity {
|
||||||
private static Logger log = LoggerFactory.getLogger(L.PUMP);
|
private static Logger log = LoggerFactory.getLogger(L.PUMP);
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,8 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.activities.NoSplashActivity;
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
|
||||||
import info.nightscout.androidaps.events.EventInitializationChanged;
|
import info.nightscout.androidaps.events.EventInitializationChanged;
|
||||||
import info.nightscout.androidaps.interfaces.PluginType;
|
import info.nightscout.androidaps.interfaces.PluginType;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
|
@ -33,7 +32,7 @@ import io.reactivex.disposables.CompositeDisposable;
|
||||||
* Created by Rumen Georgiev on 5/31/2018.
|
* Created by Rumen Georgiev on 5/31/2018.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class DanaRUserOptionsActivity extends NoSplashActivity {
|
public class DanaRUserOptionsActivity extends NoSplashAppCompatActivity {
|
||||||
private static Logger log = LoggerFactory.getLogger(L.PUMP);
|
private static Logger log = LoggerFactory.getLogger(L.PUMP);
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
|
|
@ -20,13 +20,13 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.activities.NoSplashActivity;
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
|
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry;
|
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryGroup;
|
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryGroup;
|
||||||
|
|
||||||
public class MedtronicHistoryActivity extends NoSplashActivity {
|
public class MedtronicHistoryActivity extends NoSplashAppCompatActivity {
|
||||||
|
|
||||||
private static Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
private static Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ class TreatmentsProfileSwitchFragment : Fragment() {
|
||||||
val builder = AlertDialog.Builder(this.context!!)
|
val builder = AlertDialog.Builder(this.context!!)
|
||||||
builder.setTitle(MainApp.gs(R.string.confirmation))
|
builder.setTitle(MainApp.gs(R.string.confirmation))
|
||||||
builder.setMessage(MainApp.gs(R.string.refresheventsfromnightscout) + "?")
|
builder.setMessage(MainApp.gs(R.string.refresheventsfromnightscout) + "?")
|
||||||
builder.setPositiveButton(MainApp.gs(R.string.ok)) { dialog: DialogInterface?, id: Int ->
|
builder.setPositiveButton(MainApp.gs(R.string.ok)) { _ , _->
|
||||||
MainApp.getDbHelper().resetProfileSwitch()
|
MainApp.getDbHelper().resetProfileSwitch()
|
||||||
RxBus.send(EventNSClientRestart())
|
RxBus.send(EventNSClientRestart())
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,18 +72,6 @@ public class SetupWizardActivity extends NoSplashAppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
if (currentWizardPage == 0)
|
|
||||||
OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
|
|
||||||
else showPreviousPage(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void exitPressed(View view) {
|
|
||||||
SP.putBoolean(R.string.key_setupwizard_processed, true);
|
|
||||||
OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
@ -157,6 +145,18 @@ public class SetupWizardActivity extends NoSplashAppCompatActivity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
if (currentWizardPage == 0)
|
||||||
|
OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
|
||||||
|
else showPreviousPage(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exitPressed(View view) {
|
||||||
|
SP.putBoolean(R.string.key_setupwizard_processed, true);
|
||||||
|
OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
|
||||||
|
}
|
||||||
|
|
||||||
public void showNextPage(View view) {
|
public void showNextPage(View view) {
|
||||||
this.finish();
|
this.finish();
|
||||||
Intent intent = new Intent(this, SetupWizardActivity.class);
|
Intent intent = new Intent(this, SetupWizardActivity.class);
|
||||||
|
|
|
@ -3,6 +3,8 @@ package info.nightscout.androidaps.setupwizard.elements;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.annotation.StringRes;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -67,12 +69,12 @@ public class SWItem {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SWItem label(int label) {
|
public SWItem label(@StringRes int label) {
|
||||||
this.label = label;
|
this.label = label;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SWItem comment(int comment) {
|
public SWItem comment(@StringRes int comment) {
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
package info.nightscout.androidaps.utils
|
package info.nightscout.androidaps.utils
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.ContextWrapper
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.LocaleList
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object LocaleHelper {
|
|
||||||
fun update(context: Context) =
|
|
||||||
updateResources(context, currentLanguage())
|
|
||||||
|
|
||||||
|
object LocaleHelper {
|
||||||
fun currentLanguage(): String =
|
fun currentLanguage(): String =
|
||||||
SP.getString(R.string.key_language, Locale.getDefault().language)
|
SP.getString(R.string.key_language, Locale.getDefault().language)
|
||||||
|
|
||||||
fun currentLocale(): Locale =
|
private fun currentLocale(): Locale {
|
||||||
Locale(SP.getString(R.string.key_language, Locale.getDefault().language))
|
val language = currentLanguage()
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
private fun updateResources(context: Context, language: String) {
|
|
||||||
var locale = Locale(language)
|
var locale = Locale(language)
|
||||||
if (language.contains("_")) {
|
if (language.contains("_")) {
|
||||||
// language with country like pt_BR defined in arrays.xml
|
// language with country like pt_BR defined in arrays.xml
|
||||||
|
@ -23,10 +21,35 @@ object LocaleHelper {
|
||||||
val country = language.substring(3, 5)
|
val country = language.substring(3, 5)
|
||||||
locale = Locale(lang, country)
|
locale = Locale(lang, country)
|
||||||
}
|
}
|
||||||
|
return locale
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
fun update(context: Context) {
|
||||||
|
val locale = currentLocale()
|
||||||
Locale.setDefault(locale)
|
Locale.setDefault(locale)
|
||||||
val resources = context.resources
|
val resources = context.resources
|
||||||
resources.configuration.setLocale(locale)
|
val configuration = resources.configuration
|
||||||
resources.updateConfiguration(resources.configuration, resources.displayMetrics)
|
context.createConfigurationContext(configuration)
|
||||||
|
configuration.setLocale(locale)
|
||||||
|
configuration.locale = locale
|
||||||
|
resources.updateConfiguration(configuration, resources.displayMetrics)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun wrap(ctx: Context): ContextWrapper {
|
||||||
|
val res = ctx.resources
|
||||||
|
val configuration = res.configuration
|
||||||
|
val newLocale = currentLocale()
|
||||||
|
val context = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
configuration.setLocale(newLocale)
|
||||||
|
val localeList = LocaleList(newLocale)
|
||||||
|
LocaleList.setDefault(localeList)
|
||||||
|
configuration.locales = localeList
|
||||||
|
ctx.createConfigurationContext(configuration)
|
||||||
|
} else {
|
||||||
|
configuration.setLocale(newLocale)
|
||||||
|
ctx.createConfigurationContext(configuration)
|
||||||
|
}
|
||||||
|
return ContextWrapper(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -10,7 +10,11 @@ import info.nightscout.androidaps.MainApp;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class SP {
|
public class SP {
|
||||||
static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
|
|
||||||
|
static public void clear() {
|
||||||
|
sharedPreferences.edit().clear().apply();
|
||||||
|
}
|
||||||
|
|
||||||
static public boolean contains(String key) {
|
static public boolean contains(String key) {
|
||||||
return sharedPreferences.contains(key);
|
return sharedPreferences.contains(key);
|
||||||
|
@ -85,75 +89,51 @@ public class SP {
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putBoolean(String key, boolean value) {
|
static public void putBoolean(String key, boolean value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putBoolean(key, value).apply();
|
||||||
editor.putBoolean(key, value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putBoolean(int resourceID, boolean value) {
|
static public void putBoolean(int resourceID, boolean value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putBoolean(MainApp.gs(resourceID), value).apply();
|
||||||
editor.putBoolean(MainApp.gs(resourceID), value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putDouble(String key, double value) {
|
static public void putDouble(String key, double value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putString(key, Double.toString(value)).apply();
|
||||||
editor.putString(key, Double.toString(value));
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putLong(String key, long value) {
|
static public void putLong(String key, long value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putLong(key, value).apply();
|
||||||
editor.putLong(key, value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putLong(int resourceID, long value) {
|
static public void putLong(int resourceID, long value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putLong(MainApp.gs(resourceID), value).apply();
|
||||||
editor.putLong(MainApp.gs(resourceID), value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putInt(String key, int value) {
|
static public void putInt(String key, int value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putInt(key, value).apply();
|
||||||
editor.putInt(key, value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putInt(int resourceID, int value) {
|
static public void putInt(int resourceID, int value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putInt(MainApp.gs(resourceID), value).apply();
|
||||||
editor.putInt(MainApp.gs(resourceID), value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void incInt(int resourceID) {
|
static public void incInt(int resourceID) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
|
||||||
int value = SP.getInt(resourceID, 0) + 1;
|
int value = SP.getInt(resourceID, 0) + 1;
|
||||||
editor.putInt(MainApp.gs(resourceID), value);
|
sharedPreferences.edit().putInt(MainApp.gs(resourceID), value).apply();
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putString(int resourceID, String value) {
|
static public void putString(int resourceID, String value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putString(MainApp.gs(resourceID), value).apply();
|
||||||
editor.putString(MainApp.gs(resourceID), value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void putString(String key, String value) {
|
static public void putString(String key, String value) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().putString(key, value).apply();
|
||||||
editor.putString(key, value);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void remove(int resourceID) {
|
static public void remove(int resourceID) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().remove(MainApp.gs(resourceID)).apply();
|
||||||
editor.remove(MainApp.gs(resourceID));
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void remove(String key) {
|
static public void remove(String key) {
|
||||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
sharedPreferences.edit().remove(key).apply();
|
||||||
editor.remove(key);
|
|
||||||
editor.apply();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
app/src/main/res/drawable/ic_reorder_gray_24dp.xml
Normal file
5
app/src/main/res/drawable/ic_reorder_gray_24dp.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<vector android:height="24dp" android:tint="#C0C0C0"
|
||||||
|
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M3,15h18v-2L3,13v2zM3,19h18v-2L3,17v2zM3,11h18L21,9L3,9v2zM3,5v2h18L21,5L3,5z"/>
|
||||||
|
</vector>
|
|
@ -142,7 +142,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
|
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
|
||||||
tools:context="info.nightscout.androidaps.activities.AgreementActivity">
|
|
||||||
|
|
||||||
<ScrollView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="fill_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:text="@string/end_user_license_agreement"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textSize="15sp"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:text="@string/app_name"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:text="@string/end_user_license_agreement_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:gravity="center_horizontal">
|
|
||||||
|
|
||||||
<CheckBox
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/end_user_license_agreement_i_understand"
|
|
||||||
android:id="@+id/agreementCheckBox"
|
|
||||||
android:checked="false" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/save"
|
|
||||||
android:id="@+id/agreementSaveButton"
|
|
||||||
android:layout_marginTop="20dp" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</ScrollView>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -29,6 +29,7 @@
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:text="@string/exit"
|
android:text="@string/exit"
|
||||||
|
android:onClick="exitPressed"
|
||||||
android:textAppearance="@android:style/TextAppearance.Material.Medium"
|
android:textAppearance="@android:style/TextAppearance.Material.Medium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
android:background="@color/ribbonDefault"
|
android:background="@color/ribbonDefault"
|
||||||
android:padding="8dp">
|
android:padding="8dp">
|
||||||
|
|
||||||
|
@ -26,21 +28,21 @@
|
||||||
android:layout_alignBottom="@+id/automation_enabled"
|
android:layout_alignBottom="@+id/automation_enabled"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginTop="6dp"
|
android:layout_marginTop="6dp"
|
||||||
android:layout_toStartOf="@+id/iconTrash"
|
android:layout_toStartOf="@+id/iconSort"
|
||||||
android:layout_toEndOf="@id/automation_enabled"
|
android:layout_toEndOf="@id/automation_enabled"
|
||||||
android:text="Title"
|
android:text="Title"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/iconTrash"
|
android:id="@+id/iconSort"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:contentDescription="@string/remove_label"
|
android:contentDescription="@string/reorder_label"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:src="@drawable/ic_trash_outline" />
|
android:src="@drawable/ic_reorder_gray_24dp" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/iconLayout"
|
android:id="@+id/iconLayout"
|
||||||
|
|
|
@ -567,7 +567,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
android:layout_marginRight="30dp" />
|
android:layout_marginRight="30dp" />
|
||||||
|
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:entries="@array/quickWizardYesNo"/>
|
android:entries="@array/quickWizardYesNo"/>
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,6 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -179,7 +179,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,7 @@
|
||||||
android:layout_marginLeft="30dp"
|
android:layout_marginLeft="30dp"
|
||||||
android:layout_marginRight="30dp" />
|
android:layout_marginRight="30dp" />
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:layout_marginBottom="15dp" />
|
android:layout_marginBottom="15dp" />
|
||||||
|
|
||||||
<include layout="@layout/mdtp_done_button" />
|
<include layout="@layout/okcancel" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<com.google.android.flexbox.FlexboxLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.google.android.flexbox.FlexboxLayout xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/defaultbackground"
|
android:background="@color/defaultbackground"
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
app:alignItems="stretch"
|
app:alignItems="stretch"
|
||||||
app:flexDirection="row"
|
app:flexDirection="row"
|
||||||
app:flexWrap="wrap"
|
app:flexWrap="wrap"
|
||||||
app:justifyContent="space_between">
|
app:justifyContent="center">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/treatments_treatments"
|
android:id="@+id/treatments_treatments"
|
||||||
|
|
|
@ -358,10 +358,8 @@
|
||||||
<string name="button1">Knoppie 1</string>
|
<string name="button1">Knoppie 1</string>
|
||||||
<string name="button2">Knoppie 2</string>
|
<string name="button2">Knoppie 2</string>
|
||||||
<string name="button3">Knoppie 3</string>
|
<string name="button3">Knoppie 3</string>
|
||||||
<string name="units">Eenhede:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Doelwit reeks:</string>
|
<string name="target_range">Doelwit reeks:</string>
|
||||||
<string name="prefs_range_title">Reeks vir visualisering</string>
|
<string name="prefs_range_title">Reeks vir visualisering</string>
|
||||||
<string name="prefs_range_summary">Hoë en lae merke vir die diagramme in Overview en Smartwatch</string>
|
<string name="prefs_range_summary">Hoë en lae merke vir die diagramme in Overview en Smartwatch</string>
|
||||||
|
|
|
@ -376,10 +376,11 @@
|
||||||
<string name="button1">Бутон 1</string>
|
<string name="button1">Бутон 1</string>
|
||||||
<string name="button2">Бутон 2</string>
|
<string name="button2">Бутон 2</string>
|
||||||
<string name="button3">Бутон 3</string>
|
<string name="button3">Бутон 3</string>
|
||||||
<string name="units">Единици:</string>
|
<string name="units_colon">Единици:</string>
|
||||||
|
<string name="units">Единици</string>
|
||||||
<string name="mgdl">мг/дл</string>
|
<string name="mgdl">мг/дл</string>
|
||||||
<string name="mmol">ммол/л</string>
|
<string name="mmol">ммол/л</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Целева КЗ:</string>
|
<string name="target_range">Целева КЗ:</string>
|
||||||
<string name="prefs_range_title">Диапазон за визуализация</string>
|
<string name="prefs_range_title">Диапазон за визуализация</string>
|
||||||
<string name="prefs_range_summary">Стойност на линиите за ниска и висока КЗ (mmol/l) за телефона и часовника</string>
|
<string name="prefs_range_summary">Стойност на линиите за ниска и висока КЗ (mmol/l) за телефона и часовника</string>
|
||||||
|
@ -1391,7 +1392,29 @@
|
||||||
<string name="format_percent">%1$d %%</string>
|
<string name="format_percent">%1$d %%</string>
|
||||||
<string name="boluswizard">Болус калкулатор</string>
|
<string name="boluswizard">Болус калкулатор</string>
|
||||||
<string name="unit_minute_short">мин</string>
|
<string name="unit_minute_short">мин</string>
|
||||||
|
<string name="profile_name">Име на профила:</string>
|
||||||
|
<string name="selected_profile">Избрано:</string>
|
||||||
|
<string name="unitsnosemicolon">Единици</string>
|
||||||
|
<string name="doyouwantswitchprofile">Искате да смените профила и премахнете на промените, направени в текущия профил?</string>
|
||||||
<string name="format_carbs">%1$dг</string>
|
<string name="format_carbs">%1$dг</string>
|
||||||
<string name="common_on">Вкл</string>
|
<string name="common_on">Вкл</string>
|
||||||
<string name="common_off">Изкл</string>
|
<string name="common_off">Изкл</string>
|
||||||
|
<string name="objectives_button_unfinish">Изчисти приключение</string>
|
||||||
|
<string name="objectives_button_unstart">Изчисти стартираните</string>
|
||||||
|
<string name="timedetection">Засичане на времето</string>
|
||||||
|
<string name="doyouwantresetstart">Искате ли да нулирате прогреса си?</string>
|
||||||
|
<string name="nopumpselected">Не е избрана помпа</string>
|
||||||
|
<string name="setupwizard_units_prompt">Изберете единиците, в които искате да работите</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Качване на локални промени в НС профила</string>
|
||||||
|
<string name="dia_short">DIA</string>
|
||||||
|
<string name="ic_short">IC (Инсулин/въглехидр.):</string>
|
||||||
|
<string name="isf_short">ISF (Инс.чувствителност)</string>
|
||||||
|
<string name="target_short">Цел</string>
|
||||||
|
<string name="clone_label">Клонирай</string>
|
||||||
|
<string name="saveorresetchangesfirst">Първо запазете или се откажете от промените</string>
|
||||||
|
<string name="deletecurrentprofile">Изтриване на текущия профил?</string>
|
||||||
|
<string name="copytolocalprofile">Създаване на нов локален профил от това превключване?</string>
|
||||||
|
<string name="profilenamecontainsdot">Името на профила съдържа точка.\nТова не се поддържа от НС.\nПрофилът не е качен в НС.</string>
|
||||||
|
<string name="low_mark_comment">Ниската граница на диапазона (графика)</string>
|
||||||
|
<string name="high_mark_comment">Високата граница на диапазона (графика)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -376,10 +376,11 @@
|
||||||
<string name="button1">Tlačítko 1</string>
|
<string name="button1">Tlačítko 1</string>
|
||||||
<string name="button2">Tlačítko 2</string>
|
<string name="button2">Tlačítko 2</string>
|
||||||
<string name="button3">Tlačítko 3</string>
|
<string name="button3">Tlačítko 3</string>
|
||||||
<string name="units">Jednotky:</string>
|
<string name="units_colon">Jednotky:</string>
|
||||||
|
<string name="units">Jednotky</string>
|
||||||
<string name="mgdl">mg/dL</string>
|
<string name="mgdl">mg/dL</string>
|
||||||
<string name="mmol">mmol/L</string>
|
<string name="mmol">mmol/L</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Cílový rozsah:</string>
|
<string name="target_range">Cílový rozsah:</string>
|
||||||
<string name="prefs_range_title">Rozsah pro zobrazení</string>
|
<string name="prefs_range_title">Rozsah pro zobrazení</string>
|
||||||
<string name="prefs_range_summary">Značka vysoké a nízké hodnoty v přehledu a na hodinkách Wear</string>
|
<string name="prefs_range_summary">Značka vysoké a nízké hodnoty v přehledu a na hodinkách Wear</string>
|
||||||
|
@ -1391,6 +1392,10 @@
|
||||||
<string name="format_percent">%1$d%%</string>
|
<string name="format_percent">%1$d%%</string>
|
||||||
<string name="boluswizard">Bolusová kalkulačka</string>
|
<string name="boluswizard">Bolusová kalkulačka</string>
|
||||||
<string name="unit_minute_short">min</string>
|
<string name="unit_minute_short">min</string>
|
||||||
|
<string name="profile_name">Jméno profilu:</string>
|
||||||
|
<string name="selected_profile">Vybráno:</string>
|
||||||
|
<string name="unitsnosemicolon">Jednotky</string>
|
||||||
|
<string name="doyouwantswitchprofile">Chcete přepnout profil a zahodit změny provedené v aktuálním profilu?</string>
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">ZAP</string>
|
<string name="common_on">ZAP</string>
|
||||||
<string name="common_off">VYP</string>
|
<string name="common_off">VYP</string>
|
||||||
|
@ -1398,4 +1403,18 @@
|
||||||
<string name="objectives_button_unstart">Vymazat start</string>
|
<string name="objectives_button_unstart">Vymazat start</string>
|
||||||
<string name="timedetection">Detekce času</string>
|
<string name="timedetection">Detekce času</string>
|
||||||
<string name="doyouwantresetstart">Chcete resetovat začátek cíle? Můžete přijít o svůj pokrok.</string>
|
<string name="doyouwantresetstart">Chcete resetovat začátek cíle? Můžete přijít o svůj pokrok.</string>
|
||||||
|
<string name="nopumpselected">Nevybrána žádná pumpa</string>
|
||||||
|
<string name="setupwizard_units_prompt">Vyberte jednotky, ve kterých chcete zobrazit hodnoty</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Odeslat změny lokálního profilu do NS</string>
|
||||||
|
<string name="dia_short">DIA</string>
|
||||||
|
<string name="ic_short">I:C</string>
|
||||||
|
<string name="isf_short">ISF</string>
|
||||||
|
<string name="target_short">CÍL</string>
|
||||||
|
<string name="clone_label">Klonovat</string>
|
||||||
|
<string name="saveorresetchangesfirst">Nejprve uložte nebo resetujte aktuální změny</string>
|
||||||
|
<string name="deletecurrentprofile">Odstranit aktuální profil?</string>
|
||||||
|
<string name="copytolocalprofile">Chcete vytvořit nový lokální profil z tohoto přepnutí profilu?</string>
|
||||||
|
<string name="profilenamecontainsdot">Název profilu obsahuje tečky.\nToto není v NS podporováno.\nProfil není přenesen do NS.</string>
|
||||||
|
<string name="low_mark_comment">Spodní hodnota oblasti v rozsahu (pouze zobrazování)</string>
|
||||||
|
<string name="high_mark_comment">Horní hodnota oblasti v rozsahu (pouze zobrazování)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -376,10 +376,11 @@
|
||||||
<string name="button1">Schaltfläche 1</string>
|
<string name="button1">Schaltfläche 1</string>
|
||||||
<string name="button2">Schaltfläche 2</string>
|
<string name="button2">Schaltfläche 2</string>
|
||||||
<string name="button3">Schaltfläche 3</string>
|
<string name="button3">Schaltfläche 3</string>
|
||||||
<string name="units">Einheiten:</string>
|
<string name="units_colon">Einheiten:</string>
|
||||||
|
<string name="units">Einheiten</string>
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Zielbereich:</string>
|
<string name="target_range">Zielbereich:</string>
|
||||||
<string name="prefs_range_title">Zielbereich für die Grafikanzeige</string>
|
<string name="prefs_range_title">Zielbereich für die Grafikanzeige</string>
|
||||||
<string name="prefs_range_summary">Hoch- und Niedrig-Werte für die Übersicht- und die Smartwatch-Anzeige</string>
|
<string name="prefs_range_summary">Hoch- und Niedrig-Werte für die Übersicht- und die Smartwatch-Anzeige</string>
|
||||||
|
@ -1392,6 +1393,10 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="format_percent">%1$d%%</string>
|
<string name="format_percent">%1$d%%</string>
|
||||||
<string name="boluswizard">Bolus-Rechner</string>
|
<string name="boluswizard">Bolus-Rechner</string>
|
||||||
<string name="unit_minute_short">Min.</string>
|
<string name="unit_minute_short">Min.</string>
|
||||||
|
<string name="profile_name">Profilname:</string>
|
||||||
|
<string name="selected_profile">Ausgewählt:</string>
|
||||||
|
<string name="unitsnosemicolon">Einheiten</string>
|
||||||
|
<string name="doyouwantswitchprofile">Willst Du das Profil wechseln und die Änderungen am aktuellen Profil verwerfen?</string>
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">Ein</string>
|
<string name="common_on">Ein</string>
|
||||||
<string name="common_off">Aus</string>
|
<string name="common_off">Aus</string>
|
||||||
|
@ -1399,4 +1404,18 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="objectives_button_unstart">Löschen gestartet</string>
|
<string name="objectives_button_unstart">Löschen gestartet</string>
|
||||||
<string name="timedetection">Zeiterkennung</string>
|
<string name="timedetection">Zeiterkennung</string>
|
||||||
<string name="doyouwantresetstart">Möchtest Du den Start der Ziele zurücksetzen? Du verlierst Deine Fortschritte.</string>
|
<string name="doyouwantresetstart">Möchtest Du den Start der Ziele zurücksetzen? Du verlierst Deine Fortschritte.</string>
|
||||||
|
<string name="nopumpselected">Keine Pumpe ausgewählt</string>
|
||||||
|
<string name="setupwizard_units_prompt">Wähle die Einheit, in der die Werte angezeigt werden sollen.</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Lade die Änderungen des lokalen Profils zu NS hoch.</string>
|
||||||
|
<string name="dia_short">DIA</string>
|
||||||
|
<string name="ic_short">IC</string>
|
||||||
|
<string name="isf_short">ISF</string>
|
||||||
|
<string name="target_short">ZIEL</string>
|
||||||
|
<string name="clone_label">Duplizieren</string>
|
||||||
|
<string name="saveorresetchangesfirst">Speichere oder verwerfe die aktuellen Änderungen zuerst</string>
|
||||||
|
<string name="deletecurrentprofile">Aktuelles Profil löschen?</string>
|
||||||
|
<string name="copytolocalprofile">Neues lokales Profil auf Basis dieses Profilwechsels erstellen?</string>
|
||||||
|
<string name="profilenamecontainsdot">Profilname enthält Punkte.\nDies wird von NS nicht unterstützt.\nProfil wird nicht zu NS hochgeladen.</string>
|
||||||
|
<string name="low_mark_comment">Unterer Wert des Zielbereichs (nur Anzeige)</string>
|
||||||
|
<string name="high_mark_comment">Oberer Wert des Zielbereichs (nur Anzeige)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -361,10 +361,8 @@
|
||||||
<string name="button1">Πλήκτρο 1</string>
|
<string name="button1">Πλήκτρο 1</string>
|
||||||
<string name="button2">Πλήκτρο 2</string>
|
<string name="button2">Πλήκτρο 2</string>
|
||||||
<string name="button3">Πλήκτρο 3</string>
|
<string name="button3">Πλήκτρο 3</string>
|
||||||
<string name="units">Μονάδες:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Εύρος στόχου:</string>
|
<string name="target_range">Εύρος στόχου:</string>
|
||||||
<string name="prefs_range_title">Εύρος εμφάνισης</string>
|
<string name="prefs_range_title">Εύρος εμφάνισης</string>
|
||||||
<string name="prefs_range_summary">Υψηλό και Χαμηλό σημείο για την γραφική στην Επισκόπηση και Smartwatch</string>
|
<string name="prefs_range_summary">Υψηλό και Χαμηλό σημείο για την γραφική στην Επισκόπηση και Smartwatch</string>
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
<string name="objectives_useloop">Mostrar contenido del plugin Loop</string>
|
<string name="objectives_useloop">Mostrar contenido del plugin Loop</string>
|
||||||
<string name="objectives_usescale">Usar función de escala mediante un gráfico BG pulsado largo</string>
|
<string name="objectives_usescale">Usar función de escala mediante un gráfico BG pulsado largo</string>
|
||||||
<string name="objectives_button_enter">Intro</string>
|
<string name="objectives_button_enter">Intro</string>
|
||||||
|
<string name="enter_code_obtained_from_developers_to_bypass_the_rest_of_objectives">Si fuiste usuario de OpenAPS y tu NS tiene al menos 3 meses de datos de lazo cerrado, puedes enviar un correo electrónico a objectives@androidaps.org con tu dirección web de NS y solicitar código para saltarse el resto de objetivos. Ingresa posteriormente el código obtenido de los desarrolladores</string>
|
||||||
<string name="codeaccepted">Código aceptado</string>
|
<string name="codeaccepted">Código aceptado</string>
|
||||||
<string name="codeinvalid">Código no válido</string>
|
<string name="codeinvalid">Código no válido</string>
|
||||||
<string name="objectives_exam_objective">Compruebe su conocimiento</string>
|
<string name="objectives_exam_objective">Compruebe su conocimiento</string>
|
||||||
|
|
|
@ -260,11 +260,23 @@
|
||||||
<string name="smscommunicator_allowednumbers">Números de teléfono permitidos</string>
|
<string name="smscommunicator_allowednumbers">Números de teléfono permitidos</string>
|
||||||
<string name="smscommunicator_allowednumbers_summary">XXXXXXXXXX +; + YYYYYYYYYY</string>
|
<string name="smscommunicator_allowednumbers_summary">XXXXXXXXXX +; + YYYYYYYYYY</string>
|
||||||
<string name="smscommunicator_bolusreplywithcode">Para entregar bolo %1$.2fU responder con código %2$s</string>
|
<string name="smscommunicator_bolusreplywithcode">Para entregar bolo %1$.2fU responder con código %2$s</string>
|
||||||
|
<string name="smscommunicator_mealbolusreplywithcode">Para entregar bolo %1$.2fU responder con código %2$s</string>
|
||||||
|
<string name="smscommunicator_temptargetwithcode">Para establecer un basal temporal %1$s responder con el código %2$s</string>
|
||||||
|
<string name="smscommunicator_temptargetcancel">Para cancelar la basal temporal, responder con el código %1$s</string>
|
||||||
|
<string name="smscommunicator_stopsmswithcode">Para inhabilitar la respuesta de servicio remoto de SMS, responder con el código %1$s.\n\nTenga en cuenta que solamente será capaz de reactivarlo directamente desde el móvil con la AAPS maestro.</string>
|
||||||
|
<string name="smscommunicator_stoppedsms">Servicio remoto de SMS detenido. Para reactivarlo, utilice AAPS en el movil maestro.</string>
|
||||||
<string name="smscommunicator_calibrationreplywithcode">Para enviar calibración %1$.2f responder con código %2$s</string>
|
<string name="smscommunicator_calibrationreplywithcode">Para enviar calibración %1$.2f responder con código %2$s</string>
|
||||||
<string name="smscommunicator_bolusfailed">Bolo falló</string>
|
<string name="smscommunicator_bolusfailed">Bolo falló</string>
|
||||||
|
<string name="smscommunicator_remotebolusmindistance_summary">Número mínimo de minutos que deben transcursar entre un bolus remoto y el siguiente</string>
|
||||||
|
<string name="smscommunicator_remotebolusmindistance">Cuántos minutos deben transcurrir, al menos, entre un bolo y el siguiente</string>
|
||||||
|
<string name="smscommunicator_remotebolusmindistance_caveat">Por su seguridad, para editar esta preferencia es necesario añadir al menos 2 números de teléfono.</string>
|
||||||
<string name="bolusdelivered">El bolo %1$.2fU se ha infundido correctamente</string>
|
<string name="bolusdelivered">El bolo %1$.2fU se ha infundido correctamente</string>
|
||||||
<string name="bolusrequested">Se van a infundir %1$.2fU</string>
|
<string name="bolusrequested">Se van a infundir %1$.2fU</string>
|
||||||
<string name="smscommunicator_bolusdelivered">El bolo %1$.2fU se ha infundido correctamente</string>
|
<string name="smscommunicator_bolusdelivered">El bolo %1$.2fU se ha infundido correctamente</string>
|
||||||
|
<string name="smscommunicator_mealbolusdelivered">Bolo %1$.2fU entregado correctamente</string>
|
||||||
|
<string name="smscommunicator_mealbolusdelivered_tt">Objetivo %1$s para %2$d minutos</string>
|
||||||
|
<string name="smscommunicator_tt_set">Objetivo %1$s para %2$d minutos establecido correctamente</string>
|
||||||
|
<string name="smscommunicator_tt_canceled">Objetivo temporal cancelado con éxito</string>
|
||||||
<string name="bolusdelivering">Infundiendo %1$.2fU</string>
|
<string name="bolusdelivering">Infundiendo %1$.2fU</string>
|
||||||
<string name="smscommunicator_remotecommandsallowed">Permitir comandos remotos vía SMS</string>
|
<string name="smscommunicator_remotecommandsallowed">Permitir comandos remotos vía SMS</string>
|
||||||
<string name="glucosetype_finger">Dedo</string>
|
<string name="glucosetype_finger">Dedo</string>
|
||||||
|
@ -324,10 +336,13 @@
|
||||||
<string name="smscommunicator_basalreplywithcode">Para iniciar una basal de %1$.2f% durante %2$d min, responder con el código %3$s</string>
|
<string name="smscommunicator_basalreplywithcode">Para iniciar una basal de %1$.2f% durante %2$d min, responder con el código %3$s</string>
|
||||||
<string name="smscommunicator_profilereplywithcode">Para cambiar el perfil a %1$s %2$d%% responder con el código %3$s</string>
|
<string name="smscommunicator_profilereplywithcode">Para cambiar el perfil a %1$s %2$d%% responder con el código %3$s</string>
|
||||||
<string name="smscommunicator_extendedreplywithcode">Para iniciar un bolo extendido de %1$.2fU durante %2$d minutos, responder con el código %3$s</string>
|
<string name="smscommunicator_extendedreplywithcode">Para iniciar un bolo extendido de %1$.2fU durante %2$d minutos, responder con el código %3$s</string>
|
||||||
|
<string name="smscommunicator_carbsreplywithcode">Para introducir %1$dg en %2$s responder con código %3$s</string>
|
||||||
<string name="smscommunicator_basalpctreplywithcode">Para iniciar una basal de %1$d%% durante %2$d min, responder con el código %3$s</string>
|
<string name="smscommunicator_basalpctreplywithcode">Para iniciar una basal de %1$d%% durante %2$d min, responder con el código %3$s</string>
|
||||||
<string name="smscommunicator_suspendreplywithcode">Para cancelar lazo por %1$d minutos responde con código %2$s</string>
|
<string name="smscommunicator_suspendreplywithcode">Para cancelar lazo por %1$d minutos responde con código %2$s</string>
|
||||||
<string name="smscommunicator_tempbasalset">Basal temporal %1$.2fU/h para %2$d min iniciada correctamente</string>
|
<string name="smscommunicator_tempbasalset">Basal temporal %1$.2fU/h para %2$d min iniciada correctamente</string>
|
||||||
<string name="smscommunicator_extendedset">Bolo ampliado de %1$.2fU durante %2$d min se inició correctamente</string>
|
<string name="smscommunicator_extendedset">Bolo ampliado de %1$.2fU durante %2$d min se inició correctamente</string>
|
||||||
|
<string name="smscommunicator_carbsset">Los carbohidratos %1$dg introducidos con éxito</string>
|
||||||
|
<string name="smscommunicator_carbsfailed">Error al introducir %1$dg de carbohidratos</string>
|
||||||
<string name="smscommunicator_tempbasalset_percent">Basal temporal de %1$d%% durante %2$d min iniciada correctamente</string>
|
<string name="smscommunicator_tempbasalset_percent">Basal temporal de %1$d%% durante %2$d min iniciada correctamente</string>
|
||||||
<string name="smscommunicator_tempbasalfailed">Fallo inicio basal temporal</string>
|
<string name="smscommunicator_tempbasalfailed">Fallo inicio basal temporal</string>
|
||||||
<string name="smscommunicator_extendedfailed">Error al iniciar el bolo extendido</string>
|
<string name="smscommunicator_extendedfailed">Error al iniciar el bolo extendido</string>
|
||||||
|
@ -361,10 +376,8 @@
|
||||||
<string name="button1">Botón 1</string>
|
<string name="button1">Botón 1</string>
|
||||||
<string name="button2">Botón 2</string>
|
<string name="button2">Botón 2</string>
|
||||||
<string name="button3">Botón 3</string>
|
<string name="button3">Botón 3</string>
|
||||||
<string name="units">Unidades:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA (Duración Insulina Activa):</string>
|
|
||||||
<string name="target_range">Rango Objetivo:</string>
|
<string name="target_range">Rango Objetivo:</string>
|
||||||
<string name="prefs_range_title">Rango de visualización</string>
|
<string name="prefs_range_title">Rango de visualización</string>
|
||||||
<string name="prefs_range_summary">Marcas Alta y Baja para gráficos en pantalla Inicio y Smartwatch</string>
|
<string name="prefs_range_summary">Marcas Alta y Baja para gráficos en pantalla Inicio y Smartwatch</string>
|
||||||
|
@ -680,6 +693,7 @@
|
||||||
<string name="shortgramm">g</string>
|
<string name="shortgramm">g</string>
|
||||||
<string name="shortminute">m</string>
|
<string name="shortminute">m</string>
|
||||||
<string name="shorthour">h</string>
|
<string name="shorthour">h</string>
|
||||||
|
<string name="shortday">d</string>
|
||||||
<string name="none"><![CDATA[<ninguno>]]></string>
|
<string name="none"><![CDATA[<ninguno>]]></string>
|
||||||
<string name="shortkilojoul">kJ</string>
|
<string name="shortkilojoul">kJ</string>
|
||||||
<string name="shortenergy">En</string>
|
<string name="shortenergy">En</string>
|
||||||
|
@ -708,6 +722,7 @@
|
||||||
<string name="bgsource_upload">Ajuste de subida de datos de glucosa</string>
|
<string name="bgsource_upload">Ajuste de subida de datos de glucosa</string>
|
||||||
<string name="wear_detailed_delta_title">Mostrar detalles delta</string>
|
<string name="wear_detailed_delta_title">Mostrar detalles delta</string>
|
||||||
<string name="wear_detailed_delta_summary">Mostrar delta con un decimal mas</string>
|
<string name="wear_detailed_delta_summary">Mostrar delta con un decimal mas</string>
|
||||||
|
<string name="smbmaxminutes">Minutos máximos SMB</string>
|
||||||
<string name="smbmaxminutes_summary">Minutos máximos de basal para limitar SMB</string>
|
<string name="smbmaxminutes_summary">Minutos máximos de basal para limitar SMB</string>
|
||||||
<string name="unsupportedfirmware">Firmware de la bomba no soportado</string>
|
<string name="unsupportedfirmware">Firmware de la bomba no soportado</string>
|
||||||
<string name="dexcomg5_xdripupload_title">Mandar datos BG a xDrip+</string>
|
<string name="dexcomg5_xdripupload_title">Mandar datos BG a xDrip+</string>
|
||||||
|
@ -1377,4 +1392,8 @@
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">Activado</string>
|
<string name="common_on">Activado</string>
|
||||||
<string name="common_off">Desactivado</string>
|
<string name="common_off">Desactivado</string>
|
||||||
|
<string name="objectives_button_unfinish">Limpieza finalizada</string>
|
||||||
|
<string name="objectives_button_unstart">Limpieza iniciada</string>
|
||||||
|
<string name="timedetection">Detección de tiempo</string>
|
||||||
|
<string name="doyouwantresetstart">¿Desea reiniciar el objetivo? Puedes perder tu progreso.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -205,7 +205,7 @@
|
||||||
<string name="careportal_newnstreatment_carbtime_label">Heure glucides</string>
|
<string name="careportal_newnstreatment_carbtime_label">Heure glucides</string>
|
||||||
<string name="careportal_newnstreatment_split_label">Diviser</string>
|
<string name="careportal_newnstreatment_split_label">Diviser</string>
|
||||||
<string name="careportal_newnstreatment_duration_label">Durée</string>
|
<string name="careportal_newnstreatment_duration_label">Durée</string>
|
||||||
<string name="careportal_newnstreatment_percent_label">Pour cent</string>
|
<string name="careportal_newnstreatment_percent_label">Pourcentage</string>
|
||||||
<string name="careportal_newnstreatment_absolute_label">Absolu</string>
|
<string name="careportal_newnstreatment_absolute_label">Absolu</string>
|
||||||
<string name="careportal_newnstreatment_notes_label">Notes</string>
|
<string name="careportal_newnstreatment_notes_label">Notes</string>
|
||||||
<string name="careportal_newnstreatment_eventtime_label">Heure de l\'événement</string>
|
<string name="careportal_newnstreatment_eventtime_label">Heure de l\'événement</string>
|
||||||
|
@ -253,7 +253,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
|
||||||
<string name="enacted">Activé</string>
|
<string name="enacted">Activé</string>
|
||||||
<string name="comment">Commentaire</string>
|
<string name="comment">Commentaire</string>
|
||||||
<string name="success">Succès</string>
|
<string name="success">Succès</string>
|
||||||
<string name="percent">Pour cent</string>
|
<string name="percent">Pourcentage</string>
|
||||||
<string name="absolute">Absolu</string>
|
<string name="absolute">Absolu</string>
|
||||||
<string name="canceltemp">Annuler le basal temporaire</string>
|
<string name="canceltemp">Annuler le basal temporaire</string>
|
||||||
<string name="smscommunicator">Communicateur SMS</string>
|
<string name="smscommunicator">Communicateur SMS</string>
|
||||||
|
@ -377,10 +377,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
|
||||||
<string name="button1">Bouton 1</string>
|
<string name="button1">Bouton 1</string>
|
||||||
<string name="button2">Bouton 2</string>
|
<string name="button2">Bouton 2</string>
|
||||||
<string name="button3">Bouton 3</string>
|
<string name="button3">Bouton 3</string>
|
||||||
<string name="units">Unités :</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DAI :</string>
|
|
||||||
<string name="target_range">Fourchette cible :</string>
|
<string name="target_range">Fourchette cible :</string>
|
||||||
<string name="prefs_range_title">Fourchette de visualisation</string>
|
<string name="prefs_range_title">Fourchette de visualisation</string>
|
||||||
<string name="prefs_range_summary">Les repères hauts et bas sur les graphiques pour l\'aperçu et la montre</string>
|
<string name="prefs_range_summary">Les repères hauts et bas sur les graphiques pour l\'aperçu et la montre</string>
|
||||||
|
|
|
@ -376,10 +376,11 @@
|
||||||
<string name="button1">Tasto 1</string>
|
<string name="button1">Tasto 1</string>
|
||||||
<string name="button2">Tasto 2</string>
|
<string name="button2">Tasto 2</string>
|
||||||
<string name="button3">Tasto 3</string>
|
<string name="button3">Tasto 3</string>
|
||||||
<string name="units">Unità:</string>
|
<string name="units_colon">Unità:</string>
|
||||||
|
<string name="units">Unità</string>
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Intervallo target:</string>
|
<string name="target_range">Intervallo target:</string>
|
||||||
<string name="prefs_range_title">Intervallo di visualizzazione</string>
|
<string name="prefs_range_title">Intervallo di visualizzazione</string>
|
||||||
<string name="prefs_range_summary">Limite alto e basso per i grafici nella sezione Panoramica e sullo Smartwatch</string>
|
<string name="prefs_range_summary">Limite alto e basso per i grafici nella sezione Panoramica e sullo Smartwatch</string>
|
||||||
|
@ -852,7 +853,7 @@
|
||||||
<string name="combo_activity_checking_pump_state">Aggiornamento stato micro</string>
|
<string name="combo_activity_checking_pump_state">Aggiornamento stato micro</string>
|
||||||
<string name="combo_warning_pump_basal_rate_changed">La velocità basale nel micro è cambiata e verrà aggiornata a breve</string>
|
<string name="combo_warning_pump_basal_rate_changed">La velocità basale nel micro è cambiata e verrà aggiornata a breve</string>
|
||||||
<string name="combo_error_failure_reading_changed_basal_rate">Velocità basale cambiata sul micro, ma la sua lettura è fallita</string>
|
<string name="combo_error_failure_reading_changed_basal_rate">Velocità basale cambiata sul micro, ma la sua lettura è fallita</string>
|
||||||
<string name="combo_activity_checking_for_history_changes">Controllo delle modifiche allo storico</string>
|
<string name="combo_activity_checking_for_history_changes">Controllo modifiche allo storico</string>
|
||||||
<string name="combo_error_multiple_boluses_with_identical_timestamp">Sono appena stati importati più boli con la stessa quantità nello stesso minuto. Solo un record può essere aggiunto ai trattamenti. Controlla il micro e aggiungi manualmente un record di bolo utilizzando la sezione Portale. Assicurati di creare un bolo con un orario non utilizzato da nessun altro bolo.</string>
|
<string name="combo_error_multiple_boluses_with_identical_timestamp">Sono appena stati importati più boli con la stessa quantità nello stesso minuto. Solo un record può essere aggiunto ai trattamenti. Controlla il micro e aggiungi manualmente un record di bolo utilizzando la sezione Portale. Assicurati di creare un bolo con un orario non utilizzato da nessun altro bolo.</string>
|
||||||
<string name="about_link_urls">\n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de)</string>
|
<string name="about_link_urls">\n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de)</string>
|
||||||
<string name="combo_check_date">L\'ultimo bolo è più vecchio di 24 ore o ha una data nel futuro. Controlla che la data sul micro sia impostata correttamente.</string>
|
<string name="combo_check_date">L\'ultimo bolo è più vecchio di 24 ore o ha una data nel futuro. Controlla che la data sul micro sia impostata correttamente.</string>
|
||||||
|
@ -1391,6 +1392,10 @@
|
||||||
<string name="format_percent">%1$d%%</string>
|
<string name="format_percent">%1$d%%</string>
|
||||||
<string name="boluswizard">Calcolatore</string>
|
<string name="boluswizard">Calcolatore</string>
|
||||||
<string name="unit_minute_short">min</string>
|
<string name="unit_minute_short">min</string>
|
||||||
|
<string name="profile_name">Nome profilo:</string>
|
||||||
|
<string name="selected_profile">Selezionato:</string>
|
||||||
|
<string name="unitsnosemicolon">Unità</string>
|
||||||
|
<string name="doyouwantswitchprofile">Vuoi cambiare profilo e scartare le modifiche apportate al profilo corrente?</string>
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">On</string>
|
<string name="common_on">On</string>
|
||||||
<string name="common_off">Off</string>
|
<string name="common_off">Off</string>
|
||||||
|
@ -1398,4 +1403,18 @@
|
||||||
<string name="objectives_button_unstart">Cancella avviato</string>
|
<string name="objectives_button_unstart">Cancella avviato</string>
|
||||||
<string name="timedetection">Rilevazione tempo</string>
|
<string name="timedetection">Rilevazione tempo</string>
|
||||||
<string name="doyouwantresetstart">Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi.</string>
|
<string name="doyouwantresetstart">Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi.</string>
|
||||||
|
<string name="nopumpselected">Nessun micro selezionato</string>
|
||||||
|
<string name="setupwizard_units_prompt">Seleziona le unità in cui vuoi visualizzare i valori</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Carica modifiche al profilo locale in NS</string>
|
||||||
|
<string name="dia_short">DIA</string>
|
||||||
|
<string name="ic_short">IC</string>
|
||||||
|
<string name="isf_short">ISF</string>
|
||||||
|
<string name="target_short">TARG</string>
|
||||||
|
<string name="clone_label">Clona</string>
|
||||||
|
<string name="saveorresetchangesfirst">Salva o reimposta prima le modifiche correnti</string>
|
||||||
|
<string name="deletecurrentprofile">Rimuovere il profilo corrente?</string>
|
||||||
|
<string name="copytolocalprofile">Creare nuovo profilo locale da questo cambio profilo?</string>
|
||||||
|
<string name="profilenamecontainsdot">Il nome profilo contiene dei punti.\nQuesto non è supportato da NS.\nIl profilo non viene caricato in NS.</string>
|
||||||
|
<string name="low_mark_comment">Valore più basso per l\'intervallo di visualizzazione dell\'area \"in range\"</string>
|
||||||
|
<string name="high_mark_comment">Valore più alto per l\'intervallo di visualizzazione dell\'area \"in range\"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -359,10 +359,8 @@
|
||||||
<string name="button1">버튼1</string>
|
<string name="button1">버튼1</string>
|
||||||
<string name="button2">버튼2</string>
|
<string name="button2">버튼2</string>
|
||||||
<string name="button3">버튼3</string>
|
<string name="button3">버튼3</string>
|
||||||
<string name="units">유닛:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">목표 범위:</string>
|
<string name="target_range">목표 범위:</string>
|
||||||
<string name="prefs_range_title">차트 표시 범위</string>
|
<string name="prefs_range_title">차트 표시 범위</string>
|
||||||
<string name="prefs_range_summary">스마트워치 차트 고/저혈당 선</string>
|
<string name="prefs_range_summary">스마트워치 차트 고/저혈당 선</string>
|
||||||
|
|
|
@ -361,10 +361,8 @@
|
||||||
<string name="button1">Mygtukas 1</string>
|
<string name="button1">Mygtukas 1</string>
|
||||||
<string name="button2">Mygtukas 2</string>
|
<string name="button2">Mygtukas 2</string>
|
||||||
<string name="button3">Mygtukas 3</string>
|
<string name="button3">Mygtukas 3</string>
|
||||||
<string name="units">Vienetai:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">IVT:</string>
|
|
||||||
<string name="target_range">Tikslinis diapazonas:</string>
|
<string name="target_range">Tikslinis diapazonas:</string>
|
||||||
<string name="prefs_range_title">Vizualizacijos diapazonas</string>
|
<string name="prefs_range_title">Vizualizacijos diapazonas</string>
|
||||||
<string name="prefs_range_summary">Aukštoji ir žemoji riba Apžvalgos grafikuose bei išmaniuosiuose laikrodžiuose</string>
|
<string name="prefs_range_summary">Aukštoji ir žemoji riba Apžvalgos grafikuose bei išmaniuosiuose laikrodžiuose</string>
|
||||||
|
|
|
@ -376,10 +376,8 @@
|
||||||
<string name="button1">Knop 1</string>
|
<string name="button1">Knop 1</string>
|
||||||
<string name="button2">Knop 2</string>
|
<string name="button2">Knop 2</string>
|
||||||
<string name="button3">Knop 3</string>
|
<string name="button3">Knop 3</string>
|
||||||
<string name="units">Eenheden:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Streefdoel:</string>
|
<string name="target_range">Streefdoel:</string>
|
||||||
<string name="prefs_range_title">Bereik voor visualisatie</string>
|
<string name="prefs_range_title">Bereik voor visualisatie</string>
|
||||||
<string name="prefs_range_summary">Hoge en lage grens voor grafieken op het Overzicht en op Wear</string>
|
<string name="prefs_range_summary">Hoge en lage grens voor grafieken op het Overzicht en op Wear</string>
|
||||||
|
@ -591,7 +589,7 @@
|
||||||
<string name="hours">uren</string>
|
<string name="hours">uren</string>
|
||||||
<string name="overview_newtempbasal_basaltype_label">Basaal type</string>
|
<string name="overview_newtempbasal_basaltype_label">Basaal type</string>
|
||||||
<string name="invalidprofile">Ongeldig profiel !!!</string>
|
<string name="invalidprofile">Ongeldig profiel !!!</string>
|
||||||
<string name="profileswitch">Wisselen van profiel</string>
|
<string name="profileswitch">Profiel Wissel</string>
|
||||||
<string name="careportal_pbage_label">Ouderdom batterij</string>
|
<string name="careportal_pbage_label">Ouderdom batterij</string>
|
||||||
<string name="careportal_pumpbatterychange">Pomp bat. wissel</string>
|
<string name="careportal_pumpbatterychange">Pomp bat. wissel</string>
|
||||||
<string name="ns_alarmoptions">Alarm opties</string>
|
<string name="ns_alarmoptions">Alarm opties</string>
|
||||||
|
|
|
@ -361,10 +361,8 @@
|
||||||
<string name="button1">Przycisk 1</string>
|
<string name="button1">Przycisk 1</string>
|
||||||
<string name="button2">Przycisk 2</string>
|
<string name="button2">Przycisk 2</string>
|
||||||
<string name="button3">Przycisk 3</string>
|
<string name="button3">Przycisk 3</string>
|
||||||
<string name="units">Jednostki:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Zakres docelowy:</string>
|
<string name="target_range">Zakres docelowy:</string>
|
||||||
<string name="prefs_range_title">Zakres do wizualizacji (na wykresie)</string>
|
<string name="prefs_range_title">Zakres do wizualizacji (na wykresie)</string>
|
||||||
<string name="prefs_range_summary">Oznaczenia wysokiego i niskiego cukru na wykresie w oknie przegląd i na smartwatch\'u</string>
|
<string name="prefs_range_summary">Oznaczenia wysokiego i niskiego cukru na wykresie w oknie przegląd i na smartwatch\'u</string>
|
||||||
|
@ -1378,4 +1376,8 @@
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">Włącz</string>
|
<string name="common_on">Włącz</string>
|
||||||
<string name="common_off">Wyłącz</string>
|
<string name="common_off">Wyłącz</string>
|
||||||
|
<string name="objectives_button_unfinish">Wyczyść skończone</string>
|
||||||
|
<string name="objectives_button_unstart">Wyczyść rozpoczęte</string>
|
||||||
|
<string name="timedetection">Wykrywanie czasu</string>
|
||||||
|
<string name="doyouwantresetstart">Czy chcesz zresetować czas rozpoczęcia zadania? Możesz utracić postępy.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -361,10 +361,8 @@
|
||||||
<string name="button1">Botão 1</string>
|
<string name="button1">Botão 1</string>
|
||||||
<string name="button2">Botão 2</string>
|
<string name="button2">Botão 2</string>
|
||||||
<string name="button3">Botão 3</string>
|
<string name="button3">Botão 3</string>
|
||||||
<string name="units">Unidades:</string>
|
|
||||||
<string name="mgdl">mg/dL</string>
|
<string name="mgdl">mg/dL</string>
|
||||||
<string name="mmol">mmol/L</string>
|
<string name="mmol">mmol/L</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Intervalo Alvo:</string>
|
<string name="target_range">Intervalo Alvo:</string>
|
||||||
<string name="prefs_range_title">Intervalo para visualização</string>
|
<string name="prefs_range_title">Intervalo para visualização</string>
|
||||||
<string name="prefs_range_summary">Marca alta e baixa para as cartas em Visão geral e Smartwatch</string>
|
<string name="prefs_range_summary">Marca alta e baixa para as cartas em Visão geral e Smartwatch</string>
|
||||||
|
|
|
@ -210,7 +210,7 @@
|
||||||
<string name="careportal_newnstreatment_notes_label">Notas</string>
|
<string name="careportal_newnstreatment_notes_label">Notas</string>
|
||||||
<string name="careportal_newnstreatment_eventtime_label">Tempo do evento</string>
|
<string name="careportal_newnstreatment_eventtime_label">Tempo do evento</string>
|
||||||
<string name="careportal_newnstreatment_profile_label">Perfil</string>
|
<string name="careportal_newnstreatment_profile_label">Perfil</string>
|
||||||
<string name="careportal_newnstreatment_enteredby_title">Introduzido por</string>
|
<string name="careportal_newnstreatment_enteredby_title">Inserido por</string>
|
||||||
<string name="careportal_newnstreatment_glucosetype">Tipo de glicose</string>
|
<string name="careportal_newnstreatment_glucosetype">Tipo de glicose</string>
|
||||||
<string name="noprofile">Sem perfil carregado do NS</string>
|
<string name="noprofile">Sem perfil carregado do NS</string>
|
||||||
<string name="overview_tempbasal_button">BasalTemp</string>
|
<string name="overview_tempbasal_button">BasalTemp</string>
|
||||||
|
@ -265,6 +265,9 @@
|
||||||
<string name="bolusdelivered">Bólus %1$.2fU enviado com êxito</string>
|
<string name="bolusdelivered">Bólus %1$.2fU enviado com êxito</string>
|
||||||
<string name="bolusrequested">Vai ser enviado %1$.2fU</string>
|
<string name="bolusrequested">Vai ser enviado %1$.2fU</string>
|
||||||
<string name="smscommunicator_bolusdelivered">Bólus %1$.2fU enviado com êxito</string>
|
<string name="smscommunicator_bolusdelivered">Bólus %1$.2fU enviado com êxito</string>
|
||||||
|
<string name="smscommunicator_mealbolusdelivered_tt">Alvo %1$s para %2$d minutos</string>
|
||||||
|
<string name="smscommunicator_tt_set">Alvo %1$s para %2$d minutos definido com sucesso</string>
|
||||||
|
<string name="smscommunicator_tt_canceled">Alvo Temp cancelado com êxito</string>
|
||||||
<string name="bolusdelivering">A enviar %1$.2fU</string>
|
<string name="bolusdelivering">A enviar %1$.2fU</string>
|
||||||
<string name="smscommunicator_remotecommandsallowed">Permitir comandos remotos via SMS</string>
|
<string name="smscommunicator_remotecommandsallowed">Permitir comandos remotos via SMS</string>
|
||||||
<string name="glucosetype_finger">Dedo</string>
|
<string name="glucosetype_finger">Dedo</string>
|
||||||
|
@ -324,10 +327,13 @@
|
||||||
<string name="smscommunicator_basalreplywithcode">Para começar a basal %1$.2fU/h durante%2$d min responda com o código %3$s</string>
|
<string name="smscommunicator_basalreplywithcode">Para começar a basal %1$.2fU/h durante%2$d min responda com o código %3$s</string>
|
||||||
<string name="smscommunicator_profilereplywithcode">Para mudar o perfil para %1$s %2$d%% responda com o código %3$s</string>
|
<string name="smscommunicator_profilereplywithcode">Para mudar o perfil para %1$s %2$d%% responda com o código %3$s</string>
|
||||||
<string name="smscommunicator_extendedreplywithcode">Para começar o bólus estendido %1$.2fU/h para %2$d min responda com o código %3$s</string>
|
<string name="smscommunicator_extendedreplywithcode">Para começar o bólus estendido %1$.2fU/h para %2$d min responda com o código %3$s</string>
|
||||||
|
<string name="smscommunicator_carbsreplywithcode">Para inserir %1$dg em %2$s responda com código %3$s</string>
|
||||||
<string name="smscommunicator_basalpctreplywithcode">Para começar a basal %1$d% U/h durante %2$d min responda com o código %3$s</string>
|
<string name="smscommunicator_basalpctreplywithcode">Para começar a basal %1$d% U/h durante %2$d min responda com o código %3$s</string>
|
||||||
<string name="smscommunicator_suspendreplywithcode">Para suspender o loop por %1$d minutos resposta com código %2$s</string>
|
<string name="smscommunicator_suspendreplywithcode">Para suspender o loop por %1$d minutos resposta com código %2$s</string>
|
||||||
<string name="smscommunicator_tempbasalset">Basal temporária %1$.2fU/h para %2$d min iniciada com êxito</string>
|
<string name="smscommunicator_tempbasalset">Basal temporária %1$.2fU/h para %2$d min iniciada com êxito</string>
|
||||||
<string name="smscommunicator_extendedset">Bólus estendido %1$.2fU/h para %2$d min iniciado com êxito</string>
|
<string name="smscommunicator_extendedset">Bólus estendido %1$.2fU/h para %2$d min iniciado com êxito</string>
|
||||||
|
<string name="smscommunicator_carbsset">Hidratos %1$dg inseridos com sucesso</string>
|
||||||
|
<string name="smscommunicator_carbsfailed">Introdução de %1$dg de hidratos falhou</string>
|
||||||
<string name="smscommunicator_tempbasalset_percent">Basal temporária %1$d% U/h durante%2$d min iniciada com êxito</string>
|
<string name="smscommunicator_tempbasalset_percent">Basal temporária %1$d% U/h durante%2$d min iniciada com êxito</string>
|
||||||
<string name="smscommunicator_tempbasalfailed">Início basal temp falhou </string>
|
<string name="smscommunicator_tempbasalfailed">Início basal temp falhou </string>
|
||||||
<string name="smscommunicator_extendedfailed">Falha ao iniciar o bólus estendido</string>
|
<string name="smscommunicator_extendedfailed">Falha ao iniciar o bólus estendido</string>
|
||||||
|
@ -361,10 +367,11 @@
|
||||||
<string name="button1">Botão 1</string>
|
<string name="button1">Botão 1</string>
|
||||||
<string name="button2">Botão 2</string>
|
<string name="button2">Botão 2</string>
|
||||||
<string name="button3">Botão 3</string>
|
<string name="button3">Botão 3</string>
|
||||||
<string name="units">Unidades:</string>
|
<string name="units_colon">Unidades:</string>
|
||||||
|
<string name="units">Unidades</string>
|
||||||
<string name="mgdl">mg/dL</string>
|
<string name="mgdl">mg/dL</string>
|
||||||
<string name="mmol">mmol/L</string>
|
<string name="mmol">mmol/L</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Intervalo Alvo:</string>
|
<string name="target_range">Intervalo Alvo:</string>
|
||||||
<string name="prefs_range_title">Intervalo para visualização</string>
|
<string name="prefs_range_title">Intervalo para visualização</string>
|
||||||
<string name="prefs_range_summary">Marca Alto e Baixo para os gráficos em Sumário e Smartwatch</string>
|
<string name="prefs_range_summary">Marca Alto e Baixo para os gráficos em Sumário e Smartwatch</string>
|
||||||
|
@ -1376,7 +1383,25 @@
|
||||||
<string name="format_percent">%1$d%%</string>
|
<string name="format_percent">%1$d%%</string>
|
||||||
<string name="boluswizard">Assistente de Bólus</string>
|
<string name="boluswizard">Assistente de Bólus</string>
|
||||||
<string name="unit_minute_short">min</string>
|
<string name="unit_minute_short">min</string>
|
||||||
|
<string name="profile_name">Nome do Perfil:</string>
|
||||||
|
<string name="selected_profile">Seleccionado:</string>
|
||||||
|
<string name="unitsnosemicolon">Unidades</string>
|
||||||
|
<string name="doyouwantswitchprofile">Deseja mudar de perfil e descartar as alterações feitas no perfil actual?</string>
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">Ligado</string>
|
<string name="common_on">Ligado</string>
|
||||||
<string name="common_off">Desligado</string>
|
<string name="common_off">Desligado</string>
|
||||||
|
<string name="objectives_button_unfinish">Limpar terminado</string>
|
||||||
|
<string name="objectives_button_unstart">Limpar iniciado</string>
|
||||||
|
<string name="timedetection">Detecção de tempo</string>
|
||||||
|
<string name="nopumpselected">Nenhuma bomba seleccionada</string>
|
||||||
|
<string name="setupwizard_units_prompt">Seleccione as unidades em que deseja exibir os valores</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Carregar as alterações do perfil local para NS</string>
|
||||||
|
<string name="dia_short">DIA</string>
|
||||||
|
<string name="ic_short">IC</string>
|
||||||
|
<string name="isf_short">FSI</string>
|
||||||
|
<string name="target_short">ALV</string>
|
||||||
|
<string name="clone_label">Clone</string>
|
||||||
|
<string name="deletecurrentprofile">Eliminar perfil actual?</string>
|
||||||
|
<string name="copytolocalprofile">Criar novo perfil local a partir desta troca de perfil?</string>
|
||||||
|
<string name="profilenamecontainsdot">Nome do perfil contém pontos.\nIsso não é suportado pelo NS.\nPerfil não é enviado para o NS.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -360,10 +360,8 @@
|
||||||
<string name="button1">Buton 1</string>
|
<string name="button1">Buton 1</string>
|
||||||
<string name="button2">Buton 2</string>
|
<string name="button2">Buton 2</string>
|
||||||
<string name="button3">Buton 3</string>
|
<string name="button3">Buton 3</string>
|
||||||
<string name="units">Unități:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Intervalul țintă:</string>
|
<string name="target_range">Intervalul țintă:</string>
|
||||||
<string name="prefs_range_title">Intervalul pentru vizualizare</string>
|
<string name="prefs_range_title">Intervalul pentru vizualizare</string>
|
||||||
<string name="prefs_range_summary">Valoarea maximă și minimă pentru graficele din vizualizare și pentru smartwatch</string>
|
<string name="prefs_range_summary">Valoarea maximă și minimă pentru graficele din vizualizare și pentru smartwatch</string>
|
||||||
|
|
|
@ -376,10 +376,8 @@
|
||||||
<string name="button1">кнопка 1</string>
|
<string name="button1">кнопка 1</string>
|
||||||
<string name="button2">кнопка 2</string>
|
<string name="button2">кнопка 2</string>
|
||||||
<string name="button3">кнопка 3</string>
|
<string name="button3">кнопка 3</string>
|
||||||
<string name="units">единицы измерения:</string>
|
|
||||||
<string name="mgdl">мг/дл</string>
|
<string name="mgdl">мг/дл</string>
|
||||||
<string name="mmol">ммоль/л</string>
|
<string name="mmol">ммоль/л</string>
|
||||||
<string name="dia">Время действия инсулина DIA:</string>
|
|
||||||
<string name="target_range">целевой диапазон</string>
|
<string name="target_range">целевой диапазон</string>
|
||||||
<string name="prefs_range_title">диапазон для визуализации</string>
|
<string name="prefs_range_title">диапазон для визуализации</string>
|
||||||
<string name="prefs_range_summary">Нижняя и верхняя граница диаграммы в отчетах и Smartwatch</string>
|
<string name="prefs_range_summary">Нижняя и верхняя граница диаграммы в отчетах и Smartwatch</string>
|
||||||
|
@ -1396,4 +1394,8 @@ Context | Edit Context</string>
|
||||||
<string name="format_carbs">%1$d гр</string>
|
<string name="format_carbs">%1$d гр</string>
|
||||||
<string name="common_on">Вкл.</string>
|
<string name="common_on">Вкл.</string>
|
||||||
<string name="common_off">Выкл.</string>
|
<string name="common_off">Выкл.</string>
|
||||||
|
<string name="objectives_button_unfinish">Очистить завершенные</string>
|
||||||
|
<string name="objectives_button_unstart">Очистить начатые</string>
|
||||||
|
<string name="timedetection">Определение времени</string>
|
||||||
|
<string name="doyouwantresetstart">Хотите сбросить начатую цель? Можете потерять уже достигнутое.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -376,10 +376,11 @@
|
||||||
<string name="button1">Tlačidlo 1</string>
|
<string name="button1">Tlačidlo 1</string>
|
||||||
<string name="button2">Tlačidlo 2</string>
|
<string name="button2">Tlačidlo 2</string>
|
||||||
<string name="button3">Tlačidlo 3</string>
|
<string name="button3">Tlačidlo 3</string>
|
||||||
<string name="units">Jednotky:</string>
|
<string name="units_colon">Jednotky:</string>
|
||||||
|
<string name="units">Jednotky</string>
|
||||||
<string name="mgdl">mg/dL</string>
|
<string name="mgdl">mg/dL</string>
|
||||||
<string name="mmol">mmol/L</string>
|
<string name="mmol">mmol/L</string>
|
||||||
<string name="dia">DIA:</string>
|
<string name="dia">DIA</string>
|
||||||
<string name="target_range">Cieľový rozsah:</string>
|
<string name="target_range">Cieľový rozsah:</string>
|
||||||
<string name="prefs_range_title">Rozsah pre zobrazenie</string>
|
<string name="prefs_range_title">Rozsah pre zobrazenie</string>
|
||||||
<string name="prefs_range_summary">Značka vysokej a nízkej hodnoty v prehľade a na hodinkách Wear</string>
|
<string name="prefs_range_summary">Značka vysokej a nízkej hodnoty v prehľade a na hodinkách Wear</string>
|
||||||
|
@ -521,7 +522,7 @@
|
||||||
<string name="child">Dieťa</string>
|
<string name="child">Dieťa</string>
|
||||||
<string name="teenage">Dospievajúci</string>
|
<string name="teenage">Dospievajúci</string>
|
||||||
<string name="adult">Dospelý</string>
|
<string name="adult">Dospelý</string>
|
||||||
<string name="resistantadult">Dospelý z nízkou citlivosťou</string>
|
<string name="resistantadult">Dospelý s nízkou citlivosťou</string>
|
||||||
<string name="patientage_summary">Vyberte vek pacienta pre nastavenie bezpečnostných limitov</string>
|
<string name="patientage_summary">Vyberte vek pacienta pre nastavenie bezpečnostných limitov</string>
|
||||||
<string name="Glimp">Glimp</string>
|
<string name="Glimp">Glimp</string>
|
||||||
<string name="needwhitelisting">%1$s potrebuje vypnúť optimalizáciu batérie pre optimálny výkon</string>
|
<string name="needwhitelisting">%1$s potrebuje vypnúť optimalizáciu batérie pre optimálny výkon</string>
|
||||||
|
@ -977,7 +978,7 @@
|
||||||
<string name="option_off">VYP</string>
|
<string name="option_off">VYP</string>
|
||||||
<string name="open_navigation">Otvoriť Menu</string>
|
<string name="open_navigation">Otvoriť Menu</string>
|
||||||
<string name="close_navigation">Zavrieť Menu</string>
|
<string name="close_navigation">Zavrieť Menu</string>
|
||||||
<string name="nav_plugin_preferences">Nastavenie modulov</string>
|
<string name="nav_plugin_preferences">Nastavenie modulu</string>
|
||||||
<string name="completed_well_done">Hotovo, gratulujeme!</string>
|
<string name="completed_well_done">Hotovo, gratulujeme!</string>
|
||||||
<string name="not_completed_yet">Nedokončené</string>
|
<string name="not_completed_yet">Nedokončené</string>
|
||||||
<string name="time_elapsed">Uplynutý čas</string>
|
<string name="time_elapsed">Uplynutý čas</string>
|
||||||
|
@ -1391,7 +1392,29 @@
|
||||||
<string name="format_percent">%1$d%%</string>
|
<string name="format_percent">%1$d%%</string>
|
||||||
<string name="boluswizard">Bolusová kalkulačka</string>
|
<string name="boluswizard">Bolusová kalkulačka</string>
|
||||||
<string name="unit_minute_short">min</string>
|
<string name="unit_minute_short">min</string>
|
||||||
|
<string name="profile_name">Názov profilu:</string>
|
||||||
|
<string name="selected_profile">Vybrané:</string>
|
||||||
|
<string name="unitsnosemicolon">Jednotky</string>
|
||||||
|
<string name="doyouwantswitchprofile">Chcete prepnúť profil a zahodiť zmeny vykonané v aktuálnom profile?</string>
|
||||||
<string name="format_carbs">%1$dg</string>
|
<string name="format_carbs">%1$dg</string>
|
||||||
<string name="common_on">ZAP</string>
|
<string name="common_on">ZAP</string>
|
||||||
<string name="common_off">VYP</string>
|
<string name="common_off">VYP</string>
|
||||||
|
<string name="objectives_button_unfinish">Vymazanie dokončené</string>
|
||||||
|
<string name="objectives_button_unstart">Vymazanie začaté</string>
|
||||||
|
<string name="timedetection">Detekcia času</string>
|
||||||
|
<string name="doyouwantresetstart">Chcete resetovať začiatok cieľa? Môžete prísť o svoj pokrok.</string>
|
||||||
|
<string name="nopumpselected">Nie je vybraná žiadna pumpa</string>
|
||||||
|
<string name="setupwizard_units_prompt">Vyberte jednotky, v ktorých chcete zobraziť hodnoty</string>
|
||||||
|
<string name="ns_ploadlocalprofile">Odoslať zmeny lokálneho profilu do NS</string>
|
||||||
|
<string name="dia_short">Doba pôsobenia inzulínu</string>
|
||||||
|
<string name="ic_short">I:C</string>
|
||||||
|
<string name="isf_short">ISF</string>
|
||||||
|
<string name="target_short">CIEĽ</string>
|
||||||
|
<string name="clone_label">Klonovať</string>
|
||||||
|
<string name="saveorresetchangesfirst">Najskôr uložte, alebo resetujte aktuálne zmeny</string>
|
||||||
|
<string name="deletecurrentprofile">Zmazať aktuálny profil?</string>
|
||||||
|
<string name="copytolocalprofile">Chcete vytvoriť nový lokálny profil z tohto prepnutia profilu?</string>
|
||||||
|
<string name="profilenamecontainsdot">Názov profilu obsahuje bodky.\nToto nie je podporované v NS.\nProfil nebude prenesený do NS.</string>
|
||||||
|
<string name="low_mark_comment">Spodná hodnota v oblasti cieľového rozsahu (iba zobrazovanie)</string>
|
||||||
|
<string name="high_mark_comment">Horná hodnota v oblasti cieľového rozsahu (iba zobrazovanie)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -377,10 +377,8 @@ Eversense-appen.</string>
|
||||||
<string name="button1">Knapp 1</string>
|
<string name="button1">Knapp 1</string>
|
||||||
<string name="button2">Knapp 2</string>
|
<string name="button2">Knapp 2</string>
|
||||||
<string name="button3">Knapp 3</string>
|
<string name="button3">Knapp 3</string>
|
||||||
<string name="units">Enheter:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Målområde:</string>
|
<string name="target_range">Målområde:</string>
|
||||||
<string name="prefs_range_title">Gränsvärden för visualisering</string>
|
<string name="prefs_range_title">Gränsvärden för visualisering</string>
|
||||||
<string name="prefs_range_summary">Högt och lågt värde för grafen i Översikt och i klockan</string>
|
<string name="prefs_range_summary">Högt och lågt värde för grafen i Översikt och i klockan</string>
|
||||||
|
|
|
@ -333,10 +333,8 @@
|
||||||
<string name="button1">Düğme 1</string>
|
<string name="button1">Düğme 1</string>
|
||||||
<string name="button2">Düğme 2</string>
|
<string name="button2">Düğme 2</string>
|
||||||
<string name="button3">Düğme 3</string>
|
<string name="button3">Düğme 3</string>
|
||||||
<string name="units">Birim:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">Hedef aralığı:</string>
|
<string name="target_range">Hedef aralığı:</string>
|
||||||
<string name="prefs_range_title">Görselleştirme Aralığı</string>
|
<string name="prefs_range_title">Görselleştirme Aralığı</string>
|
||||||
<string name="prefs_range_summary">Genel bakış ve akıllı saat göstergesi için yüksek ve düşük değerler</string>
|
<string name="prefs_range_summary">Genel bakış ve akıllı saat göstergesi için yüksek ve düşük değerler</string>
|
||||||
|
|
|
@ -357,10 +357,8 @@
|
||||||
<string name="button1">按钮1</string>
|
<string name="button1">按钮1</string>
|
||||||
<string name="button2">按钮2</string>
|
<string name="button2">按钮2</string>
|
||||||
<string name="button3">按钮3</string>
|
<string name="button3">按钮3</string>
|
||||||
<string name="units">单位:</string>
|
|
||||||
<string name="mgdl">mg/dl</string>
|
<string name="mgdl">mg/dl</string>
|
||||||
<string name="mmol">mmol/l</string>
|
<string name="mmol">mmol/l</string>
|
||||||
<string name="dia">DIA:</string>
|
|
||||||
<string name="target_range">目标范围:</string>
|
<string name="target_range">目标范围:</string>
|
||||||
<string name="prefs_range_title">可视化范围</string>
|
<string name="prefs_range_title">可视化范围</string>
|
||||||
<string name="prefs_range_summary">在智能手表上的图表上的高值和低值标记</string>
|
<string name="prefs_range_summary">在智能手表上的图表上的高值和低值标记</string>
|
||||||
|
|
|
@ -1663,5 +1663,6 @@
|
||||||
<string name="profilenamecontainsdot">Profile name contains dots.\nThis is not supported by NS.\nProfile is not uploaded to NS.</string>
|
<string name="profilenamecontainsdot">Profile name contains dots.\nThis is not supported by NS.\nProfile is not uploaded to NS.</string>
|
||||||
<string name="low_mark_comment">Lower value of in range area (display only)</string>
|
<string name="low_mark_comment">Lower value of in range area (display only)</string>
|
||||||
<string name="high_mark_comment">Higher value of in range area (display only)</string>
|
<string name="high_mark_comment">Higher value of in range area (display only)</string>
|
||||||
|
<string name="reorder_label">Reorder</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
package info.nightscout.androidaps.db;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import info.AAPSMocker;
|
||||||
|
import info.nightscout.androidaps.Constants;
|
||||||
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
import info.nightscout.androidaps.logging.L;
|
||||||
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus;
|
||||||
|
import info.nightscout.androidaps.utils.SP;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@RunWith(PowerMockRunner.class)
|
||||||
|
@PrepareForTest({MainApp.class, Logger.class, L.class, SP.class, GlucoseStatus.class})
|
||||||
|
public class BgReadingTest {
|
||||||
|
private BgReading bgReading = new BgReading();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void valueToUnits() {
|
||||||
|
bgReading.value = 18;
|
||||||
|
assertEquals(18, bgReading.valueToUnits(Constants.MGDL) * 1, 0.01d);
|
||||||
|
assertEquals(1, bgReading.valueToUnits(Constants.MMOL) * 1, 0.01d);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void directionToSymbol() {
|
||||||
|
bgReading = new BgReading();
|
||||||
|
bgReading.direction = "DoubleDown";
|
||||||
|
assertEquals("\u21ca", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "SingleDown";
|
||||||
|
assertEquals("\u2193", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "FortyFiveDown";
|
||||||
|
assertEquals("\u2198", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "Flat";
|
||||||
|
assertEquals("\u2192", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "FortyFiveUp";
|
||||||
|
assertEquals("\u2197", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "SingleUp";
|
||||||
|
assertEquals("\u2191", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "DoubleUp";
|
||||||
|
assertEquals("\u21c8", bgReading.directionToSymbol());
|
||||||
|
bgReading.direction = "OUT OF RANGE";
|
||||||
|
assertEquals("??", bgReading.directionToSymbol());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dateTest() {
|
||||||
|
bgReading = new BgReading();
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
bgReading.date = now;
|
||||||
|
Date nowDate = new Date(now);
|
||||||
|
assertEquals(now, bgReading.date(now).date);
|
||||||
|
assertEquals(now, bgReading.date(nowDate).date);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void valueTest() {
|
||||||
|
bgReading = new BgReading();
|
||||||
|
double valueToSet = 81; // 4.5 mmol
|
||||||
|
assertEquals(81d, bgReading.value(valueToSet).value, 0.01d);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void copyFromTest() {
|
||||||
|
bgReading = new BgReading();
|
||||||
|
BgReading copy = new BgReading();
|
||||||
|
bgReading.value = 81;
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
bgReading.date = now;
|
||||||
|
copy.date = now;
|
||||||
|
|
||||||
|
copy.copyFrom(bgReading);
|
||||||
|
|
||||||
|
assertEquals(81, copy.value, 0.1d);
|
||||||
|
assertEquals(now, copy.date);
|
||||||
|
assertEquals(bgReading.directionToSymbol(), copy.directionToSymbol());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isEqualTest() {
|
||||||
|
bgReading = new BgReading();
|
||||||
|
BgReading copy = new BgReading();
|
||||||
|
bgReading.value = 81;
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
bgReading.date = now;
|
||||||
|
copy.date = now;
|
||||||
|
|
||||||
|
copy.copyFrom(bgReading);
|
||||||
|
|
||||||
|
assertTrue(copy.isEqual(bgReading));
|
||||||
|
assertFalse(copy.isEqual(new BgReading()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void calculateDirection() {
|
||||||
|
List<BgReading> bgReadingsList = null;
|
||||||
|
AAPSMocker.mockDatabaseHelper();
|
||||||
|
|
||||||
|
when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList);
|
||||||
|
assertEquals("NONE", bgReading.calculateDirection());
|
||||||
|
setReadings(72,0);
|
||||||
|
assertEquals("DoubleUp", bgReading.calculateDirection());
|
||||||
|
setReadings(76,60);
|
||||||
|
assertEquals("SingleUp", bgReading.calculateDirection());
|
||||||
|
setReadings(74,65);
|
||||||
|
assertEquals("FortyFiveUp", bgReading.calculateDirection());
|
||||||
|
setReadings(72,72);
|
||||||
|
assertEquals("Flat", bgReading.calculateDirection());
|
||||||
|
setReadings(0,72);
|
||||||
|
assertEquals("DoubleDown", bgReading.calculateDirection());
|
||||||
|
setReadings(60,76);
|
||||||
|
assertEquals("SingleDown", bgReading.calculateDirection());
|
||||||
|
setReadings(65,74);
|
||||||
|
assertEquals("FortyFiveDown", bgReading.calculateDirection());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void prepareMock() {
|
||||||
|
AAPSMocker.mockMainApp();
|
||||||
|
AAPSMocker.mockApplicationContext();
|
||||||
|
AAPSMocker.mockSP();
|
||||||
|
AAPSMocker.mockL();
|
||||||
|
AAPSMocker.mockDatabaseHelper();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadings(int current_value, int previous_value){
|
||||||
|
BgReading now = new BgReading();
|
||||||
|
now.value = current_value;
|
||||||
|
now.date = System.currentTimeMillis();
|
||||||
|
BgReading previous = new BgReading();
|
||||||
|
previous.value = previous_value;
|
||||||
|
previous.date = System.currentTimeMillis() - ( 6 * 60 * 1000L);
|
||||||
|
List<BgReading> bgReadings = new ArrayList() {{
|
||||||
|
add(now);
|
||||||
|
add(previous);
|
||||||
|
}};
|
||||||
|
when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadings);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +1,22 @@
|
||||||
package info.nightscout.androidaps.data;
|
package info.nightscout.androidaps.data;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
import androidx.core.app.NotificationCompat;
|
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.core.app.NotificationCompat;
|
||||||
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import com.google.android.gms.common.ConnectionResult;
|
import com.google.android.gms.common.ConnectionResult;
|
||||||
import com.google.android.gms.common.api.GoogleApiClient;
|
import com.google.android.gms.common.api.GoogleApiClient;
|
||||||
|
@ -36,8 +34,11 @@ import com.google.android.gms.wearable.NodeApi;
|
||||||
import com.google.android.gms.wearable.Wearable;
|
import com.google.android.gms.wearable.Wearable;
|
||||||
import com.google.android.gms.wearable.WearableListenerService;
|
import com.google.android.gms.wearable.WearableListenerService;
|
||||||
|
|
||||||
import info.nightscout.androidaps.interaction.AAPSPreferences;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.interaction.AAPSPreferences;
|
||||||
import info.nightscout.androidaps.interaction.actions.AcceptActivity;
|
import info.nightscout.androidaps.interaction.actions.AcceptActivity;
|
||||||
import info.nightscout.androidaps.interaction.actions.CPPActivity;
|
import info.nightscout.androidaps.interaction.actions.CPPActivity;
|
||||||
import info.nightscout.androidaps.interaction.utils.Persistence;
|
import info.nightscout.androidaps.interaction.utils.Persistence;
|
||||||
|
@ -79,6 +80,7 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
||||||
|
|
||||||
|
|
||||||
private static final String ACTION_RESEND_BULK = "com.dexdrip.stephenblack.nightwatch.RESEND_BULK_DATA";
|
private static final String ACTION_RESEND_BULK = "com.dexdrip.stephenblack.nightwatch.RESEND_BULK_DATA";
|
||||||
|
private static final String AAPS_NOTIFY_CHANNEL_ID = "AndroidAPS-Openloop";
|
||||||
|
|
||||||
GoogleApiClient googleApiClient;
|
GoogleApiClient googleApiClient;
|
||||||
private long lastRequest = 0;
|
private long lastRequest = 0;
|
||||||
|
@ -552,13 +554,29 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyChangeRequest(String title, String message, String actionstring) {
|
private void notifyChangeRequest(String title, String message, String actionstring) {
|
||||||
|
// Create the NotificationChannel, but only on API 26+ because
|
||||||
|
// the NotificationChannel class is new and not in the support library
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
CharSequence name = "AAPS Open Loop";
|
||||||
|
String description = "Open Loop request notiffication";//getString(R.string.channel_description);
|
||||||
|
NotificationChannel channel = new NotificationChannel(AAPS_NOTIFY_CHANNEL_ID, name, NotificationManager.IMPORTANCE_HIGH);
|
||||||
|
channel.setDescription(description);
|
||||||
|
channel.enableVibration(true);
|
||||||
|
|
||||||
Notification.Builder builder =
|
// Register the channel with the system; you can't change the importance
|
||||||
new Notification.Builder(this); //,"AndroidAPS-Openloop");
|
// or other notification behaviors after this
|
||||||
builder.setSmallIcon(R.drawable.notif_icon)
|
NotificationManager notificationManager = getSystemService(NotificationManager.class);
|
||||||
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationCompat.Builder builder =
|
||||||
|
new NotificationCompat.Builder(this, AAPS_NOTIFY_CHANNEL_ID);
|
||||||
|
|
||||||
|
builder = builder.setSmallIcon(R.drawable.notif_icon)
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
.setContentText(message)
|
.setContentText(message)
|
||||||
.setPriority(Notification.PRIORITY_HIGH);
|
.setPriority(Notification.PRIORITY_HIGH)
|
||||||
|
.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
|
||||||
|
|
||||||
// Creates an explicit intent for an Activity in your app
|
// Creates an explicit intent for an Activity in your app
|
||||||
Intent intent = new Intent(this, AcceptActivity.class);
|
Intent intent = new Intent(this, AcceptActivity.class);
|
||||||
|
@ -571,8 +589,8 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
||||||
|
|
||||||
PendingIntent resultPendingIntent =
|
PendingIntent resultPendingIntent =
|
||||||
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||||
builder.setContentIntent(resultPendingIntent);
|
|
||||||
builder.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
|
builder = builder.setContentIntent(resultPendingIntent);
|
||||||
|
|
||||||
NotificationManager mNotificationManager =
|
NotificationManager mNotificationManager =
|
||||||
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||||
|
|
|
@ -65,6 +65,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
||||||
public boolean lowResMode = false;
|
public boolean lowResMode = false;
|
||||||
public boolean layoutSet = false;
|
public boolean layoutSet = false;
|
||||||
public boolean bIsRound = false;
|
public boolean bIsRound = false;
|
||||||
|
public boolean dividerMatchesBg = false;
|
||||||
public int pointSize = 2;
|
public int pointSize = 2;
|
||||||
public BgGraphBuilder bgGraphBuilder;
|
public BgGraphBuilder bgGraphBuilder;
|
||||||
public LineChartView chart;
|
public LineChartView chart;
|
||||||
|
@ -480,6 +481,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColor() {
|
public void setColor() {
|
||||||
|
dividerMatchesBg = sharedPrefs.getBoolean("match_divider", false);
|
||||||
if(lowResMode){
|
if(lowResMode){
|
||||||
setColorLowRes();
|
setColorLowRes();
|
||||||
} else if (sharedPrefs.getBoolean("dark", true)) {
|
} else if (sharedPrefs.getBoolean("dark", true)) {
|
||||||
|
|
|
@ -65,7 +65,8 @@ public class Home extends BaseWatchFace {
|
||||||
|
|
||||||
|
|
||||||
protected void setColorDark() {
|
protected void setColorDark() {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView));
|
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_background : R.color.dark_statusView));
|
||||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
if (rawData.sgvLevel == 1) {
|
if (rawData.sgvLevel == 1) {
|
||||||
|
@ -83,18 +84,21 @@ public class Home extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ageLevel == 1) {
|
if (ageLevel == 1) {
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_midColor : R.color.dark_mTimestamp1_home));
|
||||||
} else {
|
} else {
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_midColor : R.color.dark_uploaderBattery));
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||||
}
|
}
|
||||||
|
|
||||||
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home));
|
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_midColor : R.color.dark_mStatus_home));
|
||||||
|
|
||||||
if (chart != null) {
|
if (chart != null) {
|
||||||
highColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor);
|
highColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor);
|
||||||
|
@ -131,7 +135,8 @@ public class Home extends BaseWatchFace {
|
||||||
protected void setColorBright() {
|
protected void setColorBright() {
|
||||||
|
|
||||||
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background));
|
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.light_background : R.color.light_stripe_background));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||||
if (rawData.sgvLevel == 1) {
|
if (rawData.sgvLevel == 1) {
|
||||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||||
|
@ -148,17 +153,17 @@ public class Home extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ageLevel == 1) {
|
if (ageLevel == 1) {
|
||||||
mTimestamp.setTextColor(Color.WHITE);
|
mTimestamp.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
} else {
|
} else {
|
||||||
mTimestamp.setTextColor(Color.RED);
|
mTimestamp.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(Color.WHITE);
|
mUploaderBattery.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(Color.RED);
|
mUploaderBattery.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
mStatus.setTextColor(Color.WHITE);
|
mStatus.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
|
|
||||||
mTime.setTextColor(Color.BLACK);
|
mTime.setTextColor(Color.BLACK);
|
||||||
if (chart != null) {
|
if (chart != null) {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package info.nightscout.androidaps.watchfaces;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import android.support.wearable.watchface.WatchFaceStyle;
|
import android.support.wearable.watchface.WatchFaceStyle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -64,7 +65,14 @@ public class Home2 extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setColorDark() {
|
protected void setColorDark() {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView));
|
@ColorInt final int dividerTxtColor = dividerMatchesBg ?
|
||||||
|
ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor) : Color.BLACK;
|
||||||
|
@ColorInt final int dividerBatteryOkColor = ContextCompat.getColor(getApplicationContext(),
|
||||||
|
dividerMatchesBg ? R.color.dark_midColor : R.color.dark_uploaderBattery);
|
||||||
|
@ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(),
|
||||||
|
dividerMatchesBg ? R.color.dark_background : R.color.dark_statusView);
|
||||||
|
|
||||||
|
mLinearLayout.setBackgroundColor(dividerBgColor);
|
||||||
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
|
@ -96,15 +104,15 @@ public class Home2 extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
mUploaderBattery.setTextColor(dividerBatteryOkColor);
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||||
}
|
}
|
||||||
mRigBattery.setTextColor(Color.BLACK);
|
mRigBattery.setTextColor(dividerTxtColor);
|
||||||
mDelta.setTextColor(Color.BLACK);
|
mDelta.setTextColor(dividerTxtColor);
|
||||||
mAvgDelta.setTextColor(Color.BLACK);
|
mAvgDelta.setTextColor(dividerTxtColor);
|
||||||
mBasalRate.setTextColor(Color.BLACK);
|
mBasalRate.setTextColor(dividerTxtColor);
|
||||||
mBgi.setTextColor(Color.BLACK);
|
mBgi.setTextColor(dividerTxtColor);
|
||||||
|
|
||||||
if (loopLevel == 1) {
|
if (loopLevel == 1) {
|
||||||
mLoop.setBackgroundResource(R.drawable.loop_green_25);
|
mLoop.setBackgroundResource(R.drawable.loop_green_25);
|
||||||
|
@ -125,7 +133,12 @@ public class Home2 extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setColorLowRes() {
|
protected void setColorLowRes() {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView));
|
@ColorInt final int dividerTxtColor = dividerMatchesBg ?
|
||||||
|
ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor) : Color.BLACK;
|
||||||
|
@ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(),
|
||||||
|
dividerMatchesBg ? R.color.dark_background : R.color.dark_statusView);
|
||||||
|
|
||||||
|
mLinearLayout.setBackgroundColor(dividerBgColor);
|
||||||
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
mLoop.setBackgroundResource(R.drawable.loop_grey_25);
|
mLoop.setBackgroundResource(R.drawable.loop_grey_25);
|
||||||
|
@ -133,12 +146,12 @@ public class Home2 extends BaseWatchFace {
|
||||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_Timestamp));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_Timestamp));
|
||||||
mDelta.setTextColor(Color.BLACK);
|
mDelta.setTextColor(dividerTxtColor);
|
||||||
mAvgDelta.setTextColor(Color.BLACK);
|
mAvgDelta.setTextColor(dividerTxtColor);
|
||||||
mRigBattery.setTextColor(Color.BLACK);
|
mRigBattery.setTextColor(dividerTxtColor);
|
||||||
mUploaderBattery.setTextColor(Color.BLACK);
|
mUploaderBattery.setTextColor(dividerTxtColor);
|
||||||
mBasalRate.setTextColor(Color.BLACK);
|
mBasalRate.setTextColor(dividerTxtColor);
|
||||||
mBgi.setTextColor(Color.BLACK);
|
mBgi.setTextColor(dividerTxtColor);
|
||||||
mIOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mIOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mIOB2.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mIOB2.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mCOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mCOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
|
@ -162,7 +175,13 @@ public class Home2 extends BaseWatchFace {
|
||||||
protected void setColorBright() {
|
protected void setColorBright() {
|
||||||
|
|
||||||
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background));
|
|
||||||
|
@ColorInt final int dividerTxtColor = dividerMatchesBg ? Color.BLACK :
|
||||||
|
ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor);
|
||||||
|
@ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(),
|
||||||
|
dividerMatchesBg ? R.color.light_background : R.color.light_stripe_background);
|
||||||
|
|
||||||
|
mLinearLayout.setBackgroundColor(dividerBgColor);
|
||||||
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||||
mTime.setTextColor(Color.BLACK);
|
mTime.setTextColor(Color.BLACK);
|
||||||
|
@ -194,15 +213,15 @@ public class Home2 extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mUploaderBattery.setTextColor(dividerTxtColor);
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(Color.RED);
|
mUploaderBattery.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
mRigBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mRigBattery.setTextColor(dividerTxtColor);
|
||||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mDelta.setTextColor(dividerTxtColor);
|
||||||
mAvgDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mAvgDelta.setTextColor(dividerTxtColor);
|
||||||
mBasalRate.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mBasalRate.setTextColor(dividerTxtColor);
|
||||||
mBgi.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mBgi.setTextColor(dividerTxtColor);
|
||||||
|
|
||||||
if (loopLevel == 1) {
|
if (loopLevel == 1) {
|
||||||
mLoop.setBackgroundResource(R.drawable.loop_green_25);
|
mLoop.setBackgroundResource(R.drawable.loop_green_25);
|
||||||
|
|
|
@ -49,7 +49,8 @@ public class LargeHome extends BaseWatchFace {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setColorDark(){
|
protected void setColorDark(){
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mLinearLayout));
|
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_background : R.color.dark_mLinearLayout));
|
||||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
if (rawData.sgvLevel == 1) {
|
if (rawData.sgvLevel == 1) {
|
||||||
|
@ -67,24 +68,27 @@ public class LargeHome extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ageLevel == 1) {
|
if (ageLevel == 1) {
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_midColor : R.color.dark_mTimestamp1_home));
|
||||||
} else {
|
} else {
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.dark_midColor : R.color.dark_uploaderBattery));
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||||
}
|
}
|
||||||
|
|
||||||
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home));
|
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mStatus_home));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setColorBright() {
|
protected void setColorBright() {
|
||||||
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background));
|
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ?
|
||||||
|
R.color.light_background : R.color.light_stripe_background));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||||
if (rawData.sgvLevel == 1) {
|
if (rawData.sgvLevel == 1) {
|
||||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||||
|
@ -101,21 +105,21 @@ public class LargeHome extends BaseWatchFace {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ageLevel == 1) {
|
if (ageLevel == 1) {
|
||||||
mTimestamp.setTextColor(Color.WHITE);
|
mTimestamp.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
} else {
|
} else {
|
||||||
mTimestamp.setTextColor(Color.RED);
|
mTimestamp.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawData.batteryLevel == 1) {
|
if (rawData.batteryLevel == 1) {
|
||||||
mUploaderBattery.setTextColor(Color.WHITE);
|
mUploaderBattery.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
} else {
|
} else {
|
||||||
mUploaderBattery.setTextColor(Color.RED);
|
mUploaderBattery.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
mStatus.setTextColor(Color.WHITE);
|
mStatus.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE);
|
||||||
mTime.setTextColor(Color.BLACK);
|
mTime.setTextColor(Color.BLACK);
|
||||||
} else {
|
} else {
|
||||||
mRelativeLayout.setBackgroundColor(Color.BLACK);
|
mRelativeLayout.setBackgroundColor(Color.BLACK);
|
||||||
mLinearLayout.setBackgroundColor(Color.LTGRAY);
|
mLinearLayout.setBackgroundColor(dividerMatchesBg ? Color.BLACK : Color.LTGRAY);
|
||||||
if (rawData.sgvLevel == 1) {
|
if (rawData.sgvLevel == 1) {
|
||||||
mSgv.setTextColor(Color.YELLOW);
|
mSgv.setTextColor(Color.YELLOW);
|
||||||
mDirection.setTextColor(Color.YELLOW);
|
mDirection.setTextColor(Color.YELLOW);
|
||||||
|
@ -130,23 +134,23 @@ public class LargeHome extends BaseWatchFace {
|
||||||
mDelta.setTextColor(Color.RED);
|
mDelta.setTextColor(Color.RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
mUploaderBattery.setTextColor(Color.BLACK);
|
mUploaderBattery.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK);
|
||||||
mTimestamp.setTextColor(Color.BLACK);
|
mTimestamp.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK);
|
||||||
mStatus.setTextColor(Color.BLACK);
|
mStatus.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK);
|
||||||
mTime.setTextColor(Color.WHITE);
|
mTime.setTextColor(Color.WHITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setColorLowRes() {
|
protected void setColorLowRes() {
|
||||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mLinearLayout));
|
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_background : R.color.dark_mLinearLayout));
|
||||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
||||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home));
|
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mTimestamp1_home));
|
||||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_uploaderBattery));
|
||||||
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home));
|
mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mStatus_home));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,14 @@
|
||||||
app:wear_iconOff="@drawable/settings_off"
|
app:wear_iconOff="@drawable/settings_off"
|
||||||
app:wear_iconOn="@drawable/settings_on"/>
|
app:wear_iconOn="@drawable/settings_on"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="match_divider"
|
||||||
|
android:summary="Status bar divider background matches watchface background"
|
||||||
|
android:title="Matching divider"
|
||||||
|
app:wear_iconOff="@drawable/settings_off"
|
||||||
|
app:wear_iconOn="@drawable/settings_on"/>
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="3"
|
android:defaultValue="3"
|
||||||
android:entries="@array/chart_timeframe"
|
android:entries="@array/chart_timeframe"
|
||||||
|
|
Loading…
Reference in a new issue