Start push pings on startup

Change-Id: Ifcc7cba4869a04a9896a5f366081b547a1989dbf
diff --git a/src/com/android/exchange/service/EmailSyncAdapterService.java b/src/com/android/exchange/service/EmailSyncAdapterService.java
index d46fb8c..4b26856 100644
--- a/src/com/android/exchange/service/EmailSyncAdapterService.java
+++ b/src/com/android/exchange/service/EmailSyncAdapterService.java
@@ -102,8 +102,53 @@
     /**
      * {@link AsyncTask} for restarting pings for all accounts that need it.
      */
+    private static final String[] PUSH_ACCOUNTS_PROJECTION = new String[] {AccountColumns._ID};
     private static final String PUSH_ACCOUNTS_SELECTION =
             AccountColumns.SYNC_INTERVAL + "=" + Integer.toString(Account.CHECK_INTERVAL_PUSH);
+    private class RestartPingsTask extends AsyncTask<Void, Void, Void> {
+
+        private final ContentResolver mContentResolver;
+        private final IEmailService mEasService;
+        private boolean mAnyAccounts;
+
+        public RestartPingsTask(final ContentResolver contentResolver,
+                                final IEmailService easService) {
+            mContentResolver = contentResolver;
+            mEasService = easService;
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            final Cursor c = mContentResolver.query(Account.CONTENT_URI,
+                    PUSH_ACCOUNTS_PROJECTION, PUSH_ACCOUNTS_SELECTION, null, null);
+            if (c != null) {
+                try {
+                    mAnyAccounts = (c.getCount() != 0);
+                    while (c.moveToNext()) {
+                        try {
+                            mEasService.pushModify(c.getLong(0));
+                        } catch (RemoteException re) {
+                            LogUtils.wtf(TAG, re, "While trying to pushModify in RestartPingsTask");
+                            // TODO: how to handle this?
+                        }
+                    }
+                } finally {
+                    c.close();
+                }
+            } else {
+                mAnyAccounts = false;
+            }
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            if (!mAnyAccounts) {
+                LogUtils.d(TAG, "stopping for no accounts");
+                EmailSyncAdapterService.this.stopSelf();
+            }
+        }
+    }
 
     @Override
     public void onCreate() {
@@ -122,6 +167,9 @@
             }
         };
         bindService(new Intent(this, EasService.class), mConnection, Context.BIND_AUTO_CREATE);
+        // Start up the initial pings.
+        new RestartPingsTask(getContentResolver(), mEasService).executeOnExecutor(
+                AsyncTask.THREAD_POOL_EXECUTOR);
     }
 
     @Override