Make sure SyncManager keeps running in various edge cases
* Have Welcome start the service (in case the app has been reloaded)
* Have SyncManager.ping start the service if there's no instance of
SyncManager
Change-Id: I8bed2843a3e065d2db29fad67dfb0bb3a5d0ff5e
diff --git a/src/com/android/exchange/MailboxAlarmReceiver.java b/src/com/android/exchange/MailboxAlarmReceiver.java
index 137d6a5..cc4e2f4 100644
--- a/src/com/android/exchange/MailboxAlarmReceiver.java
+++ b/src/com/android/exchange/MailboxAlarmReceiver.java
@@ -33,7 +33,7 @@
if (SyncManager.INSTANCE != null) {
SyncManager.INSTANCE.log("Alarm received for: " + SyncManager.alarmOwner(mid));
}
- SyncManager.ping(mid);
+ SyncManager.ping(context, mid);
}
}
diff --git a/src/com/android/exchange/SyncManager.java b/src/com/android/exchange/SyncManager.java
index 36b4c6a..2b31747 100644
--- a/src/com/android/exchange/SyncManager.java
+++ b/src/com/android/exchange/SyncManager.java
@@ -667,6 +667,14 @@
}
}
+ protected void alwaysLog(String str) {
+ if (!Eas.USER_LOG) {
+ Log.d(TAG, str);
+ } else {
+ log(str);
+ }
+ }
+
/**
* EAS requires a unique device id, so that sync is possible from a variety of different
* devices (e.g. the syncKey is specific to a device) If we're on an emulator or some other
@@ -711,9 +719,9 @@
@Override
public void onCreate() {
if (INSTANCE != null) {
- Log.d(TAG, "onCreate called on running SyncManager");
+ alwaysLog("onCreate called on running SyncManager");
} else {
- Log.d(TAG, "!!! EAS SyncManager, onCreate");
+ alwaysLog("!!! EAS SyncManager, onCreate");
INSTANCE = this;
try {
sDeviceId = getDeviceId();
@@ -733,10 +741,10 @@
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
- Log.d(TAG, "!!! EAS SyncManager, onStartCommand");
+ alwaysLog("!!! EAS SyncManager, onStartCommand");
maybeStartSyncManagerThread();
if (sServiceThread == null) {
- Log.d(TAG, "!!! EAS SyncManager, stopping self");
+ alwaysLog("!!! EAS SyncManager, stopping self");
stopSelf();
}
return Service.START_REDELIVER_INTENT;
@@ -744,7 +752,7 @@
@Override
public void onDestroy() {
- Log.d(TAG, "!!! EAS SyncManager, onDestroy");
+ alwaysLog("!!! EAS SyncManager, onDestroy");
}
void maybeStartSyncManagerThread() {
@@ -980,9 +988,11 @@
INSTANCE.releaseWakeLock(id);
}
- static public void ping(long id) {
+ static public void ping(Context context, long id) {
if (id < 0) {
kick("ping SyncManager");
+ } else if (INSTANCE == null) {
+ context.startService(new Intent(context, SyncManager.class));
} else {
AbstractSyncService service = INSTANCE.mServiceMap.get(id);
if (service != null) {