Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbefff63 authored by Xiangyu/Malcolm Chen's avatar Xiangyu/Malcolm Chen Committed by Android (Google) Code Review
Browse files

Merge "Restructure CarrierMessagingServiceWrapper with better interfaces."

parents 42a272f6 d6a776d5
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import android.os.Handler;
import android.os.Message;
import android.service.carrier.CarrierMessagingService;
import android.service.carrier.CarrierMessagingServiceWrapper;
import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallbackWrapper;
import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback;
import android.service.carrier.MessagePdu;
import android.util.LocalLog;

@@ -167,7 +167,8 @@ public class CarrierServicesSmsFilter {
        CarrierSmsFilter smsFilter = new CarrierSmsFilter(mPdus, mDestPort, mPduFormat,
                packageName);
        CarrierSmsFilterCallback smsFilterCallback =
                new CarrierSmsFilterCallback(filterAggregator, smsFilter, packageName);
                new CarrierSmsFilterCallback(filterAggregator,
                        smsFilter.mCarrierMessagingServiceWrapper, packageName);
        filterAggregator.addToCallbacks(smsFilterCallback);

        smsFilter.filterSms(smsFilterCallback);
@@ -219,13 +220,15 @@ public class CarrierServicesSmsFilter {
     * instructed to do so by the carrier messaging service. A new instance must be used for every
     * message.
     */
    private final class CarrierSmsFilter extends CarrierMessagingServiceWrapper {
    private final class CarrierSmsFilter {
        private final byte[][] mPdus;
        private final int mDestPort;
        private final String mSmsFormat;
        // Instantiated in filterSms.
        private volatile CarrierSmsFilterCallback mSmsFilterCallback;
        private final String mPackageName;
        protected final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper =
                new CarrierMessagingServiceWrapper();

        CarrierSmsFilter(byte[][] pdus, int destPort, String smsFormat, String packageName) {
            mPdus = pdus;
@@ -240,7 +243,8 @@ public class CarrierServicesSmsFilter {
         */
        void filterSms(CarrierSmsFilterCallback smsFilterCallback) {
            mSmsFilterCallback = smsFilterCallback;
            if (!bindToCarrierMessagingService(mContext, mPackageName)) {
            if (!mCarrierMessagingServiceWrapper.bindToCarrierMessagingService(
                    mContext, mPackageName, ()-> onServiceReady())) {
                loge("CarrierSmsFilter::filterSms: bindService() for failed for " + mPackageName);
                smsFilterCallback.onFilterComplete(CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT);
            } else {
@@ -253,11 +257,11 @@ public class CarrierServicesSmsFilter {
         * Invokes the {@code carrierMessagingService} to filter messages. The filtering result is
         * delivered to {@code smsFilterCallback}.
         */
        @Override
        public void onServiceReady() {
        private void onServiceReady() {
            try {
                log("onServiceReady: calling filterSms on " + mPackageName);
                filterSms(new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort,
                mCarrierMessagingServiceWrapper.filterSms(
                        new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort,
                        mPhone.getSubId(), mSmsFilterCallback);
            } catch (RuntimeException e) {
                loge("Exception filtering the SMS with " + mPackageName + ": " + e);
@@ -271,7 +275,7 @@ public class CarrierServicesSmsFilter {
     * A callback used to notify the platform of the carrier messaging app filtering result. Once
     * the result is ready, the carrier messaging service connection is disposed.
     */
    private final class CarrierSmsFilterCallback extends CarrierMessagingCallbackWrapper {
    private final class CarrierSmsFilterCallback implements CarrierMessagingCallback {
        private final FilterAggregator mFilterAggregator;
        private final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper;
        private boolean mIsOnFilterCompleteCalled;
+21 −15
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ import android.provider.Telephony;
import android.provider.Telephony.Sms;
import android.service.carrier.CarrierMessagingService;
import android.service.carrier.CarrierMessagingServiceWrapper;
import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallbackWrapper;
import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback;
import android.telephony.AnomalyReporter;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
@@ -352,10 +352,12 @@ public abstract class SMSDispatcher extends Handler {
    /**
     * Use the carrier messaging service to send a data or text SMS.
     */
    protected abstract class SmsSender extends CarrierMessagingServiceWrapper {
    protected abstract class SmsSender {
        protected final SmsTracker mTracker;
        // Initialized in sendSmsByCarrierApp
        protected volatile SmsSenderCallback mSenderCallback;
        protected final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper =
                new CarrierMessagingServiceWrapper();

        protected SmsSender(SmsTracker tracker) {
            mTracker = tracker;
@@ -364,7 +366,8 @@ public abstract class SMSDispatcher extends Handler {
        public void sendSmsByCarrierApp(String carrierPackageName,
                                        SmsSenderCallback senderCallback) {
            mSenderCallback = senderCallback;
            if (!bindToCarrierMessagingService(mContext, carrierPackageName)) {
            if (mCarrierMessagingServiceWrapper.bindToCarrierMessagingService(
                    mContext, carrierPackageName, ()->onServiceReady())) {
                Rlog.e(TAG, "bindService() for carrier messaging service failed");
                mSenderCallback.onSendSmsComplete(
                        CarrierMessagingService.SEND_STATUS_RETRY_ON_CARRIER_NETWORK,
@@ -373,6 +376,8 @@ public abstract class SMSDispatcher extends Handler {
                Rlog.d(TAG, "bindService() for carrier messaging service succeeded");
            }
        }

        public abstract void onServiceReady();
    }

    /**
@@ -390,7 +395,7 @@ public abstract class SMSDispatcher extends Handler {

            if (text != null) {
                try {
                    sendTextSms(
                    mCarrierMessagingServiceWrapper.sendTextSms(
                            text,
                            getSubId(),
                            mTracker.mDestAddress,
@@ -428,7 +433,7 @@ public abstract class SMSDispatcher extends Handler {

            if (data != null) {
                try {
                    sendDataSms(
                    mCarrierMessagingServiceWrapper.sendDataSms(
                            data,
                            getSubId(),
                            mTracker.mDestAddress,
@@ -456,8 +461,7 @@ public abstract class SMSDispatcher extends Handler {
     * Callback for TextSmsSender and DataSmsSender from the carrier messaging service.
     * Once the result is ready, the carrier messaging service connection is disposed.
     */
    protected final class SmsSenderCallback extends
            CarrierMessagingServiceWrapper.CarrierMessagingCallbackWrapper {
    protected final class SmsSenderCallback implements CarrierMessagingCallback {
        private final SmsSender mSmsSender;

        public SmsSenderCallback(SmsSender smsSender) {
@@ -472,7 +476,7 @@ public abstract class SMSDispatcher extends Handler {
            checkCallerIsPhoneOrCarrierApp();
            final long identity = Binder.clearCallingIdentity();
            try {
                mSmsSender.disposeConnection(mContext);
                mSmsSender.mCarrierMessagingServiceWrapper.disposeConnection(mContext);
                processSendSmsResponse(mSmsSender.mTracker, result, messageRef);
            } finally {
                Binder.restoreCallingIdentity(identity);
@@ -541,11 +545,13 @@ public abstract class SMSDispatcher extends Handler {
    /**
     * Use the carrier messaging service to send a multipart text SMS.
     */
    private final class MultipartSmsSender extends CarrierMessagingServiceWrapper {
    private final class MultipartSmsSender {
        private final List<String> mParts;
        public final SmsTracker[] mTrackers;
        // Initialized in sendSmsByCarrierApp
        private volatile MultipartSmsSenderCallback mSenderCallback;
        private final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper =
                new CarrierMessagingServiceWrapper();

        MultipartSmsSender(ArrayList<String> parts, SmsTracker[] trackers) {
            mParts = parts;
@@ -556,7 +562,8 @@ public abstract class SMSDispatcher extends Handler {
        void sendSmsByCarrierApp(String carrierPackageName,
                                 MultipartSmsSenderCallback senderCallback) {
            mSenderCallback = senderCallback;
            if (!bindToCarrierMessagingService(mContext, carrierPackageName)) {
            if (mCarrierMessagingServiceWrapper.bindToCarrierMessagingService(
                    mContext, carrierPackageName, ()->onServiceReady())) {
                Rlog.e(TAG, "bindService() for carrier messaging service failed");
                mSenderCallback.onSendMultipartSmsComplete(
                        CarrierMessagingService.SEND_STATUS_RETRY_ON_CARRIER_NETWORK,
@@ -566,8 +573,7 @@ public abstract class SMSDispatcher extends Handler {
            }
        }

        @Override
        public void onServiceReady() {
        private void onServiceReady() {
            boolean statusReportRequested = false;
            for (SmsTracker tracker : mTrackers) {
                if (tracker.mDeliveryIntent != null) {
@@ -577,7 +583,7 @@ public abstract class SMSDispatcher extends Handler {
            }

            try {
                sendMultipartTextSms(
                mCarrierMessagingServiceWrapper.sendMultipartTextSms(
                        mParts,
                        getSubId(),
                        mTrackers[0].mDestAddress,
@@ -598,7 +604,7 @@ public abstract class SMSDispatcher extends Handler {
     * Callback for MultipartSmsSender from the carrier messaging service.
     * Once the result is ready, the carrier messaging service connection is disposed.
     */
    private final class MultipartSmsSenderCallback extends CarrierMessagingCallbackWrapper {
    private final class MultipartSmsSenderCallback implements CarrierMessagingCallback {
        private final MultipartSmsSender mSmsSender;

        MultipartSmsSenderCallback(MultipartSmsSender smsSender) {
@@ -615,7 +621,7 @@ public abstract class SMSDispatcher extends Handler {
         */
        @Override
        public void onSendMultipartSmsComplete(int result, int[] messageRefs) {
            mSmsSender.disposeConnection(mContext);
            mSmsSender.mCarrierMessagingServiceWrapper.disposeConnection(mContext);

            if (mSmsSender.mTrackers == null) {
                Rlog.e(TAG, "Unexpected onSendMultipartSmsComplete call with null trackers.");