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

Commit 86da287b authored by Amit Mahajan's avatar Amit Mahajan
Browse files

VVM filtering should be done after carrier sms app.

Carrier app can be signed by a certificate present on SIM (app
will show up in CarrierPackage), or it can be a system app.
VVM filtering should not be between these 2; should be either
before them, or after, and we've decided to go with after for now.

Bug: 29899506
Change-Id: I2dfe0dce4e9d7f207b53275d594a6119c1224dba
parent 236825dc
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -929,37 +929,41 @@ public abstract class InboundSmsHandler extends StateMachine {
        } else {
            loge("UiccCard not initialized.");
        }
        List<String> systemPackages =
            getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE));

        if (carrierPackages != null && carrierPackages.size() == 1) {
            log("Found carrier package.");
            CarrierSmsFilter smsFilter = new CarrierSmsFilter(pdus, destPort,
                    tracker.getFormat(), resultReceiver);
            CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(smsFilter,
                    userUnlocked, true /* filterWithVvm */);
                    userUnlocked);
            smsFilter.filterSms(carrierPackages.get(0), smsFilterCallback);
            return true;
        }

        if (VisualVoicemailSmsFilter.filter(
                mContext, pdus, tracker.getFormat(), destPort, mPhone.getSubId())) {
            log("Visual voicemail SMS dropped");
            dropSms(resultReceiver);
            return true;
        }
        // It is possible that carrier app is not present as a CarrierPackage, but instead as a
        // system app
        List<String> systemPackages =
                getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE));

        if (systemPackages != null && systemPackages.size() == 1) {
            log("Found system package.");
            CarrierSmsFilter smsFilter = new CarrierSmsFilter(pdus, destPort,
                    tracker.getFormat(), resultReceiver);
            CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(smsFilter,
                    userUnlocked, false);
                    userUnlocked);
            smsFilter.filterSms(systemPackages.get(0), smsFilterCallback);
            return true;
        }
        logv("Unable to find carrier package: " + carrierPackages
                + ", nor systemPackages: " + systemPackages);

        if (VisualVoicemailSmsFilter.filter(
                mContext, pdus, tracker.getFormat(), destPort, mPhone.getSubId())) {
            log("Visual voicemail SMS dropped");
            dropSms(resultReceiver);
            return true;
        }

        return false;
    }

@@ -1387,13 +1391,10 @@ public abstract class InboundSmsHandler extends StateMachine {
    private final class CarrierSmsFilterCallback extends ICarrierMessagingCallback.Stub {
        private final CarrierSmsFilter mSmsFilter;
        private final boolean mUserUnlocked;
        private final boolean mFilterWithVvm;

        CarrierSmsFilterCallback(CarrierSmsFilter smsFilter, boolean userUnlocked,
                boolean filterWithVvm) {
        CarrierSmsFilterCallback(CarrierSmsFilter smsFilter, boolean userUnlocked) {
            mSmsFilter = smsFilter;
            mUserUnlocked = userUnlocked;
            mFilterWithVvm = filterWithVvm;
        }

        /**
@@ -1408,14 +1409,12 @@ public abstract class InboundSmsHandler extends StateMachine {
            try {
                logv("onFilterComplete: result is " + result);
                if ((result & CarrierMessagingService.RECEIVE_OPTIONS_DROP) == 0) {
                    if (mFilterWithVvm) {
                    if (VisualVoicemailSmsFilter.filter(mContext, mSmsFilter.mPdus,
                            mSmsFilter.mSmsFormat, mSmsFilter.mDestPort, mPhone.getSubId())) {
                        log("Visual voicemail SMS dropped");
                        dropSms(mSmsFilter.mSmsBroadcastReceiver);
                        return;
                    }
                    }

                    if (mUserUnlocked) {
                        dispatchSmsDeliveryIntent(mSmsFilter.mPdus, mSmsFilter.mSmsFormat,