Update suggestion UI
- reduce space above and below the suggestion header - reduce space around the suggestion cardview - set the font family for the suggestion header and title. Change-Id: Ief6247005f1e69fe5025af60f3c9627d357d94a4 Fixes: 72710227 Test: visual
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
style="@style/SuggestionConditionStyle"
|
style="@style/SuggestionConditionStyle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="12dp"
|
android:paddingTop="10dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -55,8 +55,8 @@
|
|||||||
android:id="@+id/suggestion_list"
|
android:id="@+id/suggestion_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="14dp"
|
android:paddingTop="12dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="13dp"
|
||||||
android:scrollbars="none"/>
|
android:scrollbars="none"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/TextAppearance.SuggestionTitleV2"
|
android:textAppearance="@style/TextAppearance.SuggestionTitle"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fadingEdge="horizontal" />
|
android:fadingEdge="horizontal" />
|
||||||
|
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/TextAppearance.SuggestionTitleV2"
|
android:textAppearance="@style/TextAppearance.SuggestionTitle"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fadingEdge="horizontal" />
|
android:fadingEdge="horizontal" />
|
||||||
|
|
||||||
@@ -84,6 +84,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
|
android:layout_marginBottom="18dp"
|
||||||
android:text="@string/suggestion_button_text" />
|
android:text="@string/suggestion_button_text" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@@ -307,7 +307,7 @@
|
|||||||
<dimen name="suggestion_card_width_one_card">332dp</dimen>
|
<dimen name="suggestion_card_width_one_card">332dp</dimen>
|
||||||
<dimen name="suggestion_card_width_two_cards">162dp</dimen>
|
<dimen name="suggestion_card_width_two_cards">162dp</dimen>
|
||||||
<dimen name="suggestion_card_width_multiple_cards">156dp</dimen>
|
<dimen name="suggestion_card_width_multiple_cards">156dp</dimen>
|
||||||
<dimen name="suggestion_card_outer_margin">16dp</dimen>
|
<dimen name="suggestion_card_outer_margin">14dp</dimen>
|
||||||
<dimen name="suggestion_card_inner_margin">12dp</dimen>
|
<dimen name="suggestion_card_inner_margin">12dp</dimen>
|
||||||
<dimen name="suggestion_card_padding_bottom_one_card">16dp</dimen>
|
<dimen name="suggestion_card_padding_bottom_one_card">16dp</dimen>
|
||||||
<dimen name="suggestion_card_corner_radius">2dp</dimen>
|
<dimen name="suggestion_card_corner_radius">2dp</dimen>
|
||||||
|
@@ -318,7 +318,6 @@
|
|||||||
|
|
||||||
<style name="TextAppearance.SuggestionHeader"
|
<style name="TextAppearance.SuggestionHeader"
|
||||||
parent="@android:style/TextAppearance.Material.Subhead">
|
parent="@android:style/TextAppearance.Material.Subhead">
|
||||||
<item name="android:fontFamily">@config/config_headlineFontFamilyMedium</item>
|
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">14sp</item>
|
||||||
<item name="android:textColor">?android:attr/colorAccent</item>
|
<item name="android:textColor">?android:attr/colorAccent</item>
|
||||||
</style>
|
</style>
|
||||||
@@ -334,12 +333,7 @@
|
|||||||
|
|
||||||
<style name="TextAppearance.SuggestionTitle"
|
<style name="TextAppearance.SuggestionTitle"
|
||||||
parent="@android:style/TextAppearance.Material.Subhead">
|
parent="@android:style/TextAppearance.Material.Subhead">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:textSize">16sp</item>
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="TextAppearance.SuggestionTitleV2"
|
|
||||||
parent="@android:style/TextAppearance.Material.Subhead">
|
|
||||||
<item name="android:fontFamily">@config/config_headlineFontFamily</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="TextAppearance.SuggestionSummary" parent="TextAppearance.Small">
|
<style name="TextAppearance.SuggestionSummary" parent="TextAppearance.Small">
|
||||||
@@ -474,7 +468,6 @@
|
|||||||
|
|
||||||
<style name="TextAppearance.SearchBar" parent="@android:style/TextAppearance.Material.Widget.Toolbar.Subtitle">
|
<style name="TextAppearance.SearchBar" parent="@android:style/TextAppearance.Material.Widget.Toolbar.Subtitle">
|
||||||
<item name="android:textSize">@dimen/search_bar_text_size</item>
|
<item name="android:textSize">@dimen/search_bar_text_size</item>
|
||||||
<item name="android:fontFamily">@config/config_headlineFontFamily</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="device_info_dialog_label">
|
<style name="device_info_dialog_label">
|
||||||
|
@@ -17,6 +17,7 @@ package com.android.settings.dashboard;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Typeface;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -303,8 +304,13 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
final List<Suggestion> suggestions =
|
final List<Suggestion> suggestions =
|
||||||
(List<Suggestion>) mDashboardData.getItemEntityByPosition(position);
|
(List<Suggestion>) mDashboardData.getItemEntityByPosition(position);
|
||||||
final int suggestionCount = suggestions.size();
|
final int suggestionCount = suggestions.size();
|
||||||
|
final Typeface fontMedium = Typeface.create(
|
||||||
|
mContext.getString(com.android.internal.R.string.config_headlineFontFamilyMedium),
|
||||||
|
Typeface.NORMAL);
|
||||||
|
holder.title.setTypeface(fontMedium);
|
||||||
if (suggestions != null && suggestionCount > 0) {
|
if (suggestions != null && suggestionCount > 0) {
|
||||||
holder.summary.setText("" + suggestionCount);
|
holder.summary.setText("" + suggestionCount);
|
||||||
|
holder.summary.setTypeface(fontMedium);
|
||||||
mSuggestionAdapter.setSuggestions(suggestions);
|
mSuggestionAdapter.setSuggestions(suggestions);
|
||||||
holder.data.setAdapter(mSuggestionAdapter);
|
holder.data.setAdapter(mSuggestionAdapter);
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.dashboard.suggestions;
|
|||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Typeface;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -122,6 +123,9 @@ public class SuggestionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
|
|||||||
holder.icon.setImageDrawable(drawable);
|
holder.icon.setImageDrawable(drawable);
|
||||||
holder.title.setText(suggestion.getTitle());
|
holder.title.setText(suggestion.getTitle());
|
||||||
holder.title.setSingleLine(suggestionCount == 1);
|
holder.title.setSingleLine(suggestionCount == 1);
|
||||||
|
holder.title.setTypeface(Typeface.create(
|
||||||
|
mContext.getString(com.android.internal.R.string.config_headlineFontFamilyMedium),
|
||||||
|
Typeface.NORMAL));
|
||||||
|
|
||||||
if (suggestionCount == 1) {
|
if (suggestionCount == 1) {
|
||||||
final CharSequence summary = suggestion.getSummary();
|
final CharSequence summary = suggestion.getSummary();
|
||||||
|
@@ -115,6 +115,7 @@ public class DashboardAdapterTest {
|
|||||||
final View itemView = mock(View.class);
|
final View itemView = mock(View.class);
|
||||||
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
||||||
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
||||||
|
when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class));
|
||||||
final DashboardAdapter.SuggestionContainerHolder holder =
|
final DashboardAdapter.SuggestionContainerHolder holder =
|
||||||
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@ public class DashboardAdapterTest {
|
|||||||
final View itemView = mock(View.class);
|
final View itemView = mock(View.class);
|
||||||
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
||||||
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
||||||
|
when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class));
|
||||||
final DashboardAdapter.SuggestionContainerHolder holder =
|
final DashboardAdapter.SuggestionContainerHolder holder =
|
||||||
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
||||||
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1", "pkg2", "pkg3", "pkg4");
|
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1", "pkg2", "pkg3", "pkg4");
|
||||||
@@ -188,6 +190,7 @@ public class DashboardAdapterTest {
|
|||||||
final View itemView = mock(View.class);
|
final View itemView = mock(View.class);
|
||||||
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
||||||
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class));
|
||||||
|
when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class));
|
||||||
final DashboardAdapter.SuggestionContainerHolder holder =
|
final DashboardAdapter.SuggestionContainerHolder holder =
|
||||||
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
||||||
|
|
||||||
@@ -213,6 +216,7 @@ public class DashboardAdapterTest {
|
|||||||
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
when(itemView.findViewById(R.id.suggestion_list)).thenReturn(data);
|
||||||
final TextView summary = mock(TextView.class);
|
final TextView summary = mock(TextView.class);
|
||||||
when(itemView.findViewById(android.R.id.summary)).thenReturn(summary);
|
when(itemView.findViewById(android.R.id.summary)).thenReturn(summary);
|
||||||
|
when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class));
|
||||||
final DashboardAdapter.SuggestionContainerHolder holder =
|
final DashboardAdapter.SuggestionContainerHolder holder =
|
||||||
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
new DashboardAdapter.SuggestionContainerHolder(itemView);
|
||||||
|
|
||||||
|
@@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
@@ -76,7 +77,7 @@ public class SuggestionAdapterTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
|
|
||||||
final Suggestion suggestion1 = new Suggestion.Builder("id1")
|
final Suggestion suggestion1 = new Suggestion.Builder("id1")
|
||||||
@@ -136,6 +137,7 @@ public class SuggestionAdapterTest {
|
|||||||
mSuggestionAdapter = new SuggestionAdapter(mContext, mSuggestionControllerMixin,
|
mSuggestionAdapter = new SuggestionAdapter(mContext, mSuggestionControllerMixin,
|
||||||
null /* savedInstanceState */, null /* callback */, null /* lifecycle */);
|
null /* savedInstanceState */, null /* callback */, null /* lifecycle */);
|
||||||
mSuggestionAdapter.setSuggestions(mOneSuggestion);
|
mSuggestionAdapter.setSuggestions(mOneSuggestion);
|
||||||
|
doReturn("sans").when(mContext).getString(anyInt());
|
||||||
|
|
||||||
// Bind twice
|
// Bind twice
|
||||||
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
||||||
@@ -177,6 +179,7 @@ public class SuggestionAdapterTest {
|
|||||||
mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
|
mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
|
||||||
new FrameLayout(RuntimeEnvironment.application),
|
new FrameLayout(RuntimeEnvironment.application),
|
||||||
mSuggestionAdapter.getItemViewType(0));
|
mSuggestionAdapter.getItemViewType(0));
|
||||||
|
doReturn("sans").when(mContext).getString(anyInt());
|
||||||
|
|
||||||
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
|
||||||
mSuggestionHolder.itemView.findViewById(android.R.id.primary).performClick();
|
mSuggestionHolder.itemView.findViewById(android.R.id.primary).performClick();
|
||||||
|
Reference in New Issue
Block a user