Merge "Add cleanspec to Telecomm." into lmp-dev
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index d0aa49f..8a5647c 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -89,6 +89,7 @@
     private final WiredHeadsetManager mWiredHeadsetManager;
     private final TtyManager mTtyManager;
     private final ProximitySensorManager mProximitySensorManager;
+    private final PhoneStateBroadcaster mPhoneStateBroadcaster;
 
     /**
      * The call the user is currently interacting with. This is the call that should have audio
@@ -115,10 +116,11 @@
         mHeadsetMediaButton = new HeadsetMediaButton(app, this);
         mTtyManager = new TtyManager(app, mWiredHeadsetManager);
         mProximitySensorManager = new ProximitySensorManager(app);
+        mPhoneStateBroadcaster = new PhoneStateBroadcaster();
 
         mListeners.add(statusBarNotifier);
         mListeners.add(new CallLogManager(app));
-        mListeners.add(new PhoneStateBroadcaster());
+        mListeners.add(mPhoneStateBroadcaster);
         mListeners.add(mInCallController);
         mListeners.add(mRinger);
         mListeners.add(new RingbackPlayer(this, playerFactory));
@@ -755,6 +757,12 @@
         return call;
     }
 
+    /**
+     * @return the call state currently tracked by {@link PhoneStateBroadcaster}
+     */
+    int getCallState() {
+        return mPhoneStateBroadcaster.getCallState();
+    }
 
     /**
      * Adds the specified call to the main list of live calls.
diff --git a/src/com/android/server/telecom/PhoneStateBroadcaster.java b/src/com/android/server/telecom/PhoneStateBroadcaster.java
index d0d0b68..0c16689 100644
--- a/src/com/android/server/telecom/PhoneStateBroadcaster.java
+++ b/src/com/android/server/telecom/PhoneStateBroadcaster.java
@@ -66,6 +66,10 @@
         }
     }
 
+    int getCallState() {
+        return mCurrentState;
+    }
+
     private void sendPhoneStateChangedBroadcast(Call call, int phoneState) {
         if (phoneState == mCurrentState) {
             return;
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 5bce513..566b0c6 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -382,7 +382,9 @@
         enforceReadPermission();
         // Do not use sendRequest() with this method since it could cause a deadlock with
         // audio service, which we call into from the main thread: AudioManager.setMode().
-        return mCallsManager.hasAnyCalls();
+        final int callState = mCallsManager.getCallState();
+        return callState == TelephonyManager.CALL_STATE_OFFHOOK
+                || callState == TelephonyManager.CALL_STATE_RINGING;
     }
 
     /**
@@ -391,7 +393,16 @@
     @Override
     public boolean isRinging() {
         enforceReadPermission();
-        return mCallsManager.hasRingingCall();
+        return mCallsManager.getCallState() == TelephonyManager.CALL_STATE_RINGING;
+    }
+
+    /**
+     * @see TelecomManager#getCallState
+     */
+    @Override
+    public int getCallState() {
+        enforceReadPermission();
+        return mCallsManager.getCallState();
     }
 
     /**