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

Commit 2ae312e3 authored by Yorke Lee's avatar Yorke Lee
Browse files

Pipe TelephonyManager.getCallState through TelecommManager

* Add TelecommManager.getCallState (hidden API)
* Make TelephonyManager.getCallState call through to
TelecommManager, to be consistent with
TelephonyManager.ACTION_PHONE_STATE_CHANGED broadcasts for
overall call state. Telephony continues to manage call states for
individual subscriptions.

Bug: 17378767
Change-Id: Ia5e8b21df801ed3af4f6e14c110a72c92f077f88
parent c68f2762
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.android.internal.telecom.ITelecomService;
@@ -661,11 +662,35 @@ public class TelecomManager {
                return getTelecomService().isInCall();
            }
        } catch (RemoteException e) {
            Log.e(TAG, "RemoteException attempting to get default phone app.", e);
            Log.e(TAG, "RemoteException calling isInCall().", e);
        }
        return false;
    }

    /**
     * Returns one of the following constants that represents the current state of Telecom:
     *
     * {@link TelephonyManager#CALL_STATE_RINGING}
     * {@link TelephonyManager#CALL_STATE_OFFHOOK}
     * {@link TelephonyManager#CALL_STATE_IDLE}
     *
     * <p>
     * Requires permission: {@link android.Manifest.permission#READ_PHONE_STATE}
     * </p>
     * @hide
     */
    @SystemApi
    public int getCallState() {
        try {
            if (isServiceConnected()) {
                return getTelecomService().getCallState();
            }
        } catch (RemoteException e) {
            Log.d(TAG, "RemoteException calling getCallState().", e);
        }
        return TelephonyManager.CALL_STATE_IDLE;
    }

    /**
     * Returns whether there currently exists is a ringing incoming-call.
     *
+5 −0
Original line number Diff line number Diff line
@@ -138,6 +138,11 @@ interface ITelecomService {
     */
    boolean isRinging();

    /**
     * @see TelecomServiceImpl#getCallState
     */
    int getCallState();

    /**
     * @see TelecomServiceImpl#endCall
     */
+7 −3
Original line number Diff line number Diff line
@@ -2045,7 +2045,11 @@ public class TelephonyManager {
     * Returns a constant indicating the call state (cellular) on the device.
     */
    public int getCallState() {
        return getCallState(getDefaultSubscription());
        try {
            return getTelecomService().getCallState();
        } catch (RemoteException | NullPointerException e) {
            return CALL_STATE_IDLE;
        }
    }

    /**
@@ -2142,7 +2146,7 @@ public class TelephonyManager {
        return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
    }

    private ITelecomService getTelecommService() {
    private ITelecomService getTelecomService() {
        return ITelecomService.Stub.asInterface(ServiceManager.getService(Context.TELECOM_SERVICE));
    }

@@ -3132,7 +3136,7 @@ public class TelephonyManager {
    @SystemApi
    public void silenceRinger() {
        try {
            getTelecommService().silenceRinger();
            getTelecomService().silenceRinger();
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelecomService#silenceRinger", e);
        }