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; 21899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 22899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport com.android.internal.util.Preconditions; 23899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 24899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport java.util.concurrent.atomic.AtomicBoolean; 25899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 26899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey/** 27899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Interface to control and observe state of a specific network, hiding 28899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * network-specific details from {@link ConnectivityManager}. Surfaces events 29899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * through the registered {@link Handler} to enable {@link ConnectivityManager} 30899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * to respond to state changes over time. 31899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * 32899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * @hide 33899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey */ 34899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeypublic abstract class BaseNetworkStateTracker implements NetworkStateTracker { 35899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: better document threading expectations 36899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: migrate to make NetworkStateTracker abstract class 37899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 38899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public static final String PROP_TCP_BUFFER_UNKNOWN = "net.tcp.buffersize.unknown"; 39899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public static final String PROP_TCP_BUFFER_WIFI = "net.tcp.buffersize.wifi"; 40899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 41899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected Context mContext; 42899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private Handler mTarget; 43899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 44899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected NetworkInfo mNetworkInfo; 45899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected LinkProperties mLinkProperties; 46899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected LinkCapabilities mLinkCapabilities; 47899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 48899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mTeardownRequested = new AtomicBoolean(false); 49899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false); 50899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mDefaultRouteSet = new AtomicBoolean(false); 51899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 52899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public BaseNetworkStateTracker(int networkType) { 53899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mNetworkInfo = new NetworkInfo( 54899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey networkType, -1, ConnectivityManager.getNetworkTypeName(networkType), null); 55899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mLinkProperties = new LinkProperties(); 56899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mLinkCapabilities = new LinkCapabilities(); 57899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 58899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 59899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Deprecated 60899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected Handler getTargetHandler() { 61899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mTarget; 62899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 63899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 64899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected final void dispatchStateChanged() { 65899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: include snapshot of other fields when sending 66899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget.obtainMessage(EVENT_STATE_CHANGED, getNetworkInfo()).sendToTarget(); 67899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 68899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 69899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected final void dispatchConfigurationChanged() { 70899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: include snapshot of other fields when sending 71899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, getNetworkInfo()).sendToTarget(); 72899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 73899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 74899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 75899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final void startMonitoring(Context context, Handler target) { 76899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mContext = Preconditions.checkNotNull(context); 77899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget = Preconditions.checkNotNull(target); 78899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey startMonitoringInternal(); 79899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 80899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 81899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected abstract void startMonitoringInternal(); 82899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 83899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 84899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final NetworkInfo getNetworkInfo() { 85899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new NetworkInfo(mNetworkInfo); 86899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 87899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 88899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 89899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final LinkProperties getLinkProperties() { 90899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new LinkProperties(mLinkProperties); 91899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 92899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 93899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 94899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final LinkCapabilities getLinkCapabilities() { 95899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new LinkCapabilities(mLinkCapabilities); 96899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 97899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 98899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 99c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff public void captivePortalCheckComplete() { 100c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff // not implemented 101c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff } 102c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff 103c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff @Override 104899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean setRadio(boolean turnOn) { 105899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle radios 106899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return true; 107899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 108899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 109899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 110899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isAvailable() { 111899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mNetworkInfo.isAvailable(); 112899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 113899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 114899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 115899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setUserDataEnable(boolean enabled) { 116899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle enabled flags 117899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 118899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 119899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 120899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setPolicyDataEnable(boolean enabled) { 121899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle enabled flags 122899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 123899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 124899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 125899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isPrivateDnsRouteSet() { 126899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mPrivateDnsRouteSet.get(); 127899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 128899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 129899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 130899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void privateDnsRouteSet(boolean enabled) { 131899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mPrivateDnsRouteSet.set(enabled); 132899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 133899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 134899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 135899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isDefaultRouteSet() { 136899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mDefaultRouteSet.get(); 137899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 138899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 139899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 140899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void defaultRouteSet(boolean enabled) { 141899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mDefaultRouteSet.set(enabled); 142899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 143899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 144899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 145899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isTeardownRequested() { 146899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mTeardownRequested.get(); 147899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 148899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 149899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 150899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setTeardownRequested(boolean isRequested) { 151899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTeardownRequested.set(isRequested); 152899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 153899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 154899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 155899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setDependencyMet(boolean met) { 156899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle dependencies 157899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 158899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey} 159