Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5221bbab authored by Yueming Wang's avatar Yueming Wang Committed by android-build-merger
Browse files

Merge "Policy transparency dialog should be shown when SwitchBar is restricted." into pi-dev

am: 4c89530f

Change-Id: Idda9afd69aae7eec7c00872be1ad8510409416df
parents cb2bd697 4c89530f
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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
@@ -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() {
@@ -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())));
        }
    }

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

+13 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);
    }
}