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

Commit ffb5d48b authored by Jack Yu's avatar Jack Yu Committed by Sarah Chin
Browse files

Fixed incorrect data icon when call received on ESIM

The previous fix ag/16729359 attempted to fix the issue
that data icon was displayed as data disabled. The fix was
listening to IMS call state and updated the data enabled
state. The problem is that when data settings manager was
trying to register for the call event in DataSettingsManager's
constructor, IMS phone was not created yet.

Fixed by moving the registration event logic into
DataSettingsManager's event handler.

Test: Tested with PSIM + ESIM and enabled
"allowed data during calls". Data icon was shown properly during
voice call.
Fix: 213511868

Change-Id: I5ff7962ed270f449b90bf4c0d3c03390ffa9b709
Merged-In: I5ff7962ed270f449b90bf4c0d3c03390ffa9b709
parent fe3bcab4
Loading
Loading
Loading
Loading
+42 −25
Original line number Original line Diff line number Diff line
@@ -85,6 +85,8 @@ public class DataSettingsManager extends Handler {
    private static final int EVENT_PROVISIONED_CHANGED = 14;
    private static final int EVENT_PROVISIONED_CHANGED = 14;
    /** Event for provisioning data enabled setting changed. */
    /** Event for provisioning data enabled setting changed. */
    private static final int EVENT_PROVISIONING_DATA_ENABLED_CHANGED = 15;
    private static final int EVENT_PROVISIONING_DATA_ENABLED_CHANGED = 15;
    /** Event for registering all events. */
    private static final int EVENT_REGISTER_ALL_EVENTS = 16;


    private final Phone mPhone;
    private final Phone mPhone;
    private final ContentResolver mResolver;
    private final ContentResolver mResolver;
@@ -162,35 +164,14 @@ public class DataSettingsManager extends Handler {
        registerCallback(callback);
        registerCallback(callback);
        mDataConfigManager = dataNetworkController.getDataConfigManager();
        mDataConfigManager = dataNetworkController.getDataConfigManager();
        mDataEnabledOverride = getDataEnabledOverride();
        mDataEnabledOverride = getDataEnabledOverride();
        mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED);
        mSettingsObserver = new SettingsObserver(mPhone.getContext(), this);
        mSettingsObserver = new SettingsObserver(mPhone.getContext(), this);
        mSettingsObserver.observe(Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED),
                EVENT_PROVISIONED_CHANGED);
        mSettingsObserver.observe(
                Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED),
                EVENT_PROVISIONING_DATA_ENABLED_CHANGED);
        mPhone.getCallTracker().registerForVoiceCallStarted(this, EVENT_CALL_STATE_CHANGED, null);
        mPhone.getCallTracker().registerForVoiceCallEnded(this, EVENT_CALL_STATE_CHANGED, null);
        if (mPhone.getImsPhone() != null) {
            mPhone.getImsPhone().getCallTracker().registerForVoiceCallStarted(
                    this, EVENT_CALL_STATE_CHANGED, null);
            mPhone.getImsPhone().getCallTracker().registerForVoiceCallEnded(
                    this, EVENT_CALL_STATE_CHANGED, null);
        }
        mPhone.getContext().getSystemService(TelephonyRegistryManager.class)
                .addOnSubscriptionsChangedListener(new OnSubscriptionsChangedListener() {
                    @Override
                    public void onSubscriptionsChanged() {
                        if (mSubId != mPhone.getSubId()) {
                            log("onSubscriptionsChanged: " + mSubId + " to " + mPhone.getSubId());
                            obtainMessage(EVENT_SUBSCRIPTIONS_CHANGED, mPhone.getSubId())
                                    .sendToTarget();
                        }
                    }
                }, this::post);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_POLICY, true);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_POLICY, true);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_CARRIER, true);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_CARRIER, true);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_THERMAL, true);
        mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_THERMAL, true);

        // Instead of calling onRegisterAllEvents directly from the constructor, send the event.
        // The reason is that getImsPhone is null when we are still in the constructor here.
        sendEmptyMessage(EVENT_REGISTER_ALL_EVENTS);
    }
    }


    @Override
    @Override
@@ -334,12 +315,48 @@ public class DataSettingsManager extends Handler {
            }
            }
            case EVENT_PROVISIONING_DATA_ENABLED_CHANGED: {
            case EVENT_PROVISIONING_DATA_ENABLED_CHANGED: {
                updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_UNKNOWN);
                updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_UNKNOWN);
                break;
            }
            case EVENT_REGISTER_ALL_EVENTS: {
                onRegisterAllEvents();
                break;
            }
            }
            default:
            default:
                loge("Unknown msg.what: " + msg.what);
                loge("Unknown msg.what: " + msg.what);
        }
        }
    }
    }


    /**
     * Called when needed to register for all events that data network controller is interested.
     */
    private void onRegisterAllEvents() {
        mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED);
        mSettingsObserver.observe(Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED),
                EVENT_PROVISIONED_CHANGED);
        mSettingsObserver.observe(
                Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED),
                EVENT_PROVISIONING_DATA_ENABLED_CHANGED);
        mPhone.getCallTracker().registerForVoiceCallStarted(this, EVENT_CALL_STATE_CHANGED, null);
        mPhone.getCallTracker().registerForVoiceCallEnded(this, EVENT_CALL_STATE_CHANGED, null);
        if (mPhone.getImsPhone() != null) {
            mPhone.getImsPhone().getCallTracker().registerForVoiceCallStarted(
                    this, EVENT_CALL_STATE_CHANGED, null);
            mPhone.getImsPhone().getCallTracker().registerForVoiceCallEnded(
                    this, EVENT_CALL_STATE_CHANGED, null);
        }
        mPhone.getContext().getSystemService(TelephonyRegistryManager.class)
                .addOnSubscriptionsChangedListener(new OnSubscriptionsChangedListener() {
                    @Override
                    public void onSubscriptionsChanged() {
                        if (mSubId != mPhone.getSubId()) {
                            log("onSubscriptionsChanged: " + mSubId + " to " + mPhone.getSubId());
                            obtainMessage(EVENT_SUBSCRIPTIONS_CHANGED, mPhone.getSubId())
                                    .sendToTarget();
                        }
                    }
                }, this::post);
    }

    /**
    /**
     * Enable or disable data for a specific {@link TelephonyManager.DataEnabledReason}.
     * Enable or disable data for a specific {@link TelephonyManager.DataEnabledReason}.
     * @param reason The reason the data enabled change is taking place.
     * @param reason The reason the data enabled change is taking place.