Loading res/xml/auto_brightness_detail.xml +2 −1 Original line number Diff line number Diff line Loading @@ -27,10 +27,11 @@ settings:preview="@drawable/aab_brightness" settings:controller="com.android.settings.widget.VideoPreferenceController"/> <com.android.settingslib.widget.MainSwitchPreference <com.android.settings.widget.SettingsMainSwitchPreference android:key="auto_brightness" android:title="@string/adaptive_brightness_main_switch_title" settings:keywords="@string/keywords_display_auto_brightness" settings:userRestriction="no_config_brightness" settings:controller="com.android.settings.display.AutoBrightnessDetailPreferenceController"/> <com.android.settingslib.widget.FooterPreference Loading src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import android.widget.Switch; import androidx.preference.PreferenceScreen; import com.android.settingslib.widget.MainSwitchPreference; import com.android.settings.widget.SettingsMainSwitchPreference; import com.android.settingslib.widget.OnMainSwitchChangeListener; /** Loading Loading @@ -51,7 +51,7 @@ public class AutoBrightnessDetailPreferenceController extends public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); MainSwitchPreference pref = (MainSwitchPreference) screen.findPreference( SettingsMainSwitchPreference pref = (SettingsMainSwitchPreference) screen.findPreference( getPreferenceKey()); pref.addOnSwitchChangeListener(this); pref.updateStatus(isChecked()); Loading src/com/android/settings/widget/SettingsMainSwitchBar.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.widget; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.app.settings.SettingsEnums; import android.content.Context; import android.util.AttributeSet; Loading Loading @@ -47,7 +49,7 @@ public class SettingsMainSwitchBar extends MainSwitchBar { } private ImageView mRestrictedIcon; private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private EnforcedAdmin mEnforcedAdmin; private boolean mDisabledByAdmin; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -87,7 +89,7 @@ public class SettingsMainSwitchBar extends MainSwitchBar { * If admin is not null, disables the text and switch but keeps the view clickable (unless the * switch is disabled for other reasons). Otherwise, calls setEnabled. */ public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) { mEnforcedAdmin = admin; if (admin != null) { super.setEnabled(true); Loading src/com/android/settings/widget/SettingsMainSwitchPreference.java +19 −7 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.settings.widget; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.content.Context; import android.content.res.TypedArray; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.Switch; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceViewHolder; Loading @@ -27,7 +30,7 @@ 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.RestrictedPreferenceHelper; import com.android.settingslib.widget.OnMainSwitchChangeListener; import java.util.ArrayList; Loading @@ -38,7 +41,9 @@ import java.util.List; * 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 { public class SettingsMainSwitchPreference extends TwoStatePreference implements OnMainSwitchChangeListener { private final List<OnBeforeCheckedChangeListener> mBeforeCheckedChangeListeners = new ArrayList<>(); private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>(); Loading @@ -46,8 +51,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { private SettingsMainSwitchBar mMainSwitchBar; private CharSequence mTitle; private boolean mIsVisible; private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private EnforcedAdmin mEnforcedAdmin; private RestrictedPreferenceHelper mRestrictedHelper; public SettingsMainSwitchPreference(Context context) { super(context); Loading Loading @@ -78,8 +83,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { holder.setDividerAllowedBelow(false); mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar); mMainSwitchBar.show(); mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced(); updateStatus(isChecked()); registerListenerToSwitchBar(); Loading @@ -90,6 +95,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { private void init(Context context, AttributeSet attrs) { setLayoutResource(R.layout.preference_widget_main_switch); mSwitchChangeListeners.add(this); mIsVisible = true; if (attrs != null) { Loading @@ -103,6 +109,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { setTitle(title.toString()); } a.recycle(); mRestrictedHelper = new RestrictedPreferenceHelper(context, this, attrs); } } Loading @@ -129,13 +137,17 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { } } @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { super.setChecked(isChecked); } /** * 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(); Loading Loading @@ -230,7 +242,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { * Otherwise, calls setEnabled which will enables the entire view including * the text and switch. */ public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) { mEnforcedAdmin = admin; if (mMainSwitchBar != null) { mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); Loading tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * 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 static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.view.View; import android.widget.ImageView; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; 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 SettingsMainSwitchPreferenceTest { @Mock private EnforcedAdmin mEnforcedAdmin; private SettingsMainSwitchPreference mPreference; @Before public void setUp() { MockitoAnnotations.initMocks(this); final Context context = RuntimeEnvironment.application; final SettingsMainSwitchBar switchBar = new SettingsMainSwitchBar(context); mPreference = new SettingsMainSwitchPreference(context); ReflectionHelpers.setField(mPreference, "mEnforcedAdmin", mEnforcedAdmin); ReflectionHelpers.setField(mPreference, "mMainSwitchBar", switchBar); } @Test public void updateStatus_isRestricted_restrictIconShouldDisplay() { mPreference.updateStatus(true); final SettingsMainSwitchBar switchBar = mPreference.getSwitchBar(); final ImageView restrictedIcon = switchBar.findViewById( com.android.settingslib.widget.R.id.restricted_icon); assertThat(restrictedIcon.getVisibility() == View.VISIBLE).isTrue(); } } Loading
res/xml/auto_brightness_detail.xml +2 −1 Original line number Diff line number Diff line Loading @@ -27,10 +27,11 @@ settings:preview="@drawable/aab_brightness" settings:controller="com.android.settings.widget.VideoPreferenceController"/> <com.android.settingslib.widget.MainSwitchPreference <com.android.settings.widget.SettingsMainSwitchPreference android:key="auto_brightness" android:title="@string/adaptive_brightness_main_switch_title" settings:keywords="@string/keywords_display_auto_brightness" settings:userRestriction="no_config_brightness" settings:controller="com.android.settings.display.AutoBrightnessDetailPreferenceController"/> <com.android.settingslib.widget.FooterPreference Loading
src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import android.widget.Switch; import androidx.preference.PreferenceScreen; import com.android.settingslib.widget.MainSwitchPreference; import com.android.settings.widget.SettingsMainSwitchPreference; import com.android.settingslib.widget.OnMainSwitchChangeListener; /** Loading Loading @@ -51,7 +51,7 @@ public class AutoBrightnessDetailPreferenceController extends public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); MainSwitchPreference pref = (MainSwitchPreference) screen.findPreference( SettingsMainSwitchPreference pref = (SettingsMainSwitchPreference) screen.findPreference( getPreferenceKey()); pref.addOnSwitchChangeListener(this); pref.updateStatus(isChecked()); Loading
src/com/android/settings/widget/SettingsMainSwitchBar.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.widget; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.app.settings.SettingsEnums; import android.content.Context; import android.util.AttributeSet; Loading Loading @@ -47,7 +49,7 @@ public class SettingsMainSwitchBar extends MainSwitchBar { } private ImageView mRestrictedIcon; private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private EnforcedAdmin mEnforcedAdmin; private boolean mDisabledByAdmin; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -87,7 +89,7 @@ public class SettingsMainSwitchBar extends MainSwitchBar { * If admin is not null, disables the text and switch but keeps the view clickable (unless the * switch is disabled for other reasons). Otherwise, calls setEnabled. */ public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) { mEnforcedAdmin = admin; if (admin != null) { super.setEnabled(true); Loading
src/com/android/settings/widget/SettingsMainSwitchPreference.java +19 −7 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.settings.widget; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.content.Context; import android.content.res.TypedArray; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.Switch; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceViewHolder; Loading @@ -27,7 +30,7 @@ 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.RestrictedPreferenceHelper; import com.android.settingslib.widget.OnMainSwitchChangeListener; import java.util.ArrayList; Loading @@ -38,7 +41,9 @@ import java.util.List; * 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 { public class SettingsMainSwitchPreference extends TwoStatePreference implements OnMainSwitchChangeListener { private final List<OnBeforeCheckedChangeListener> mBeforeCheckedChangeListeners = new ArrayList<>(); private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>(); Loading @@ -46,8 +51,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { private SettingsMainSwitchBar mMainSwitchBar; private CharSequence mTitle; private boolean mIsVisible; private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private EnforcedAdmin mEnforcedAdmin; private RestrictedPreferenceHelper mRestrictedHelper; public SettingsMainSwitchPreference(Context context) { super(context); Loading Loading @@ -78,8 +83,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { holder.setDividerAllowedBelow(false); mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar); mMainSwitchBar.show(); mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced(); updateStatus(isChecked()); registerListenerToSwitchBar(); Loading @@ -90,6 +95,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { private void init(Context context, AttributeSet attrs) { setLayoutResource(R.layout.preference_widget_main_switch); mSwitchChangeListeners.add(this); mIsVisible = true; if (attrs != null) { Loading @@ -103,6 +109,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { setTitle(title.toString()); } a.recycle(); mRestrictedHelper = new RestrictedPreferenceHelper(context, this, attrs); } } Loading @@ -129,13 +137,17 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { } } @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { super.setChecked(isChecked); } /** * 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(); Loading Loading @@ -230,7 +242,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { * Otherwise, calls setEnabled which will enables the entire view including * the text and switch. */ public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) { mEnforcedAdmin = admin; if (mMainSwitchBar != null) { mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); Loading
tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * 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 static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.view.View; import android.widget.ImageView; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; 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 SettingsMainSwitchPreferenceTest { @Mock private EnforcedAdmin mEnforcedAdmin; private SettingsMainSwitchPreference mPreference; @Before public void setUp() { MockitoAnnotations.initMocks(this); final Context context = RuntimeEnvironment.application; final SettingsMainSwitchBar switchBar = new SettingsMainSwitchBar(context); mPreference = new SettingsMainSwitchPreference(context); ReflectionHelpers.setField(mPreference, "mEnforcedAdmin", mEnforcedAdmin); ReflectionHelpers.setField(mPreference, "mMainSwitchBar", switchBar); } @Test public void updateStatus_isRestricted_restrictIconShouldDisplay() { mPreference.updateStatus(true); final SettingsMainSwitchBar switchBar = mPreference.getSwitchBar(); final ImageView restrictedIcon = switchBar.findViewById( com.android.settingslib.widget.R.id.restricted_icon); assertThat(restrictedIcon.getVisibility() == View.VISIBLE).isTrue(); } }