Merge "SettingsMainSwitchPreference should display the restricted icon if it is restricted." into sc-dev

This commit is contained in:
Stanley Wang
2021-06-02 08:05:57 +00:00
committed by Android (Google) Code Review
5 changed files with 90 additions and 12 deletions

View File

@@ -27,10 +27,11 @@
settings:preview="@drawable/aab_brightness" settings:preview="@drawable/aab_brightness"
settings:controller="com.android.settings.widget.VideoPreferenceController"/> settings:controller="com.android.settings.widget.VideoPreferenceController"/>
<com.android.settingslib.widget.MainSwitchPreference <com.android.settings.widget.SettingsMainSwitchPreference
android:key="auto_brightness" android:key="auto_brightness"
android:title="@string/adaptive_brightness_main_switch_title" android:title="@string/adaptive_brightness_main_switch_title"
settings:keywords="@string/keywords_display_auto_brightness" settings:keywords="@string/keywords_display_auto_brightness"
settings:userRestriction="no_config_brightness"
settings:controller="com.android.settings.display.AutoBrightnessDetailPreferenceController"/> settings:controller="com.android.settings.display.AutoBrightnessDetailPreferenceController"/>
<com.android.settingslib.widget.FooterPreference <com.android.settingslib.widget.FooterPreference

View File

@@ -21,7 +21,7 @@ import android.widget.Switch;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settingslib.widget.MainSwitchPreference; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener; import com.android.settingslib.widget.OnMainSwitchChangeListener;
/** /**
@@ -51,7 +51,7 @@ public class AutoBrightnessDetailPreferenceController extends
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
MainSwitchPreference pref = (MainSwitchPreference) screen.findPreference( SettingsMainSwitchPreference pref = (SettingsMainSwitchPreference) screen.findPreference(
getPreferenceKey()); getPreferenceKey());
pref.addOnSwitchChangeListener(this); pref.addOnSwitchChangeListener(this);
pref.updateStatus(isChecked()); pref.updateStatus(isChecked());

View File

@@ -16,6 +16,8 @@
package com.android.settings.widget; package com.android.settings.widget;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
@@ -47,7 +49,7 @@ public class SettingsMainSwitchBar extends MainSwitchBar {
} }
private ImageView mRestrictedIcon; private ImageView mRestrictedIcon;
private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private EnforcedAdmin mEnforcedAdmin;
private boolean mDisabledByAdmin; private boolean mDisabledByAdmin;
private final MetricsFeatureProvider mMetricsFeatureProvider; private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -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 * 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. * switch is disabled for other reasons). Otherwise, calls setEnabled.
*/ */
public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) {
mEnforcedAdmin = admin; mEnforcedAdmin = admin;
if (admin != null) { if (admin != null) {
super.setEnabled(true); super.setEnabled(true);

View File

@@ -16,10 +16,13 @@
package com.android.settings.widget; package com.android.settings.widget;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.Switch;
import androidx.core.content.res.TypedArrayUtils; import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
@@ -27,7 +30,7 @@ import androidx.preference.TwoStatePreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.widget.SettingsMainSwitchBar.OnBeforeCheckedChangeListener; import com.android.settings.widget.SettingsMainSwitchBar.OnBeforeCheckedChangeListener;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreferenceHelper;
import com.android.settingslib.widget.OnMainSwitchChangeListener; import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.ArrayList; import java.util.ArrayList;
@@ -38,7 +41,9 @@ import java.util.List;
* This component is used as the main switch of the page * This component is used as the main switch of the page
* to enable or disable the prefereces on 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 = private final List<OnBeforeCheckedChangeListener> mBeforeCheckedChangeListeners =
new ArrayList<>(); new ArrayList<>();
private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>(); private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>();
@@ -46,8 +51,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference {
private SettingsMainSwitchBar mMainSwitchBar; private SettingsMainSwitchBar mMainSwitchBar;
private CharSequence mTitle; private CharSequence mTitle;
private boolean mIsVisible; private boolean mIsVisible;
private EnforcedAdmin mEnforcedAdmin;
private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; private RestrictedPreferenceHelper mRestrictedHelper;
public SettingsMainSwitchPreference(Context context) { public SettingsMainSwitchPreference(Context context) {
super(context); super(context);
@@ -78,8 +83,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference {
holder.setDividerAllowedBelow(false); holder.setDividerAllowedBelow(false);
mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar); mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
mMainSwitchBar.show(); mMainSwitchBar.show();
mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced();
updateStatus(isChecked()); updateStatus(isChecked());
registerListenerToSwitchBar(); registerListenerToSwitchBar();
@@ -90,6 +95,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference {
private void init(Context context, AttributeSet attrs) { private void init(Context context, AttributeSet attrs) {
setLayoutResource(R.layout.preference_widget_main_switch); setLayoutResource(R.layout.preference_widget_main_switch);
mSwitchChangeListeners.add(this);
mIsVisible = true; mIsVisible = true;
if (attrs != null) { if (attrs != null) {
@@ -103,6 +109,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference {
setTitle(title.toString()); setTitle(title.toString());
} }
a.recycle(); 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 * Update the switch status of preference
*/ */
public void updateStatus(boolean checked) { public void updateStatus(boolean checked) {
setChecked(checked); setChecked(checked);
if (mMainSwitchBar != null) { if (mMainSwitchBar != null) {
mMainSwitchBar.setChecked(checked);
mMainSwitchBar.setTitle(mTitle); mMainSwitchBar.setTitle(mTitle);
mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
mMainSwitchBar.show(); mMainSwitchBar.show();
@@ -230,7 +242,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference {
* Otherwise, calls setEnabled which will enables the entire view including * Otherwise, calls setEnabled which will enables the entire view including
* the text and switch. * the text and switch.
*/ */
public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { public void setDisabledByAdmin(EnforcedAdmin admin) {
mEnforcedAdmin = admin; mEnforcedAdmin = admin;
if (mMainSwitchBar != null) { if (mMainSwitchBar != null) {
mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);

View File

@@ -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();
}
}