diff --git a/res/xml/auto_brightness_detail.xml b/res/xml/auto_brightness_detail.xml index d0bf3348666..a7c85e8759b 100644 --- a/res/xml/auto_brightness_detail.xml +++ b/res/xml/auto_brightness_detail.xml @@ -27,10 +27,11 @@ settings:preview="@drawable/aab_brightness" settings:controller="com.android.settings.widget.VideoPreferenceController"/> - mBeforeCheckedChangeListeners = new ArrayList<>(); private final List mSwitchChangeListeners = new ArrayList<>(); @@ -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); @@ -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(); @@ -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) { @@ -103,6 +109,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference { setTitle(title.toString()); } a.recycle(); + + mRestrictedHelper = new RestrictedPreferenceHelper(context, this, attrs); } } @@ -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(); @@ -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); diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java new file mode 100644 index 00000000000..cb53805cc99 --- /dev/null +++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java @@ -0,0 +1,63 @@ +/* + * 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(); + } +}