Merge "Add a plus button to the mobile pref on Network & internet page"

This commit is contained in:
TreeHugger Robot
2019-01-29 22:08:33 +00:00
committed by Android (Google) Code Review
8 changed files with 411 additions and 45 deletions

View File

@@ -16,10 +16,16 @@
package com.android.settings.network;
import static android.telephony.TelephonyManager.MultiSimVariants.DSDS;
import static android.telephony.TelephonyManager.MultiSimVariants.UNKNOWN;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -28,8 +34,11 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager;
import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.widget.AddPreference;
import org.junit.After;
import org.junit.Before;
@@ -44,7 +53,6 @@ import org.robolectric.RobolectricTestRunner;
import java.util.Arrays;
import androidx.lifecycle.Lifecycle;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@RunWith(RobolectricTestRunner.class)
@@ -52,10 +60,12 @@ public class MobileNetworkSummaryControllerTest {
@Mock
private Lifecycle mLifecycle;
@Mock
PreferenceScreen mPreferenceScreen;
private TelephonyManager mTelephonyManager;
Preference mPreference;
@Mock
private PreferenceScreen mPreferenceScreen;
private AddPreference mPreference;
private Context mContext;
private MobileNetworkSummaryController mController;
@@ -63,8 +73,11 @@ public class MobileNetworkSummaryControllerTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(Robolectric.setupActivity(Activity.class));
when(mContext.getSystemService(eq(TelephonyManager.class))).thenReturn(mTelephonyManager);
when(mTelephonyManager.getMultiSimConfiguration()).thenReturn(UNKNOWN);
mController = new MobileNetworkSummaryController(mContext, mLifecycle);
mPreference = new Preference(mContext);
mPreference = spy(new AddPreference(mContext, null));
mPreference.setKey(mController.getPreferenceKey());
when(mPreferenceScreen.findPreference(eq(mController.getPreferenceKey()))).thenReturn(
mPreference);
@@ -76,15 +89,21 @@ public class MobileNetworkSummaryControllerTest {
}
@Test
public void getSummary_noSubscriptions_correctSummary() {
public void getSummary_noSubscriptions_correctSummaryAndClickHandler() {
mController.displayPreference(mPreferenceScreen);
mController.onResume();
assertThat(mController.getSummary()).isEqualTo("Add a network");
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(intentCaptor.capture());
assertThat(intentCaptor.getValue().getAction()).isEqualTo(
EuiccManager.ACTION_PROVISION_EMBEDDED_SUBSCRIPTION);
}
@Test
public void getSummary_oneSubscription_correctSummaryAndClickHandler() {
SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
when(sub1.getSubscriptionId()).thenReturn(1);
when(sub1.getDisplayName()).thenReturn("sub1");
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
@@ -93,7 +112,7 @@ public class MobileNetworkSummaryControllerTest {
assertThat(mController.getSummary()).isEqualTo("sub1");
assertThat(mPreference.getFragment()).isNull();
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(intentCaptor.capture());
assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
MobileNetworkActivity.class.getName());
@@ -101,8 +120,8 @@ public class MobileNetworkSummaryControllerTest {
@Test
public void getSummary_twoSubscriptions_correctSummaryAndFragment() {
SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
when(sub1.getSubscriptionId()).thenReturn(1);
when(sub2.getSubscriptionId()).thenReturn(2);
@@ -115,8 +134,8 @@ public class MobileNetworkSummaryControllerTest {
@Test
public void getSummaryAfterUpdate_twoSubscriptionsBecomesOne_correctSummaryAndFragment() {
SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
when(sub1.getSubscriptionId()).thenReturn(1);
when(sub2.getSubscriptionId()).thenReturn(2);
when(sub1.getDisplayName()).thenReturn("sub1");
@@ -135,7 +154,7 @@ public class MobileNetworkSummaryControllerTest {
assertThat(mController.getSummary()).isEqualTo("sub1");
assertThat(mPreference.getFragment()).isNull();
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(intentCaptor.capture());
assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
MobileNetworkActivity.class.getName());
@@ -143,8 +162,8 @@ public class MobileNetworkSummaryControllerTest {
@Test
public void getSummaryAfterUpdate_oneSubscriptionBecomesTwo_correctSummaryAndFragment() {
SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
when(sub1.getSubscriptionId()).thenReturn(1);
when(sub2.getSubscriptionId()).thenReturn(2);
when(sub1.getDisplayName()).thenReturn("sub1");
@@ -156,7 +175,7 @@ public class MobileNetworkSummaryControllerTest {
assertThat(mController.getSummary()).isEqualTo("sub1");
assertThat(mPreference.getFragment()).isNull();
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(intentCaptor.capture());
assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
MobileNetworkActivity.class.getName());
@@ -168,4 +187,53 @@ public class MobileNetworkSummaryControllerTest {
assertThat(mController.getSummary()).isEqualTo("2 SIMs");
assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
}
@Test
public void addButton_noSubscriptionsSingleSimMode_noAddClickListener() {
mController.displayPreference(mPreferenceScreen);
mController.onResume();
verify(mPreference, never()).setOnAddClickListener(notNull());
}
@Test
public void addButton_oneSubscriptionSingleSimMode_noAddClickListener() {
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
mController.displayPreference(mPreferenceScreen);
mController.onResume();
verify(mPreference, never()).setOnAddClickListener(notNull());
}
@Test
public void addButton_noSubscriptionsMultiSimMode_hasAddClickListenerAndPrefDisabled() {
when(mTelephonyManager.getMultiSimConfiguration()).thenReturn(DSDS);
mController.displayPreference(mPreferenceScreen);
mController.onResume();
assertThat(mPreference.isEnabled()).isFalse();
verify(mPreference, never()).setOnAddClickListener(isNull());
verify(mPreference).setOnAddClickListener(notNull());
}
@Test
public void addButton_oneSubscriptionMultiSimMode_hasAddClickListener() {
when(mTelephonyManager.getMultiSimConfiguration()).thenReturn(DSDS);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
mController.displayPreference(mPreferenceScreen);
mController.onResume();
verify(mPreference, never()).setOnAddClickListener(isNull());
verify(mPreference).setOnAddClickListener(notNull());
}
@Test
public void addButton_twoSubscriptionsMultiSimMode_hasAddClickListener() {
when(mTelephonyManager.getMultiSimConfiguration()).thenReturn(DSDS);
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
mController.displayPreference(mPreferenceScreen);
mController.onResume();
verify(mPreference, never()).setOnAddClickListener(isNull());
verify(mPreference).setOnAddClickListener(notNull());
}
}

View File

@@ -0,0 +1,149 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.widget;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.view.View;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.PreferenceViewHolder;
@RunWith(RobolectricTestRunner.class)
public class AddPreferenceTest {
private Context mContext;
private PreferenceViewHolder mViewHolder;
private View mWidgetFrame;
private View mAddWidget;
private AddPreference mPreference;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mPreference = new AddPreference(mContext, null);
final View view = spy(View.inflate(mContext, mPreference.getLayoutResource(), null));
mViewHolder = PreferenceViewHolder.createInstanceForTests(view);
mWidgetFrame = view.findViewById(android.R.id.widget_frame);
mAddWidget = spy(View.inflate(mContext, mPreference.getSecondTargetResId(), null));
when(mViewHolder.findViewById(mPreference.getAddWidgetResId())).thenReturn(mAddWidget);
}
@Test
public void onBindViewHolder_noListener_addButtonNotVisible() {
mPreference.onBindViewHolder(mViewHolder);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void onBindViewHolder_hasListener_addButtonVisible() {
mPreference.setOnAddClickListener(p -> {});
mPreference.onBindViewHolder(mViewHolder);
assertThat(mPreference.shouldHideSecondTarget()).isFalse();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void setOnAddClickListener_listenerAddedAfterBinding_addButtonBecomesVisible() {
mPreference.onBindViewHolder(mViewHolder);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
mPreference.setOnAddClickListener(p -> {});
assertThat(mPreference.shouldHideSecondTarget()).isFalse();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void setOnAddClickListener_listenerRemovedAfterBinding_addButtonNotVisible() {
mPreference.setOnAddClickListener(p -> {});
mPreference.onBindViewHolder(mViewHolder);
assertThat(mPreference.shouldHideSecondTarget()).isFalse();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
mPreference.setOnAddClickListener(null);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void setOnAddClickListener_listenerAddedAndRemovedAfterBinding_addButtonNotVisible() {
mPreference.onBindViewHolder(mViewHolder);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
mPreference.setOnAddClickListener(p -> {});
assertThat(mPreference.shouldHideSecondTarget()).isFalse();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
mPreference.setOnAddClickListener(null);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void onClick_noListener_noCrash() {
mPreference.onBindViewHolder(mViewHolder);
// should be no crash here
mPreference.onClick(mAddWidget);
}
@Test
public void onClick_hasListenerBeforeBind_firesCorrectly() {
final AddPreference.OnAddClickListener listener = mock(
AddPreference.OnAddClickListener.class);
mPreference.setOnAddClickListener(listener);
mPreference.onBindViewHolder(mViewHolder);
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
mPreference.onClick(mAddWidget);
verify(listener).onAddClick(eq(mPreference));
}
@Test
public void onClick_listenerAddedAfterBind_firesCorrectly() {
mPreference.onBindViewHolder(mViewHolder);
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
final AddPreference.OnAddClickListener listener = mock(
AddPreference.OnAddClickListener.class);
mPreference.setOnAddClickListener(listener);
assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
mPreference.onClick(mAddWidget);
verify(listener).onAddClick(eq(mPreference));
}
}