Follow up on c/401744.
Change-Id: I53bdfae84532c9f382d3ebfa8ab7c993898725b7
diff --git a/src/com/android/telecomm/Switchboard.java b/src/com/android/telecomm/Switchboard.java
index 6ee4d22..b33df50 100644
--- a/src/com/android/telecomm/Switchboard.java
+++ b/src/com/android/telecomm/Switchboard.java
@@ -23,7 +23,6 @@
import android.telecomm.ICallService;
import android.util.Log;
-import com.android.telecomm.CallServiceFinder.CallServiceSearchCallback;
import com.android.telecomm.exceptions.CallServiceUnavailableException;
import com.android.telecomm.exceptions.OutgoingCallException;
@@ -35,98 +34,97 @@
* considered a different transport type).
* TODO(santoscordon): Need to add comments on the switchboard optimizer once that it is place.
*/
-class Switchboard {
+final class Switchboard {
/** Used to identify log entries by this class */
private static final String TAG = Switchboard.class.getSimpleName();
+ private CallServiceFinder callServiceFinder = new CallServiceFinder();
+
/**
* Places an outgoing call to the handle passed in. Method asynchronously collects
* {@link ICallService} implementations and passes them along with the handle and contactInfo
* to {@link #placeOutgoingCallInternal} to actually place the call.
*
- * @param handle The handle to dial.
- * @param contactInfo Information about the entity being called.
+ * @param handle The handle to dial. Marked as final so it can be used in the inner class.
+ * @param contactInfo Information about the entity being called. Marked as final so it can
+ * be used in the inner class.
* @param context The application context.
*/
- void placeOutgoingCall(final String handle, final ContactInfo contactInfo,
- final Context context) {
+ void placeOutgoingCall(String handle, ContactInfo contactInfo, Context context) {
+ callServiceFinder.initiateLookup(context);
- CallServiceFinder.findCallServices(context, new CallServiceSearchCallback() {
- @Override
- public void onSearchComplete(List<ICallService> callServices) {
- try {
- placeOutgoingCallInternal(handle, contactInfo, callServices);
- } catch (CallServiceUnavailableException e) {
- // TODO(santoscordon): Handle error
- }
- }
- });
+ // TODO(gilad): Persist the necessary parameters to attempt putting the call through
+ // once the call services become available (likely using some sort of closure).
}
/**
* Places an outgoing call to the handle passed in. Given a list of {@link ICallServices},
* select one and place a call to the handle.
* TODO(santoscordon): How does the CallService selection process work?
+ * TODO(gilad): Wire this logic from CallServiceFinder.updateSwitchboard.
*
* @param handle The handle to dial.
* @param contactInfo Information about the entity being called.
* @param callServices The list of available {@link ICallService}s.
*/
- private void placeOutgoingCallInternal(String handle, ContactInfo contactInfo,
- List<ICallService> callServices) throws CallServiceUnavailableException {
- Log.i(TAG, "Placing and outgoing call.");
-
- if (callServices.isEmpty()) {
- // No call services, bail out.
- // TODO(contacts-team): Add logging?
- // TODO(santoscordon): Does this actually go anywhere considering this method is now
- // asynchronous?
- throw new CallServiceUnavailableException("No CallService found.");
- }
-
- List<ICallService> compatibleCallServices = Lists.newArrayList();
- for (ICallService service : callServices) {
- // TODO(santoscordon): This code needs to be updated to an asynchronous response
- // callback from isCompatibleWith().
- /* if (service.isCompatibleWith(handle)) {
- // NOTE(android-contacts): If we end up taking the liberty to issue
- // calls not using the explicit user input (in case one is provided)
- // and instead pull an alternative method of communication from the
- // specified user-info object, it may be desirable to give precedence
- // to services that can in fact respect the user's intent.
- compatibleCallServices.add(service);
- }
- */
- }
-
- if (compatibleCallServices.isEmpty()) {
- // None of the available call services is suitable for making this call.
- // TODO(contacts-team): Same here re logging.
- throw new CallServiceUnavailableException("No compatible CallService found.");
- }
-
- // NOTE(android-team): At this point we can also prompt the user for
- // preference, i.e. instead of the logic just below.
- if (compatibleCallServices.size() > 1) {
- compatibleCallServices = sort(compatibleCallServices);
- }
- for (ICallService service : compatibleCallServices) {
- try {
- service.call(handle);
- return;
- } catch (RemoteException e) {
- // TODO(santoscordon): Need some proxy for ICallService so that we don't have to
- // avoid RemoteExceptionHandling everywhere. Take a look at how InputMethodService
- // handles this.
- }
- // catch (OutgoingCallException ignored) {
- // TODO(santoscordon): Figure out how OutgoingCallException falls into this. Should
- // RemoteExceptions also be converted to OutgoingCallExceptions thrown by call()?
- }
- }
+// private void placeOutgoingCallInternal(
+// String handle,
+// ContactInfo contactInfo,
+// List<ICallService> callServices) throws CallServiceUnavailableException {
+//
+// Log.i(TAG, "Placing and outgoing call.");
+//
+// if (callServices.isEmpty()) {
+// // No call services, bail out.
+// // TODO(contacts-team): Add logging?
+// // TODO(santoscordon): Does this actually go anywhere considering this method is now
+// // asynchronous?
+// throw new CallServiceUnavailableException("No CallService found.");
+// }
+//
+// List<ICallService> compatibleCallServices = Lists.newArrayList();
+// for (ICallService service : callServices) {
+// // TODO(santoscordon): This code needs to be updated to an asynchronous response
+// // callback from isCompatibleWith().
+// /* if (service.isCompatibleWith(handle)) {
+// // NOTE(android-contacts): If we end up taking the liberty to issue
+// // calls not using the explicit user input (in case one is provided)
+// // and instead pull an alternative method of communication from the
+// // specified user-info object, it may be desirable to give precedence
+// // to services that can in fact respect the user's intent.
+// compatibleCallServices.add(service);
+// }
+// */
+// }
+//
+// if (compatibleCallServices.isEmpty()) {
+// // None of the available call services is suitable for making this call.
+// // TODO(contacts-team): Same here re logging.
+// throw new CallServiceUnavailableException("No compatible CallService found.");
+// }
+//
+// // NOTE(android-team): At this point we can also prompt the user for
+// // preference, i.e. instead of the logic just below.
+// if (compatibleCallServices.size() > 1) {
+// compatibleCallServices = sort(compatibleCallServices);
+// }
+// for (ICallService service : compatibleCallServices) {
+// try {
+// service.call(handle);
+// return;
+// } catch (RemoteException e) {
+// // TODO(santoscordon): Need some proxy for ICallService so that we don't have to
+// // avoid RemoteExceptionHandling everywhere. Take a look at how InputMethodService
+// // handles this.
+// }
+// // catch (OutgoingCallException ignored) {
+// // TODO(santoscordon): Figure out how OutgoingCallException falls into this. Should
+// // RemoteExceptions also be converted to OutgoingCallExceptions thrown by call()?
+// }
+// }
/**
- * Sorts a list of {@link ICallService} ordered by the prefered service for dialing the call.
+ * Sorts a list of {@link ICallService} ordered by the preferred service for dialing the call.
*
* @param callServices The list to order.
*/