summaryrefslogtreecommitdiffstats
path: root/telephony/java
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2009-07-02 20:50:11 -0700
committerWink Saville <wink@google.com>2009-07-02 20:50:11 -0700
commit1eee698c3e98561e5d9ddab7e4396b9281b31eb3 (patch)
treeb7fe80c329756c252de16e7e498697850b1cd4d5 /telephony/java
parent288fe16c20e2c20556839046d38c487b0b18735c (diff)
downloadframeworks_base-1eee698c3e98561e5d9ddab7e4396b9281b31eb3.zip
frameworks_base-1eee698c3e98561e5d9ddab7e4396b9281b31eb3.tar.gz
frameworks_base-1eee698c3e98561e5d9ddab7e4396b9281b31eb3.tar.bz2
Fixing 1949086 Sholes telephony crash after waking from sleep.
Diffstat (limited to 'telephony/java')
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java56
1 files changed, 39 insertions, 17 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 9d29272..c3818f5 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -96,6 +96,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
* Constants for the data connection activity:
* physical link down/up
*/
+ private static final int DATA_CONNECTION_ACTIVE_PH_LINK_INACTIVE = 0;
private static final int DATA_CONNECTION_ACTIVE_PH_LINK_DOWN = 1;
private static final int DATA_CONNECTION_ACTIVE_PH_LINK_UP = 2;
@@ -832,7 +833,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
}
- private void onCdmaDataAttached() {
+ private void onCdmaDataDetached() {
if (state == State.CONNECTED) {
startNetStatPoll();
phone.notifyDataConnection(Phone.REASON_CDMA_DATA_DETACHED);
@@ -852,6 +853,14 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
}
+ private void writeEventLogCdmaDataDrop() {
+ CdmaCellLocation loc = (CdmaCellLocation)(phone.getCellLocation());
+ int bsid = (loc != null) ? loc.getBaseStationId() : -1;
+ EventLog.List val = new EventLog.List(bsid,
+ TelephonyManager.getDefault().getNetworkType());
+ EventLog.writeEvent(TelephonyEventLog.EVENT_LOG_CDMA_DATA_DROP, val);
+ }
+
protected void onDataStateChanged (AsyncResult ar) {
ArrayList<DataCallState> dataCallStates = (ArrayList<DataCallState>)(ar.result);
@@ -863,24 +872,37 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
if (state == State.CONNECTED) {
- if (dataCallStates.get(0).active == DATA_CONNECTION_ACTIVE_PH_LINK_UP ) {
- activity = Activity.NONE;
- phone.notifyDataActivity();
- } else if (dataCallStates.get(0).active == DATA_CONNECTION_ACTIVE_PH_LINK_DOWN ) {
- activity = Activity.DORMANT;
- phone.notifyDataActivity();
+ if (dataCallStates.size() >= 1) {
+ switch (dataCallStates.get(0).active) {
+ case DATA_CONNECTION_ACTIVE_PH_LINK_UP:
+ Log.v(LOG_TAG, "onDataStateChanged: active=LINK_ACTIVE && CONNECTED, ignore");
+ activity = Activity.NONE;
+ phone.notifyDataActivity();
+ break;
+ case DATA_CONNECTION_ACTIVE_PH_LINK_INACTIVE:
+ Log.v(LOG_TAG,
+ "onDataStateChanged active=LINK_INACTIVE && CONNECTED, disconnecting/cleanup");
+ writeEventLogCdmaDataDrop();
+ cleanUpConnection(true, null);
+ break;
+ case DATA_CONNECTION_ACTIVE_PH_LINK_DOWN:
+ Log.v(LOG_TAG, "onDataStateChanged active=LINK_DOWN && CONNECTED, dormant");
+ activity = Activity.DORMANT;
+ phone.notifyDataActivity();
+ break;
+ default:
+ Log.v(LOG_TAG, "onDataStateChanged: IGNORE unexpected DataCallState.active="
+ + dataCallStates.get(0).active);
+ }
+ } else {
+ Log.v(LOG_TAG, "onDataStateChanged: network disconnected, clean up");
+ writeEventLogCdmaDataDrop();
+ cleanUpConnection(true, null);
}
} else {
-
- CdmaCellLocation loc = (CdmaCellLocation)(phone.getCellLocation());
- int bsid = (loc != null) ? loc.getBaseStationId() : -1;
- EventLog.List val = new EventLog.List(bsid,
- TelephonyManager.getDefault().getNetworkType());
- EventLog.writeEvent(TelephonyEventLog.EVENT_LOG_CDMA_DATA_DROP, val);
-
- cleanUpConnection(true, null);
+ // TODO: Do we need to do anything?
+ Log.i(LOG_TAG, "onDataStateChanged: not connected, state=" + state + " ignoring");
}
- Log.i(LOG_TAG, "Data connection has changed.");
}
String getInterfaceName() {
@@ -932,7 +954,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
break;
case EVENT_CDMA_DATA_DETACHED:
- onCdmaDataAttached();
+ onCdmaDataDetached();
break;
case EVENT_DATA_STATE_CHANGED: