From 8d8de1490536468bbc1061abca0f78ab0b682b3b Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 28 Apr 2016 10:42:10 -0400 Subject: [PATCH] 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 --- src/com/android/settings/dashboard/SummaryLoader.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java index 814d1e40670..f23ad3f7455 100644 --- a/src/com/android/settings/dashboard/SummaryLoader.java +++ b/src/com/android/settings/dashboard/SummaryLoader.java @@ -51,6 +51,7 @@ public class SummaryLoader { private DashboardAdapter mAdapter; private boolean mListening; + private boolean mWorkerListening; private ArrayList mReceivers = new ArrayList<>(); public SummaryLoader(Activity activity, List categories) { @@ -105,6 +106,7 @@ public class SummaryLoader { 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 @@ public class SummaryLoader { } 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 {