Allow ConnectionService to ask Telecomm for ringback

Cherry picked from branch lmp-preview-dev because checking the changes into master required an API update, whereas the relevant APIs are @hide-ed in the source branch.

Implements the necessary wiring to respond to a ConnectionService that
asks Telecomm to play ringbacks on its behalf.

Bug: 15190301
Change-Id: Ic6a6c031aa92df1f3587daf74f24d090cd21245b
(cherry picked from commit 50a57136b3aa876c8311b58e1e11720a337fe1cc)
diff --git a/src/com/android/telecomm/RingbackPlayer.java b/src/com/android/telecomm/RingbackPlayer.java
index 4bb8ff2..8fd6697 100644
--- a/src/com/android/telecomm/RingbackPlayer.java
+++ b/src/com/android/telecomm/RingbackPlayer.java
@@ -49,21 +49,6 @@
 
     /** {@inheritDoc} */
     @Override
-    public void onCallStateChanged(Call call, CallState oldState, CallState newState) {
-        // Only operate on the foreground call.
-        if (mCallsManager.getForegroundCall() == call) {
-
-            // Treat as ending or begining dialing based on the state transition.
-            if (shouldStartRinging(call)) {
-                startRingbackForCall(call);
-            } else if (oldState == CallState.DIALING) {
-                stopRingbackForCall(call);
-            }
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
     public void onForegroundCallChanged(Call oldForegroundCall, Call newForegroundCall) {
         if (oldForegroundCall != null) {
             stopRingbackForCall(oldForegroundCall);
@@ -81,15 +66,20 @@
             CallServiceWrapper newCallService) {
 
         super.onCallServiceChanged(call, oldCallServiceWrapper, newCallService);
-        // Only operate on the foreground call.
-        if (mCallsManager.getForegroundCall() == call) {
+        // Treat as ending or begining dialing based on the state transition.
+        if (shouldStartRinging(call)) {
+            startRingbackForCall(call);
+        } else if (newCallService == null) {
+            stopRingbackForCall(call);
+        }
+    }
 
-            // Treat as ending or begining dialing based on the state transition.
-            if (shouldStartRinging(call)) {
-                startRingbackForCall(call);
-            } else if (newCallService == null) {
-                stopRingbackForCall(call);
-            }
+    @Override
+    public void onRequestingRingback(Call call, boolean ignored) {
+        if (shouldStartRinging(call)) {
+            startRingbackForCall(call);
+        } else {
+            stopRingbackForCall(call);
         }
     }
 
@@ -144,8 +134,10 @@
         }
     }
 
-    private static boolean shouldStartRinging(Call call) {
+    private boolean shouldStartRinging(Call call) {
         return call != null
-                && call.getState() == CallState.DIALING;
+                && mCallsManager.getForegroundCall() == call
+                && call.getState() == CallState.DIALING
+                && call.isRequestingRingback();
     }
 }