Loading src/com/android/settings/widget/SwitchBar.java +23 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.ColorInt; import android.support.annotation.StringRes; import android.support.annotation.VisibleForTesting; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.style.TextAppearanceSpan; Loading Loading @@ -132,6 +133,17 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC (switchView, isChecked) -> setTextViewLabelAndBackground(isChecked)); mRestrictedIcon = findViewById(R.id.restricted_icon); mRestrictedIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDisabledByAdmin) { mMetricsFeatureProvider.count(mContext, mMetricsTag + "/switch_bar|restricted", 1); RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context, mEnforcedAdmin); } } }); // Default is hide setVisibility(View.GONE); Loading Loading @@ -196,6 +208,11 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mSwitch.setEnabled(enabled); } @VisibleForTesting View getDelegatingView() { return mDisabledByAdmin ? mRestrictedIcon : mSwitch; } /** * 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 Loading @@ -216,6 +233,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mRestrictedIcon.setVisibility(View.GONE); setEnabled(true); } setTouchDelegate(new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), getDelegatingView())); } public final ToggleSwitch getSwitch() { Loading @@ -228,7 +247,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mSwitch.setOnCheckedChangeListener(this); // Make the entire bar work as a switch post(() -> setTouchDelegate( new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), mSwitch))); new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), getDelegatingView()))); } } Loading @@ -242,7 +262,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if ((w > 0) && (h > 0)) { setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h), mSwitch)); setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h), getDelegatingView())); } } Loading tests/robotests/src/com/android/settings/widget/SwitchBarTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.TextView; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -82,4 +83,16 @@ public class SwitchBarTest { assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText()) .isEqualTo(mContext.getString(onText)); } @Test public void disabledByAdmin_shouldDelegateToRestrictedIcon() { mBar.setDisabledByAdmin(new EnforcedAdmin()); assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.restricted_icon); } @Test public void notDisabledByAdmin_shouldDelegateToSwitch() { mBar.setDisabledByAdmin(null); assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.switch_widget); } } Loading
src/com/android/settings/widget/SwitchBar.java +23 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.ColorInt; import android.support.annotation.StringRes; import android.support.annotation.VisibleForTesting; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.style.TextAppearanceSpan; Loading Loading @@ -132,6 +133,17 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC (switchView, isChecked) -> setTextViewLabelAndBackground(isChecked)); mRestrictedIcon = findViewById(R.id.restricted_icon); mRestrictedIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDisabledByAdmin) { mMetricsFeatureProvider.count(mContext, mMetricsTag + "/switch_bar|restricted", 1); RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context, mEnforcedAdmin); } } }); // Default is hide setVisibility(View.GONE); Loading Loading @@ -196,6 +208,11 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mSwitch.setEnabled(enabled); } @VisibleForTesting View getDelegatingView() { return mDisabledByAdmin ? mRestrictedIcon : mSwitch; } /** * 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 Loading @@ -216,6 +233,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mRestrictedIcon.setVisibility(View.GONE); setEnabled(true); } setTouchDelegate(new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), getDelegatingView())); } public final ToggleSwitch getSwitch() { Loading @@ -228,7 +247,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC mSwitch.setOnCheckedChangeListener(this); // Make the entire bar work as a switch post(() -> setTouchDelegate( new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), mSwitch))); new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), getDelegatingView()))); } } Loading @@ -242,7 +262,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if ((w > 0) && (h > 0)) { setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h), mSwitch)); setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h), getDelegatingView())); } } Loading
tests/robotests/src/com/android/settings/widget/SwitchBarTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.TextView; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -82,4 +83,16 @@ public class SwitchBarTest { assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText()) .isEqualTo(mContext.getString(onText)); } @Test public void disabledByAdmin_shouldDelegateToRestrictedIcon() { mBar.setDisabledByAdmin(new EnforcedAdmin()); assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.restricted_icon); } @Test public void notDisabledByAdmin_shouldDelegateToSwitch() { mBar.setDisabledByAdmin(null); assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.switch_widget); } }