Files
app_Settings/tests/robotests/src/com/android/settings/widget/HotspotApBandSelectionPreferenceTest.java
Salvador Martinez 10ba9c1786 Update Wifi Tether band selection UI
This CL updates the preference for selecting the enabled tether bands
to allow individual selection of multiple bands instead of forcing
a single selection. Note that while this makes the UI theoretically
support new bands in the future, the wifi backend only supports
selecting a single band or all bands which this CL does not address.

Test: robotests
Bug: 73102003
Change-Id: Ib2d4a2834c5cd11875515d308f7b20bfc8471959
2018-04-19 13:37:09 -07:00

144 lines
5.2 KiB
Java

/*
* Copyright (C) 2018 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.android.settingslib.CustomDialogPreference.CustomPreferenceDialogFragment;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.AlertDialog;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers;
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
public class HotspotApBandSelectionPreferenceTest {
private HotspotApBandSelectionPreference mPreference;
private Context mContext;
private Button mSaveButton;
private View mLayout;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mSaveButton = spy(new Button(mContext));
final CustomPreferenceDialogFragment fragment = mock(CustomPreferenceDialogFragment.class);
final AlertDialog dialog = mock(AlertDialog.class);
when(fragment.getDialog()).thenReturn(dialog);
when(dialog.getButton(anyInt())).thenReturn(mSaveButton);
mPreference = new HotspotApBandSelectionPreference(mContext);
ReflectionHelpers.setField(mPreference, "mFragment", fragment);
final LayoutInflater inflater = LayoutInflater.from(mContext);
mLayout = inflater.inflate(R.layout.hotspot_ap_band_selection_dialog,
new LinearLayout(mContext), false);
}
@Test
public void getWifiBand_updatesBandPresetConfigProvided() {
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_ANY);
mPreference.onBindDialogView(mLayout);
// check that the boxes are set correctly when a pre-existing config is set
assertThat(mPreference.getWifiBand()).isEqualTo(WifiConfiguration.AP_BAND_ANY);
}
@Test
public void getWifiBand_updatesBandWhenBoxesToggled() {
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_ANY);
mPreference.onBindDialogView(mLayout);
assertThat(mPreference.getWifiBand()).isEqualTo(WifiConfiguration.AP_BAND_ANY);
// make sure we have the expected box then toggle it
mPreference.mBox2G.setChecked(false);
// check that band is updated
assertThat(mPreference.getWifiBand()).isEqualTo(WifiConfiguration.AP_BAND_5GHZ);
}
@Test
public void onSaveInstanceState_skipWhenDialogGone() {
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_2GHZ);
mPreference.onBindDialogView(mLayout);
// remove the fragment to make the dialog unavailable
ReflectionHelpers.setField(mPreference, "mFragment", null);
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_ANY);
mPreference.onBindDialogView(mLayout);
// state should only be saved when the dialog is available
Parcelable parcelable = mPreference.onSaveInstanceState();
mPreference.onRestoreInstanceState(parcelable);
assertThat(mPreference.mShouldRestore).isFalse();
}
@Test
public void onSaveInstanceState_presentWhenDialogPresent() {
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_2GHZ);
mPreference.onBindDialogView(mLayout);
Parcelable parcelable = mPreference.onSaveInstanceState();
mPreference.onRestoreInstanceState(parcelable);
assertThat(mPreference.mShouldRestore).isTrue();
}
@Test
public void positiveButton_updatedCorrectly() {
mPreference.setExistingConfigValue(WifiConfiguration.AP_BAND_ANY);
mPreference.onBindDialogView(mLayout);
// button is enabled whole time so far since we have a pre-existing selection
verify(mSaveButton, never()).setEnabled(false);
// clear all boxes and make sure it stays enabled until empty
mPreference.mBox2G.setChecked(false);
mPreference.mBox5G.setChecked(false);
// button should be disabled now
verify(mSaveButton, times(1)).setEnabled(false);
}
}