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