diff --git a/res/layout/homepage_dismissal_view.xml b/res/layout/homepage_dismissal_view.xml
index 20c657e7039..181fa3bac91 100644
--- a/res/layout/homepage_dismissal_view.xml
+++ b/res/layout/homepage_dismissal_view.xml
@@ -21,7 +21,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/homepage_card_dismissal_background"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:visibility="gone">
-
+ android:layout_height="match_parent"
+ android:paddingEnd="@dimen/homepage_card_padding_end"
+ android:paddingTop="@dimen/homepage_half_card_padding_top"
+ android:paddingBottom="@dimen/homepage_half_card_padding_bottom"
+ android:background="@color/contextual_card_background"
+ android:orientation="vertical">
-
+
+
+ android:layout_height="wrap_content"
+ android:maxLines="2"
+ android:minLines="1"
+ android:ellipsize="end"
+ android:layout_marginStart="@dimen/homepage_card_text_padding_start"
+ android:layout_marginTop="@dimen/homepage_half_card_title_margin_top"
+ android:textAppearance="@style/TextAppearance.ConditionCardTitle"/>
-
+
-
+
+
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/homepage_slice_tile.xml b/res/layout/homepage_slice_tile.xml
index b996c7e4777..9e8a86ce2eb 100644
--- a/res/layout/homepage_slice_tile.xml
+++ b/res/layout/homepage_slice_tile.xml
@@ -27,29 +27,16 @@
-
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:importantForAccessibility="no"/>
-
+
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardsFragment.java b/src/com/android/settings/homepage/contextualcards/ContextualCardsFragment.java
index 0cf553c13a1..0704ed82e3d 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardsFragment.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardsFragment.java
@@ -77,8 +77,7 @@ public class ContextualCardsFragment extends InstrumentedFragment implements
mCardsContainer.setAdapter(mContextualCardsAdapter);
mContextualCardManager.setListener(mContextualCardsAdapter);
mCardsContainer.setListener(this);
- mItemTouchHelper = new ItemTouchHelper(
- new SwipeDismissalDelegate(context, mContextualCardsAdapter));
+ mItemTouchHelper = new ItemTouchHelper(new SwipeDismissalDelegate(mContextualCardsAdapter));
mItemTouchHelper.attachToRecyclerView(mCardsContainer);
return rootView;
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 590afd216f3..c5ed5dbcd81 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -24,7 +24,6 @@ import android.util.ArraySet;
import android.util.Log;
import android.view.View;
import android.widget.Button;
-import android.widget.ViewFlipper;
import androidx.annotation.LayoutRes;
import androidx.annotation.VisibleForTesting;
@@ -142,7 +141,7 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
}
if (card.isPendingDismiss()) {
- flipCardToDismissalView(holder);
+ showDismissalView(holder);
mFlippedCardSet.add(holder);
}
}
@@ -170,12 +169,19 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
}
private void resetCardView(RecyclerView.ViewHolder holder) {
- final ViewFlipper viewFlipper = holder.itemView.findViewById(R.id.view_flipper);
- viewFlipper.setDisplayedChild(0 /* whichChild */);
+ holder.itemView.findViewById(R.id.dismissal_view).setVisibility(View.GONE);
+ getInitialView(holder).setVisibility(View.VISIBLE);
}
- private void flipCardToDismissalView(RecyclerView.ViewHolder holder) {
- final ViewFlipper viewFlipper = holder.itemView.findViewById(R.id.view_flipper);
- viewFlipper.showNext();
+ private void showDismissalView(RecyclerView.ViewHolder holder) {
+ holder.itemView.findViewById(R.id.dismissal_view).setVisibility(View.VISIBLE);
+ getInitialView(holder).setVisibility(View.INVISIBLE);
+ }
+
+ private View getInitialView(RecyclerView.ViewHolder viewHolder) {
+ if (viewHolder.getItemViewType() == VIEW_TYPE_HALF_WIDTH) {
+ return ((SliceHalfCardRendererHelper.HalfCardViewHolder) viewHolder).content;
+ }
+ return ((SliceFullCardRendererHelper.SliceViewHolder) viewHolder).sliceView;
}
}
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
index ddfd20ad8b8..bb58e6d077e 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
@@ -71,12 +71,10 @@ class SliceFullCardRendererHelper {
static class SliceViewHolder extends RecyclerView.ViewHolder {
public final SliceView sliceView;
- public final LinearLayout sliceViewWrapper;
public SliceViewHolder(View view) {
super(view);
sliceView = view.findViewById(R.id.slice_view);
- sliceViewWrapper = view.findViewById(R.id.slice_view_wrapper);
}
}
}
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegate.java b/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegate.java
index c08cc5de932..0f78575cf81 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegate.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegate.java
@@ -16,10 +16,8 @@
package com.android.settings.homepage.contextualcards.slices;
-import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
-import android.widget.ViewFlipper;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.ItemTouchHelper;
@@ -36,11 +34,9 @@ public class SwipeDismissalDelegate extends ItemTouchHelper.Callback {
void onSwiped(int position);
}
- private final Context mContext;
private final SwipeDismissalDelegate.Listener mListener;
- public SwipeDismissalDelegate(Context context, SwipeDismissalDelegate.Listener listener) {
- mContext = context;
+ public SwipeDismissalDelegate(SwipeDismissalDelegate.Listener listener) {
mListener = listener;
}
@@ -59,14 +55,10 @@ public class SwipeDismissalDelegate extends ItemTouchHelper.Callback {
switch (viewHolder.getItemViewType()) {
case SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH:
case SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH:
- //TODO(b/129438972): Convert this to a regular view.
- final ViewFlipper viewFlipper = viewHolder.itemView.findViewById(R.id.view_flipper);
-
- // As we are using ViewFlipper to switch between the initial view and
- // dismissal view, here we are making sure the current displayed view is the
- // initial view of either slice full card or half card, and only allow swipe on
- // these two types.
- if (viewFlipper.getCurrentView().getId() != getInitialViewId(viewHolder)) {
+ // Here we are making sure the current displayed view is the initial view of
+ // either slice full card or half card, and only allow swipe on these two types.
+ if (viewHolder.itemView.findViewById(R.id.dismissal_view).getVisibility()
+ == View.VISIBLE) {
// Disable swiping when we are in the dismissal view
return 0;
}
@@ -114,13 +106,6 @@ public class SwipeDismissalDelegate extends ItemTouchHelper.Callback {
getDefaultUIUtil().onDraw(c, recyclerView, view, dX, dY, actionState, isCurrentlyActive);
}
- private int getInitialViewId(RecyclerView.ViewHolder viewHolder) {
- if (viewHolder.getItemViewType() == SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH) {
- return R.id.content;
- }
- return R.id.slice_view_wrapper;
- }
-
/**
* Get the foreground view from the {@link android.widget.FrameLayout} as we only swipe
* the foreground out in {@link SwipeDismissalDelegate#onChildDraw} and gets the view
@@ -132,6 +117,6 @@ public class SwipeDismissalDelegate extends ItemTouchHelper.Callback {
if (viewHolder.getItemViewType() == SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH) {
return ((SliceHalfCardRendererHelper.HalfCardViewHolder) viewHolder).content;
}
- return ((SliceFullCardRendererHelper.SliceViewHolder) viewHolder).sliceViewWrapper;
+ return ((SliceFullCardRendererHelper.SliceViewHolder) viewHolder).sliceView;
}
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
index 1f58550d0be..fff17653f30 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
@@ -28,14 +28,12 @@ import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
-import android.widget.ViewFlipper;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.slice.Slice;
-import androidx.slice.widget.SliceView;
import com.android.settings.R;
import com.android.settings.homepage.contextualcards.ContextualCard;
@@ -116,16 +114,15 @@ public class SliceContextualCardRendererTest {
}
@Test
- public void bindView_isPendingDismiss_shouldFlipToDismissalView() {
+ public void bindView_isPendingDismiss_shouldShowDismissalView() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
- final ViewFlipper viewFlipper = viewHolder.itemView.findViewById(R.id.view_flipper);
final View dismissalView = viewHolder.itemView.findViewById(R.id.dismissal_view);
final ContextualCard card = buildContextualCard(
TEST_SLICE_URI).mutate().setIsPendingDismiss(true).build();
mRenderer.bindView(viewHolder, card);
- assertThat(viewFlipper.getCurrentView()).isEqualTo(dismissalView);
+ assertThat(dismissalView.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
@@ -140,24 +137,29 @@ public class SliceContextualCardRendererTest {
}
@Test
- public void viewClick_keepCard_shouldFlipBackToSlice() {
+ public void viewClick_keepCard_shouldShowSlice() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
+ final View sliceView = viewHolder.itemView.findViewById(R.id.slice_view);
+ final View dismissalView = viewHolder.itemView.findViewById(R.id.dismissal_view);
final Button btnKeep = viewHolder.itemView.findViewById(R.id.keep);
- final ViewFlipper viewFlipper = viewHolder.itemView.findViewById(R.id.view_flipper);
- mRenderer.bindView(viewHolder, buildContextualCard(TEST_SLICE_URI));
- viewFlipper.setDisplayedChild(1);
+ final ContextualCard card = buildContextualCard(
+ TEST_SLICE_URI).mutate().setIsPendingDismiss(true).build();
+ mRenderer.bindView(viewHolder, card);
btnKeep.performClick();
- assertThat(viewFlipper.getCurrentView().getId()).isEqualTo(R.id.slice_view_wrapper);
+ assertThat(dismissalView.getVisibility()).isEqualTo(View.GONE);
+ assertThat(sliceView.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void viewClick_keepCard_shouldRemoveViewHolderFromSet() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
final Button btnKeep = viewHolder.itemView.findViewById(R.id.keep);
- mRenderer.bindView(viewHolder, buildContextualCard(TEST_SLICE_URI));
- mRenderer.mFlippedCardSet.add(viewHolder);
+ final ContextualCard card = buildContextualCard(
+ TEST_SLICE_URI).mutate().setIsPendingDismiss(true).build();
+ mRenderer.bindView(viewHolder, card);
+ assertThat(mRenderer.mFlippedCardSet).contains(viewHolder);
btnKeep.performClick();
@@ -168,11 +170,12 @@ public class SliceContextualCardRendererTest {
public void viewClick_removeCard_shouldRemoveViewHolderFromSet() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
final Button btnRemove = viewHolder.itemView.findViewById(R.id.remove);
- final ContextualCard contextualCard = buildContextualCard(TEST_SLICE_URI);
- mRenderer.bindView(viewHolder, contextualCard);
+ final ContextualCard card = buildContextualCard(
+ TEST_SLICE_URI).mutate().setIsPendingDismiss(true).build();
+ mRenderer.bindView(viewHolder, card);
+ assertThat(mRenderer.mFlippedCardSet).contains(viewHolder);
doReturn(mController).when(mControllerRendererPool).getController(mActivity,
ContextualCard.CardType.SLICE);
- mRenderer.mFlippedCardSet.add(viewHolder);
btnRemove.performClick();
@@ -195,16 +198,19 @@ public class SliceContextualCardRendererTest {
}
@Test
- public void onStop_cardIsFlipped_shouldFlipBack() {
+ public void onStop_cardIsInDismissalView_shouldResetToSliceView() {
final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
- final ViewFlipper viewFlipper = viewHolder.itemView.findViewById(R.id.view_flipper);
- mRenderer.bindView(viewHolder, buildContextualCard(TEST_SLICE_URI));
- viewFlipper.setDisplayedChild(1);
- mRenderer.mFlippedCardSet.add(viewHolder);
+ final View sliceView = viewHolder.itemView.findViewById(R.id.slice_view);
+ final View dismissalView = viewHolder.itemView.findViewById(R.id.dismissal_view);
+ final ContextualCard card = buildContextualCard(
+ TEST_SLICE_URI).mutate().setIsPendingDismiss(true).build();
+ mRenderer.bindView(viewHolder, card);
+ assertThat(mRenderer.mFlippedCardSet).contains(viewHolder);
mRenderer.onStop();
- assertThat(viewFlipper.getCurrentView().getId()).isEqualTo(R.id.slice_view_wrapper);
+ assertThat(sliceView.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(dismissalView.getVisibility()).isEqualTo(View.GONE);
}
private RecyclerView.ViewHolder getSliceViewHolder() {
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegateTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegateTest.java
index d7df141aa61..8338ae407db 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegateTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SwipeDismissalDelegateTest.java
@@ -28,7 +28,6 @@ import static org.mockito.Mockito.verify;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
-import android.widget.ViewFlipper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -68,7 +67,7 @@ public class SwipeDismissalDelegateTest {
activityController.create();
mRecyclerView = new RecyclerView(mActivity);
mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
- mDismissalDelegate = new SwipeDismissalDelegate(mActivity, mDismissalDelegateListener);
+ mDismissalDelegate = new SwipeDismissalDelegate(mDismissalDelegateListener);
}
@Test
@@ -86,22 +85,16 @@ public class SwipeDismissalDelegateTest {
@Test
public void getMovementFlags_dismissalView_shouldDisableSwipe() {
final RecyclerView.ViewHolder holder = getSliceViewHolder();
- final ViewFlipper viewFlipper = holder.itemView.findViewById(R.id.view_flipper);
- viewFlipper.showNext();
- final View dismissalView = holder.itemView.findViewById(R.id.dismissal_view);
+ holder.itemView.findViewById(R.id.dismissal_view).setVisibility(View.VISIBLE);
- assertThat(viewFlipper.getCurrentView()).isEqualTo(dismissalView);
assertThat(mDismissalDelegate.getMovementFlags(mRecyclerView, holder)).isEqualTo(0);
}
@Test
public void getMovementFlags_SliceViewHolder_shouldEnableSwipe() {
final RecyclerView.ViewHolder holder = getSliceViewHolder();
- final ViewFlipper viewFlipper = holder.itemView.findViewById(R.id.view_flipper);
- viewFlipper.setDisplayedChild(0);
- final View sliceViewWrapper = holder.itemView.findViewById(R.id.slice_view_wrapper);
+ holder.itemView.findViewById(R.id.dismissal_view).setVisibility(View.GONE);
- assertThat(viewFlipper.getCurrentView()).isEqualTo(sliceViewWrapper);
assertThat(mDismissalDelegate.getMovementFlags(mRecyclerView, getSliceViewHolder()))
.isNotEqualTo(0);
}