diff options
Diffstat (limited to 'java/com/android/dialer/searchfragment/list/SearchAdapter.java')
-rw-r--r-- | java/com/android/dialer/searchfragment/list/SearchAdapter.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java index d4b5cf29d..358a59a41 100644 --- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java +++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java @@ -23,6 +23,8 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import com.android.dialer.callcomposer.CallComposerActivity; import com.android.dialer.callintent.CallInitiationType; @@ -54,6 +56,7 @@ public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> private boolean showZeroSuggest; private String query; private CallInitiationType.Type callInitiationType = CallInitiationType.Type.UNKNOWN_INITIATION; + private OnClickListener locationRequestClickListener; @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public SearchAdapter(Activity activity, SearchCursorManager searchCursorManager) { @@ -81,6 +84,10 @@ public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> case RowType.SEARCH_ACTION: return new SearchActionViewHolder( LayoutInflater.from(activity).inflate(R.layout.search_action_layout, root, false)); + case RowType.LOCATION_REQUEST: + return new LocationPermissionViewHolder( + LayoutInflater.from(activity).inflate(R.layout.location_permission_row, root, false), + locationRequestClickListener); case RowType.INVALID: default: throw Assert.createIllegalStateFailException("Invalid RowType: " + rowType); @@ -107,6 +114,8 @@ public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> } else if (holder instanceof SearchActionViewHolder) { ((SearchActionViewHolder) holder) .setAction(searchCursorManager.getSearchAction(position), position, query); + } else if (holder instanceof LocationPermissionViewHolder) { + // No-op } else { throw Assert.createIllegalStateFailException("Invalid ViewHolder: " + holder); } @@ -165,6 +174,28 @@ public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> } } + /** + * Updates the adapter to show the location request row element. If the element was previously + * hidden, the adapter will call {@link #notifyDataSetChanged()}. + */ + public void showLocationPermissionRequest(OnClickListener clickListener) { + Assert.isNotNull(locationRequestClickListener = clickListener); + if (searchCursorManager.showLocationPermissionRequest(true)) { + notifyDataSetChanged(); + } + } + + /** + * Updates the adapter to hide the location request row element. If the element was previously + * visible, the adapter will call {@link #notifyDataSetChanged()}. + */ + void hideLocationPermissionRequest() { + locationRequestClickListener = null; + if (searchCursorManager.showLocationPermissionRequest(false)) { + notifyDataSetChanged(); + } + } + public void setRemoteContactsCursor(SearchCursor remoteContactsCursor) { if (searchCursorManager.setCorpDirectoryCursor(remoteContactsCursor)) { notifyDataSetChanged(); @@ -207,4 +238,17 @@ public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> Intent intent = CallComposerActivity.newIntent(activity, contact); DialerUtils.startActivityWithErrorToast(activity, intent); } + + /** Viewholder for R.layout.location_permission_row that requests the location permission. */ + private static class LocationPermissionViewHolder extends RecyclerView.ViewHolder { + + LocationPermissionViewHolder(View itemView, OnClickListener locationRequestClickListener) { + super(itemView); + Assert.isNotNull(locationRequestClickListener); + itemView + .findViewById( + com.android.dialer.searchfragment.nearbyplaces.R.id.location_permission_allow) + .setOnClickListener(locationRequestClickListener); + } + } } |