Fix summary lifecycle

Once more and probably not for all

Don't let multiple listening state changes get queued, this can cause
rapid changes like listening->not listening->listening.  Also store
listening state on the worker thread now that we drop some state
messages and only notify summaries when there is a state change.

Change-Id: I93a5f364e9b35929f9088e044ebefd9be69740e6
Fixes: 28319383
diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java
index 814d1e4..f23ad3f 100644
--- a/src/com/android/settings/dashboard/SummaryLoader.java
+++ b/src/com/android/settings/dashboard/SummaryLoader.java
@@ -51,6 +51,7 @@
 
     private DashboardAdapter mAdapter;
     private boolean mListening;
+    private boolean mWorkerListening;
     private ArrayList<BroadcastReceiver> mReceivers = new ArrayList<>();
 
     public SummaryLoader(Activity activity, List<DashboardCategory> categories) {
@@ -105,6 +106,7 @@
             mActivity.unregisterReceiver(mReceivers.get(i));
         }
         mReceivers.clear();
+        mWorker.removeMessages(Worker.MSG_SET_LISTENING);
         mWorker.obtainMessage(Worker.MSG_SET_LISTENING, listening ? 1 : 0, 0).sendToTarget();
     }
 
@@ -164,6 +166,8 @@
     }
 
     private synchronized void setListeningW(boolean listening) {
+        if (mWorkerListening == listening) return;
+        mWorkerListening = listening;
         if (DEBUG) Log.d(TAG, "Listening " + listening);
         for (SummaryProvider p : mSummaryMap.keySet()) {
             try {