conditions) {
if (conditions == null) {
return null;
@@ -407,20 +310,14 @@ public class DashboardData {
/**
* Builder used to build the ItemsData
*
- * {@link #mExpandedCondition}, {@link #mSuggestionConditionMode} and {@link #mSuggestionMode}
- * have default value while others are not.
+ * {@link #mSuggestionConditionMode} have default value while others are not.
*/
public static class Builder {
- @Deprecated
- private int mSuggestionMode = SUGGESTION_MODE_DEFAULT;
- @Deprecated
- private Condition mExpandedCondition = null;
private @HeaderMode int mSuggestionConditionMode = HEADER_MODE_DEFAULT;
private List mCategories;
private List mConditions;
private List mSuggestions;
- private boolean mCombineSuggestionAndCondition;
public Builder() {
}
@@ -429,10 +326,7 @@ public class DashboardData {
mCategories = dashboardData.mCategories;
mConditions = dashboardData.mConditions;
mSuggestions = dashboardData.mSuggestions;
- mSuggestionMode = dashboardData.mSuggestionMode;
- mExpandedCondition = dashboardData.mExpandedCondition;
mSuggestionConditionMode = dashboardData.mSuggestionConditionMode;
- mCombineSuggestionAndCondition = dashboardData.mCombineSuggestionAndCondition;
}
public Builder setCategories(List categories) {
@@ -450,27 +344,11 @@ public class DashboardData {
return this;
}
- public Builder setSuggestionMode(int suggestionMode) {
- this.mSuggestionMode = suggestionMode;
- return this;
- }
-
- @Deprecated
- public Builder setExpandedCondition(Condition expandedCondition) {
- this.mExpandedCondition = expandedCondition;
- return this;
- }
-
public Builder setSuggestionConditionMode(@HeaderMode int mode) {
this.mSuggestionConditionMode = mode;
return this;
}
- public Builder setCombineSuggestionAndCondition(boolean combine) {
- this.mCombineSuggestionAndCondition = combine;
- return this;
- }
-
public DashboardData build() {
return new DashboardData(this);
}
@@ -509,16 +387,6 @@ public class DashboardData {
return mOldItems.get(oldItemPosition).equals(mNewItems.get(newItemPosition));
}
- // not needed in combined UI
- @Deprecated
- @Nullable
- @Override
- public Object getChangePayload(int oldItemPosition, int newItemPosition) {
- if (mOldItems.get(oldItemPosition).type == Item.TYPE_CONDITION_CARD) {
- return "condition"; // return anything but null to mark the payload
- }
- return null;
- }
}
/**
@@ -527,24 +395,17 @@ public class DashboardData {
private static class Item {
// valid types in field type
private static final int TYPE_DASHBOARD_TILE = R.layout.dashboard_tile;
- @Deprecated
- private static final int TYPE_SUGGESTION_HEADER = R.layout.suggestion_header;
- @Deprecated
- private static final int TYPE_SUGGESTION_TILE = R.layout.suggestion_tile;
private static final int TYPE_SUGGESTION_CONDITION_CONTAINER =
R.layout.suggestion_condition_container;
private static final int TYPE_SUGGESTION_CONDITION_HEADER =
R.layout.suggestion_condition_header;
- @Deprecated
- private static final int TYPE_CONDITION_CARD = R.layout.condition_card;
private static final int TYPE_SUGGESTION_CONDITION_FOOTER =
R.layout.suggestion_condition_footer;
private static final int TYPE_DASHBOARD_SPACER = R.layout.dashboard_spacer;
- @IntDef({TYPE_DASHBOARD_TILE, TYPE_SUGGESTION_HEADER,
- TYPE_SUGGESTION_TILE, TYPE_SUGGESTION_CONDITION_CONTAINER,
- TYPE_SUGGESTION_CONDITION_HEADER, TYPE_CONDITION_CARD,
- TYPE_SUGGESTION_CONDITION_FOOTER, TYPE_DASHBOARD_SPACER})
+ @IntDef({TYPE_DASHBOARD_TILE, TYPE_SUGGESTION_CONDITION_CONTAINER,
+ TYPE_SUGGESTION_CONDITION_HEADER, TYPE_SUGGESTION_CONDITION_FOOTER,
+ TYPE_DASHBOARD_SPACER})
@Retention(RetentionPolicy.SOURCE)
public @interface ItemTypes{}
@@ -566,23 +427,10 @@ public class DashboardData {
*/
public final int id;
- /**
- * To store whether the condition is expanded, useless when {@link #type} is not
- * {@link #TYPE_CONDITION_CARD}
- */
- @Deprecated
- public final boolean conditionExpanded;
-
- @Deprecated
- public Item(Object entity, @ItemTypes int type, int id, boolean conditionExpanded) {
+ public Item(Object entity, @ItemTypes int type, int id) {
this.entity = entity;
this.type = type;
this.id = id;
- this.conditionExpanded = conditionExpanded;
- }
-
- public Item(Object entity, @ItemTypes int type, int id) {
- this(entity, type, id, false);
}
/**
@@ -613,12 +461,6 @@ public class DashboardData {
// Only check title and summary for dashboard tile
return TextUtils.equals(localTile.title, targetTile.title)
&& TextUtils.equals(localTile.summary, targetTile.summary);
- case TYPE_CONDITION_CARD:
- // First check conditionExpanded for quick return
- if (conditionExpanded != targetItem.conditionExpanded) {
- return false;
- }
- // After that, go to default to do final check
default:
return entity == null ? targetItem.entity == null
: entity.equals(targetItem.entity);
@@ -626,46 +468,6 @@ public class DashboardData {
}
}
- /**
- * This class contains the data needed to build the header. The data can also be
- * used to check the diff in DiffUtil.Callback
- */
- public static class SuggestionHeaderData {
- public final boolean hasMoreSuggestions;
- public final int suggestionSize;
- public final int undisplayedSuggestionCount;
-
- public SuggestionHeaderData(boolean moreSuggestions, int suggestionSize, int
- undisplayedSuggestionCount) {
- this.hasMoreSuggestions = moreSuggestions;
- this.suggestionSize = suggestionSize;
- this.undisplayedSuggestionCount = undisplayedSuggestionCount;
- }
-
- public SuggestionHeaderData() {
- hasMoreSuggestions = false;
- suggestionSize = 0;
- undisplayedSuggestionCount = 0;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (!(obj instanceof SuggestionHeaderData)) {
- return false;
- }
-
- SuggestionHeaderData targetData = (SuggestionHeaderData) obj;
-
- return hasMoreSuggestions == targetData.hasMoreSuggestions
- && suggestionSize == targetData.suggestionSize
- && undisplayedSuggestionCount == targetData.undisplayedSuggestionCount;
- }
- }
-
/**
* This class contains the data needed to build the suggestion/condition header. The data can
* also be used to check the diff in DiffUtil.Callback
diff --git a/src/com/android/settings/dashboard/DashboardDecorator.java b/src/com/android/settings/dashboard/DashboardDecorator.java
deleted file mode 100644
index f2f3d88abf7..00000000000
--- a/src/com/android/settings/dashboard/DashboardDecorator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2016 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.dashboard;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.RecyclerView.State;
-import android.support.v7.widget.RecyclerView.ViewHolder;
-import android.util.TypedValue;
-import android.view.View;
-
-import com.android.settings.R;
-
-public class DashboardDecorator extends RecyclerView.ItemDecoration {
-
- private final Context mContext;
- private final Drawable mDivider;
-
- public DashboardDecorator(Context context) {
- mContext = context;
- TypedValue value = new TypedValue();
- mContext.getTheme().resolveAttribute(android.R.attr.listDivider, value, true);
- mDivider = mContext.getDrawable(value.resourceId);
- }
-
- @Override
- public void onDrawOver(Canvas c, RecyclerView parent, State state) {
- final int childCount = parent.getChildCount();
- for (int i = 1; i < childCount; i++) {
- final View child = parent.getChildAt(i);
- final ViewHolder holder = parent.getChildViewHolder(child);
- if (holder.getItemViewType() != R.layout.condition_card) {
- continue;
- }
-
- int top = getChildTop(child);
- mDivider.setBounds(child.getLeft(), top, child.getRight(),
- top + mDivider.getIntrinsicHeight());
- mDivider.draw(c);
- }
- }
-
- private int getChildTop(View child) {
- final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
- .getLayoutParams();
- return child.getTop() + params.topMargin + Math.round(ViewCompat.getTranslationY(child));
- }
-}
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index 939a5d61ff3..15608a27bee 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -95,9 +95,4 @@ public interface DashboardFeatureProvider {
*/
void openTileIntent(Activity activity, Tile tile);
- /**
- * Whether or not we should use new UI that combines the settings suggestions and conditions.
- */
- boolean combineSuggestionAndCondition();
-
}
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index dcae3224630..88cf6664297 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -206,11 +206,6 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
launchIntentOrSelectProfile(activity, tile, intent, MetricsEvent.DASHBOARD_SUMMARY);
}
- @Override
- public boolean combineSuggestionAndCondition() {
- return false;
- }
-
private void launchIntentOrSelectProfile(Activity activity, Tile tile, Intent intent,
int sourceMetricCategory) {
if (!isIntentResolvable(intent)) {
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 9d2cc0da53a..bc102b066af 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -32,7 +32,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.dashboard.conditional.Condition;
-import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.ConditionManager.ConditionListener;
import com.android.settings.dashboard.conditional.FocusRecyclerView;
@@ -75,7 +74,6 @@ public class DashboardSummary extends InstrumentedFragment
private DashboardFeatureProvider mDashboardFeatureProvider;
private SuggestionFeatureProvider mSuggestionFeatureProvider;
private boolean isOnCategoriesChangedCalled;
- private SuggestionDismissController mSuggestionDismissHandler;
@Override
public int getMetricsCategory() {
@@ -192,17 +190,11 @@ public class DashboardSummary extends InstrumentedFragment
}
mDashboard.setLayoutManager(mLayoutManager);
mDashboard.setHasFixedSize(true);
- mDashboard.addItemDecoration(new DashboardDecorator(getContext()));
mDashboard.setListener(this);
Log.d(TAG, "adapter created");
mAdapter = new DashboardAdapter(getContext(), bundle, mConditionManager.getConditions(),
mSuggestionParser, this /* SuggestionDismissController.Callback */);
mDashboard.setAdapter(mAdapter);
- if (!mDashboardFeatureProvider.combineSuggestionAndCondition()) {
- mSuggestionDismissHandler = new SuggestionDismissController(
- getContext(), mDashboard, mSuggestionParser, this);
- ConditionAdapterUtils.addDismiss(mDashboard);
- }
mDashboard.setItemAnimator(new DashboardItemAnimator());
mSummaryLoader.setSummaryConsumer(mAdapter);
if (DEBUG_TIMING) {
diff --git a/src/com/android/settings/dashboard/conditional/ConditionAdapter.java b/src/com/android/settings/dashboard/conditional/ConditionAdapter.java
index 5827d14e151..4a7422f597a 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionAdapter.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionAdapter.java
@@ -17,16 +17,23 @@ package com.android.settings.dashboard.conditional;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.dashboard.DashboardAdapter;
import com.android.settings.dashboard.DashboardAdapter.DashboardItemHolder;
import com.android.settings.dashboard.DashboardData;
import com.android.settings.dashboard.DashboardData.HeaderMode;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.WirelessUtils;
+
import java.util.List;
import java.util.Objects;
@@ -77,8 +84,7 @@ public class ConditionAdapter extends RecyclerView.Adapter
@Override
public void onBindViewHolder(DashboardItemHolder holder, int position) {
- // TODO: merge methods from ConditionAdapterUtils into this class
- ConditionAdapterUtils.bindViews(mConditions.get(position), holder,
+ bindViews(mConditions.get(position), holder,
position == mConditions.size() - 1, mConditionClickListener);
}
@@ -100,4 +106,78 @@ public class ConditionAdapter extends RecyclerView.Adapter
return 0;
}
+ public void addDismissHandling(final RecyclerView recyclerView) {
+ ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(0,
+ ItemTouchHelper.START | ItemTouchHelper.END) {
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
+ RecyclerView.ViewHolder target) {
+ return true;
+ }
+
+ @Override
+ public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ return viewHolder.getItemViewType() == R.layout.condition_tile_new_ui
+ ? super.getSwipeDirs(recyclerView, viewHolder) : 0;
+ }
+
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+ Object item = getItem(viewHolder.getItemId());
+ ((Condition) item).silence();
+ }
+ };
+ ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
+ itemTouchHelper.attachToRecyclerView(recyclerView);
+ }
+
+ private void bindViews(final Condition condition,
+ DashboardAdapter.DashboardItemHolder view, boolean isLastItem,
+ View.OnClickListener onClickListener) {
+ if (condition instanceof AirplaneModeCondition) {
+ Log.d(TAG, "Airplane mode condition has been bound with "
+ + "isActive=" + condition.isActive() + ". Airplane mode is currently " +
+ WirelessUtils.isAirplaneModeOn(condition.mManager.getContext()));
+ }
+ View card = view.itemView.findViewById(R.id.content);
+ card.setTag(condition);
+ card.setOnClickListener(onClickListener);
+ view.icon.setImageIcon(condition.getIcon());
+ view.title.setText(condition.getTitle());
+
+ CharSequence[] actions = condition.getActions();
+ final boolean hasButtons = actions.length > 0;
+ setViewVisibility(view.itemView, R.id.buttonBar, hasButtons);
+
+ view.summary.setText(condition.getSummary());
+ for (int i = 0; i < 2; i++) {
+ Button button = (Button) view.itemView.findViewById(i == 0
+ ? R.id.first_action : R.id.second_action);
+ if (actions.length > i) {
+ button.setVisibility(View.VISIBLE);
+ button.setText(actions[i]);
+ final int index = i;
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Context context = v.getContext();
+ FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+ .action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
+ condition.getMetricsConstant());
+ condition.onActionClick(index);
+ }
+ });
+ } else {
+ button.setVisibility(View.GONE);
+ }
+ }
+ setViewVisibility(view.itemView, R.id.divider, !isLastItem);
+ }
+
+ private void setViewVisibility(View containerView, int viewId, boolean visible) {
+ View view = containerView.findViewById(viewId);
+ if (view != null) {
+ view.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+ }
}
diff --git a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
deleted file mode 100644
index 0e25723304d..00000000000
--- a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2015 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.dashboard.conditional;
-
-import android.content.Context;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.helper.ItemTouchHelper;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.dashboard.DashboardAdapter;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.WirelessUtils;
-
-public class ConditionAdapterUtils {
- private static final String TAG = "ConditionAdapterUtils";
-
- public static void addDismiss(final RecyclerView recyclerView) {
- ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(0,
- ItemTouchHelper.START | ItemTouchHelper.END) {
- @Override
- public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
- RecyclerView.ViewHolder target) {
- return true;
- }
-
- @Override
- public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
- return viewHolder.getItemViewType() == R.layout.condition_card
- || viewHolder.getItemViewType() == R.layout.condition_tile_new_ui
- ? super.getSwipeDirs(recyclerView, viewHolder) : 0;
- }
-
- @Override
- public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
- Object item;
- if (viewHolder.getItemViewType() == R.layout.condition_card) {
- DashboardAdapter adapter = (DashboardAdapter) recyclerView.getAdapter();
- item = adapter.getItem(viewHolder.getItemId());
- } else {
- ConditionAdapter adapter = (ConditionAdapter) recyclerView.getAdapter();
- item = adapter.getItem(viewHolder.getItemId());
- }
- ((Condition) item).silence();
- }
- };
- ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
- itemTouchHelper.attachToRecyclerView(recyclerView);
- }
-
- @Deprecated
- public static void bindViews(final Condition condition,
- DashboardAdapter.DashboardItemHolder view, boolean isExpanded,
- View.OnClickListener onClickListener, View.OnClickListener onExpandListener) {
- if (condition instanceof AirplaneModeCondition) {
- Log.d(TAG, "Airplane mode condition has been bound with "
- + "isActive=" + condition.isActive() + ". Airplane mode is currently " +
- WirelessUtils.isAirplaneModeOn(condition.mManager.getContext()));
- }
- View card = view.itemView.findViewById(R.id.content);
- card.setTag(condition);
- card.setOnClickListener(onClickListener);
- view.icon.setImageIcon(condition.getIcon());
- view.title.setText(condition.getTitle());
- final View collapsedGroup = view.itemView.findViewById(R.id.collapsed_group);
- collapsedGroup.setTag(condition);
- final ImageView expand = (ImageView) view.itemView.findViewById(R.id.expand_indicator);
- expand.setImageResource(isExpanded ? R.drawable.ic_expand_less : R.drawable.ic_expand_more);
- expand.setContentDescription(expand.getContext().getString(isExpanded
- ? R.string.condition_expand_hide : R.string.condition_expand_show));
- collapsedGroup.setOnClickListener(onExpandListener);
-
- View detailGroup = view.itemView.findViewById(R.id.detail_group);
- CharSequence[] actions = condition.getActions();
- if (isExpanded != (detailGroup.getVisibility() == View.VISIBLE)) {
- if (isExpanded) {
- final boolean hasButtons = actions.length > 0;
- setViewVisibility(detailGroup, R.id.divider, hasButtons);
- setViewVisibility(detailGroup, R.id.buttonBar, hasButtons);
-
- detailGroup.setVisibility(View.VISIBLE);
- } else {
- detailGroup.setVisibility(View.GONE);
- }
- }
-
- if (isExpanded) {
- view.summary.setText(condition.getSummary());
- for (int i = 0; i < 2; i++) {
- Button button = (Button) detailGroup.findViewById(i == 0
- ? R.id.first_action : R.id.second_action);
- if (actions.length > i) {
- button.setVisibility(View.VISIBLE);
- button.setText(actions[i]);
- final int index = i;
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Context context = v.getContext();
- FeatureFactory.getFactory(context).getMetricsFeatureProvider()
- .action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
- condition.getMetricsConstant());
- condition.onActionClick(index);
- }
- });
- } else {
- button.setVisibility(View.GONE);
- }
- }
- }
- }
-
- public static void bindViews(final Condition condition,
- DashboardAdapter.DashboardItemHolder view, boolean isLastItem,
- View.OnClickListener onClickListener) {
- if (condition instanceof AirplaneModeCondition) {
- Log.d(TAG, "Airplane mode condition has been bound with "
- + "isActive=" + condition.isActive() + ". Airplane mode is currently " +
- WirelessUtils.isAirplaneModeOn(condition.mManager.getContext()));
- }
- View card = view.itemView.findViewById(R.id.content);
- card.setTag(condition);
- card.setOnClickListener(onClickListener);
- view.icon.setImageIcon(condition.getIcon());
- view.title.setText(condition.getTitle());
-
- CharSequence[] actions = condition.getActions();
- final boolean hasButtons = actions.length > 0;
- setViewVisibility(view.itemView, R.id.buttonBar, hasButtons);
-
- view.summary.setText(condition.getSummary());
- for (int i = 0; i < 2; i++) {
- Button button = (Button) view.itemView.findViewById(i == 0
- ? R.id.first_action : R.id.second_action);
- if (actions.length > i) {
- button.setVisibility(View.VISIBLE);
- button.setText(actions[i]);
- final int index = i;
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Context context = v.getContext();
- FeatureFactory.getFactory(context).getMetricsFeatureProvider()
- .action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
- condition.getMetricsConstant());
- condition.onActionClick(index);
- }
- });
- } else {
- button.setVisibility(View.GONE);
- }
- }
- setViewVisibility(view.itemView, R.id.divider, !isLastItem);
- }
-
- private static void setViewVisibility(View containerView, int viewId, boolean visible) {
- View view = containerView.findViewById(viewId);
- if (view != null) {
- view.setVisibility(visible ? View.VISIBLE : View.GONE);
- }
- }
-}
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
index 3335950d70e..3a6582f91bf 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
@@ -23,7 +23,6 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.R.layout;
import com.android.settings.SettingsActivity;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.dashboard.DashboardAdapter.DashboardItemHolder;
@@ -114,7 +113,10 @@ public class SuggestionAdapter extends RecyclerView.Adapter
@Override
public int getItemViewType(int position) {
- return layout.suggestion_tile_new_ui;
+ Tile suggestion = getSuggestion(position);
+ return suggestion.remoteViews != null
+ ? R.layout.suggestion_tile_card
+ : R.layout.suggestion_tile_new_ui;
}
@Override
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java b/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java
index f0a65f68602..618b6df4a56 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java
@@ -66,8 +66,7 @@ public class SuggestionDismissController extends ItemTouchHelper.SimpleCallback
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
final int layoutId = viewHolder.getItemViewType();
- if (layoutId == R.layout.suggestion_tile
- || layoutId == R.layout.suggestion_tile_new_ui
+ if (layoutId == R.layout.suggestion_tile_new_ui
|| layoutId == R.layout.suggestion_tile_card) {
// Only return swipe direction for suggestion tiles. All other types are not swipeable.
return super.getSwipeDirs(recyclerView, viewHolder);
diff --git a/tests/robotests/src/com/android/settings/conditional/ConditionAdapterUtilsTest.java b/tests/robotests/src/com/android/settings/conditional/ConditionAdapterUtilsTest.java
deleted file mode 100644
index 83883b2b244..00000000000
--- a/tests/robotests/src/com/android/settings/conditional/ConditionAdapterUtilsTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2016 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.conditional;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.LinearLayout;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.dashboard.DashboardAdapter;
-import com.android.settings.dashboard.conditional.Condition;
-import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import com.android.settings.R;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-// Not needed in new UI as the view is always expanded
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ConditionAdapterUtilsTest{
- @Mock
- private Condition mCondition;
- private DashboardAdapter.DashboardItemHolder mViewHolder;
- private Context mContext;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- final CharSequence[] actions = new CharSequence[2];
- when(mCondition.getActions()).thenReturn(actions);
-
- final View view = LayoutInflater.from(mContext).inflate(R.layout.condition_card, new
- LinearLayout(mContext), true);
- mViewHolder = new DashboardAdapter.DashboardItemHolder(view);
- }
-
- @Test
- public void testBindView_isExpanded_returnVisible() {
- ConditionAdapterUtils.bindViews(mCondition, mViewHolder, true, null, null);
- assertThat(mViewHolder.itemView.findViewById(R.id.detail_group).getVisibility())
- .isEqualTo(View.VISIBLE);
- }
-
- @Test
- public void testBindView_isNotExpanded_returnGone() {
- ConditionAdapterUtils.bindViews(mCondition, mViewHolder, false, null, null);
- assertThat(mViewHolder.itemView.findViewById(R.id.detail_group).getVisibility())
- .isEqualTo(View.GONE);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
index 66706cc9da3..55bc4caf849 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
@@ -38,15 +38,10 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Icon;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
-import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.FrameLayout;
import android.widget.LinearLayout;
-import android.widget.RemoteViews;
-import android.widget.TextView;
+import android.widget.RelativeLayout;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -71,7 +66,6 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
import java.util.ArrayList;
import java.util.Collections;
@@ -101,8 +95,8 @@ public class DashboardAdapterTest {
private ArgumentCaptor mActionPackageCaptor = ArgumentCaptor.forClass(String.class);
private FakeFeatureFactory mFactory;
private DashboardAdapter mDashboardAdapter;
- private DashboardAdapter.DashboardItemHolder mSuggestionHolder;
- private DashboardData.SuggestionHeaderData mSuggestionHeaderData;
+ private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
+ private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
@Before
public void setUp() {
@@ -121,8 +115,10 @@ public class DashboardAdapterTest {
when(mResources.getQuantityString(any(int.class), any(int.class), any()))
.thenReturn("");
- mDashboardAdapter = new DashboardAdapter(mContext, null, null);
- mSuggestionHeaderData = new DashboardData.SuggestionHeaderData(true, 1, 0);
+ List conditions = new ArrayList<>();
+ conditions.add(mCondition);
+ mDashboardAdapter = new DashboardAdapter(mContext, null, conditions, null, null);
+ mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(conditions, 1);
when(mView.getTag()).thenReturn(mCondition);
}
@@ -161,8 +157,7 @@ public class DashboardAdapterTest {
@Test
public void testSuggestionsLogs_Expanded() {
setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3"));
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
verify(mFactory.metricsFeatureProvider, times(3)).action(
any(Context.class), mActionCategoryCaptor.capture(),
@@ -180,8 +175,7 @@ public class DashboardAdapterTest {
@Test
public void testSuggestionsLogs_ExpandedAndPaused() {
setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3"));
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
mDashboardAdapter.onPause();
verify(mFactory.metricsFeatureProvider, times(6)).action(
@@ -204,8 +198,7 @@ public class DashboardAdapterTest {
public void testSuggestionsLogs_ExpandedAfterPause() {
setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3"));
mDashboardAdapter.onPause();
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
verify(mFactory.metricsFeatureProvider, times(7)).action(
any(Context.class), mActionCategoryCaptor.capture(),
@@ -229,8 +222,7 @@ public class DashboardAdapterTest {
public void testSuggestionsLogs_ExpandedAfterPauseAndPausedAgain() {
setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3"));
mDashboardAdapter.onPause();
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
mDashboardAdapter.onPause();
verify(mFactory.metricsFeatureProvider, times(10)).action(
@@ -257,8 +249,7 @@ public class DashboardAdapterTest {
@Test
public void testSuggestionsLogs_ExpandedWithLessThanDefaultShown() {
setupSuggestions(makeSuggestions("pkg1"));
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
verify(mFactory.metricsFeatureProvider, times(1)).action(
any(Context.class), mActionCategoryCaptor.capture(),
@@ -274,8 +265,7 @@ public class DashboardAdapterTest {
@Test
public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAndPaused() {
setupSuggestions(makeSuggestions("pkg1"));
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
mDashboardAdapter.onPause();
verify(mFactory.metricsFeatureProvider, times(2)).action(
@@ -294,8 +284,7 @@ public class DashboardAdapterTest {
public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAfterPause() {
setupSuggestions(makeSuggestions("pkg1"));
mDashboardAdapter.onPause();
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
verify(mFactory.metricsFeatureProvider, times(3)).action(
any(Context.class), mActionCategoryCaptor.capture(),
@@ -314,8 +303,7 @@ public class DashboardAdapterTest {
public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAfterPauseAndPausedAgain() {
setupSuggestions(makeSuggestions("pkg1"));
mDashboardAdapter.onPause();
- mDashboardAdapter.onBindSuggestionHeader(
- mSuggestionHolder, mSuggestionHeaderData);
+ mDashboardAdapter.onBindSuggestionConditionHeader(mSuggestionHolder, mSuggestionHeaderData);
mSuggestionHolder.itemView.callOnClick();
mDashboardAdapter.onPause();
verify(mFactory.metricsFeatureProvider, times(4)).action(
@@ -333,81 +321,9 @@ public class DashboardAdapterTest {
}
@Test
- public void testBindViewHolder_inflateRemoteView() {
- List packages = makeSuggestions("pkg1");
- RemoteViews remoteViews = mock(RemoteViews.class);
- TextView textView = new TextView(RuntimeEnvironment.application);
- doReturn(textView).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
- packages.get(0).remoteViews = remoteViews;
- mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages);
- mSuggestionHolder = mDashboardAdapter.onCreateViewHolder(
- new FrameLayout(RuntimeEnvironment.application),
- R.layout.suggestion_tile_card);
-
- mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
- assertThat(textView.getParent()).isSameAs(mSuggestionHolder.itemView);
- mSuggestionHolder.itemView.performClick();
-
- verify(mContext).startSuggestion(any(Intent.class));
- }
-
- @Test
- public void testBindViewHolder_primaryViewHandlesClick() {
- Context context =
- new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings);
-
- List packages = makeSuggestions("pkg1");
- RemoteViews remoteViews = mock(RemoteViews.class);
- FrameLayout layout = new FrameLayout(context);
- Button primary = new Button(context);
- primary.setId(android.R.id.primary);
- layout.addView(primary);
- doReturn(layout).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
- packages.get(0).remoteViews = remoteViews;
- mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages);
- mSuggestionHolder = mDashboardAdapter.onCreateViewHolder(
- new FrameLayout(context),
- R.layout.suggestion_tile_card);
-
- mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
-
- mSuggestionHolder.itemView.performClick();
- assertThat(ShadowApplication.getInstance().getNextStartedActivity()).isNull();
- verify(mContext, never()).startSuggestion(any(Intent.class));
-
- primary.performClick();
-
- verify(mContext).startSuggestion(any(Intent.class));
- }
-
- @Test
- public void testBindViewHolder_viewsClearedOnRebind() {
- Context context =
- new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings);
-
- List packages = makeSuggestions("pkg1");
- RemoteViews remoteViews = mock(RemoteViews.class);
- FrameLayout layout = new FrameLayout(context);
- Button primary = new Button(context);
- primary.setId(android.R.id.primary);
- layout.addView(primary);
- doReturn(layout).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
- packages.get(0).remoteViews = remoteViews;
- mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages);
- mSuggestionHolder = mDashboardAdapter.onCreateViewHolder(
- new FrameLayout(context),
- R.layout.suggestion_tile_card);
-
- mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
- mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
-
- ViewGroup itemView = (ViewGroup) mSuggestionHolder.itemView;
- assertThat(itemView.getChildCount()).isEqualTo(1);
- }
-
- @Test
- public void testSuggestionDismissed_notOnlySuggestion_doNothing() {
- final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null, null));
+ public void testSuggestioDismissed_notOnlySuggestion_doNothing() {
+ final DashboardAdapter adapter =
+ spy(new DashboardAdapter(mContext, null, null, null, null));
adapter.setCategoriesAndSuggestions(
new ArrayList<>(), makeSuggestions("pkg1", "pkg2", "pkg3"));
final DashboardData dashboardData = adapter.mDashboardData;
@@ -420,8 +336,9 @@ public class DashboardAdapterTest {
}
@Test
- public void testSuggestionDismissed_onlySuggestion_updateDashboardData() {
- DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null, null));
+ public void testSuggestioDismissed_onlySuggestion_updateDashboardData() {
+ DashboardAdapter adapter =
+ spy(new DashboardAdapter(mContext, null, null, null, null));
adapter.setCategoriesAndSuggestions(new ArrayList<>(), makeSuggestions("pkg1"));
final DashboardData dashboardData = adapter.mDashboardData;
reset(adapter); // clear interactions tracking
@@ -450,8 +367,7 @@ public class DashboardAdapterTest {
@Test
public void testBindConditionAndSuggestion_shouldSetSuggestionAdapterAndNoCrash() {
- when(mFactory.dashboardFeatureProvider.combineSuggestionAndCondition()).thenReturn(true);
- mDashboardAdapter = new DashboardAdapter(mContext, null, null);
+ mDashboardAdapter = new DashboardAdapter(mContext, null, null, null, null);
final List suggestions = makeSuggestions("pkg1");
final List categories = new ArrayList<>();
final DashboardCategory category = mock(DashboardCategory.class);
@@ -489,8 +405,9 @@ public class DashboardAdapterTest {
private void setupSuggestions(List suggestions) {
mDashboardAdapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions);
- mSuggestionHolder = mDashboardAdapter.onCreateViewHolder(
- new FrameLayout(RuntimeEnvironment.application),
- mDashboardAdapter.getItemViewType(1));
+ final Context context = RuntimeEnvironment.application;
+ mSuggestionHolder = new DashboardAdapter.SuggestionAndConditionHeaderHolder(
+ LayoutInflater.from(context).inflate(
+ R.layout.suggestion_condition_header, new RelativeLayout(context), true));
}
}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
index 70a05286a7e..46b37a82bf1 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
@@ -96,7 +96,6 @@ public class DashboardDataTest {
.setCategories(categories)
.setSuggestions(suggestions)
.setSuggestionConditionMode(DashboardData.HEADER_MODE_FULLY_EXPANDED)
- .setCombineSuggestionAndCondition(true)
.build();
mDashboardDataWithTwoConditions = new DashboardData.Builder()
@@ -104,7 +103,6 @@ public class DashboardDataTest {
.setCategories(categories)
.setSuggestions(suggestions)
.setSuggestionConditionMode(DashboardData.HEADER_MODE_FULLY_EXPANDED)
- .setCombineSuggestionAndCondition(true)
.build();
mDashboardDataWithNoItems = new DashboardData.Builder()
@@ -129,9 +127,7 @@ public class DashboardDataTest {
for (int i = 0; i < expectedSize; i++) {
final Object item = mDashboardDataWithOneConditions.getItemEntityByPosition(i);
- if (item instanceof DashboardData.SuggestionHeaderData
- || item instanceof List) {
- // SuggestionHeaderData is created inside when build, we can only use isEqualTo
+ if (item instanceof List) {
assertThat(item).isEqualTo(expectedObjects[i]);
} else if (item instanceof DashboardData.SuggestionConditionHeaderData) {
DashboardData.SuggestionConditionHeaderData i1 =
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
index 688f07861eb..f0412d67f26 100644
--- a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
@@ -38,7 +38,6 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
index a29ac93b690..c9e38158ed7 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
@@ -15,16 +15,26 @@
*/
package com.android.settings.dashboard.suggestions;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.graphics.drawable.Icon;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ContextThemeWrapper;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.FrameLayout;
import android.widget.LinearLayout;
+import android.widget.RemoteViews;
+import android.widget.TextView;
import com.android.settings.R;
+import com.android.settings.SettingsActivity;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.DashboardAdapter;
+import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.drawer.Tile;
import java.util.ArrayList;
@@ -33,15 +43,20 @@ import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
@RunWith(SettingsRobolectricTestRunner.class)
@@ -51,9 +66,12 @@ public class SuggestionAdapterTest {
private Tile mSuggestion1;
@Mock
private Tile mSuggestion2;
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private SettingsActivity mActivity;
private Context mContext;
private SuggestionAdapter mSuggestionAdapter;
+ private DashboardAdapter.DashboardItemHolder mSuggestionHolder;
private List mOneSuggestion;
private List mTwoSuggestions;
@@ -61,6 +79,8 @@ public class SuggestionAdapterTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
+ FakeFeatureFactory.setupForTest(mActivity);
+
mSuggestion1.title = "Test Suggestion 1";
mSuggestion1.icon = mock(Icon.class);
mSuggestion2.title = "Test Suggestion 2";
@@ -92,13 +112,96 @@ public class SuggestionAdapterTest {
public void onBindViewHolder_shouldSetListener() {
final View view = spy(LayoutInflater.from(mContext).inflate(
R.layout.suggestion_tile_new_ui, new LinearLayout(mContext), true));
- final DashboardAdapter.DashboardItemHolder viewHolder =
- new DashboardAdapter.DashboardItemHolder(view);
+ mSuggestionHolder = new DashboardAdapter.DashboardItemHolder(view);
mSuggestionAdapter = new SuggestionAdapter(mContext, mOneSuggestion, new ArrayList<>());
- mSuggestionAdapter.onBindViewHolder(viewHolder, 0);
+ mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
verify(view).setOnClickListener(any(View.OnClickListener.class));
}
+ @Test
+ public void onBindViewHolder_shouldInflateRemoteView() {
+ List packages = makeSuggestions("pkg1");
+ RemoteViews remoteViews = mock(RemoteViews.class);
+ TextView textView = new TextView(RuntimeEnvironment.application);
+ doReturn(textView).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
+ packages.get(0).remoteViews = remoteViews;
+ setupSuggestions(mActivity, packages);
+
+ mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
+
+ assertThat(textView.getParent()).isSameAs(mSuggestionHolder.itemView);
+ mSuggestionHolder.itemView.performClick();
+
+ verify(mActivity).startSuggestion(any(Intent.class));
+ }
+
+ @Test
+ public void onBindViewHolder_primaryViewShouldHandleClick() {
+ Context context =
+ new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings);
+
+ List packages = makeSuggestions("pkg1");
+ RemoteViews remoteViews = mock(RemoteViews.class);
+ FrameLayout layout = new FrameLayout(context);
+ Button primary = new Button(context);
+ primary.setId(android.R.id.primary);
+ layout.addView(primary);
+ doReturn(layout).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
+ packages.get(0).remoteViews = remoteViews;
+ setupSuggestions(mActivity, packages);
+
+ mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
+ mSuggestionHolder.itemView.performClick();
+
+ assertThat(ShadowApplication.getInstance().getNextStartedActivity()).isNull();
+ verify(mActivity, never()).startSuggestion(any(Intent.class));
+
+ primary.performClick();
+
+ verify(mActivity).startSuggestion(any(Intent.class));
+ }
+
+ @Test
+ public void onBindViewHolder_viewsShouldClearOnRebind() {
+ Context context =
+ new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings);
+
+ List packages = makeSuggestions("pkg1");
+ RemoteViews remoteViews = mock(RemoteViews.class);
+ FrameLayout layout = new FrameLayout(context);
+ Button primary = new Button(context);
+ primary.setId(android.R.id.primary);
+ layout.addView(primary);
+ doReturn(layout).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
+ packages.get(0).remoteViews = remoteViews;
+ setupSuggestions(mActivity, packages);
+
+ mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
+ mSuggestionAdapter.onBindViewHolder(mSuggestionHolder, 0);
+
+ ViewGroup itemView = (ViewGroup) mSuggestionHolder.itemView;
+ assertThat(itemView.getChildCount()).isEqualTo(1);
+ }
+
+ private void setupSuggestions(Context context, List suggestions) {
+ mSuggestionAdapter = new SuggestionAdapter(context, suggestions, new ArrayList<>());
+ mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
+ new FrameLayout(RuntimeEnvironment.application),
+ mSuggestionAdapter.getItemViewType(0));
+ }
+
+ private List makeSuggestions(String... pkgNames) {
+ final List suggestions = new ArrayList<>();
+ for (String pkgName : pkgNames) {
+ Tile suggestion = new Tile();
+ suggestion.intent = new Intent("action");
+ suggestion.intent.setComponent(new ComponentName(pkgName, "cls"));
+ suggestions.add(suggestion);
+ suggestion.icon = mock(Icon.class);
+ }
+ return suggestions;
+ }
+
}
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
index c20e5c4c36b..025e600819f 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
@@ -80,7 +80,7 @@ public class SuggestionDismissControllerTest {
@Test
public void getSwipeDirs_isSuggestionTile_shouldReturnDirection() {
final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
- when(vh.getItemViewType()).thenReturn(R.layout.suggestion_tile);
+ when(vh.getItemViewType()).thenReturn(R.layout.suggestion_tile_new_ui);
assertThat(mController.getSwipeDirs(mRecyclerView, vh))
.isEqualTo(ItemTouchHelper.START | ItemTouchHelper.END);
@@ -98,7 +98,7 @@ public class SuggestionDismissControllerTest {
@Test
public void getSwipeDirs_isNotSuggestionTile_shouldReturn0() {
final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
- when(vh.getItemViewType()).thenReturn(R.layout.condition_card);
+ when(vh.getItemViewType()).thenReturn(R.layout.condition_tile_new_ui);
assertThat(mController.getSwipeDirs(mRecyclerView, vh))
.isEqualTo(0);