164f6d9896f4a7dea961698914177abc15e594f5bTony Mak/* 264f6d9896f4a7dea961698914177abc15e594f5bTony Mak * Copyright (C) 2016 The Android Open Source Project 364f6d9896f4a7dea961698914177abc15e594f5bTony Mak * 464f6d9896f4a7dea961698914177abc15e594f5bTony Mak * Licensed under the Apache License, Version 2.0 (the "License"); 564f6d9896f4a7dea961698914177abc15e594f5bTony Mak * you may not use this file except in compliance with the License. 664f6d9896f4a7dea961698914177abc15e594f5bTony Mak * You may obtain a copy of the License at 764f6d9896f4a7dea961698914177abc15e594f5bTony Mak * 864f6d9896f4a7dea961698914177abc15e594f5bTony Mak * http://www.apache.org/licenses/LICENSE-2.0 964f6d9896f4a7dea961698914177abc15e594f5bTony Mak * 1064f6d9896f4a7dea961698914177abc15e594f5bTony Mak * Unless required by applicable law or agreed to in writing, software 1164f6d9896f4a7dea961698914177abc15e594f5bTony Mak * distributed under the License is distributed on an "AS IS" BASIS, 1264f6d9896f4a7dea961698914177abc15e594f5bTony Mak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364f6d9896f4a7dea961698914177abc15e594f5bTony Mak * See the License for the specific language governing permissions and 1464f6d9896f4a7dea961698914177abc15e594f5bTony Mak * limitations under the License. 1564f6d9896f4a7dea961698914177abc15e594f5bTony Mak */ 1664f6d9896f4a7dea961698914177abc15e594f5bTony Mak 1764f6d9896f4a7dea961698914177abc15e594f5bTony Makpackage com.android.settings.accounts; 1864f6d9896f4a7dea961698914177abc15e594f5bTony Mak 1964f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.content.BroadcastReceiver; 2064f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.content.Context; 2164f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.content.Intent; 2264f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.content.IntentFilter; 2364f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.os.Bundle; 2464f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.os.UserHandle; 2564f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.os.UserManager; 2664f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.provider.Settings; 2764f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.support.v14.preference.SwitchPreference; 2864f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.support.v7.preference.Preference; 2964f6d9896f4a7dea961698914177abc15e594f5bTony Makimport android.util.Log; 3064f6d9896f4a7dea961698914177abc15e594f5bTony Mak 31265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto; 3264f6d9896f4a7dea961698914177abc15e594f5bTony Makimport com.android.settings.R; 3364f6d9896f4a7dea961698914177abc15e594f5bTony Makimport com.android.settings.SettingsPreferenceFragment; 34bf94d09d6e6044ac303569986114245772cdfeceRicky Waiimport com.android.settings.Utils; 3564f6d9896f4a7dea961698914177abc15e594f5bTony Makimport com.android.settingslib.RestrictedLockUtils; 3664f6d9896f4a7dea961698914177abc15e594f5bTony Makimport com.android.settingslib.RestrictedSwitchPreference; 3764f6d9896f4a7dea961698914177abc15e594f5bTony Mak 3864f6d9896f4a7dea961698914177abc15e594f5bTony Makimport static android.provider.Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH; 3964f6d9896f4a7dea961698914177abc15e594f5bTony Mak 4064f6d9896f4a7dea961698914177abc15e594f5bTony Mak/** 4164f6d9896f4a7dea961698914177abc15e594f5bTony Mak * Setting page for managed profile. 4264f6d9896f4a7dea961698914177abc15e594f5bTony Mak * FIXME: It currently assumes there is only one managed profile. 4364f6d9896f4a7dea961698914177abc15e594f5bTony Mak */ 4464f6d9896f4a7dea961698914177abc15e594f5bTony Makpublic class ManagedProfileSettings extends SettingsPreferenceFragment 4564f6d9896f4a7dea961698914177abc15e594f5bTony Mak implements Preference.OnPreferenceChangeListener { 4664f6d9896f4a7dea961698914177abc15e594f5bTony Mak 4764f6d9896f4a7dea961698914177abc15e594f5bTony Mak private SwitchPreference mWorkModePreference; 4864f6d9896f4a7dea961698914177abc15e594f5bTony Mak private RestrictedSwitchPreference mContactPrefrence; 4964f6d9896f4a7dea961698914177abc15e594f5bTony Mak 5064f6d9896f4a7dea961698914177abc15e594f5bTony Mak private UserManager mUserManager; 5164f6d9896f4a7dea961698914177abc15e594f5bTony Mak private UserHandle mManagedUser; 5264f6d9896f4a7dea961698914177abc15e594f5bTony Mak private Context mContext; 5364f6d9896f4a7dea961698914177abc15e594f5bTony Mak 5464f6d9896f4a7dea961698914177abc15e594f5bTony Mak private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver; 5564f6d9896f4a7dea961698914177abc15e594f5bTony Mak 5664f6d9896f4a7dea961698914177abc15e594f5bTony Mak private static final String KEY_WORK_MODE = "work_mode"; 5764f6d9896f4a7dea961698914177abc15e594f5bTony Mak private static final String KEY_CONTACT = "contacts_search"; 5864f6d9896f4a7dea961698914177abc15e594f5bTony Mak 5964f6d9896f4a7dea961698914177abc15e594f5bTony Mak private static final String TAG = "ManagedProfileSettings"; 6064f6d9896f4a7dea961698914177abc15e594f5bTony Mak 6164f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 6264f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void onCreate(Bundle icicle) { 6364f6d9896f4a7dea961698914177abc15e594f5bTony Mak super.onCreate(icicle); 6464f6d9896f4a7dea961698914177abc15e594f5bTony Mak addPreferencesFromResource(R.xml.managed_profile_settings); 6564f6d9896f4a7dea961698914177abc15e594f5bTony Mak mWorkModePreference = (SwitchPreference) findPreference(KEY_WORK_MODE); 6664f6d9896f4a7dea961698914177abc15e594f5bTony Mak mWorkModePreference.setOnPreferenceChangeListener(this); 6764f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContactPrefrence = (RestrictedSwitchPreference) findPreference(KEY_CONTACT); 6864f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContactPrefrence.setOnPreferenceChangeListener(this); 6964f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContext = getActivity().getApplicationContext(); 7064f6d9896f4a7dea961698914177abc15e594f5bTony Mak mUserManager = (UserManager) getSystemService(Context.USER_SERVICE); 7164f6d9896f4a7dea961698914177abc15e594f5bTony Mak mManagedUser = getManagedUserFromArgument(); 7264f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (mManagedUser == null) { 7364f6d9896f4a7dea961698914177abc15e594f5bTony Mak getActivity().finish(); 7464f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 7564f6d9896f4a7dea961698914177abc15e594f5bTony Mak mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver(); 7664f6d9896f4a7dea961698914177abc15e594f5bTony Mak mManagedProfileBroadcastReceiver.register(getActivity()); 7764f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 7864f6d9896f4a7dea961698914177abc15e594f5bTony Mak 7964f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 8064f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void onResume() { 8164f6d9896f4a7dea961698914177abc15e594f5bTony Mak super.onResume(); 8264f6d9896f4a7dea961698914177abc15e594f5bTony Mak loadDataAndPopulateUi(); 8364f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 8464f6d9896f4a7dea961698914177abc15e594f5bTony Mak 8564f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 8664f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void onDestroy() { 8764f6d9896f4a7dea961698914177abc15e594f5bTony Mak super.onDestroy(); 8864f6d9896f4a7dea961698914177abc15e594f5bTony Mak mManagedProfileBroadcastReceiver.unregister(getActivity()); 8964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 9064f6d9896f4a7dea961698914177abc15e594f5bTony Mak 9164f6d9896f4a7dea961698914177abc15e594f5bTony Mak private UserHandle getManagedUserFromArgument() { 9264f6d9896f4a7dea961698914177abc15e594f5bTony Mak Bundle arguments = getArguments(); 9364f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (arguments != null) { 9464f6d9896f4a7dea961698914177abc15e594f5bTony Mak UserHandle userHandle = arguments.getParcelable(Intent.EXTRA_USER); 9564f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (userHandle != null) { 9664f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (mUserManager.isManagedProfile(userHandle.getIdentifier())) { 9764f6d9896f4a7dea961698914177abc15e594f5bTony Mak return userHandle; 9864f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 9964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 10064f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 101bf94d09d6e6044ac303569986114245772cdfeceRicky Wai // Return default managed profile for the current user. 102bf94d09d6e6044ac303569986114245772cdfeceRicky Wai return Utils.getManagedProfile(mUserManager); 10364f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 10464f6d9896f4a7dea961698914177abc15e594f5bTony Mak 10564f6d9896f4a7dea961698914177abc15e594f5bTony Mak private void loadDataAndPopulateUi() { 10664f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (mWorkModePreference != null) { 10764f6d9896f4a7dea961698914177abc15e594f5bTony Mak mWorkModePreference.setChecked( 10864f6d9896f4a7dea961698914177abc15e594f5bTony Mak !mUserManager.isQuietModeEnabled(mManagedUser)); 10964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 11064f6d9896f4a7dea961698914177abc15e594f5bTony Mak 11164f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (mContactPrefrence != null) { 11264f6d9896f4a7dea961698914177abc15e594f5bTony Mak int value = Settings.Secure.getIntForUser(getContentResolver(), 11364f6d9896f4a7dea961698914177abc15e594f5bTony Mak MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, mManagedUser.getIdentifier()); 11464f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContactPrefrence.setChecked(value != 0); 11564f6d9896f4a7dea961698914177abc15e594f5bTony Mak RestrictedLockUtils.EnforcedAdmin enforcedAdmin = 11664f6d9896f4a7dea961698914177abc15e594f5bTony Mak RestrictedLockUtils.checkIfRemoteContactSearchDisallowed( 11764f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContext, mManagedUser.getIdentifier()); 11864f6d9896f4a7dea961698914177abc15e594f5bTony Mak mContactPrefrence.setDisabledByAdmin(enforcedAdmin); 11964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 12064f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 12164f6d9896f4a7dea961698914177abc15e594f5bTony Mak 12264f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 1236507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 12464f6d9896f4a7dea961698914177abc15e594f5bTony Mak return MetricsProto.MetricsEvent.ACCOUNTS_WORK_PROFILE_SETTINGS; 12564f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 12664f6d9896f4a7dea961698914177abc15e594f5bTony Mak 12764f6d9896f4a7dea961698914177abc15e594f5bTony Mak 12864f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 12964f6d9896f4a7dea961698914177abc15e594f5bTony Mak public boolean onPreferenceChange(Preference preference, Object newValue) { 13064f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (preference == mWorkModePreference) { 13164f6d9896f4a7dea961698914177abc15e594f5bTony Mak if ((boolean) newValue) { 13264f6d9896f4a7dea961698914177abc15e594f5bTony Mak mUserManager.trySetQuietModeDisabled(mManagedUser.getIdentifier(), null); 13364f6d9896f4a7dea961698914177abc15e594f5bTony Mak } else { 13464f6d9896f4a7dea961698914177abc15e594f5bTony Mak mUserManager.setQuietModeEnabled(mManagedUser.getIdentifier(), true); 13564f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 13664f6d9896f4a7dea961698914177abc15e594f5bTony Mak return true; 13764f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 13864f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (preference == mContactPrefrence) { 13964f6d9896f4a7dea961698914177abc15e594f5bTony Mak int value = ((boolean) newValue == true) ? 1 : 0; 14064f6d9896f4a7dea961698914177abc15e594f5bTony Mak Settings.Secure.putIntForUser(getContentResolver(), 14164f6d9896f4a7dea961698914177abc15e594f5bTony Mak MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, value, mManagedUser.getIdentifier()); 14264f6d9896f4a7dea961698914177abc15e594f5bTony Mak return true; 14364f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 14464f6d9896f4a7dea961698914177abc15e594f5bTony Mak return false; 14564f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 14664f6d9896f4a7dea961698914177abc15e594f5bTony Mak 14764f6d9896f4a7dea961698914177abc15e594f5bTony Mak private class ManagedProfileBroadcastReceiver extends BroadcastReceiver { 14864f6d9896f4a7dea961698914177abc15e594f5bTony Mak 14964f6d9896f4a7dea961698914177abc15e594f5bTony Mak @Override 15064f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void onReceive(Context context, Intent intent) { 15164f6d9896f4a7dea961698914177abc15e594f5bTony Mak final String action = intent.getAction(); 15264f6d9896f4a7dea961698914177abc15e594f5bTony Mak Log.v(TAG, "Received broadcast: " + action); 15364f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) { 15464f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 15564f6d9896f4a7dea961698914177abc15e594f5bTony Mak UserHandle.USER_NULL) == mManagedUser.getIdentifier()) { 15664f6d9896f4a7dea961698914177abc15e594f5bTony Mak getActivity().finish(); 15764f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 15864f6d9896f4a7dea961698914177abc15e594f5bTony Mak return; 15964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 16064f6d9896f4a7dea961698914177abc15e594f5bTony Mak 16164f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE) 16264f6d9896f4a7dea961698914177abc15e594f5bTony Mak || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) { 16364f6d9896f4a7dea961698914177abc15e594f5bTony Mak if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 16464f6d9896f4a7dea961698914177abc15e594f5bTony Mak UserHandle.USER_NULL) == mManagedUser.getIdentifier()) { 16564f6d9896f4a7dea961698914177abc15e594f5bTony Mak mWorkModePreference.setChecked( 16664f6d9896f4a7dea961698914177abc15e594f5bTony Mak !mUserManager.isQuietModeEnabled(mManagedUser)); 16764f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 16864f6d9896f4a7dea961698914177abc15e594f5bTony Mak return; 16964f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 17064f6d9896f4a7dea961698914177abc15e594f5bTony Mak Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction()); 17164f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 17264f6d9896f4a7dea961698914177abc15e594f5bTony Mak 17364f6d9896f4a7dea961698914177abc15e594f5bTony Mak 17464f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void register(Context context) { 17564f6d9896f4a7dea961698914177abc15e594f5bTony Mak IntentFilter intentFilter = new IntentFilter(); 17664f6d9896f4a7dea961698914177abc15e594f5bTony Mak intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED); 17764f6d9896f4a7dea961698914177abc15e594f5bTony Mak intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); 17864f6d9896f4a7dea961698914177abc15e594f5bTony Mak intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); 17964f6d9896f4a7dea961698914177abc15e594f5bTony Mak context.registerReceiver(this, intentFilter); 18064f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 18164f6d9896f4a7dea961698914177abc15e594f5bTony Mak 18264f6d9896f4a7dea961698914177abc15e594f5bTony Mak public void unregister(Context context) { 18364f6d9896f4a7dea961698914177abc15e594f5bTony Mak context.unregisterReceiver(this); 18464f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 18564f6d9896f4a7dea961698914177abc15e594f5bTony Mak } 18664f6d9896f4a7dea961698914177abc15e594f5bTony Mak 18764f6d9896f4a7dea961698914177abc15e594f5bTony Mak} 188