Loading telephony/java/android/telephony/SmsManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -421,4 +421,6 @@ public final class SmsManager { static public final int RESULT_ERROR_NULL_PDU = 3; /** Failed because service is currently unavailable */ static public final int RESULT_ERROR_NO_SERVICE = 4; /** Failed because we reached the sending queue limit. {@hide} */ static public final int RESULT_ERROR_LIMIT_EXCEEDED = 5; } telephony/java/com/android/internal/telephony/SMSDispatcher.java +51 −10 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import static android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE; import static android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE; import static android.telephony.SmsManager.RESULT_ERROR_NULL_PDU; import static android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF; import static android.telephony.SmsManager.RESULT_ERROR_LIMIT_EXCEEDED; public abstract class SMSDispatcher extends Handler { Loading Loading @@ -105,6 +106,9 @@ public abstract class SMSDispatcher extends Handler { /** Alert is timeout */ static final protected int EVENT_ALERT_TIMEOUT = 9; /** Stop the sending */ static final protected int EVENT_STOP_SENDING = 10; protected Phone mPhone; protected Context mContext; protected ContentResolver mResolver; Loading @@ -120,6 +124,8 @@ public abstract class SMSDispatcher extends Handler { private static final int SEND_RETRY_DELAY = 2000; /** single part SMS */ private static final int SINGLE_PART_SMS = 1; /** Message sending queue limit */ private static final int MO_MSG_QUEUE_LIMIT = 5; /** * Message reference for a CONCATENATED_8_BIT_REFERENCE or Loading @@ -130,7 +136,7 @@ public abstract class SMSDispatcher extends Handler { private SmsCounter mCounter; private SmsTracker mSTracker; private ArrayList mSTrackers = new ArrayList(MO_MSG_QUEUE_LIMIT); /** Wake lock to ensure device stays awake while dispatching the SMS intent. */ private PowerManager.WakeLock mWakeLock; Loading Loading @@ -214,7 +220,6 @@ public abstract class SMSDispatcher extends Handler { mContext = phone.getContext(); mResolver = mContext.getContentResolver(); mCm = phone.mCM; mSTracker = null; createWakelock(); Loading Loading @@ -330,17 +335,41 @@ public abstract class SMSDispatcher extends Handler { case EVENT_ALERT_TIMEOUT: ((AlertDialog)(msg.obj)).dismiss(); msg.obj = null; mSTracker = null; if (mSTrackers.isEmpty() == false) { try { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(0); sTracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } } if (Config.LOGD) { Log.d(TAG, "EVENT_ALERT_TIMEOUT, message stop sending"); } break; case EVENT_SEND_CONFIRMED_SMS: if (mSTracker!=null) { if (isMultipartTracker(mSTracker)) { sendMultipartSms(mSTracker); if (mSTrackers.isEmpty() == false) { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(mSTrackers.size() - 1); if (isMultipartTracker(sTracker)) { sendMultipartSms(sTracker); } else { sendSms(mSTracker); sendSms(sTracker); } mSTracker = null; removeMessages(EVENT_ALERT_TIMEOUT, msg.obj); } break; case EVENT_STOP_SENDING: if (mSTrackers.isEmpty() == false) { // Remove the latest one. try { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(mSTrackers.size() - 1); sTracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } removeMessages(EVENT_ALERT_TIMEOUT, msg.obj); } break; } Loading Loading @@ -693,6 +722,15 @@ public abstract class SMSDispatcher extends Handler { * An SmsTracker for the current message. */ protected void handleReachSentLimit(SmsTracker tracker) { if (mSTrackers.size() >= MO_MSG_QUEUE_LIMIT) { // Deny the sending when the queue limit is reached. try { tracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } return; } Resources r = Resources.getSystem(); Loading @@ -702,13 +740,13 @@ public abstract class SMSDispatcher extends Handler { .setTitle(r.getString(R.string.sms_control_title)) .setMessage(appName + " " + r.getString(R.string.sms_control_message)) .setPositiveButton(r.getString(R.string.sms_control_yes), mListener) .setNegativeButton(r.getString(R.string.sms_control_no), null) .setNegativeButton(r.getString(R.string.sms_control_no), mListener) .create(); d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); d.show(); mSTracker = tracker; mSTrackers.add(tracker); sendMessageDelayed ( obtainMessage(EVENT_ALERT_TIMEOUT, d), DEFAULT_SMS_TIMOUEOUT); } Loading Loading @@ -819,6 +857,9 @@ public abstract class SMSDispatcher extends Handler { if (which == DialogInterface.BUTTON_POSITIVE) { Log.d(TAG, "click YES to send out sms"); sendMessage(obtainMessage(EVENT_SEND_CONFIRMED_SMS)); } else if (which == DialogInterface.BUTTON_NEGATIVE) { Log.d(TAG, "click NO to stop sending"); sendMessage(obtainMessage(EVENT_STOP_SENDING)); } } }; Loading Loading
telephony/java/android/telephony/SmsManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -421,4 +421,6 @@ public final class SmsManager { static public final int RESULT_ERROR_NULL_PDU = 3; /** Failed because service is currently unavailable */ static public final int RESULT_ERROR_NO_SERVICE = 4; /** Failed because we reached the sending queue limit. {@hide} */ static public final int RESULT_ERROR_LIMIT_EXCEEDED = 5; }
telephony/java/com/android/internal/telephony/SMSDispatcher.java +51 −10 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import static android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE; import static android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE; import static android.telephony.SmsManager.RESULT_ERROR_NULL_PDU; import static android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF; import static android.telephony.SmsManager.RESULT_ERROR_LIMIT_EXCEEDED; public abstract class SMSDispatcher extends Handler { Loading Loading @@ -105,6 +106,9 @@ public abstract class SMSDispatcher extends Handler { /** Alert is timeout */ static final protected int EVENT_ALERT_TIMEOUT = 9; /** Stop the sending */ static final protected int EVENT_STOP_SENDING = 10; protected Phone mPhone; protected Context mContext; protected ContentResolver mResolver; Loading @@ -120,6 +124,8 @@ public abstract class SMSDispatcher extends Handler { private static final int SEND_RETRY_DELAY = 2000; /** single part SMS */ private static final int SINGLE_PART_SMS = 1; /** Message sending queue limit */ private static final int MO_MSG_QUEUE_LIMIT = 5; /** * Message reference for a CONCATENATED_8_BIT_REFERENCE or Loading @@ -130,7 +136,7 @@ public abstract class SMSDispatcher extends Handler { private SmsCounter mCounter; private SmsTracker mSTracker; private ArrayList mSTrackers = new ArrayList(MO_MSG_QUEUE_LIMIT); /** Wake lock to ensure device stays awake while dispatching the SMS intent. */ private PowerManager.WakeLock mWakeLock; Loading Loading @@ -214,7 +220,6 @@ public abstract class SMSDispatcher extends Handler { mContext = phone.getContext(); mResolver = mContext.getContentResolver(); mCm = phone.mCM; mSTracker = null; createWakelock(); Loading Loading @@ -330,17 +335,41 @@ public abstract class SMSDispatcher extends Handler { case EVENT_ALERT_TIMEOUT: ((AlertDialog)(msg.obj)).dismiss(); msg.obj = null; mSTracker = null; if (mSTrackers.isEmpty() == false) { try { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(0); sTracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } } if (Config.LOGD) { Log.d(TAG, "EVENT_ALERT_TIMEOUT, message stop sending"); } break; case EVENT_SEND_CONFIRMED_SMS: if (mSTracker!=null) { if (isMultipartTracker(mSTracker)) { sendMultipartSms(mSTracker); if (mSTrackers.isEmpty() == false) { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(mSTrackers.size() - 1); if (isMultipartTracker(sTracker)) { sendMultipartSms(sTracker); } else { sendSms(mSTracker); sendSms(sTracker); } mSTracker = null; removeMessages(EVENT_ALERT_TIMEOUT, msg.obj); } break; case EVENT_STOP_SENDING: if (mSTrackers.isEmpty() == false) { // Remove the latest one. try { SmsTracker sTracker = (SmsTracker)mSTrackers.remove(mSTrackers.size() - 1); sTracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } removeMessages(EVENT_ALERT_TIMEOUT, msg.obj); } break; } Loading Loading @@ -693,6 +722,15 @@ public abstract class SMSDispatcher extends Handler { * An SmsTracker for the current message. */ protected void handleReachSentLimit(SmsTracker tracker) { if (mSTrackers.size() >= MO_MSG_QUEUE_LIMIT) { // Deny the sending when the queue limit is reached. try { tracker.mSentIntent.send(RESULT_ERROR_LIMIT_EXCEEDED); } catch (CanceledException ex) { Log.e(TAG, "failed to send back RESULT_ERROR_LIMIT_EXCEEDED"); } return; } Resources r = Resources.getSystem(); Loading @@ -702,13 +740,13 @@ public abstract class SMSDispatcher extends Handler { .setTitle(r.getString(R.string.sms_control_title)) .setMessage(appName + " " + r.getString(R.string.sms_control_message)) .setPositiveButton(r.getString(R.string.sms_control_yes), mListener) .setNegativeButton(r.getString(R.string.sms_control_no), null) .setNegativeButton(r.getString(R.string.sms_control_no), mListener) .create(); d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); d.show(); mSTracker = tracker; mSTrackers.add(tracker); sendMessageDelayed ( obtainMessage(EVENT_ALERT_TIMEOUT, d), DEFAULT_SMS_TIMOUEOUT); } Loading Loading @@ -819,6 +857,9 @@ public abstract class SMSDispatcher extends Handler { if (which == DialogInterface.BUTTON_POSITIVE) { Log.d(TAG, "click YES to send out sms"); sendMessage(obtainMessage(EVENT_SEND_CONFIRMED_SMS)); } else if (which == DialogInterface.BUTTON_NEGATIVE) { Log.d(TAG, "click NO to stop sending"); sendMessage(obtainMessage(EVENT_STOP_SENDING)); } } }; Loading