1 /* 2 * Copyright (C) 2015 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.vpn2; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.os.UserHandle; 22 import android.os.UserManager; 23 import android.text.TextUtils; 24 import android.util.AttributeSet; 25 26 import com.android.settings.widget.GearPreference; 27 import com.android.settings.R; 28 29 /** 30 * This class sets appropriate enabled state and user admin message when userId is set 31 */ 32 public abstract class ManageablePreference extends GearPreference { 33 34 public static int STATE_NONE = -1; 35 36 boolean mIsAlwaysOn = false; 37 int mState = STATE_NONE; 38 int mUserId; 39 ManageablePreference(Context context, AttributeSet attrs)40 public ManageablePreference(Context context, AttributeSet attrs) { 41 super(context, attrs); 42 setPersistent(false); 43 setOrder(0); 44 setUserId(UserHandle.myUserId()); 45 } 46 getUserId()47 public int getUserId() { 48 return mUserId; 49 } 50 setUserId(int userId)51 public void setUserId(int userId) { 52 mUserId = userId; 53 checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_VPN, userId); 54 } 55 isAlwaysOn()56 public boolean isAlwaysOn() { 57 return mIsAlwaysOn; 58 } 59 getState()60 public int getState() { 61 return mState; 62 } 63 setState(int state)64 public void setState(int state) { 65 if (mState != state) { 66 mState = state; 67 updateSummary(); 68 notifyHierarchyChanged(); 69 } 70 } 71 setAlwaysOn(boolean isEnabled)72 public void setAlwaysOn(boolean isEnabled) { 73 if (mIsAlwaysOn != isEnabled) { 74 mIsAlwaysOn = isEnabled; 75 updateSummary(); 76 } 77 } 78 79 /** 80 * Update the preference summary string (see {@see Preference#setSummary}) with a string 81 * reflecting connection status and always-on setting. 82 * 83 * State is not shown for {@code STATE_NONE}. 84 */ updateSummary()85 protected void updateSummary() { 86 final Resources res = getContext().getResources(); 87 final String[] states = res.getStringArray(R.array.vpn_states); 88 String summary = (mState == STATE_NONE ? "" : states[mState]); 89 if (mIsAlwaysOn) { 90 final String alwaysOnString = res.getString(R.string.vpn_always_on_summary_active); 91 summary = TextUtils.isEmpty(summary) ? alwaysOnString : res.getString( 92 R.string.join_two_unrelated_items, summary, alwaysOnString); 93 } 94 setSummary(summary); 95 } 96 } 97