18ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra/* 28ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * Copyright (C) 2016 The Android Open Source Project 38ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * 48ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * Licensed under the Apache License, Version 2.0 (the "License"); 58ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * you may not use this file except in compliance with the License. 68ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * You may obtain a copy of the License at 78ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * 88ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * http://www.apache.org/licenses/LICENSE-2.0 98ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * 108ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * Unless required by applicable law or agreed to in writing, software 118ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * distributed under the License is distributed on an "AS IS" BASIS, 128ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * See the License for the specific language governing permissions and 148ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra * limitations under the License. 158ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra */ 168ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 178ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Choprapackage com.android.phone; 188ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 198ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.content.Context; 2025a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shankaimport android.os.UserHandle; 218ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.os.UserManager; 228ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.preference.PreferenceScreen; 238ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.preference.SwitchPreference; 248ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.util.AttributeSet; 258ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.view.View; 268ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopraimport android.widget.TextView; 278ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 28c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopraimport com.android.settingslib.RestrictedLockUtils; 29c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopraimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 30c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra 318ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Choprapublic class RestrictedSwitchPreference extends SwitchPreference { 328ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra private final Context mContext; 338ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra private boolean mDisabledByAdmin; 34c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka private final int mSwitchWidgetResId; 358ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 36c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, 37c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra int defStyleRes) { 388ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra super(context, attrs, defStyleAttr, defStyleRes); 39c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka mSwitchWidgetResId = getWidgetLayoutResource(); 408ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra mContext = context; 418ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 428ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 438ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { 448ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra this(context, attrs, defStyleAttr, 0); 458ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 468ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 478ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public RestrictedSwitchPreference(Context context, AttributeSet attrs) { 488ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra this(context, attrs, com.android.internal.R.attr.switchPreferenceStyle); 498ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 508ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 518ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public RestrictedSwitchPreference(Context context) { 528ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra this(context, null); 538ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 548ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 558ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra @Override 568ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public void onBindView(View view) { 578ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra super.onBindView(view); 58c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka if (mDisabledByAdmin) { 59c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka view.setEnabled(true); 60c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka } 61c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka final TextView summaryView = (TextView) view.findViewById(android.R.id.summary); 62c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka if (summaryView != null && mDisabledByAdmin) { 63c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka summaryView.setText( 64c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka isChecked() ? R.string.enabled_by_admin : R.string.disabled_by_admin); 65c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka summaryView.setVisibility(View.VISIBLE); 668ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 678ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 688ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 698ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public void checkRestrictionAndSetDisabled(String userRestriction) { 7025a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka UserManager um = UserManager.get(mContext); 7125a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka UserHandle user = UserHandle.of(um.getUserHandle()); 7225a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka boolean disabledByAdmin = um.hasUserRestriction(userRestriction, user) 7325a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka && !um.hasBaseUserRestriction(userRestriction, user); 7425a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka setDisabledByAdmin(disabledByAdmin); 75c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra } 76c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra 77c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra @Override 78c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra public void setEnabled(boolean enabled) { 79c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra if (enabled && mDisabledByAdmin) { 8025a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka setDisabledByAdmin(false); 818ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } else { 82c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra super.setEnabled(enabled); 83c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra } 84c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra } 85c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra 8625a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka public void setDisabledByAdmin(boolean disabled) { 87c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra if (mDisabledByAdmin != disabled) { 88c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra mDisabledByAdmin = disabled; 89c2d0c65390f4cfd1c54537fcfc8e7b945cdca0c1Sudheer Shanka setWidgetLayoutResource(disabled ? R.layout.restricted_icon : mSwitchWidgetResId); 90c738a389d4f52b421556d5bc3c88cdfb4624a77cMahaver Chopra setEnabled(!disabled); 918ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 928ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 938ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra 948ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra @Override 958ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra public void performClick(PreferenceScreen preferenceScreen) { 968ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra if (mDisabledByAdmin) { 9725a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, 9825a6cfe9b561c472bf39a0512368f6242e1b48f0Sudheer Shanka new EnforcedAdmin()); 998ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } else { 1008ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra super.performClick(preferenceScreen); 1018ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 1028ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra } 1038ce1219a37f3fe312ba71dd02a26b97d0304535dMahaver Chopra} 104