Skip to content
Snippets Groups Projects
Commit 73b9d2dd authored by Volker Richert's avatar Volker Richert
Browse files

extact uploadmanagement

some alarmmanager testing
parent 26c44a24
No related branches found
No related tags found
No related merge requests found
......@@ -83,6 +83,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
private Handler mUiRefreshHandler = new Handler();
private Runnable mUiRefreshRunnable = new RefreshDisplayRunnable();
private Realm mRealm;
private StatusMessageReceiver statusMessageReceiver = new StatusMessageReceiver();
private MedtronicCnlAlarmReceiver medtronicCnlAlarmReceiver = new MedtronicCnlAlarmReceiver();
public static void setActivePumpMac(long pumpMac) {
activePumpMac = pumpMac;
......@@ -106,7 +108,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
}
LocalBroadcastManager.getInstance(this).registerReceiver(
new StatusMessageReceiver(),
statusMessageReceiver,
new IntentFilter(MedtronicCnlIntentService.Constants.ACTION_STATUS_MESSAGE));
LocalBroadcastManager.getInstance(this).registerReceiver(
new RefreshDataReceiver(),
......@@ -217,6 +219,9 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
// setup self handling alarm receiver
medtronicCnlAlarmReceiver.setContext(getBaseContext());
}
@Override
......@@ -287,7 +292,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
}
private void clearLogText() {
mTextViewLog.setText("", BufferType.EDITABLE);
statusMessageReceiver.clearMessages();
//mTextViewLog.setText("", BufferType.EDITABLE);
}
private void startDisplayRefreshLoop() {
......@@ -299,7 +305,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
}
private void startCgmService() {
startCgmService(0L);
startCgmService(System.currentTimeMillis());
}
private void startCgmService(long initialPoll) {
......@@ -309,32 +315,16 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
return;
}
if (initialPoll == 0) {
initialPoll = SystemClock.currentThreadTimeMillis();
}
Log.d(TAG, "startCgmService set to fire at " + new Date(initialPoll));
clearLogText();
//clearLogText();
// Cancel any existing polling.
stopCgmService();
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent receiverIntent = new Intent(this, MedtronicCnlAlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, receiverIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
initialPoll, MedtronicCnlIntentService.POLL_PERIOD_MS, pending);
medtronicCnlAlarmReceiver.setAlarm(initialPoll);
}
private void stopCgmService() {
Log.i(TAG, "stopCgmService called");
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent receiverIntent = new Intent(this, MedtronicCnlAlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, receiverIntent, 0);
alarmManager.cancel(pending);
medtronicCnlAlarmReceiver.cancelAlarm();
}
private void showDisconnectionNotification(String title, String message) {
......@@ -490,7 +480,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
}
public String toString() {
return DateFormat.getTimeInstance(DateFormat.SHORT).format(timestamp) + ": " + message;
return DateFormat.getTimeInstance(DateFormat.MEDIUM).format(timestamp) + ": " + message;
}
}
......@@ -501,7 +491,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
String message = intent.getStringExtra(MedtronicCnlIntentService.Constants.EXTENDED_DATA);
Log.i(TAG, "Message Receiver: " + message);
synchronized (this) {
synchronized (messages) {
while (messages.size() > 8) {
messages.poll();
}
......@@ -517,11 +507,21 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
mTextViewLog.setText(sb.toString(), BufferType.EDITABLE);
}
public void clearMessages() {
synchronized (messages) {
messages.clear();
}
mTextViewLog.setText("", BufferType.EDITABLE);
}
}
private class RefreshDisplayRunnable implements Runnable {
@Override
public void run() {
Log.d(TAG, "NOW " + new Date(System.currentTimeMillis()).toString());
// UI elements - TODO do these need to be members?
TextView textViewBg = (TextView) findViewById(R.id.textview_bg);
TextView textViewBgTime = (TextView) findViewById(R.id.textview_bg_time);
......@@ -628,6 +628,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
long nextPoll = pumpStatusData.getEventDate().getTime() + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS + MedtronicCnlIntentService.POLL_PERIOD_MS;
startCgmService(nextPoll);
Log.d(TAG, "Lokal time " + new Date());
Log.d(TAG, "Last event was " + new Date(pumpStatusData.getEventDate().getTime()));
Log.d(TAG, "Next Poll at " + new Date(nextPoll).toString());
// Delete invalid or old records from Realm
......
package info.nightscout.android.medtronic.service;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.support.v4.content.WakefulBroadcastReceiver;
import android.util.Log;
import java.util.Date;
/**
* Created by lgoedhart on 14/07/2016.
*/
public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
private static final String TAG = MedtronicCnlAlarmReceiver.class.getSimpleName();
private static final int ALARM_ID = 102; // Alarm id
private static PendingIntent pi = null;
private static AlarmManager am = null;
@Override
public void onReceive(final Context context, Intent intent) {
// Start the IntentService
Log.d(TAG, "Received broadcast message");
Log.d(TAG, "Received broadcast message at " + new Date(System.currentTimeMillis()));
Intent service = new Intent(context, MedtronicCnlIntentService.class);
startWakefulService(context, service);
restartAlarm();
}
public void setContext(Context context) {
if (am != null && pi != null) {
// here is an old alarm. So we cancel it before
cancelAlarm();
}
am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MedtronicCnlAlarmReceiver.class);
pi = PendingIntent.getBroadcast(context, ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
// Setting the alarm to call onRecieve every _REFRESH_INTERVAL seconds
public void setAlarm() {
setAlarm(System.currentTimeMillis());
}
// Setting the alarm to call onRecieve
public void setAlarm(long millis) {
try {
am.cancel(pi);
} catch (Exception ignored) {}
Log.d(TAG, "AlarmManager set to fire at " + new Date(millis));
am.setExact(AlarmManager.RTC_WAKEUP, millis, pi);
}
// restarting the alarm after MedtronicCnlIntentService.POLL_PERIOD_MS from now
public void restartAlarm() {
setAlarm(System.currentTimeMillis() + MedtronicCnlIntentService.POLL_PERIOD_MS);
}
// Cancel the alarm.
public void cancelAlarm() {
am.cancel(pi);
}
}
......@@ -103,6 +103,9 @@ public class MedtronicCnlIntentService extends IntentService {
if (cnlStick == null) {
sendStatus("USB connection error. Is the Bayer Contour Next Link plugged in?");
Log.w(TAG, "USB connection error. Is the CNL plugged in?");
// TODO - set status if offline or Nightscout not reachable
uploadToNightscout();
MedtronicCnlAlarmReceiver.completeWakefulIntent(intent);
// TODO - throw, don't return
return;
......@@ -279,8 +282,9 @@ public class MedtronicCnlIntentService extends IntentService {
private void uploadToNightscout() {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent receiverIntent = new Intent(this, NightscoutUploadReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiverIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000L, pendingIntent);
final long timestamp = System.currentTimeMillis() + 1000L;
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)timestamp, receiverIntent, PendingIntent.FLAG_ONE_SHOT);
alarmManager.set(AlarmManager.RTC_WAKEUP, timestamp, pendingIntent);
}
private boolean hasUsbHostFeature() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment