summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2010-10-28 14:22:26 -0700
committerWink Saville <wink@google.com>2010-11-01 11:46:57 -0700
commitfd2d01302781af91d77557a99874111a4fee8365 (patch)
tree89b38e3aff99a443627ac53268d009dec9ea07eb /telephony
parent6b21cdeb5f0127862d82f24a4b6001f495e3c8cd (diff)
downloadframeworks_base-fd2d01302781af91d77557a99874111a4fee8365.zip
frameworks_base-fd2d01302781af91d77557a99874111a4fee8365.tar.gz
frameworks_base-fd2d01302781af91d77557a99874111a4fee8365.tar.bz2
Add PhoneStateListener.onOtaspChanged.
Bug: 3102320 Change-Id: I46e8d33a4ed80e5e074e92135653d57598d4c865
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/android/telephony/PhoneStateListener.java31
-rw-r--r--telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java8
-rw-r--r--telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl1
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl1
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneBase.java4
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneNotifier.java1
-rw-r--r--telephony/java/com/android/internal/telephony/ServiceStateTracker.java8
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CDMAPhone.java19
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java18
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java50
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java12
-rw-r--r--telephony/tests/telephonytests/src/com/android/internal/telephony/TestPhoneNotifier.java3
12 files changed, 134 insertions, 22 deletions
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index 38f44d8..eda9b71 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -148,6 +148,14 @@ public class PhoneStateListener {
*/
public static final int LISTEN_SIGNAL_STRENGTHS = 0x00000100;
+ /**
+ * Listen for changes to OTASP mode.
+ *
+ * @see #onOtaspChanged
+ * @hide
+ */
+ public static final int LISTEN_OTASP_CHANGED = 0x00000200;
+
public PhoneStateListener() {
}
@@ -252,6 +260,21 @@ public class PhoneStateListener {
// default implementation empty
}
+
+ /**
+ * The Over The Air Service Provisioning (OTASP) has changed. Requires
+ * the READ_PHONE_STATE permission.
+ * @param otaspMode is integer <code>OTASP_UNKNOWN=1<code>
+ * means the value is currently unknown and the system should wait until
+ * <code>OTASP_NEEDED=2<code> or <code>OTASP_NOT_NEEDED=3<code> is received before
+ * making the decisision to perform OTASP or not.
+ *
+ * @hide
+ */
+ public void onOtaspChanged(int otaspMode) {
+ // default implementation empty
+ }
+
/**
* The callback methods need to be called on the handler thread where
* this object was created. If the binder did that for us it'd be nice.
@@ -292,9 +315,14 @@ public class PhoneStateListener {
public void onDataActivity(int direction) {
Message.obtain(mHandler, LISTEN_DATA_ACTIVITY, direction, 0, null).sendToTarget();
}
+
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
Message.obtain(mHandler, LISTEN_SIGNAL_STRENGTHS, 0, 0, signalStrength).sendToTarget();
}
+
+ public void onOtaspChanged(int otaspMode) {
+ Message.obtain(mHandler, LISTEN_OTASP_CHANGED, otaspMode, 0).sendToTarget();
+ }
};
Handler mHandler = new Handler() {
@@ -329,6 +357,9 @@ public class PhoneStateListener {
case LISTEN_SIGNAL_STRENGTHS:
PhoneStateListener.this.onSignalStrengthsChanged((SignalStrength)msg.obj);
break;
+ case LISTEN_OTASP_CHANGED:
+ PhoneStateListener.this.onOtaspChanged(msg.arg1);
+ break;
}
}
};
diff --git a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
index 6a163dd..14808b6 100644
--- a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
+++ b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
@@ -148,6 +148,14 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
}
}
+ public void notifyOtaspChanged(Phone sender, int otaspMode) {
+ try {
+ mRegistry.notifyOtaspChanged(otaspMode);
+ } catch (RemoteException ex) {
+ // system process is dead
+ }
+ }
+
private void log(String s) {
Log.d(LOG_TAG, "[PhoneNotifier] " + s);
}
diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
index 856d663..082c097 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -32,5 +32,6 @@ oneway interface IPhoneStateListener {
void onDataConnectionStateChanged(int state, int networkType);
void onDataActivity(int direction);
void onSignalStrengthsChanged(in SignalStrength signalStrength);
+ void onOtaspChanged(in int otaspMode);
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 6407a4e..3c83e50 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -38,4 +38,5 @@ interface ITelephonyRegistry {
in LinkCapabilities linkCapabilities, int networkType);
void notifyDataConnectionFailed(String reason, String apnType);
void notifyCellLocation(in Bundle cellLocation);
+ void notifyOtaspChanged(in int otaspMode);
}
diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java
index 74e8c1b..554a7ba 100644
--- a/telephony/java/com/android/internal/telephony/PhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/PhoneBase.java
@@ -750,6 +750,10 @@ public abstract class PhoneBase extends Handler implements Phone {
mNotifier.notifyDataConnection(this, reason, apnType);
}
+ public void notifyOtaspChanged(int otaspMode) {
+ mNotifier.notifyOtaspChanged(this, otaspMode);
+ }
+
public abstract String getPhoneName();
public abstract int getPhoneType();
diff --git a/telephony/java/com/android/internal/telephony/PhoneNotifier.java b/telephony/java/com/android/internal/telephony/PhoneNotifier.java
index 691271f..b1cf953 100644
--- a/telephony/java/com/android/internal/telephony/PhoneNotifier.java
+++ b/telephony/java/com/android/internal/telephony/PhoneNotifier.java
@@ -42,4 +42,5 @@ public interface PhoneNotifier {
public void notifyDataActivity(Phone sender);
+ public void notifyOtaspChanged(Phone sender, int otaspMode);
}
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index e8bbe5e..3f9ffc3 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -53,6 +53,12 @@ public abstract class ServiceStateTracker extends Handler {
public SignalStrength mSignalStrength;
+ /* The otaspMode passed to PhoneStateListener#onOtaspChanged */
+ static public final int OTASP_UNINITIALIZED = 0;
+ static public final int OTASP_UNKNOWN = 1;
+ static public final int OTASP_NEEDED = 2;
+ static public final int OTASP_NOT_NEEDED = 3;
+
/**
* A unique identifier to track requests associated with a poll
* and ignore stale responses. The value is a count-down of
@@ -268,9 +274,11 @@ public abstract class ServiceStateTracker extends Handler {
public abstract void handleMessage(Message msg);
+ protected abstract Phone getPhone();
protected abstract void handlePollStateResult(int what, AsyncResult ar);
protected abstract void updateSpnDisplay();
protected abstract void setPowerStateToDesired();
+ protected abstract void log(String s);
/**
* Clean up existing voice and data connection then turn off radio power.
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index 6e53ec5..b9d5673 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -61,6 +61,7 @@ import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.PhoneNotifier;
import com.android.internal.telephony.PhoneProxy;
import com.android.internal.telephony.PhoneSubInfo;
+import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.telephony.UUSInfo;
@@ -83,10 +84,6 @@ public class CDMAPhone extends PhoneBase {
static final String LOG_TAG = "CDMA";
private static final boolean DBG = true;
- // Min values used to by needsActivation
- private static final String UNACTIVATED_MIN2_VALUE = "000000";
- private static final String UNACTIVATED_MIN_VALUE = "1111110111";
-
// Default Emergency Callback Mode exit timer
private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000;
@@ -1170,19 +1167,7 @@ public class CDMAPhone extends PhoneBase {
*/
@Override
public boolean needsOtaServiceProvisioning() {
- String cdmaMin = getCdmaMin();
- boolean needsProvisioning;
- if (cdmaMin == null || (cdmaMin.length() < 6)) {
- if (DBG) Log.d(LOG_TAG, "needsOtaServiceProvisioning: illegal cdmaMin='"
- + cdmaMin + "' assume provisioning needed.");
- needsProvisioning = true;
- } else {
- needsProvisioning = (cdmaMin.equals(UNACTIVATED_MIN_VALUE)
- || cdmaMin.substring(0,6).equals(UNACTIVATED_MIN2_VALUE))
- || SystemProperties.getBoolean("test_cdma_setup", false);
- }
- if (DBG) Log.d(LOG_TAG, "needsOtaServiceProvisioning: ret=" + needsProvisioning);
- return needsProvisioning;
+ return mSST.getOtasp() != ServiceStateTracker.OTASP_NOT_NEEDED;
}
private static final String IS683A_FEATURE_CODE = "*228";
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index 3669e60..325c2e1 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -354,6 +354,24 @@ public final class CdmaCallTracker extends CallTracker {
|| (foregroundCall.getState() == CdmaCall.State.ACTIVE)
|| !backgroundCall.getState().isAlive());
+ if (!ret) {
+ log(String.format("canDial is false\n" +
+ "((serviceState=%d) != ServiceState.STATE_POWER_OFF)::=%s\n" +
+ "&& pendingMO == null::=%s\n" +
+ "&& !ringingCall.isRinging()::=%s\n" +
+ "&& !disableCall.equals(\"true\")::=%s\n" +
+ "&& (!foregroundCall.getState().isAlive()::=%s\n" +
+ " || foregroundCall.getState() == CdmaCall.State.ACTIVE::=%s\n" +
+ " ||!backgroundCall.getState().isAlive())::=%s)",
+ serviceState,
+ serviceState != ServiceState.STATE_POWER_OFF,
+ pendingMO == null,
+ !ringingCall.isRinging(),
+ !disableCall.equals("true"),
+ !foregroundCall.getState().isAlive(),
+ foregroundCall.getState() == CdmaCall.State.ACTIVE,
+ !backgroundCall.getState().isAlive()));
+ }
return ret;
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 7d2013b..11e04d4 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -22,6 +22,7 @@ import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.MccTable;
+import com.android.internal.telephony.Phone;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
@@ -65,6 +66,13 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
CdmaCellLocation cellLoc;
CdmaCellLocation newCellLoc;
+ // Min values used to by getOtasp()
+ private static final String UNACTIVATED_MIN2_VALUE = "000000";
+ private static final String UNACTIVATED_MIN_VALUE = "1111110111";
+
+ // Current Otasp value
+ int mCurrentOtaspMode = OTASP_UNINITIALIZED;
+
/** if time between NITZ updates is less than mNitzUpdateSpacing the update may be ignored. */
private static final int NITZ_UPDATE_SPACING_DEFAULT = 1000 * 60 * 10;
private int mNitzUpdateSpacing = SystemProperties.getInt("ro.nitz_update_spacing",
@@ -446,6 +454,13 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
if (!mIsMinInfoReady) {
mIsMinInfoReady = true;
}
+ int otaspMode = getOtasp();
+ if (mCurrentOtaspMode != otaspMode) {
+ Log.d(LOG_TAG, "call phone.notifyOtaspChanged old otaspMode=" +
+ mCurrentOtaspMode + " new otaspMode=" + otaspMode);
+ mCurrentOtaspMode = otaspMode;
+ phone.notifyOtaspChanged(mCurrentOtaspMode);
+ }
phone.getIccCard().broadcastIccStateChangedIntent(IccCard.INTENT_VALUE_ICC_IMSI,
null);
} else {
@@ -642,6 +657,11 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
curPlmn = plmn;
}
+ @Override
+ protected Phone getPhone() {
+ return phone;
+ }
+
/**
* Handle the result of one of the pollState()-related requests
*/
@@ -1641,10 +1661,6 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
return false;
}
- protected void log(String s) {
- Log.d(LOG_TAG, "[CdmaServiceStateTracker] " + s);
- }
-
public String getMdnNumber() {
return mMdn;
}
@@ -1700,6 +1716,32 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
}
}
+ /**
+ * Returns OTASP_UNKNOWN, OTASP_NEEDED or OTASP_NOT_NEEDED
+ */
+ int getOtasp() {
+ int provisioningState;
+ if (mMin == null || (mMin.length() < 6)) {
+ if (DBG) Log.d(LOG_TAG, "getOtasp: bad mMin='" + mMin + "'");
+ provisioningState = OTASP_UNKNOWN;
+ } else {
+ if ((mMin.equals(UNACTIVATED_MIN_VALUE)
+ || mMin.substring(0,6).equals(UNACTIVATED_MIN2_VALUE))
+ || SystemProperties.getBoolean("test_cdma_setup", false)) {
+ provisioningState = OTASP_NEEDED;
+ } else {
+ provisioningState = OTASP_NOT_NEEDED;
+ }
+ }
+ if (DBG) Log.d(LOG_TAG, "getOtasp: state=" + provisioningState);
+ return provisioningState;
+ }
+
+ @Override
+ protected void log(String s) {
+ Log.d(LOG_TAG, "[CdmaServiceStateTracker] " + s);
+ }
+
private void hangupAndPowerOff() {
// hang up all active voice calls
phone.mCT.ringingCall.hangupIfAlive();
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index 6332415..bc41b01 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -22,6 +22,7 @@ import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.MccTable;
+import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyIntents;
@@ -226,6 +227,9 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
phone.getContext().registerReceiver(mIntentReceiver, filter);
+
+ // Gsm doesn't support OTASP so its not needed
+ phone.notifyOtaspChanged(OTASP_NOT_NEEDED);
}
public void dispose() {
@@ -246,6 +250,11 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
if(DBG) Log.d(LOG_TAG, "GsmServiceStateTracker finalized");
}
+ @Override
+ public Phone getPhone() {
+ return phone;
+ }
+
/**
* Registration point for transition into GPRS attached.
* @param h handler to notify
@@ -1676,7 +1685,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
}
- private void log(String s) {
+ @Override
+ protected void log(String s) {
Log.d(LOG_TAG, "[GsmServiceStateTracker] " + s);
}
}
diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/TestPhoneNotifier.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/TestPhoneNotifier.java
index 8cb05cc..7bbe696 100644
--- a/telephony/tests/telephonytests/src/com/android/internal/telephony/TestPhoneNotifier.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/TestPhoneNotifier.java
@@ -56,4 +56,7 @@ public class TestPhoneNotifier implements PhoneNotifier {
public void notifyDataActivity(Phone sender) {
}
+
+ public void notifyOtaspChanged(Phone sender, int otaspMode) {
+ }
}