summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/searchfragment/list/SearchCursorManager.java')
-rw-r--r--java/com/android/dialer/searchfragment/list/SearchCursorManager.java66
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;
+ }
+ }
}