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