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

Commit 55a9ca6d authored by Hui Wang's avatar Hui Wang
Browse files

Reset cell broadcast config cache on radio off or sub changed

The cell broadcast config may be dropped by modem when radio
off or subscription changed. In this case, the cache will be
reset to make sure the config will be set again when the api
is called by the cell broadcast module.

Bug: 266702656
Test: atest com.android.internal.telephony.GsmCdmaPhoneTest
Test: manual
Change-Id: I241a84aa6f23dcf16e958b6a01e649e6232e4722
parent 816e6132
Loading
Loading
Loading
Loading
+66 −7
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import android.annotation.NonNull;
import android.os.AsyncResult;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Message;
import android.telephony.CellBroadcastIdRange;
import android.telephony.SmsCbMessage;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;

import com.android.internal.annotations.VisibleForTesting;
@@ -46,6 +48,8 @@ public final class CellBroadcastConfigTracker extends StateMachine {
    private static final int EVENT_REQUEST = 1;
    private static final int EVENT_CONFIGURATION_DONE = 2;
    private static final int EVENT_ACTIVATION_DONE = 3;
    private static final int EVENT_RADIO_OFF = 4;
    private static final int EVENT_SUBSCRIPTION_CHANGED = 5;

    private static final int SMS_CB_CODE_SCHEME_MIN = 0;
    private static final int SMS_CB_CODE_SCHEME_MAX = 255;
@@ -55,7 +59,16 @@ public final class CellBroadcastConfigTracker extends StateMachine {
    // Cache of current cell broadcast id ranges of 3gpp2
    private List<CellBroadcastIdRange> mCbRanges3gpp2 = new CopyOnWriteArrayList<>();
    private Phone mPhone;

    @VisibleForTesting
    public int mSubId;
    @VisibleForTesting
    public final SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener =
            new SubscriptionManager.OnSubscriptionsChangedListener() {
                @Override
                public void onSubscriptionsChanged() {
                    sendMessage(EVENT_SUBSCRIPTION_CHANGED);
                }
            };

    /**
     * The class is to present the request to set cell broadcast id ranges
@@ -98,6 +111,40 @@ public final class CellBroadcastConfigTracker extends StateMachine {
        }
    }

    /**
     * The default state.
     */
    private class DefaultState extends State {
        @Override
        public boolean processMessage(Message msg) {
            boolean retVal = HANDLED;
            if (DBG) {
                logd("DefaultState message:" + msg.what);
            }
            switch (msg.what) {
                case EVENT_RADIO_OFF:
                    resetConfig();
                    break;
                case EVENT_SUBSCRIPTION_CHANGED:
                    int subId = mPhone.getSubId();
                    if (mSubId != subId) {
                        log("SubId changed from " + mSubId + " to " + subId);
                        mSubId = subId;
                        resetConfig();
                    }
                    break;
                default:
                    log("unexpected message!");
                    break;

            }

            return retVal;
        }
    }

    private DefaultState mDefaultState = new DefaultState();

    /*
     * The idle state which does not have ongoing radio request.
     */
@@ -335,12 +382,19 @@ public final class CellBroadcastConfigTracker extends StateMachine {
    private void init(Phone phone) {
        logd("init");
        mPhone = phone;

        addState(mIdleState);
        addState(mGsmConfiguringState);
        addState(mGsmActivatingState);
        addState(mCdmaConfiguringState);
        addState(mCdmaActivatingState);
        mSubId = mPhone.getSubId();

        mPhone.registerForRadioOffOrNotAvailable(getHandler(), EVENT_RADIO_OFF, null);
        mPhone.getContext().getSystemService(SubscriptionManager.class)
                .addOnSubscriptionsChangedListener(new HandlerExecutor(getHandler()),
                        mSubChangedListener);

        addState(mDefaultState);
        addState(mIdleState, mDefaultState);
        addState(mGsmConfiguringState, mDefaultState);
        addState(mGsmActivatingState, mDefaultState);
        addState(mCdmaConfiguringState, mDefaultState);
        addState(mCdmaActivatingState, mDefaultState);
        setInitialState(mIdleState);
    }

@@ -413,6 +467,11 @@ public final class CellBroadcastConfigTracker extends StateMachine {
        return newRanges;
    }

    private void resetConfig() {
        mCbRanges3gpp.clear();
        mCbRanges3gpp2.clear();
    }

    private void setGsmConfig(List<CellBroadcastIdRange> ranges, Request request) {
        if (DBG) {
            logd("setGsmConfig with " + ranges);
+2 −1
Original line number Diff line number Diff line
@@ -247,7 +247,8 @@ public class GsmCdmaPhone extends Phone {
    private String mVmNumber;
    private int mImeiType = IMEI_TYPE_UNKNOWN;

    CellBroadcastConfigTracker mCellBroadcastConfigTracker =
    @VisibleForTesting
    public CellBroadcastConfigTracker mCellBroadcastConfigTracker =
            CellBroadcastConfigTracker.make(this, null);

    private boolean mIsNullCipherAndIntegritySupported = false;
+2 −1
Original line number Diff line number Diff line
@@ -183,7 +183,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    protected static final int EVENT_RADIO_ON                    = 5;
    protected static final int EVENT_GET_BASEBAND_VERSION_DONE   = 6;
    protected static final int EVENT_USSD                        = 7;
    protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE  = 8;
    @VisibleForTesting
    public static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE  = 8;
    private static final int EVENT_GET_SIM_STATUS_DONE           = 11;
    protected static final int EVENT_SET_CALL_FORWARD_DONE       = 12;
    protected static final int EVENT_GET_CALL_FORWARD_DONE       = 13;
Loading