diff options
author | Wink Saville <wink@google.com> | 2010-12-07 10:34:49 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-12-07 10:34:49 -0800 |
commit | 9315c9547ae13c88f61fe42a1cda089bbc4b035b (patch) | |
tree | 412b478532e73250bce4ba922914cd164200cc4f /core | |
parent | 09437866e2b1771fd7a1381a090b153ef96f86fe (diff) | |
parent | e798268f16ec6d0542616ea45ca0bb18ae2645ee (diff) | |
download | frameworks_base-9315c9547ae13c88f61fe42a1cda089bbc4b035b.zip frameworks_base-9315c9547ae13c88f61fe42a1cda089bbc4b035b.tar.gz frameworks_base-9315c9547ae13c88f61fe42a1cda089bbc4b035b.tar.bz2 |
Merge "Have MobileDataStateTracker & DataConnectionTracker communicate directly."
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/net/DummyDataStateTracker.java | 3 | ||||
-rw-r--r-- | core/java/android/net/MobileDataStateTracker.java | 87 | ||||
-rw-r--r-- | core/java/android/net/NetworkStateTracker.java | 6 |
3 files changed, 89 insertions, 7 deletions
diff --git a/core/java/android/net/DummyDataStateTracker.java b/core/java/android/net/DummyDataStateTracker.java index a759865..daa1c09 100644 --- a/core/java/android/net/DummyDataStateTracker.java +++ b/core/java/android/net/DummyDataStateTracker.java @@ -189,6 +189,9 @@ public class DummyDataStateTracker implements NetworkStateTracker { return -1; } + public void setDataEnable(boolean enabled) { + } + @Override public String toString() { StringBuffer sb = new StringBuffer("Dummy data state: none, dummy!"); diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 4df8db5..b3a354f 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -20,14 +20,21 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.HandlerThread; +import android.os.Looper; +import android.os.Messenger; import android.os.RemoteException; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.ServiceManager; + +import com.android.internal.telephony.DataConnectionTracker; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.Phone; import com.android.internal.telephony.TelephonyIntents; +import com.android.internal.util.AsyncChannel; + import android.net.NetworkInfo.DetailedState; import android.net.NetworkInfo; import android.net.LinkProperties; @@ -67,6 +74,10 @@ public class MobileDataStateTracker implements NetworkStateTracker { // the other is also disconnected before we reset sockets private boolean mIsDefaultOrHipri = false; + private Handler mHandler; + private AsyncChannel mDataConnectionTrackerAc; + private Messenger mMessenger; + /** * Create a new MobileDataStateTracker * @param netType the ConnectivityManager network type @@ -107,14 +118,54 @@ public class MobileDataStateTracker implements NetworkStateTracker { mTarget = target; mContext = context; + HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread"); + handlerThread.start(); + mHandler = new MdstHandler(handlerThread.getLooper(), this); + IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); filter.addAction(TelephonyIntents.ACTION_DATA_CONNECTION_FAILED); + filter.addAction(DataConnectionTracker.ACTION_DATA_CONNECTION_TRACKER_MESSENGER); mContext.registerReceiver(new MobileDataStateReceiver(), filter); mMobileDataState = Phone.DataState.DISCONNECTED; } + static class MdstHandler extends Handler { + private MobileDataStateTracker mMdst; + + MdstHandler(Looper looper, MobileDataStateTracker mdst) { + super(looper); + mMdst = mdst; + } + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: + if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { + if (DBG) { + mMdst.log("MdstHandler connected"); + } + mMdst.mDataConnectionTrackerAc = (AsyncChannel) msg.obj; + } else { + if (DBG) { + mMdst.log("MdstHandler %s NOT connected error=" + msg.arg1); + } + } + break; + case AsyncChannel.CMD_CHANNEL_DISCONNECTED: + mMdst.log("Disconnected from DataStateTracker"); + mMdst.mDataConnectionTrackerAc = null; + break; + default: { + mMdst.log("Ignorning unknown message=" + msg); + break; + } + } + } + } + /** * Return the IP addresses of the DNS servers available for the mobile data * network interface. @@ -179,7 +230,7 @@ public class MobileDataStateTracker implements NetworkStateTracker { false)); if (DBG) { - log(mApnType + " Received state=" + state + ", old=" + mMobileDataState + + log("Received state=" + state + ", old=" + mMobileDataState + ", reason=" + (reason == null ? "(unspecified)" : reason)); } if (mMobileDataState != state) { @@ -265,10 +316,16 @@ public class MobileDataStateTracker implements NetworkStateTracker { String reason = intent.getStringExtra(Phone.FAILURE_REASON_KEY); String apnName = intent.getStringExtra(Phone.DATA_APN_KEY); if (DBG) { - log(mApnType + "Received " + intent.getAction() + + log("Received " + intent.getAction() + " broadcast" + reason == null ? "" : "(" + reason + ")"); } setDetailedState(DetailedState.FAILED, reason, apnName); + } else if (intent.getAction(). + equals(DataConnectionTracker.ACTION_DATA_CONNECTION_TRACKER_MESSENGER)) { + if (DBG) log(mApnType + " got ACTION_DATA_CONNECTION_TRACKER_MESSENGER"); + mMessenger = intent.getParcelableExtra(DataConnectionTracker.EXTRA_MESSENGER); + AsyncChannel ac = new AsyncChannel(); + ac.connect(mContext, MobileDataStateTracker.this.mHandler, mMessenger); } else { if (DBG) log("Broadcast received: ignore " + intent.getAction()); } @@ -488,6 +545,20 @@ public class MobileDataStateTracker implements NetworkStateTracker { return -1; } + /** + * @param enabled + */ + public void setDataEnable(boolean enabled) { + try { + log("setDataEnable: E enabled=" + enabled); + mDataConnectionTrackerAc.sendMessage(DataConnectionTracker.CMD_SET_DATA_ENABLE, + enabled ? DataConnectionTracker.ENABLED : DataConnectionTracker.DISABLED); + log("setDataEnable: X enabled=" + enabled); + } catch (Exception e) { + log("setDataEnable: X mAc was null" + e); + } + } + @Override public String toString() { StringBuffer sb = new StringBuffer("Mobile data state: "); @@ -543,7 +614,7 @@ public class MobileDataStateTracker implements NetworkStateTracker { case ConnectivityManager.TYPE_MOBILE_HIPRI: return Phone.APN_TYPE_HIPRI; default: - loge("Error mapping networkType " + netType + " to apnType."); + sloge("Error mapping networkType " + netType + " to apnType."); return null; } } @@ -562,11 +633,15 @@ public class MobileDataStateTracker implements NetworkStateTracker { return new LinkCapabilities(mLinkCapabilities); } - static private void log(String s) { - Slog.d(TAG, s); + private void log(String s) { + Slog.d(TAG, mApnType + ": " + s); + } + + private void loge(String s) { + Slog.e(TAG, mApnType + ": " + s); } - static private void loge(String s) { + static private void sloge(String s) { Slog.e(TAG, s); } } diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java index 8afdcee..e378506 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -169,6 +169,11 @@ public interface NetworkStateTracker { public int stopUsingNetworkFeature(String feature, int callingPid, int callingUid); /** + * @param enabled + */ + public void setDataEnable(boolean enabled); + + /** * ------------------------------------------------------------- * Storage API used by ConnectivityService for saving * Network specific information. @@ -204,5 +209,4 @@ public interface NetworkStateTracker { * Indicate tear down requested from connectivity */ public void setTeardownRequested(boolean isRequested); - } |