BaseNetworkStateTracker.java revision 6a2d32597a3f158f4ff5b07ad61c7d892d08f3bf
1899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey/*
2899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Copyright (C) 2012 The Android Open Source Project
3899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey *
4899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * you may not use this file except in compliance with the License.
6899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * You may obtain a copy of the License at
7899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey *
8899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey *
10899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
11899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * See the License for the specific language governing permissions and
14899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * limitations under the License.
15899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey */
16899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
17899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeypackage android.net;
18899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
19899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport android.content.Context;
20899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport android.os.Handler;
21665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwaltimport android.os.Messenger;
22899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
23899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport com.android.internal.util.Preconditions;
24899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
25899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport java.util.concurrent.atomic.AtomicBoolean;
26899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
27899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey/**
28899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Interface to control and observe state of a specific network, hiding
29899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * network-specific details from {@link ConnectivityManager}. Surfaces events
30899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * through the registered {@link Handler} to enable {@link ConnectivityManager}
31899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * to respond to state changes over time.
32899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey *
33899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * @hide
34899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey */
35899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeypublic abstract class BaseNetworkStateTracker implements NetworkStateTracker {
36899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    // TODO: better document threading expectations
37899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    // TODO: migrate to make NetworkStateTracker abstract class
38899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
39899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public static final String PROP_TCP_BUFFER_UNKNOWN = "net.tcp.buffersize.unknown";
40899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public static final String PROP_TCP_BUFFER_WIFI = "net.tcp.buffersize.wifi";
41899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
42899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected Context mContext;
43899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    private Handler mTarget;
44899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
45899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected NetworkInfo mNetworkInfo;
46899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected LinkProperties mLinkProperties;
47899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected LinkCapabilities mLinkCapabilities;
48899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
49899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    private AtomicBoolean mTeardownRequested = new AtomicBoolean(false);
50899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false);
51899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    private AtomicBoolean mDefaultRouteSet = new AtomicBoolean(false);
52899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
53899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public BaseNetworkStateTracker(int networkType) {
54899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mNetworkInfo = new NetworkInfo(
55899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey                networkType, -1, ConnectivityManager.getNetworkTypeName(networkType), null);
56899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mLinkProperties = new LinkProperties();
57899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mLinkCapabilities = new LinkCapabilities();
58899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
59899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
601f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    protected BaseNetworkStateTracker() {
611f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        // By default, let the sub classes construct everything
621f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
631f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
64899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Deprecated
65899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected Handler getTargetHandler() {
66899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mTarget;
67899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
68899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
69899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected final void dispatchStateChanged() {
70899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // TODO: include snapshot of other fields when sending
71899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget.obtainMessage(EVENT_STATE_CHANGED, getNetworkInfo()).sendToTarget();
72899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
73899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
74899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected final void dispatchConfigurationChanged() {
75899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // TODO: include snapshot of other fields when sending
76899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, getNetworkInfo()).sendToTarget();
77899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
78899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
79899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
801f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public void startMonitoring(Context context, Handler target) {
81899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mContext = Preconditions.checkNotNull(context);
82899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget = Preconditions.checkNotNull(target);
83899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        startMonitoringInternal();
84899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
85899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
861f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    protected void startMonitoringInternal() {
871f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
881f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
89899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
90899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
911f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public NetworkInfo getNetworkInfo() {
92899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new NetworkInfo(mNetworkInfo);
93899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
94899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
95899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
961f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public LinkProperties getLinkProperties() {
97899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new LinkProperties(mLinkProperties);
98899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
99899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
100899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
1011f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public LinkCapabilities getLinkCapabilities() {
102899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new LinkCapabilities(mLinkCapabilities);
103899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
104899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
105899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
1066a2d32597a3f158f4ff5b07ad61c7d892d08f3bfVinit Deshapnde    public LinkQualityInfo getLinkQualityInfo() {
1071f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        return null;
1081f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
1091f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
1101f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    @Override
111c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    public void captivePortalCheckComplete() {
112c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff        // not implemented
113c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    }
114c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff
115c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    @Override
116d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    public void captivePortalCheckCompleted(boolean isCaptivePortal) {
117d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville        // not implemented
118d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    }
119d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville
120d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    @Override
121899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean setRadio(boolean turnOn) {
122899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle radios
123899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return true;
124899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
125899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
126899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
127899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isAvailable() {
128899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mNetworkInfo.isAvailable();
129899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
130899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
131899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
132899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setUserDataEnable(boolean enabled) {
133899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle enabled flags
134899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
135899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
136899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
137899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setPolicyDataEnable(boolean enabled) {
138899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle enabled flags
139899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
140899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
141899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
142899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isPrivateDnsRouteSet() {
143899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mPrivateDnsRouteSet.get();
144899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
145899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
146899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
147899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void privateDnsRouteSet(boolean enabled) {
148899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mPrivateDnsRouteSet.set(enabled);
149899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
150899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
151899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
152899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isDefaultRouteSet() {
153899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mDefaultRouteSet.get();
154899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
155899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
156899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
157899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void defaultRouteSet(boolean enabled) {
158899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mDefaultRouteSet.set(enabled);
159899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
160899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
161899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
162899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isTeardownRequested() {
163899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mTeardownRequested.get();
164899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
165899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
166899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
167899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setTeardownRequested(boolean isRequested) {
168899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTeardownRequested.set(isRequested);
169899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
170899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
171899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
172899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setDependencyMet(boolean met) {
173899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle dependencies
174899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
17569edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
17669edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
17769edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void addStackedLink(LinkProperties link) {
17869edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.addStackedLink(link);
17969edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
18069edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
18169edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
18269edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void removeStackedLink(LinkProperties link) {
18369edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.removeStackedLink(link);
18469edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
185665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt
186665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    @Override
187665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    public void supplyMessenger(Messenger messenger) {
188665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt        // not supported on this network
189665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    }
1901f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
1911f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    @Override
1921f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public String getNetworkInterfaceName() {
1931f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        if (mLinkProperties != null) {
1941f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde            return mLinkProperties.getInterfaceName();
1951f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        } else {
1961f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde            return null;
1971f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        }
1981f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
1991f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
2001f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    @Override
2011f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public void startSampling(SamplingDataTracker.SamplingSnapshot s) {
2021f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        // nothing to do
2031f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
2041f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde
2051f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    @Override
2061f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    public void stopSampling(SamplingDataTracker.SamplingSnapshot s) {
2071f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde        // nothing to do
2081f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapnde    }
209899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey}
210