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

Commit 509e0e42 authored by Amit Mahajan's avatar Amit Mahajan
Browse files

DO NOT MERGE Send emergency call state change intent on emergency call start/end

Change-Id: I953f0b28b8cd6b5ab7944dc8c6217041c214e86e
parent 77a4ce6c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2098,4 +2098,9 @@ public interface Phone {
     * Returns the modem activity information
     */
    public void getModemActivityInfo(Message response);

    /**
     * Set boolean broadcastEmergencyCallStateChanges
     */
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast);
}
+22 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import android.app.ActivityManagerNative;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +34,7 @@ import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.telecom.VideoProfile;
@@ -87,6 +89,7 @@ import java.util.concurrent.atomic.AtomicReference;

public abstract class PhoneBase extends Handler implements Phone {
    private static final String LOG_TAG = "PhoneBase";
    private static final boolean DBG = true;

    private boolean mImsIntentReceiverRegistered = false;
    private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() {
@@ -250,6 +253,8 @@ public abstract class PhoneBase extends Handler implements Phone {
    protected int mReportInterval = 0;  // ms
    protected int mLceStatus = RILConstants.LCE_NOT_AVAILABLE;

    private boolean mBroadcastEmergencyCallStateChanges = false;

    @Override
    public String getPhoneName() {
        return mName;
@@ -2605,6 +2610,21 @@ public abstract class PhoneBase extends Handler implements Phone {
        return false;
    }

    public void sendEmergencyCallStateChange(boolean callActive) {
        if (mBroadcastEmergencyCallStateChanges) {
            Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALL_STATE_CHANGED);
            intent.putExtra(PhoneConstants.PHONE_IN_EMERGENCY_CALL, callActive);
            SubscriptionManager.putPhoneIdAndSubIdExtra(intent, getPhoneId());
            ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL);
            if (DBG) Rlog.d(LOG_TAG, "sendEmergencyCallStateChange");
        }
    }

    @Override
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast) {
        mBroadcastEmergencyCallStateChanges = broadcast;
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("PhoneBase: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
+20 −0
Original line number Diff line number Diff line
@@ -175,6 +175,21 @@ public class PhoneProxy extends Handler implements Phone {
            }
            // Force update IMS service
            ImsManager.updateImsServiceConfig(mContext, mPhoneId, true);

            // Update broadcastEmergencyCallStateChanges
            CarrierConfigManager configMgr = (CarrierConfigManager)
                    mActivePhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
            PersistableBundle b = configMgr.getConfigForSubId(mActivePhone.getSubId());
            if (b != null) {
                boolean broadcastEmergencyCallStateChanges = b.getBoolean(
                        CarrierConfigManager.KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL);
                logd("broadcastEmergencyCallStateChanges =" + broadcastEmergencyCallStateChanges);
                mActivePhone.setBroadcastEmergencyCallStateChanges(
                        broadcastEmergencyCallStateChanges);
            } else {
                loge("didn't get broadcastEmergencyCallStateChanges from carrier config");
            }

            break;

        default:
@@ -1639,6 +1654,11 @@ public class PhoneProxy extends Handler implements Phone {
        return mActivePhone.isWifiCallingEnabled();
    }

    @Override
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast) {
        mActivePhone.setBroadcastEmergencyCallStateChanges(broadcast);
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        try {
            ((PhoneBase)mActivePhone).dump(fd, pw, args);
+3 −0
Original line number Diff line number Diff line
@@ -1164,7 +1164,9 @@ public final class CdmaCallTracker extends CallTracker {
        mIsInEmergencyCall = true;
        mPhone.mDcTracker.setInternalDataEnabled(false);
        mPhone.notifyEmergencyCallRegistrants(true);
        mPhone.sendEmergencyCallStateChange(true);
    }

    /**
     * Check and enable data call after an emergency call is dropped if it's
     * not in ECM
@@ -1181,6 +1183,7 @@ public final class CdmaCallTracker extends CallTracker {
                mPhone.mDcTracker.setInternalDataEnabled(true);
                mPhone.notifyEmergencyCallRegistrants(false);
            }
            mPhone.sendEmergencyCallStateChange(false);
        }
    }

+6 −1
Original line number Diff line number Diff line
@@ -960,7 +960,11 @@ public final class ImsPhoneCallTracker extends CallTracker {
                }
            }

            mIsInEmergencyCall = isEmergencyCallInList;
            if (!isEmergencyCallInList) {
                mIsInEmergencyCall = false;
                mPhone.mDefaultPhone.sendEmergencyCallStateChange(false);
            }

        }
    }

@@ -968,6 +972,7 @@ public final class ImsPhoneCallTracker extends CallTracker {
        mConnections.add(conn);
        if (conn.isEmergency()) {
            mIsInEmergencyCall = true;
            mPhone.mDefaultPhone.sendEmergencyCallStateChange(true);
        }
    }