Merge "Add dismissal mechanism for contextual cards."

This commit is contained in:
TreeHugger Robot
2018-11-13 09:13:46 +00:00
committed by Android (Google) Code Review
12 changed files with 196 additions and 37 deletions

View File

@@ -28,5 +28,7 @@ public interface ContextualCardController {
void onActionClick(ContextualCard card);
void onDismissed(ContextualCard card);
void setCardUpdateListener(ContextualCardUpdateListener listener);
}

View File

@@ -146,14 +146,14 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
onContextualCardUpdated(cards.stream().collect(groupingBy(ContextualCard::getCardType)));
}
void setListener(ContextualCardUpdateListener listener) {
mListener = listener;
}
public ControllerRendererPool getControllerRendererPool() {
return mControllerRendererPool;
}
void setListener(ContextualCardUpdateListener listener) {
mListener = listener;
}
static class CardContentLoaderCallbacks implements
LoaderManager.LoaderCallbacks<List<ContextualCard>> {

View File

@@ -126,7 +126,8 @@ public class ControllerRendererPool {
if (ConditionContextualCardRenderer.class == clz) {
return new ConditionContextualCardRenderer(context, this /* controllerRendererPool */);
} else if (SliceContextualCardRenderer.class == clz) {
return new SliceContextualCardRenderer(context, lifecycleOwner);
return new SliceContextualCardRenderer(context, lifecycleOwner,
this /* controllerRendererPool */);
} else if (LegacySuggestionContextualCardRenderer.class == clz) {
return new LegacySuggestionContextualCardRenderer(context,
this /* controllerRendererPool */);

View File

@@ -77,6 +77,11 @@ public class ConditionContextualCardController implements ContextualCardControll
@Override
public void onActionClick(ContextualCard contextualCard) {
}
@Override
public void onDismissed(ContextualCard contextualCard) {
final ConditionalContextualCard card = (ConditionalContextualCard) contextualCard;
mConditionManager.onActionClick(card.getConditionId());
}

View File

@@ -112,8 +112,8 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
metricsFeatureProvider.action(
viewContext, MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
card.getMetricsConstant());
mControllerRendererPool.getController(mContext, card.getCardType()).onActionClick(
card);
mControllerRendererPool.getController(mContext, card.getCardType())
.onDismissed(card);
});
} else {
button.setVisibility(View.GONE);

View File

@@ -86,6 +86,11 @@ public class LegacySuggestionContextualCardController implements ContextualCardC
}
@Override
public void onDismissed(ContextualCard card) {
}
@Override
public void setCardUpdateListener(ContextualCardUpdateListener listener) {
mCardUpdateListener = listener;

View File

@@ -25,6 +25,10 @@ import com.android.settings.homepage.contextualcards.ContextualCardUpdateListene
*/
public class SliceContextualCardController implements ContextualCardController {
private static final String TAG = "SliceCardController";
private ContextualCardUpdateListener mCardUpdateListener;
@Override
public int getCardType() {
return ContextualCard.CardType.SLICE;
@@ -37,11 +41,16 @@ public class SliceContextualCardController implements ContextualCardController {
@Override
public void onActionClick(ContextualCard card) {
//TODO(b/113783548): Implement feedback mechanism
}
@Override
public void onDismissed(ContextualCard card) {
//TODO(b/113783548): Mark this card as dismissed in db and reload loader.
}
@Override
public void setCardUpdateListener(ContextualCardUpdateListener listener) {
mCardUpdateListener = listener;
}
}

View File

@@ -22,6 +22,8 @@ import android.net.Uri;
import android.util.ArrayMap;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ViewFlipper;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -37,6 +39,7 @@ import androidx.slice.widget.SliceView;
import com.android.settings.R;
import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.homepage.contextualcards.ContextualCardRenderer;
import com.android.settings.homepage.contextualcards.ControllerRendererPool;
import java.util.Map;
@@ -54,11 +57,14 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer,
private final Context mContext;
private final LifecycleOwner mLifecycleOwner;
private final ControllerRendererPool mControllerRendererPool;
public SliceContextualCardRenderer(Context context, LifecycleOwner lifecycleOwner) {
public SliceContextualCardRenderer(Context context, LifecycleOwner lifecycleOwner,
ControllerRendererPool controllerRendererPool) {
mContext = context;
mLifecycleOwner = lifecycleOwner;
mSliceLiveDataMap = new ArrayMap<>();
mControllerRendererPool = controllerRendererPool;
}
@Override
@@ -104,6 +110,27 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer,
// Set this listener so we can log the interaction users make on the slice
cardHolder.sliceView.setOnSliceActionListener(this);
initDismissalActions(cardHolder, card);
}
private void initDismissalActions(SliceViewHolder cardHolder, ContextualCard card) {
final ViewFlipper viewFlipper = cardHolder.itemView.findViewById(R.id.viewFlipper);
cardHolder.sliceView.setOnLongClickListener(v -> {
viewFlipper.showNext();
return true;
});
final Button btnKeep = cardHolder.itemView.findViewById(R.id.keep);
btnKeep.setOnClickListener(v -> {
viewFlipper.showPrevious();
});
final Button btnRemove = cardHolder.itemView.findViewById(R.id.remove);
btnRemove.setOnClickListener(v -> {
mControllerRendererPool.getController(mContext, card.getCardType()).onDismissed(
card);
});
}
@Override