Remove the specific UX of Deferred Setup card

Bug: 142927894
Test: visual, robotests
Change-Id: If93506fb11c6417967fab3d082b19947adef0d61
This commit is contained in:
Jason Chiu
2020-01-20 09:02:14 +00:00
parent 09f634edfc
commit 1b0fbfeae6
12 changed files with 6 additions and 477 deletions

View File

@@ -1,72 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ContextualCardStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="start"
android:orientation="vertical"
android:paddingEnd="@dimen/contextual_card_padding_end"
android:paddingTop="@dimen/contextual_deferred_setup_card_padding_top"
android:paddingBottom="@dimen/contextual_deferred_setup_card_padding_bottom">
<ImageView
android:id="@android:id/icon"
android:layout_width="@dimen/contextual_card_icon_size"
android:layout_height="@dimen/contextual_card_icon_size"
android:layout_marginStart="@dimen/contextual_card_icon_padding_start"/>
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/contextual_card_text_padding_start"
android:layout_marginTop="@dimen/contextual_deferred_setup_card_title_margin_top"
android:ellipsize="end"
android:maxLines="2"
android:minLines="1"
android:textAppearance="@style/TextAppearance.DeferredSetupCardTitle"/>
<TextView
android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/contextual_card_text_padding_start"
android:layout_marginTop="@dimen/contextual_deferred_setup_card_summary_margin_top"
android:ellipsize="end"
android:maxLines="2"
android:minLines="1"
android:textAppearance="@style/TextAppearance.DeferredSetupCardSummary"/>
<Button
android:id="@+id/finish_setup"
style="@style/DeferredSetupCardButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/contextual_card_text_padding_start"
android:layout_marginTop="@dimen/contextual_deferred_setup_card_button_margin_top"
android:text="@string/suggestion_button_text"/>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -342,15 +342,6 @@
<dimen name="contextual_half_card_padding_top">12dp</dimen>
<dimen name="contextual_half_card_padding_bottom">16dp</dimen>
<dimen name="contextual_half_card_title_margin_top">12dp</dimen>
<dimen name="contextual_deferred_setup_card_padding_top">16dp</dimen>
<dimen name="contextual_deferred_setup_card_padding_bottom">12dp</dimen>
<dimen name="contextual_deferred_setup_card_title_margin_top">12dp</dimen>
<dimen name="contextual_deferred_setup_card_summary_margin_top">2dp</dimen>
<dimen name="contextual_deferred_setup_card_button_margin_top">8dp</dimen>
<dimen name="contextual_deferred_setup_card_button_padding_top">8dp</dimen>
<dimen name="contextual_deferred_setup_card_button_padding_bottom">8dp</dimen>
<dimen name="contextual_deferred_setup_card_button_padding_start">24dp</dimen>
<dimen name="contextual_deferred_setup_card_button_padding_end">24dp</dimen>
<!-- Homepage dismissal cards size and padding -->
<dimen name="contextual_card_dismissal_margin_top">12dp</dimen>

View File

@@ -462,26 +462,6 @@
<item name="rowStyle">@style/SliceRowStyle.Settings</item>
</style>
<style name="TextAppearance.DeferredSetupCardTitle">
<item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
<item name="android:textSize">16sp</item>
</style>
<style name="TextAppearance.DeferredSetupCardSummary"
parent="@*android:style/TextAppearance.DeviceDefault.Body1">
<item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
<style name="DeferredSetupCardButton" parent="android:Widget.DeviceDefault.Button.Colored">
<item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
<item name="android:paddingBottom">@dimen/contextual_deferred_setup_card_button_padding_bottom</item>
<item name="android:paddingEnd">@dimen/contextual_deferred_setup_card_button_padding_end</item>
<item name="android:paddingStart">@dimen/contextual_deferred_setup_card_button_padding_start</item>
<item name="android:paddingTop">@dimen/contextual_deferred_setup_card_button_padding_top</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">14sp</item>
</style>
<style name="SliceViewStyle">
<item name="rowStyle">@style/SliceRowStyle</item>
<item name="android:background">?android:attr/colorBackgroundFloating</item>

View File

@@ -79,10 +79,6 @@ public class ContextualCardLookupTable {
LegacySuggestionContextualCardRenderer.VIEW_TYPE,
LegacySuggestionContextualCardController.class,
LegacySuggestionContextualCardRenderer.class));
add(new ControllerRendererMapping(CardType.SLICE,
SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP,
SliceContextualCardController.class,
SliceContextualCardRenderer.class));
add(new ControllerRendererMapping(CardType.SLICE,
SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH,
SliceContextualCardController.class,

View File

@@ -17,7 +17,6 @@
package com.android.settings.homepage.contextualcards;
import static com.android.settings.homepage.contextualcards.ContextualCardLoader.CARD_CONTENT_LOADER_ID;
import static com.android.settings.intelligence.ContextualCardProto.ContextualCard.Category.DEFERRED_SETUP_VALUE;
import static com.android.settings.intelligence.ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE;
import static java.util.stream.Collectors.groupingBy;
@@ -309,9 +308,7 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
if (cards.isEmpty()) {
return cards;
}
final List<ContextualCard> result = getCardsWithDeferredSetupViewType(cards);
return getCardsWithSuggestionViewType(result);
return getCardsWithSuggestionViewType(cards);
}
@VisibleForTesting
@@ -341,22 +338,6 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
return result;
}
private List<ContextualCard> getCardsWithDeferredSetupViewType(List<ContextualCard> cards) {
// Find the deferred setup card and assign it with proper view type.
// Reason: The returned card list will mix deferred setup card and other suggestion cards
// after device running 1 days.
final List<ContextualCard> result = new ArrayList<>(cards);
for (int index = 0; index < result.size(); index++) {
final ContextualCard card = cards.get(index);
if (card.getCategory() == DEFERRED_SETUP_VALUE) {
result.set(index, card.mutate().setViewType(
SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP).build());
return result;
}
}
return result;
}
@VisibleForTesting
List<ContextualCard> getCardsToKeep(List<ContextualCard> cards) {
if (mSavedCards != null) {

View File

@@ -54,7 +54,6 @@ import java.util.Set;
public class SliceContextualCardRenderer implements ContextualCardRenderer, LifecycleObserver {
public static final int VIEW_TYPE_FULL_WIDTH = R.layout.contextual_slice_full_tile;
public static final int VIEW_TYPE_HALF_WIDTH = R.layout.contextual_slice_half_tile;
public static final int VIEW_TYPE_DEFERRED_SETUP = R.layout.contextual_slice_deferred_setup;
private static final String TAG = "SliceCardRenderer";
@@ -66,7 +65,6 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
private final Context mContext;
private final LifecycleOwner mLifecycleOwner;
private final ControllerRendererPool mControllerRendererPool;
private final SliceDeferredSetupCardRendererHelper mDeferredSetupCardHelper;
private final SliceFullCardRendererHelper mFullCardHelper;
private final SliceHalfCardRendererHelper mHalfCardHelper;
@@ -80,14 +78,11 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
mLifecycleOwner.getLifecycle().addObserver(this);
mFullCardHelper = new SliceFullCardRendererHelper(context);
mHalfCardHelper = new SliceHalfCardRendererHelper(context);
mDeferredSetupCardHelper = new SliceDeferredSetupCardRendererHelper(context);
}
@Override
public RecyclerView.ViewHolder createViewHolder(View view, @LayoutRes int viewType) {
if (viewType == VIEW_TYPE_DEFERRED_SETUP) {
return mDeferredSetupCardHelper.createViewHolder(view);
} else if (viewType == VIEW_TYPE_HALF_WIDTH) {
if (viewType == VIEW_TYPE_HALF_WIDTH) {
return mHalfCardHelper.createViewHolder(view);
}
return mFullCardHelper.createViewHolder(view);
@@ -132,9 +127,7 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
return;
}
if (holder.getItemViewType() == VIEW_TYPE_DEFERRED_SETUP) {
mDeferredSetupCardHelper.bindView(holder, card, slice);
} else if (holder.getItemViewType() == VIEW_TYPE_HALF_WIDTH) {
if (holder.getItemViewType() == VIEW_TYPE_HALF_WIDTH) {
mHalfCardHelper.bindView(holder, card, slice);
} else {
mFullCardHelper.bindView(holder, card, slice);
@@ -144,13 +137,7 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
}
});
if (holder.getItemViewType()
== VIEW_TYPE_DEFERRED_SETUP) {// Deferred setup is never dismissible.
} else if (holder.getItemViewType() == VIEW_TYPE_HALF_WIDTH) {
initDismissalActions(holder, card);
} else {
initDismissalActions(holder, card);
}
initDismissalActions(holder, card);
if (card.isPendingDismiss()) {
showDismissalView(holder);

View File

@@ -1,97 +0,0 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.homepage.contextualcards.slices;
import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.slice.Slice;
import androidx.slice.SliceMetadata;
import androidx.slice.core.SliceAction;
import androidx.slice.widget.EventInfo;
import com.android.settings.R;
import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.homepage.contextualcards.logging.ContextualCardLogUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
/**
* Card renderer helper for {@link ContextualCard} built as slice deferred setup card.
*/
class SliceDeferredSetupCardRendererHelper {
private static final String TAG = "SliceDSCRendererHelper";
private final Context mContext;
SliceDeferredSetupCardRendererHelper(Context context) {
mContext = context;
}
RecyclerView.ViewHolder createViewHolder(View view) {
return new DeferredSetupCardViewHolder(view);
}
void bindView(RecyclerView.ViewHolder holder, ContextualCard card, Slice slice) {
final DeferredSetupCardViewHolder view = (DeferredSetupCardViewHolder) holder;
final SliceMetadata sliceMetadata = SliceMetadata.from(mContext, slice);
final SliceAction primaryAction = sliceMetadata.getPrimaryAction();
view.icon.setImageDrawable(primaryAction.getIcon().loadDrawable(mContext));
view.title.setText(primaryAction.getTitle());
view.summary.setText(sliceMetadata.getSubtitle());
view.button.setOnClickListener(v -> {
try {
primaryAction.getAction().send();
} catch (PendingIntent.CanceledException e) {
Log.w(TAG, "Failed to start intent " + primaryAction.getTitle());
}
final String log = ContextualCardLogUtils.buildCardClickLog(card, 0 /* row */,
EventInfo.ACTION_TYPE_CONTENT, view.getAdapterPosition());
final MetricsFeatureProvider metricsFeatureProvider =
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
metricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_CONTEXTUAL_CARD_CLICK, log);
});
}
static class DeferredSetupCardViewHolder extends RecyclerView.ViewHolder {
public final LinearLayout content;
public final ImageView icon;
public final TextView title;
public final TextView summary;
public final Button button;
public DeferredSetupCardViewHolder(View itemView) {
super(itemView);
content = itemView.findViewById(R.id.content);
icon = itemView.findViewById(android.R.id.icon);
title = itemView.findViewById(android.R.id.title);
summary = itemView.findViewById(android.R.id.summary);
button = itemView.findViewById(R.id.finish_setup);
}
}
}

View File

@@ -17,7 +17,6 @@
package com.android.settings.homepage.contextualcards;
import static com.android.settings.homepage.contextualcards.ContextualCardManager.KEY_CONTEXTUAL_CARDS;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH;
@@ -541,55 +540,6 @@ public class ContextualCardManagerTest {
}
}
@Test
public void getCardsWithViewType_onlyDeferredSetupCard_shouldHaveDeferredSetupCard() {
final List<ContextualCard> oneDeferredSetupCards = getDeferredSetupCardList();
final List<ContextualCard> result = mManager.getCardsWithViewType(oneDeferredSetupCards);
assertThat(result).hasSize(1);
assertThat(result.get(0).getViewType()).isEqualTo(VIEW_TYPE_DEFERRED_SETUP);
}
@Test
public void getCardsWithViewType_hasDeferredSetupCard_shouldHaveDeferredSetupCard() {
final List<Integer> categories = Arrays.asList(
ContextualCardProto.ContextualCard.Category.DEFERRED_SETUP_VALUE,
ContextualCardProto.ContextualCard.Category.IMPORTANT_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE
);
final List<ContextualCard> cards = buildCategoriedCards(getContextualCardList(),
categories);
final List<ContextualCard> result = mManager.getCardsWithViewType(cards);
assertThat(result).hasSize(5);
assertThat(result.get(0).getViewType()).isEqualTo(VIEW_TYPE_DEFERRED_SETUP);
}
@Test
public void getCardsWithViewType_noDeferredSetupCard_shouldNotHaveDeferredSetupCard() {
final List<Integer> categories = Arrays.asList(
ContextualCardProto.ContextualCard.Category.IMPORTANT_VALUE,
ContextualCardProto.ContextualCard.Category.IMPORTANT_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE,
ContextualCardProto.ContextualCard.Category.SUGGESTION_VALUE
);
final List<ContextualCard> cards = buildCategoriedCards(
getContextualCardList(), categories);
final List<ContextualCard> result = mManager.getCardsWithViewType(cards);
assertThat(result).hasSize(5);
for (int i = 0; i < result.size(); i++) {
assertThat(result.get(i).getViewType()).isNotEqualTo(
ContextualCardProto.ContextualCard.Category.DEFERRED_SETUP_VALUE);
}
}
@Test
public void getCardsToKeep_hasSavedCard_shouldResetSavedCards() {
final List<String> savedCardNames = new ArrayList<>();
@@ -655,16 +605,4 @@ public class ContextualCardManagerTest {
.build());
return cards;
}
private List<ContextualCard> getDeferredSetupCardList() {
final List<ContextualCard> cards = new ArrayList<>();
cards.add(new ContextualCard.Builder()
.setName("deferred_setup")
.setCardType(ContextualCard.CardType.SLICE)
.setCategory(ContextualCardProto.ContextualCard.Category.DEFERRED_SETUP_VALUE)
.setSliceUri(new Uri.Builder().appendPath("test_deferred_setup_path").build())
.setViewType(VIEW_TYPE_FULL_WIDTH)
.build());
return cards;
}
}

View File

@@ -16,9 +16,6 @@
package com.android.settings.homepage.contextualcards;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH;
import static com.google.common.truth.Truth.assertThat;
import android.app.Activity;
@@ -39,7 +36,6 @@ import com.android.settings.homepage.contextualcards.slices.SliceContextualCardR
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
@@ -156,7 +152,7 @@ public class ContextualCardsAdapterTest {
.setName("test_name")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(TEST_SLICE_URI)
.setViewType(VIEW_TYPE_DEFERRED_SETUP)
.setViewType(SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
.build());
cards.add(new ContextualCard.Builder()
.setName("test_name_1")
@@ -172,7 +168,7 @@ public class ContextualCardsAdapterTest {
.setName(TEST_SLICE_NAME)
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(sliceUri)
.setViewType(VIEW_TYPE_FULL_WIDTH)
.setViewType(SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH)
.build();
}

View File

@@ -16,13 +16,11 @@
package com.android.settings.homepage.contextualcards.slices;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.app.Activity;
@@ -162,15 +160,6 @@ public class SliceContextualCardRendererTest {
assertThat(swipeBg.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void bindView_deferredSetupCard_shouldNotCrash() {
final RecyclerView.ViewHolder viewHolder = getDeferredSetupViewHolder();
final ContextualCard card = buildContextualCard(TEST_SLICE_URI);
mRenderer.mSliceLiveDataMap.put(TEST_SLICE_URI, mSliceLiveData);
mRenderer.bindView(viewHolder, card);
}
@Test
public void viewClick_keepCard_shouldShowSlice() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
@@ -257,18 +246,6 @@ public class SliceContextualCardRendererTest {
return mRenderer.createViewHolder(view, VIEW_TYPE_FULL_WIDTH);
}
private RecyclerView.ViewHolder getDeferredSetupViewHolder() {
final RecyclerView recyclerView = new RecyclerView(mActivity);
recyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
final View view = LayoutInflater.from(mActivity)
.inflate(VIEW_TYPE_DEFERRED_SETUP, recyclerView, false);
final RecyclerView.ViewHolder viewHolder = spy(
new SliceDeferredSetupCardRendererHelper.DeferredSetupCardViewHolder(view));
doReturn(VIEW_TYPE_DEFERRED_SETUP).when(viewHolder).getItemViewType();
return viewHolder;
}
private ContextualCard buildContextualCard(Uri sliceUri) {
return new ContextualCard.Builder()
.setName("test_name")

View File

@@ -1,130 +0,0 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.homepage.contextualcards.slices;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP;
import static com.android.settings.homepage.contextualcards.slices.SliceDeferredSetupCardRendererHelper.DeferredSetupCardViewHolder;
import static com.google.common.truth.Truth.assertThat;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import androidx.core.graphics.drawable.IconCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.slice.Slice;
import androidx.slice.SliceProvider;
import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SliceAction;
import androidx.slice.widget.SliceLiveData;
import com.android.settings.R;
import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.intelligence.ContextualCardProto;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class SliceDeferredSetupCardRendererHelperTest {
private static final Uri TEST_SLICE_URI = Uri.parse("content://test/test");
private static final CharSequence TITLE = "test_title";
private static final CharSequence SUMMARY = "test_summary";
private Activity mActivity;
private SliceDeferredSetupCardRendererHelper mHelper;
@Before
public void setUp() {
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mActivity = Robolectric.buildActivity(Activity.class).create().get();
mActivity.setTheme(R.style.Theme_Settings_Home);
mHelper = new SliceDeferredSetupCardRendererHelper(mActivity);
}
@Test
public void createViewHolder_shouldAlwaysReturnCustomViewHolder() {
final RecyclerView.ViewHolder viewHolder = getDeferredSetupCardViewHolder();
assertThat(viewHolder).isInstanceOf(
DeferredSetupCardViewHolder.class);
}
@Test
public void bindView_shouldSetTitle() {
final RecyclerView.ViewHolder viewHolder = getDeferredSetupCardViewHolder();
mHelper.bindView(viewHolder, buildContextualCard(), buildSlice());
assertThat(((DeferredSetupCardViewHolder) viewHolder).title.getText()).isEqualTo(TITLE);
}
@Test
public void bindView_shouldSetSummary() {
final RecyclerView.ViewHolder viewHolder = getDeferredSetupCardViewHolder();
mHelper.bindView(viewHolder, buildContextualCard(), buildSlice());
assertThat(((DeferredSetupCardViewHolder) viewHolder).summary.getText()).isEqualTo(SUMMARY);
}
private RecyclerView.ViewHolder getDeferredSetupCardViewHolder() {
final RecyclerView recyclerView = new RecyclerView(mActivity);
recyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
final View view = LayoutInflater.from(mActivity).inflate(VIEW_TYPE_DEFERRED_SETUP,
recyclerView, false);
return mHelper.createViewHolder(view);
}
private ContextualCard buildContextualCard() {
return new ContextualCard.Builder()
.setName("test_name")
.setCategory(ContextualCardProto.ContextualCard.Category.DEFERRED_SETUP_VALUE)
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(TEST_SLICE_URI)
.setViewType(VIEW_TYPE_DEFERRED_SETUP)
.build();
}
private Slice buildSlice() {
final IconCompat icon = IconCompat.createWithResource(mActivity, R.drawable.empty_icon);
final PendingIntent pendingIntent = PendingIntent.getActivity(
mActivity,
TITLE.hashCode() /* requestCode */,
new Intent("test action"),
0 /* flags */);
final SliceAction action
= SliceAction.createDeeplink(pendingIntent, icon, ListBuilder.SMALL_IMAGE, TITLE);
return new ListBuilder(mActivity, TEST_SLICE_URI, ListBuilder.INFINITY)
.addRow(new ListBuilder.RowBuilder()
.addEndItem(icon, ListBuilder.ICON_IMAGE)
.setTitle(TITLE)
.setSubtitle(SUMMARY)
.setPrimaryAction(action))
.build();
}
}

View File

@@ -16,8 +16,6 @@
package com.android.settings.homepage.contextualcards.slices;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_DEFERRED_SETUP;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -35,7 +33,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardRenderer;
import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardRenderer.ConditionalCardHolder;
import com.android.settings.homepage.contextualcards.slices.SliceDeferredSetupCardRendererHelper.DeferredSetupCardViewHolder;
import com.android.settings.homepage.contextualcards.slices.SliceFullCardRendererHelper.SliceViewHolder;
import org.junit.Before;
@@ -76,12 +73,6 @@ public class SwipeDismissalDelegateTest {
.isEqualTo(0);
}
@Test
public void getMovementFlags_deferredSetupViewHolder_shouldDisableSwipe() {
assertThat(mDismissalDelegate.getMovementFlags(mRecyclerView, getDeferredSetupViewHolder()))
.isEqualTo(0);
}
@Test
public void getMovementFlags_dismissalView_shouldDisableSwipe() {
final RecyclerView.ViewHolder holder = getSliceViewHolder();
@@ -126,13 +117,4 @@ public class SwipeDismissalDelegateTest {
return viewHolder;
}
private RecyclerView.ViewHolder getDeferredSetupViewHolder() {
final View view = LayoutInflater.from(mActivity)
.inflate(VIEW_TYPE_DEFERRED_SETUP, mRecyclerView, false);
final RecyclerView.ViewHolder viewHolder = spy(new DeferredSetupCardViewHolder(view));
doReturn(VIEW_TYPE_DEFERRED_SETUP).when(viewHolder).getItemViewType();
return viewHolder;
}
}