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

Commit 4d271641 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Unregister broadcast receiver before registering it again." into 24D1-dev

parents 42e7cd4b f1282e17
Loading
Loading
Loading
Loading
+40 −19
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.Message;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.telephony.uicc.IccFileHandler;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.util.State;
@@ -40,11 +41,14 @@ public class RilMessageDecoder extends StateMachine {
    private static final int CMD_START = 1;
    private static final int CMD_PARAMS_READY = 2;

    private final Object mLock = new Object();
    // members
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    @GuardedBy("mLock")
    private CommandParamsFactory mCmdParamsFactory = null;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private RilMessage mCurrentRilMessage = null;
    @GuardedBy("mLock")
    private Handler mCaller = null;
    private static int mSimCount = 0;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@@ -113,10 +117,14 @@ public class RilMessageDecoder extends StateMachine {

    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private void sendCmdForExecution(RilMessage rilMsg) {
        synchronized (mLock) {
            if (mCaller != null) {
                Message msg = mCaller.obtainMessage(CatService.MSG_ID_RIL_MSG_DECODED,
                        new RilMessage(rilMsg));
                msg.sendToTarget();
            }
        }
    }

    private RilMessageDecoder(Handler caller, IccFileHandler fh, Context context) {
        super("RilMessageDecoder");
@@ -125,9 +133,11 @@ public class RilMessageDecoder extends StateMachine {
        addState(mStateCmdParamsReady);
        setInitialState(mStateStart);

        synchronized (mLock) {
            mCaller = caller;
            mCmdParamsFactory = CommandParamsFactory.getInstance(this, fh, context);
        }
    }

    private RilMessageDecoder() {
        super("RilMessageDecoder");
@@ -166,7 +176,7 @@ public class RilMessageDecoder extends StateMachine {
    }

    private boolean decodeMessageParams(RilMessage rilMsg) {
        boolean decodingStarted;
        boolean decodingStarted = false;

        mCurrentRilMessage = rilMsg;
        switch(rilMsg.mId) {
@@ -188,6 +198,9 @@ public class RilMessageDecoder extends StateMachine {
                decodingStarted = false;
                break;
            }

            synchronized (mLock) {
                if (mCmdParamsFactory != null) {
                    try {
                        // Start asynch parsing of the command parameters.
                        mCmdParamsFactory.make(BerTlv.decode(rawData));
@@ -199,6 +212,8 @@ public class RilMessageDecoder extends StateMachine {
                        sendCmdForExecution(mCurrentRilMessage);
                        decodingStarted = false;
                    }
                }
            }
            break;
        default:
            decodingStarted = false;
@@ -211,10 +226,16 @@ public class RilMessageDecoder extends StateMachine {
        quitNow();
        mStateStart = null;
        mStateCmdParamsReady = null;

        synchronized (mLock) {
            if (mCmdParamsFactory != null) {
                mCmdParamsFactory.dispose();
                mCmdParamsFactory = null;
        mCurrentRilMessage = null;
            }
            mCaller = null;
        }

        mCurrentRilMessage = null;
        mInstance = null;
    }
}
+15 −4
Original line number Diff line number Diff line
@@ -394,6 +394,8 @@ public class SatelliteController extends Handler {
    private static final String NOTIFICATION_CHANNEL_ID = "satellite";

    private final RegistrantList mSatelliteConfigUpdateChangedRegistrants = new RegistrantList();
    private final BTWifiNFCStateReceiver mBTWifiNFCSateReceiver;
    private final UwbAdapterStateCallback mUwbAdapterStateCallback;

    /**
     * @return The singleton instance of SatelliteController.
@@ -463,6 +465,8 @@ public class SatelliteController extends Handler {
        mContentResolver = mContext.getContentResolver();
        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);

        mBTWifiNFCSateReceiver = new BTWifiNFCStateReceiver();
        mUwbAdapterStateCallback = new UwbAdapterStateCallback();
        initializeSatelliteModeRadios();

        ContentObserver satelliteModeRadiosContentObserver = new ContentObserver(this) {
@@ -546,8 +550,6 @@ public class SatelliteController extends Handler {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void initializeSatelliteModeRadios() {
        if (mContentResolver != null) {
            BTWifiNFCStateReceiver bTWifiNFCSateReceiver = new BTWifiNFCStateReceiver();
            UwbAdapterStateCallback uwbAdapterStateCallback = new UwbAdapterStateCallback();
            IntentFilter radioStateIntentFilter = new IntentFilter();

            synchronized (mRadioStateLock) {
@@ -601,7 +603,14 @@ public class SatelliteController extends Handler {
                        radioStateIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
                    }
                }
                mContext.registerReceiver(bTWifiNFCSateReceiver, radioStateIntentFilter);

                try {
                    // Unregister receiver before registering it.
                    mContext.unregisterReceiver(mBTWifiNFCSateReceiver);
                } catch (IllegalArgumentException e) {
                    logd("initializeSatelliteModeRadios: unregisterReceiver, e=" + e);
                }
                mContext.registerReceiver(mBTWifiNFCSateReceiver, radioStateIntentFilter);

                if (satelliteModeRadios.contains(Settings.Global.RADIO_UWB)) {
                    UwbManager uwbManager = mContext.getSystemService(UwbManager.class);
@@ -610,8 +619,10 @@ public class SatelliteController extends Handler {
                        mUwbStateEnabled = uwbManager.isUwbEnabled();
                        final long identity = Binder.clearCallingIdentity();
                        try {
                            // Unregister callback before registering it.
                            uwbManager.unregisterAdapterStateCallback(mUwbAdapterStateCallback);
                            uwbManager.registerAdapterStateCallback(mContext.getMainExecutor(),
                                    uwbAdapterStateCallback);
                                    mUwbAdapterStateCallback);
                        } finally {
                            Binder.restoreCallingIdentity(identity);
                        }