<LinearLayout android:id="@+id/hidden_settings_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:visibility="gone"
style="@style/wifi_item">
<TextView android:id="@+id/hidden_settings_title"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/battery_saver"
- android:key="battery_saver">
+ android:key="battery_saver_page">
<!-- Turn on automatically -->
<SwitchPreference
android:key="auto_battery_saver"
android:title="@string/battery_saver_auto_title"
- settings:controller="com.android.settings.fuelgauge.batterysaver.AutoBatterySaverPreferenceController"/>
+ settings:controller="com.android.settings.fuelgauge.batterysaver.AutoBatterySaverPreferenceController" />
<com.android.settings.widget.SeekBarPreference
android:key="battery_saver_seek_bar"
android:title="@string/battery_saver_seekbar_title_placeholder"
android:max="75"
- android:min="5"/>
+ android:min="5" />
<com.android.settings.widget.TwoStateButtonPreference
- android:key="battery_saver_button_container"
+ android:key="battery_saver"
+ android:title="@string/battery_saver"
android:selectable="false"
settings:textOn="@string/battery_saver_button_turn_on"
- settings:textOff="@string/battery_saver_button_turn_off"/>
+ settings:textOff="@string/battery_saver_button_turn_off"
+ settings:platform_slice="true"
+ settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController" />
<PreferenceCategory
android:key="battery_saver_footer">
<com.android.settingslib.widget.FooterPreference
android:key="battery_saver_footer_preference"
android:title="@*android:string/battery_saver_description"
- android:selectable="false"/>
+ android:selectable="false" />
</PreferenceCategory>
</PreferenceScreen>
import android.content.Context;
import android.os.PowerManager;
-import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import com.android.settings.core.TogglePreferenceController;
import com.android.settings.fuelgauge.BatterySaverReceiver;
-import com.android.settings.widget.TwoStateButtonPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settings.widget.TwoStateButtonPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
* Controller to update the battery saver button
*/
public class BatterySaverButtonPreferenceController extends
- TwoStateButtonPreferenceController implements
+ TogglePreferenceController implements
LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
- private static final String KEY = "battery_saver_button_container";
- private BatterySaverReceiver mBatterySaverReceiver;
- @VisibleForTesting
- PowerManager mPowerManager;
- public BatterySaverButtonPreferenceController(Context context, Lifecycle lifecycle) {
- super(context, KEY);
+ private final BatterySaverReceiver mBatterySaverReceiver;
+ private final PowerManager mPowerManager;
+
+ private TwoStateButtonPreference mPreference;
+
+ public BatterySaverButtonPreferenceController(Context context, String key) {
+ super(context, key);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mBatterySaverReceiver = new BatterySaverReceiver(context);
mBatterySaverReceiver.setBatterySaverListener(this);
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public boolean isSliceable() {
+ return true;
}
@Override
}
@Override
- public void updateState(Preference preference) {
- super.updateState(preference);
- setButtonVisibility(!mPowerManager.isPowerSaveMode());
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = (TwoStateButtonPreference) screen.findPreference(getPreferenceKey());
}
@Override
- public int getAvailabilityStatus() {
- return AVAILABLE;
+ public boolean isChecked() {
+ return mPowerManager.isPowerSaveMode();
}
@Override
- public void onButtonClicked(boolean stateOn) {
+ public boolean setChecked(boolean stateOn) {
// This screen already shows a warning, so we don't need another warning.
- BatterySaverUtils.setPowerSaveMode(mContext, stateOn, /*needFirstTimeWarning*/ false);
+ return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
+ false /* needFirstTimeWarning */);
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (mPreference != null) {
+ mPreference.setChecked(isChecked());
+ }
}
@Override
public void onPowerSaveModeChanged() {
- setButtonVisibility(!mPowerManager.isPowerSaveMode());
+ final boolean isChecked = isChecked();
+ if (mPreference != null && mPreference.isChecked() != isChecked) {
+ mPreference.setChecked(isChecked);
+ }
}
@Override
public void onBatteryChanged(boolean pluggedIn) {
- setButtonEnabled(!pluggedIn);
+ if (mPreference != null) {
+ mPreference.setButtonEnabled(!pluggedIn);
+ }
}
}
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new AutoBatterySaverPreferenceController(context));
controllers.add(new AutoBatterySeekBarPreferenceController(context, lifecycle));
- controllers.add(new BatterySaverButtonPreferenceController(context, lifecycle));
return controllers;
}
FeatureFactory.getFactory(context).getMetricsFeatureProvider()
.action(context, MetricsEvent.ACTION_SETTINGS_SLICE_REQUESTED, sliceNamePair);
- if (controller.getAvailabilityStatus() != AVAILABLE) {
- return buildUnavailableSlice(context, sliceData, controller);
+ if (!controller.isAvailable()) {
+ // Cannot guarantee setting page is accessible, let the presenter handle error case.
+ return null;
+ }
+
+ if (controller.getAvailabilityStatus() == DISABLED_DEPENDENT_SETTING) {
+ return buildUnavailableSlice(context, sliceData);
}
switch (sliceData.getSliceType()) {
}
/**
- * @return {@link PendingIntent} to the Settings home page.
- */
- public static PendingIntent getSettingsIntent(Context context) {
- final Intent intent = new Intent(Settings.ACTION_SETTINGS);
- return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
- }
-
- /**
* @return the summary text for a {@link Slice} built for {@param sliceData}.
*/
public static CharSequence getSubtitleText(Context context,
return keywords;
}
- private static Slice buildUnavailableSlice(Context context, SliceData data,
- BasePreferenceController controller) {
+ private static Slice buildUnavailableSlice(Context context, SliceData data) {
final String title = data.getTitle();
final List<String> keywords = buildSliceKeywords(data);
@ColorInt final int color = Utils.getColorAccent(context);
- final String summary;
- final SliceAction primaryAction;
+ final CharSequence summary = context.getText(R.string.disabled_dependent_setting_summary);
final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource());
-
- switch (controller.getAvailabilityStatus()) {
- case UNSUPPORTED_ON_DEVICE:
- summary = context.getString(R.string.unsupported_setting_summary);
- primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
- break;
- case DISABLED_FOR_USER:
- summary = context.getString(R.string.disabled_for_user_setting_summary);
- primaryAction = new SliceAction(getContentPendingIntent(context, data), icon,
- title);
- break;
- case DISABLED_DEPENDENT_SETTING:
- summary = context.getString(R.string.disabled_dependent_setting_summary);
- primaryAction = new SliceAction(getContentPendingIntent(context, data), icon,
- title);
- break;
- case CONDITIONALLY_UNAVAILABLE:
- default:
- summary = context.getString(R.string.unknown_unavailability_setting_summary);
- primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
- }
+ final SliceAction primaryAction = new SliceAction(getContentPendingIntent(context, data),
+ icon, title);
return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
.addRow(builder -> builder
.setTitle(title)
+ .setTitleItem(icon)
.setSubtitle(summary)
.setPrimaryAction(primaryAction))
.setKeywords(keywords)
import android.content.Context;
import android.content.res.TypedArray;
+import android.support.annotation.VisibleForTesting;
import android.support.v4.content.res.TypedArrayUtils;
import android.util.AttributeSet;
+import android.view.View;
import android.widget.Button;
import com.android.settings.R;
/**
* Preference that presents a button with two states(On vs Off)
*/
-public class TwoStateButtonPreference extends LayoutPreference {
+public class TwoStateButtonPreference extends LayoutPreference implements
+ View.OnClickListener {
+
+ private boolean mIsChecked;
+ private final Button mButtonOn;
+ private final Button mButtonOff;
+
public TwoStateButtonPreference(Context context, AttributeSet attrs) {
super(context, attrs, TypedArrayUtils.getAttr(
context, R.attr.twoStateButtonPreferenceStyle, android.R.attr.preferenceStyle));
- if (attrs != null) {
+ if (attrs == null) {
+ mButtonOn = null;
+ mButtonOff = null;
+ } else {
final TypedArray styledAttrs = context.obtainStyledAttributes(attrs,
R.styleable.TwoStateButtonPreference);
final int textOnId = styledAttrs.getResourceId(
R.string.summary_placeholder);
styledAttrs.recycle();
- final Button buttonOn = getStateOnButton();
- buttonOn.setText(textOnId);
- final Button buttonOff = getStateOffButton();
- buttonOff.setText(textOffId);
+ mButtonOn = findViewById(R.id.state_on_button);
+ mButtonOn.setText(textOnId);
+ mButtonOn.setOnClickListener(this);
+ mButtonOff = findViewById(R.id.state_off_button);
+ mButtonOff.setText(textOffId);
+ mButtonOff.setOnClickListener(this);
+ setChecked(isChecked());
}
}
- public Button getStateOnButton() {
- return findViewById(R.id.state_on_button);
+ @Override
+ public void onClick(View v) {
+ final boolean stateOn = v.getId() == R.id.state_on_button;
+ setChecked(stateOn);
+ callChangeListener(stateOn);
+ }
+
+ public void setChecked(boolean checked) {
+ // Update state
+ mIsChecked = checked;
+ // And update UI
+ if (checked) {
+ mButtonOn.setVisibility(View.GONE);
+ mButtonOff.setVisibility(View.VISIBLE);
+ } else {
+ mButtonOn.setVisibility(View.VISIBLE);
+ mButtonOff.setVisibility(View.GONE);
+ }
}
+ public boolean isChecked() {
+ return mIsChecked;
+ }
+
+ public void setButtonEnabled(boolean enabled) {
+ mButtonOn.setEnabled(enabled);
+ mButtonOff.setEnabled(enabled);
+ }
+
+ @VisibleForTesting
+ public Button getStateOnButton() {
+ return mButtonOn;
+ }
+ @VisibleForTesting
public Button getStateOffButton() {
- return findViewById(R.id.state_off_button);
+ return mButtonOff;
}
}
\ No newline at end of file
+++ /dev/null
-/*
- * 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 android.content.Context;
-import android.support.v7.preference.PreferenceScreen;
-import android.view.View;
-import android.widget.Button;
-
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
-
-/**
- * Controller to update the button with two states(On vs Off).
- */
-public abstract class TwoStateButtonPreferenceController extends BasePreferenceController
- implements View.OnClickListener {
- private Button mButtonOn;
- private Button mButtonOff;
-
- public TwoStateButtonPreferenceController(Context context, String key) {
- super(context, key);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- final TwoStateButtonPreference preference =
- (TwoStateButtonPreference) screen.findPreference(getPreferenceKey());
- mButtonOn = preference.getStateOnButton();
- mButtonOn.setOnClickListener(this);
- mButtonOff = preference.getStateOffButton();
- mButtonOff.setOnClickListener(this);
- }
-
- protected void setButtonVisibility(boolean stateOn) {
- if (stateOn) {
- mButtonOff.setVisibility(View.GONE);
- mButtonOn.setVisibility(View.VISIBLE);
- } else {
- mButtonOff.setVisibility(View.VISIBLE);
- mButtonOn.setVisibility(View.GONE);
- }
- }
-
- protected void setButtonEnabled(boolean enabled) {
- mButtonOn.setEnabled(enabled);
- mButtonOff.setEnabled(enabled);
- }
-
- @Override
- public void onClick(View v) {
- final boolean stateOn = v.getId() == R.id.state_on_button;
- onButtonClicked(stateOn);
- }
-
- /**
- * Callback when button is clicked
- *
- * @param stateOn {@code true} if stateOn button is clicked, otherwise it means stateOff
- * button is clicked
- */
- public abstract void onButtonClicked(boolean stateOn);
-}
\ No newline at end of file
mMeteredSettingsSpinner = mView.findViewById(R.id.metered_settings);
mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings);
mHiddenSettingsSpinner.setOnItemSelectedListener(this);
- mHiddenSettingsSpinner.setVisibility(View.GONE);
- mHiddenSettingsSpinner.setEnabled(false);
mHiddenWarningView = mView.findViewById(R.id.hidden_settings_warning);
mHiddenWarningView.setVisibility(
mHiddenSettingsSpinner.getSelectedItemPosition() == NOT_HIDDEN_NETWORK
showProxyFields();
mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE);
// Hidden option can be changed only when the user adds a network manually.
- mHiddenSettingsSpinner.setVisibility(View.VISIBLE);
- mHiddenSettingsSpinner.setEnabled(true);
+ mView.findViewById(R.id.hidden_settings_field).setVisibility(View.VISIBLE);
((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox))
.setOnCheckedChangeListener(this);
import android.content.Intent;
import android.net.Uri;
import android.os.PersistableBundle;
+import android.provider.Settings;
import android.support.v4.graphics.drawable.IconCompat;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
return getNonActionableWifiCallingSlice(
mContext.getString(R.string.wifi_calling_settings_title),
mContext.getString(R.string.wifi_calling_not_supported, carrierName),
- sliceUri, SliceBuilderUtils.getSettingsIntent(mContext));
+ sliceUri, getSettingsIntent(mContext));
}
final ImsManager imsManager = getImsManager(subId);
return getNonActionableWifiCallingSlice(
mContext.getString(R.string.wifi_calling_settings_title),
mContext.getString(R.string.wifi_calling_not_supported, carrierName),
- sliceUri, SliceBuilderUtils.getSettingsIntent(mContext));
+ sliceUri, getSettingsIntent(mContext));
}
try {
return intent;
}
+ /**
+ * @return {@link PendingIntent} to the Settings home page.
+ */
+ public static PendingIntent getSettingsIntent(Context context) {
+ final Intent intent = new Intent(Settings.ACTION_SETTINGS);
+ return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
+ }
+
private PendingIntent getBroadcastIntent(String action) {
final Intent intent = new Intent(action);
intent.setClass(mContext, SliceBroadcastReceiver.class);
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
-import android.arch.lifecycle.LifecycleOwner;
import android.content.Context;
import android.os.PowerManager;
import android.support.v7.preference.PreferenceScreen;
-import android.view.View;
import android.widget.Button;
-import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.TwoStateButtonPreference;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowPowerManager;
+import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = ShadowPowerManager.class)
private BatterySaverButtonPreferenceController mController;
private Context mContext;
- private Lifecycle mLifecycle;
- private LifecycleOwner mLifecycleOwner;
private Button mButtonOn;
private Button mButtonOff;
private PowerManager mPowerManager;
- @Mock
private TwoStateButtonPreference mPreference;
+
@Mock
private PreferenceScreen mPreferenceScreen;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
-
- mLifecycleOwner = () -> mLifecycle;
- mLifecycle = new Lifecycle(mLifecycleOwner);
mContext = spy(RuntimeEnvironment.application);
- mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString());
-
mButtonOn = new Button(mContext);
- mButtonOn.setId(R.id.state_on_button);
- doReturn(mButtonOn).when(mPreference).getStateOnButton();
mButtonOff = new Button(mContext);
- mButtonOff.setId(R.id.state_off_button);
- doReturn(mButtonOff).when(mPreference).getStateOffButton();
+ mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+ mPreference = spy(new TwoStateButtonPreference(mContext, null /* AttributeSet */));
+ ReflectionHelpers.setField(mPreference, "mButtonOn", mButtonOn);
+ ReflectionHelpers.setField(mPreference, "mButtonOff", mButtonOff);
+ doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString());
- mController = new BatterySaverButtonPreferenceController(mContext, mLifecycle);
+ mController = new BatterySaverButtonPreferenceController(mContext, "test_key");
mController.displayPreference(mPreferenceScreen);
}
@Test
- public void testUpdateState_lowPowerOn_displayButtonOff() {
+ public void updateState_lowPowerOn_preferenceIsChecked() {
mPowerManager.setPowerSaveMode(true);
mController.updateState(mPreference);
- assertThat(mButtonOn.getVisibility()).isEqualTo(View.GONE);
- assertThat(mButtonOff.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mPreference.isChecked()).isTrue();
}
@Test
- public void testUpdateState_lowPowerOff_displayButtonOn() {
+ public void testUpdateState_lowPowerOff_preferenceIsUnchecked() {
mPowerManager.setPowerSaveMode(false);
mController.updateState(mPreference);
- assertThat(mButtonOn.getVisibility()).isEqualTo(View.VISIBLE);
- assertThat(mButtonOff.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mPreference.isChecked()).isFalse();
}
@Test
- public void testOnClick_clickButtonOn_setPowerSaveMode() {
- mController.onClick(mButtonOn);
+ public void setChecked_on_setPowerSaveMode() {
+ mController.setChecked(true);
assertThat(mPowerManager.isPowerSaveMode()).isTrue();
}
@Test
- public void testOnClick_clickButtonOff_clearPowerSaveMode() {
- mController.onClick(mButtonOff);
+ public void setChecked_off_unsetPowerSaveMode() {
+ mController.setChecked(false);
assertThat(mPowerManager.isPowerSaveMode()).isFalse();
}
final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
- SliceTester.testSettingsUnavailableSlice(mContext, slice, data);
+ assertThat(slice).isNull();
}
@Test
final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
- SliceTester.testSettingsUnavailableSlice(mContext, slice, data);
+ assertThat(slice).isNull();
}
@Test
.isEqualTo(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME);
assertThat(capturedLoggingPair.second)
.isEqualTo(data.getKey());
- SliceTester.testSettingsUnavailableSlice(mContext, slice, data);
+ assertThat(slice).isNull();
}
@Test
assertThat(intentData).isEqualTo(expectedUri);
}
- @Test
- public void getSettingsIntent_createsIntentToSettings() {
- final Intent intent = new Intent(Settings.ACTION_SETTINGS);
- final PendingIntent expectedIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
-
- final PendingIntent settingsIntent = SliceBuilderUtils.getSettingsIntent(mContext);
-
- assertThat(expectedIntent).isEqualTo(settingsIntent);
- }
-
private SliceData getDummyData() {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE);
}
assertThat(toggles).isEmpty();
final PendingIntent primaryPendingIntent = metadata.getPrimaryAction().getAction();
- final int availabilityStatus = SliceBuilderUtils.getPreferenceController(context,
- sliceData).getAvailabilityStatus();
- switch (availabilityStatus) {
- case UNSUPPORTED_ON_DEVICE:
- case CONDITIONALLY_UNAVAILABLE:
- assertThat(primaryPendingIntent).isEqualTo(
- SliceBuilderUtils.getSettingsIntent(context));
- break;
- case DISABLED_FOR_USER:
- case DISABLED_DEPENDENT_SETTING:
- assertThat(primaryPendingIntent).isEqualTo(
- SliceBuilderUtils.getContentPendingIntent(context, sliceData));
- break;
- }
+ assertThat(primaryPendingIntent).isEqualTo(SliceBuilderUtils.getContentPendingIntent(
+ context, sliceData));
final List<SliceItem> sliceItems = slice.getItems();
assertTitle(sliceItems, sliceData.getTitle());
package com.android.settings.widget;
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import android.content.Context;
-import android.support.v7.preference.PreferenceScreen;
import android.view.View;
import android.widget.Button;
+import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
-public class TwoStateButtonPreferenceControllerTest {
+public class TwoStateButtonPreferenceTest {
- private static final String KEY = "pref_key";
-
- @Mock
- private PreferenceScreen mPreferenceScreen;
- @Mock
private TwoStateButtonPreference mPreference;
- private TwoStateButtonPreferenceController mController;
private Context mContext;
private Button mButtonOn;
private Button mButtonOff;
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
- doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString());
+ mPreference = spy(new TwoStateButtonPreference(mContext, null /* AttributeSet */));
mButtonOn = new Button(mContext);
- doReturn(mButtonOn).when(mPreference).getStateOnButton();
+ mButtonOn.setId(R.id.state_on_button);
mButtonOff = new Button(mContext);
- doReturn(mButtonOff).when(mPreference).getStateOffButton();
-
- mController = new TestButtonsPreferenceController(mContext, KEY);
- mController.displayPreference(mPreferenceScreen);
+ mButtonOff.setId(R.id.state_off_button);
+ ReflectionHelpers.setField(mPreference, "mButtonOn", mButtonOn);
+ ReflectionHelpers.setField(mPreference, "mButtonOff", mButtonOff);
}
@Test
public void testSetButtonVisibility_stateOn_onlyShowButtonOn() {
- mController.setButtonVisibility(true /* stateOn */);
+ mPreference.setChecked(true /* stateOn */);
- assertThat(mButtonOn.getVisibility()).isEqualTo(View.VISIBLE);
- assertThat(mButtonOff.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mButtonOn.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mButtonOff.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void testSetButtonVisibility_stateOff_onlyShowButtonOff() {
- mController.setButtonVisibility(false /* stateOn */);
+ mPreference.setChecked(false /* stateOn */);
- assertThat(mButtonOn.getVisibility()).isEqualTo(View.GONE);
- assertThat(mButtonOff.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mButtonOn.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mButtonOff.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void testSetButtonEnabled_enabled_buttonEnabled() {
- mController.setButtonEnabled(true /* enabled */);
+ mPreference.setButtonEnabled(true /* enabled */);
assertThat(mButtonOn.isEnabled()).isTrue();
assertThat(mButtonOff.isEnabled()).isTrue();
@Test
public void testSetButtonEnabled_disabled_buttonDisabled() {
- mController.setButtonEnabled(false /* enabled */);
+ mPreference.setButtonEnabled(false /* enabled */);
assertThat(mButtonOn.isEnabled()).isFalse();
assertThat(mButtonOff.isEnabled()).isFalse();
}
- /**
- * Controller to test methods in {@link TwoStateButtonPreferenceController}
- */
- public static class TestButtonsPreferenceController
- extends TwoStateButtonPreferenceController {
-
- TestButtonsPreferenceController(Context context, String key) {
- super(context, key);
- }
-
- @Override
- public void onButtonClicked(boolean stateOn) {
- //do nothing
- }
-
- @Override
- public int getAvailabilityStatus() {
- return AVAILABLE;
- }
+ @Test
+ public void onClick_shouldPropagateChangeToListener() {
+ mPreference.onClick(mButtonOn);
+ verify(mPreference).callChangeListener(true);
+
+ mPreference.onClick(mButtonOff);
+ verify(mPreference).callChangeListener(false);
}
}
}
@Test
- public void hiddenView_isDisabledWhenAppropriate() {
- View hiddenSpinner = mView.findViewById(R.id.hidden_settings);
- assertThat(hiddenSpinner.isEnabled()).isFalse();
+ public void hiddenField_visibilityUpdatesCorrectly() {
+ View hiddenField = mView.findViewById(R.id.hidden_settings_field);
+ assertThat(hiddenField.getVisibility()).isEqualTo(View.GONE);
mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */,
WifiConfigUiBase.MODE_CONNECT);
- assertThat(hiddenSpinner.isEnabled()).isTrue();
- }
-
-
- @Test
- public void hiddenSpinner_visibilityUpdatesCorrectly() {
- View hiddenSpinner = mView.findViewById(R.id.hidden_settings);
- assertThat(hiddenSpinner.isEnabled()).isFalse();
- assertThat(hiddenSpinner.getVisibility()).isEqualTo(View.GONE);
-
- mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */,
- WifiConfigUiBase.MODE_CONNECT);
- assertThat(hiddenSpinner.isEnabled()).isTrue();
- assertThat(hiddenSpinner.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(hiddenField.getVisibility()).isEqualTo(View.VISIBLE);
}
public class TestWifiConfigController extends WifiConfigController {
final Slice slice = mWfcSliceHelper.createWifiCallingSlice(mWfcURI);
testWifiCallingSettingsUnavailableSlice(slice, null,
- SliceBuilderUtils.getSettingsIntent(mContext));
+ WifiCallingSliceHelper.getSettingsIntent(mContext));
}
@Test
assertThat(mWfcSliceHelper.getDefaultVoiceSubId()).isEqualTo(1);
testWifiCallingSettingsUnavailableSlice(slice, null,
- SliceBuilderUtils.getSettingsIntent(mContext));
+ WifiCallingSliceHelper.getSettingsIntent(mContext));
}
@Test