From 9ffa50096f5ad980bdaef4d214ad1a835b9b2991 Mon Sep 17 00:00:00 2001 From: Christoph Studer Date: Fri, 26 Sep 2014 16:57:28 +0200 Subject: [PATCH] NoMan: Evaluate all contacts matching EXTRA_PEOPLE URI Bug: 17660485 Change-Id: I8684067538fcd2d43a9f95c6aa707b275b13ee40 --- .../ValidateNotificationPeople.java | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java index 6e2a8ada32f00..11d00cf163f65 100644 --- a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java +++ b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java @@ -231,7 +231,7 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor { if (lookupResult == null || lookupResult.isExpired()) { pendingLookups.add(handle); } else { - if (DEBUG) Slog.d(TAG, "using cached lookupResult: " + lookupResult.mId); + if (DEBUG) Slog.d(TAG, "using cached lookupResult"); } if (lookupResult != null) { affinity = Math.max(affinity, lookupResult.getAffinity()); @@ -336,11 +336,14 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor { Cursor c = null; try { c = context.getContentResolver().query(lookupUri, LOOKUP_PROJECTION, null, null, null); - if (c != null && c.getCount() > 0) { - c.moveToFirst(); - lookupResult.readContact(c); + if (c == null) { + Slog.w(TAG, "Null cursor from contacts query."); + return lookupResult; } - } catch(Throwable t) { + while (c.moveToNext()) { + lookupResult.mergeContact(c); + } + } catch (Throwable t) { Slog.w(TAG, "Problem getting content resolver or performing contacts query.", t); } finally { if (c != null) { @@ -352,61 +355,54 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor { private static class LookupResult { private static final long CONTACT_REFRESH_MILLIS = 60 * 60 * 1000; // 1hr - public static final int INVALID_ID = -1; private final long mExpireMillis; - private int mId; - private boolean mStarred; + private float mAffinity = NONE; public LookupResult() { - mId = INVALID_ID; - mStarred = false; mExpireMillis = System.currentTimeMillis() + CONTACT_REFRESH_MILLIS; } - public void readContact(Cursor cursor) { + public void mergeContact(Cursor cursor) { + mAffinity = Math.max(mAffinity, VALID_CONTACT); + + // Contact ID + int id; final int idIdx = cursor.getColumnIndex(Contacts._ID); if (idIdx >= 0) { - mId = cursor.getInt(idIdx); - if (DEBUG) Slog.d(TAG, "contact _ID is: " + mId); + id = cursor.getInt(idIdx); + if (DEBUG) Slog.d(TAG, "contact _ID is: " + id); } else { - if (DEBUG) Slog.d(TAG, "invalid cursor: no _ID"); + id = -1; + Slog.i(TAG, "invalid cursor: no _ID"); } + + // Starred final int starIdx = cursor.getColumnIndex(Contacts.STARRED); if (starIdx >= 0) { - mStarred = cursor.getInt(starIdx) != 0; - if (DEBUG) Slog.d(TAG, "contact STARRED is: " + mStarred); + boolean isStarred = cursor.getInt(starIdx) != 0; + if (isStarred) { + mAffinity = Math.max(mAffinity, STARRED_CONTACT); + } + if (DEBUG) Slog.d(TAG, "contact STARRED is: " + isStarred); } else { if (DEBUG) Slog.d(TAG, "invalid cursor: no STARRED"); } } - public boolean isExpired() { + private boolean isExpired() { return mExpireMillis < System.currentTimeMillis(); } - public boolean isInvalid() { - return mId == INVALID_ID || isExpired(); + private boolean isInvalid() { + return mAffinity == NONE || isExpired(); } public float getAffinity() { if (isInvalid()) { return NONE; - } else if (mStarred) { - return STARRED_CONTACT; - } else { - return VALID_CONTACT; } - } - - public LookupResult setStarred(boolean starred) { - mStarred = starred; - return this; - } - - public LookupResult setId(int id) { - mId = id; - return this; + return mAffinity; } }