Merge "SettingsMainSwitchPreference should display the restricted icon if it is restricted." into sc-dev
This commit is contained in:
@@ -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
|
||||||
|
@@ -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());
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user