diff options
author | calderwoodra <calderwoodra@google.com> | 2017-09-20 16:08:29 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-09-22 15:57:51 +0000 |
commit | 13221d724c9f26b8ff94c38d0911bbdcabdcb169 (patch) | |
tree | bc153a4094ebac2c5e531c7736d1eaa9b07cdea5 | |
parent | ab0b8567b62b88082a3213a6b085302dc216cfeb (diff) |
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
4 files changed, 64 insertions, 25 deletions
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<ViewHolder> 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<ViewHolder> 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<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); + 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<ViewHolder> * 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> /** 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"> <ImageView android:id="@+id/permission_image" - android:layout_width="56dp" - android:layout_height="56dp" + android:layout_width="40dp" + android:layout_height="40dp" android:layout_marginEnd="16dp" android:src="@drawable/quantum_ic_my_location_vd_theme_24" android:tint="@color/dialer_secondary_text_color"/> @@ -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"/> + + <Button + android:id="@+id/location_permission_dismiss" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_toStartOf="@+id/location_permission_allow" + android:layout_below="@id/permission_text" + android:layout_marginEnd="16dp" + android:layout_marginTop="24dp" + android:text="@string/nearby_places_dismiss" android:textColor="@color/dialer_theme_color" style="@style/Widget.AppCompat.Button.Borderless"/> </RelativeLayout>
\ No newline at end of file |