diff options
author | 2015-07-15 13:32:50 -0700 | |
---|---|---|
committer | 2015-07-15 22:51:53 +0000 | |
commit | 604158669b407a40cd0f23538fad4dce5d738f24 (patch) | |
tree | 85aab20d4da9aa12bdd409ce04541db25de1e2f4 /java/src/com/android/inputmethod/latin/ContactsContentObserver.java | |
parent | 7d5fb3a9430550a3ccf1ed5afd70dbf8cc81574a (diff) | |
download | latinime-604158669b407a40cd0f23538fad4dce5d738f24.tar.gz latinime-604158669b407a40cd0f23538fad4dce5d738f24.tar.xz latinime-604158669b407a40cd0f23538fad4dce5d738f24.zip |
[LatinIME] Support MNC permissions.
This build has been compiled against API 23
This build is approved to go out with the M OTA, but may NOT be released
to the public until the Play Store has enabled API level 23 apps
Version: 4.1.2300x.build_id
1. Replaces the personalization is on information with the suggest
contacts.
2. Enables "Use Contacts" only if the app has permission to read
contacts.
3. Disables the contacts dictionary in the Facilitator.
4. Do not register/read the contacts in the contact observer.
Bug: 22236416
Change-Id: I9674e13d0d0f4a2014c5024fde0178de684c07e7
Diffstat (limited to 'java/src/com/android/inputmethod/latin/ContactsContentObserver.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/ContactsContentObserver.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/java/src/com/android/inputmethod/latin/ContactsContentObserver.java b/java/src/com/android/inputmethod/latin/ContactsContentObserver.java index 872e4c8fc..6103a8296 100644 --- a/java/src/com/android/inputmethod/latin/ContactsContentObserver.java +++ b/java/src/com/android/inputmethod/latin/ContactsContentObserver.java @@ -16,6 +16,7 @@ package com.android.inputmethod.latin; +import android.Manifest; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; @@ -25,6 +26,7 @@ import android.util.Log; import com.android.inputmethod.latin.ContactsManager.ContactsChangedListener; import com.android.inputmethod.latin.define.DebugFlags; +import com.android.inputmethod.latin.permissions.PermissionsUtil; import com.android.inputmethod.latin.utils.ExecutorUtils; import java.util.ArrayList; @@ -35,10 +37,10 @@ import java.util.concurrent.atomic.AtomicBoolean; */ public class ContactsContentObserver implements Runnable { private static final String TAG = "ContactsContentObserver"; - private static AtomicBoolean sRunning = new AtomicBoolean(false); private final Context mContext; private final ContactsManager mManager; + private final AtomicBoolean mRunning = new AtomicBoolean(false); private ContentObserver mContentObserver; private ContactsChangedListener mContactsChangedListener; @@ -49,6 +51,13 @@ public class ContactsContentObserver implements Runnable { } public void registerObserver(final ContactsChangedListener listener) { + if (!PermissionsUtil.checkAllPermissionsGranted( + mContext, Manifest.permission.READ_CONTACTS)) { + Log.i(TAG, "No permission to read contacts. Not registering the observer."); + // do nothing if we do not have the permission to read contacts. + return; + } + if (DebugFlags.DEBUG_ENABLED) { Log.d(TAG, "registerObserver()"); } @@ -66,7 +75,14 @@ public class ContactsContentObserver implements Runnable { @Override public void run() { - if (!sRunning.compareAndSet(false /* expect */, true /* update */)) { + if (!PermissionsUtil.checkAllPermissionsGranted( + mContext, Manifest.permission.READ_CONTACTS)) { + Log.i(TAG, "No permission to read contacts. Not updating the contacts."); + unregister(); + return; + } + + if (!mRunning.compareAndSet(false /* expect */, true /* update */)) { if (DebugFlags.DEBUG_ENABLED) { Log.d(TAG, "run() : Already running. Don't waste time checking again."); } @@ -78,10 +94,16 @@ public class ContactsContentObserver implements Runnable { } mContactsChangedListener.onContactsChange(); } - sRunning.set(false); + mRunning.set(false); } boolean haveContentsChanged() { + if (!PermissionsUtil.checkAllPermissionsGranted( + mContext, Manifest.permission.READ_CONTACTS)) { + Log.i(TAG, "No permission to read contacts. Marking contacts as not changed."); + return false; + } + final long startTime = SystemClock.uptimeMillis(); final int contactCount = mManager.getContactCount(); if (contactCount > ContactsDictionaryConstants.MAX_CONTACTS_PROVIDER_QUERY_LIMIT) { |