Merge "Refactor MainSwitchBar" into sc-dev
diff --git a/src/com/android/settings/widget/SettingsMainSwitchBar.java b/src/com/android/settings/widget/SettingsMainSwitchBar.java
index d7fbd6a..733be0a 100644
--- a/src/com/android/settings/widget/SettingsMainSwitchBar.java
+++ b/src/com/android/settings/widget/SettingsMainSwitchBar.java
@@ -20,11 +20,14 @@
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 @@
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 @@
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,
@@ -105,19 +156,16 @@
}
/**
- * Returns if this view is visible.
- */
- public boolean isShowing() {
- return (getVisibility() == View.VISIBLE);
- }
-
- /**
* Set the metrics tag.
*/
public void setMetricsTag(String tag) {
mMetricsTag = tag;
}
+ private View getDelegatingView() {
+ return mDisabledByAdmin ? mRestrictedIcon : mSwitch;
+ }
+
private void logMetrics(boolean isChecked) {
mMetricsFeatureProvider.action(
SettingsEnums.PAGE_UNKNOWN,