aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/java/com/android/internal/telephony/CellBroadcastHandler.java8
-rw-r--r--src/java/com/android/internal/telephony/ImsSMSDispatcher.java2
-rw-r--r--src/java/com/android/internal/telephony/InboundSmsHandler.java58
-rw-r--r--src/java/com/android/internal/telephony/WakeLockStateMachine.java39
-rw-r--r--src/java/com/android/internal/telephony/cdma/CdmaInboundSmsHandler.java20
-rw-r--r--src/java/com/android/internal/telephony/cdma/CdmaMmiCode.java6
-rw-r--r--src/java/com/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler.java5
-rw-r--r--src/java/com/android/internal/telephony/cdma/SmsMessage.java2
-rw-r--r--src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java5
-rw-r--r--src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java28
-rw-r--r--src/java/com/android/internal/telephony/gsm/GsmMmiCode.java7
11 files changed, 134 insertions, 46 deletions
diff --git a/src/java/com/android/internal/telephony/CellBroadcastHandler.java b/src/java/com/android/internal/telephony/CellBroadcastHandler.java
index 678f3e06a8..f7e0e3ae65 100644
--- a/src/java/com/android/internal/telephony/CellBroadcastHandler.java
+++ b/src/java/com/android/internal/telephony/CellBroadcastHandler.java
@@ -30,15 +30,13 @@ import android.telephony.SmsCbMessage;
* completes and our result receiver is called.
*/
public class CellBroadcastHandler extends WakeLockStateMachine {
- private final Context mContext;
private CellBroadcastHandler(Context context) {
- this("CellBroadcastHandler", context);
+ this("CellBroadcastHandler", context, null);
}
- protected CellBroadcastHandler(String debugTag, Context context) {
- super(debugTag, context);
- mContext = context;
+ protected CellBroadcastHandler(String debugTag, Context context, PhoneBase phone) {
+ super(debugTag, context, phone);
}
/**
diff --git a/src/java/com/android/internal/telephony/ImsSMSDispatcher.java b/src/java/com/android/internal/telephony/ImsSMSDispatcher.java
index 28919a08b1..d49b974647 100644
--- a/src/java/com/android/internal/telephony/ImsSMSDispatcher.java
+++ b/src/java/com/android/internal/telephony/ImsSMSDispatcher.java
@@ -79,6 +79,8 @@ public final class ImsSMSDispatcher extends SMSDispatcher {
super.updatePhoneObject(phone);
mCdmaDispatcher.updatePhoneObject(phone);
mGsmDispatcher.updatePhoneObject(phone);
+ mGsmInboundSmsHandler.updatePhoneObject(phone);
+ mCdmaInboundSmsHandler.updatePhoneObject(phone);
}
public void dispose() {
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index 4288fcc3c8..95a650f3aa 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -114,6 +114,9 @@ public abstract class InboundSmsHandler extends StateMachine {
/** Sent by {@link SmsBroadcastUndelivered} after cleaning the raw table. */
static final int EVENT_START_ACCEPTING_SMS = 6;
+ /** Update phone object */
+ static final int EVENT_UPDATE_PHONE_OBJECT = 7;
+
/** Wakelock release delay when returning to idle state. */
private static final int WAKELOCK_TIMEOUT = 3000;
@@ -145,21 +148,29 @@ public abstract class InboundSmsHandler extends StateMachine {
final WaitingState mWaitingState = new WaitingState();
/** Helper class to check whether storage is available for incoming messages. */
- protected final SmsStorageMonitor mStorageMonitor;
+ protected SmsStorageMonitor mStorageMonitor;
private final boolean mSmsReceiveDisabled;
+ protected PhoneBase mPhone;
+
+ protected CellBroadcastHandler mCellBroadcastHandler;
+
+
/**
* Create a new SMS broadcast helper.
* @param name the class name for logging
* @param context the context of the phone app
* @param storageMonitor the SmsStorageMonitor to check for storage availability
*/
- protected InboundSmsHandler(String name, Context context, SmsStorageMonitor storageMonitor) {
+ protected InboundSmsHandler(String name, Context context, SmsStorageMonitor storageMonitor,
+ PhoneBase phone, CellBroadcastHandler cellBroadcastHandler) {
super(name);
mContext = context;
mStorageMonitor = storageMonitor;
+ mPhone = phone;
+ mCellBroadcastHandler = cellBroadcastHandler;
mResolver = context.getContentResolver();
mWapPush = new WapPushOverSms(context);
@@ -190,6 +201,13 @@ public abstract class InboundSmsHandler extends StateMachine {
}
/**
+ * Update the phone object when it changes.
+ */
+ public void updatePhoneObject(PhoneBase phone) {
+ sendMessage(EVENT_UPDATE_PHONE_OBJECT, phone);
+ }
+
+ /**
* Dispose of the WAP push object and release the wakelock.
*/
@Override
@@ -208,13 +226,22 @@ public abstract class InboundSmsHandler extends StateMachine {
class DefaultState extends State {
@Override
public boolean processMessage(Message msg) {
- String errorText = "processMessage: unhandled message type " + msg.what;
- if (Build.IS_DEBUGGABLE) {
- throw new RuntimeException(errorText);
- } else {
- loge(errorText);
- return HANDLED;
- }
+ switch (msg.what) {
+ case EVENT_UPDATE_PHONE_OBJECT: {
+ onUpdatePhoneObject((PhoneBase) msg.obj);
+ break;
+ }
+ default: {
+ String errorText = "processMessage: unhandled message type " + msg.what;
+ if (Build.IS_DEBUGGABLE) {
+ throw new RuntimeException(errorText);
+ } else {
+ loge(errorText);
+ }
+ break;
+ }
+ }
+ return HANDLED;
}
}
@@ -455,6 +482,19 @@ public abstract class InboundSmsHandler extends StateMachine {
int result, Message response);
/**
+ * Called when the phone changes the default method updates mPhone
+ * mStorageMonitor and mCellBroadcastHandler.updatePhoneObject.
+ * Override if different or other behavior is desired.
+ *
+ * @param phone
+ */
+ protected void onUpdatePhoneObject(PhoneBase phone) {
+ mPhone = phone;
+ mStorageMonitor = mPhone.mSmsStorageMonitor;
+ log("onUpdatePhoneObject: phone=" + mPhone.getClass().getSimpleName());
+ }
+
+ /**
* Notify interested apps if the framework has rejected an incoming SMS,
* and send an acknowledge message to the network.
* @param success indicates that last message was successfully received.
diff --git a/src/java/com/android/internal/telephony/WakeLockStateMachine.java b/src/java/com/android/internal/telephony/WakeLockStateMachine.java
index ef1b68e66f..404b0cc4b0 100644
--- a/src/java/com/android/internal/telephony/WakeLockStateMachine.java
+++ b/src/java/com/android/internal/telephony/WakeLockStateMachine.java
@@ -48,6 +48,12 @@ public abstract class WakeLockStateMachine extends StateMachine {
/** Release wakelock after a short timeout when returning to idle state. */
static final int EVENT_RELEASE_WAKE_LOCK = 3;
+ static final int EVENT_UPDATE_PHONE_OBJECT = 4;
+
+ protected PhoneBase mPhone;
+
+ protected Context mContext;
+
/** Wakelock release delay when returning to idle state. */
private static final int WAKE_LOCK_TIMEOUT = 3000;
@@ -55,9 +61,12 @@ public abstract class WakeLockStateMachine extends StateMachine {
private final IdleState mIdleState = new IdleState();
private final WaitingState mWaitingState = new WaitingState();
- protected WakeLockStateMachine(String debugTag, Context context) {
+ protected WakeLockStateMachine(String debugTag, Context context, PhoneBase phone) {
super(debugTag);
+ mContext = context;
+ mPhone = phone;
+
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, debugTag);
mWakeLock.acquire(); // wake lock released after we enter idle state
@@ -68,6 +77,10 @@ public abstract class WakeLockStateMachine extends StateMachine {
setInitialState(mIdleState);
}
+ public void updatePhoneObject(PhoneBase phone) {
+ sendMessage(EVENT_UPDATE_PHONE_OBJECT, phone);
+ }
+
/**
* Tell the state machine to quit after processing all messages.
*/
@@ -98,13 +111,23 @@ public abstract class WakeLockStateMachine extends StateMachine {
class DefaultState extends State {
@Override
public boolean processMessage(Message msg) {
- String errorText = "processMessage: unhandled message type " + msg.what;
- if (Build.IS_DEBUGGABLE) {
- throw new RuntimeException(errorText);
- } else {
- loge(errorText);
- return HANDLED;
- }
+ switch (msg.what) {
+ case EVENT_UPDATE_PHONE_OBJECT: {
+ mPhone = (PhoneBase) msg.obj;
+ log("updatePhoneObject: phone=" + mPhone.getClass().getSimpleName());
+ break;
+ }
+ default: {
+ String errorText = "processMessage: unhandled message type " + msg.what;
+ if (Build.IS_DEBUGGABLE) {
+ throw new RuntimeException(errorText);
+ } else {
+ loge(errorText);
+ }
+ break;
+ }
+ }
+ return HANDLED;
}
}
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaInboundSmsHandler.java b/src/java/com/android/internal/telephony/cdma/CdmaInboundSmsHandler.java
index 99e790fbbf..9352639a36 100644
--- a/src/java/com/android/internal/telephony/cdma/CdmaInboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaInboundSmsHandler.java
@@ -45,9 +45,7 @@ import java.util.Arrays;
*/
public class CdmaInboundSmsHandler extends InboundSmsHandler {
- private final PhoneBase mPhone;
private final CdmaSMSDispatcher mSmsDispatcher;
- private final CellBroadcastHandler mCellBroadcastHandler;
private final CdmaServiceCategoryProgramHandler mServiceCategoryProgramHandler;
private byte[] mLastDispatchedSmsFingerprint;
@@ -61,12 +59,11 @@ public class CdmaInboundSmsHandler extends InboundSmsHandler {
*/
private CdmaInboundSmsHandler(Context context, SmsStorageMonitor storageMonitor,
PhoneBase phone, CdmaSMSDispatcher smsDispatcher) {
- super("CdmaInboundSmsHandler", context, storageMonitor);
+ super("CdmaInboundSmsHandler", context, storageMonitor, phone,
+ CellBroadcastHandler.makeCellBroadcastHandler(context));
mSmsDispatcher = smsDispatcher;
- mCellBroadcastHandler = CellBroadcastHandler.makeCellBroadcastHandler(context);
mServiceCategoryProgramHandler = CdmaServiceCategoryProgramHandler.makeScpHandler(context,
phone.mCi);
- mPhone = phone;
phone.mCi.setOnNewCdmaSms(getHandler(), EVENT_NEW_SMS, null);
}
@@ -214,6 +211,19 @@ public class CdmaInboundSmsHandler extends InboundSmsHandler {
}
/**
+ * Called when the phone changes the default method updates mPhone
+ * mStorageMonitor and mCellBroadcastHandler.updatePhoneObject.
+ * Override if different or other behavior is desired.
+ *
+ * @param phone
+ */
+ @Override
+ protected void onUpdatePhoneObject(PhoneBase phone) {
+ super.onUpdatePhoneObject(phone);
+ mCellBroadcastHandler.updatePhoneObject(phone);
+ }
+
+ /**
* Convert Android result code to CDMA SMS failure cause.
* @param rc the Android SMS intent result value
* @return 0 for success, or a CDMA SMS failure cause value
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaMmiCode.java b/src/java/com/android/internal/telephony/cdma/CdmaMmiCode.java
index 07c137b503..3cb8bc7bff 100644
--- a/src/java/com/android/internal/telephony/cdma/CdmaMmiCode.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaMmiCode.java
@@ -315,7 +315,11 @@ public final class CdmaMmiCode extends Handler implements MmiCode {
}
// Get the No. of retries remaining to unlock PUK/PUK2
int attemptsRemaining = msg.arg1;
- if (attemptsRemaining >= 0) {
+ if (attemptsRemaining <= 0) {
+ Rlog.d(LOG_TAG, "onSetComplete: PUK locked,"
+ + " cancel as lock screen will handle this");
+ mState = State.CANCELLED;
+ } else if (attemptsRemaining > 0) {
Rlog.d(LOG_TAG, "onSetComplete: attemptsRemaining="+attemptsRemaining);
sb.append(mContext.getResources().getQuantityString(
com.android.internal.R.plurals.pinpuk_attempts,
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler.java b/src/java/com/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler.java
index f11c681a85..bb9f9d5e70 100644
--- a/src/java/com/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler.java
@@ -45,14 +45,13 @@ import java.util.ArrayList;
*/
public final class CdmaServiceCategoryProgramHandler extends WakeLockStateMachine {
- private final Context mContext;
final CommandsInterface mCi;
/**
* Create a new CDMA inbound SMS handler.
*/
CdmaServiceCategoryProgramHandler(Context context, CommandsInterface commandsInterface) {
- super("CdmaServiceCategoryProgramHandler", context);
+ super("CdmaServiceCategoryProgramHandler", context, null);
mContext = context;
mCi = commandsInterface;
}
@@ -159,7 +158,7 @@ public final class CdmaServiceCategoryProgramHandler extends WakeLockStateMachin
dos.writeInt(0); //servicePresent
dos.writeInt(0); //serviceCategory
CdmaSmsAddress destAddr = CdmaSmsAddress.parse(
- PhoneNumberUtils.cdmaCheckAndProcessPlusCode(sender));
+ PhoneNumberUtils.cdmaCheckAndProcessPlusCodeForSms(sender));
dos.write(destAddr.digitMode);
dos.write(destAddr.numberMode);
dos.write(destAddr.ton); // number_type
diff --git a/src/java/com/android/internal/telephony/cdma/SmsMessage.java b/src/java/com/android/internal/telephony/cdma/SmsMessage.java
index e36ac453dd..6f202c1b91 100644
--- a/src/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/src/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -851,7 +851,7 @@ public class SmsMessage extends SmsMessageBase {
* Convert + code to 011 and dial out for international SMS
*/
CdmaSmsAddress destAddr = CdmaSmsAddress.parse(
- PhoneNumberUtils.cdmaCheckAndProcessPlusCode(destAddrStr));
+ PhoneNumberUtils.cdmaCheckAndProcessPlusCodeForSms(destAddrStr));
if (destAddr == null) return null;
BearerData bearerData = new BearerData();
diff --git a/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java b/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java
index de984584b3..6671a58883 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java
@@ -42,11 +42,8 @@ public class GsmCellBroadcastHandler extends CellBroadcastHandler {
private final HashMap<SmsCbConcatInfo, byte[][]> mSmsCbPageMap =
new HashMap<SmsCbConcatInfo, byte[][]>(4);
- private final PhoneBase mPhone;
-
protected GsmCellBroadcastHandler(Context context, PhoneBase phone) {
- super("GsmCellBroadcastHandler", context);
- mPhone = phone;
+ super("GsmCellBroadcastHandler", context, phone);
phone.mCi.setOnNewGsmBroadcastSms(getHandler(), EVENT_NEW_SMS_MESSAGE, null);
}
diff --git a/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java b/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
index 2c63bf0ee6..7e48cc2c90 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
@@ -38,20 +38,14 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
/** Handler for SMS-PP data download messages to UICC. */
private final UsimDataDownloadHandler mDataDownloadHandler;
- private final GsmCellBroadcastHandler mCellBroadcastDispatcher;
-
- private final PhoneBase mPhone;
-
/**
* Create a new GSM inbound SMS handler.
*/
private GsmInboundSmsHandler(Context context, SmsStorageMonitor storageMonitor,
PhoneBase phone) {
- super("GsmInboundSmsHandler", context, storageMonitor);
- mPhone = phone;
+ super("GsmInboundSmsHandler", context, storageMonitor, phone,
+ GsmCellBroadcastHandler.makeGsmCellBroadcastHandler(context, phone));
phone.mCi.setOnNewGsmSms(getHandler(), EVENT_NEW_SMS, null);
- mCellBroadcastDispatcher = GsmCellBroadcastHandler.makeGsmCellBroadcastHandler(context,
- phone);
mDataDownloadHandler = new UsimDataDownloadHandler(phone.mCi);
}
@@ -61,7 +55,7 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
@Override
protected void onQuitting() {
mPhone.mCi.unSetOnNewGsmSms(getHandler());
- mCellBroadcastDispatcher.dispose();
+ mCellBroadcastHandler.dispose();
if (DBG) log("unregistered for 3GPP SMS");
super.onQuitting(); // release wakelock
@@ -147,6 +141,22 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
}
/**
+ * Called when the phone changes the default method updates mPhone
+ * mStorageMonitor and mCellBroadcastHandler.updatePhoneObject.
+ * Override if different or other behavior is desired.
+ *
+ * @param phone
+ */
+ @Override
+ protected void onUpdatePhoneObject(PhoneBase phone) {
+ super.onUpdatePhoneObject(phone);
+ log("onUpdatePhoneObject: dispose of old CellBroadcastHandler and make a new one");
+ mCellBroadcastHandler.dispose();
+ mCellBroadcastHandler = GsmCellBroadcastHandler
+ .makeGsmCellBroadcastHandler(mContext, phone);
+ }
+
+ /**
* Convert Android result code to 3GPP SMS failure cause.
* @param rc the Android SMS intent result value
* @return 0 for success, or a 3GPP SMS failure cause value
diff --git a/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
index 1dd958fed1..c2bafbe442 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
@@ -1030,7 +1030,12 @@ public final class GsmMmiCode extends Handler implements MmiCode {
}
// Get the No. of retries remaining to unlock PUK/PUK2
int attemptsRemaining = msg.arg1;
- if (attemptsRemaining >= 0) {
+ if (attemptsRemaining <= 0) {
+ Rlog.d(LOG_TAG, "onSetComplete: PUK locked,"
+ + " cancel as lock screen will handle this");
+ mState = State.CANCELLED;
+ } else if (attemptsRemaining > 0) {
+ Rlog.d(LOG_TAG, "onSetComplete: attemptsRemaining="+attemptsRemaining);
sb.append(mContext.getResources().getQuantityString(
com.android.internal.R.plurals.pinpuk_attempts,
attemptsRemaining, attemptsRemaining));