12bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee/*
22bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * Copyright (C) 2015 The Android Open Source Project
32bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee *
42bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * Licensed under the Apache License, Version 2.0 (the "License");
52bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * you may not use this file except in compliance with the License.
62bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * You may obtain a copy of the License at
72bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee *
82bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee *      http://www.apache.org/licenses/LICENSE-2.0
92bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee *
102bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * Unless required by applicable law or agreed to in writing, software
112bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * distributed under the License is distributed on an "AS IS" BASIS,
122bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * See the License for the specific language governing permissions and
142bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * limitations under the License.
152bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee */
162bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
172bd92d5d0685144aad566b9d29454fb519ff0371Robin Leepackage com.android.settings.vpn2;
182bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
192bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport android.content.Context;
2014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changimport android.content.res.Resources;
2114c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changimport android.os.UserHandle;
2214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changimport android.os.UserManager;
2314c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changimport android.text.TextUtils;
242bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport android.util.AttributeSet;
252bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
2662e66c9ca4dc7140b9089519c171cd1cc40b0c63Fan Zhangimport com.android.settings.widget.GearPreference;
272bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport com.android.settings.R;
282bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
292bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee/**
3014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang * This class sets appropriate enabled state and user admin message when userId is set
312bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee */
3214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changpublic abstract class ManageablePreference extends GearPreference {
332bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
3414c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public static int STATE_NONE = -1;
3514c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
3614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    boolean mIsAlwaysOn = false;
37e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    int mState = STATE_NONE;
3814c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    int mUserId;
3914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
4014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public ManageablePreference(Context context, AttributeSet attrs) {
412bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee        super(context, attrs);
422bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee        setPersistent(false);
432bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee        setOrder(0);
4414c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        setUserId(UserHandle.myUserId());
4514c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    }
4614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
4714c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public int getUserId() {
4814c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        return mUserId;
4914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    }
5014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
5114c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public void setUserId(int userId) {
5214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        mUserId = userId;
5314c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_VPN, userId);
5414c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    }
5514c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
5614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public boolean isAlwaysOn() {
5714c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        return mIsAlwaysOn;
5814c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    }
5914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang
60e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    public int getState() {
61e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee        return mState;
62e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    }
63e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee
64e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    public void setState(int state) {
65b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee        if (mState != state) {
66b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee            mState = state;
67b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee            updateSummary();
68b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee            notifyHierarchyChanged();
69b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee        }
70e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    }
71e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee
7214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    public void setAlwaysOn(boolean isEnabled) {
73b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee        if (mIsAlwaysOn != isEnabled) {
74b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee            mIsAlwaysOn = isEnabled;
75b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee            updateSummary();
76b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee        }
772bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee    }
782bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee
7914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang    /**
80e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee     * Update the preference summary string (see {@see Preference#setSummary}) with a string
81e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee     * reflecting connection status and always-on setting.
8214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang     *
83e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee     * State is not shown for {@code STATE_NONE}.
8414c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang     */
85e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee    protected void updateSummary() {
8614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        final Resources res = getContext().getResources();
8714c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        final String[] states = res.getStringArray(R.array.vpn_states);
88e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee        String summary = (mState == STATE_NONE ? "" : states[mState]);
8914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        if (mIsAlwaysOn) {
901b5015cae6c790f92a2d3366737641eae9aaad72Charles He            final String alwaysOnString = res.getString(R.string.vpn_always_on_summary_active);
9114c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang            summary = TextUtils.isEmpty(summary) ? alwaysOnString : res.getString(
9214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang                    R.string.join_two_unrelated_items, summary, alwaysOnString);
9314c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang        }
94e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee        setSummary(summary);
952bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee    }
962bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee}
97