From 13221d724c9f26b8ff94c38d0911bbdcabdcb169 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Wed, 20 Sep 2017 16:08:29 -0700 Subject: Added dismiss button to location permission request. This change adds a dismiss button to the location permission prompt shown in the search UI. A few other minor changes: - Permission prompt is always the first element in the list - Adjusted a few dimensions and strings screenshot: http://screen/9CkRPUQ5dwh Bug: 65858857 Test: SAT, NSFT PiperOrigin-RevId: 169466585 Change-Id: I8177c23fe3f635fec5fdcdbe6675428cebb19f5d --- .../searchfragment/list/NewSearchFragment.java | 18 +++++++++++-- .../dialer/searchfragment/list/SearchAdapter.java | 31 +++++++++++++++------- .../searchfragment/list/SearchCursorManager.java | 15 ++++++----- .../res/layout/location_permission_row.xml | 25 ++++++++++++----- 4 files changed, 64 insertions(+), 25 deletions(-) (limited to 'java/com/android/dialer/searchfragment') diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java index 1dbd953dd..47a4ee608 100644 --- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java +++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java @@ -24,6 +24,7 @@ import android.content.Loader; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; @@ -53,6 +54,7 @@ import com.android.dialer.searchfragment.remote.RemoteContactsCursorLoader; import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader; import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory; import com.android.dialer.util.CallUtil; +import com.android.dialer.util.DialerUtils; import com.android.dialer.util.PermissionsUtil; import com.android.dialer.util.ViewUtil; import com.android.dialer.widget.EmptyContentView; @@ -76,6 +78,7 @@ public final class NewSearchFragment extends Fragment private static final int ENRICHED_CALLING_CAPABILITIES_UPDATED_DELAY = 400; private static final String KEY_SHOW_ZERO_SUGGEST = "use_zero_suggest"; + private static final String KEY_LOCATION_PROMPT_DISMISSED = "search_location_prompt_dismissed"; @VisibleForTesting public static final int READ_CONTACTS_PERMISSION_REQUEST_CODE = 1; @VisibleForTesting private static final int LOCATION_PERMISSION_REQUEST_CODE = 2; @@ -326,9 +329,12 @@ public final class NewSearchFragment extends Fragment // Should not be called before remote directories (not contacts) have finished loading. private void loadNearbyPlacesCursor() { - if (!PermissionsUtil.hasLocationPermissions(getContext())) { + if (!PermissionsUtil.hasLocationPermissions(getContext()) + && !DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(getContext()) + .getBoolean(KEY_LOCATION_PROMPT_DISMISSED, false)) { if (adapter != null) { - adapter.showLocationPermissionRequest(v -> requestLocationPermission()); + adapter.showLocationPermissionRequest( + v -> requestLocationPermission(), v -> dismissLocationPermission()); } return; } @@ -353,6 +359,14 @@ public final class NewSearchFragment extends Fragment requestPermissions(deniedPermissions, LOCATION_PERMISSION_REQUEST_CODE); } + private void dismissLocationPermission() { + PreferenceManager.getDefaultSharedPreferences(getContext()) + .edit() + .putBoolean(KEY_LOCATION_PROMPT_DISMISSED, true) + .apply(); + adapter.hideLocationPermissionRequest(); + } + @Override public void onResume() { super.onResume(); diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java index 358a59a41..22bfa6dbd 100644 --- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java +++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java @@ -56,7 +56,8 @@ public final class SearchAdapter extends RecyclerView.Adapter private boolean showZeroSuggest; private String query; private CallInitiationType.Type callInitiationType = CallInitiationType.Type.UNKNOWN_INITIATION; - private OnClickListener locationRequestClickListener; + private OnClickListener allowClickListener; + private OnClickListener dismissClickListener; @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public SearchAdapter(Activity activity, SearchCursorManager searchCursorManager) { @@ -87,7 +88,8 @@ public final class SearchAdapter extends RecyclerView.Adapter case RowType.LOCATION_REQUEST: return new LocationPermissionViewHolder( LayoutInflater.from(activity).inflate(R.layout.location_permission_row, root, false), - locationRequestClickListener); + allowClickListener, + dismissClickListener); case RowType.INVALID: default: throw Assert.createIllegalStateFailException("Invalid RowType: " + rowType); @@ -178,10 +180,12 @@ public final class SearchAdapter extends RecyclerView.Adapter * 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); + public void showLocationPermissionRequest( + OnClickListener allowClickListener, OnClickListener dismissClickListener) { + this.allowClickListener = Assert.isNotNull(allowClickListener); + this.dismissClickListener = Assert.isNotNull(dismissClickListener); if (searchCursorManager.showLocationPermissionRequest(true)) { - notifyDataSetChanged(); + notifyItemRemoved(0); } } @@ -190,9 +194,10 @@ public final class SearchAdapter extends RecyclerView.Adapter * visible, the adapter will call {@link #notifyDataSetChanged()}. */ void hideLocationPermissionRequest() { - locationRequestClickListener = null; + allowClickListener = null; + dismissClickListener = null; if (searchCursorManager.showLocationPermissionRequest(false)) { - notifyDataSetChanged(); + notifyItemRemoved(0); } } @@ -242,13 +247,19 @@ public final class SearchAdapter extends RecyclerView.Adapter /** Viewholder for R.layout.location_permission_row that requests the location permission. */ private static class LocationPermissionViewHolder extends RecyclerView.ViewHolder { - LocationPermissionViewHolder(View itemView, OnClickListener locationRequestClickListener) { + LocationPermissionViewHolder( + View itemView, OnClickListener allowClickListener, OnClickListener dismissClickListener) { super(itemView); - Assert.isNotNull(locationRequestClickListener); + Assert.isNotNull(allowClickListener); + Assert.isNotNull(dismissClickListener); itemView .findViewById( com.android.dialer.searchfragment.nearbyplaces.R.id.location_permission_allow) - .setOnClickListener(locationRequestClickListener); + .setOnClickListener(allowClickListener); + itemView + .findViewById( + com.android.dialer.searchfragment.nearbyplaces.R.id.location_permission_dismiss) + .setOnClickListener(dismissClickListener); } } } diff --git a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java index f8d1e1be5..c6aca8e68 100644 --- a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java +++ b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java @@ -244,6 +244,13 @@ public final class SearchCursorManager { * @return Cursor moved to position specific to passed in position. */ SearchCursor getCursor(int position) { + if (showLocationPermissionRequest) { + if (position == 0) { + return LOCATION_PERMISSION_CURSOR; + } + position--; + } + if (contactsCursor != null) { int count = contactsCursor.getCount(); @@ -254,13 +261,7 @@ public final class SearchCursorManager { position -= count; } - if (showLocationPermissionRequest) { - if (position == 0) { - return LOCATION_PERMISSION_CURSOR; - } - position--; - - } else if (nearbyPlacesCursor != null) { + if (!showLocationPermissionRequest && nearbyPlacesCursor != null) { int count = nearbyPlacesCursor.getCount(); if (position - count < 0) { diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/layout/location_permission_row.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/layout/location_permission_row.xml index 800bf62a8..4204a4f1f 100644 --- a/java/com/android/dialer/searchfragment/nearbyplaces/res/layout/location_permission_row.xml +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/layout/location_permission_row.xml @@ -19,12 +19,13 @@ android:layout_height="wrap_content" android:paddingStart="16dp" android:paddingEnd="16dp" - android:paddingTop="16dp"> + android:paddingTop="16dp" + android:paddingBottom="8dp"> @@ -34,8 +35,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toEndOf="@id/permission_image" - android:minHeight="56dp" - android:text="@string/permission_no_location_for_search" + android:minHeight="40dp" + android:text="@string/search_location_permission" + android:lineSpacingMultiplier="1.2" android:textSize="16sp" android:textColor="@color/dialer_secondary_text_color"/> @@ -45,7 +47,18 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_below="@id/permission_text" - android:text="@string/nearby_places_allow" + android:layout_marginTop="24dp" + android:text="@string/nearby_places_allow"/> + +