Merge "Cross fade escalation card when content changes." into nyc-mr1-dev
diff --git a/res/layout/support_offline_escalation_options.xml b/res/layout/support_offline_escalation_options.xml
index d1e77a3..4f6940c 100644
--- a/res/layout/support_offline_escalation_options.xml
+++ b/res/layout/support_offline_escalation_options.xml
@@ -64,6 +64,5 @@
style="@style/SupportSecondaryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
android:minHeight="48dp"/>
</LinearLayout>
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 7c76794..b49bb7b 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -20,6 +20,7 @@
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
+import android.os.Bundle;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
@@ -45,10 +46,13 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder>
implements View.OnClickListener {
public static final String TAG = "DashboardAdapter";
+ private static final String STATE_SUGGESTION_LIST = "suggestion_list";
+ private static final String STATE_CATEGORY_LIST = "category_list";
private static final int NS_SPACER = 0;
private static final int NS_SUGGESTION = 1000;
private static final int NS_ITEMS = 2000;
@@ -80,13 +84,20 @@
private Condition mExpandedCondition = null;
private SuggestionParser mSuggestionParser;
- public DashboardAdapter(Context context, SuggestionParser parser) {
+ public DashboardAdapter(Context context, SuggestionParser parser, Bundle savedInstanceState,
+ List<Condition> conditions) {
mContext = context;
mCache = new IconCache(context);
mSuggestionParser = parser;
+ mConditions = conditions;
setHasStableIds(true);
setShowingAll(true);
+
+ if (savedInstanceState != null) {
+ mSuggestions = savedInstanceState.getParcelableArrayList(STATE_SUGGESTION_LIST);
+ mCategories = savedInstanceState.getParcelableArrayList(STATE_CATEGORY_LIST);
+ }
}
public List<Tile> getSuggestions() {
@@ -94,8 +105,10 @@
}
public void setSuggestions(List<Tile> suggestions) {
- mSuggestions = suggestions;
- recountItems();
+ if (!Objects.equals(mSuggestions, suggestions)) {
+ mSuggestions = suggestions;
+ recountItems();
+ }
}
public Tile getTile(ComponentName component) {
@@ -111,6 +124,9 @@
}
public void setCategories(List<DashboardCategory> categories) {
+ if (Objects.equals(mCategories, categories)) {
+ return;
+ }
mCategories = categories;
// TODO: Better place for tinting?
@@ -133,8 +149,10 @@
}
public void setConditions(List<Condition> conditions) {
- mConditions = conditions;
- recountItems();
+ if (!Objects.equals(mConditions, conditions)) {
+ mConditions = conditions;
+ recountItems();
+ }
}
public boolean isShowingAll() {
@@ -422,6 +440,12 @@
return packageName;
}
+ void onSaveInstanceState(Bundle outState) {
+ outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<Tile>(mSuggestions));
+ outState.putParcelableArrayList(STATE_CATEGORY_LIST,
+ new ArrayList<DashboardCategory>(mCategories));
+ }
+
private static class IconCache {
private final Context mContext;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index e04b255..24b5aee 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -165,6 +165,9 @@
super.onSaveInstanceState(outState);
if (mLayoutManager == null) return;
outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition());
+ if (mAdapter != null) {
+ mAdapter.onSaveInstanceState(outState);
+ }
}
@Override
@@ -181,14 +184,13 @@
mDashboard.setHasFixedSize(true);
mDashboard.setListener(this);
mDashboard.addItemDecoration(new DashboardDecorator(getContext()));
- mAdapter = new DashboardAdapter(getContext(), mSuggestionParser);
- mAdapter.setConditions(mConditionManager.getConditions());
+ mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, bundle,
+ mConditionManager.getConditions());
mDashboard.setAdapter(mAdapter);
mSummaryLoader.setAdapter(mAdapter);
ConditionAdapterUtils.addDismiss(mDashboard);
if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took "
+ (System.currentTimeMillis() - startTime) + " ms");
-
rebuildUI();
}
diff --git a/src/com/android/settings/dashboard/SupportItemAdapter.java b/src/com/android/settings/dashboard/SupportItemAdapter.java
index a0ba57b..d0c5398 100644
--- a/src/com/android/settings/dashboard/SupportItemAdapter.java
+++ b/src/com/android/settings/dashboard/SupportItemAdapter.java
@@ -314,11 +314,13 @@
}
if (holder.summary1View != null) {
holder.summary1View.setText(data.summary1);
- holder.summary1View.setVisibility(mHasInternet ? View.VISIBLE : View.GONE);
+ holder.summary1View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary1)
+ ? View.VISIBLE : View.GONE);
}
if (holder.summary2View != null) {
holder.summary2View.setText(data.summary2);
- holder.summary2View.setVisibility(mHasInternet ? View.VISIBLE : View.GONE);
+ holder.summary2View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary2)
+ ? View.VISIBLE : View.GONE);
}
}