Fix for 2148982: Keyboard freezes while typing

Contacts dictionary code was being triggered too frequently during sync and
during presence updates and this seems expensive for accounts with a lot of
contacts.

Throttling the contacts read to every 30 minutes.
main
Amith Yamasani 2009-10-08 13:06:37 -07:00
parent 3fd9d9e3e0
commit b3f6d58b6e
1 changed files with 12 additions and 10 deletions

View File

@ -16,16 +16,11 @@
package com.android.inputmethod.latin;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
public class ContactsDictionary extends ExpandableDictionary {
@ -40,6 +35,8 @@ public class ContactsDictionary extends ExpandableDictionary {
private boolean mRequiresReload;
private long mLastLoadedContacts;
public ContactsDictionary(Context context) {
super(context);
// Perform a managed query. The Activity will handle closing and requerying the cursor
@ -64,12 +61,17 @@ public class ContactsDictionary extends ExpandableDictionary {
}
private synchronized void loadDictionary() {
long now = android.os.SystemClock.uptimeMillis();
if (mLastLoadedContacts == 0
|| now - mLastLoadedContacts > 30 * 60 * 1000 /* 30 minutes */) {
Cursor cursor = getContext().getContentResolver()
.query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
if (cursor != null) {
addWords(cursor);
}
mRequiresReload = false;
mLastLoadedContacts = now;
}
}
@Override