Unify action buttons to a common widget (part 1)

- Create a preference type to host action button preferences.
- Convert app battery usage page to use the new preference
- Convert wifi detail page to use the new preference

Change-Id: I60bc473986ab46f2897e2537eb0e013fa813a4fc
Fix: 63991885
Test: robotests
This commit is contained in:
Fan Zhang
2017-07-27 12:14:59 -07:00
parent 373a9c5cca
commit 2d28a4ceb4
11 changed files with 486 additions and 136 deletions

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.details;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.any;
@@ -52,7 +51,6 @@ import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import com.android.internal.logging.nano.MetricsProto;
@@ -63,6 +61,8 @@ import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.ActionButtonPreferenceTest;
import com.android.settings.widget.EntityHeaderController;
import com.android.settings.wifi.WifiDetailPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -119,8 +119,7 @@ public class WifiDetailPreferenceControllerTest {
private LayoutPreference mockHeaderLayoutPreference;
@Mock private ImageView mockHeaderIcon;
@Mock private LayoutPreference mockButtonsPref;
@Mock private Button mockSignInButton;
@Mock private ActionButtonPreference mockButtonsPref;
@Mock private WifiDetailPreference mockSignalStrengthPref;
@Mock private WifiDetailPreference mockLinkSpeedPref;
@Mock private WifiDetailPreference mockFrequencyPref;
@@ -130,7 +129,6 @@ public class WifiDetailPreferenceControllerTest {
@Mock private WifiDetailPreference mockGatewayPref;
@Mock private WifiDetailPreference mockSubnetPref;
@Mock private WifiDetailPreference mockDnsPref;
@Mock private Button mockForgetButton;
@Mock private PreferenceCategory mockIpv6Category;
@Mock private WifiDetailPreference mockIpv6AddressesPref;
@@ -211,7 +209,9 @@ public class WifiDetailPreferenceControllerTest {
.thenReturn(mockNetworkInfo);
doNothing().when(mockConnectivityManagerWrapper).registerNetworkCallback(
nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
doNothing().when(mockForgetButton).setOnClickListener(mForgetClickListener.capture());
mockButtonsPref = ActionButtonPreferenceTest.createMock();
when(mockButtonsPref.setButton1OnClickListener(mForgetClickListener.capture()))
.thenReturn(mockButtonsPref);
when(mockWifiInfo.getLinkSpeed()).thenReturn(LINK_SPEED);
when(mockWifiInfo.getRssi()).thenReturn(RSSI);
@@ -256,10 +256,6 @@ public class WifiDetailPreferenceControllerTest {
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_BUTTONS_PREF))
.thenReturn(mockButtonsPref);
when(mockButtonsPref.findViewById(R.id.forget_button))
.thenReturn(mockForgetButton);
when(mockButtonsPref.findViewById(R.id.signin_button))
.thenReturn(mockSignInButton);
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SIGNAL_STRENGTH_PREF))
.thenReturn(mockSignalStrengthPref);
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_LINK_SPEED))
@@ -596,7 +592,7 @@ public class WifiDetailPreferenceControllerTest {
mController = newWifiDetailPreferenceController();
displayAndResume();
verify(mockForgetButton).setVisibility(View.INVISIBLE);
verify(mockButtonsPref).setButton1Visible(false);
}
@Test
@@ -606,14 +602,14 @@ public class WifiDetailPreferenceControllerTest {
displayAndResume();
verify(mockForgetButton).setVisibility(View.VISIBLE);
verify(mockButtonsPref).setButton1Visible(true);
}
@Test
public void canForgetNetwork_saved() {
displayAndResume();
verify(mockForgetButton).setVisibility(View.VISIBLE);
verify(mockButtonsPref).setButton1Visible(true);
}
@Test
@@ -716,23 +712,23 @@ public class WifiDetailPreferenceControllerTest {
@Test
public void captivePortal_shouldShowSignInButton() {
InOrder inOrder = inOrder(mockSignInButton);
InOrder inOrder = inOrder(mockButtonsPref);
displayAndResume();
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
inOrder.verify(mockButtonsPref).setButton2Visible(false);
NetworkCapabilities nc = makeNetworkCapabilities();
updateNetworkCapabilities(nc);
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
inOrder.verify(mockButtonsPref).setButton2Visible(false);
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
updateNetworkCapabilities(nc);
inOrder.verify(mockSignInButton).setVisibility(View.VISIBLE);
inOrder.verify(mockButtonsPref).setButton2Visible(true);
nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
updateNetworkCapabilities(nc);
inOrder.verify(mockSignInButton).setVisibility(View.INVISIBLE);
inOrder.verify(mockButtonsPref).setButton2Visible(false);
}
@Test
@@ -740,40 +736,10 @@ public class WifiDetailPreferenceControllerTest {
displayAndResume();
ArgumentCaptor<OnClickListener> captor = ArgumentCaptor.forClass(OnClickListener.class);
verify(mockSignInButton).setOnClickListener(captor.capture());
captor.getValue().onClick(mockSignInButton);
verify(mockButtonsPref).setButton2OnClickListener(captor.capture());
captor.getValue().onClick(null);
verify(mockConnectivityManagerWrapper).startCaptivePortalApp(mockNetwork);
verify(mockMetricsFeatureProvider)
.action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
}
@Test
public void signInButtonVisible_buttonPanelShouldBeVisible() {
when(mockSignInButton.getVisibility()).thenReturn(View.VISIBLE);
when(mockForgetButton.getVisibility()).thenReturn(View.INVISIBLE);
displayAndResume();
verify(mockButtonsPref).setVisible(true);
}
@Test
public void forgetButtonVisible_buttonPanelShouldBeVisible() {
when(mockSignInButton.getVisibility()).thenReturn(View.INVISIBLE);
when(mockForgetButton.getVisibility()).thenReturn(View.VISIBLE);
displayAndResume();
verify(mockButtonsPref).setVisible(true);
}
@Test
public void neitherButtonVisible_buttonPanelShouldBeInvisible() {
when(mockSignInButton.getVisibility()).thenReturn(View.INVISIBLE);
when(mockForgetButton.getVisibility()).thenReturn(View.INVISIBLE);
displayAndResume();
verify(mockButtonsPref).setVisible(false);
}
}