diff --git a/res/layout/data_usage_summary_preference.xml b/res/layout/data_usage_summary_preference.xml
index 1432c726ee1..6af159a01ba 100644
--- a/res/layout/data_usage_summary_preference.xml
+++ b/res/layout/data_usage_summary_preference.xml
@@ -34,7 +34,7 @@
android:textColor="?android:attr/colorAccent"
android:text="@string/data_usage_title" />
-
-
+
= 0 && mDataplanSize > 0L) {
TextView usageRemainingField = (TextView) holder.findViewById(R.id.data_remaining_view);
long dataRemaining = mDataplanSize - mDataplanUse;
@@ -243,6 +246,9 @@ public class DataUsageSummaryPreference extends Preference {
usageRemainingField.setTextColor(
Utils.getColorAttr(getContext(), android.R.attr.colorError));
}
+ layout.setChildren(usageNumberField, usageRemainingField);
+ } else {
+ layout.setChildren(usageNumberField, null);
}
}
diff --git a/src/com/android/settings/datausage/MeasurableLinearLayout.java b/src/com/android/settings/datausage/MeasurableLinearLayout.java
new file mode 100644
index 00000000000..f165be7f58d
--- /dev/null
+++ b/src/com/android/settings/datausage/MeasurableLinearLayout.java
@@ -0,0 +1,47 @@
+package com.android.settings.datausage;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+
+public class MeasurableLinearLayout extends LinearLayout {
+ private View mFixedView;
+ private View mDisposableView;
+
+ public MeasurableLinearLayout(Context context) {
+ super(context, null);
+ }
+
+ public MeasurableLinearLayout(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs, 0);
+ }
+
+ public MeasurableLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr, 0);
+ }
+
+ public MeasurableLinearLayout(Context context, AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ if (mDisposableView != null && getMeasuredWidth() - mFixedView.getMeasuredWidth()
+ < mDisposableView.getMeasuredWidth()) {
+ mDisposableView.setVisibility(GONE);
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ } else if (mDisposableView != null && mDisposableView.getVisibility() != VISIBLE) {
+ mDisposableView.setVisibility(VISIBLE);
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+
+ public void setChildren(View fixedView, View disposableView) {
+ mFixedView = fixedView;
+ mDisposableView = disposableView;
+ }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
index 876f5d1366a..c666d4e232d 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
@@ -17,6 +17,10 @@
package com.android.settings.datausage;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.app.Activity;
import android.content.ComponentName;
@@ -82,13 +86,13 @@ public class DataUsageSummaryPreferenceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(RuntimeEnvironment.application);
mSummaryPreference = new DataUsageSummaryPreference(mContext, null /* attrs */);
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(mSummaryPreference.getLayoutResource(), null /* root */,
false /* attachToRoot */);
- mHolder = PreferenceViewHolder.createInstanceForTests(view);
+ mHolder = spy(PreferenceViewHolder.createInstanceForTests(view));
final long now = System.currentTimeMillis();
mCycleEnd = now + CYCLE_DURATION_MILLIS;
@@ -369,6 +373,7 @@ public class DataUsageSummaryPreferenceTest {
bindViewHolder();
assertThat(mDataUsed.getText().toString()).isEqualTo("1.00 MB used");
assertThat(mDataRemaining.getText().toString()).isEqualTo("9.00 MB left");
+ assertThat(mDataRemaining.getVisibility()).isEqualTo(View.VISIBLE);
final int colorId = Utils.getColorAttr(mContext, android.R.attr.colorAccent);
assertThat(mDataRemaining.getCurrentTextColor()).isEqualTo(colorId);
}
@@ -426,6 +431,46 @@ public class DataUsageSummaryPreferenceTest {
.isEqualTo(42);
}
+ @Test
+ public void testSetUsageInfo_withOverflowStrings_dataRemainingNotShown() {
+ LayoutInflater inflater = LayoutInflater.from(mContext);
+ View view = inflater.inflate(mSummaryPreference.getLayoutResource(), null /* root */,
+ false /* attachToRoot */);
+
+ TextView dataUsed = spy(new TextView(mContext));
+ TextView dataRemaining = spy(new TextView(mContext));
+ doReturn(dataUsed).when(mHolder).findViewById(R.id.data_usage_view);
+ doReturn(dataRemaining).when(mHolder).findViewById(R.id.data_remaining_view);
+
+ mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
+ new Intent());
+ mSummaryPreference.setUsageNumbers(
+ BillingCycleSettings.MIB_IN_BYTES,
+ 10 * BillingCycleSettings.MIB_IN_BYTES,
+ true /* hasMobileData */);
+
+ when(mContext.getResources()).thenCallRealMethod();
+ when(mContext.getText(R.string.data_used_formatted))
+ .thenReturn("^1 ^2 used with long trailing text");
+ when(mContext.getText(R.string.data_remaining)).thenReturn("^1 left");
+
+ bindViewHolder();
+
+ doReturn(500).when(dataUsed).getMeasuredWidth();
+ doReturn(500).when(dataRemaining).getMeasuredWidth();
+
+ assertThat(dataRemaining.getVisibility()).isEqualTo(View.VISIBLE);
+
+ MeasurableLinearLayout layout =
+ (MeasurableLinearLayout) mHolder.findViewById(R.id.usage_layout);
+ layout.measure(
+ View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.EXACTLY),
+ View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY));
+
+ assertThat(dataUsed.getText().toString()).isEqualTo("1.00 MB used with long trailing text");
+ assertThat(dataRemaining.getVisibility()).isEqualTo(View.GONE);
+ }
+
@Test
public void testSetWifiMode_withUsageInfo_dataUsageShown() {
final int daysLeft = 3;
@@ -474,8 +519,8 @@ public class DataUsageSummaryPreferenceTest {
mCycleTime = (TextView) mHolder.findViewById(R.id.cycle_left_time);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mDataLimits = (TextView) mHolder.findViewById(R.id.data_limits);
- mDataUsed = (TextView) mHolder.findViewById(R.id.data_usage_view);
- mDataRemaining = (TextView) mHolder.findViewById(R.id.data_remaining_view);
+ mDataUsed = spy((TextView) mHolder.findViewById(R.id.data_usage_view));
+ mDataRemaining = spy((TextView) mHolder.findViewById(R.id.data_remaining_view));
mLaunchButton = (Button) mHolder.findViewById(R.id.launch_mdp_app_button);
mLabelBar = (LinearLayout) mHolder.findViewById(R.id.label_bar);
mLabel1 = (TextView) mHolder.findViewById(R.id.text1);