BaseNetworkStateTracker.java revision 665e1aed5e99af1e66af56c0d73e32fd86f57273
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
60899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Deprecated
61899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected Handler getTargetHandler() {
62899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mTarget;
63899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
64899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
65899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected final void dispatchStateChanged() {
66899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // TODO: include snapshot of other fields when sending
67899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget.obtainMessage(EVENT_STATE_CHANGED, getNetworkInfo()).sendToTarget();
68899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
69899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
70899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected final void dispatchConfigurationChanged() {
71899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // TODO: include snapshot of other fields when sending
72899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, getNetworkInfo()).sendToTarget();
73899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
74899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
75899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
76899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public final void startMonitoring(Context context, Handler target) {
77899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mContext = Preconditions.checkNotNull(context);
78899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTarget = Preconditions.checkNotNull(target);
79899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        startMonitoringInternal();
80899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
81899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
82899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    protected abstract void startMonitoringInternal();
83899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
84899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
85899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public final NetworkInfo getNetworkInfo() {
86899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new NetworkInfo(mNetworkInfo);
87899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
88899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
89899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
90899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public final LinkProperties getLinkProperties() {
91899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new LinkProperties(mLinkProperties);
92899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
93899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
94899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
95899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public final LinkCapabilities getLinkCapabilities() {
96899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return new LinkCapabilities(mLinkCapabilities);
97899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
98899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
99899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
100c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    public void captivePortalCheckComplete() {
101c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff        // not implemented
102c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    }
103c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff
104c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff    @Override
105899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean setRadio(boolean turnOn) {
106899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle radios
107899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return true;
108899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
109899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
110899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
111899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isAvailable() {
112899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mNetworkInfo.isAvailable();
113899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
114899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
115899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
116899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setUserDataEnable(boolean enabled) {
117899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle enabled flags
118899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
119899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
120899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
121899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setPolicyDataEnable(boolean enabled) {
122899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle enabled flags
123899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
124899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
125899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
126899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isPrivateDnsRouteSet() {
127899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mPrivateDnsRouteSet.get();
128899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
129899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
130899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
131899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void privateDnsRouteSet(boolean enabled) {
132899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mPrivateDnsRouteSet.set(enabled);
133899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
134899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
135899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
136899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isDefaultRouteSet() {
137899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mDefaultRouteSet.get();
138899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
139899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
140899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
141899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void defaultRouteSet(boolean enabled) {
142899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mDefaultRouteSet.set(enabled);
143899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
144899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
145899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
146899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public boolean isTeardownRequested() {
147899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        return mTeardownRequested.get();
148899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
149899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
150899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
151899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setTeardownRequested(boolean isRequested) {
152899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        mTeardownRequested.set(isRequested);
153899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
154899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey
155899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    @Override
156899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    public void setDependencyMet(boolean met) {
157899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey        // Base tracker doesn't handle dependencies
158899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey    }
15969edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
16069edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
16169edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void addStackedLink(LinkProperties link) {
16269edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.addStackedLink(link);
16369edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
16469edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
16569edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
16669edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void removeStackedLink(LinkProperties link) {
16769edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.removeStackedLink(link);
16869edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
169665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt
170665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    @Override
171665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    public void supplyMessenger(Messenger messenger) {
172665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt        // not supported on this network
173665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    }
174899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey}
175