Update suggestion card UI.
- adjust suggestion card width and padding - tint icon if it is from settings package. Bug: 72330968 Test: visual Change-Id: I4b82d51b3013ad0656d297305e0000958b71e94d
This commit is contained in:
@@ -55,7 +55,7 @@
|
||||
android:id="@+id/suggestion_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="18dp"
|
||||
android:paddingTop="14dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:scrollbars="none"/>
|
||||
|
||||
|
@@ -18,7 +18,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/suggestion_card"
|
||||
android:layout_width="328dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardPreventCornerOverlap="false"
|
||||
app:cardUseCompatPadding="true"
|
||||
@@ -65,7 +65,7 @@
|
||||
android:layout_marginEnd="12dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.SuggestionTitleV2"
|
||||
android:ellipsize="marquee"
|
||||
android:ellipsize="end"
|
||||
android:fadingEdge="horizontal" />
|
||||
|
||||
<TextView
|
||||
|
@@ -18,8 +18,9 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/suggestion_card"
|
||||
android:layout_width="328dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardPreventCornerOverlap="false"
|
||||
app:cardUseCompatPadding="true"
|
||||
app:cardElevation="2dp"
|
||||
app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
|
||||
@@ -37,16 +38,17 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@android:id/icon"
|
||||
android:layout_width="@dimen/dashboard_tile_image_size"
|
||||
android:layout_height="@dimen/dashboard_tile_image_size"
|
||||
android:layout_width="@dimen/suggestion_card_icon_size"
|
||||
android:layout_height="@dimen/suggestion_card_icon_size"
|
||||
style="@style/SuggestionCardIcon"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="8dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/close_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="18dp"
|
||||
android:layout_height="18dp"
|
||||
android:alpha="0.54"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
@@ -62,8 +64,8 @@
|
||||
android:layout_marginStart="12dp"
|
||||
android:layout_marginEnd="12dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.TileTitle"
|
||||
android:ellipsize="marquee"
|
||||
android:textAppearance="@style/TextAppearance.SuggestionTitleV2"
|
||||
android:ellipsize="end"
|
||||
android:fadingEdge="horizontal" />
|
||||
|
||||
<TextView
|
||||
|
@@ -23,9 +23,9 @@
|
||||
<dimen name="support_escalation_card_padding_end">56dp</dimen>
|
||||
|
||||
<!-- Suggestion cards-->
|
||||
<dimen name="suggestion_card_width_one_card">380dp</dimen>
|
||||
<dimen name="suggestion_card_width_two_cards">184dp</dimen>
|
||||
<dimen name="suggestion_card_width_multiple_cards">176dp</dimen>
|
||||
<dimen name="suggestion_card_width_one_card">384dp</dimen>
|
||||
<dimen name="suggestion_card_width_two_cards">188dp</dimen>
|
||||
<dimen name="suggestion_card_width_multiple_cards">180dp</dimen>
|
||||
<dimen name="suggestion_card_padding_bottom_one_card">22dp</dimen>
|
||||
|
||||
</resources>
|
||||
|
@@ -304,9 +304,9 @@
|
||||
|
||||
<!-- Suggestion cards size and padding -->
|
||||
<dimen name="suggestion_card_icon_size">24dp</dimen>
|
||||
<dimen name="suggestion_card_width_one_card">328dp</dimen>
|
||||
<dimen name="suggestion_card_width_two_cards">158dp</dimen>
|
||||
<dimen name="suggestion_card_width_multiple_cards">152dp</dimen>
|
||||
<dimen name="suggestion_card_width_one_card">332dp</dimen>
|
||||
<dimen name="suggestion_card_width_two_cards">162dp</dimen>
|
||||
<dimen name="suggestion_card_width_multiple_cards">156dp</dimen>
|
||||
<dimen name="suggestion_card_outer_margin">16dp</dimen>
|
||||
<dimen name="suggestion_card_inner_margin">12dp</dimen>
|
||||
<dimen name="suggestion_card_padding_bottom_one_card">16dp</dimen>
|
||||
|
@@ -18,6 +18,8 @@ package com.android.settings.dashboard.suggestions;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.Bundle;
|
||||
import android.service.settings.suggestions.Suggestion;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
@@ -34,6 +36,7 @@ import com.android.settings.R;
|
||||
import com.android.settings.dashboard.DashboardAdapterV2.DashboardItemHolder;
|
||||
import com.android.settings.dashboard.DashboardAdapterV2.IconCache;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
@@ -109,7 +112,12 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
|
||||
mSuggestionsShownLogged.add(id);
|
||||
}
|
||||
mConfig.setCardLayout(holder, suggestionCount, position);
|
||||
holder.icon.setImageDrawable(mCache.getIcon(suggestion.getIcon()));
|
||||
final Icon icon = suggestion.getIcon();
|
||||
final Drawable drawable = mCache.getIcon(icon);
|
||||
if (drawable != null && TextUtils.equals(icon.getResPackage(), mContext.getPackageName())) {
|
||||
drawable.setTint(Utils.getColorAccent(mContext));
|
||||
}
|
||||
holder.icon.setImageDrawable(drawable);
|
||||
holder.title.setText(suggestion.getTitle());
|
||||
holder.title.setSingleLine(suggestionCount == 1);
|
||||
|
||||
|
@@ -17,12 +17,19 @@ package com.android.settings.dashboard.suggestions;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.service.settings.suggestions.Suggestion;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -46,6 +53,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -203,6 +211,67 @@ public class SuggestionAdapterV2Test {
|
||||
verify(callback).onSuggestionClosed(suggestions.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onBindViewHolder_differentPackage_shouldNotTintIcon()
|
||||
throws PendingIntent.CanceledException {
|
||||
final Icon icon = mock(Icon.class);
|
||||
when(icon.getResPackage()).thenReturn("pkg1");
|
||||
when(mActivity.getPackageName()).thenReturn("pkg2");
|
||||
final Suggestion suggestion = new Suggestion.Builder("pkg1")
|
||||
.setPendingIntent(mock(PendingIntent.class))
|
||||
.setIcon(icon)
|
||||
.build();
|
||||
final List<Suggestion> suggestions = new ArrayList<>();
|
||||
suggestions.add(suggestion);
|
||||
mSuggestionAdapter = new SuggestionAdapterV2(mActivity, mSuggestionControllerMixin,
|
||||
null /* savedInstanceState */, null /* callback */, null /* lifecycle */);
|
||||
mSuggestionAdapter.setSuggestions(suggestions);
|
||||
mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
|
||||
new FrameLayout(RuntimeEnvironment.application),
|
||||
mSuggestionAdapter.getItemViewType(0));
|
||||
DashboardAdapterV2.IconCache cache = mock(DashboardAdapterV2.IconCache.class);
|
||||
final Drawable drawable = mock(Drawable.class);
|
||||
when(cache.getIcon(icon)).thenReturn(drawable);
|
||||
ReflectionHelpers.setField(mSuggestionAdapter, "mCache", cache);
|
||||
|
||||
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
||||
|
||||
verify(drawable, never()).setTint(anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onBindViewHolder_samePackage_shouldTintIcon()
|
||||
throws PendingIntent.CanceledException {
|
||||
final Icon icon = mock(Icon.class);
|
||||
final String packageName = "pkg1";
|
||||
when(icon.getResPackage()).thenReturn(packageName);
|
||||
when(mActivity.getPackageName()).thenReturn(packageName);
|
||||
final Suggestion suggestion = new Suggestion.Builder(packageName)
|
||||
.setPendingIntent(mock(PendingIntent.class))
|
||||
.setIcon(icon)
|
||||
.build();
|
||||
final List<Suggestion> suggestions = new ArrayList<>();
|
||||
suggestions.add(suggestion);
|
||||
mSuggestionAdapter = new SuggestionAdapterV2(mActivity, mSuggestionControllerMixin,
|
||||
null /* savedInstanceState */, null /* callback */, null /* lifecycle */);
|
||||
mSuggestionAdapter.setSuggestions(suggestions);
|
||||
mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
|
||||
new FrameLayout(RuntimeEnvironment.application),
|
||||
mSuggestionAdapter.getItemViewType(0));
|
||||
DashboardAdapterV2.IconCache cache = mock(DashboardAdapterV2.IconCache.class);
|
||||
final Drawable drawable = mock(Drawable.class);
|
||||
when(cache.getIcon(icon)).thenReturn(drawable);
|
||||
ReflectionHelpers.setField(mSuggestionAdapter, "mCache", cache);
|
||||
TypedArray typedArray = mock(TypedArray.class);
|
||||
final int colorAccent = 1234;
|
||||
when(mActivity.obtainStyledAttributes(any())).thenReturn(typedArray);
|
||||
when(typedArray.getColor(anyInt(), anyInt())).thenReturn(colorAccent);
|
||||
|
||||
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
||||
|
||||
verify(drawable).setTint(colorAccent);
|
||||
}
|
||||
|
||||
private void setupSuggestions(Context context, List<Suggestion> suggestions) {
|
||||
mSuggestionAdapter = new SuggestionAdapterV2(context, mSuggestionControllerMixin,
|
||||
null /* savedInstanceState */, null /* callback */, null /* lifecycle */);
|
||||
|
Reference in New Issue
Block a user