From 7eeca8bc65399aea636657186f8e4f263b93d122 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Mon, 15 Feb 2021 01:36:03 +0800 Subject: [PATCH] Refactor MainSwitchBar - Extract RestrictedLockUtils related things to SettingsMainSwitchBar Bug: 180226735 Test: robotest Change-Id: I694cdb181c137bd2f22cc1d4e466f7e203f8c0e2 --- .../widget/SettingsMainSwitchBar.java | 68 ++++++++++++++++--- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/widget/SettingsMainSwitchBar.java b/src/com/android/settings/widget/SettingsMainSwitchBar.java index d7fbd6aad19..733be0a6f6a 100644 --- a/src/com/android/settings/widget/SettingsMainSwitchBar.java +++ b/src/com/android/settings/widget/SettingsMainSwitchBar.java @@ -20,11 +20,14 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.util.AttributeSet; import android.view.View; +import android.widget.ImageView; import android.widget.Switch; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.MainSwitchBar; +import com.android.settingslib.widget.R; /** * A {@link MainSwitchBar} with a customized Switch and provides the metrics feature. @@ -43,10 +46,13 @@ public class SettingsMainSwitchBar extends MainSwitchBar { boolean onBeforeCheckedChanged(Switch switchView, boolean isChecked); } + private ImageView mRestrictedIcon; + private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin; + private boolean mDisabledByAdmin; + private final MetricsFeatureProvider mMetricsFeatureProvider; private OnBeforeCheckedChangeListener mOnBeforeListener; - private Switch mSwitch; private String mMetricsTag; public SettingsMainSwitchBar(Context context) { @@ -66,12 +72,57 @@ public class SettingsMainSwitchBar extends MainSwitchBar { super(context, attrs, defStyleAttr, defStyleRes); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); - mSwitch = (Switch) findViewById(android.R.id.switch_widget); - addOnSwitchChangeListener((switchView, isChecked) -> logMetrics(isChecked)); + + mRestrictedIcon = findViewById(R.id.restricted_icon); + mRestrictedIcon.setOnClickListener((View v) -> { + if (mDisabledByAdmin) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context, mEnforcedAdmin); + onRestrictedIconClick(); + } + }); + } + + /** + * 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 (admin != null) { + super.setEnabled(true); + mDisabledByAdmin = true; + mTextView.setEnabled(false); + mSwitch.setEnabled(false); + mSwitch.setVisibility(View.GONE); + mRestrictedIcon.setVisibility(View.VISIBLE); + } else { + mDisabledByAdmin = false; + mSwitch.setVisibility(View.VISIBLE); + mRestrictedIcon.setVisibility(View.GONE); + setEnabled(true); + } } @Override + public void setEnabled(boolean enabled) { + if (enabled && mDisabledByAdmin) { + setDisabledByAdmin(null); + return; + } + super.setEnabled(enabled); + } + + /** + * Called by the restricted icon clicked. + */ + + @Override + public boolean performClick() { + return getDelegatingView().performClick(); + } + protected void onRestrictedIconClick() { mMetricsFeatureProvider.action( SettingsEnums.PAGE_UNKNOWN, @@ -104,13 +155,6 @@ public class SettingsMainSwitchBar extends MainSwitchBar { mOnBeforeListener = listener; } - /** - * Returns if this view is visible. - */ - public boolean isShowing() { - return (getVisibility() == View.VISIBLE); - } - /** * Set the metrics tag. */ @@ -118,6 +162,10 @@ public class SettingsMainSwitchBar extends MainSwitchBar { mMetricsTag = tag; } + private View getDelegatingView() { + return mDisabledByAdmin ? mRestrictedIcon : mSwitch; + } + private void logMetrics(boolean isChecked) { mMetricsFeatureProvider.action( SettingsEnums.PAGE_UNKNOWN,