• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.settings.datausage;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 import static org.mockito.Mockito.doReturn;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.spy;
23 import static org.mockito.Mockito.when;
24 
25 import android.app.Activity;
26 import android.content.ComponentName;
27 import android.content.Context;
28 import android.content.Intent;
29 import android.graphics.Typeface;
30 import android.net.NetworkTemplate;
31 import android.os.Bundle;
32 import android.support.v7.preference.PreferenceViewHolder;
33 import android.telephony.SubscriptionManager;
34 import android.view.LayoutInflater;
35 import android.view.View;
36 import android.widget.Button;
37 import android.widget.LinearLayout;
38 import android.widget.ProgressBar;
39 import android.widget.TextView;
40 
41 import com.android.settings.R;
42 import com.android.settings.SettingsActivity;
43 import com.android.settings.SubSettings;
44 import com.android.settings.testutils.SettingsRobolectricTestRunner;
45 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
46 import com.android.settingslib.Utils;
47 
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.junit.runner.RunWith;
51 import org.mockito.MockitoAnnotations;
52 import org.robolectric.Robolectric;
53 import org.robolectric.RuntimeEnvironment;
54 import org.robolectric.Shadows;
55 import org.robolectric.annotation.Config;
56 import org.robolectric.shadows.ShadowActivity;
57 
58 import java.util.concurrent.TimeUnit;
59 
60 @RunWith(SettingsRobolectricTestRunner.class)
61 @Config(shadows = SettingsShadowResourcesImpl.class)
62 public class DataUsageSummaryPreferenceTest {
63 
64     private static final long CYCLE_DURATION_MILLIS = 1000000000L;
65     private static final long UPDATE_LAG_MILLIS = 10000000L;
66     private static final String DUMMY_CARRIER = "z-mobile";
67 
68     private Context mContext;
69     private PreferenceViewHolder mHolder;
70     private DataUsageSummaryPreference mSummaryPreference;
71     private TextView mUsageTitle;
72     private TextView mCycleTime;
73     private TextView mCarrierInfo;
74     private TextView mDataLimits;
75     private TextView mDataUsed;
76     private TextView mDataRemaining;
77     private Button mLaunchButton;
78     private LinearLayout mLabelBar;
79     private TextView mLabel1;
80     private TextView mLabel2;
81     private ProgressBar mProgressBar;
82 
83     private long mCycleEnd;
84     private long mUpdateTime;
85 
86     @Before
setUp()87     public void setUp() {
88         MockitoAnnotations.initMocks(this);
89         mContext = spy(RuntimeEnvironment.application);
90         mSummaryPreference = new DataUsageSummaryPreference(mContext, null /* attrs */);
91         LayoutInflater inflater = LayoutInflater.from(mContext);
92         View view = inflater.inflate(mSummaryPreference.getLayoutResource(), null /* root */,
93                 false /* attachToRoot */);
94 
95         mHolder = spy(PreferenceViewHolder.createInstanceForTests(view));
96 
97         final long now = System.currentTimeMillis();
98         mCycleEnd = now + CYCLE_DURATION_MILLIS;
99         mUpdateTime = now - UPDATE_LAG_MILLIS;
100     }
101 
102     @Test
testSetUsageInfo_withLaunchIntent_launchButtonShown()103     public void testSetUsageInfo_withLaunchIntent_launchButtonShown() {
104         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
105                 new Intent());
106 
107         bindViewHolder();
108         assertThat(mLaunchButton.getVisibility()).isEqualTo(View.VISIBLE);
109     }
110 
111     @Test
testSetUsageInfo_withoutLaunchIntent_launchButtonNotShown()112     public void testSetUsageInfo_withoutLaunchIntent_launchButtonNotShown() {
113         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
114                 null /* launchIntent */);
115 
116         bindViewHolder();
117         assertThat(mLaunchButton.getVisibility()).isEqualTo(View.GONE);
118     }
119 
120     @Test
testSetUsageInfo_withDataPlans_carrierInfoShown()121     public void testSetUsageInfo_withDataPlans_carrierInfoShown() {
122         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
123                 new Intent());
124 
125         bindViewHolder();
126         assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
127     }
128 
129     @Test
testSetUsageInfo_withNoDataPlans_carrierInfoNotShown()130     public void testSetUsageInfo_withNoDataPlans_carrierInfoNotShown() {
131         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
132                 new Intent());
133 
134         bindViewHolder();
135         assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.GONE);
136     }
137 
138     @Test
testCarrierUpdateTime_shouldFormatDaysCorrectly()139     public void testCarrierUpdateTime_shouldFormatDaysCorrectly() {
140         int baseUnit = 2;
141         int smudge = 6;
142         final long updateTime = System.currentTimeMillis()
143                 - TimeUnit.DAYS.toMillis(baseUnit) - TimeUnit.HOURS.toMillis(smudge);
144         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
145         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
146                 new Intent());
147 
148         bindViewHolder();
149         assertThat(mCarrierInfo.getText().toString())
150                 .isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + " days ago");
151     }
152 
153     @Test
testCarrierUpdateTime_shouldFormatHoursCorrectly()154     public void testCarrierUpdateTime_shouldFormatHoursCorrectly() {
155         int baseUnit = 2;
156         int smudge = 6;
157         final long updateTime = System.currentTimeMillis()
158                 - TimeUnit.HOURS.toMillis(baseUnit) - TimeUnit.MINUTES.toMillis(smudge);
159         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
160         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
161                 new Intent());
162 
163         bindViewHolder();
164         assertThat(mCarrierInfo.getText().toString())
165                 .isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + " hr ago");
166     }
167 
168     @Test
testCarrierUpdateTime_shouldFormatMinutesCorrectly()169     public void testCarrierUpdateTime_shouldFormatMinutesCorrectly() {
170         int baseUnit = 2;
171         int smudge = 6;
172         final long updateTime = System.currentTimeMillis()
173                 - TimeUnit.MINUTES.toMillis(baseUnit) - TimeUnit.SECONDS.toMillis(smudge);
174         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
175         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
176                 new Intent());
177 
178         bindViewHolder();
179         assertThat(mCarrierInfo.getText().toString())
180                 .isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + " min ago");
181     }
182 
183     @Test
testCarrierUpdateTime_shouldFormatLessThanMinuteCorrectly()184     public void testCarrierUpdateTime_shouldFormatLessThanMinuteCorrectly() {
185         final long updateTime = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(45);
186         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
187         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
188                 new Intent());
189 
190         bindViewHolder();
191         assertThat(mCarrierInfo.getText().toString())
192                 .isEqualTo("Updated by " + DUMMY_CARRIER + " just now");
193     }
194 
195     @Test
testCarrierUpdateTimeWithNoCarrier_shouldSayJustNow()196     public void testCarrierUpdateTimeWithNoCarrier_shouldSayJustNow() {
197         final long updateTime = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(45);
198         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
199         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, null /* carrier */,
200                 1 /* numPlans */, new Intent());
201 
202         bindViewHolder();
203         assertThat(mCarrierInfo.getText().toString())
204                 .isEqualTo("Updated just now");
205     }
206 
207     @Test
testCarrierUpdateTimeWithNoCarrier_shouldFormatTime()208     public void testCarrierUpdateTimeWithNoCarrier_shouldFormatTime() {
209         final long updateTime = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2);
210         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
211         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, null /* carrier */,
212                 1 /* numPlans */, new Intent());
213 
214         bindViewHolder();
215         assertThat(mCarrierInfo.getText().toString())
216                 .isEqualTo("Updated 2 min ago");
217     }
218 
219     @Test
setUsageInfo_withRecentCarrierUpdate_doesNotSetCarrierInfoWarningColorAndFont()220     public void setUsageInfo_withRecentCarrierUpdate_doesNotSetCarrierInfoWarningColorAndFont() {
221         final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1);
222         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
223         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
224                 new Intent());
225 
226         bindViewHolder();
227         assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
228         assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
229                 Utils.getColorAttr(mContext, android.R.attr.textColorSecondary));
230         assertThat(mCarrierInfo.getTypeface()).isEqualTo(Typeface.SANS_SERIF);
231     }
232 
233     @Test
testSetUsageInfo_withStaleCarrierUpdate_setsCarrierInfoWarningColorAndFont()234     public void testSetUsageInfo_withStaleCarrierUpdate_setsCarrierInfoWarningColorAndFont() {
235         final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(7);
236         mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
237                 new Intent());
238 
239         bindViewHolder();
240         assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
241         assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
242                 Utils.getColorAttr(mContext, android.R.attr.colorError));
243         assertThat(mCarrierInfo.getTypeface()).isEqualTo(
244                 DataUsageSummaryPreference.SANS_SERIF_MEDIUM);
245     }
246 
247     @Test
testSetUsageInfo_withNoDataPlans_usageTitleNotShown()248     public void testSetUsageInfo_withNoDataPlans_usageTitleNotShown() {
249         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
250                 new Intent());
251 
252         bindViewHolder();
253         assertThat(mUsageTitle.getVisibility()).isEqualTo(View.GONE);
254     }
255 
256     @Test
testSetUsageInfo_withMultipleDataPlans_usageTitleShown()257     public void testSetUsageInfo_withMultipleDataPlans_usageTitleShown() {
258         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 2 /* numPlans */,
259                 new Intent());
260 
261         bindViewHolder();
262         assertThat(mUsageTitle.getVisibility()).isEqualTo(View.VISIBLE);
263     }
264 
265     @Test
testSetUsageInfo_cycleRemainingTimeIsLessOneDay()266     public void testSetUsageInfo_cycleRemainingTimeIsLessOneDay() {
267         // just under one day
268         final long cycleEnd = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(23);
269         mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
270                 new Intent());
271 
272         bindViewHolder();
273         assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
274         assertThat(mCycleTime.getText()).isEqualTo(
275                 mContext.getString(R.string.billing_cycle_less_than_one_day_left));
276     }
277 
278     @Test
testSetUsageInfo_cycleRemainingTimeNegativeDaysLeft_shouldDisplayNoneLeft()279     public void testSetUsageInfo_cycleRemainingTimeNegativeDaysLeft_shouldDisplayNoneLeft() {
280         final long cycleEnd = System.currentTimeMillis() - 1L;
281         mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
282                 new Intent());
283 
284         bindViewHolder();
285         assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
286         assertThat(mCycleTime.getText()).isEqualTo(
287                 mContext.getString(R.string.billing_cycle_none_left));
288     }
289 
290     @Test
testSetUsageInfo_cycleRemainingTimeDaysLeft_shouldUsePlurals()291     public void testSetUsageInfo_cycleRemainingTimeDaysLeft_shouldUsePlurals() {
292         final int daysLeft = 3;
293         final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(daysLeft)
294                 + TimeUnit.HOURS.toMillis(1);
295         mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
296                 new Intent());
297 
298         bindViewHolder();
299         assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
300         assertThat(mCycleTime.getText()).isEqualTo(daysLeft + " days left");
301     }
302 
303     @Test
testSetLimitInfo_withLimitInfo_dataLimitsShown()304     public void testSetLimitInfo_withLimitInfo_dataLimitsShown() {
305         final String limitText = "test limit text";
306         mSummaryPreference.setLimitInfo(limitText);
307 
308         bindViewHolder();
309         assertThat(mDataLimits.getVisibility()).isEqualTo(View.VISIBLE);
310         assertThat(mDataLimits.getText()).isEqualTo(limitText);
311     }
312 
313     @Test
testSetLimitInfo_withNullLimitInfo_dataLimitsNotShown()314     public void testSetLimitInfo_withNullLimitInfo_dataLimitsNotShown() {
315         mSummaryPreference.setLimitInfo(null);
316 
317         bindViewHolder();
318         assertThat(mDataLimits.getVisibility()).isEqualTo(View.GONE);
319     }
320 
321     @Test
testSetChartEnabledFalse_hidesLabelBar()322     public void testSetChartEnabledFalse_hidesLabelBar() {
323         setValidLabels();
324         mSummaryPreference.setChartEnabled(false);
325 
326         bindViewHolder();
327         assertThat(mLabelBar.getVisibility()).isEqualTo(View.GONE);
328         assertThat(mProgressBar.getVisibility()).isEqualTo(View.GONE);
329     }
330 
331     @Test
testSetEmptyLabels_hidesLabelBar()332     public void testSetEmptyLabels_hidesLabelBar() {
333         mSummaryPreference.setLabels("", "");
334 
335         bindViewHolder();
336         assertThat(mLabelBar.getVisibility()).isEqualTo(View.GONE);
337         assertThat(mProgressBar.getVisibility()).isEqualTo(View.GONE);
338     }
339 
340     @Test
testLabelBar_isVisible_whenLabelsSet()341     public void testLabelBar_isVisible_whenLabelsSet() {
342         setValidLabels();
343         //mChartEnabled defaults to true
344 
345         bindViewHolder();
346         assertThat(mLabelBar.getVisibility()).isEqualTo(View.VISIBLE);
347         assertThat(mProgressBar.getVisibility()).isEqualTo(View.VISIBLE);
348     }
349 
350 
351     @Test
testSetProgress_updatesProgressBar()352     public void testSetProgress_updatesProgressBar() {
353         setValidLabels();
354         mSummaryPreference.setProgress(.5f);
355 
356         bindViewHolder();
357         assertThat(mProgressBar.getProgress()).isEqualTo(50);
358     }
359 
setValidLabels()360     private void setValidLabels() {
361         mSummaryPreference.setLabels("0.0 GB", "5.0 GB");
362     }
363 
364     @Test
testSetUsageAndRemainingInfo_withUsageInfo_dataUsageAndRemainingShown()365     public void testSetUsageAndRemainingInfo_withUsageInfo_dataUsageAndRemainingShown() {
366         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
367                 new Intent());
368         mSummaryPreference.setUsageNumbers(
369                 BillingCycleSettings.MIB_IN_BYTES,
370                 10 * BillingCycleSettings.MIB_IN_BYTES,
371                 true /* hasMobileData */);
372 
373         bindViewHolder();
374         assertThat(mDataUsed.getText().toString()).isEqualTo("1.00 MB used");
375         assertThat(mDataRemaining.getText().toString()).isEqualTo("9.00 MB left");
376         assertThat(mDataRemaining.getVisibility()).isEqualTo(View.VISIBLE);
377         final int colorId = Utils.getColorAttr(mContext, android.R.attr.colorAccent);
378         assertThat(mDataRemaining.getCurrentTextColor()).isEqualTo(colorId);
379     }
380 
381     @Test
testSetUsageInfo_withDataOverusage()382     public void testSetUsageInfo_withDataOverusage() {
383         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
384                 new Intent());
385         mSummaryPreference.setUsageNumbers(
386                 11 * BillingCycleSettings.MIB_IN_BYTES,
387                 10 * BillingCycleSettings.MIB_IN_BYTES,
388                 true /* hasMobileData */);
389 
390         bindViewHolder();
391         assertThat(mDataUsed.getText().toString()).isEqualTo("11.00 MB used");
392         assertThat(mDataRemaining.getText().toString()).isEqualTo("1.00 MB over");
393         final int colorId = Utils.getColorAttr(mContext, android.R.attr.colorError);
394         assertThat(mDataRemaining.getCurrentTextColor()).isEqualTo(colorId);
395     }
396 
397     @Test
testSetUsageInfo_withUsageInfo_dataUsageShown()398     public void testSetUsageInfo_withUsageInfo_dataUsageShown() {
399         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
400                 new Intent());
401         mSummaryPreference.setUsageNumbers(
402                 BillingCycleSettings.MIB_IN_BYTES, -1L, true /* hasMobileData */);
403 
404         bindViewHolder();
405         assertThat(mDataUsed.getText().toString()).isEqualTo("1.00 MB used");
406         assertThat(mDataRemaining.getText()).isEqualTo("");
407     }
408 
409     @Test
testSetAppIntent_toMdpApp_intentCorrect()410     public void testSetAppIntent_toMdpApp_intentCorrect() {
411         final Activity activity = Robolectric.setupActivity(Activity.class);
412         final Intent intent = new Intent(SubscriptionManager.ACTION_MANAGE_SUBSCRIPTION_PLANS);
413         intent.setPackage("test-owner.example.com");
414         intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, 42);
415 
416         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
417                 intent);
418 
419         bindViewHolder();
420         assertThat(mLaunchButton.getVisibility()).isEqualTo(View.VISIBLE);
421         assertThat(mLaunchButton.getText())
422                 .isEqualTo(mContext.getString(R.string.launch_mdp_app_text));
423 
424         mLaunchButton.callOnClick();
425         ShadowActivity shadowActivity = Shadows.shadowOf(activity);
426         Intent startedIntent = shadowActivity.getNextStartedActivity();
427         assertThat(startedIntent.getAction())
428                 .isEqualTo(SubscriptionManager.ACTION_MANAGE_SUBSCRIPTION_PLANS);
429         assertThat(startedIntent.getPackage()).isEqualTo("test-owner.example.com");
430         assertThat(startedIntent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, -1))
431                 .isEqualTo(42);
432     }
433 
434     @Test
testSetUsageInfo_withOverflowStrings_dataRemainingNotShown()435     public void testSetUsageInfo_withOverflowStrings_dataRemainingNotShown() {
436         LayoutInflater inflater = LayoutInflater.from(mContext);
437         View view = inflater.inflate(mSummaryPreference.getLayoutResource(), null /* root */,
438                 false /* attachToRoot */);
439 
440         TextView dataUsed = spy(new TextView(mContext));
441         TextView dataRemaining = spy(new TextView(mContext));
442         doReturn(dataUsed).when(mHolder).findViewById(R.id.data_usage_view);
443         doReturn(dataRemaining).when(mHolder).findViewById(R.id.data_remaining_view);
444 
445         mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
446                 new Intent());
447         mSummaryPreference.setUsageNumbers(
448                 BillingCycleSettings.MIB_IN_BYTES,
449                 10 * BillingCycleSettings.MIB_IN_BYTES,
450                 true /* hasMobileData */);
451 
452         when(mContext.getResources()).thenCallRealMethod();
453         when(mContext.getText(R.string.data_used_formatted))
454                 .thenReturn("^1 ^2 used with long trailing text");
455         when(mContext.getText(R.string.data_remaining)).thenReturn("^1 left");
456 
457         bindViewHolder();
458 
459         doReturn(500).when(dataUsed).getMeasuredWidth();
460         doReturn(500).when(dataRemaining).getMeasuredWidth();
461 
462         assertThat(dataRemaining.getVisibility()).isEqualTo(View.VISIBLE);
463 
464         MeasurableLinearLayout layout =
465                 (MeasurableLinearLayout) mHolder.findViewById(R.id.usage_layout);
466         layout.measure(
467                 View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.EXACTLY),
468                 View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY));
469 
470         assertThat(dataUsed.getText().toString()).isEqualTo("1.00 MB used with long trailing text");
471         assertThat(dataRemaining.getVisibility()).isEqualTo(View.GONE);
472     }
473 
474     @Test
testSetWifiMode_withUsageInfo_dataUsageShown()475     public void testSetWifiMode_withUsageInfo_dataUsageShown() {
476         final int daysLeft = 3;
477         final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(daysLeft)
478                 + TimeUnit.HOURS.toMillis(1);
479         final Activity activity = Robolectric.setupActivity(Activity.class);
480         mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
481                 new Intent());
482         mSummaryPreference.setUsageNumbers(1000000L, -1L, true);
483         final String cycleText = "The quick fox";
484         mSummaryPreference.setWifiMode(true, cycleText);
485 
486         bindViewHolder();
487         assertThat(mUsageTitle.getText().toString())
488                 .isEqualTo(mContext.getString(R.string.data_usage_wifi_title));
489         assertThat(mUsageTitle.getVisibility()).isEqualTo(View.VISIBLE);
490         assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
491         assertThat(mCycleTime.getText()).isEqualTo(cycleText);
492         assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.GONE);
493         assertThat(mDataLimits.getVisibility()).isEqualTo(View.GONE);
494         assertThat(mLaunchButton.getVisibility()).isEqualTo(View.VISIBLE);
495         assertThat(mLaunchButton.getText())
496                 .isEqualTo(mContext.getString(R.string.launch_wifi_text));
497 
498         mLaunchButton.callOnClick();
499         ShadowActivity shadowActivity = Shadows.shadowOf(activity);
500         Intent startedIntent = shadowActivity.getNextStartedActivity();
501         assertThat(startedIntent.getComponent()).isEqualTo(new ComponentName("com.android.settings",
502                 SubSettings.class.getName()));
503 
504         final Bundle expect = new Bundle(1);
505         expect.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE,
506                 NetworkTemplate.buildTemplateWifiWildcard());
507         final Bundle actual = startedIntent
508                 .getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
509         assertThat((NetworkTemplate) actual.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE))
510                 .isEqualTo(NetworkTemplate.buildTemplateWifiWildcard());
511 
512         assertThat(startedIntent.getCharSequenceExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE))
513                 .isEqualTo(mContext.getString(R.string.wifi_data_usage));
514     }
515 
bindViewHolder()516     private void bindViewHolder() {
517         mSummaryPreference.onBindViewHolder(mHolder);
518         mUsageTitle = (TextView) mHolder.findViewById(R.id.usage_title);
519         mCycleTime = (TextView) mHolder.findViewById(R.id.cycle_left_time);
520         mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
521         mDataLimits = (TextView) mHolder.findViewById(R.id.data_limits);
522         mDataUsed = spy((TextView) mHolder.findViewById(R.id.data_usage_view));
523         mDataRemaining = spy((TextView) mHolder.findViewById(R.id.data_remaining_view));
524         mLaunchButton = (Button) mHolder.findViewById(R.id.launch_mdp_app_button);
525         mLabelBar = (LinearLayout) mHolder.findViewById(R.id.label_bar);
526         mLabel1 = (TextView) mHolder.findViewById(R.id.text1);
527         mLabel2 = (TextView) mHolder.findViewById(R.id.text2);
528         mProgressBar = (ProgressBar) mHolder.findViewById(R.id.determinateBar);
529     }
530 }
531