BaseNetworkStateTracker.java revision 6a2d32597a3f158f4ff5b07ad61c7d892d08f3bf
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.net;
18
19import android.content.Context;
20import android.os.Handler;
21import android.os.Messenger;
22
23import com.android.internal.util.Preconditions;
24
25import java.util.concurrent.atomic.AtomicBoolean;
26
27/**
28 * Interface to control and observe state of a specific network, hiding
29 * network-specific details from {@link ConnectivityManager}. Surfaces events
30 * through the registered {@link Handler} to enable {@link ConnectivityManager}
31 * to respond to state changes over time.
32 *
33 * @hide
34 */
35public abstract class BaseNetworkStateTracker implements NetworkStateTracker {
36    // TODO: better document threading expectations
37    // TODO: migrate to make NetworkStateTracker abstract class
38
39    public static final String PROP_TCP_BUFFER_UNKNOWN = "net.tcp.buffersize.unknown";
40    public static final String PROP_TCP_BUFFER_WIFI = "net.tcp.buffersize.wifi";
41
42    protected Context mContext;
43    private Handler mTarget;
44
45    protected NetworkInfo mNetworkInfo;
46    protected LinkProperties mLinkProperties;
47    protected LinkCapabilities mLinkCapabilities;
48
49    private AtomicBoolean mTeardownRequested = new AtomicBoolean(false);
50    private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false);
51    private AtomicBoolean mDefaultRouteSet = new AtomicBoolean(false);
52
53    public BaseNetworkStateTracker(int networkType) {
54        mNetworkInfo = new NetworkInfo(
55                networkType, -1, ConnectivityManager.getNetworkTypeName(networkType), null);
56        mLinkProperties = new LinkProperties();
57        mLinkCapabilities = new LinkCapabilities();
58    }
59
60    protected BaseNetworkStateTracker() {
61        // By default, let the sub classes construct everything
62    }
63
64    @Deprecated
65    protected Handler getTargetHandler() {
66        return mTarget;
67    }
68
69    protected final void dispatchStateChanged() {
70        // TODO: include snapshot of other fields when sending
71        mTarget.obtainMessage(EVENT_STATE_CHANGED, getNetworkInfo()).sendToTarget();
72    }
73
74    protected final void dispatchConfigurationChanged() {
75        // TODO: include snapshot of other fields when sending
76        mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, getNetworkInfo()).sendToTarget();
77    }
78
79    @Override
80    public void startMonitoring(Context context, Handler target) {
81        mContext = Preconditions.checkNotNull(context);
82        mTarget = Preconditions.checkNotNull(target);
83        startMonitoringInternal();
84    }
85
86    protected void startMonitoringInternal() {
87
88    }
89
90    @Override
91    public NetworkInfo getNetworkInfo() {
92        return new NetworkInfo(mNetworkInfo);
93    }
94
95    @Override
96    public LinkProperties getLinkProperties() {
97        return new LinkProperties(mLinkProperties);
98    }
99
100    @Override
101    public LinkCapabilities getLinkCapabilities() {
102        return new LinkCapabilities(mLinkCapabilities);
103    }
104
105    @Override
106    public LinkQualityInfo getLinkQualityInfo() {
107        return null;
108    }
109
110    @Override
111    public void captivePortalCheckComplete() {
112        // not implemented
113    }
114
115    @Override
116    public void captivePortalCheckCompleted(boolean isCaptivePortal) {
117        // not implemented
118    }
119
120    @Override
121    public boolean setRadio(boolean turnOn) {
122        // Base tracker doesn't handle radios
123        return true;
124    }
125
126    @Override
127    public boolean isAvailable() {
128        return mNetworkInfo.isAvailable();
129    }
130
131    @Override
132    public void setUserDataEnable(boolean enabled) {
133        // Base tracker doesn't handle enabled flags
134    }
135
136    @Override
137    public void setPolicyDataEnable(boolean enabled) {
138        // Base tracker doesn't handle enabled flags
139    }
140
141    @Override
142    public boolean isPrivateDnsRouteSet() {
143        return mPrivateDnsRouteSet.get();
144    }
145
146    @Override
147    public void privateDnsRouteSet(boolean enabled) {
148        mPrivateDnsRouteSet.set(enabled);
149    }
150
151    @Override
152    public boolean isDefaultRouteSet() {
153        return mDefaultRouteSet.get();
154    }
155
156    @Override
157    public void defaultRouteSet(boolean enabled) {
158        mDefaultRouteSet.set(enabled);
159    }
160
161    @Override
162    public boolean isTeardownRequested() {
163        return mTeardownRequested.get();
164    }
165
166    @Override
167    public void setTeardownRequested(boolean isRequested) {
168        mTeardownRequested.set(isRequested);
169    }
170
171    @Override
172    public void setDependencyMet(boolean met) {
173        // Base tracker doesn't handle dependencies
174    }
175
176    @Override
177    public void addStackedLink(LinkProperties link) {
178        mLinkProperties.addStackedLink(link);
179    }
180
181    @Override
182    public void removeStackedLink(LinkProperties link) {
183        mLinkProperties.removeStackedLink(link);
184    }
185
186    @Override
187    public void supplyMessenger(Messenger messenger) {
188        // not supported on this network
189    }
190
191    @Override
192    public String getNetworkInterfaceName() {
193        if (mLinkProperties != null) {
194            return mLinkProperties.getInterfaceName();
195        } else {
196            return null;
197        }
198    }
199
200    @Override
201    public void startSampling(SamplingDataTracker.SamplingSnapshot s) {
202        // nothing to do
203    }
204
205    @Override
206    public void stopSampling(SamplingDataTracker.SamplingSnapshot s) {
207        // nothing to do
208    }
209}
210