17ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka/*
27ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Copyright (C) 2016 The Android Open Source Project
37ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka *
47ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Licensed under the Apache License, Version 2.0 (the "License");
57ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * you may not use this file except in compliance with the License.
67ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * You may obtain a copy of the License at
77ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka *
87ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka *      http://www.apache.org/licenses/LICENSE-2.0
97ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka *
107ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Unless required by applicable law or agreed to in writing, software
117ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * distributed under the License is distributed on an "AS IS" BASIS,
127ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * See the License for the specific language governing permissions and
147ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * limitations under the License
157ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka */
167ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
177ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankapackage com.android.settingslib;
187ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
197ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.content.Context;
207ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.os.UserHandle;
217ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.support.v4.content.res.TypedArrayUtils;
227ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.support.v7.preference.Preference;
237ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.support.v7.preference.PreferenceManager;
247ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.support.v7.preference.PreferenceViewHolder;
257ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.util.AttributeSet;
26923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shankaimport android.view.View;
277ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
287ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
297ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
307ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka/**
317ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Preference class that supports being disabled by a user restriction
327ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * set by a device admin.
337ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka */
347ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankapublic class RestrictedPreference extends Preference {
357ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    RestrictedPreferenceHelper mHelper;
367ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
377ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public RestrictedPreference(Context context, AttributeSet attrs,
387ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka            int defStyleAttr, int defStyleRes) {
397ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        super(context, attrs, defStyleAttr, defStyleRes);
40923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shanka        setWidgetLayoutResource(R.layout.restricted_icon);
417ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        mHelper = new RestrictedPreferenceHelper(context, this, attrs);
427ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
437ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
447ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public RestrictedPreference(Context context, AttributeSet attrs, int defStyleAttr) {
457ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        this(context, attrs, defStyleAttr, 0);
467ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
477ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
487ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public RestrictedPreference(Context context, AttributeSet attrs) {
495ff3ad6312086b87439bd8d3438a4476e2c14946Adam Lesinski        this(context, attrs, TypedArrayUtils.getAttr(context,
505ff3ad6312086b87439bd8d3438a4476e2c14946Adam Lesinski                android.support.v7.preference.R.attr.preferenceStyle,
517ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka                android.R.attr.preferenceStyle));
527ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
537ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
547ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public RestrictedPreference(Context context) {
557ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        this(context, null);
567ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
577ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
587ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    @Override
597ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public void onBindViewHolder(PreferenceViewHolder holder) {
607ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        super.onBindViewHolder(holder);
617ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        mHelper.onBindViewHolder(holder);
62923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shanka        final View restrictedIcon = holder.findViewById(R.id.restricted_icon);
63923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shanka        if (restrictedIcon != null) {
64923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shanka            restrictedIcon.setVisibility(isDisabledByAdmin() ? View.VISIBLE : View.GONE);
65923bc74c9227a684095cf95d808766f5dcd31bb5Sudheer Shanka        }
667ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
677ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
687ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    @Override
697ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public void performClick() {
707ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        if (!mHelper.performClick()) {
717ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka            super.performClick();
727ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        }
737ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
747ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
75145017303494e77026bd99ec41476f6f53225d95Sudheer Shanka    public void useAdminDisabledSummary(boolean useSummary) {
76145017303494e77026bd99ec41476f6f53225d95Sudheer Shanka        mHelper.useAdminDisabledSummary(useSummary);
77145017303494e77026bd99ec41476f6f53225d95Sudheer Shanka    }
78145017303494e77026bd99ec41476f6f53225d95Sudheer Shanka
797ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    @Override
807ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
817ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        mHelper.onAttachedToHierarchy();
827ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        super.onAttachedToHierarchy(preferenceManager);
837ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
847ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
857ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public void checkRestrictionAndSetDisabled(String userRestriction) {
867ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        mHelper.checkRestrictionAndSetDisabled(userRestriction, UserHandle.myUserId());
877ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
887ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
897ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public void checkRestrictionAndSetDisabled(String userRestriction, int userId) {
907ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        mHelper.checkRestrictionAndSetDisabled(userRestriction, userId);
917ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
927ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
93ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka    @Override
94ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka    public void setEnabled(boolean enabled) {
95ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka        if (enabled && isDisabledByAdmin()) {
96ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka            mHelper.setDisabledByAdmin(null);
97ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka            return;
98ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka        }
99ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka        super.setEnabled(enabled);
100ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka    }
101ea088af5c12e25995a3992413c8f413abc22eeabSudheer Shanka
1027ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public void setDisabledByAdmin(EnforcedAdmin admin) {
1037ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        if (mHelper.setDisabledByAdmin(admin)) {
1047ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka            notifyChanged();
1057ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        }
1067ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
1077ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka
1087ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    public boolean isDisabledByAdmin() {
1097ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka        return mHelper.isDisabledByAdmin();
1107ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka    }
1117ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka}
112