1da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt/* 2da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Copyright (C) 2010 The Android Open Source Project 3da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 4da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License"); 5da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * you may not use this file except in compliance with the License. 6da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * You may obtain a copy of the License at 7da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 8da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * http://www.apache.org/licenses/LICENSE-2.0 9da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 10da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Unless required by applicable law or agreed to in writing, software 11da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS, 12da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * See the License for the specific language governing permissions and 14da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * limitations under the License. 15da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 16da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 17da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltpackage android.net; 18da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 19da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.content.Context; 20da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.os.Handler; 21da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.os.Message; 22665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwaltimport android.os.Messenger; 23da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.util.Slog; 24da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 25da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt/** 26da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * A dummy data state tracker for use when we don't have a real radio 27da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * connection. useful when bringing up a board or when you have network 28da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * access through other means. 29da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 30da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * {@hide} 31da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 321f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapndepublic class DummyDataStateTracker extends BaseNetworkStateTracker { 33da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 34da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final String TAG = "DummyDataStateTracker"; 35da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final boolean DBG = true; 36da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final boolean VDBG = false; 37da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 38da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mTeardownRequested = false; 39da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private Handler mTarget; 40da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mPrivateDnsRouteSet = false; 41da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mDefaultRouteSet = false; 42da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 43da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt // DEFAULT and HIPRI are the same connection. If we're one of these we need to check if 44da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt // the other is also disconnected before we reset sockets 45da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mIsDefaultOrHipri = false; 46da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 47da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 48da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Create a new DummyDataStateTracker 49da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param netType the ConnectivityManager network type 50da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param tag the name of this network 51da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 52da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public DummyDataStateTracker(int netType, String tag) { 53da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mNetworkInfo = new NetworkInfo(netType); 54da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 55da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 56da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 57da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Begin monitoring data connectivity. 58da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 59da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param context is the current Android context 60da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param target is the Handler to which to return the events. 61da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 62da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void startMonitoring(Context context, Handler target) { 63da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mTarget = target; 64da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mContext = context; 65da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 66da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 67da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isPrivateDnsRouteSet() { 68da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mPrivateDnsRouteSet; 69da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 70da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 71da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void privateDnsRouteSet(boolean enabled) { 72da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mPrivateDnsRouteSet = enabled; 73da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 74da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 75da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public NetworkInfo getNetworkInfo() { 76da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mNetworkInfo; 77da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 78da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 79da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isDefaultRouteSet() { 80da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mDefaultRouteSet; 81da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 82da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 83da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void defaultRouteSet(boolean enabled) { 84da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mDefaultRouteSet = enabled; 85da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 86da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 87da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 88da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * This is not implemented. 89da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 90da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void releaseWakeLock() { 91da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 92da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 93da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 94da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Report whether data connectivity is possible. 95da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 96da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isAvailable() { 97da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 98da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 99da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 100da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 101da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Return the system properties name associated with the tcp buffer sizes 102da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * for this network. 103da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 104da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public String getTcpBufferSizesPropName() { 105da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return "net.tcp.buffersize.unknown"; 106da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 107da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 108da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 109da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Tear down mobile data connectivity, i.e., disable the ability to create 110da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * mobile data connections. 111da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * TODO - make async and return nothing? 112da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 113da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean teardown() { 114da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.DISCONNECTING, "disabled", null); 115da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, "disabled", null); 116da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 117da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 118da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 119d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville @Override 120da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff public void captivePortalCheckComplete() { 121da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff // not implemented 122da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff } 123da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff 124d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville @Override 125d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville public void captivePortalCheckCompleted(boolean isCaptivePortal) { 126d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville // not implemented 127d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville } 128d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville 129da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 130da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Record the detailed state of a network, and if it is a 131da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * change from the previous state, send a notification to 132da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * any listeners. 133a45746efadd11bb7dfab026fb3c81a25fae74ca4Jeff Smith * @param state the new {@code DetailedState} 134da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param reason a {@code String} indicating a reason for the state change, 135da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * if one was supplied. May be {@code null}. 136da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param extraInfo optional {@code String} providing extra information about the state change 137da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 138da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private void setDetailedState(NetworkInfo.DetailedState state, String reason, 139da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt String extraInfo) { 140da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt if (DBG) log("setDetailed state, old =" 141da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt + mNetworkInfo.getDetailedState() + " and new state=" + state); 142da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mNetworkInfo.setDetailedState(state, reason, extraInfo); 143da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Message msg = mTarget.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); 144da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt msg.sendToTarget(); 145da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 146da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 147da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void setTeardownRequested(boolean isRequested) { 148da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mTeardownRequested = isRequested; 149da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 150da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 151da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isTeardownRequested() { 152da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mTeardownRequested; 153da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 154da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 155da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 156da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Re-enable mobile data connectivity after a {@link #teardown()}. 157da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * TODO - make async and always get a notification? 158da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 159da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean reconnect() { 160da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.CONNECTING, "enabled", null); 161da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.CONNECTED, "enabled", null); 162da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setTeardownRequested(false); 163da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 164da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 165da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 166da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 167da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Turn on or off the mobile radio. No connectivity will be possible while the 168da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * radio is off. The operation is a no-op if the radio is already in the desired state. 169da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param turnOn {@code true} if the radio should be turned on, {@code false} if 170da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 171da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean setRadio(boolean turnOn) { 172da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 173da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 174da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 1758e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey @Override 1768e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey public void setUserDataEnable(boolean enabled) { 1778e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey // ignored 1788e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey } 1798e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey 1808e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey @Override 1818e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey public void setPolicyDataEnable(boolean enabled) { 1828e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey // ignored 183e798268f16ec6d0542616ea45ca0bb18ae2645eeWink Saville } 184e798268f16ec6d0542616ea45ca0bb18ae2645eeWink Saville 185da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt @Override 186da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public String toString() { 187da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt StringBuffer sb = new StringBuffer("Dummy data state: none, dummy!"); 188da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return sb.toString(); 189da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 190da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 191da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 192da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @see android.net.NetworkStateTracker#getLinkProperties() 193da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 194da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public LinkProperties getLinkProperties() { 195da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return new LinkProperties(mLinkProperties); 196da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 197da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 198da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 199da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @see android.net.NetworkStateTracker#getLinkCapabilities() 200da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 201da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public LinkCapabilities getLinkCapabilities() { 202da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return new LinkCapabilities(mLinkCapabilities); 203da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 204da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 205d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt public void setDependencyMet(boolean met) { 206d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt // not supported on this network 207d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt } 208d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt 20969edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti @Override 21069edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti public void addStackedLink(LinkProperties link) { 21169edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti mLinkProperties.addStackedLink(link); 21269edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti } 21369edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti 21469edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti @Override 21569edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti public void removeStackedLink(LinkProperties link) { 21669edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti mLinkProperties.removeStackedLink(link); 21769edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti } 21869edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti 219665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt @Override 220665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt public void supplyMessenger(Messenger messenger) { 221665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt // not supported on this network 222665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt } 223665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt 224da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt static private void log(String s) { 225da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Slog.d(TAG, s); 226da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 227da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 228da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt static private void loge(String s) { 229da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Slog.e(TAG, s); 230da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 231da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt} 232