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; 2039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 21b166ea26687f7b72cbc544438436ae85167ca2f1Robin Leeimport android.text.TextUtils; 2214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changimport android.view.View; 232bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 242bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport com.android.internal.net.VpnProfile; 252bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport com.android.settings.R; 2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport static com.android.internal.net.LegacyVpnInfo.STATE_CONNECTED; 2739b467482d1bf256a111c757e9b7621c6f523271Jason Monk 282bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee/** 2914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang * {@link android.support.v7.preference.Preference} tracks the underlying legacy vpn profile and 3014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang * its connection state. 312bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee */ 3214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Changpublic class LegacyVpnPreference extends ManageablePreference { 332bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee private VpnProfile mProfile; 342bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 3514c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang LegacyVpnPreference(Context context) { 3614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang super(context, null /* attrs */); 37b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee setIcon(R.mipmap.ic_launcher_settings); 382bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 392bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 402bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee public VpnProfile getProfile() { 412bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee return mProfile; 422bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 432bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 442bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee public void setProfile(VpnProfile profile) { 45b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee final String oldLabel = (mProfile != null ? mProfile.name : null); 46b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee final String newLabel = (profile != null ? profile.name : null); 47b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee if (!TextUtils.equals(oldLabel, newLabel)) { 48b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee setTitle(newLabel); 49b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee notifyHierarchyChanged(); 507bf8654a5c1dfca8552aa635e552ded374e6fd46Robin Lee } 51b166ea26687f7b72cbc544438436ae85167ca2f1Robin Lee mProfile = profile; 522bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 532bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 542bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee @Override 552bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee public int compareTo(Preference preference) { 5614c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang if (preference instanceof LegacyVpnPreference) { 5714c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang LegacyVpnPreference another = (LegacyVpnPreference) preference; 582bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee int result; 592bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee if ((result = another.mState - mState) == 0 && 607bf8654a5c1dfca8552aa635e552ded374e6fd46Robin Lee (result = mProfile.name.compareToIgnoreCase(another.mProfile.name)) == 0 && 612bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee (result = mProfile.type - another.mProfile.type) == 0) { 622bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee result = mProfile.key.compareTo(another.mProfile.key); 632bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 642bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee return result; 652bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } else if (preference instanceof AppPreference) { 662bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee // Try to sort connected VPNs first 672bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee AppPreference another = (AppPreference) preference; 682bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee if (mState != STATE_CONNECTED && another.getState() == AppPreference.STATE_CONNECTED) { 692bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee return 1; 702bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 712bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee // Show configured VPNs before app VPNs 722bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee return -1; 732bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } else { 742bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee return super.compareTo(preference); 752bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 762bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 772bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 7814c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang @Override 7914c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang public void onClick(View v) { 8014c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang if (v.getId() == R.id.settings_button && isDisabledByAdmin()) { 8114c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang performClick(); 8214c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang return; 8314c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang } 8414c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang super.onClick(v); 8514c2ac4dcb17c27e065384e69c9f2e24dcbf22aaVictor Chang } 86e06d757a0cc134053866c7f25d1e525138b1c169Robin Lee} 87