OSDN Git Service

TelephonyManager should use TelecomManager's getCallState().
authorSantos Cordon <santoscordon@google.com>
Tue, 9 Jun 2015 21:57:07 +0000 (14:57 -0700)
committerSantos Cordon <santoscordon@google.com>
Wed, 10 Jun 2015 18:42:27 +0000 (11:42 -0700)
Telecom's version includes non-cellular calls in its result. Many apps
compile against TelephonyManager's existing API so we should update it
to use telecom instead.

We kept the implementation as cellular-only for
getCallState[ForSubscription](...) version of the API (which is hidden
anyway).

Bug: 21732997
Change-Id: Ifd27e6b49d76fe96ccc969e5262b1a876670aeef

telephony/java/android/telephony/TelephonyManager.java

index 12f1644..393888d 100644 (file)
@@ -193,7 +193,7 @@ public class TelephonyManager {
     //
 
     /**
-     * Broadcast intent action indicating that the call state (cellular)
+     * Broadcast intent action indicating that the call state
      * on the device has changed.
      *
      * <p>
@@ -2437,10 +2437,23 @@ public class TelephonyManager {
     public static final int CALL_STATE_OFFHOOK = 2;
 
     /**
-     * Returns a constant indicating the call state (cellular) on the device.
+     * Returns one of the following constants that represents the current state of all
+     * phone calls.
+     *
+     * {@link TelephonyManager#CALL_STATE_RINGING}
+     * {@link TelephonyManager#CALL_STATE_OFFHOOK}
+     * {@link TelephonyManager#CALL_STATE_IDLE}
      */
     public int getCallState() {
-        return getCallState(getDefaultSubscription());
+        try {
+            ITelecomService telecom = getTelecomService();
+            if (telecom != null) {
+                return telecom.getCallState();
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling ITelecomService#getCallState", e);
+        }
+        return CALL_STATE_IDLE;
     }
 
     /**