NetworkMisc.java revision 3256601f5e4d94713f59e97b9d4912875c1bdcaf
165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/*
265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2014 The Android Open Source Project
365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License");
565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License.
665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at
765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *      http://www.apache.org/licenses/LICENSE-2.0
965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software
1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS,
1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and
1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License.
1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpackage android.net;
1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.os.Parcel;
2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.os.Parcelable;
2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/**
2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * A grab-bag of information (metadata, policies, properties, etc) about a
2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * {@link Network}. Since this contains PII, it should not be sent outside the
2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * system.
2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @hide
2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic class NetworkMisc implements Parcelable {
3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    /**
3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * If the {@link Network} is a VPN, whether apps are allowed to bypass the
3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * VPN. This is set by a {@link VpnService} and used by
3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * {@link ConnectivityManager} when creating a VPN.
3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     */
3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public boolean allowBypass;
3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    /**
3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * Set if the network was manually/explicitly connected to by the user either from settings
4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * or a 3rd party app.  For example, turning on cell data is not explicit but tapping on a wifi
4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * ap in the wifi settings to trigger a connection is explicit.  A 3rd party app asking to
4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * connect to a particular access point is also explicit, though this may change in the future
4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * as we want apps to use the multinetwork apis.
4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     */
4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public boolean explicitlySelected;
4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    /**
4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     * For mobile networks, this is the subscriber ID (such as IMSI).
4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn     */
5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public String subscriberId;
5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public NetworkMisc() {
5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public NetworkMisc(NetworkMisc nm) {
5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        if (nm != null) {
5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            allowBypass = nm.allowBypass;
5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            explicitlySelected = nm.explicitlySelected;
5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            subscriberId = nm.subscriberId;
6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        }
6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    @Override
6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public int describeContents() {
6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        return 0;
6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    @Override
6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public void writeToParcel(Parcel out, int flags) {
7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        out.writeInt(allowBypass ? 1 : 0);
7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        out.writeInt(explicitlySelected ? 1 : 0);
7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        out.writeString(subscriberId);
7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() {
7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        @Override
7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        public NetworkMisc createFromParcel(Parcel in) {
7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            NetworkMisc networkMisc = new NetworkMisc();
7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            networkMisc.allowBypass = in.readInt() != 0;
8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            networkMisc.explicitlySelected = in.readInt() != 0;
8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            networkMisc.subscriberId = in.readString();
8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            return networkMisc;
8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        }
8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        @Override
8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        public NetworkMisc[] newArray(int size) {
8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            return new NetworkMisc[size];
8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        }
8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    };
9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn