Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3f6d58b authored by Amith Yamasani's avatar Amith Yamasani
Browse files

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.
parent 3fd9d9e3
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -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