1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.accounts; 18 19 import android.content.BroadcastReceiver; 20 import android.content.Context; 21 import android.content.Intent; 22 import android.content.IntentFilter; 23 import android.os.Bundle; 24 import android.os.UserHandle; 25 import android.os.UserManager; 26 import android.provider.Settings; 27 import android.support.v14.preference.SwitchPreference; 28 import android.support.v7.preference.Preference; 29 import android.util.Log; 30 31 import com.android.internal.logging.MetricsProto; 32 import com.android.settings.R; 33 import com.android.settings.SettingsPreferenceFragment; 34 import com.android.settingslib.RestrictedLockUtils; 35 import com.android.settingslib.RestrictedSwitchPreference; 36 37 import static android.provider.Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH; 38 39 /** 40 * Setting page for managed profile. 41 * FIXME: It currently assumes there is only one managed profile. 42 */ 43 public class ManagedProfileSettings extends SettingsPreferenceFragment 44 implements Preference.OnPreferenceChangeListener { 45 46 private SwitchPreference mWorkModePreference; 47 private RestrictedSwitchPreference mContactPrefrence; 48 49 private UserManager mUserManager; 50 private UserHandle mManagedUser; 51 private Context mContext; 52 53 private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver; 54 55 private static final String KEY_WORK_MODE = "work_mode"; 56 private static final String KEY_CONTACT = "contacts_search"; 57 58 private static final String TAG = "ManagedProfileSettings"; 59 60 @Override 61 public void onCreate(Bundle icicle) { 62 super.onCreate(icicle); 63 addPreferencesFromResource(R.xml.managed_profile_settings); 64 mWorkModePreference = (SwitchPreference) findPreference(KEY_WORK_MODE); 65 mWorkModePreference.setOnPreferenceChangeListener(this); 66 mContactPrefrence = (RestrictedSwitchPreference) findPreference(KEY_CONTACT); 67 mContactPrefrence.setOnPreferenceChangeListener(this); 68 mContext = getActivity().getApplicationContext(); 69 mUserManager = (UserManager) getSystemService(Context.USER_SERVICE); 70 mManagedUser = getManagedUserFromArgument(); 71 if (mManagedUser == null) { 72 getActivity().finish(); 73 } 74 mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver(); 75 mManagedProfileBroadcastReceiver.register(getActivity()); 76 } 77 78 @Override 79 public void onResume() { 80 super.onResume(); 81 loadDataAndPopulateUi(); 82 } 83 84 @Override 85 public void onDestroy() { 86 super.onDestroy(); 87 mManagedProfileBroadcastReceiver.unregister(getActivity()); 88 } 89 90 private UserHandle getManagedUserFromArgument() { 91 Bundle arguments = getArguments(); 92 if (arguments != null) { 93 UserHandle userHandle = arguments.getParcelable(Intent.EXTRA_USER); 94 if (userHandle != null) { 95 if (mUserManager.isManagedProfile(userHandle.getIdentifier())) { 96 return userHandle; 97 } 98 } 99 } 100 return null; 101 } 102 103 private void loadDataAndPopulateUi() { 104 if (mWorkModePreference != null) { 105 mWorkModePreference.setChecked( 106 !mUserManager.isQuietModeEnabled(mManagedUser)); 107 } 108 109 if (mContactPrefrence != null) { 110 int value = Settings.Secure.getIntForUser(getContentResolver(), 111 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, mManagedUser.getIdentifier()); 112 mContactPrefrence.setChecked(value != 0); 113 RestrictedLockUtils.EnforcedAdmin enforcedAdmin = 114 RestrictedLockUtils.checkIfRemoteContactSearchDisallowed( 115 mContext, mManagedUser.getIdentifier()); 116 mContactPrefrence.setDisabledByAdmin(enforcedAdmin); 117 } 118 } 119 120 @Override 121 protected int getMetricsCategory() { 122 return MetricsProto.MetricsEvent.ACCOUNTS_WORK_PROFILE_SETTINGS; 123 } 124 125 126 @Override 127 public boolean onPreferenceChange(Preference preference, Object newValue) { 128 if (preference == mWorkModePreference) { 129 if ((boolean) newValue) { 130 mUserManager.trySetQuietModeDisabled(mManagedUser.getIdentifier(), null); 131 } else { 132 mUserManager.setQuietModeEnabled(mManagedUser.getIdentifier(), true); 133 } 134 return true; 135 } 136 if (preference == mContactPrefrence) { 137 int value = ((boolean) newValue == true) ? 1 : 0; 138 Settings.Secure.putIntForUser(getContentResolver(), 139 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, value, mManagedUser.getIdentifier()); 140 return true; 141 } 142 return false; 143 } 144 145 private class ManagedProfileBroadcastReceiver extends BroadcastReceiver { 146 147 @Override 148 public void onReceive(Context context, Intent intent) { 149 final String action = intent.getAction(); 150 Log.v(TAG, "Received broadcast: " + action); 151 if (action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) { 152 if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 153 UserHandle.USER_NULL) == mManagedUser.getIdentifier()) { 154 getActivity().finish(); 155 } 156 return; 157 } 158 159 if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE) 160 || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) { 161 if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 162 UserHandle.USER_NULL) == mManagedUser.getIdentifier()) { 163 mWorkModePreference.setChecked( 164 !mUserManager.isQuietModeEnabled(mManagedUser)); 165 } 166 return; 167 } 168 Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction()); 169 } 170 171 172 public void register(Context context) { 173 IntentFilter intentFilter = new IntentFilter(); 174 intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED); 175 intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); 176 intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); 177 context.registerReceiver(this, intentFilter); 178 } 179 180 public void unregister(Context context) { 181 context.unregisterReceiver(this); 182 } 183 } 184 185 } 186