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