diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/StartNewSensor.java b/app/src/main/java/com/eveningoutpost/dexdrip/StartNewSensor.java
index 668716b267..7ceaf3f5df 100644
--- a/app/src/main/java/com/eveningoutpost/dexdrip/StartNewSensor.java
+++ b/app/src/main/java/com/eveningoutpost/dexdrip/StartNewSensor.java
@@ -1,5 +1,10 @@
package com.eveningoutpost.dexdrip;
+import static com.eveningoutpost.dexdrip.Home.startWatchUpdaterService;
+import static com.eveningoutpost.dexdrip.Models.BgReading.AGE_ADJUSTMENT_TIME;
+import static com.eveningoutpost.dexdrip.Services.Ob1G5CollectionService.getTransmitterID;
+import static com.eveningoutpost.dexdrip.xdrip.gs;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
@@ -13,6 +18,8 @@
import android.widget.Toast;
import com.eveningoutpost.dexdrip.G5Model.DexSyncKeeper;
+import com.eveningoutpost.dexdrip.G5Model.DexTimeKeeper;
+import com.eveningoutpost.dexdrip.G5Model.FirmwareCapability;
import com.eveningoutpost.dexdrip.G5Model.Ob1G5StateMachine;
import com.eveningoutpost.dexdrip.Models.JoH;
import com.eveningoutpost.dexdrip.Models.Sensor;
@@ -27,6 +34,7 @@
import com.eveningoutpost.dexdrip.profileeditor.ProfileAdapter;
import com.eveningoutpost.dexdrip.profileeditor.TimePickerFragment;
import com.eveningoutpost.dexdrip.ui.dialog.G6CalibrationCodeDialog;
+import com.eveningoutpost.dexdrip.ui.dialog.G6EndOfLifeDialog;
import com.eveningoutpost.dexdrip.utils.ActivityWithMenu;
import com.eveningoutpost.dexdrip.utils.DexCollectionType;
import com.eveningoutpost.dexdrip.utils.LocationHelper;
@@ -36,9 +44,7 @@
import java.util.Date;
import java.util.Locale;
-import static com.eveningoutpost.dexdrip.Home.startWatchUpdaterService;
-import static com.eveningoutpost.dexdrip.Models.BgReading.AGE_ADJUSTMENT_TIME;
-import static com.eveningoutpost.dexdrip.xdrip.gs;
+import lombok.val;
public class StartNewSensor extends ActivityWithMenu {
// public static String menu_name = "Start Sensor";
@@ -164,12 +170,27 @@ public void onTimeUpdated(int newmins) {
timePickerFragment.show(activity.getFragmentManager(), "TimePicker");
}
+ private static final int ABSOLUTE_MAX_AGE_DAYS = 180;
+ private static final int MAX_AGE_DAYS = 100;
+ private static final int MONTH_WARNING_DAYS = 30;
+
private void startSensorOrAskForG6Code() {
final int cap = 20;
if (Ob1G5CollectionService.usingCollector() && Ob1G5StateMachine.usingG6()) {
if (JoH.pratelimit("dex-stop-start", cap)) {
JoH.clearRatelimit("dex-stop-start");
- G6CalibrationCodeDialog.ask(this, this::startSensorAndSetIntent);
+ val transmitterAgeInDays = DexTimeKeeper.getTransmitterAgeInDays(getTransmitterID());
+ val modified = FirmwareCapability.isTransmitterModified(getTransmitterID());
+ val endOfLife = transmitterAgeInDays >= ABSOLUTE_MAX_AGE_DAYS || (!modified && transmitterAgeInDays >= MAX_AGE_DAYS);
+ if (transmitterAgeInDays < MAX_AGE_DAYS - MONTH_WARNING_DAYS
+ || (modified && transmitterAgeInDays < ABSOLUTE_MAX_AGE_DAYS - MONTH_WARNING_DAYS)) {
+ // More than 30 days left of starting sensors - just ask for code
+ G6CalibrationCodeDialog.ask(this, this::startSensorAndSetIntent);
+ } else { // 30 or less days left of starting sensors - give additional message first
+ G6EndOfLifeDialog.show(activity, () ->
+ G6CalibrationCodeDialog.ask(this, this::startSensorAndSetIntent),
+ endOfLife, modified, transmitterAgeInDays);
+ }
} else {
JoH.static_toast_long(String.format(Locale.ENGLISH, getString(R.string.please_wait_seconds_before_trying_to_start_sensor), cap));
}
diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/ui/dialog/G6EndOfLifeDialog.java b/app/src/main/java/com/eveningoutpost/dexdrip/ui/dialog/G6EndOfLifeDialog.java
new file mode 100644
index 0000000000..2145ada377
--- /dev/null
+++ b/app/src/main/java/com/eveningoutpost/dexdrip/ui/dialog/G6EndOfLifeDialog.java
@@ -0,0 +1,49 @@
+package com.eveningoutpost.dexdrip.ui.dialog;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+
+import com.eveningoutpost.dexdrip.R;
+
+// Navid200
+
+public class G6EndOfLifeDialog {
+
+ private static final int MAX_START_DAYS = 99;
+
+ // Inform the user that Transmitter Days is approaching maximum, or that it has passed.
+ public static void show(final Activity activity, final Runnable runnable, final boolean endOfLife, final boolean modified, final int currentDays) {
+ String title = activity.getString(R.string.reminder);
+ String message;
+ if (endOfLife) { // Cannot start sensors
+ title = activity.getString(R.string.notification);
+ message = activity.getString(R.string.TX_EOL_notification);
+ } else { // Approaching end of life
+ if (modified) { // modified transmitter
+ message = activity.getString(R.string.TX_EOL_reminder_mod, currentDays);
+ } else {
+ message = activity.getString(R.string.TX_EOL_reminder, MAX_START_DAYS, currentDays);
+ }
+ }
+ final android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(activity)
+ .setTitle(title)
+ .setMessage(message);
+
+ builder.setPositiveButton(R.string.proceed, (dialog, which) -> runnable.run());
+
+ if (endOfLife) {
+ builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.cancel());
+ }
+
+ final AlertDialog dialog = builder.create();
+ // apparently possible dialog is already showing, probably due to hash code
+ try {
+ if (dialog.isShowing()) {
+ dialog.dismiss();
+ }
+ } catch (Exception e) {
+ //
+ }
+ dialog.show();
+ }
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8aaabf4faa..79e6eb2bc6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1707,6 +1707,12 @@
Source Wizard Button
Please wait %d seconds before trying to start sensor
please update OOP2 or move to calibrate based on raw mode
+ Reminder
+ Notification
+ When Transmitter Days on system status page reaches %1$d, it will be the last opportunity to start a sensor on this transmitter. Currently at %2$d days.
+ If you proceed and start sensor, it is very likely it will fail because of Transmitter Days having reached maximum.
+ Transmitter Days is approaching maximum. Soon, you will not be able to start sensors on this transmitter. Currently at %d days.
+ Proceed
Special Pairing Workaround
Save Power
Reduce battery and network overhead by using batch processing and excluding unnecessary data