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