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: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
android:id="@+id/history_off"
@@ -197,4 +201,4 @@
</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_width="match_parent">
<com.android.settings.widget.SwitchBar
<com.android.settings.widget.SettingsMainSwitchBar
android:id="@+id/switch_bar"
android:layout_height="?android:attr/actionBarSize"
android:visibility="gone"
android:layout_width="match_parent"
android:theme="?attr/switchBarTheme"/>
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/main_content"

View File

@@ -12586,5 +12586,23 @@
<!-- 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>
<!-- 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>

View File

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

View File

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

View File

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

View File

@@ -21,9 +21,8 @@
android:key="pref_app_header"
android:layout="@layout/settings_entity_header" />
<com.android.settingslib.widget.LayoutPreference
android:key="block"
android:layout="@layout/styled_switch_bar" />
<com.android.settingslib.widget.MainSwitchPreference
android:key="block" />
<!-- 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.WifiTetherDisablePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.wifi.tether.WifiTetherApBandPreferenceController;
import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController;
import com.android.settings.wifi.tether.WifiTetherBasePreferenceController;
@@ -227,15 +227,15 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment
adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener,
BluetoothProfile.PAN);
}
final SwitchBar switchBar = activity.getSwitchBar();
final SettingsMainSwitchBar mainSwitch = activity.getSwitchBar();
mTetherEnabler = new TetherEnabler(activity,
new SwitchBarController(switchBar), mBluetoothPan);
new MainSwitchBarController(mainSwitch), mBluetoothPan);
getSettingsLifecycle().addObserver(mTetherEnabler);
use(UsbTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(BluetoothTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(EthernetTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
use(WifiTetherDisablePreferenceController.class).setTetherEnabler(mTetherEnabler);
switchBar.show();
mainSwitch.show();
}
@Override

View File

@@ -61,7 +61,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
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.SharedPreferencesLogger;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -172,7 +172,7 @@ public class SettingsActivity extends SettingsBaseActivity
}
};
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mMainSwitch;
private Button mNextButton;
@@ -181,8 +181,8 @@ public class SettingsActivity extends SettingsBaseActivity
private DashboardFeatureProvider mDashboardFeatureProvider;
public SwitchBar getSwitchBar() {
return mSwitchBar;
public SettingsMainSwitchBar getSwitchBar() {
return mMainSwitch;
}
@Override
@@ -292,9 +292,9 @@ public class SettingsActivity extends SettingsBaseActivity
// If CollapsingToolbarLayout is applied, the old action bar won't show title.
actionBar.setDisplayShowTitleEnabled(mCollapsingToolbarLayout == null);
}
mSwitchBar = findViewById(R.id.switch_bar);
if (mSwitchBar != null) {
mSwitchBar.setMetricsTag(getMetricsTag());
mMainSwitch = findViewById(R.id.switch_bar);
if (mMainSwitch != null) {
mMainSwitch.setMetricsTag(getMetricsTag());
}
// 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.SettingsPreferenceFragment;
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.widget.FooterPreference;
@@ -176,7 +176,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference
super.onViewCreated(view, savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.hide();
}

View File

@@ -11,6 +11,7 @@ import android.os.ServiceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Switch;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
@@ -21,8 +22,7 @@ import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settings.widget.SettingsMainSwitchBar;
/**
* 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;
protected SwitchBar mSwitchBar;
protected ToggleSwitch mToggleSwitch;
protected SettingsMainSwitchBar mSwitchBar;
private Preference mSummaryPreference;
@@ -79,7 +78,6 @@ public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar();
mToggleSwitch = mSwitchBar.getSwitch();
// Set up UI.
// 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() {
super.onDestroyView();
mToggleSwitch.setOnBeforeCheckedChangeListener(null);
mSwitchBar.setOnBeforeCheckedChangeListener(null);
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
// to pop up the dialogue.
mToggleSwitch.setOnBeforeCheckedChangeListener(
new ToggleSwitch.OnBeforeCheckedChangeListener() {
mSwitchBar.setOnBeforeCheckedChangeListener(
new SettingsMainSwitchBar.OnBeforeCheckedChangeListener() {
@Override
public boolean onBeforeCheckedChanged(
ToggleSwitch toggleSwitch, boolean checked) {
Switch toggleSwitch, boolean checked) {
if (!checked) {
// Don't change Switch status until user makes choice in dialog
// so return true here.

View File

@@ -75,6 +75,8 @@ public final class BluetoothEnabler implements SwitchWidgetController.OnSwitchCh
mMetricsFeatureProvider = metricsFeatureProvider;
mSwitchController = switchController;
mSwitchController.setListener(this);
mSwitchController.setTitle(context.getString(R.string.bluetooth_main_switch_title));
mValidListener = false;
mMetricsEvent = metricsEvent;
@@ -191,7 +193,6 @@ public final class BluetoothEnabler implements SwitchWidgetController.OnSwitchCh
if (isChecked && !status) {
mSwitchController.setChecked(false);
mSwitchController.setEnabled(true);
mSwitchController.updateTitle(false);
triggerParentPreferenceCallback(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.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
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 FooterPreference mFooterPreference;
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
private BluetoothSwitchPreferenceController mController;
@Override
@@ -83,9 +83,9 @@ public class BluetoothDashboardFragment extends DashboardFragment {
SettingsActivity activity = (SettingsActivity) getActivity();
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,
new SwitchBarController(mSwitchBar), mFooterPreference);
new MainSwitchBarController(mSwitchBar), mFooterPreference);
Lifecycle lifecycle = getSettingsLifecycle();
if (lifecycle != null) {
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.LocationSwitchBarController;
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.
@@ -36,9 +36,8 @@ public class ProfileSelectLocationFragment extends ProfileSelectFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title,
R.string.location_settings_primary_switch_title);
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.location_settings_primary_switch_title));
final LocationSwitchBarController switchBarController = new LocationSwitchBarController(
activity, switchBar, getSettingsLifecycle());
switchBar.show();

View File

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

View File

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

View File

@@ -26,25 +26,26 @@ import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
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.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
/** Handles the logic for flipping the storage management toggle on a {@link SwitchBar}. */
public class AutomaticStorageManagerSwitchBarController
implements SwitchBar.OnSwitchChangeListener {
implements OnMainSwitchChangeListener {
private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
"ro.storage_manager.enabled";
private Context mContext;
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
private MetricsFeatureProvider mMetrics;
private Preference mDaysToRetainPreference;
private FragmentManager mFragmentManager;
public AutomaticStorageManagerSwitchBarController(
Context context,
SwitchBar switchBar,
SettingsMainSwitchBar switchBar,
MetricsFeatureProvider metrics,
Preference daysToRetainPreference,
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.storage.SharedDataPreferenceController;
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.lifecycle.Lifecycle;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.SystemPropPoker;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -75,7 +76,7 @@ import java.util.List;
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
AdbClearKeysDialogHost, LogPersistDialogHost,
BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener,
AbstractBluetoothPreferenceController.Callback {
@@ -86,7 +87,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
new BluetoothA2dpConfigStore();
private boolean mIsAvailable = true;
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
private DevelopmentSwitchBarController mSwitchBarController;
private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>();
private BluetoothA2dp mBluetoothA2dp;
@@ -197,10 +198,13 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
}
// Set up primary switch
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(
this /* DevelopmentSettings */, mSwitchBar, mIsAvailable,
getSettingsLifecycle());
mSwitchBar.show();
// Restore UI state based on whether developer options is enabled
if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) {
@@ -231,7 +235,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
if (DevelopmentTiles.WirelessDebugging.class.getName().equals(
componentName.getClassName()) && getDevelopmentOptionsController(
WirelessDebuggingPreferenceController.class).isAvailable()) {
WirelessDebuggingPreferenceController.class).isAvailable()) {
Log.d(TAG, "Long press from wireless debugging qstile");
new SubSettingLauncher(getContext())
.setDestination(WirelessDebuggingFragment.class.getName())
@@ -383,7 +387,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
@Override
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
@@ -557,7 +561,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new DefaultLaunchPreferenceController(context, "quick_settings_tiles"));
controllers.add(new DefaultLaunchPreferenceController(context, "feature_flags_dashboard"));
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, "background_check"));
controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));

View File

@@ -19,7 +19,7 @@ package com.android.settings.development;
import androidx.annotation.NonNull;
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.LifecycleObserver;
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 {
private final SwitchBar mSwitchBar;
private final SettingsMainSwitchBar mSwitchBar;
private final boolean mIsAvailable;
private final DevelopmentSettingsDashboardFragment mSettings;
public DevelopmentSwitchBarController(@NonNull DevelopmentSettingsDashboardFragment settings,
SwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
SettingsMainSwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
mSwitchBar = switchBar;
mIsAvailable = isAvailable && !Utils.isMonkeyRunning();
mSettings = settings;

View File

@@ -15,6 +15,7 @@
*/
package com.android.settings.development;
import android.app.Activity;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
@@ -40,7 +41,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
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.lifecycle.Lifecycle;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -170,9 +172,11 @@ public class WirelessDebuggingFragment extends DashboardFragment
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
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,
new SwitchBarController(activity.getSwitchBar()), this,
getSettingsLifecycle());
new MainSwitchBarController(switchBar), this, getSettingsLifecycle());
}
@Override

View File

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

View File

@@ -21,28 +21,32 @@ import android.content.Context;
import android.net.Uri;
import android.os.PowerManager;
import android.provider.SettingsSlicesContract;
import android.widget.Switch;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
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.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
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
*/
public class BatterySaverButtonPreferenceController extends
TogglePreferenceController implements
LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver,
OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
private final BatterySaverReceiver mBatterySaverReceiver;
private final PowerManager mPowerManager;
private TwoStateButtonPreference mPreference;
private MainSwitchPreference mPreference;
public BatterySaverButtonPreferenceController(Context context, String key) {
super(context, key);
@@ -84,7 +88,15 @@ public class BatterySaverButtonPreferenceController extends
@Override
public void displayPreference(PreferenceScreen 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
@@ -95,6 +107,7 @@ public class BatterySaverButtonPreferenceController extends
@Override
public boolean setChecked(boolean stateOn) {
// This screen already shows a warning, so we don't need another warning.
mPreference.updateStatus(isChecked());
return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
false /* needFirstTimeWarning */);
}
@@ -109,8 +122,5 @@ public class BatterySaverButtonPreferenceController extends
@Override
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.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
public class SpellCheckersSettings extends SettingsPreferenceFragment
implements OnSwitchChangeListener, OnPreferenceChangeListener {
implements OnMainSwitchChangeListener, OnPreferenceChangeListener {
private static final String TAG = SpellCheckersSettings.class.getSimpleName();
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 int ITEM_ID_USE_SYSTEM_LANGUAGE = 0;
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
private Preference mSpellCheckerLanaguagePref;
private AlertDialog mDialog = null;
private SpellCheckerInfo mCurrentSci;
@@ -92,9 +92,7 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
public void onResume() {
super.onResume();
mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
mSwitchBar.setSwitchBarText(
R.string.spell_checker_primary_switch_title,
R.string.spell_checker_primary_switch_title);
mSwitchBar.setTitle(getContext().getString(R.string.spell_checker_primary_switch_title));
mSwitchBar.show();
mSwitchBar.addOnSwitchChangeListener(this);
updatePreferenceScreen();

View File

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

View File

@@ -17,25 +17,27 @@ import android.content.Context;
import android.os.UserHandle;
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.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
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 {
private final SwitchBar mSwitchBar;
private final Switch mSwitch;
private final SettingsMainSwitchBar mSwitchBar;
private final LocationEnabler mLocationEnabler;
private boolean mValidListener;
public LocationSwitchBarController(Context context, SwitchBar switchBar,
public LocationSwitchBarController(Context context, SettingsMainSwitchBar switchBar,
Lifecycle lifecycle) {
mSwitchBar = switchBar;
mSwitch = mSwitchBar.getSwitch();
mLocationEnabler = new LocationEnabler(context, this /* listener */, lifecycle);
if (lifecycle != null) {
lifecycle.addObserver(this);
@@ -77,12 +79,12 @@ public class LocationSwitchBarController implements SwitchBar.OnSwitchChangeList
mSwitchBar.setEnabled(!restricted);
}
if (enabled != mSwitch.isChecked()) {
if (enabled != mSwitchBar.isChecked()) {
// set listener to null so that that code below doesn't trigger onCheckedChanged()
if (mValidListener) {
mSwitchBar.removeOnSwitchChangeListener(this);
}
mSwitch.setChecked(enabled);
mSwitchBar.setChecked(enabled);
if (mValidListener) {
mSwitchBar.addOnSwitchChangeListener(this);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -67,8 +67,8 @@ import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.widget.MainSwitchBarController;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal;
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
// SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
mSwitchBarController = new MultiUserSwitchBarController(activity,
new SwitchBarController(switchBar), this /* listener */);
getSettingsLifecycle().addObserver(mSwitchBarController);
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
switchBar.show();
mSwitchBarController = new MultiUserSwitchBarController(activity,
new MainSwitchBarController(switchBar), this /* listener */);
getSettingsLifecycle().addObserver(mSwitchBarController);
}
@Override

View File

@@ -49,7 +49,7 @@ public class GenericSwitchController extends SwitchWidgetController implements
}
@Override
public void updateTitle(boolean isChecked) {
public void setTitle(String title) {
}
@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
public void updateTitle(boolean isChecked) {
mSwitchBar.setTextViewLabelAndBackground(isChecked);
public void setTitle(String title) {
}
@Override

View File

@@ -65,9 +65,9 @@ public abstract class SwitchWidgetController {
/**
* 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.
@@ -107,4 +107,4 @@ public abstract class SwitchWidgetController {
* is {@code null}, then this preference will be enabled. Otherwise, it will be disabled.
*/
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.overlay.FeatureFactory;
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.dpp.WifiDppUtils;
import com.android.settingslib.HelpUtils;
@@ -222,9 +222,8 @@ public class WifiSettings extends RestrictedSettingsFragment
.findViewById(R.id.progress_bar_animation);
setProgressBarVisible(false);
}
((SettingsActivity) activity).getSwitchBar().setSwitchBarText(
R.string.wifi_settings_primary_switch_title,
R.string.wifi_settings_primary_switch_title);
((SettingsActivity) activity).getSwitchBar().setTitle(
getContext().getString(R.string.wifi_settings_primary_switch_title));
}
@Override
@@ -382,7 +381,7 @@ public class WifiSettings extends RestrictedSettingsFragment
*/
private WifiEnabler createWifiEnabler() {
final SettingsActivity activity = (SettingsActivity) getActivity();
return new WifiEnabler(activity, new SwitchBarController(activity.getSwitchBar()),
return new WifiEnabler(activity, new MainSwitchBarController(activity.getSwitchBar()),
mMetricsFeatureProvider);
}
@@ -1050,7 +1049,7 @@ public class WifiSettings extends RestrictedSettingsFragment
Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
.show();
}
};
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
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.dashboard.RestrictedDashboardFragment;
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.core.AbstractPreferenceController;
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
// SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
switchBar.setSwitchBarText(
com.android.settingslib.R.string.wifi_hotspot_switch_on_text,
com.android.settingslib.R.string.wifi_hotspot_switch_off_text);
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.use_wifi_hotsopt_main_switch_title));
mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar);
getSettingsLifecycle().addObserver(mSwitchBarController);
switchBar.show();

View File

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

View File

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

View File

@@ -27,6 +27,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.widget.Switch;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@@ -34,8 +35,7 @@ import androidx.fragment.app.FragmentActivity;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -61,7 +61,7 @@ import java.util.List;
@Config(shadows = {ShadowUserManager.class, ShadowAlertDialogCompat.class})
public class DevelopmentSettingsDashboardFragmentTest {
private ToggleSwitch mSwitch;
private Switch mSwitch;
private Context mContext;
private ShadowUserManager mShadowUserManager;
private DevelopmentSettingsDashboardFragment mDashboard;
@@ -70,7 +70,7 @@ public class DevelopmentSettingsDashboardFragmentTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
SwitchBar switchBar = new SwitchBar(mContext);
SettingsMainSwitchBar switchBar = new SettingsMainSwitchBar(mContext);
mSwitch = switchBar.getSwitch();
mDashboard = spy(new DevelopmentSettingsDashboardFragment());
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.ShadowUtils;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
import org.junit.After;
import org.junit.Before;
@@ -54,7 +54,7 @@ public class DevelopmentSwitchBarControllerTest {
private DevelopmentSettingsDashboardFragment mSettings;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
@Before
public void setUp() {
@@ -63,7 +63,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUserManager.getShadow().setIsAdminUser(true);
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
mSwitchBar = new SwitchBar(context);
mSwitchBar = new SettingsMainSwitchBar(context);
when(mSettings.getContext()).thenReturn(context);
}
@@ -77,7 +77,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(true);
new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle);
final List<SwitchBar.OnSwitchChangeListener> listeners =
final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START);
@@ -92,7 +92,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(false);
new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle);
final List<OnSwitchChangeListener> listeners =
final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START);
@@ -108,7 +108,7 @@ public class DevelopmentSwitchBarControllerTest {
ShadowUtils.setIsUserAMonkey(false);
new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle);
final List<SwitchBar.OnSwitchChangeListener> listeners =
final List<OnMainSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START);

View File

@@ -27,11 +27,10 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.PowerManager;
import android.provider.SettingsSlicesContract;
import android.widget.Button;
import androidx.preference.PreferenceScreen;
import com.android.settings.widget.TwoStateButtonPreference;
import com.android.settingslib.widget.MainSwitchPreference;
import org.junit.Before;
import org.junit.Test;
@@ -40,16 +39,13 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
public class BatterySaverButtonPreferenceControllerTest {
private BatterySaverButtonPreferenceController mController;
private Context mContext;
private Button mButtonOn;
private Button mButtonOff;
private TwoStateButtonPreference mPreference;
private MainSwitchPreference mPreference;
@Mock
private PowerManager mPowerManager;
@@ -60,11 +56,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mButtonOn = new Button(mContext);
mButtonOff = new Button(mContext);
mPreference = spy(new TwoStateButtonPreference(mContext, null /* AttributeSet */));
ReflectionHelpers.setField(mPreference, "mButtonOn", mButtonOn);
ReflectionHelpers.setField(mPreference, "mButtonOff", mButtonOff);
mPreference = spy(new MainSwitchPreference(mContext, null /* AttributeSet */));
doReturn(mPowerManager).when(mContext).getSystemService(Context.POWER_SERVICE);
doReturn(mPreference).when(mPreferenceScreen).findPreference(anyString());
@@ -83,7 +75,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void updateState_lowPowerOn_preferenceIsChecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true);
mController.updateState(mPreference);
mController.onSwitchChanged(null, mPowerManager.isPowerSaveMode());
assertThat(mPreference.isChecked()).isTrue();
}
@@ -92,7 +84,7 @@ public class BatterySaverButtonPreferenceControllerTest {
public void testUpdateState_lowPowerOff_preferenceIsUnchecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
mController.updateState(mPreference);
mController.onSwitchChanged(null, mPowerManager.isPowerSaveMode());
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.when;
import android.content.Context;
import android.os.Bundle;
import com.android.settings.SettingsActivity;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SettingsMainSwitchBar;
import org.junit.Before;
import org.junit.Test;
@@ -31,6 +32,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class LocationSettingsTest {
@@ -38,15 +40,18 @@ public class LocationSettingsTest {
@Mock
private SettingsActivity mActivity;
@Mock
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
private Context mContext;
private LocationSettings mLocationSettings;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mLocationSettings = spy(new LocationSettings());
doReturn(mActivity).when(mLocationSettings).getActivity();
doReturn(mContext).when(mLocationSettings).getContext();
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
}

View File

@@ -24,11 +24,11 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.provider.Settings;
import android.widget.Switch;
import androidx.lifecycle.LifecycleOwner;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -45,9 +45,9 @@ import org.robolectric.util.ReflectionHelpers;
public class LocationSwitchBarControllerTest {
@Mock
private SwitchBar mSwitchBar;
private SettingsMainSwitchBar mSwitchBar;
@Mock
private ToggleSwitch mSwitch;
private Switch mSwitch;
@Mock
private LocationEnabler mEnabler;
@@ -132,22 +132,22 @@ public class LocationSwitchBarControllerTest {
public void onLocationModeChanged_locationOn_shouldCheckSwitch() {
doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(anyInt());
doReturn(false).when(mEnabler).hasShareLocationRestriction(anyInt());
when(mSwitch.isChecked()).thenReturn(false);
when(mSwitchBar.isChecked()).thenReturn(false);
doReturn(true).when(mEnabler).isEnabled(anyInt());
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
verify(mSwitch).setChecked(true);
verify(mSwitchBar).setChecked(true);
}
@Test
public void onLocationModeChanged_locationOff_shouldUncheckSwitch() {
doReturn(null).when(mEnabler).getShareLocationEnforcedAdmin(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);
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.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -42,11 +41,14 @@ import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.content.Context;
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.widget.SwitchBar;
import com.android.settingslib.widget.LayoutPreference;
import com.android.settings.widget.SettingsMainSwitchPreference;
import org.junit.Before;
import org.junit.Test;
@@ -72,9 +74,7 @@ public class BlockPreferenceControllerTest {
private NotificationSettings.DependentFieldListener mDependentFieldListener;
private BlockPreferenceController mController;
@Mock
private LayoutPreference mPreference;
private SwitchBar mSwitch;
private SettingsMainSwitchPreference mPreference;
@Before
public void setUp() {
@@ -83,15 +83,20 @@ public class BlockPreferenceControllerTest {
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
shadowApplication.setSystemService(Context.USER_SERVICE, mUm);
mContext = RuntimeEnvironment.application;
mController = spy(new BlockPreferenceController(mContext, mDependentFieldListener, mBackend));
mSwitch = new SwitchBar(mContext);
when(mPreference.findViewById(R.id.switch_bar)).thenReturn(mSwitch);
mController = spy(
new BlockPreferenceController(mContext, mDependentFieldListener, mBackend));
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
public void testNoCrashIfNoOnResume() {
mController.isAvailable();
mController.updateState(mock(LayoutPreference.class));
mController.onSwitchChanged(null, false);
}
@@ -174,7 +179,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true;
mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled());
assertFalse(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -183,7 +188,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true;
mController.onResume(appRow, null, mock(NotificationChannelGroup.class), null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled());
assertFalse(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -192,7 +197,7 @@ public class BlockPreferenceControllerTest {
appRow.systemApp = true;
mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled());
assertFalse(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -203,7 +208,7 @@ public class BlockPreferenceControllerTest {
channel.setBlockable(true);
mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled());
assertTrue(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -216,7 +221,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled());
assertFalse(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -229,7 +234,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference);
assertFalse(mSwitch.isEnabled());
assertFalse(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -241,7 +246,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled());
assertTrue(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -251,7 +256,7 @@ public class BlockPreferenceControllerTest {
mController.updateState(mPreference);
assertTrue(mSwitch.isEnabled());
assertTrue(mPreference.getSwitchBar().isEnabled());
}
@Test
@@ -261,15 +266,13 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference);
assertNotNull(mPreference.findViewById(R.id.switch_bar));
assertFalse(mSwitch.isChecked());
assertFalse(mPreference.isChecked());
appRow.banned = false;
mController.onResume(appRow, null, null, null, null, null);
mController.updateState(mPreference);
assertTrue(mSwitch.isChecked());
assertTrue(mPreference.isChecked());
}
@Test
@@ -280,21 +283,21 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, null, group, null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isChecked());
assertFalse(mPreference.isChecked());
appRow.banned = true;
mController.onResume(appRow, null, group, null, null, null);
when(group.isBlocked()).thenReturn(true);
mController.updateState(mPreference);
assertFalse(mSwitch.isChecked());
assertFalse(mPreference.isChecked());
appRow.banned = false;
mController.onResume(appRow, null, group, null, null, null);
when(group.isBlocked()).thenReturn(false);
mController.updateState(mPreference);
assertTrue(mSwitch.isChecked());
assertTrue(mPreference.isChecked());
}
@Test
@@ -304,21 +307,21 @@ public class BlockPreferenceControllerTest {
mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isChecked());
assertFalse(mPreference.isChecked());
appRow.banned = true;
channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference);
assertFalse(mSwitch.isChecked());
assertFalse(mPreference.isChecked());
appRow.banned = false;
channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference);
assertTrue(mSwitch.isChecked());
assertTrue(mPreference.isChecked());
}
@Test

View File

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

View File

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