Skip to content

Commit 041244d

Browse files
committed
Update: add notification for update available
1 parent 61ec19d commit 041244d

File tree

6 files changed

+94
-3
lines changed

6 files changed

+94
-3
lines changed

app/src/main/java/com/eveningoutpost/dexdrip/alert/Registry.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.eveningoutpost.dexdrip.alert;
22

3+
import static com.eveningoutpost.dexdrip.utilitymodels.UpdateActivity.AUTO_UPDATE_PREFS_NAME;
4+
35
import android.content.SharedPreferences;
46

57
import com.eveningoutpost.dexdrip.models.UserError.Log;
@@ -36,6 +38,9 @@ public static void refresh() {
3638
if (Pref.getBooleanDefaultFalse("alert_raise_for_sensor_expiry")) {
3739
registry.add(new SensorExpiry());
3840
}
41+
if (Pref.getBoolean(AUTO_UPDATE_PREFS_NAME, true)) {
42+
registry.add(new UpdateAvailable());
43+
}
3944
// addGlucoseAlerts();
4045
// sort();
4146
}

app/src/main/java/com/eveningoutpost/dexdrip/alert/SensorExpiry.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
import static com.eveningoutpost.dexdrip.models.JoH.tsl;
88
import static com.eveningoutpost.dexdrip.utilitymodels.Constants.SENSORY_EXPIRY_NOTIFICATION_ID;
99

10+
import com.eveningoutpost.dexdrip.R;
1011
import com.eveningoutpost.dexdrip.g5model.SensorDays;
1112
import com.eveningoutpost.dexdrip.models.Treatments;
1213
import com.eveningoutpost.dexdrip.models.UserError.Log;
1314
import com.eveningoutpost.dexdrip.utilitymodels.Constants;
15+
import com.eveningoutpost.dexdrip.xdrip;
1416

1517
import lombok.val;
1618

@@ -44,8 +46,8 @@ public boolean activate() {
4446
val expiry = niceTimeScalarNatural(SensorDays.get().getRemainingSensorPeriodInMs(), 1);
4547
val notificationId = SENSORY_EXPIRY_NOTIFICATION_ID;
4648
cancelNotification(notificationId);
47-
val expireMsg = String.format("Sensor will expire in %s", expiry); // TODO i18n and format string
48-
showNotification("Sensor expiring", expireMsg, null, notificationId, null, true, true, null, null, null, true);
49+
val expireMsg = xdrip.gs(R.string.sensor_will_expire_in, expiry);
50+
showNotification(xdrip.gs(R.string.sensor_expiring), expireMsg, null, notificationId, null, true, true, null, null, null, true);
4951
Treatments.create_note("Warning: " + expireMsg, tsl()); // TODO i18n but note classifier also needs updating for that
5052
return true;
5153
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.eveningoutpost.dexdrip.alert;
2+
3+
import static com.eveningoutpost.dexdrip.models.JoH.cancelNotification;
4+
import static com.eveningoutpost.dexdrip.models.JoH.niceTimeScalar;
5+
import static com.eveningoutpost.dexdrip.models.JoH.niceTimeScalarNatural;
6+
import static com.eveningoutpost.dexdrip.models.JoH.showNotification;
7+
import static com.eveningoutpost.dexdrip.models.JoH.tsl;
8+
import static com.eveningoutpost.dexdrip.utilitymodels.Constants.SENSORY_EXPIRY_NOTIFICATION_ID;
9+
import static com.eveningoutpost.dexdrip.utilitymodels.Constants.XDRIP_UPDATE_NOTIFICATION_ID;
10+
import static com.eveningoutpost.dexdrip.utilitymodels.UpdateActivity.AUTO_UPDATE_PREFS_NAME;
11+
12+
import android.app.PendingIntent;
13+
import android.content.Intent;
14+
15+
import com.eveningoutpost.dexdrip.R;
16+
import com.eveningoutpost.dexdrip.g5model.SensorDays;
17+
import com.eveningoutpost.dexdrip.models.JoH;
18+
import com.eveningoutpost.dexdrip.models.Treatments;
19+
import com.eveningoutpost.dexdrip.models.UserError;
20+
import com.eveningoutpost.dexdrip.models.UserError.Log;
21+
import com.eveningoutpost.dexdrip.utilitymodels.Constants;
22+
import com.eveningoutpost.dexdrip.utilitymodels.PersistentStore;
23+
import com.eveningoutpost.dexdrip.utilitymodels.Pref;
24+
import com.eveningoutpost.dexdrip.utilitymodels.UpdateActivity;
25+
import com.eveningoutpost.dexdrip.xdrip;
26+
27+
import lombok.val;
28+
29+
/**
30+
* JamOrHam
31+
* <p>
32+
* Update available alert. Triggers when an update has been flagged as available
33+
*/
34+
35+
public class UpdateAvailable extends BaseAlert {
36+
37+
private static final String TAG = UpdateAvailable.class.getSimpleName();
38+
39+
public static final String XDRIP_UPDATE_NOTIFICATION_PENDING = "xdrip-update-notification-pending";
40+
public static final String XDRIP_UPDATE_RATELIMIT = "xdrip-update-notification-ratelimit";
41+
42+
public UpdateAvailable() {
43+
super("Update Available", When.ChargeChange, When.ScreenOn);
44+
}
45+
46+
@Override
47+
public boolean activate() {
48+
val context = xdrip.getAppContext();
49+
val notificationId = XDRIP_UPDATE_NOTIFICATION_ID;
50+
cancelNotification(notificationId);
51+
52+
val intent = new Intent(context, UpdateActivity.class);
53+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
54+
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
55+
56+
val channel = Pref.getString("update_channel", "beta"); // get the current update channel
57+
showNotification(xdrip.gs(R.string.xdrip_update), xdrip.gs(R.string.a_new_version_on_channel_1_s_is_available, channel), pendingIntent, notificationId, null, true, true, null, null, null, false);
58+
return true;
59+
}
60+
61+
@Override
62+
public boolean isMet() {
63+
return PersistentStore.getBoolean(XDRIP_UPDATE_NOTIFICATION_PENDING, false)
64+
&& Pref.getBoolean(AUTO_UPDATE_PREFS_NAME, true)
65+
&& JoH.pratelimit(XDRIP_UPDATE_RATELIMIT, 86400 * 6); // only once per 6 days
66+
}
67+
68+
}

app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class Constants {
6262
public static final int ZXING_FILE_REQ_CODE = 49375; // This is created by just incrementing the existing camera scan code from the zxing package
6363
public static final int SENSORY_EXPIRY_NOTIFICATION_ID = 2003;
6464
public static final int OUT_OF_RANGE_GLUCOSE_ENTRY_ID = 2004; // Preference setting out of range
65-
65+
public static final int XDRIP_UPDATE_NOTIFICATION_ID = 2005;
6666

6767
// increments from this start number
6868
public static final int INCOMPATIBLE_BASE_ID = 5000;

app/src/main/java/com/eveningoutpost/dexdrip/utilitymodels/UpdateActivity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import okhttp3.Request;
5353
import okhttp3.Response;
5454

55+
import static com.eveningoutpost.dexdrip.alert.UpdateAvailable.XDRIP_UPDATE_NOTIFICATION_PENDING;
56+
import static com.eveningoutpost.dexdrip.utilitymodels.Constants.XDRIP_UPDATE_NOTIFICATION_ID;
5557
import static com.eveningoutpost.dexdrip.utilitymodels.OkHttpWrapper.enableTls12OnPreLollipop;
5658
import static com.eveningoutpost.dexdrip.utilitymodels.PersistentStore.incrementLong;
5759

@@ -170,6 +172,11 @@ public static void checkForAnUpdate(final Context context, final boolean fromUi)
170172
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
171173
context.startActivity(intent);
172174

175+
if (!fromUi) {
176+
// activate the flag for a notification if this was a background check
177+
PersistentStore.setBoolean(XDRIP_UPDATE_NOTIFICATION_PENDING, true);
178+
}
179+
173180
} else {
174181
Log.e(TAG, "Error parsing second line of update reply");
175182
}
@@ -330,6 +337,9 @@ public void run() {
330337
} else {
331338
Log.e(TAG, "Download button pressed but no download URL");
332339
}
340+
341+
PersistentStore.setBoolean(XDRIP_UPDATE_NOTIFICATION_PENDING, false); // clear notification trigger
342+
JoH.cancelNotification(XDRIP_UPDATE_NOTIFICATION_ID);
333343
}
334344

335345
private void viewIntentDownload(final String DOWNLOAD_URL) {

app/src/main/res/values/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1960,4 +1960,10 @@
19601960
<string name="default_xdrip_reminder_sound">Default xDrip+ reminder sound</string>
19611961
<string name="custom_audio_file">Custom Audio file</string>
19621962
<string name="android_ringtone_alarm">Android Ringtone/Alarm</string>
1963+
<string name="first_successful_connection_to_transmitter">"First successful connection to transmitter %1$s"</string>
1964+
<string name="first_successful_connection_to_transmitter_em">"First successful connection to transmitter %1$s with mac %2$s"</string>
1965+
<string name="sensor_expiring">Sensor expiring</string>
1966+
<string name="sensor_will_expire_in">Sensor will expire in %1$s</string>
1967+
<string name="xdrip_update">xDrip+ Update</string>
1968+
<string name="a_new_version_on_channel_1_s_is_available">A new version on channel %1$s is available</string>
19631969
</resources>

0 commit comments

Comments
 (0)