Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionSiteBreakdownView.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionSiteBreakdownView.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionSiteBreakdownView.java |
index a2a1f973c9db52ea87e6565af3b2c296f573979f..8070d1198801b4a87113e52e7ee4349729cd05ff 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionSiteBreakdownView.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionSiteBreakdownView.java |
@@ -5,9 +5,12 @@ |
package org.chromium.chrome.browser.preferences.datareduction; |
import android.content.Context; |
+import android.graphics.drawable.Drawable; |
+import android.support.annotation.ColorInt; |
import android.text.format.Formatter; |
import android.util.AttributeSet; |
import android.view.LayoutInflater; |
+import android.view.View; |
import android.widget.LinearLayout; |
import android.widget.TableLayout; |
import android.widget.TableRow; |
@@ -29,6 +32,13 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
private static final int NUM_DATA_USE_ITEMS_TO_DISPLAY = 10; |
private TableLayout mTableLayout; |
+ private TextView mDataUsedTitle; |
+ private TextView mDataSavedTitle; |
+ private List<DataReductionDataUseItem> mDataUseItems; |
+ @ColorInt |
+ private int mTextColor; |
+ @ColorInt |
+ private int mLightTextColor; |
public DataReductionSiteBreakdownView(Context context, AttributeSet attrs) { |
super(context, attrs); |
@@ -38,6 +48,32 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
protected void onFinishInflate() { |
super.onFinishInflate(); |
mTableLayout = (TableLayout) findViewById(R.id.data_reduction_proxy_breakdown_table); |
+ mDataUsedTitle = (TextView) findViewById(R.id.data_reduction_breakdown_used_title); |
+ mDataSavedTitle = (TextView) findViewById(R.id.data_reduction_breakdown_saved_title); |
+ mTextColor = ApiCompatibilityUtils.getColor( |
+ getContext().getResources(), R.color.data_reduction_breakdown_text_color); |
+ mLightTextColor = ApiCompatibilityUtils.getColor( |
+ getContext().getResources(), R.color.data_reduction_breakdown_light_text_color); |
+ |
+ mDataUsedTitle.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View v) { |
+ setTextViewUnsortedAttributes(mDataSavedTitle); |
+ setTextViewSortedAttributes(mDataUsedTitle); |
+ Collections.sort(mDataUseItems, new DataUsedComparator()); |
+ updateSiteBreakdown(); |
+ } |
+ }); |
+ |
+ mDataSavedTitle.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View v) { |
+ setTextViewUnsortedAttributes(mDataUsedTitle); |
+ setTextViewSortedAttributes(mDataSavedTitle); |
+ Collections.sort(mDataUseItems, new DataSavedComparator()); |
+ updateSiteBreakdown(); |
+ } |
+ }); |
} |
/** |
@@ -45,7 +81,34 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
* @param items A list of items split by hostname to show in the breakdown. |
*/ |
public void onQueryDataUsageComplete(List<DataReductionDataUseItem> items) { |
- updateSiteBreakdown(items); |
+ mDataUseItems = items; |
+ setTextViewUnsortedAttributes(mDataUsedTitle); |
+ setTextViewSortedAttributes(mDataSavedTitle); |
+ Collections.sort(items, new DataSavedComparator()); |
+ updateSiteBreakdown(); |
+ } |
+ |
+ private void setTextViewSortedAttributes(TextView textView) { |
+ textView.setTextColor(mTextColor); |
+ Drawable arrowDrawable = getStartCompoundDrawable(textView); |
+ arrowDrawable.mutate(); |
+ arrowDrawable.setAlpha(255); |
+ } |
+ |
+ private void setTextViewUnsortedAttributes(TextView textView) { |
+ textView.setTextColor(mLightTextColor); |
+ Drawable arrowDrawable = getStartCompoundDrawable(textView); |
+ arrowDrawable.mutate(); |
+ arrowDrawable.setAlpha(0); |
+ } |
+ |
+ private Drawable getStartCompoundDrawable(TextView textView) { |
+ Drawable[] drawables = textView.getCompoundDrawables(); |
+ // Start drawable can be in the left or right index based on if the layout is rtl. |
+ if (drawables[0] != null) { |
+ return drawables[0]; |
+ } |
+ return drawables[2]; |
} |
/** |
@@ -65,11 +128,31 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
} |
/** |
- * Update the site breakdown to display the given date use items. |
- * @param items A list of items split by hostname to show in the breakdown. |
+ * Sorts the DataReductionDataUseItems by most to least data saved. If data saved is equal, most |
+ * likely because both items have zero data saving, then sort by data used. |
+ */ |
+ private static class DataSavedComparator |
+ implements Comparator<DataReductionDataUseItem>, Serializable { |
+ @Override |
+ public int compare(DataReductionDataUseItem lhs, DataReductionDataUseItem rhs) { |
+ if (lhs.getDataSaved() < rhs.getDataSaved()) { |
+ return 1; |
+ } else if (lhs.getDataSaved() > rhs.getDataSaved()) { |
+ return -1; |
+ } else if (lhs.getDataUsed() < rhs.getDataUsed()) { |
+ return 1; |
+ } else if (lhs.getDataUsed() > rhs.getDataUsed()) { |
+ return -1; |
+ } |
+ return 0; |
+ } |
+ } |
+ |
+ /** |
+ * Update the site breakdown to display the data use items. |
*/ |
- private void updateSiteBreakdown(List<DataReductionDataUseItem> items) { |
- if (items.size() == 0) { |
+ private void updateSiteBreakdown() { |
+ if (mDataUseItems.size() == 0) { |
setVisibility(GONE); |
return; |
} |
@@ -77,14 +160,12 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
setVisibility(VISIBLE); |
// Remove all old rows except the header. |
mTableLayout.removeViews(1, mTableLayout.getChildCount() - 1); |
- final DataUsedComparator comp = new DataUsedComparator(); |
- Collections.sort(items, comp); |
int numRemainingSites = 0; |
int everythingElseDataUsage = 0; |
int everythingElseDataSavings = 0; |
- for (int i = 0; i < items.size(); i++) { |
+ for (int i = 0; i < mDataUseItems.size(); i++) { |
if (i < NUM_DATA_USE_ITEMS_TO_DISPLAY) { |
TableRow row = (TableRow) LayoutInflater.from(getContext()) |
.inflate(R.layout.data_usage_breakdown_row, null); |
@@ -93,15 +174,15 @@ public class DataReductionSiteBreakdownView extends LinearLayout { |
TextView dataUsedView = (TextView) row.findViewById(R.id.site_data_used); |
TextView dataSavedView = (TextView) row.findViewById(R.id.site_data_saved); |
- hostnameView.setText(items.get(i).getHostname()); |
- dataUsedView.setText(items.get(i).getFormattedDataUsed(getContext())); |
- dataSavedView.setText(items.get(i).getFormattedDataSaved(getContext())); |
+ hostnameView.setText(mDataUseItems.get(i).getHostname()); |
+ dataUsedView.setText(mDataUseItems.get(i).getFormattedDataUsed(getContext())); |
+ dataSavedView.setText(mDataUseItems.get(i).getFormattedDataSaved(getContext())); |
mTableLayout.addView(row, i + 1); |
} else { |
numRemainingSites++; |
- everythingElseDataUsage += items.get(i).getDataUsed(); |
- everythingElseDataSavings += items.get(i).getDataSaved(); |
+ everythingElseDataUsage += mDataUseItems.get(i).getDataUsed(); |
+ everythingElseDataSavings += mDataUseItems.get(i).getDataSaved(); |
} |
} |