diff options
author | 2015-02-19 11:54:18 -0800 | |
---|---|---|
committer | 2015-02-19 11:54:18 -0800 | |
commit | 705b118672ce5680257b31c565c520e95fd8e298 (patch) | |
tree | 404bf1de3b38cd97f28aa3101a4d1cce165a086a | |
parent | 0b03f13cabec84d2d841fde47ce9fec0d531b6a1 (diff) | |
download | latinime-705b118672ce5680257b31c565c520e95fd8e298.tar.gz latinime-705b118672ce5680257b31c565c520e95fd8e298.tar.xz latinime-705b118672ce5680257b31c565c520e95fd8e298.zip |
If contacts observer is running, return early.
Change-Id: I084a251b0f72288243c73b6166d992b427449635
-rw-r--r-- | java/src/com/android/inputmethod/latin/ContactsContentObserver.java | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/latin/ContactsContentObserver.java b/java/src/com/android/inputmethod/latin/ContactsContentObserver.java index b23226dce..777bfe6f6 100644 --- a/java/src/com/android/inputmethod/latin/ContactsContentObserver.java +++ b/java/src/com/android/inputmethod/latin/ContactsContentObserver.java @@ -27,6 +27,7 @@ import com.android.inputmethod.latin.ContactsManager.ContactsChangedListener; import com.android.inputmethod.latin.utils.ExecutorUtils; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicBoolean; /** * A content observer that listens to updates to content provider {@link Contacts#CONTENT_URI}. @@ -35,13 +36,14 @@ import java.util.ArrayList; public class ContactsContentObserver implements Runnable { private static final String TAG = ContactsContentObserver.class.getSimpleName(); private static final boolean DEBUG = false; - - private ContentObserver mContentObserver; - private ContactsChangedListener mContactsChangedListener; + private static AtomicBoolean sRunning = new AtomicBoolean(false); private final Context mContext; private final ContactsManager mManager; + private ContentObserver mContentObserver; + private ContactsChangedListener mContactsChangedListener; + public ContactsContentObserver(final ContactsManager manager, final Context context) { mManager = manager; mContext = context; @@ -55,7 +57,6 @@ public class ContactsContentObserver implements Runnable { mContentObserver = new ContentObserver(null /* handler */) { @Override public void onChange(boolean self) { - // TODO(zivkovic): Limit the queue to 1 instance of ContactsContentObserver. ExecutorUtils.getExecutorForDynamicLanguageModelUpdate() .execute(ContactsContentObserver.this); } @@ -66,12 +67,19 @@ public class ContactsContentObserver implements Runnable { @Override public void run() { + if (!sRunning.compareAndSet(false /* expect */, true /* update */)) { + if (DEBUG) { + Log.d(TAG, "run() : Already running. Don't waste time checking again."); + } + return; + } if (haveContentsChanged()) { if (DEBUG) { - Log.d(TAG, "Contacts have changed; notifying listeners"); + Log.d(TAG, "run() : Contacts have changed. Notifying listeners."); } mContactsChangedListener.onContactsChange(); } + sRunning.set(false); } private boolean haveContentsChanged() { |