aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/ContactsContentObserver.java
diff options
context:
space:
mode:
authorDan Zivkovic <zivkovic@google.com>2015-02-19 11:54:18 -0800
committerDan Zivkovic <zivkovic@google.com>2015-02-19 11:54:18 -0800
commit705b118672ce5680257b31c565c520e95fd8e298 (patch)
tree404bf1de3b38cd97f28aa3101a4d1cce165a086a /java/src/com/android/inputmethod/latin/ContactsContentObserver.java
parent0b03f13cabec84d2d841fde47ce9fec0d531b6a1 (diff)
downloadlatinime-705b118672ce5680257b31c565c520e95fd8e298.tar.gz
latinime-705b118672ce5680257b31c565c520e95fd8e298.tar.xz
latinime-705b118672ce5680257b31c565c520e95fd8e298.zip
If contacts observer is running, return early.
Change-Id: I084a251b0f72288243c73b6166d992b427449635
Diffstat (limited to 'java/src/com/android/inputmethod/latin/ContactsContentObserver.java')
-rw-r--r--java/src/com/android/inputmethod/latin/ContactsContentObserver.java18
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() {