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

Commit 559cb677 authored by fionaxu's avatar fionaxu
Browse files

new carrier signal/action on carrier action reset

notify carrier apps on carrier action reset, usually when sim loaded
or sim absent. only sent those reset signals to configured carrier apps
carrier apps could reply on this new intent instead of sim_state_changed
to avoid unnecessary wake-ups, for example an VZW app might be awake
even under AT&T due to the general SIM_STATE_CHANGED broadcast.

Bug: 34626476
Test: Manual test on TMO and READY/ZIP SIM
Change-Id: Icc8bd843ddaccd3a96950831c45ff6825fb0cc9e
Merged-in: Icc8bd843ddaccd3a96950831c45ff6825fb0cc9e
parent 4a6d165e
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -70,9 +70,10 @@ public class CarrierActionAgent extends Handler {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            final String iccState = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
            if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)){
                if (IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(
                        intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) {
                if (IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(iccState) ||
                        IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(iccState)) {
                    sendEmptyMessage(CARRIER_ACTION_RESET);
                }
            }
@@ -109,6 +110,9 @@ public class CarrierActionAgent extends Handler {
                log("CARRIER_ACTION_RESET");
                carrierActionSetMeteredApnsEnabled(true);
                carrierActionSetRadioEnabled(true);
                // notify configured carrier apps for reset
                mPhone.getCarrierSignalAgent().notifyCarrierSignalReceivers(
                        new Intent(TelephonyIntents.ACTION_CARRIER_SIGNAL_RESET));
                break;
            default:
                loge("Unknown carrier action: " + msg.what);
+13 −8
Original line number Diff line number Diff line
@@ -88,9 +88,10 @@ public class CarrierSignalAgent {
     * This is a list of supported signals from CarrierSignalAgent
     */
    private final Set<String> mCarrierSignalList = new HashSet<>(Arrays.asList(
            TelephonyIntents.ACTION_CARRIER_SIGNAL_PCO_VALUE.toLowerCase(),
            TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED.toLowerCase(),
            TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED.toLowerCase()));
            TelephonyIntents.ACTION_CARRIER_SIGNAL_PCO_VALUE,
            TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED,
            TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED,
            TelephonyIntents.ACTION_CARRIER_SIGNAL_RESET));

    private final LocalLog mErrorLocalLog = new LocalLog(20);

@@ -99,6 +100,11 @@ public class CarrierSignalAgent {
            String action = intent.getAction();
            if (DBG) log("CarrierSignalAgent receiver action: " + action);
            if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
                // notify carrier apps before cache get purged
                if (IccCardConstants.State.ABSENT == mPhone.getIccCard().getState()) {
                    notifyCarrierSignalReceivers(
                            new Intent(TelephonyIntents.ACTION_CARRIER_SIGNAL_RESET));
                }
                loadCarrierConfig();
            }
        }
@@ -163,7 +169,6 @@ public class CarrierSignalAgent {
                        }
                        String[] signals = splitStr[1].split(CARRIER_SIGNAL_DELIMITER);
                        for (String s : signals) {
                            s = s.toLowerCase();
                            if (!mCarrierSignalList.contains(s)) {
                                loge("Invalid signal name: " + s);
                                continue;
@@ -191,8 +196,8 @@ public class CarrierSignalAgent {
     * Check if there are registered carrier broadcast receivers to handle the passing intent
     */
    public boolean hasRegisteredReceivers(String action) {
        return mCachedWakeSignalConfigs.containsKey(action.toLowerCase())
                || mCachedNoWakeSignalConfigs.containsKey(action.toLowerCase());
        return mCachedWakeSignalConfigs.containsKey(action)
                || mCachedNoWakeSignalConfigs.containsKey(action);
    }

    /**
@@ -254,14 +259,14 @@ public class CarrierSignalAgent {
        List<ComponentName> receiverList;

        synchronized (mCachedWakeSignalConfigs) {
            receiverList = mCachedWakeSignalConfigs.get(intent.getAction().toLowerCase());
            receiverList = mCachedWakeSignalConfigs.get(intent.getAction());
            if (!ArrayUtils.isEmpty(receiverList)) {
                broadcast(intent, receiverList, WAKE);
            }
        }

        synchronized (mCachedNoWakeSignalConfigs) {
            receiverList = mCachedNoWakeSignalConfigs.get(intent.getAction().toLowerCase());
            receiverList = mCachedNoWakeSignalConfigs.get(intent.getAction());
            if (!ArrayUtils.isEmpty(receiverList)) {
                broadcast(intent, receiverList, NO_WAKE);
            }