Loading res/layout/data_usage_summary_preference.xml +2 −2 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ android:textColor="?android:attr/colorAccent" android:text="@string/data_usage_title" /> <LinearLayout <com.android.settings.datausage.MeasurableLinearLayout android:id="@+id/usage_layout" android:layout_width="match_parent" android:layout_height="wrap_content" Loading @@ -61,7 +61,7 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="16sp" /> </LinearLayout> </com.android.settings.datausage.MeasurableLinearLayout> <android.widget.ProgressBar android:id="@+id/determinateBar" Loading src/com/android/settings/datausage/DataUsageSummaryPreference.java +6 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,9 @@ public class DataUsageSummaryPreference extends Preference { TextUtils.expandTemplate(template, usageNumberText, usedResult.units); usageNumberField.setText(usageText); final MeasurableLinearLayout layout = (MeasurableLinearLayout) holder.findViewById(R.id.usage_layout); if (mHasMobileData && mNumPlans >= 0 && mDataplanSize > 0L) { TextView usageRemainingField = (TextView) holder.findViewById(R.id.data_remaining_view); long dataRemaining = mDataplanSize - mDataplanUse; Loading @@ -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); } } Loading src/com/android/settings/datausage/MeasurableLinearLayout.java 0 → 100644 +47 −0 Original line number Diff line number Diff line 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 tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +49 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading
res/layout/data_usage_summary_preference.xml +2 −2 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ android:textColor="?android:attr/colorAccent" android:text="@string/data_usage_title" /> <LinearLayout <com.android.settings.datausage.MeasurableLinearLayout android:id="@+id/usage_layout" android:layout_width="match_parent" android:layout_height="wrap_content" Loading @@ -61,7 +61,7 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="16sp" /> </LinearLayout> </com.android.settings.datausage.MeasurableLinearLayout> <android.widget.ProgressBar android:id="@+id/determinateBar" Loading
src/com/android/settings/datausage/DataUsageSummaryPreference.java +6 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,9 @@ public class DataUsageSummaryPreference extends Preference { TextUtils.expandTemplate(template, usageNumberText, usedResult.units); usageNumberField.setText(usageText); final MeasurableLinearLayout layout = (MeasurableLinearLayout) holder.findViewById(R.id.usage_layout); if (mHasMobileData && mNumPlans >= 0 && mDataplanSize > 0L) { TextView usageRemainingField = (TextView) holder.findViewById(R.id.data_remaining_view); long dataRemaining = mDataplanSize - mDataplanUse; Loading @@ -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); } } Loading
src/com/android/settings/datausage/MeasurableLinearLayout.java 0 → 100644 +47 −0 Original line number Diff line number Diff line 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
tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +49 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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; Loading Loading @@ -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); Loading