ConnectivityManager.java revision 6c2260b3af3a9243aa7f04cf03106f31817cb4c1
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant.SdkConstantType;
2142acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwaltimport android.os.Binder;
22ff3bdca31f4cf2bd607519b276dd175763aa1784Chia-chi Yehimport android.os.ParcelFileDescriptor;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwaltimport java.net.InetAddress;
26585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Class that answers queries about the state of network connectivity. It also
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notifies applications when network connectivity changes. Get an instance
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of this class by calling
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Context#getSystemService(String) Context.getSystemService(Context.CONNECTIVITY_SERVICE)}.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The primary responsibilities of this class are to:
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol>
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)</li>
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Send broadcast intents when network connectivity changes</li>
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Attempt to "fail over" to another network when connectivity to a network
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is lost</li>
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Provide an API that allows applications to query the coarse-grained or fine-grained
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state of the available networks</li>
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol>
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
43c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkeypublic class ConnectivityManager {
44c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    private static final String TAG = "ConnectivityManager";
45c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A change in network connectivity has occurred. A connection has either
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been established or lost. The NetworkInfo for the affected network is
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent as an extra; it should be consulted to see what kind of
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * connectivity event occurred.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If this is a connection that was the result of failing over from a
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * disconnected network, then the FAILOVER_CONNECTION boolean extra is
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * set to true.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * For a loss of connectivity, if the connectivity manager is attempting
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to connect (or has already connected) to another network, the
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * NetworkInfo for the new network is also passed as an extra. This lets
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any receivers of the broadcast know that they should not necessarily
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tell the user that no data traffic will be possible. Instead, the
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * reciever should expect another broadcast soon, indicating either that
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the failover attempt succeeded (and so there is still overall data
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * connectivity), or that the failover attempt failed, meaning that all
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * connectivity has been lost.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * For a disconnect event, the boolean extra EXTRA_NO_CONNECTIVITY
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is set to {@code true} if there are no connected networks at all.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a {@link NetworkInfo} object. Retrieve with
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.content.Intent#getParcelableExtra(String)}.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_NETWORK_INFO = "networkInfo";
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a boolean that indicates whether a connect event
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is for a network to which the connectivity manager was failing over
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * following a disconnect on another network.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve it with {@link android.content.Intent#getBooleanExtra(String,boolean)}.
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_IS_FAILOVER = "isFailover";
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a {@link NetworkInfo} object. This is supplied when
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there is another network that it may be possible to connect to. Retrieve with
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.content.Intent#getParcelableExtra(String)}.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a boolean that indicates whether there is a
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * complete lack of connectivity, i.e., no network is available.
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve it with {@link android.content.Intent#getBooleanExtra(String,boolean)}.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity";
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a string that indicates why an attempt to connect
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to a network failed. The string has no particular structure. It is
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * intended to be used in notifications presented to users. Retrieve
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * it with {@link android.content.Intent#getStringExtra(String)}.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_REASON = "reason";
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The lookup key for a string that provides optionally supplied
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * extra information about the network state. The information
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * may be passed up from the lower networking layers, and its
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * meaning may be specific to a particular network type. Retrieve
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * it with {@link android.content.Intent#getStringExtra(String)}.
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String EXTRA_EXTRA_INFO = "extraInfo";
109d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt    /**
110d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * The lookup key for an int that provides information about
111d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * our connection to the internet at large.  0 indicates no connection,
112d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * 100 indicates a great connection.  Retrieve it with
113c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey     * {@link android.content.Intent#getIntExtra(String, int)}.
114d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * {@hide}
115d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     */
116d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt    public static final String EXTRA_INET_CONDITION = "inetCondition";
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast Action: The setting for background data usage has changed
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values. Use {@link #getBackgroundDataSetting()} to get the current value.
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If an application uses the network in the background, it should listen
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for this broadcast and stop using the background data if the value is
124c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey     * {@code false}.
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTION_BACKGROUND_DATA_SETTING_CHANGED =
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1301e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt    /**
1311e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     * Broadcast Action: The network connection may not be good
1321e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     * uses {@code ConnectivityManager.EXTRA_INET_CONDITION} and
1331e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     * {@code ConnectivityManager.EXTRA_NETWORK_INFO} to specify
1341e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     * the network and it's condition.
1351e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     * @hide
1361e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt     */
1371e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt    public static final String INET_CONDITION_ACTION =
1381e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt            "android.net.conn.INET_CONDITION_ACTION";
1391e9aac2bd855f12708d3049eff4435fa4a2f4317Robert Greenwalt
14042acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
141d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * Broadcast Action: A tetherable connection has come or gone
142d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * TODO - finish the doc
143d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * @hide
144d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
145d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    public static final String ACTION_TETHER_STATE_CHANGED =
146d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            "android.net.conn.TETHER_STATE_CHANGED";
147d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
148d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
149d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * @hide
1502a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * gives a String[]
151d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
1522a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public static final String EXTRA_AVAILABLE_TETHER = "availableArray";
153d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
154d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
155d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * @hide
1562a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * gives a String[]
157d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
1582a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public static final String EXTRA_ACTIVE_TETHER = "activeArray";
1592a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt
1602a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    /**
1612a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * @hide
1622a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * gives a String[]
1632a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     */
1642a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public static final String EXTRA_ERRORED_TETHER = "erroredArray";
165d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
166d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
167ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt     * The absence of APN..
168ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt     * @hide
169ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt     */
170ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt    public static final int TYPE_NONE        = -1;
171ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt
172ccf83af1017b7b1eaf12f6ec3d2cb2137a7cdda9Robert Greenwalt    /**
17342acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * The Default Mobile data connection.  When active, all data traffic
17497ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * will use this connection by default.
17542acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
17642acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_MOBILE      = 0;
17742acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
17842acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * The Default WIFI data connection.  When active, all data traffic
17997ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * will use this connection by default.
18042acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
18142acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_WIFI        = 1;
18242acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
18342acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * An MMS-specific Mobile data connection.  This connection may be the
1841bc3c3775b7b2cbaec50cd377db437f284478de0Robert Greenwalt     * same as {@link #TYPE_MOBILE} but it may be different.  This is used
18542acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * by applications needing to talk to the carrier's Multimedia Messaging
18642acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * Service servers.  It may coexist with default data connections.
18742acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
18842acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_MOBILE_MMS  = 2;
18942acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
19042acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * A SUPL-specific Mobile data connection.  This connection may be the
1911bc3c3775b7b2cbaec50cd377db437f284478de0Robert Greenwalt     * same as {@link #TYPE_MOBILE} but it may be different.  This is used
19242acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * by applications needing to talk to the carrier's Secure User Plane
19342acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * Location servers for help locating the device.  It may coexist with
19442acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * default data connections.
19542acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
19642acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_MOBILE_SUPL = 3;
19742acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
19842acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * A DUN-specific Mobile data connection.  This connection may be the
1991bc3c3775b7b2cbaec50cd377db437f284478de0Robert Greenwalt     * same as {@link #TYPE_MOBILE} but it may be different.  This is used
20042acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * by applicaitons performing a Dial Up Networking bridge so that
20142acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * the carrier is aware of DUN traffic.  It may coexist with default data
20242acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * connections.
20342acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
20442acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_MOBILE_DUN  = 4;
20542acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    /**
20642acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * A High Priority Mobile data connection.  This connection is typically
2071bc3c3775b7b2cbaec50cd377db437f284478de0Robert Greenwalt     * the same as {@link #TYPE_MOBILE} but the routing setup is different.
20842acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * Only requesting processes will have access to the Mobile DNS servers
20942acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     * and only IP's explicitly requested via {@link #requestRouteToHost}
210c849cdf5cfde007ce591838c4e2b777fb4843c8dRobert Greenwalt     * will route over this interface if a default route exists.
21142acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt     */
21242acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt    public static final int TYPE_MOBILE_HIPRI = 5;
2138214deb542392f48b6c3fdc377fdf976c0b17a32jsh    /**
2148214deb542392f48b6c3fdc377fdf976c0b17a32jsh     * The Default WiMAX data connection.  When active, all data traffic
21597ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * will use this connection by default.
2168214deb542392f48b6c3fdc377fdf976c0b17a32jsh     */
2178214deb542392f48b6c3fdc377fdf976c0b17a32jsh    public static final int TYPE_WIMAX       = 6;
218da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
21915c7439acb22ab079dd2ebe42bdf0d2ffd525c5dJaikumar Ganesh    /**
22097ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * The Default Bluetooth data connection. When active, all data traffic
22197ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * will use this connection by default.
22215c7439acb22ab079dd2ebe42bdf0d2ffd525c5dJaikumar Ganesh     */
22315c7439acb22ab079dd2ebe42bdf0d2ffd525c5dJaikumar Ganesh    public static final int TYPE_BLUETOOTH   = 7;
22415c7439acb22ab079dd2ebe42bdf0d2ffd525c5dJaikumar Ganesh
2256081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt    /**
2266081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt     * Dummy data connection.  This should not be used on shipping devices.
2276081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt     */
22815c7439acb22ab079dd2ebe42bdf0d2ffd525c5dJaikumar Ganesh    public static final int TYPE_DUMMY       = 8;
2299d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville
2306081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt    /**
23197ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * The Default Ethernet data connection.  When active, all data traffic
23297ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt     * will use this connection by default.
2336081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt     */
234e12aec941dfc93b76b5efb9bc9f30d2ba3469434Robert Greenwalt    public static final int TYPE_ETHERNET    = 9;
2356081084e8831d12d2dd5a9a340ee7d35a54edb8aRobert Greenwalt
2369d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    /**
2379d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * Over the air Adminstration.
2389d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * {@hide}
2399d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     */
2409d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    public static final int TYPE_MOBILE_FOTA = 10;
2419d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville
2429d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    /**
2439d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * IP Multimedia Subsystem
2449d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * {@hide}
2459d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     */
2469d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    public static final int TYPE_MOBILE_IMS  = 11;
2479d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville
2489d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    /**
2499d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * Carrier Branded Services
2509d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     * {@hide}
2519d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville     */
2529d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    public static final int TYPE_MOBILE_CBS  = 12;
2539d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville
2549d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    /** {@hide} */
2559d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    public static final int MAX_RADIO_TYPE   = TYPE_MOBILE_CBS;
2569d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville
2579d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    /** {@hide} */
2589d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville    public static final int MAX_NETWORK_TYPE = TYPE_MOBILE_CBS;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
262c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    private final IConnectivityManager mService;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
264d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    public static boolean isNetworkTypeValid(int networkType) {
26542acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt        return networkType >= 0 && networkType <= MAX_NETWORK_TYPE;
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
268d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    /** {@hide} */
269d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    public static String getNetworkTypeName(int type) {
270d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey        switch (type) {
271d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE:
272d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE";
273d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_WIFI:
274d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "WIFI";
275d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_MMS:
276d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_MMS";
277d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_SUPL:
278d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_SUPL";
279d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_DUN:
280d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_DUN";
281d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_HIPRI:
282d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_HIPRI";
283d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_WIMAX:
284d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "WIMAX";
285d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_BLUETOOTH:
286d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "BLUETOOTH";
287d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_DUMMY:
288d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "DUMMY";
289d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_ETHERNET:
290d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "ETHERNET";
291d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_FOTA:
292d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_FOTA";
293d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_IMS:
294d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_IMS";
295d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_CBS:
296d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return "MOBILE_CBS";
297d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            default:
298d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return Integer.toString(type);
299d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey        }
300d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    }
301d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey
302d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    /** {@hide} */
303d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    public static boolean isNetworkTypeMobile(int networkType) {
304d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey        switch (networkType) {
305d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE:
306d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_MMS:
307d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_SUPL:
308d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_DUN:
309d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_HIPRI:
310d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_FOTA:
311d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_IMS:
312d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            case TYPE_MOBILE_CBS:
313d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return true;
314d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey            default:
315d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey                return false;
316d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey        }
317d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey    }
318d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setNetworkPreference(int preference) {
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mService.setNetworkPreference(preference);
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getNetworkPreference() {
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.getNetworkPreference();
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return -1;
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public NetworkInfo getActiveNetworkInfo() {
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.getActiveNetworkInfo();
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
342c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    /** {@hide} */
343c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    public NetworkInfo getActiveNetworkInfoForUid(int uid) {
344c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey        try {
345c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey            return mService.getActiveNetworkInfoForUid(uid);
346c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey        } catch (RemoteException e) {
347c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey            return null;
348c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey        }
349c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    }
350c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public NetworkInfo getNetworkInfo(int networkType) {
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.getNetworkInfo(networkType);
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public NetworkInfo[] getAllNetworkInfo() {
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.getAllNetworkInfo();
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
367c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    /** {@hide} */
368d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt    public LinkProperties getActiveLinkProperties() {
369d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        try {
370d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt            return mService.getActiveLinkProperties();
371d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        } catch (RemoteException e) {
372d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt            return null;
373d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        }
374d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt    }
375d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt
376c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey    /** {@hide} */
377d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt    public LinkProperties getLinkProperties(int networkType) {
378d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        try {
379d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt            return mService.getLinkProperties(networkType);
380d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        } catch (RemoteException e) {
381d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt            return null;
382d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt        }
383d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt    }
384d192dad69e9e5a820c5c11d8cd34460c9cc2ed11Robert Greenwalt
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** {@hide} */
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean setRadios(boolean turnOn) {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.setRadios(turnOn);
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** {@hide} */
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean setRadio(int networkType, boolean turnOn) {
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.setRadio(networkType, turnOn);
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tells the underlying networking system that the caller wants to
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * begin using the named feature. The interpretation of {@code feature}
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is completely up to each networking implementation.
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param networkType specifies which network the request pertains to
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param feature the name of the feature to be used
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an integer value representing the outcome of the request.
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The interpretation of this value is specific to each networking
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation+feature combination, except that the value {@code -1}
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always indicates failure.
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int startUsingNetworkFeature(int networkType, String feature) {
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
41642acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt            return mService.startUsingNetworkFeature(networkType, feature,
41742acef37339afe6ac608c842f1637870ee9c4f6cRobert Greenwalt                    new Binder());
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return -1;
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tells the underlying networking system that the caller is finished
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * using the named feature. The interpretation of {@code feature}
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is completely up to each networking implementation.
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param networkType specifies which network the request pertains to
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param feature the name of the feature that is no longer needed
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an integer value representing the outcome of the request.
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The interpretation of this value is specific to each networking
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation+feature combination, except that the value {@code -1}
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always indicates failure.
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int stopUsingNetworkFeature(int networkType, String feature) {
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.stopUsingNetworkFeature(networkType, feature);
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return -1;
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Ensure that a network route exists to deliver traffic to the specified
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * host via the specified network interface. An attempt to add a route that
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists is ignored, but treated as successful.
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param networkType the type of the network over which traffic to the specified
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * host is to be routed
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param hostAddress the IP address of the host to which the route is desired
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return {@code true} on success, {@code false} on failure
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean requestRouteToHost(int networkType, int hostAddress) {
452585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt        InetAddress inetAddress = NetworkUtils.intToInetAddress(hostAddress);
453585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt
454585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt        if (inetAddress == null) {
455585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt            return false;
456585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt        }
457585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt
458585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt        return requestRouteToHostAddress(networkType, inetAddress);
459585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt    }
460585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt
461585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt    /**
462585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * Ensure that a network route exists to deliver traffic to the specified
463585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * host via the specified network interface. An attempt to add a route that
464585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * already exists is ignored, but treated as successful.
465585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * @param networkType the type of the network over which traffic to the specified
466585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * host is to be routed
467585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * @param hostAddress the IP address of the host to which the route is desired
468585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * @return {@code true} on success, {@code false} on failure
469585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     * @hide
470585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt     */
471585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt    public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
472585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt        byte[] address = hostAddress.getAddress();
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
474585ac0fc8dde3fe35ec4c71c8f215f2c84139b8bRobert Greenwalt            return mService.requestRouteToHostAddress(networkType, address);
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the value of the setting for background data usage. If false,
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * applications should not use the network if the application is not in the
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground. Developers should respect this setting, and check the value
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of this before performing any background data operations.
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * All applications that have background services that use the network
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * should listen to {@link #ACTION_BACKGROUND_DATA_SETTING_CHANGED}.
4886fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang     *
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Whether background data usage is allowed.
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getBackgroundDataSetting() {
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mService.getBackgroundDataSetting();
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
4956fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang            // Err on the side of safety
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the value of the setting for background data usage.
502c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     *
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param allowBackgroundData Whether an application should use data while
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            it is in the background.
505c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     *
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @attr ref android.Manifest.permission#CHANGE_BACKGROUND_DATA_SETTING
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getBackgroundDataSetting()
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setBackgroundDataSetting(boolean allowBackgroundData) {
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mService.setBackgroundDataSetting(allowBackgroundData);
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
516c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt
517c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    /**
518c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     * Gets the value of the setting for enabling Mobile data.
519c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     *
520c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     * @return Whether mobile data is enabled.
521c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     * @hide
522c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     */
523c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    public boolean getMobileDataEnabled() {
524c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        try {
525c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt            return mService.getMobileDataEnabled();
526c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        } catch (RemoteException e) {
527c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt            return true;
528c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        }
529c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    }
530c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt
531c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    /**
532c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     * Sets the persisted value for enabling/disabling Mobile data.
533c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     *
5345a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * @param enabled Whether the mobile data connection should be
535c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     *            used or not.
536c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     * @hide
537c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt     */
538c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    public void setMobileDataEnabled(boolean enabled) {
539c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        try {
540c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt            mService.setMobileDataEnabled(enabled);
541c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        } catch (RemoteException e) {
542c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt        }
543c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt    }
544c03fa5014912684367174ff3cce664deb29f5e0eRobert Greenwalt
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@hide}
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConnectivityManager(IConnectivityManager service) {
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (service == null) {
550c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey            throw new IllegalArgumentException("missing IConnectivityManager");
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mService = service;
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
554d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
555d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
556d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * {@hide}
557d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
558d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    public String[] getTetherableIfaces() {
559d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        try {
560d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return mService.getTetherableIfaces();
561d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        } catch (RemoteException e) {
562d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return new String[0];
563d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        }
564d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    }
565d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
566d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
567d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * {@hide}
568d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
569d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    public String[] getTetheredIfaces() {
570d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        try {
571d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return mService.getTetheredIfaces();
572d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        } catch (RemoteException e) {
573d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return new String[0];
574d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        }
575d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    }
576d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
577d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
578d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * {@hide}
579d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
5805a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public String[] getTetheringErroredIfaces() {
5815a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        try {
5825a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return mService.getTetheringErroredIfaces();
5835a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        } catch (RemoteException e) {
5845a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return new String[0];
5855a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        }
5865a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    }
5875a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt
5885a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /**
5895a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * @return error A TETHER_ERROR value indicating success or failure type
5905a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * {@hide}
5915a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     */
5925a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public int tether(String iface) {
593d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        try {
594d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return mService.tether(iface);
595d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        } catch (RemoteException e) {
5965a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return TETHER_ERROR_SERVICE_UNAVAIL;
597d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        }
598d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    }
599d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt
600d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    /**
6015a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * @return error A TETHER_ERROR value indicating success or failure type
602d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     * {@hide}
603d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt     */
6045a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public int untether(String iface) {
605d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        try {
606d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            return mService.untether(iface);
607d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        } catch (RemoteException e) {
6085a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return TETHER_ERROR_SERVICE_UNAVAIL;
609d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt        }
610d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    }
6112a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt
6122a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    /**
6132a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * {@hide}
6142a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     */
6152a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public boolean isTetheringSupported() {
6162a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        try {
6172a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return mService.isTetheringSupported();
6182a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        } catch (RemoteException e) {
6192a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return false;
6202a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        }
6212a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    }
6222a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt
6232a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    /**
6242a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * {@hide}
6252a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     */
6262a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public String[] getTetherableUsbRegexs() {
6272a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        try {
6282a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return mService.getTetherableUsbRegexs();
6292a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        } catch (RemoteException e) {
6302a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return new String[0];
6312a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        }
6322a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    }
6332a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt
6342a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    /**
6352a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     * {@hide}
6362a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt     */
6372a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    public String[] getTetherableWifiRegexs() {
6382a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        try {
6392a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return mService.getTetherableWifiRegexs();
6402a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        } catch (RemoteException e) {
6412a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt            return new String[0];
6422a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt        }
6432a091d7aa0c174986387e5d56bf97a87fe075bdbRobert Greenwalt    }
6445a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt
6456fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang    /**
6466fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang     * {@hide}
6476fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang     */
6486fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang    public String[] getTetherableBluetoothRegexs() {
6496fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang        try {
6506fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang            return mService.getTetherableBluetoothRegexs();
6516fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang        } catch (RemoteException e) {
6526fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang            return new String[0];
6536fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang        }
6546fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang    }
6556fdd0c6274c81b337ad35b70480f881daf7354c3Danica Chang
6566c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood    /**
6576c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood     * {@hide}
6586c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood     */
6596c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood    public int setUsbTethering(boolean enable) {
6606c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood        try {
6616c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood            return mService.setUsbTethering(enable);
6626c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood        } catch (RemoteException e) {
6636c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood            return TETHER_ERROR_SERVICE_UNAVAIL;
6646c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood        }
6656c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood    }
6666c2260b3af3a9243aa7f04cf03106f31817cb4c1Mike Lockwood
6675a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6685a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_NO_ERROR           = 0;
6695a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6705a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_UNKNOWN_IFACE      = 1;
6715a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6725a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_SERVICE_UNAVAIL    = 2;
6735a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6745a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_UNSUPPORTED        = 3;
6755a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6765a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_UNAVAIL_IFACE      = 4;
6775a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6785a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_MASTER_ERROR       = 5;
6795a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6805a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6;
6815a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6825a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7;
6835a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6845a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_ENABLE_NAT_ERROR     = 8;
6855a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6865a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_DISABLE_NAT_ERROR    = 9;
6875a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /** {@hide} */
6885a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public static final int TETHER_ERROR_IFACE_CFG_ERROR      = 10;
6895a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt
6905a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    /**
6915a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * @param iface The name of the interface we're interested in
6925a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * @return error The error code of the last error tethering or untethering the named
6935a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     *               interface
6945a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     * {@hide}
6955a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt     */
6965a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt    public int getLastTetherError(String iface) {
6975a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        try {
6985a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return mService.getLastTetherError(iface);
6995a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        } catch (RemoteException e) {
7005a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt            return TETHER_ERROR_SERVICE_UNAVAIL;
7015a73506cdd466f2b96686ced3ff0f7ca224d1143Robert Greenwalt        }
70214f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt    }
70314f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt
70414f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt    /**
70514f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt     * Ensure the device stays awake until we connect with the next network
70614f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt     * @param forWhome The name of the network going down for logging purposes
70714f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt     * @return {@code true} on success, {@code false} on failure
70814f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt     * {@hide}
70914f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt     */
71014f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt    public boolean requestNetworkTransitionWakelock(String forWhom) {
71114f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt        try {
71214f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt            mService.requestNetworkTransitionWakelock(forWhom);
71314f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt            return true;
71414f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt        } catch (RemoteException e) {
71514f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt            return false;
71614f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt        }
71714f2ef4c9da27a3d58d65dc9f684c5f764ee279aRobert Greenwalt    }
718ca4306c976d393c3cd04270bc2de0af2f4f30fa5Robert Greenwalt
71967fd6c92922a94f46c7b6793a808f473a43eddd3Robert Greenwalt    /**
720d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * @param networkType The type of network you want to report on
721d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * @param percentage The quality of the connection 0 is bad, 100 is good
722d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     * {@hide}
723d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt     */
724d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt    public void reportInetCondition(int networkType, int percentage) {
725d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt        try {
726d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt            mService.reportInetCondition(networkType, percentage);
727d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt        } catch (RemoteException e) {
728d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt        }
729d7085fcf6567452a9d6fc69b0c6b1bf556f4c1b9Robert Greenwalt    }
730434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt
731434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    /**
732434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * @param proxyProperties The definition for the new global http proxy
733434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * {@hide}
734434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     */
735434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    public void setGlobalProxy(ProxyProperties p) {
736434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        try {
737434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt            mService.setGlobalProxy(p);
738434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        } catch (RemoteException e) {
739434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        }
740434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    }
741434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt
742434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    /**
743434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * @return proxyProperties for the current global proxy
744434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * {@hide}
745434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     */
746434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    public ProxyProperties getGlobalProxy() {
747434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        try {
748434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt            return mService.getGlobalProxy();
749434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        } catch (RemoteException e) {
750434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt            return null;
751434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        }
752434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    }
753434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt
754434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    /**
755434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * @return proxyProperties for the current proxy (global if set, network specific if not)
756434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     * {@hide}
757434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt     */
758434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    public ProxyProperties getProxy() {
759434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        try {
760434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt            return mService.getProxy();
761434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        } catch (RemoteException e) {
762434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt            return null;
763434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt        }
764434203a277cd2f237a71508a3d5a7d1602126cd5Robert Greenwalt    }
765d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt
766d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt    /**
767d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt     * @param networkType The network who's dependence has changed
768d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt     * @param met Boolean - true if network use is ok, false if not
769d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt     * {@hide}
770d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt     */
771d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt    public void setDataDependency(int networkType, boolean met) {
772d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt        try {
773d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt            mService.setDataDependency(networkType, met);
774d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt        } catch (RemoteException e) {
775d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt        }
776d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt    }
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
778