diff options
Diffstat (limited to 'java/com/android/dialer/searchfragment/list/SearchCursorManager.java')
-rw-r--r-- | java/com/android/dialer/searchfragment/list/SearchCursorManager.java | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java index 3704e817d..f8d1e1be5 100644 --- a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java +++ b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java @@ -16,6 +16,7 @@ package com.android.dialer.searchfragment.list; +import android.database.MatrixCursor; import android.support.annotation.IntDef; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; @@ -60,7 +61,8 @@ public final class SearchCursorManager { SearchCursorManager.RowType.NEARBY_PLACES_ROW, SearchCursorManager.RowType.DIRECTORY_HEADER, SearchCursorManager.RowType.DIRECTORY_ROW, - SearchCursorManager.RowType.SEARCH_ACTION + SearchCursorManager.RowType.SEARCH_ACTION, + SearchCursorManager.RowType.LOCATION_REQUEST }) @interface RowType { int INVALID = 0; @@ -79,13 +81,20 @@ public final class SearchCursorManager { int DIRECTORY_ROW = 6; /** A row containing a search action */ int SEARCH_ACTION = 7; + /** A row which requests location permission */ + int LOCATION_REQUEST = 8; } + private static final LocationPermissionCursor LOCATION_PERMISSION_CURSOR = + new LocationPermissionCursor(new String[0]); + private SearchCursor contactsCursor = null; private SearchCursor nearbyPlacesCursor = null; private SearchCursor corpDirectoryCursor = null; private List<Integer> searchActions = new ArrayList<>(); + private boolean showLocationPermissionRequest; + /** Returns true if the cursor changed. */ boolean setContactsCursor(@Nullable SearchCursor cursor) { if (cursor == contactsCursor) { @@ -122,6 +131,15 @@ public final class SearchCursorManager { return true; } + /** Returns true if the value changed. */ + boolean showLocationPermissionRequest(boolean enabled) { + if (showLocationPermissionRequest == enabled) { + return false; + } + showLocationPermissionRequest = enabled; + return true; + } + /** Returns true if a cursor changed. */ boolean setCorpDirectoryCursor(@Nullable SearchCursor cursor) { if (cursor == corpDirectoryCursor) { @@ -177,7 +195,9 @@ public final class SearchCursorManager { count += contactsCursor.getCount(); } - if (nearbyPlacesCursor != null) { + if (showLocationPermissionRequest) { + count++; + } else if (nearbyPlacesCursor != null) { count += nearbyPlacesCursor.getCount(); } @@ -203,6 +223,10 @@ public final class SearchCursorManager { return cursor.isHeader() ? RowType.CONTACT_HEADER : RowType.CONTACT_ROW; } + if (cursor == LOCATION_PERMISSION_CURSOR) { + return RowType.LOCATION_REQUEST; + } + if (cursor == nearbyPlacesCursor) { return cursor.isHeader() ? RowType.NEARBY_PLACES_HEADER : RowType.NEARBY_PLACES_ROW; } @@ -214,9 +238,7 @@ public final class SearchCursorManager { } /** - * Gets cursor corresponding to position in coalesced list of search cursors. Callers should - * ensure that {@link #getRowType(int)} doesn't correspond to header position, otherwise an - * exception will be thrown. + * Gets cursor corresponding to position in coalesced list of search cursors. * * @param position in coalesced list of search cursors * @return Cursor moved to position specific to passed in position. @@ -232,7 +254,13 @@ public final class SearchCursorManager { position -= count; } - if (nearbyPlacesCursor != null) { + if (showLocationPermissionRequest) { + if (position == 0) { + return LOCATION_PERMISSION_CURSOR; + } + position--; + + } else if (nearbyPlacesCursor != null) { int count = nearbyPlacesCursor.getCount(); if (position - count < 0) { @@ -272,4 +300,30 @@ public final class SearchCursorManager { corpDirectoryCursor = null; } } + + /** + * No-op implementation of {@link android.database.Cursor} and {@link SearchCursor} for + * representing location permission request row elements. + */ + private static class LocationPermissionCursor extends MatrixCursor implements SearchCursor { + + LocationPermissionCursor(String[] columnNames) { + super(columnNames); + } + + @Override + public boolean isHeader() { + return false; + } + + @Override + public boolean updateQuery(String query) { + return false; + } + + @Override + public long getDirectoryId() { + return 0; + } + } } |