diff --git a/app/prod/release/output-metadata.json b/app/prod/release/output-metadata.json new file mode 100644 index 0000000000..005a7be332 --- /dev/null +++ b/app/prod/release/output-metadata.json @@ -0,0 +1,20 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.eveningoutpost.dexdrip", + "variantName": "prodRelease", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1603091400, + "versionName": "11710ebe5-Navid_2024_10_15b-2024.10.30", + "outputFile": "app-prod-release.apk" + } + ], + "elementType": "File" +} \ No newline at end of file diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/IdempotentMigrations.java b/app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/IdempotentMigrations.java index 65c0c5776a..693035bc90 100644 --- a/app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/IdempotentMigrations.java +++ b/app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/IdempotentMigrations.java @@ -1,5 +1,7 @@ package com.eveningoutpost.dexdrip.utilitymodels; +import static com.eveningoutpost.dexdrip.utils.Preferences.handleUnitsChange; + import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; @@ -60,6 +62,9 @@ public void performAll() { IncompatibleApps.notifyAboutIncompatibleApps(); CompatibleApps.notifyAboutCompatibleApps(); legacySettingsMoveLanguageFromNoToNb(); + if (!Pref.getString("units", "mgdl").equals("mgdl")) { // Only if the selected unit is mmol/L + handleUnitsChange(null, "mmol", null); // Trigger the correction of values (defaults) if needed + } } diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/utils/Preferences.java b/app/src/main/java/com/eveningoutpost/dexdrip/utils/Preferences.java index e892922fc1..380a6b2987 100644 --- a/app/src/main/java/com/eveningoutpost/dexdrip/utils/Preferences.java +++ b/app/src/main/java/com/eveningoutpost/dexdrip/utils/Preferences.java @@ -1,5 +1,7 @@ package com.eveningoutpost.dexdrip.utils; +import static com.eveningoutpost.dexdrip.EditAlertActivity.unitsConvert2Disp; +import static com.eveningoutpost.dexdrip.models.JoH.tolerantParseDouble; import static com.eveningoutpost.dexdrip.utils.DexCollectionType.getBestCollectorHardwareName; import static com.eveningoutpost.dexdrip.xdrip.gs; @@ -188,6 +190,8 @@ public class Preferences extends BasePreferenceActivity implements SearchPrefere private volatile String scanFormat = null; // The format of the scan private volatile String scanContents = null; // Text content of the scan coming either from camera or file private volatile byte[] scanRawBytes = null; // Raw bytes of the scan + private static final double MIN_GLUCOSE_INPUT = 40; // The smallest input glucose value xDrip accepts + private static final double MAX_GLUCOSE_INPUT = 400; // The largest input glucose value xDrip accepts private void refreshFragments() { refreshFragments(null); @@ -755,6 +759,11 @@ public boolean onPreferenceChange(Preference preference, Object value) { String stringValue = value.toString(); if (isNumeric(stringValue)) { final boolean domgdl = Pref.getString("units", "mgdl").equals("mgdl"); // Identify which unit is chosen + double submissionMgdl = domgdl ? tolerantParseDouble(stringValue) : tolerantParseDouble(stringValue) * Constants.MMOLL_TO_MGDL; + if (submissionMgdl > MAX_GLUCOSE_INPUT || submissionMgdl < MIN_GLUCOSE_INPUT) { + JoH.static_toast_long(xdrip.gs(R.string.the_value_must_be_between_space) + unitsConvert2Disp(domgdl, MIN_GLUCOSE_INPUT) + xdrip.gs(R.string.space_and_space) + unitsConvert2Disp(domgdl, MAX_GLUCOSE_INPUT)); + return false; + } preference.setSummary(stringValue + " " + (domgdl ? "mg/dl" : "mmol/l")); // Set the summary to show the value followed by the chosen unit return true; } @@ -1009,7 +1018,11 @@ private static void bindPreferenceSummaryToValueAndEnsureNumeric(Preference pref .getString(preference.getKey(), "")); } - private static void bindPreferenceSummaryToUnitizedValueAndEnsureNumeric(Preference preference) { // Use this to show the value as well as the corresponding glucose unit as the summary + private static void bindPreferenceSummaryToUnitizedValueAndEnsureNumeric(Preference preference) { // Use this to: + // 1- show the value as summary; + // 2- amend the value in summary with the corresponding glucose unit; + // 3- reject inputs outside the 40-400 mg/dL range. + preference.setOnPreferenceChangeListener(sBindNumericUnitizedPreferenceSummaryToValueListener); sBindNumericUnitizedPreferenceSummaryToValueListener.onPreferenceChange(preference, PreferenceManager diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 124349aa02..90b7486e61 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -243,6 +243,8 @@ Persistent High Alert Enable Threshold + "The value must be between " + " and " Forecasted Low Alert Extrapolate data to try to predict lows Alarm at Forecasted Low mins