Stop the SyncAdapterService if no accounts

b/10360861
If the service got into a running state, even if there
were no exchange accounts on the device, it would
automatically get restarted and never stopped.
Now, even upon getting started, if there are no accounts,
it will stop itself.
It still automatically gets started up when the user
enters the app, this is due to some code that processes
services.xml to start up any services. That's okay for
now, at least the service will get immediately destroyed
if it's not needed.

Change-Id: I7f62443fc5fa1e0a46cfbbea8d7b6792cdf0a6cf
diff --git a/src/com/android/exchange/service/EmailSyncAdapterService.java b/src/com/android/exchange/service/EmailSyncAdapterService.java
index c8b1d5a..b2a5055 100644
--- a/src/com/android/exchange/service/EmailSyncAdapterService.java
+++ b/src/com/android/exchange/service/EmailSyncAdapterService.java
@@ -412,12 +412,13 @@
     /**
      * {@link AsyncTask} for restarting pings for all accounts that need it.
      */
-    private static class RestartPingsTask extends AsyncTask<Void, Void, Void> {
-        private static final String PUSH_ACCOUNTS_SELECTION =
-                AccountColumns.SYNC_INTERVAL + "=" + Integer.toString(Account.CHECK_INTERVAL_PUSH);
+    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 SyncHandlerSynchronizer mSyncHandlerMap;
+        private boolean mAnyAccounts;
 
         public RestartPingsTask(final ContentResolver contentResolver,
                 final SyncHandlerSynchronizer syncHandlerMap) {
@@ -431,6 +432,7 @@
                     Account.CONTENT_PROJECTION, PUSH_ACCOUNTS_SELECTION, null, null);
             if (c != null) {
                 try {
+                    mAnyAccounts = (c.getCount() != 0);
                     while (c.moveToNext()) {
                         final Account account = new Account();
                         account.restore(c);
@@ -439,9 +441,19 @@
                 } 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