summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Greenwalt <rgreenwalt@google.com> 2011-04-07 16:52:31 -0700
committer Robert Greenwalt <rgreenwalt@google.com> 2011-04-08 09:39:57 -0700
commit7a093b2c35d020fa46d2d2e20ddc6b3ff2c2bc30 (patch)
tree06852d008b2b7ff5bacd095fb7d44898b00b4d1b
parent216d98949ddeb84359836594ab00be158d69545e (diff)
Fix isApnTypeActive in GDCT.
The single active APN makes no sense now. Add override function to do the right thing. Also makes ApnContext threadsafe. Change-Id: I4302595e8818b7d31bdd32b5fdf4e3de1cd81ed8
-rw-r--r--telephony/java/com/android/internal/telephony/ApnContext.java89
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java8
2 files changed, 54 insertions, 43 deletions
diff --git a/telephony/java/com/android/internal/telephony/ApnContext.java b/telephony/java/com/android/internal/telephony/ApnContext.java
index 2e7c3a32c11e..3f1ca9e9b9fb 100644
--- a/telephony/java/com/android/internal/telephony/ApnContext.java
+++ b/telephony/java/com/android/internal/telephony/ApnContext.java
@@ -20,6 +20,8 @@ import android.app.PendingIntent;
import android.util.Log;
import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Maintain the Apn context
@@ -30,25 +32,22 @@ public class ApnContext {
public static final int PENDING_ACTION_RECONNECT = 2;
public static final int PENDING_ACTION_APN_DISABLE = 3;
- public static final int DATA_ENABLED = 1;
- public static final int DATA_DISABLED = 2;
-
public final String LOG_TAG;
- int mPendingAction;
+ private AtomicInteger mPendingAction;
protected static final boolean DBG = true;
- String mApnType;
+ private final String mApnType;
- DataConnectionTracker.State mState;
+ private DataConnectionTracker.State mState;
- ArrayList<ApnSetting> mWaitingApns = null;
+ private ArrayList<ApnSetting> mWaitingApns = null;
/** A zero indicates that all waiting APNs had a permanent error */
- private int mWaitingApnsPermanentFailureCountDown;
+ private AtomicInteger mWaitingApnsPermanentFailureCountDown;
- ApnSetting mApnSetting;
+ private ApnSetting mApnSetting;
DataConnection mDataConnection;
@@ -59,65 +58,66 @@ public class ApnContext {
/**
* user/app requested connection on this APN
*/
- boolean mDataEnabled;
+ AtomicBoolean mDataEnabled;
/**
* carrier requirements met
*/
- boolean mDependencyMet;
+ AtomicBoolean mDependencyMet;
public ApnContext(String apnType, String logTag) {
mApnType = apnType;
mState = DataConnectionTracker.State.IDLE;
setReason(Phone.REASON_DATA_ENABLED);
- mPendingAction = PENDING_ACTION_NONE;
- mDataEnabled = false;
- mDependencyMet = true;
+ mPendingAction = new AtomicInteger(PENDING_ACTION_NONE);
+ mDataEnabled = new AtomicBoolean(false);
+ mDependencyMet = new AtomicBoolean(true);
+ mWaitingApnsPermanentFailureCountDown = new AtomicInteger(0);
LOG_TAG = logTag;
}
public int getPendingAction() {
- return mPendingAction;
+ return mPendingAction.get();
}
public void setPendingAction(int pa) {
- mPendingAction = pa;
+ mPendingAction.set(pa);
}
public String getApnType() {
return mApnType;
}
- public DataConnection getDataConnection() {
+ public synchronized DataConnection getDataConnection() {
return mDataConnection;
}
- public void setDataConnection(DataConnection dataConnection) {
+ public synchronized void setDataConnection(DataConnection dataConnection) {
mDataConnection = dataConnection;
}
- public ApnSetting getApnSetting() {
+ public synchronized ApnSetting getApnSetting() {
return mApnSetting;
}
- public void setApnSetting(ApnSetting apnSetting) {
+ public synchronized void setApnSetting(ApnSetting apnSetting) {
mApnSetting = apnSetting;
}
- public void setWaitingApns(ArrayList<ApnSetting> waitingApns) {
+ public synchronized void setWaitingApns(ArrayList<ApnSetting> waitingApns) {
mWaitingApns = waitingApns;
- mWaitingApnsPermanentFailureCountDown = mWaitingApns.size();
+ mWaitingApnsPermanentFailureCountDown.set(mWaitingApns.size());
}
public int getWaitingApnsPermFailCount() {
- return mWaitingApnsPermanentFailureCountDown;
+ return mWaitingApnsPermanentFailureCountDown.get();
}
public void decWaitingApnsPermFailCount() {
- mWaitingApnsPermanentFailureCountDown--;
+ mWaitingApnsPermanentFailureCountDown.decrementAndGet();
}
- public ApnSetting getNextWaitingApn() {
+ public synchronized ApnSetting getNextWaitingApn() {
ArrayList<ApnSetting> list = mWaitingApns;
ApnSetting apn = null;
@@ -129,78 +129,81 @@ public class ApnContext {
return apn;
}
- public void removeNextWaitingApn() {
+ public synchronized void removeNextWaitingApn() {
if ((mWaitingApns != null) && (!mWaitingApns.isEmpty())) {
mWaitingApns.remove(0);
}
}
- public ArrayList<ApnSetting> getWaitingApns() {
+ public synchronized ArrayList<ApnSetting> getWaitingApns() {
return mWaitingApns;
}
- public void setState(DataConnectionTracker.State s) {
- if (DBG)
+ public synchronized void setState(DataConnectionTracker.State s) {
+ if (DBG) {
log("setState: " + s + " for type " + mApnType + ", previous state:" + mState);
+ }
mState = s;
if (mState == DataConnectionTracker.State.FAILED) {
- if (mWaitingApns != null)
+ if (mWaitingApns != null) {
mWaitingApns.clear(); // when teardown the connection and set to IDLE
+ }
}
}
- public DataConnectionTracker.State getState() {
+ public synchronized DataConnectionTracker.State getState() {
return mState;
}
- public void setReason(String reason) {
- if (DBG)
+ public synchronized void setReason(String reason) {
+ if (DBG) {
log("set reason as " + reason + ", for type " + mApnType + ",current state " + mState);
+ }
mReason = reason;
}
- public String getReason() {
+ public synchronized String getReason() {
return mReason;
}
- public void setReconnectIntent(PendingIntent intent) {
+ public synchronized void setReconnectIntent(PendingIntent intent) {
if (DBG)
log("set ReconnectIntent for type " + mApnType);
mReconnectIntent = intent;
}
- public PendingIntent getReconnectIntent() {
+ public synchronized PendingIntent getReconnectIntent() {
return mReconnectIntent;
}
public boolean isReady() {
- return mDataEnabled && mDependencyMet;
+ return mDataEnabled.get() && mDependencyMet.get();
}
public void setEnabled(boolean enabled) {
if (DBG) {
log("set enabled as " + enabled + ", for type " +
- mApnType + ", current state is " + mDataEnabled);
+ mApnType + ", current state is " + mDataEnabled.get());
}
- mDataEnabled = enabled;
+ mDataEnabled.set(enabled);
}
public boolean isEnabled() {
- return mDataEnabled;
+ return mDataEnabled.get();
}
public void setDependencyMet(boolean met) {
if (DBG) {
log("set mDependencyMet as " + met + ", for type " + mApnType +
- ", current state is " + mDependencyMet);
+ ", current state is " + mDependencyMet.get());
}
- mDependencyMet = met;
+ mDependencyMet.set(met);
}
public boolean getDependencyMet() {
- return mDependencyMet;
+ return mDependencyMet.get();
}
protected void log(String s) {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index b5dadf60c5f1..71535624f3f0 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -197,6 +197,14 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
destroyDataConnections();
}
+ public boolean isApnTypeActive(String type) {
+ ApnContext apnContext = mApnContexts.get(type);
+ if (apnContext == null) return false;
+
+ return (apnContext.getDataConnection() != null);
+ }
+
+
/**
* The only circumstances under which we report that data connectivity is not
* possible are