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