diff options
author | 2015-02-19 22:20:25 +0000 | |
---|---|---|
committer | 2015-02-19 22:20:25 +0000 | |
commit | c38d83eb1ae3c5aff8dd885bb3d35d8ed83845ad (patch) | |
tree | 0a0eb4a304cada558638c961e567f0d320a73612 /java | |
parent | c47894641b866ed996aa27fe7ef478826dd7037d (diff) | |
parent | 7041313f717db3bc89db46c9c59703bd99366095 (diff) | |
download | latinime-c38d83eb1ae3c5aff8dd885bb3d35d8ed83845ad.tar.gz latinime-c38d83eb1ae3c5aff8dd885bb3d35d8ed83845ad.tar.xz latinime-c38d83eb1ae3c5aff8dd885bb3d35d8ed83845ad.zip |
am 7041313f: Merge "If contacts observer is running, return early."
* commit '7041313f717db3bc89db46c9c59703bd99366095':
If contacts observer is running, return early.
Diffstat (limited to 'java')
-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() { |