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

Commit 78b82dfc authored by Xiangyu/Malcolm Chen's avatar Xiangyu/Malcolm Chen Committed by Gerrit Code Review
Browse files

Merge "Restructure CarrierMessagingServiceWrapper with better interfaces."

parents 0b04fbde 9f742d84
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;

@@ -161,7 +161,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);
@@ -213,13 +214,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;
@@ -234,7 +237,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 {
@@ -247,11 +251,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);
@@ -265,7 +269,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.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
@@ -351,10 +351,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;
@@ -363,7 +365,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,
@@ -372,6 +375,8 @@ public abstract class SMSDispatcher extends Handler {
                Rlog.d(TAG, "bindService() for carrier messaging service succeeded");
            }
        }

        public abstract void onServiceReady();
    }

    /**
@@ -389,7 +394,7 @@ public abstract class SMSDispatcher extends Handler {

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

            if (data != null) {
                try {
                    sendDataSms(
                    mCarrierMessagingServiceWrapper.sendDataSms(
                            data,
                            getSubId(),
                            mTracker.mDestAddress,
@@ -455,8 +460,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) {
@@ -471,7 +475,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);
@@ -540,11 +544,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;
@@ -555,7 +561,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,
@@ -565,8 +572,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) {
@@ -576,7 +582,7 @@ public abstract class SMSDispatcher extends Handler {
            }

            try {
                sendMultipartTextSms(
                mCarrierMessagingServiceWrapper.sendMultipartTextSms(
                        mParts,
                        getSubId(),
                        mTrackers[0].mDestAddress,
@@ -597,7 +603,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) {
@@ -614,7 +620,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.");