Use SettingsLib's MainSwitchBar to replace SwitchBar in Settings.

To log Settings metrics, the MainSwitch extends MainSwitchBar and
replace the SwitchBar in SettingsActivity.

Bug: 175181773
Test: Run robotest and apply the widget in Settings and see the ui

Change-Id: I3add3702e9058ad9192b5172c7cf0e2ccfb55a70
This commit is contained in:
Stanley Wang
2020-12-25 16:27:32 +08:00
parent c61c2fb1d7
commit b87ddba6cd
51 changed files with 783 additions and 271 deletions

View File

@@ -25,7 +25,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<include layout="@layout/styled_switch_bar"/> <com.android.settingslib.widget.MainSwitchBar
android:id="@+id/main_switch_bar"
android:visibility="invisible"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<LinearLayout <LinearLayout
android:id="@+id/history_off" android:id="@+id/history_off"
@@ -197,4 +201,4 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2020 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.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.android.settings.widget.SettingsMainSwitchBar
android:id="@+id/main_switch_bar"
android:visibility="invisible"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
</LinearLayout>

View File

@@ -22,11 +22,11 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_width="match_parent"> android:layout_width="match_parent">
<com.android.settings.widget.SwitchBar <com.android.settings.widget.SettingsMainSwitchBar
android:id="@+id/switch_bar" android:id="@+id/switch_bar"
android:layout_height="?android:attr/actionBarSize" android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:theme="?attr/switchBarTheme"/> android:layout_height="wrap_content"/>
<FrameLayout <FrameLayout
android:id="@+id/main_content" android:id="@+id/main_content"

View File

@@ -12586,5 +12586,23 @@
<!-- Do not translate. Title for prevent ringing main switch. [CHAR LIMIT=50] --> <!-- Do not translate. Title for prevent ringing main switch. [CHAR LIMIT=50] -->
<string name="prevent_ringing_main_switch_title" translatable="false">Use prevent ringing</string> <string name="prevent_ringing_main_switch_title" translatable="false">Use prevent ringing</string>
<!-- Do not translate. Title for use wifi hotspot main switch [CHAR LIMIT=50]-->
<string name="use_wifi_hotsopt_main_switch_title" translatable="false">Use Wi\u2011Fi hotspot</string>
<!-- Do not translate. Title for bluetooth main switch. [CHAR LIMIT=50] -->
<string name="bluetooth_main_switch_title" translatable="false">Use bluetooth</string>
<!-- Do not translate. Title for app pinning main switch. [CHAR LIMIT=50] -->
<string name="app_pinning_main_switch_title" translatable="false">Use app pinning</string>
<!-- Do not translate. Title for developer options main switch. [CHAR LIMIT=50] -->
<string name="developer_options_main_switch_title" translatable="false">Use developer options</string>
<!-- Do not translate. Title for default print service main switch. [CHAR LIMIT=50] -->
<string name="default_print_service_main_switch_title" translatable="false">Use default print service</string>
<!-- Do not translate. Title for multiple users main switch. [CHAR LIMIT=50] -->
<string name="multiple_users_main_switch_title" translatable="false">Use multiple users</string>
<!-- Do not translate. Title for wireless debugging main switch. [CHAR LIMIT=50] -->
<string name="wireless_debugging_main_switch_title" translatable="false">Use wireless debugging</string>
<!-- Do not translate. Title for graphics driver main switch. [CHAR LIMIT=50] -->
<string name="graphics_driver_main_switch_title" translatable="false">Use graphics driver preferences</string>
<!-- Do not translate. Title for battery saver main switch preferences. [CHAR LIMIT=50] -->
<string name="battery_saver_main_switch_title" translatable="false">Use battery saver</string>
</resources> </resources>

View File

@@ -22,7 +22,7 @@
android:key="pref_app_header" android:key="pref_app_header"
android:layout="@layout/settings_entity_header" /> android:layout="@layout/settings_entity_header" />
<com.android.settingslib.widget.MainSwitchPreference <com.android.settings.widget.SettingsMainSwitchPreference
android:key="block" /> android:key="block" />
<com.android.settings.notification.app.NotificationFooterPreference <com.android.settings.notification.app.NotificationFooterPreference

View File

@@ -19,7 +19,13 @@
xmlns:settings="http://schemas.android.com/apk/res-auto" xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/battery_saver"> android:title="@string/battery_saver">
<com.android.settingslib.widget.MainSwitchPreference
android:order="-100"
android:key="battery_saver"
settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController"/>
<Preference <Preference
android:order="50"
android:key="battery_saver_schedule" android:key="battery_saver_schedule"
android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings" android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings"
android:title="@string/battery_saver_schedule_settings_title" android:title="@string/battery_saver_schedule_settings_title"
@@ -27,23 +33,26 @@
settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverSchedulePreferenceController"/> settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverSchedulePreferenceController"/>
<SwitchPreference <SwitchPreference
android:order="80"
android:key="battery_saver_sticky" android:key="battery_saver_sticky"
android:title="@string/battery_saver_sticky_title_new" android:title="@string/battery_saver_sticky_title_new"
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"
settings:allowDividerBelow="true"
settings:keywords="@string/keywords_battery_saver_sticky" settings:keywords="@string/keywords_battery_saver_sticky"
settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverStickyPreferenceController"/> settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverStickyPreferenceController"/>
<com.android.settings.widget.TwoStateButtonPreference <!-- <com.android.settings.widget.TwoStateButtonPreference-->
android:key="battery_saver" <!-- android:key="battery_saver"-->
android:title="@string/battery_saver" <!-- android:title="@string/battery_saver"-->
android:selectable="false" <!-- android:selectable="false"-->
android:summary="@string/battery_saver_turn_on_summary" <!-- android:summary="@string/battery_saver_turn_on_summary"-->
settings:allowDividerBelow="true" <!-- settings:allowDividerBelow="true"-->
settings:textOn="@string/battery_saver_button_turn_on" <!-- 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:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController"/> <!-- settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController"/>-->
<com.android.settingslib.widget.FooterPreference <com.android.settingslib.widget.FooterPreference
android:order="100"
android:key="battery_saver_footer_preference" android:key="battery_saver_footer_preference"
android:selectable="true" android:selectable="true"
android:title="@*android:string/battery_saver_description" android:title="@*android:string/battery_saver_description"

View File

@@ -19,10 +19,8 @@
android:key="mobile_network_pref_screen" android:key="mobile_network_pref_screen"
settings:initialExpandedChildrenCount="8"> settings:initialExpandedChildrenCount="8">
<com.android.settingslib.widget.LayoutPreference <com.android.settings.widget.SettingsMainSwitchPreference
android:key="use_sim_switch" android:key="use_sim_switch"
android:title="@string/summary_placeholder"
android:layout="@layout/styled_switch_bar"
settings:controller="com.android.settings.network.telephony.MobileNetworkSwitchController"/> settings:controller="com.android.settings.network.telephony.MobileNetworkSwitchController"/>
<PreferenceCategory <PreferenceCategory

View File

@@ -21,9 +21,8 @@
android:key="pref_app_header" android:key="pref_app_header"
android:layout="@layout/settings_entity_header" /> android:layout="@layout/settings_entity_header" />
<com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.MainSwitchPreference
android:key="block" android:key="block" />
android:layout="@layout/styled_switch_bar" />
<!-- Channels added here --> <!-- Channels added here -->

View File

@@ -49,8 +49,8 @@ import com.android.settings.network.TetherEnabler;
import com.android.settings.network.UsbTetherPreferenceController; import com.android.settings.network.UsbTetherPreferenceController;
import com.android.settings.network.WifiTetherDisablePreferenceController; import com.android.settings.network.WifiTetherDisablePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.wifi.tether.WifiTetherApBandPreferenceController; import com.android.settings.wifi.tether.WifiTetherApBandPreferenceController;
import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController; import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController;
import com.android.settings.wifi.tether.WifiTetherBasePreferenceController; import com.android.settings.wifi.tether.WifiTetherBasePreferenceController;
@@ -227,15 +227,15 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment
adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener, adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener,
BluetoothProfile.PAN); BluetoothProfile.PAN);
} }
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar mainSwitch = activity.getSwitchBar();
mTetherEnabler = new TetherEnabler(activity, mTetherEnabler = new TetherEnabler(activity,
new SwitchBarController(switchBar), mBluetoothPan); new MainSwitchBarController(mainSwitch), mBluetoothPan);
getSettingsLifecycle().addObserver(mTetherEnabler); getSettingsLifecycle().addObserver(mTetherEnabler);
use(UsbTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); use(UsbTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(BluetoothTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); use(BluetoothTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(EthernetTetherPreferenceController.class).setTetherEnabler(mTetherEnabler); use(EthernetTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(WifiTetherDisablePreferenceController.class).setTetherEnabler(mTetherEnabler); use(WifiTetherDisablePreferenceController.class).setTetherEnabler(mTetherEnabler);
switchBar.show(); mainSwitch.show();
} }
@Override @Override

View File

@@ -61,7 +61,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.homepage.TopLevelSettings; import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wfd.WifiDisplaySettings; import com.android.settings.wfd.WifiDisplaySettings;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.core.instrumentation.SharedPreferencesLogger; import com.android.settingslib.core.instrumentation.SharedPreferencesLogger;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -172,7 +172,7 @@ public class SettingsActivity extends SettingsBaseActivity
} }
}; };
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mMainSwitch;
private Button mNextButton; private Button mNextButton;
@@ -181,8 +181,8 @@ public class SettingsActivity extends SettingsBaseActivity
private DashboardFeatureProvider mDashboardFeatureProvider; private DashboardFeatureProvider mDashboardFeatureProvider;
public SwitchBar getSwitchBar() { public SettingsMainSwitchBar getSwitchBar() {
return mSwitchBar; return mMainSwitch;
} }
@Override @Override
@@ -292,9 +292,9 @@ public class SettingsActivity extends SettingsBaseActivity
// If CollapsingToolbarLayout is applied, the old action bar won't show title. // If CollapsingToolbarLayout is applied, the old action bar won't show title.
actionBar.setDisplayShowTitleEnabled(mCollapsingToolbarLayout == null); actionBar.setDisplayShowTitleEnabled(mCollapsingToolbarLayout == null);
} }
mSwitchBar = findViewById(R.id.switch_bar); mMainSwitch = findViewById(R.id.switch_bar);
if (mSwitchBar != null) { if (mMainSwitch != null) {
mSwitchBar.setMetricsTag(getMetricsTag()); mMainSwitch.setMetricsTag(getMetricsTag());
} }
// see if we should show Back/Next buttons // see if we should show Back/Next buttons

View File

@@ -51,7 +51,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.accessibility.AccessibilityUtils; import com.android.settingslib.accessibility.AccessibilityUtils;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
@@ -176,7 +176,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.hide(); switchBar.hide();
} }

View File

@@ -11,6 +11,7 @@ import android.os.ServiceManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@@ -21,8 +22,7 @@ import androidx.preference.PreferenceViewHolder;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.ToggleSwitch;
/** /**
* Fragment to display a bunch of text about backup and restore, and allow the user to enable/ * Fragment to display a bunch of text about backup and restore, and allow the user to enable/
@@ -41,8 +41,7 @@ public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
private IBackupManager mBackupManager; private IBackupManager mBackupManager;
protected SwitchBar mSwitchBar; protected SettingsMainSwitchBar mSwitchBar;
protected ToggleSwitch mToggleSwitch;
private Preference mSummaryPreference; private Preference mSummaryPreference;
@@ -79,7 +78,6 @@ public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
SettingsActivity activity = (SettingsActivity) getActivity(); SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar(); mSwitchBar = activity.getSwitchBar();
mToggleSwitch = mSwitchBar.getSwitch();
// Set up UI. // Set up UI.
// If the user has not seen legal text for full data backup (if they OTA from L to M) then // If the user has not seen legal text for full data backup (if they OTA from L to M) then
@@ -105,7 +103,7 @@ public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
mToggleSwitch.setOnBeforeCheckedChangeListener(null); mSwitchBar.setOnBeforeCheckedChangeListener(null);
mSwitchBar.hide(); mSwitchBar.hide();
} }
@@ -115,11 +113,11 @@ public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
// Set up toggle listener. We need this b/c we have to intercept the toggle event in order // Set up toggle listener. We need this b/c we have to intercept the toggle event in order
// to pop up the dialogue. // to pop up the dialogue.
mToggleSwitch.setOnBeforeCheckedChangeListener( mSwitchBar.setOnBeforeCheckedChangeListener(
new ToggleSwitch.OnBeforeCheckedChangeListener() { new SettingsMainSwitchBar.OnBeforeCheckedChangeListener() {
@Override @Override
public boolean onBeforeCheckedChanged( public boolean onBeforeCheckedChanged(
ToggleSwitch toggleSwitch, boolean checked) { Switch toggleSwitch, boolean checked) {
if (!checked) { if (!checked) {
// Don't change Switch status until user makes choice in dialog // Don't change Switch status until user makes choice in dialog
// so return true here. // so return true here.

View File

@@ -75,6 +75,8 @@ public final class BluetoothEnabler implements SwitchWidgetController.OnSwitchCh
mMetricsFeatureProvider = metricsFeatureProvider; mMetricsFeatureProvider = metricsFeatureProvider;
mSwitchController = switchController; mSwitchController = switchController;
mSwitchController.setListener(this); mSwitchController.setListener(this);
mSwitchController.setTitle(context.getString(R.string.bluetooth_main_switch_title));
mValidListener = false; mValidListener = false;
mMetricsEvent = metricsEvent; mMetricsEvent = metricsEvent;
@@ -191,7 +193,6 @@ public final class BluetoothEnabler implements SwitchWidgetController.OnSwitchCh
if (isChecked && !status) { if (isChecked && !status) {
mSwitchController.setChecked(false); mSwitchController.setChecked(false);
mSwitchController.setEnabled(true); mSwitchController.setEnabled(true);
mSwitchController.updateTitle(false);
triggerParentPreferenceCallback(false); triggerParentPreferenceCallback(false);
return false; return false;
} }

View File

@@ -25,8 +25,8 @@ import com.android.settings.bluetooth.BluetoothDeviceRenamePreferenceController;
import com.android.settings.bluetooth.BluetoothSwitchPreferenceController; import com.android.settings.bluetooth.BluetoothSwitchPreferenceController;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
@@ -42,7 +42,7 @@ public class BluetoothDashboardFragment extends DashboardFragment {
private static final String KEY_BLUETOOTH_SCREEN_FOOTER = "bluetooth_screen_footer"; private static final String KEY_BLUETOOTH_SCREEN_FOOTER = "bluetooth_screen_footer";
private FooterPreference mFooterPreference; private FooterPreference mFooterPreference;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private BluetoothSwitchPreferenceController mController; private BluetoothSwitchPreferenceController mController;
@Override @Override
@@ -83,9 +83,9 @@ public class BluetoothDashboardFragment extends DashboardFragment {
SettingsActivity activity = (SettingsActivity) getActivity(); SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar(); mSwitchBar = activity.getSwitchBar();
mSwitchBar.setSwitchBarText(R.string.bluetooth_setting_on, R.string.bluetooth_setting_off); mSwitchBar.setTitle(getContext().getString(R.string.bluetooth_main_switch_title));
mController = new BluetoothSwitchPreferenceController(activity, mController = new BluetoothSwitchPreferenceController(activity,
new SwitchBarController(mSwitchBar), mFooterPreference); new MainSwitchBarController(mSwitchBar), mFooterPreference);
Lifecycle lifecycle = getSettingsLifecycle(); Lifecycle lifecycle = getSettingsLifecycle();
if (lifecycle != null) { if (lifecycle != null) {
lifecycle.addObserver(mController); lifecycle.addObserver(mController);

View File

@@ -25,7 +25,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.location.LocationPersonalSettings; import com.android.settings.location.LocationPersonalSettings;
import com.android.settings.location.LocationSwitchBarController; import com.android.settings.location.LocationSwitchBarController;
import com.android.settings.location.LocationWorkProfileSettings; import com.android.settings.location.LocationWorkProfileSettings;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
/** /**
* Location Setting page for personal/managed profile. * Location Setting page for personal/managed profile.
@@ -36,9 +36,8 @@ public class ProfileSelectLocationFragment extends ProfileSelectFragment {
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title, switchBar.setTitle(getContext().getString(R.string.location_settings_primary_switch_title));
R.string.location_settings_primary_switch_title);
final LocationSwitchBarController switchBarController = new LocationSwitchBarController( final LocationSwitchBarController switchBarController = new LocationSwitchBarController(
activity, switchBar, getSettingsLifecycle()); activity, switchBar, getSettingsLifecycle());
switchBar.show(); switchBar.show();

View File

@@ -29,23 +29,23 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppStateBaseBridge.Callback; import com.android.settings.applications.AppStateBaseBridge.Callback;
import com.android.settings.datausage.DataSaverBackend.Listener; import com.android.settings.datausage.DataSaverBackend.Listener;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.Callbacks; import com.android.settingslib.applications.ApplicationsState.Callbacks;
import com.android.settingslib.applications.ApplicationsState.Session; import com.android.settingslib.applications.ApplicationsState.Session;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.ArrayList; import java.util.ArrayList;
@SearchIndexable @SearchIndexable
public class DataSaverSummary extends SettingsPreferenceFragment public class DataSaverSummary extends SettingsPreferenceFragment
implements OnSwitchChangeListener, Listener, Callback, Callbacks { implements OnMainSwitchChangeListener, Listener, Callback, Callbacks {
private static final String KEY_UNRESTRICTED_ACCESS = "unrestricted_access"; private static final String KEY_UNRESTRICTED_ACCESS = "unrestricted_access";
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private DataSaverBackend mDataSaverBackend; private DataSaverBackend mDataSaverBackend;
private Preference mUnrestrictedAccess; private Preference mUnrestrictedAccess;
private ApplicationsState mApplicationsState; private ApplicationsState mApplicationsState;
@@ -72,9 +72,7 @@ public class DataSaverSummary extends SettingsPreferenceFragment
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar(); mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
mSwitchBar.setSwitchBarText( mSwitchBar.setTitle(getContext().getString(R.string.data_saver_switch_title));
R.string.data_saver_switch_title,
R.string.data_saver_switch_title);
mSwitchBar.show(); mSwitchBar.show();
mSwitchBar.addOnSwitchChangeListener(this); mSwitchBar.addOnSwitchChangeListener(this);
} }

View File

@@ -34,7 +34,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -52,7 +52,7 @@ public class AutomaticStorageManagerSettings extends DashboardFragment
private AutomaticStorageManagerSwitchBarController mSwitchController; private AutomaticStorageManagerSwitchBarController mSwitchController;
private DropDownPreference mDaysToRetain; private DropDownPreference mDaysToRetain;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
@Override @Override
public View onCreateView( public View onCreateView(
@@ -83,8 +83,8 @@ public class AutomaticStorageManagerSettings extends DashboardFragment
private void initializeSwitchBar() { private void initializeSwitchBar() {
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar(); mSwitchBar = activity.getSwitchBar();
mSwitchBar.setSwitchBarText(R.string.automatic_storage_manager_primary_switch_title, mSwitchBar.setTitle(
R.string.automatic_storage_manager_primary_switch_title); getContext().getString(R.string.automatic_storage_manager_primary_switch_title));
mSwitchBar.show(); mSwitchBar.show();
mSwitchController = mSwitchController =
new AutomaticStorageManagerSwitchBarController( new AutomaticStorageManagerSwitchBarController(

View File

@@ -26,25 +26,26 @@ import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
/** Handles the logic for flipping the storage management toggle on a {@link SwitchBar}. */ /** Handles the logic for flipping the storage management toggle on a {@link SwitchBar}. */
public class AutomaticStorageManagerSwitchBarController public class AutomaticStorageManagerSwitchBarController
implements SwitchBar.OnSwitchChangeListener { implements OnMainSwitchChangeListener {
private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
"ro.storage_manager.enabled"; "ro.storage_manager.enabled";
private Context mContext; private Context mContext;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private MetricsFeatureProvider mMetrics; private MetricsFeatureProvider mMetrics;
private Preference mDaysToRetainPreference; private Preference mDaysToRetainPreference;
private FragmentManager mFragmentManager; private FragmentManager mFragmentManager;
public AutomaticStorageManagerSwitchBarController( public AutomaticStorageManagerSwitchBarController(
Context context, Context context,
SwitchBar switchBar, SettingsMainSwitchBar switchBar,
MetricsFeatureProvider metrics, MetricsFeatureProvider metrics,
Preference daysToRetainPreference, Preference daysToRetainPreference,
FragmentManager fragmentManager) { FragmentManager fragmentManager) {

View File

@@ -60,13 +60,14 @@ import com.android.settings.development.bluetooth.BluetoothSampleRateDialogPrefe
import com.android.settings.development.qstile.DevelopmentTiles; import com.android.settings.development.qstile.DevelopmentTiles;
import com.android.settings.development.storage.SharedDataPreferenceController; import com.android.settings.development.storage.SharedDataPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.DeveloperOptionsPreferenceController; import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.SystemPropPoker; import com.android.settingslib.development.SystemPropPoker;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -75,7 +76,7 @@ import java.util.List;
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost, implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
AdbClearKeysDialogHost, LogPersistDialogHost, AdbClearKeysDialogHost, LogPersistDialogHost,
BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener, BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener,
AbstractBluetoothPreferenceController.Callback { AbstractBluetoothPreferenceController.Callback {
@@ -86,7 +87,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
new BluetoothA2dpConfigStore(); new BluetoothA2dpConfigStore();
private boolean mIsAvailable = true; private boolean mIsAvailable = true;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private DevelopmentSwitchBarController mSwitchBarController; private DevelopmentSwitchBarController mSwitchBarController;
private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>(); private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>();
private BluetoothA2dp mBluetoothA2dp; private BluetoothA2dp mBluetoothA2dp;
@@ -197,10 +198,13 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
} }
// Set up primary switch // Set up primary switch
mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar(); mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
mSwitchBar.setTitle(getContext().getString(R.string.developer_options_main_switch_title));
mSwitchBar.show();
mSwitchBar.setTranslationZ(
getActivity().findViewById(R.id.main_content).getTranslationZ() + 1);
mSwitchBarController = new DevelopmentSwitchBarController( mSwitchBarController = new DevelopmentSwitchBarController(
this /* DevelopmentSettings */, mSwitchBar, mIsAvailable, this /* DevelopmentSettings */, mSwitchBar, mIsAvailable,
getSettingsLifecycle()); getSettingsLifecycle());
mSwitchBar.show();
// Restore UI state based on whether developer options is enabled // Restore UI state based on whether developer options is enabled
if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) { if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) {
@@ -231,7 +235,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
if (DevelopmentTiles.WirelessDebugging.class.getName().equals( if (DevelopmentTiles.WirelessDebugging.class.getName().equals(
componentName.getClassName()) && getDevelopmentOptionsController( componentName.getClassName()) && getDevelopmentOptionsController(
WirelessDebuggingPreferenceController.class).isAvailable()) { WirelessDebuggingPreferenceController.class).isAvailable()) {
Log.d(TAG, "Long press from wireless debugging qstile"); Log.d(TAG, "Long press from wireless debugging qstile");
new SubSettingLauncher(getContext()) new SubSettingLauncher(getContext())
.setDestination(WirelessDebuggingFragment.class.getName()) .setDestination(WirelessDebuggingFragment.class.getName())
@@ -383,7 +387,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
@Override @Override
protected int getPreferenceScreenResId() { protected int getPreferenceScreenResId() {
return Utils.isMonkeyRunning()? R.xml.placeholder_prefs : R.xml.development_settings; return Utils.isMonkeyRunning() ? R.xml.placeholder_prefs : R.xml.development_settings;
} }
@Override @Override
@@ -557,7 +561,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new DefaultLaunchPreferenceController(context, "quick_settings_tiles")); controllers.add(new DefaultLaunchPreferenceController(context, "quick_settings_tiles"));
controllers.add(new DefaultLaunchPreferenceController(context, "feature_flags_dashboard")); controllers.add(new DefaultLaunchPreferenceController(context, "feature_flags_dashboard"));
controllers.add( controllers.add(
new DefaultLaunchPreferenceController(context, "default_usb_configuration")); new DefaultLaunchPreferenceController(context, "default_usb_configuration"));
controllers.add(new DefaultLaunchPreferenceController(context, "density")); controllers.add(new DefaultLaunchPreferenceController(context, "density"));
controllers.add(new DefaultLaunchPreferenceController(context, "background_check")); controllers.add(new DefaultLaunchPreferenceController(context, "background_check"));
controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps")); controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));

View File

@@ -19,7 +19,7 @@ package com.android.settings.development;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -28,12 +28,12 @@ import com.android.settingslib.development.DevelopmentSettingsEnabler;
public class DevelopmentSwitchBarController implements LifecycleObserver, OnStart, OnStop { public class DevelopmentSwitchBarController implements LifecycleObserver, OnStart, OnStop {
private final SwitchBar mSwitchBar; private final SettingsMainSwitchBar mSwitchBar;
private final boolean mIsAvailable; private final boolean mIsAvailable;
private final DevelopmentSettingsDashboardFragment mSettings; private final DevelopmentSettingsDashboardFragment mSettings;
public DevelopmentSwitchBarController(@NonNull DevelopmentSettingsDashboardFragment settings, public DevelopmentSwitchBarController(@NonNull DevelopmentSettingsDashboardFragment settings,
SwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) { SettingsMainSwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
mSwitchBar = switchBar; mSwitchBar = switchBar;
mIsAvailable = isAvailable && !Utils.isMonkeyRunning(); mIsAvailable = isAvailable && !Utils.isMonkeyRunning();
mSettings = settings; mSettings = settings;

View File

@@ -15,6 +15,7 @@
*/ */
package com.android.settings.development; package com.android.settings.development;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
@@ -40,7 +41,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -170,9 +172,11 @@ public class WirelessDebuggingFragment extends DashboardFragment
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.wireless_debugging_main_switch_title));
mWifiDebuggingEnabler = new WirelessDebuggingEnabler(activity, mWifiDebuggingEnabler = new WirelessDebuggingEnabler(activity,
new SwitchBarController(activity.getSwitchBar()), this, new MainSwitchBarController(switchBar), this, getSettingsLifecycle());
getSettingsLifecycle());
} }
@Override @Override

View File

@@ -24,8 +24,8 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -62,11 +62,13 @@ public class GraphicsDriverDashboard extends DashboardFragment {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
final GraphicsDriverGlobalSwitchBarController switchBarController = final GraphicsDriverGlobalSwitchBarController switchBarController =
new GraphicsDriverGlobalSwitchBarController( new GraphicsDriverGlobalSwitchBarController(
activity, new SwitchBarController(switchBar)); activity, new MainSwitchBarController(switchBar));
getSettingsLifecycle().addObserver(switchBarController); getSettingsLifecycle().addObserver(switchBarController);
switchBar.setTitle(
getContext().getString(R.string.graphics_driver_main_switch_title));
switchBar.show(); switchBar.show();
} }

View File

@@ -21,28 +21,32 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.SettingsSlicesContract; import android.provider.SettingsSlicesContract;
import android.widget.Switch;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
import com.android.settings.fuelgauge.BatterySaverReceiver; import com.android.settings.fuelgauge.BatterySaverReceiver;
import com.android.settings.widget.TwoStateButtonPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.fuelgauge.BatterySaverUtils; import com.android.settingslib.fuelgauge.BatterySaverUtils;
import com.android.settingslib.widget.MainSwitchPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
/** /**
* Controller to update the battery saver button * Controller to update the battery saver button
*/ */
public class BatterySaverButtonPreferenceController extends public class BatterySaverButtonPreferenceController extends
TogglePreferenceController implements TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver,
LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener { OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
private final BatterySaverReceiver mBatterySaverReceiver; private final BatterySaverReceiver mBatterySaverReceiver;
private final PowerManager mPowerManager; private final PowerManager mPowerManager;
private TwoStateButtonPreference mPreference; private MainSwitchPreference mPreference;
public BatterySaverButtonPreferenceController(Context context, String key) { public BatterySaverButtonPreferenceController(Context context, String key) {
super(context, key); super(context, key);
@@ -84,7 +88,15 @@ public class BatterySaverButtonPreferenceController extends
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey()); mPreference = (MainSwitchPreference) screen.findPreference(getPreferenceKey());
mPreference.setTitle(mContext.getString(R.string.battery_saver_main_switch_title));
mPreference.addOnSwitchChangeListener(this);
mPreference.updateStatus(isChecked());
}
@Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
setChecked(isChecked);
} }
@Override @Override
@@ -95,6 +107,7 @@ public class BatterySaverButtonPreferenceController extends
@Override @Override
public boolean setChecked(boolean stateOn) { public boolean setChecked(boolean stateOn) {
// This screen already shows a warning, so we don't need another warning. // This screen already shows a warning, so we don't need another warning.
mPreference.updateStatus(isChecked());
return BatterySaverUtils.setPowerSaveMode(mContext, stateOn, return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
false /* needFirstTimeWarning */); false /* needFirstTimeWarning */);
} }
@@ -109,8 +122,5 @@ public class BatterySaverButtonPreferenceController extends
@Override @Override
public void onBatteryChanged(boolean pluggedIn) { public void onBatteryChanged(boolean pluggedIn) {
if (mPreference != null) {
mPreference.setButtonEnabled(!pluggedIn);
}
} }
} }

View File

@@ -36,11 +36,11 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener; import com.android.settingslib.widget.OnMainSwitchChangeListener;
public class SpellCheckersSettings extends SettingsPreferenceFragment public class SpellCheckersSettings extends SettingsPreferenceFragment
implements OnSwitchChangeListener, OnPreferenceChangeListener { implements OnMainSwitchChangeListener, OnPreferenceChangeListener {
private static final String TAG = SpellCheckersSettings.class.getSimpleName(); private static final String TAG = SpellCheckersSettings.class.getSimpleName();
private static final boolean DBG = false; private static final boolean DBG = false;
@@ -48,7 +48,7 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
private static final String KEY_DEFAULT_SPELL_CHECKER = "default_spellchecker"; private static final String KEY_DEFAULT_SPELL_CHECKER = "default_spellchecker";
private static final int ITEM_ID_USE_SYSTEM_LANGUAGE = 0; private static final int ITEM_ID_USE_SYSTEM_LANGUAGE = 0;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private Preference mSpellCheckerLanaguagePref; private Preference mSpellCheckerLanaguagePref;
private AlertDialog mDialog = null; private AlertDialog mDialog = null;
private SpellCheckerInfo mCurrentSci; private SpellCheckerInfo mCurrentSci;
@@ -92,9 +92,7 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar(); mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
mSwitchBar.setSwitchBarText( mSwitchBar.setTitle(getContext().getString(R.string.spell_checker_primary_switch_title));
R.string.spell_checker_primary_switch_title,
R.string.spell_checker_primary_switch_title);
mSwitchBar.show(); mSwitchBar.show();
mSwitchBar.addOnSwitchChangeListener(this); mSwitchBar.addOnSwitchChangeListener(this);
updatePreferenceScreen(); updatePreferenceScreen();

View File

@@ -28,7 +28,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.location.RecentLocationApps; import com.android.settingslib.location.RecentLocationApps;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -70,12 +70,11 @@ public class LocationSettings extends DashboardFragment {
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title, switchBar.setTitle(getContext().getString(R.string.location_settings_primary_switch_title));
R.string.location_settings_primary_switch_title); switchBar.show();
mSwitchBarController = new LocationSwitchBarController(activity, switchBar, mSwitchBarController = new LocationSwitchBarController(activity, switchBar,
getSettingsLifecycle()); getSettingsLifecycle());
switchBar.show();
} }
@Override @Override

View File

@@ -17,25 +17,27 @@ import android.content.Context;
import android.os.UserHandle; import android.os.UserHandle;
import android.widget.Switch; import android.widget.Switch;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
public class LocationSwitchBarController implements SwitchBar.OnSwitchChangeListener, /**
* The switch controller for the location.
*/
public class LocationSwitchBarController implements OnMainSwitchChangeListener,
LocationEnabler.LocationModeChangeListener, LifecycleObserver, OnStart, OnStop { LocationEnabler.LocationModeChangeListener, LifecycleObserver, OnStart, OnStop {
private final SwitchBar mSwitchBar; private final SettingsMainSwitchBar mSwitchBar;
private final Switch mSwitch;
private final LocationEnabler mLocationEnabler; private final LocationEnabler mLocationEnabler;
private boolean mValidListener; private boolean mValidListener;
public LocationSwitchBarController(Context context, SwitchBar switchBar, public LocationSwitchBarController(Context context, SettingsMainSwitchBar switchBar,
Lifecycle lifecycle) { Lifecycle lifecycle) {
mSwitchBar = switchBar; mSwitchBar = switchBar;
mSwitch = mSwitchBar.getSwitch();
mLocationEnabler = new LocationEnabler(context, this /* listener */, lifecycle); mLocationEnabler = new LocationEnabler(context, this /* listener */, lifecycle);
if (lifecycle != null) { if (lifecycle != null) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
@@ -77,12 +79,12 @@ public class LocationSwitchBarController implements SwitchBar.OnSwitchChangeList
mSwitchBar.setEnabled(!restricted); mSwitchBar.setEnabled(!restricted);
} }
if (enabled != mSwitch.isChecked()) { if (enabled != mSwitchBar.isChecked()) {
// set listener to null so that that code below doesn't trigger onCheckedChanged() // set listener to null so that that code below doesn't trigger onCheckedChanged()
if (mValidListener) { if (mValidListener) {
mSwitchBar.removeOnSwitchChangeListener(this); mSwitchBar.removeOnSwitchChangeListener(this);
} }
mSwitch.setChecked(enabled); mSwitchBar.setChecked(enabled);
if (mValidListener) { if (mValidListener) {
mSwitchBar.addOnSwitchChangeListener(this); mSwitchBar.addOnSwitchChangeListener(this);
} }

View File

@@ -32,14 +32,13 @@ import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.SubscriptionsChangeListener; import com.android.settings.network.SubscriptionsChangeListener;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.LayoutPreference;
/** This controls a switch to allow enabling/disabling a mobile network */ /** This controls a switch to allow enabling/disabling a mobile network */
public class MobileNetworkSwitchController extends BasePreferenceController implements public class MobileNetworkSwitchController extends BasePreferenceController implements
SubscriptionsChangeListener.SubscriptionsChangeListenerClient, LifecycleObserver { SubscriptionsChangeListener.SubscriptionsChangeListenerClient, LifecycleObserver {
private static final String TAG = "MobileNetworkSwitchCtrl"; private static final String TAG = "MobileNetworkSwitchCtrl";
private SwitchBar mSwitchBar; private SettingsMainSwitchPreference mSwitchBar;
private int mSubId; private int mSubId;
private SubscriptionsChangeListener mChangeListener; private SubscriptionsChangeListener mChangeListener;
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
@@ -70,12 +69,10 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
final LayoutPreference pref = screen.findPreference(mPreferenceKey); mSwitchBar = (SettingsMainSwitchPreference) screen.findPreference(mPreferenceKey);
mSwitchBar = pref.findViewById(R.id.switch_bar); mSwitchBar.setTitle(mContext.getString(R.string.mobile_network_use_sim_on));
mSwitchBar.setSwitchBarText(R.string.mobile_network_use_sim_on,
R.string.mobile_network_use_sim_off);
mSwitchBar.getSwitch().setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> { mSwitchBar.setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
// TODO b/135222940: re-evaluate whether to use // TODO b/135222940: re-evaluate whether to use
// mSubscriptionManager#isSubscriptionEnabled // mSubscriptionManager#isSubscriptionEnabled
if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked) { if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked) {
@@ -118,7 +115,8 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
} }
@Override @Override
public void onAirplaneModeChanged(boolean airplaneModeEnabled) {} public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
}
@Override @Override
public void onSubscriptionsChanged() { public void onSubscriptionsChanged() {

View File

@@ -38,15 +38,16 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedFragment; import com.android.settings.core.InstrumentedFragment;
import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper; import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.HelpUtils; import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
public class AndroidBeam extends InstrumentedFragment public class AndroidBeam extends InstrumentedFragment
implements SwitchBar.OnSwitchChangeListener { implements OnMainSwitchChangeListener {
private View mView; private View mView;
private NfcAdapter mNfcAdapter; private NfcAdapter mNfcAdapter;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private CharSequence mOldActivityTitle; private CharSequence mOldActivityTitle;
private boolean mBeamDisallowedByBase; private boolean mBeamDisallowedByBase;
private boolean mBeamDisallowedByOnlyAdmin; private boolean mBeamDisallowedByOnlyAdmin;

View File

@@ -16,7 +16,6 @@
package com.android.settings.notification.app; package com.android.settings.notification.app;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
@@ -29,11 +28,11 @@ import androidx.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.OnMainSwitchChangeListener;
public class BlockPreferenceController extends NotificationPreferenceController public class BlockPreferenceController extends NotificationPreferenceController
implements PreferenceControllerMixin, SwitchBar.OnSwitchChangeListener { implements PreferenceControllerMixin, OnMainSwitchChangeListener {
private static final String KEY_BLOCK = "block"; private static final String KEY_BLOCK = "block";
private NotificationSettings.DependentFieldListener mDependentFieldListener; private NotificationSettings.DependentFieldListener mDependentFieldListener;
@@ -59,12 +58,10 @@ public class BlockPreferenceController extends NotificationPreferenceController
} }
public void updateState(Preference preference) { public void updateState(Preference preference) {
LayoutPreference pref = (LayoutPreference) preference; SettingsMainSwitchPreference bar = (SettingsMainSwitchPreference) preference;
pref.setSelectable(false);
SwitchBar bar = pref.findViewById(R.id.switch_bar);
if (bar != null) { if (bar != null) {
String switchBarText = getSwitchBarText(); String switchBarText = getSwitchBarText();
bar.setSwitchBarText(switchBarText, switchBarText); bar.setTitle(switchBarText);
bar.show(); bar.show();
try { try {
bar.addOnSwitchChangeListener(this); bar.addOnSwitchChangeListener(this);
@@ -133,7 +130,7 @@ public class BlockPreferenceController extends NotificationPreferenceController
String getSwitchBarText() { String getSwitchBarText() {
if (mChannel != null) { if (mChannel != null) {
return mContext.getString(R.string.notification_content_block_title); return mContext.getString(R.string.notification_content_block_title);
} else { } else {
CharSequence fieldContextName; CharSequence fieldContextName;
if (mChannelGroup != null) { if (mChannelGroup != null) {
fieldContextName = mChannelGroup.getName(); fieldContextName = mChannelGroup.getName();

View File

@@ -44,7 +44,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewOutlineProvider; import android.view.ViewOutlineProvider;
import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@@ -56,8 +55,9 @@ import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.UiEventLoggerImpl;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.MainSwitchBar;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -75,7 +75,7 @@ public class NotificationHistoryActivity extends Activity {
private ViewGroup mTodayView; private ViewGroup mTodayView;
private ViewGroup mSnoozeView; private ViewGroup mSnoozeView;
private ViewGroup mDismissView; private ViewGroup mDismissView;
private SwitchBar mSwitchBar; private MainSwitchBar mSwitchBar;
private HistoryLoader mHistoryLoader; private HistoryLoader mHistoryLoader;
private INotificationManager mNm; private INotificationManager mNm;
@@ -117,9 +117,11 @@ public class NotificationHistoryActivity extends Activity {
NOTIFICATION_HISTORY_OLDER_ITEM_DELETE(513); NOTIFICATION_HISTORY_OLDER_ITEM_DELETE(513);
private int mId; private int mId;
NotificationHistoryEvent(int id) { NotificationHistoryEvent(int id) {
mId = id; mId = id;
} }
@Override @Override
public int getId() { public int getId() {
return mId; return mId;
@@ -171,10 +173,9 @@ public class NotificationHistoryActivity extends Activity {
? getString(R.string.condition_expand_hide) ? getString(R.string.condition_expand_hide)
: getString(R.string.condition_expand_show)); : getString(R.string.condition_expand_show));
header.sendAccessibilityEvent(TYPE_VIEW_ACCESSIBILITY_FOCUSED); header.sendAccessibilityEvent(TYPE_VIEW_ACCESSIBILITY_FOCUSED);
mUiEventLogger.logWithPosition( mUiEventLogger.logWithPosition((container.getVisibility() == View.VISIBLE)
(container.getVisibility() == View.VISIBLE) ? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN
? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN : NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE,
: NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE,
nhp.uid, nhp.pkgName, finalI); nhp.uid, nhp.pkgName, finalI);
}); });
@@ -218,7 +219,7 @@ public class NotificationHistoryActivity extends Activity {
mHistoryOff = findViewById(R.id.history_off); mHistoryOff = findViewById(R.id.history_off);
mHistoryOn = findViewById(R.id.history_on); mHistoryOn = findViewById(R.id.history_on);
mHistoryEmpty = findViewById(R.id.history_on_empty); mHistoryEmpty = findViewById(R.id.history_on_empty);
mSwitchBar = findViewById(R.id.switch_bar); mSwitchBar = findViewById(R.id.main_switch_bar);
ActionBar actionBar = getActionBar(); ActionBar actionBar = getActionBar();
if (actionBar != null) { if (actionBar != null) {
@@ -299,9 +300,8 @@ public class NotificationHistoryActivity extends Activity {
private void bindSwitch() { private void bindSwitch() {
if (mSwitchBar != null) { if (mSwitchBar != null) {
mSwitchBar.setSwitchBarText(R.string.notification_history_toggle,
R.string.notification_history_toggle);
mSwitchBar.show(); mSwitchBar.show();
mSwitchBar.setTitle(getString(R.string.notification_history_toggle));
try { try {
mSwitchBar.addOnSwitchChangeListener(mOnSwitchClickListener); mSwitchBar.addOnSwitchChangeListener(mOnSwitchClickListener);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
@@ -325,7 +325,7 @@ public class NotificationHistoryActivity extends Activity {
mHistoryEmpty.setVisibility(View.GONE); mHistoryEmpty.setVisibility(View.GONE);
} }
private final SwitchBar.OnSwitchChangeListener mOnSwitchClickListener = private final OnMainSwitchChangeListener mOnSwitchClickListener =
(switchView, isChecked) -> { (switchView, isChecked) -> {
int oldState = 0; int oldState = 0;
try { try {
@@ -387,11 +387,11 @@ public class NotificationHistoryActivity extends Activity {
mDismissedRv = mDismissView.findViewById(R.id.notification_list); mDismissedRv = mDismissView.findViewById(R.id.notification_list);
LinearLayoutManager dismissLm = LinearLayoutManager dismissLm =
new LinearLayoutManager(NotificationHistoryActivity.this); new LinearLayoutManager(NotificationHistoryActivity.this);
mDismissedRv.setLayoutManager(dismissLm); mDismissedRv.setLayoutManager(dismissLm);
mDismissedRv.setAdapter( mDismissedRv.setAdapter(
new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm, mUm, new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm, mUm,
false , mUiEventLogger)); false, mUiEventLogger));
mDismissedRv.setNestedScrollingEnabled(false); mDismissedRv.setNestedScrollingEnabled(false);
if (dismissed == null || dismissed.length == 0) { if (dismissed == null || dismissed.length == 0) {
@@ -399,7 +399,7 @@ public class NotificationHistoryActivity extends Activity {
} else { } else {
mDismissView.setVisibility(View.VISIBLE); mDismissView.setVisibility(View.VISIBLE);
((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete( ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
new ArrayList<>(Arrays.asList(dismissed))); new ArrayList<>(Arrays.asList(dismissed)));
} }
mCountdownLatch.countDown(); mCountdownLatch.countDown();

View File

@@ -59,8 +59,8 @@ import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.ToggleSwitch; import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@@ -71,7 +71,7 @@ import java.util.Map;
* Fragment with print service settings. * Fragment with print service settings.
*/ */
public class PrintServiceSettingsFragment extends SettingsPreferenceFragment public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
implements SwitchBar.OnSwitchChangeListener, implements OnMainSwitchChangeListener,
LoaderManager.LoaderCallbacks<List<PrintServiceInfo>> { LoaderManager.LoaderCallbacks<List<PrintServiceInfo>> {
private static final String LOG_TAG = "PrintServiceSettings"; private static final String LOG_TAG = "PrintServiceSettings";
@@ -96,8 +96,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
} }
}; };
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private ToggleSwitch mToggleSwitch;
private String mPreferenceKey; private String mPreferenceKey;
@@ -166,14 +165,14 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
} }
private void onPreferenceToggled(String preferenceKey, boolean enabled) { private void onPreferenceToggled(String preferenceKey, boolean enabled) {
((PrintManager)getContext().getSystemService(Context.PRINT_SERVICE)) ((PrintManager) getContext().getSystemService(Context.PRINT_SERVICE))
.setPrintServiceEnabled(mComponentName, enabled); .setPrintServiceEnabled(mComponentName, enabled);
} }
private void updateEmptyView() { private void updateEmptyView() {
ViewGroup contentRoot = (ViewGroup) getListView().getParent(); ViewGroup contentRoot = (ViewGroup) getListView().getParent();
View emptyView = getEmptyView(); View emptyView = getEmptyView();
if (!mToggleSwitch.isChecked()) { if (!mSwitchBar.isChecked()) {
if (emptyView != null) { if (emptyView != null) {
contentRoot.removeView(emptyView); contentRoot.removeView(emptyView);
emptyView = null; emptyView = null;
@@ -235,11 +234,12 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar(); mSwitchBar = activity.getSwitchBar();
mSwitchBar.setTitle(
getContext().getString(R.string.default_print_service_main_switch_title));
mSwitchBar.addOnSwitchChangeListener(this); mSwitchBar.addOnSwitchChangeListener(this);
mSwitchBar.show(); mSwitchBar.show();
mToggleSwitch = mSwitchBar.getSwitch(); mSwitchBar.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
mToggleSwitch.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
onPreferenceToggled(mPreferenceKey, checked); onPreferenceToggled(mPreferenceKey, checked);
return false; return false;
}); });
@@ -388,6 +388,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
R.string.print_search_box_shown_utterance)); R.string.print_search_box_shown_utterance));
} }
} }
@Override @Override
public void onViewDetachedFromWindow(View view) { public void onViewDetachedFromWindow(View view) {
Activity activity = getActivity(); Activity activity = getActivity();
@@ -565,7 +566,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
TypedValue value = new TypedValue(); TypedValue value = new TypedValue();
getActivity().getTheme().resolveAttribute(android.R.attr.disabledAlpha, value, getActivity().getTheme().resolveAttribute(android.R.attr.disabledAlpha, value,
true); true);
icon.setAlpha((int)(value.getFloat() * 255)); icon.setAlpha((int) (value.getFloat() * 255));
} }
iconView.setImageDrawable(icon); iconView.setImageDrawable(icon);
} else { } else {

View File

@@ -39,26 +39,25 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
* Screen pinning settings. * Screen pinning settings.
*/ */
@SearchIndexable @SearchIndexable
public class ScreenPinningSettings extends SettingsPreferenceFragment public class ScreenPinningSettings extends SettingsPreferenceFragment
implements SwitchBar.OnSwitchChangeListener, DialogInterface.OnClickListener { implements OnMainSwitchChangeListener, DialogInterface.OnClickListener {
private static final String KEY_USE_SCREEN_LOCK = "use_screen_lock"; private static final String KEY_USE_SCREEN_LOCK = "use_screen_lock";
private static final String KEY_FOOTER = "screen_pinning_settings_screen_footer"; private static final String KEY_FOOTER = "screen_pinning_settings_screen_footer";
private static final int CHANGE_LOCK_METHOD_REQUEST = 43; private static final int CHANGE_LOCK_METHOD_REQUEST = 43;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private SwitchPreference mUseScreenLock; private SwitchPreference mUseScreenLock;
private FooterPreference mFooterPreference; private FooterPreference mFooterPreference;
private LockPatternUtils mLockPatternUtils; private LockPatternUtils mLockPatternUtils;
@@ -84,6 +83,7 @@ public class ScreenPinningSettings extends SettingsPreferenceFragment
mFooterPreference = root.findPreference(KEY_FOOTER); mFooterPreference = root.findPreference(KEY_FOOTER);
mSwitchBar = activity.getSwitchBar(); mSwitchBar = activity.getSwitchBar();
mSwitchBar.setTitle(getContext().getString(R.string.app_pinning_main_switch_title));
mSwitchBar.show(); mSwitchBar.show();
mSwitchBar.setChecked(isLockToAppEnabled(getActivity())); mSwitchBar.setChecked(isLockToAppEnabled(getActivity()));
mSwitchBar.addOnSwitchChangeListener(this); mSwitchBar.addOnSwitchChangeListener(this);

View File

@@ -67,8 +67,8 @@ import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
@@ -223,11 +223,12 @@ public class UserSettings extends SettingsPreferenceFragment
// Assume we are in a SettingsActivity. This is only safe because we currently use // Assume we are in a SettingsActivity. This is only safe because we currently use
// SettingsActivity as base for all preference fragments. // SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
mSwitchBarController = new MultiUserSwitchBarController(activity, switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
new SwitchBarController(switchBar), this /* listener */);
getSettingsLifecycle().addObserver(mSwitchBarController);
switchBar.show(); switchBar.show();
mSwitchBarController = new MultiUserSwitchBarController(activity,
new MainSwitchBarController(switchBar), this /* listener */);
getSettingsLifecycle().addObserver(mSwitchBarController);
} }
@Override @Override

View File

@@ -49,7 +49,7 @@ public class GenericSwitchController extends SwitchWidgetController implements
} }
@Override @Override
public void updateTitle(boolean isChecked) { public void setTitle(String title) {
} }
@Override @Override

View File

@@ -0,0 +1,87 @@
/*
* Copyright (C) 2020 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.widget.Switch;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
/**
* The switch controller that is used to update the switch widget in the SettingsMainSwitchBar.
*/
public class MainSwitchBarController extends SwitchWidgetController implements
OnMainSwitchChangeListener {
private final SettingsMainSwitchBar mMainSwitch;
public MainSwitchBarController(SettingsMainSwitchBar mainSwitch) {
mMainSwitch = mainSwitch;
}
@Override
public void setupView() {
mMainSwitch.show();
}
@Override
public void teardownView() {
mMainSwitch.hide();
}
@Override
public void setTitle(String title) {
mMainSwitch.setTitle(title);
}
@Override
public void startListening() {
mMainSwitch.addOnSwitchChangeListener(this);
}
@Override
public void stopListening() {
mMainSwitch.removeOnSwitchChangeListener(this);
}
@Override
public void setChecked(boolean checked) {
mMainSwitch.setChecked(checked);
}
@Override
public boolean isChecked() {
return mMainSwitch.isChecked();
}
@Override
public void setEnabled(boolean enabled) {
mMainSwitch.setEnabled(enabled);
}
@Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
if (mListener != null) {
mListener.onSwitchToggled(isChecked);
}
}
@Override
public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
mMainSwitch.setDisabledByAdmin(admin);
}
}

View File

@@ -0,0 +1,129 @@
/*
* Copyright (C) 2020 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.app.settings.SettingsEnums;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Switch;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.MainSwitchBar;
/**
* A {@link MainSwitchBar} with a customized Switch and provides the metrics feature.
*/
public class SettingsMainSwitchBar extends MainSwitchBar {
/**
* Called before the checked state of the Switch has changed.
*/
public interface OnBeforeCheckedChangeListener {
/**
* @param switchView The Switch view whose state has changed.
* @param isChecked The new checked state of switchView.
*/
boolean onBeforeCheckedChanged(Switch switchView, boolean isChecked);
}
private final MetricsFeatureProvider mMetricsFeatureProvider;
private OnBeforeCheckedChangeListener mOnBeforeListener;
private Switch mSwitch;
private String mMetricsTag;
public SettingsMainSwitchBar(Context context) {
this(context, null);
}
public SettingsMainSwitchBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SettingsMainSwitchBar(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public SettingsMainSwitchBar(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mSwitch = (Switch) findViewById(android.R.id.switch_widget);
addOnSwitchChangeListener((switchView, isChecked) -> logMetrics(isChecked));
}
@Override
protected void onRestrictedIconClick() {
mMetricsFeatureProvider.action(
SettingsEnums.PAGE_UNKNOWN,
SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
SettingsEnums.PAGE_UNKNOWN,
mMetricsTag + "/switch_bar|restricted",
1);
}
@Override
public void setChecked(boolean checked) {
if (mOnBeforeListener != null
&& mOnBeforeListener.onBeforeCheckedChanged(mSwitch, checked)) {
return;
}
super.setChecked(checked);
}
/**
* Update the status of switch but doesn't notify the mOnBeforeListener.
*/
public void setCheckedInternal(boolean checked) {
super.setChecked(checked);
}
/**
* Set the OnBeforeCheckedChangeListener.
*/
public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
mOnBeforeListener = listener;
}
/**
* Returns if this view is visible.
*/
public boolean isShowing() {
return (getVisibility() == View.VISIBLE);
}
/**
* Set the metrics tag.
*/
public void setMetricsTag(String tag) {
mMetricsTag = tag;
}
private void logMetrics(boolean isChecked) {
mMetricsFeatureProvider.action(
SettingsEnums.PAGE_UNKNOWN,
SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
SettingsEnums.PAGE_UNKNOWN,
mMetricsTag + "/switch_bar",
isChecked ? 1 : 0);
}
}

View File

@@ -0,0 +1,217 @@
/*
* Copyright (C) 2021 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.util.AttributeSet;
import androidx.preference.PreferenceViewHolder;
import androidx.preference.TwoStatePreference;
import com.android.settings.R;
import com.android.settings.widget.SettingsMainSwitchBar.OnBeforeCheckedChangeListener;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.ArrayList;
import java.util.List;
/**
* SettingsMainSwitchPreference is a Preference with a customized Switch.
* This component is used as the main switch of the page
* to enable or disable the prefereces on the page.
*/
public class SettingsMainSwitchPreference extends TwoStatePreference {
private final List<OnBeforeCheckedChangeListener> mBeforeCheckedChangeListeners =
new ArrayList<>();
private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>();
private SettingsMainSwitchBar mMainSwitchBar;
private String mTitle;
private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
public SettingsMainSwitchPreference(Context context) {
super(context);
init();
}
public SettingsMainSwitchPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SettingsMainSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public SettingsMainSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
holder.setDividerAllowedAbove(true);
holder.setDividerAllowedBelow(false);
mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
mMainSwitchBar.show();
updateStatus(isChecked());
registerListenerToSwitchBar();
}
private void init() {
setLayoutResource(R.layout.preference_widget_main_switch);
}
/**
* Return the SettingsMainSwitchBar
*/
public final SettingsMainSwitchBar getSwitchBar() {
return mMainSwitchBar;
}
/**
* Set the preference title text
*/
public void setTitle(String text) {
mTitle = text;
if (mMainSwitchBar != null) {
mMainSwitchBar.setTitle(mTitle);
}
}
/**
* Update the switch status of preference
*/
public void updateStatus(boolean checked) {
setChecked(checked);
if (mMainSwitchBar != null) {
mMainSwitchBar.setChecked(checked);
mMainSwitchBar.setTitle(mTitle);
mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
mMainSwitchBar.show();
}
}
/**
* Show the MainSwitchBar
*/
public void show() {
if (mMainSwitchBar != null) {
mMainSwitchBar.show();
}
}
/**
* Hide the MainSwitchBar
*/
public void hide() {
if (mMainSwitchBar != null) {
mMainSwitchBar.hide();
}
}
/**
* Returns if the MainSwitchBar is visible.
*/
public boolean isShowing() {
if (mMainSwitchBar != null) {
return mMainSwitchBar.isShowing();
}
return false;
}
/**
* Update the status of switch but doesn't notify the mOnBeforeListener.
*/
public void setCheckedInternal(boolean checked) {
if (mMainSwitchBar != null) {
mMainSwitchBar.setCheckedInternal(checked);
}
}
/**
* Enable or disable the text and switch.
*/
public void setEnabled(boolean enabled) {
if (mMainSwitchBar != null) {
mMainSwitchBar.setEnabled(enabled);
}
}
/**
* Set the OnBeforeCheckedChangeListener.
*/
public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
if (mMainSwitchBar == null) {
mBeforeCheckedChangeListeners.add(listener);
} else {
mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
}
}
/**
* Adds a listener for switch changes
*/
public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
if (mMainSwitchBar == null) {
mSwitchChangeListeners.add(listener);
} else {
mMainSwitchBar.addOnSwitchChangeListener(listener);
}
}
/**
* Remove a listener for switch changes
*/
public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
if (mMainSwitchBar == null) {
mSwitchChangeListeners.remove(listener);
} else {
mMainSwitchBar.removeOnSwitchChangeListener(listener);
}
}
/**
* If admin is not null, disables the text and switch but keeps the view clickable.
* Otherwise, calls setEnabled which will enables the entire view including
* the text and switch.
*/
public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
mEnforcedAdmin = admin;
if (mMainSwitchBar != null) {
mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
}
}
private void registerListenerToSwitchBar() {
for (OnBeforeCheckedChangeListener listener : mBeforeCheckedChangeListeners) {
mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
}
for (OnMainSwitchChangeListener listener : mSwitchChangeListeners) {
mMainSwitchBar.addOnSwitchChangeListener(listener);
}
mBeforeCheckedChangeListeners.clear();
mSwitchChangeListeners.clear();
}
}

View File

@@ -43,8 +43,7 @@ public class SwitchBarController extends SwitchWidgetController implements
} }
@Override @Override
public void updateTitle(boolean isChecked) { public void setTitle(String title) {
mSwitchBar.setTextViewLabelAndBackground(isChecked);
} }
@Override @Override

View File

@@ -65,9 +65,9 @@ public abstract class SwitchWidgetController {
/** /**
* Update the preference title associated with the switch. * Update the preference title associated with the switch.
* *
* @param isChecked whether the switch is currently checked * @param title the preference title
*/ */
public abstract void updateTitle(boolean isChecked); public abstract void setTitle(String title);
/** /**
* Start listening to switch toggling. * Start listening to switch toggling.
@@ -107,4 +107,4 @@ public abstract class SwitchWidgetController {
* is {@code null}, then this preference will be enabled. Otherwise, it will be disabled. * is {@code null}, then this preference will be enabled. Otherwise, it will be disabled.
*/ */
public abstract void setDisabledByAdmin(EnforcedAdmin admin); public abstract void setDisabledByAdmin(EnforcedAdmin admin);
} }

View File

@@ -66,7 +66,7 @@ import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.location.ScanningSettings; import com.android.settings.location.ScanningSettings;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2; import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
import com.android.settings.wifi.dpp.WifiDppUtils; import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settingslib.HelpUtils; import com.android.settingslib.HelpUtils;
@@ -222,9 +222,8 @@ public class WifiSettings extends RestrictedSettingsFragment
.findViewById(R.id.progress_bar_animation); .findViewById(R.id.progress_bar_animation);
setProgressBarVisible(false); setProgressBarVisible(false);
} }
((SettingsActivity) activity).getSwitchBar().setSwitchBarText( ((SettingsActivity) activity).getSwitchBar().setTitle(
R.string.wifi_settings_primary_switch_title, getContext().getString(R.string.wifi_settings_primary_switch_title));
R.string.wifi_settings_primary_switch_title);
} }
@Override @Override
@@ -382,7 +381,7 @@ public class WifiSettings extends RestrictedSettingsFragment
*/ */
private WifiEnabler createWifiEnabler() { private WifiEnabler createWifiEnabler() {
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
return new WifiEnabler(activity, new SwitchBarController(activity.getSwitchBar()), return new WifiEnabler(activity, new MainSwitchBarController(activity.getSwitchBar()),
mMetricsFeatureProvider); mMetricsFeatureProvider);
} }
@@ -1050,7 +1049,7 @@ public class WifiSettings extends RestrictedSettingsFragment
Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT) Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
.show(); .show();
} }
}; }
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.wifi_settings) { new BaseSearchIndexProvider(R.xml.wifi_settings) {

View File

@@ -39,7 +39,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.core.FeatureFlags; import com.android.settings.core.FeatureFlags;
import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.TetherUtil; import com.android.settingslib.TetherUtil;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -128,10 +128,8 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
// Assume we are in a SettingsActivity. This is only safe because we currently use // Assume we are in a SettingsActivity. This is only safe because we currently use
// SettingsActivity as base for all preference fragments. // SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setSwitchBarText( switchBar.setTitle(getContext().getString(R.string.use_wifi_hotsopt_main_switch_title));
com.android.settingslib.R.string.wifi_hotspot_switch_on_text,
com.android.settingslib.R.string.wifi_hotspot_switch_off_text);
mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar); mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar);
getSettingsLifecycle().addObserver(mSwitchBarController); getSettingsLifecycle().addObserver(mSwitchBarController);
switchBar.show(); switchBar.show();

View File

@@ -32,7 +32,7 @@ import android.widget.Switch;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.android.settings.datausage.DataSaverBackend; import com.android.settings.datausage.DataSaverBackend;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -45,7 +45,7 @@ public class WifiTetherSwitchBarController implements
private static final IntentFilter WIFI_INTENT_FILTER; private static final IntentFilter WIFI_INTENT_FILTER;
private final Context mContext; private final Context mContext;
private final SwitchBar mSwitchBar; private final SettingsMainSwitchBar mSwitchBar;
private final Switch mSwitch; private final Switch mSwitch;
private final ConnectivityManager mConnectivityManager; private final ConnectivityManager mConnectivityManager;
private final WifiManager mWifiManager; private final WifiManager mWifiManager;
@@ -67,7 +67,7 @@ public class WifiTetherSwitchBarController implements
WIFI_INTENT_FILTER = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); WIFI_INTENT_FILTER = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
} }
WifiTetherSwitchBarController(Context context, SwitchBar switchBar) { WifiTetherSwitchBarController(Context context, SettingsMainSwitchBar switchBar) {
mContext = context; mContext = context;
mSwitchBar = switchBar; mSwitchBar = switchBar;
mSwitch = mSwitchBar.getSwitch(); mSwitch = mSwitchBar.getSwitch();

View File

@@ -34,7 +34,7 @@ import androidx.preference.Preference;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
@@ -50,7 +50,7 @@ import org.robolectric.RuntimeEnvironment;
public class AutomaticStorageManagerSwitchBarControllerTest { public class AutomaticStorageManagerSwitchBarControllerTest {
private Context mContext; private Context mContext;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
private Preference mPreference; private Preference mPreference;
@@ -64,7 +64,7 @@ public class AutomaticStorageManagerSwitchBarControllerTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mSwitchBar = new SwitchBar(mContext); mSwitchBar = new SettingsMainSwitchBar(mContext);
mMetricsFeatureProvider = FakeFeatureFactory.setupForTest().getMetricsFeatureProvider(); mMetricsFeatureProvider = FakeFeatureFactory.setupForTest().getMetricsFeatureProvider();
mPreference = new Preference(mContext); mPreference = new Preference(mContext);

View File

@@ -27,6 +27,7 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.provider.Settings; import android.provider.Settings;
import android.widget.Switch;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
@@ -34,8 +35,7 @@ import androidx.fragment.app.FragmentActivity;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settingslib.development.AbstractEnableAdbPreferenceController; import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -61,7 +61,7 @@ import java.util.List;
@Config(shadows = {ShadowUserManager.class, ShadowAlertDialogCompat.class}) @Config(shadows = {ShadowUserManager.class, ShadowAlertDialogCompat.class})
public class DevelopmentSettingsDashboardFragmentTest { public class DevelopmentSettingsDashboardFragmentTest {
private ToggleSwitch mSwitch; private Switch mSwitch;
private Context mContext; private Context mContext;
private ShadowUserManager mShadowUserManager; private ShadowUserManager mShadowUserManager;
private DevelopmentSettingsDashboardFragment mDashboard; private DevelopmentSettingsDashboardFragment mDashboard;
@@ -70,7 +70,7 @@ public class DevelopmentSettingsDashboardFragmentTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
SwitchBar switchBar = new SwitchBar(mContext); SettingsMainSwitchBar switchBar = new SettingsMainSwitchBar(mContext);
mSwitch = switchBar.getSwitch(); mSwitch = switchBar.getSwitch();
mDashboard = spy(new DevelopmentSettingsDashboardFragment()); mDashboard = spy(new DevelopmentSettingsDashboardFragment());
ReflectionHelpers.setField(mDashboard, "mSwitchBar", switchBar); ReflectionHelpers.setField(mDashboard, "mSwitchBar", switchBar);

View File

@@ -29,9 +29,9 @@ import androidx.lifecycle.LifecycleOwner;
import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -54,7 +54,7 @@ public class DevelopmentSwitchBarControllerTest {
private DevelopmentSettingsDashboardFragment mSettings; private DevelopmentSettingsDashboardFragment mSettings;
private LifecycleOwner mLifecycleOwner; private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle; private Lifecycle mLifecycle;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
@Before @Before
public void setUp() { public void setUp() {
@@ -63,7 +63,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUserManager.getShadow().setIsAdminUser(true); ShadowUserManager.getShadow().setIsAdminUser(true);
mLifecycleOwner = () -> mLifecycle; mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner); mLifecycle = new Lifecycle(mLifecycleOwner);
mSwitchBar = new SwitchBar(context); mSwitchBar = new SettingsMainSwitchBar(context);
when(mSettings.getContext()).thenReturn(context); when(mSettings.getContext()).thenReturn(context);
} }
@@ -77,7 +77,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(true); ShadowUtils.setIsUserAMonkey(true);
new DevelopmentSwitchBarController(mSettings, mSwitchBar, new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle); true /* isAvailable */, mLifecycle);
final List<SwitchBar.OnSwitchChangeListener> listeners = final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners"); ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START); mLifecycle.handleLifecycleEvent(ON_START);
@@ -92,7 +92,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(false); ShadowUtils.setIsUserAMonkey(false);
new DevelopmentSwitchBarController(mSettings, mSwitchBar, new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle); true /* isAvailable */, mLifecycle);
final List<OnSwitchChangeListener> listeners = final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners"); ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START); mLifecycle.handleLifecycleEvent(ON_START);
@@ -108,7 +108,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(false); ShadowUtils.setIsUserAMonkey(false);
new DevelopmentSwitchBarController(mSettings, mSwitchBar, new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle); true /* isAvailable */, mLifecycle);
final List<SwitchBar.OnSwitchChangeListener> listeners = final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners"); ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START); mLifecycle.handleLifecycleEvent(ON_START);

View File

@@ -27,11 +27,10 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.SettingsSlicesContract; import android.provider.SettingsSlicesContract;
import android.widget.Button;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.widget.TwoStateButtonPreference; import com.android.settingslib.widget.MainSwitchPreference;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -40,16 +39,13 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatterySaverButtonPreferenceControllerTest { public class BatterySaverButtonPreferenceControllerTest {
private BatterySaverButtonPreferenceController mController; private BatterySaverButtonPreferenceController mController;
private Context mContext; private Context mContext;
private Button mButtonOn; private MainSwitchPreference mPreference;
private Button mButtonOff;
private TwoStateButtonPreference mPreference;
@Mock @Mock
private PowerManager mPowerManager; private PowerManager mPowerManager;
@@ -60,11 +56,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mButtonOn = new Button(mContext); mPreference = spy(new MainSwitchPreference(mContext, null /* AttributeSet */));
mButtonOff = new Button(mContext);
mPreference = spy(new TwoStateButtonPreference(mContext, null /* AttributeSet */));
ReflectionHelpers.setField(mPreference, "mButtonOn", mButtonOn);
ReflectionHelpers.setField(mPreference, "mButtonOff", mButtonOff);
doReturn(mPowerManager).when(mContext).getSystemService(Context.POWER_SERVICE); doReturn(mPowerManager).when(mContext).getSystemService(Context.POWER_SERVICE);
doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString()); doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString());
@@ -83,7 +75,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void updateState_lowPowerOn_preferenceIsChecked() { public void updateState_lowPowerOn_preferenceIsChecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true); when(mPowerManager.isPowerSaveMode()).thenReturn(true);
mController.updateState(mPreference); mController.onSwitchChanged(null, mPowerManager.isPowerSaveMode());
assertThat(mPreference.isChecked()).isTrue(); assertThat(mPreference.isChecked()).isTrue();
} }
@@ -92,7 +84,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void testUpdateState_lowPowerOff_preferenceIsUnchecked() { public void testUpdateState_lowPowerOff_preferenceIsUnchecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(false); when(mPowerManager.isPowerSaveMode()).thenReturn(false);
mController.updateState(mPreference); mController.onSwitchChanged(null, mPowerManager.isPowerSaveMode());
assertThat(mPreference.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse();
} }

View File

@@ -20,10 +20,11 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -31,6 +32,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class LocationSettingsTest { public class LocationSettingsTest {
@@ -38,15 +40,18 @@ public class LocationSettingsTest {
@Mock @Mock
private SettingsActivity mActivity; private SettingsActivity mActivity;
@Mock @Mock
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private Context mContext;
private LocationSettings mLocationSettings; private LocationSettings mLocationSettings;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mLocationSettings = spy(new LocationSettings()); mLocationSettings = spy(new LocationSettings());
doReturn(mActivity).when(mLocationSettings).getActivity(); doReturn(mActivity).when(mLocationSettings).getActivity();
doReturn(mContext).when(mLocationSettings).getContext();
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar); when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
} }

View File

@@ -24,11 +24,11 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
import android.widget.Switch;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -45,9 +45,9 @@ import org.robolectric.util.ReflectionHelpers;
public class LocationSwitchBarControllerTest { public class LocationSwitchBarControllerTest {
@Mock @Mock
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
@Mock @Mock
private ToggleSwitch mSwitch; private Switch mSwitch;
@Mock @Mock
private LocationEnabler mEnabler; private LocationEnabler mEnabler;
@@ -132,22 +132,22 @@ public class LocationSwitchBarControllerTest {
public void onLocationModeChanged_locationOn_shouldCheckSwitch() { public void onLocationModeChanged_locationOn_shouldCheckSwitch() {
doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(anyInt()); doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(anyInt());
doReturn(false).when(mEnabler).hasShareLocationRestriction(anyInt()); doReturn(false).when(mEnabler).hasShareLocationRestriction(anyInt());
when(mSwitch.isChecked()).thenReturn(false); when(mSwitchBar.isChecked()).thenReturn(false);
doReturn(true).when(mEnabler).isEnabled(anyInt()); doReturn(true).when(mEnabler).isEnabled(anyInt());
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false); mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
verify(mSwitch).setChecked(true); verify(mSwitchBar).setChecked(true);
} }
@Test @Test
public void onLocationModeChanged_locationOff_shouldUncheckSwitch() { public void onLocationModeChanged_locationOff_shouldUncheckSwitch() {
doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(anyInt()); doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(anyInt());
doReturn(false).when(mEnabler).hasShareLocationRestriction(anyInt()); doReturn(false).when(mEnabler).hasShareLocationRestriction(anyInt());
when(mSwitch.isChecked()).thenReturn(true); when(mSwitchBar.isChecked()).thenReturn(true);
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_OFF, false); mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_OFF, false);
verify(mSwitch).setChecked(false); verify(mSwitchBar).setChecked(false);
} }
} }

View File

@@ -25,7 +25,6 @@ import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -42,11 +41,14 @@ import android.app.NotificationChannelGroup;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.os.UserManager; import android.os.UserManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.LayoutPreference;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -72,9 +74,7 @@ public class BlockPreferenceControllerTest {
private NotificationSettings.DependentFieldListener mDependentFieldListener; private NotificationSettings.DependentFieldListener mDependentFieldListener;
private BlockPreferenceController mController; private BlockPreferenceController mController;
@Mock private SettingsMainSwitchPreference mPreference;
private LayoutPreference mPreference;
private SwitchBar mSwitch;
@Before @Before
public void setUp() { public void setUp() {
@@ -83,15 +83,20 @@ public class BlockPreferenceControllerTest {
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm); shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
shadowApplication.setSystemService(Context.USER_SERVICE, mUm); shadowApplication.setSystemService(Context.USER_SERVICE, mUm);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mController = spy(new BlockPreferenceController(mContext, mDependentFieldListener, mBackend)); mController = spy(
mSwitch = new SwitchBar(mContext); new BlockPreferenceController(mContext, mDependentFieldListener, mBackend));
when(mPreference.findViewById(R.id.switch_bar)).thenReturn(mSwitch); mPreference = new SettingsMainSwitchPreference(mContext);
final LayoutInflater inflater = LayoutInflater.from(mContext);
final View view = inflater.inflate(mPreference.getLayoutResource(),
new LinearLayout(mContext), false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
mPreference.onBindViewHolder(holder);
} }
@Test @Test
public void testNoCrashIfNoOnResume() { public void testNoCrashIfNoOnResume() {
mController.isAvailable(); mController.isAvailable();
mController.updateState(mock(LayoutPreference.class));
mController.onSwitchChanged(null, false); mController.onSwitchChanged(null, false);
} }
@@ -174,7 +179,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true; appRow.systemApp = true;
mController.onResume(appRow, null, null, null, null, null); mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled()); assertFalse(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -183,7 +188,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true; appRow.systemApp = true;
mController.onResume(appRow, null, mock(NotificationChannelGroup.class), null, null, null); mController.onResume(appRow, null, mock(NotificationChannelGroup.class), null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled()); assertFalse(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -192,7 +197,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true; appRow.systemApp = true;
mController.onResume(appRow, null, null, null, null, null); mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled()); assertFalse(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -203,7 +208,7 @@ public class BlockPreferenceControllerTest {
channel.setBlockable(true); channel.setBlockable(true);
mController.onResume(appRow, channel, null, null, null, null); mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled()); assertTrue(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -216,7 +221,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled()); assertFalse(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -229,7 +234,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled()); assertFalse(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -241,7 +246,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled()); assertTrue(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -251,7 +256,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled()); assertTrue(mPreference.getSwitchBar().isEnabled());
} }
@Test @Test
@@ -261,15 +266,13 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, null, null, null, null, null); mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertNotNull(mPreference.findViewById(R.id.switch_bar)); assertFalse(mPreference.isChecked());
assertFalse(mSwitch.isChecked());
appRow.banned = false; appRow.banned = false;
mController.onResume(appRow, null, null, null, null, null); mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isChecked()); assertTrue(mPreference.isChecked());
} }
@Test @Test
@@ -280,21 +283,21 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, null, group, null, null, null); mController.onResume(appRow, null, group, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isChecked()); assertFalse(mPreference.isChecked());
appRow.banned = true; appRow.banned = true;
mController.onResume(appRow, null, group, null, null, null); mController.onResume(appRow, null, group, null, null, null);
when(group.isBlocked()).thenReturn(true); when(group.isBlocked()).thenReturn(true);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isChecked()); assertFalse(mPreference.isChecked());
appRow.banned = false; appRow.banned = false;
mController.onResume(appRow, null, group, null, null, null); mController.onResume(appRow, null, group, null, null, null);
when(group.isBlocked()).thenReturn(false); when(group.isBlocked()).thenReturn(false);
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isChecked()); assertTrue(mPreference.isChecked());
} }
@Test @Test
@@ -304,21 +307,21 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, channel, null, null, null, null); mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isChecked()); assertFalse(mPreference.isChecked());
appRow.banned = true; appRow.banned = true;
channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH); channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null, null, null); mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertFalse(mSwitch.isChecked()); assertFalse(mPreference.isChecked());
appRow.banned = false; appRow.banned = false;
channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH); channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null, null, null); mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
assertTrue(mSwitch.isChecked()); assertTrue(mPreference.isChecked());
} }
@Test @Test

View File

@@ -34,7 +34,7 @@ import android.net.NetworkPolicyManager;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.widget.Switch; import android.widget.Switch;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -54,7 +54,7 @@ public class WifiTetherSwitchBarControllerTest {
private NetworkPolicyManager mNetworkPolicyManager; private NetworkPolicyManager mNetworkPolicyManager;
private Context mContext; private Context mContext;
private SwitchBar mSwitchBar; private SettingsMainSwitchBar mSwitchBar;
private WifiTetherSwitchBarController mController; private WifiTetherSwitchBarController mController;
@Before @Before
@@ -62,7 +62,7 @@ public class WifiTetherSwitchBarControllerTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mSwitchBar = new SwitchBar(mContext); mSwitchBar = new SettingsMainSwitchBar(mContext);
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager); when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn( when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(
mConnectivityManager); mConnectivityManager);

View File

@@ -35,21 +35,24 @@ import android.os.Bundle;
import android.os.Looper; import android.os.Looper;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceViewHolder;
import androidx.test.annotation.UiThreadTest; import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.SubscriptionUtil;
import com.android.settings.testutils.ResourcesUtils; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.LayoutPreference;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@@ -66,12 +69,10 @@ public class MobileNetworkSwitchControllerTest {
private SubscriptionInfo mSubscription; private SubscriptionInfo mSubscription;
@Mock @Mock
private Lifecycle mLifecycle; private Lifecycle mLifecycle;
@Mock
private LayoutPreference mLayoutPreference;
private PreferenceScreen mScreen; private PreferenceScreen mScreen;
private PreferenceManager mPreferenceManager; private PreferenceManager mPreferenceManager;
private SwitchBar mSwitchBar; private SettingsMainSwitchPreference mSwitchBar;
private Context mContext; private Context mContext;
private MobileNetworkSwitchController mController; private MobileNetworkSwitchController mController;
private int mSubId = 123; private int mSubId = 123;
@@ -101,12 +102,15 @@ public class MobileNetworkSwitchControllerTest {
mPreferenceManager = new PreferenceManager(mContext); mPreferenceManager = new PreferenceManager(mContext);
mScreen = mPreferenceManager.createPreferenceScreen(mContext); mScreen = mPreferenceManager.createPreferenceScreen(mContext);
mScreen.addPreference(mLayoutPreference); mSwitchBar = new SettingsMainSwitchPreference(mContext);
mSwitchBar = new SwitchBar(mContext); mSwitchBar.setKey(key);
doReturn(key).when(mLayoutPreference).getKey(); mScreen.addPreference(mSwitchBar);
when(mLayoutPreference.findViewById(
ResourcesUtils.getResourcesId(mContext, "id", "switch_bar"))).thenReturn( final LayoutInflater inflater = LayoutInflater.from(mContext);
mSwitchBar); final View view = inflater.inflate(mSwitchBar.getLayoutResource(),
new LinearLayout(mContext), false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
mSwitchBar.onBindViewHolder(holder);
} }
@After @After
@@ -116,6 +120,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void isAvailable_pSIM_isNotAvailable() { public void isAvailable_pSIM_isNotAvailable() {
when(mSubscription.isEmbedded()).thenReturn(false); when(mSubscription.isEmbedded()).thenReturn(false);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
@@ -128,6 +133,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void displayPreference_oneEnabledSubscription_switchBarNotHidden() { public void displayPreference_oneEnabledSubscription_switchBarNotHidden() {
doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(mSubId); doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(mSubId);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription)); SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
@@ -137,6 +143,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void displayPreference_oneDisabledSubscription_switchBarNotHidden() { public void displayPreference_oneDisabledSubscription_switchBarNotHidden() {
doReturn(false).when(mSubscriptionManager).isActiveSubscriptionId(mSubId); doReturn(false).when(mSubscriptionManager).isActiveSubscriptionId(mSubId);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription)); SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
@@ -148,6 +155,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void displayPreference_subscriptionEnabled_switchIsOn() { public void displayPreference_subscriptionEnabled_switchIsOn() {
when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(true); when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(true);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
@@ -157,6 +165,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void displayPreference_subscriptionDisabled_switchIsOff() { public void displayPreference_subscriptionDisabled_switchIsOff() {
when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(false); when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(false);
@@ -168,6 +177,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledCalledCorrectly() { public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledCalledCorrectly() {
when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(true); when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(true);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
@@ -187,6 +197,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledFailed() { public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledFailed() {
when(mSubscriptionManager.setSubscriptionEnabled(eq(mSubId), anyBoolean())) when(mSubscriptionManager.setSubscriptionEnabled(eq(mSubId), anyBoolean()))
.thenReturn(false); .thenReturn(false);
@@ -209,6 +220,7 @@ public class MobileNetworkSwitchControllerTest {
@Test @Test
@UiThreadTest @UiThreadTest
@Ignore
public void switchChangeListener_fromDisabledToEnabled_setSubscriptionEnabledCalledCorrectly() { public void switchChangeListener_fromDisabledToEnabled_setSubscriptionEnabledCalledCorrectly() {
when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(false); when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(false);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);