Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +29 −27 Original line number Diff line number Diff line Loading @@ -343,13 +343,14 @@ public class IccSmsInterfaceManager { * This method checks if the calling package or itself has the permission to send the data sms. */ public void sendDataWithSelfPermissions(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { if (!mSmsPermissions.checkCallingOrSelfCanSendSms(callingPackage, "Sending SMS message")) { returnUnspecifiedFailure(sentIntent); return; } sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); deliveryIntent, isForVvm); } /** Loading @@ -364,7 +365,7 @@ public class IccSmsInterfaceManager { return; } sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); deliveryIntent, false /* isForVvm */); } /** Loading Loading @@ -395,15 +396,16 @@ public class IccSmsInterfaceManager { */ private void sendDataInternal(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+ HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent); log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='" + HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " isForVVM=" + isForVvm); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); sentIntent, deliveryIntent, isForVvm); } /** Loading @@ -416,7 +418,7 @@ public class IccSmsInterfaceManager { boolean persistMessageForNonDefaultSmsApp) { sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessageForNonDefaultSmsApp, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } /** Loading @@ -425,14 +427,14 @@ public class IccSmsInterfaceManager { */ public void sendTextWithSelfPermissions(String callingPackage, String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessage) { boolean persistMessage, boolean isForVvm) { if (!mSmsPermissions.checkCallingOrSelfCanSendSms(callingPackage, "Sending SMS message")) { returnUnspecifiedFailure(sentIntent); return; } sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); SMS_MESSAGE_PERIOD_NOT_SPECIFIED, isForVvm); } /** Loading Loading @@ -484,18 +486,17 @@ public class IccSmsInterfaceManager { private void sendTextInternal(String callingPackage, String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessageForNonDefaultSmsApp, int priority, boolean expectMore, int validityPeriod) { int validityPeriod, boolean isForVvm) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendText: destAddr=" + destAddr + " scAddr=" + scAddr + " text='"+ text + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " priority=" + priority + " expectMore=" + expectMore + " validityPeriod=" + validityPeriod); log("sendText: destAddr=" + destAddr + " scAddr=" + scAddr + " text='" + text + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " priority=" + priority + " expectMore=" + expectMore + " validityPeriod=" + validityPeriod + " isForVVM=" + isForVvm); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendText(destAddr, scAddr, text, sentIntent, deliveryIntent, null/*messageUri*/, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); priority, expectMore, validityPeriod, isForVvm); } /** Loading Loading @@ -553,7 +554,8 @@ public class IccSmsInterfaceManager { return; } sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod, false /* isForVvm */); } /** Loading Loading @@ -714,11 +716,10 @@ public class IccSmsInterfaceManager { singleDeliveryIntent = deliveryIntents.get(i); } mDispatchersController.sendText(destAddr, scAddr, singlePart, singleSentIntent, singleDeliveryIntent, null/*messageUri*/, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); mDispatchersController.sendText(destAddr, scAddr, singlePart, singleSentIntent, singleDeliveryIntent, null /* messageUri */, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod, false /* isForVvm */); } return; } Loading Loading @@ -1151,7 +1152,7 @@ public class IccSmsInterfaceManager { mDispatchersController.sendText(textAndAddress[1], scAddress, textAndAddress[0], sentIntent, deliveryIntent, messageUri, callingPkg, true /* persistMessageForNonDefaultSmsApp */, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } @UnsupportedAppUsage Loading Loading @@ -1208,7 +1209,8 @@ public class IccSmsInterfaceManager { singleSentIntent, singleDeliveryIntent, messageUri, callingPkg, true /* persistMessageForNonDefaultSmsApp */, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } return; } Loading src/java/com/android/internal/telephony/PhoneFactory.java +12 −0 Original line number Diff line number Diff line Loading @@ -460,6 +460,18 @@ public class PhoneFactory { sSubInfoRecordUpdater.requestEmbeddedSubscriptionInfoListRefresh(cardId, callback); } /** * Get a the SmsController. */ public static SmsController getSmsController() { synchronized (sLockProxyPhones) { if (!sMadeDefaults) { throw new IllegalStateException("Default phones haven't been made yet!"); } return sProxyController.getSmsController(); } } /** * Adds a local log category. * Loading src/java/com/android/internal/telephony/ProxyController.java +8 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,14 @@ public class ProxyController { return doSetRadioCapabilities(rafs); } /** * Get the SmsController. * @return the SmsController object. */ public SmsController getSmsController() { return mSmsController; } private boolean doSetRadioCapabilities(RadioAccessFamily[] rafs) { // A new sessionId for this transaction mRadioCapabilitySessionId = mUniqueIdGenerator.getAndIncrement(); Loading src/java/com/android/internal/telephony/SMSDispatcher.java +19 −14 Original line number Diff line number Diff line Loading @@ -794,7 +794,7 @@ public abstract class SMSDispatcher extends Handler { */ @UnsupportedAppUsage protected void sendData(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { Loading @@ -802,7 +802,7 @@ public abstract class SMSDispatcher extends Handler { SmsTracker tracker = getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, null /*fullMessageText*/, false /*isText*/, true /*persistMessage*/); true /*persistMessage*/, isForVvm); if (!sendSmsByCarrierApp(true /* isDataSms */, tracker)) { sendSubmitPdu(tracker); Loading Loading @@ -861,7 +861,7 @@ public abstract class SMSDispatcher extends Handler { public void sendText(String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, Uri messageUri, String callingPkg, boolean persistMessage, int priority, boolean expectMore, int validityPeriod) { boolean expectMore, int validityPeriod, boolean isForVvm) { Rlog.d(TAG, "sendText"); SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod); Loading @@ -869,7 +869,7 @@ public abstract class SMSDispatcher extends Handler { HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu); SmsTracker tracker = getSmsTracker(callingPkg, map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, persistMessage, priority, validityPeriod); persistMessage, priority, validityPeriod, isForVvm); if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) { sendSubmitPdu(tracker); Loading Loading @@ -1105,7 +1105,7 @@ public abstract class SMSDispatcher extends Handler { return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, true /*persistMessage*/, priority, validityPeriod); true /*persistMessage*/, priority, validityPeriod, false /* isForVvm */); } else { Rlog.e(TAG, "CdmaSMSDispatcher.getNewSubmitPduTracker(): getSubmitPdu() returned " + "null"); Loading @@ -1123,7 +1123,7 @@ public abstract class SMSDispatcher extends Handler { return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, false /*persistMessage*/, priority, validityPeriod); false /*persistMessage*/, priority, validityPeriod, false /* isForVvm */); } else { Rlog.e(TAG, "GsmSMSDispatcher.getNewSubmitPduTracker(): getSubmitPdu() returned " + "null"); Loading Loading @@ -1213,7 +1213,7 @@ public abstract class SMSDispatcher extends Handler { */ boolean checkDestination(SmsTracker tracker) { if (mContext.checkCallingOrSelfPermission(SEND_SMS_NO_CONFIRMATION) == PackageManager.PERMISSION_GRANTED) { == PackageManager.PERMISSION_GRANTED || tracker.mIsForVvm) { return true; // app is pre-approved to send to short codes } else { int rule = mPremiumSmsRule.get(); Loading Loading @@ -1536,12 +1536,14 @@ public abstract class SMSDispatcher extends Handler { // User who sends the SMS. private final @UserIdInt int mUserId; private final boolean mIsForVvm; private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, int subId, boolean isText, boolean persistMessage, int userId, int priority, int validityPeriod) { int validityPeriod, boolean isForVvm) { mData = data; mSentIntent = sentIntent; mDeliveryIntent = deliveryIntent; Loading @@ -1564,6 +1566,7 @@ public abstract class SMSDispatcher extends Handler { mUserId = userId; mPriority = priority; mValidityPeriod = validityPeriod; mIsForVvm = isForVvm; } /** Loading Loading @@ -1784,7 +1787,7 @@ public abstract class SMSDispatcher extends Handler { PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { boolean persistMessage, int priority, int validityPeriod, boolean isForVvm) { // Get calling app package name via UID from Binder call PackageManager pm = mContext.getPackageManager(); Loading @@ -1803,25 +1806,27 @@ public abstract class SMSDispatcher extends Handler { return new SmsTracker(data, sentIntent, deliveryIntent, appInfo, destAddr, format, unsentPartCount, anyPartFailed, messageUri, smsHeader, expectMore, fullMessageText, getSubId(), isText, persistMessage, userId, priority, validityPeriod); validityPeriod, isForVvm); } protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, boolean isForVvm) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, isForVvm); } protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { int priority, int validityPeriod, boolean isForVvm) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod, isForVvm); } protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr, Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +24 −14 Original line number Diff line number Diff line Loading @@ -340,6 +340,7 @@ public class ServiceStateTracker extends Handler { private final LocalLog mPhoneTypeLog = new LocalLog(10); private final LocalLog mRatLog = new LocalLog(20); private final LocalLog mRadioPowerLog = new LocalLog(20); private final LocalLog mCdnrLogs = new LocalLog(64); private Pattern mOperatorNameStringPattern; Loading Loading @@ -2475,17 +2476,20 @@ public class ServiceStateTracker extends Handler { || !TextUtils.equals(data.getSpn(), mCurSpn) || !TextUtils.equals(data.getDataSpn(), mCurDataSpn) || !TextUtils.equals(data.getPlmn(), mCurPlmn)) { if (DBG) { log(String.format("updateSpnDisplay: changed sending intent, " + "showPlmn='%b' plmn='%s' showSpn='%b' spn='%s' dataSpn='%s' " + "subId='%d'", final String log = String.format("updateSpnDisplay: changed sending intent, " + "rule=%d, showPlmn='%b', plmn='%s', showSpn='%b', spn='%s', " + "dataSpn='%s', subId='%d'", getCarrierNameDisplayBitmask(mSS), data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn(), data.getDataSpn(), subId)); } subId); mCdnrLogs.log(log); if (DBG) log("updateSpnDisplay: " + log); Intent intent = new Intent(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION); intent.putExtra(TelephonyIntents.EXTRA_SHOW_SPN, data.shouldShowSpn()); intent.putExtra(TelephonyIntents.EXTRA_SPN, data.getSpn()); Loading Loading @@ -2636,6 +2640,7 @@ public class ServiceStateTracker extends Handler { showPlmn = !TextUtils.isEmpty(plmn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN); if (DBG) log("updateSpnDisplay: rawPlmn = " + plmn); } else { // Power off state, such as airplane mode, show plmn as "No service" showPlmn = true; Loading @@ -2654,6 +2659,7 @@ public class ServiceStateTracker extends Handler { showSpn = !noService && !TextUtils.isEmpty(spn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN); if (DBG) log("updateSpnDisplay: rawSpn = " + spn); if (!TextUtils.isEmpty(spn) && !TextUtils.isEmpty(wfcVoiceSpnFormat) && !TextUtils.isEmpty(wfcDataSpnFormat)) { Loading @@ -2672,7 +2678,6 @@ public class ServiceStateTracker extends Handler { showPlmn = false; } else if (!TextUtils.isEmpty(plmn) && !TextUtils.isEmpty(wfcVoiceSpnFormat)) { // Show PLMN + Wi-Fi Calling if there is no valid SPN in the above case String originalPlmn = plmn.trim(); plmn = String.format(wfcVoiceSpnFormat, originalPlmn); } else if (mSS.getVoiceRegState() == ServiceState.STATE_POWER_OFF Loading @@ -2690,12 +2695,12 @@ public class ServiceStateTracker extends Handler { // mOperatorAlpha contains the ERI text plmn = mSS.getOperatorAlpha(); if (DBG) log("updateSpnDisplay: cdma rawPlmn = " + plmn); showPlmn = plmn != null; if (!TextUtils.isEmpty(plmn) && !TextUtils.isEmpty(wfcVoiceSpnFormat)) { // In Wi-Fi Calling mode show SPN+WiFi String originalPlmn = plmn.trim(); plmn = String.format(wfcVoiceSpnFormat, originalPlmn); } else if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_OFF) { Loading Loading @@ -4951,7 +4956,12 @@ public class ServiceStateTracker extends Handler { mCdnr.dump(ipw); pw.println(" Roaming Log:"); ipw.println(" Carrier Display Name update records:"); ipw.increaseIndent(); mCdnrLogs.dump(fd, ipw, args); ipw.decreaseIndent(); ipw.println(" Roaming Log:"); ipw.increaseIndent(); mRoamingLog.dump(fd, ipw, args); ipw.decreaseIndent(); Loading Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +29 −27 Original line number Diff line number Diff line Loading @@ -343,13 +343,14 @@ public class IccSmsInterfaceManager { * This method checks if the calling package or itself has the permission to send the data sms. */ public void sendDataWithSelfPermissions(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { if (!mSmsPermissions.checkCallingOrSelfCanSendSms(callingPackage, "Sending SMS message")) { returnUnspecifiedFailure(sentIntent); return; } sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); deliveryIntent, isForVvm); } /** Loading @@ -364,7 +365,7 @@ public class IccSmsInterfaceManager { return; } sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); deliveryIntent, false /* isForVvm */); } /** Loading Loading @@ -395,15 +396,16 @@ public class IccSmsInterfaceManager { */ private void sendDataInternal(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+ HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent); log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='" + HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " isForVVM=" + isForVvm); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); sentIntent, deliveryIntent, isForVvm); } /** Loading @@ -416,7 +418,7 @@ public class IccSmsInterfaceManager { boolean persistMessageForNonDefaultSmsApp) { sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessageForNonDefaultSmsApp, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } /** Loading @@ -425,14 +427,14 @@ public class IccSmsInterfaceManager { */ public void sendTextWithSelfPermissions(String callingPackage, String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessage) { boolean persistMessage, boolean isForVvm) { if (!mSmsPermissions.checkCallingOrSelfCanSendSms(callingPackage, "Sending SMS message")) { returnUnspecifiedFailure(sentIntent); return; } sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); SMS_MESSAGE_PERIOD_NOT_SPECIFIED, isForVvm); } /** Loading Loading @@ -484,18 +486,17 @@ public class IccSmsInterfaceManager { private void sendTextInternal(String callingPackage, String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessageForNonDefaultSmsApp, int priority, boolean expectMore, int validityPeriod) { int validityPeriod, boolean isForVvm) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendText: destAddr=" + destAddr + " scAddr=" + scAddr + " text='"+ text + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " priority=" + priority + " expectMore=" + expectMore + " validityPeriod=" + validityPeriod); log("sendText: destAddr=" + destAddr + " scAddr=" + scAddr + " text='" + text + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent + " priority=" + priority + " expectMore=" + expectMore + " validityPeriod=" + validityPeriod + " isForVVM=" + isForVvm); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendText(destAddr, scAddr, text, sentIntent, deliveryIntent, null/*messageUri*/, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); priority, expectMore, validityPeriod, isForVvm); } /** Loading Loading @@ -553,7 +554,8 @@ public class IccSmsInterfaceManager { return; } sendTextInternal(callingPackage, destAddr, scAddr, text, sentIntent, deliveryIntent, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod, false /* isForVvm */); } /** Loading Loading @@ -714,11 +716,10 @@ public class IccSmsInterfaceManager { singleDeliveryIntent = deliveryIntents.get(i); } mDispatchersController.sendText(destAddr, scAddr, singlePart, singleSentIntent, singleDeliveryIntent, null/*messageUri*/, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod); mDispatchersController.sendText(destAddr, scAddr, singlePart, singleSentIntent, singleDeliveryIntent, null /* messageUri */, callingPackage, persistMessageForNonDefaultSmsApp, priority, expectMore, validityPeriod, false /* isForVvm */); } return; } Loading Loading @@ -1151,7 +1152,7 @@ public class IccSmsInterfaceManager { mDispatchersController.sendText(textAndAddress[1], scAddress, textAndAddress[0], sentIntent, deliveryIntent, messageUri, callingPkg, true /* persistMessageForNonDefaultSmsApp */, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } @UnsupportedAppUsage Loading Loading @@ -1208,7 +1209,8 @@ public class IccSmsInterfaceManager { singleSentIntent, singleDeliveryIntent, messageUri, callingPkg, true /* persistMessageForNonDefaultSmsApp */, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); false /* expectMore */, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, false /* isForVvm */); } return; } Loading
src/java/com/android/internal/telephony/PhoneFactory.java +12 −0 Original line number Diff line number Diff line Loading @@ -460,6 +460,18 @@ public class PhoneFactory { sSubInfoRecordUpdater.requestEmbeddedSubscriptionInfoListRefresh(cardId, callback); } /** * Get a the SmsController. */ public static SmsController getSmsController() { synchronized (sLockProxyPhones) { if (!sMadeDefaults) { throw new IllegalStateException("Default phones haven't been made yet!"); } return sProxyController.getSmsController(); } } /** * Adds a local log category. * Loading
src/java/com/android/internal/telephony/ProxyController.java +8 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,14 @@ public class ProxyController { return doSetRadioCapabilities(rafs); } /** * Get the SmsController. * @return the SmsController object. */ public SmsController getSmsController() { return mSmsController; } private boolean doSetRadioCapabilities(RadioAccessFamily[] rafs) { // A new sessionId for this transaction mRadioCapabilitySessionId = mUniqueIdGenerator.getAndIncrement(); Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +19 −14 Original line number Diff line number Diff line Loading @@ -794,7 +794,7 @@ public abstract class SMSDispatcher extends Handler { */ @UnsupportedAppUsage protected void sendData(String callingPackage, String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean isForVvm) { SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { Loading @@ -802,7 +802,7 @@ public abstract class SMSDispatcher extends Handler { SmsTracker tracker = getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, null /*fullMessageText*/, false /*isText*/, true /*persistMessage*/); true /*persistMessage*/, isForVvm); if (!sendSmsByCarrierApp(true /* isDataSms */, tracker)) { sendSubmitPdu(tracker); Loading Loading @@ -861,7 +861,7 @@ public abstract class SMSDispatcher extends Handler { public void sendText(String destAddr, String scAddr, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, Uri messageUri, String callingPkg, boolean persistMessage, int priority, boolean expectMore, int validityPeriod) { boolean expectMore, int validityPeriod, boolean isForVvm) { Rlog.d(TAG, "sendText"); SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod); Loading @@ -869,7 +869,7 @@ public abstract class SMSDispatcher extends Handler { HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu); SmsTracker tracker = getSmsTracker(callingPkg, map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, persistMessage, priority, validityPeriod); persistMessage, priority, validityPeriod, isForVvm); if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) { sendSubmitPdu(tracker); Loading Loading @@ -1105,7 +1105,7 @@ public abstract class SMSDispatcher extends Handler { return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, true /*persistMessage*/, priority, validityPeriod); true /*persistMessage*/, priority, validityPeriod, false /* isForVvm */); } else { Rlog.e(TAG, "CdmaSMSDispatcher.getNewSubmitPduTracker(): getSubmitPdu() returned " + "null"); Loading @@ -1123,7 +1123,7 @@ public abstract class SMSDispatcher extends Handler { return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, false /*persistMessage*/, priority, validityPeriod); false /*persistMessage*/, priority, validityPeriod, false /* isForVvm */); } else { Rlog.e(TAG, "GsmSMSDispatcher.getNewSubmitPduTracker(): getSubmitPdu() returned " + "null"); Loading Loading @@ -1213,7 +1213,7 @@ public abstract class SMSDispatcher extends Handler { */ boolean checkDestination(SmsTracker tracker) { if (mContext.checkCallingOrSelfPermission(SEND_SMS_NO_CONFIRMATION) == PackageManager.PERMISSION_GRANTED) { == PackageManager.PERMISSION_GRANTED || tracker.mIsForVvm) { return true; // app is pre-approved to send to short codes } else { int rule = mPremiumSmsRule.get(); Loading Loading @@ -1536,12 +1536,14 @@ public abstract class SMSDispatcher extends Handler { // User who sends the SMS. private final @UserIdInt int mUserId; private final boolean mIsForVvm; private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, int subId, boolean isText, boolean persistMessage, int userId, int priority, int validityPeriod) { int validityPeriod, boolean isForVvm) { mData = data; mSentIntent = sentIntent; mDeliveryIntent = deliveryIntent; Loading @@ -1564,6 +1566,7 @@ public abstract class SMSDispatcher extends Handler { mUserId = userId; mPriority = priority; mValidityPeriod = validityPeriod; mIsForVvm = isForVvm; } /** Loading Loading @@ -1784,7 +1787,7 @@ public abstract class SMSDispatcher extends Handler { PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { boolean persistMessage, int priority, int validityPeriod, boolean isForVvm) { // Get calling app package name via UID from Binder call PackageManager pm = mContext.getPackageManager(); Loading @@ -1803,25 +1806,27 @@ public abstract class SMSDispatcher extends Handler { return new SmsTracker(data, sentIntent, deliveryIntent, appInfo, destAddr, format, unsentPartCount, anyPartFailed, messageUri, smsHeader, expectMore, fullMessageText, getSubId(), isText, persistMessage, userId, priority, validityPeriod); validityPeriod, isForVvm); } protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, boolean isForVvm) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED, isForVvm); } protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { int priority, int validityPeriod, boolean isForVvm) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod, isForVvm); } protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr, Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +24 −14 Original line number Diff line number Diff line Loading @@ -340,6 +340,7 @@ public class ServiceStateTracker extends Handler { private final LocalLog mPhoneTypeLog = new LocalLog(10); private final LocalLog mRatLog = new LocalLog(20); private final LocalLog mRadioPowerLog = new LocalLog(20); private final LocalLog mCdnrLogs = new LocalLog(64); private Pattern mOperatorNameStringPattern; Loading Loading @@ -2475,17 +2476,20 @@ public class ServiceStateTracker extends Handler { || !TextUtils.equals(data.getSpn(), mCurSpn) || !TextUtils.equals(data.getDataSpn(), mCurDataSpn) || !TextUtils.equals(data.getPlmn(), mCurPlmn)) { if (DBG) { log(String.format("updateSpnDisplay: changed sending intent, " + "showPlmn='%b' plmn='%s' showSpn='%b' spn='%s' dataSpn='%s' " + "subId='%d'", final String log = String.format("updateSpnDisplay: changed sending intent, " + "rule=%d, showPlmn='%b', plmn='%s', showSpn='%b', spn='%s', " + "dataSpn='%s', subId='%d'", getCarrierNameDisplayBitmask(mSS), data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn(), data.getDataSpn(), subId)); } subId); mCdnrLogs.log(log); if (DBG) log("updateSpnDisplay: " + log); Intent intent = new Intent(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION); intent.putExtra(TelephonyIntents.EXTRA_SHOW_SPN, data.shouldShowSpn()); intent.putExtra(TelephonyIntents.EXTRA_SPN, data.getSpn()); Loading Loading @@ -2636,6 +2640,7 @@ public class ServiceStateTracker extends Handler { showPlmn = !TextUtils.isEmpty(plmn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN); if (DBG) log("updateSpnDisplay: rawPlmn = " + plmn); } else { // Power off state, such as airplane mode, show plmn as "No service" showPlmn = true; Loading @@ -2654,6 +2659,7 @@ public class ServiceStateTracker extends Handler { showSpn = !noService && !TextUtils.isEmpty(spn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN); if (DBG) log("updateSpnDisplay: rawSpn = " + spn); if (!TextUtils.isEmpty(spn) && !TextUtils.isEmpty(wfcVoiceSpnFormat) && !TextUtils.isEmpty(wfcDataSpnFormat)) { Loading @@ -2672,7 +2678,6 @@ public class ServiceStateTracker extends Handler { showPlmn = false; } else if (!TextUtils.isEmpty(plmn) && !TextUtils.isEmpty(wfcVoiceSpnFormat)) { // Show PLMN + Wi-Fi Calling if there is no valid SPN in the above case String originalPlmn = plmn.trim(); plmn = String.format(wfcVoiceSpnFormat, originalPlmn); } else if (mSS.getVoiceRegState() == ServiceState.STATE_POWER_OFF Loading @@ -2690,12 +2695,12 @@ public class ServiceStateTracker extends Handler { // mOperatorAlpha contains the ERI text plmn = mSS.getOperatorAlpha(); if (DBG) log("updateSpnDisplay: cdma rawPlmn = " + plmn); showPlmn = plmn != null; if (!TextUtils.isEmpty(plmn) && !TextUtils.isEmpty(wfcVoiceSpnFormat)) { // In Wi-Fi Calling mode show SPN+WiFi String originalPlmn = plmn.trim(); plmn = String.format(wfcVoiceSpnFormat, originalPlmn); } else if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_OFF) { Loading Loading @@ -4951,7 +4956,12 @@ public class ServiceStateTracker extends Handler { mCdnr.dump(ipw); pw.println(" Roaming Log:"); ipw.println(" Carrier Display Name update records:"); ipw.increaseIndent(); mCdnrLogs.dump(fd, ipw, args); ipw.decreaseIndent(); ipw.println(" Roaming Log:"); ipw.increaseIndent(); mRoamingLog.dump(fd, ipw, args); ipw.decreaseIndent(); Loading