diff options
Diffstat (limited to 'telecomm/java/android/telecomm/CallServiceSelector.java')
-rw-r--r-- | telecomm/java/android/telecomm/CallServiceSelector.java | 157 |
1 files changed, 29 insertions, 128 deletions
diff --git a/telecomm/java/android/telecomm/CallServiceSelector.java b/telecomm/java/android/telecomm/CallServiceSelector.java index 44181d1..8eec142 100644 --- a/telecomm/java/android/telecomm/CallServiceSelector.java +++ b/telecomm/java/android/telecomm/CallServiceSelector.java @@ -23,145 +23,58 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; -import android.util.Log; import com.android.internal.os.SomeArgs; import com.android.internal.telecomm.ICallServiceSelector; -import com.android.internal.telecomm.ICallServiceSelectionResponse; -import com.android.internal.telecomm.ICallSwitchabilityResponse; +import com.android.internal.telecomm.ICallServiceSelectorAdapter; import java.util.List; /** * Allows for the organization of {@link CallService}s for outbound calls. Given a call and list of * {@link CallService} IDs, order the list in terms of priority and return it using - * {@link #select(CallInfo, List, CallServiceSelectionResponse)}. <br /> - * <br /> - * Also determine whether a call is switchable (can be moved between {@link CallService}s) or not - * using {@link #isSwitchable(CallInfo, CallSwitchabilityResponse)}. + * {@link #select(CallInfo, List)}. */ public abstract class CallServiceSelector extends Service { - private static final String TAG = CallServiceSelector.class.getSimpleName(); - - /** - * Used to tell {@link #mHandler} to move the call to - * {@link CallServiceSelector#isSwitchable(CallInfo, CallSwitchabilityResponse)} to the main - * thread. - */ - private static final int MSG_IS_SWITCHABLE = 1; - - /** - * Used to tell {@link #mHandler} to move the call to - * {@link #select(CallInfo, List, CallServiceSelectionResponse)} to the main thread. - */ - private static final int MSG_SELECT_CALL_SERVICES = 2; - - /** - * Listens for responses from the {@link CallServiceSelector} and passes them back through the - * Binder interface. This must be called from - * {@link CallServiceSelector#isSwitchable(CallInfo, CallSwitchabilityResponse)}. - */ - public interface CallSwitchabilityResponse { - /** - * Mark a call as switchable (or not). This must be called by - * {@link CallServiceSelector#isSwitchable(CallInfo, CallSwitchabilityResponse)}. - * - * @param isSwitchable Whether the call was switchable or not. - */ - void setSwitchable(boolean isSwitchable); - } - - /** - * Listens for responses from the {@link CallServiceSelector} and passes them back through the - * Binder interface. This must be called from - * {@link CallServiceSelector#select(CallInfo, List, CallServiceSelectionResponse)}. - */ - public interface CallServiceSelectionResponse { - /** - * Sets the prioritized {@link CallServiceDescriptor}s for the given {@link CallInfo}. This - * must be called by - * {@link CallServiceSelector#select(CallInfo, List, CallServiceSelectionResponse)}. - * - * @param callServices The prioritized {@link CallServiceDescriptor}s. - */ - void setSelectedCallServices(List<CallServiceDescriptor> callServices); - } + private static final int MSG_SET_CALL_SERVICE_SELECTOR_ADAPTER = 0; + private static final int MSG_SELECT = 1; /** Handler to move client-bound method calls to the main thread. */ private final Handler mHandler = new Handler(Looper.getMainLooper()) { - @SuppressWarnings("unchecked") @Override public void handleMessage(Message msg) { - final SomeArgs args = (SomeArgs) msg.obj; - try { - switch (msg.what) { - case MSG_IS_SWITCHABLE: - isSwitchable((CallInfo) args.arg1, (CallSwitchabilityResponse) args.arg2); - break; - case MSG_SELECT_CALL_SERVICES: - select((CallInfo) args.arg1, (List<CallServiceDescriptor>) args.arg2, - (CallServiceSelectionResponse) args.arg3); - break; - } - } finally { - if (args != null) { - args.recycle(); - } + switch (msg.what) { + case MSG_SET_CALL_SERVICE_SELECTOR_ADAPTER: + CallServiceSelectorAdapter adapter = new CallServiceSelectorAdapter( + (ICallServiceSelectorAdapter) msg.obj); + setCallServiceSelectorAdapter(adapter); + break; + case MSG_SELECT: + SomeArgs args = (SomeArgs) msg.obj; + try { + select((CallInfo) args.arg1, (List<CallServiceDescriptor>) args.arg2); + } finally { + args.recycle(); + } + break; } } }; /** Manages the binder calls so that the implementor does not need to deal with it. */ - private final class CallServiceSelectorBinder extends ICallServiceSelector.Stub - implements CallSwitchabilityResponse, CallServiceSelectionResponse { - private ICallSwitchabilityResponse mSwitchabilityResponse; - private ICallServiceSelectionResponse mSelectionResponse; - + private final class CallServiceSelectorBinder extends ICallServiceSelector.Stub { @Override - public void isSwitchable(CallInfo callInfo, ICallSwitchabilityResponse response) - throws RemoteException { - mSwitchabilityResponse = response; - SomeArgs args = SomeArgs.obtain(); - args.arg1 = callInfo; - args.arg2 = this; - mHandler.obtainMessage(MSG_IS_SWITCHABLE, args).sendToTarget(); + public void setCallServiceSelectorAdapter(ICallServiceSelectorAdapter adapter) { + mHandler.obtainMessage(MSG_SET_CALL_SERVICE_SELECTOR_ADAPTER, adapter) + .sendToTarget(); } @Override - public void select(CallInfo callInfo, List<CallServiceDescriptor> descriptors, - ICallServiceSelectionResponse response) throws RemoteException { - mSelectionResponse = response; + public void select(CallInfo callInfo, List<CallServiceDescriptor> descriptors) { SomeArgs args = SomeArgs.obtain(); args.arg1 = callInfo; args.arg2 = descriptors; - args.arg3 = this; - mHandler.obtainMessage(MSG_SELECT_CALL_SERVICES, args).sendToTarget(); - } - - @Override - public void setSwitchable(boolean isSwitchable) { - if (mSwitchabilityResponse != null) { - try { - mSwitchabilityResponse.setIsSwitchable(isSwitchable); - } catch (RemoteException e) { - Log.d(TAG, "Failed to set switchability", e); - } - } else { - Log.wtf(TAG, "Switchability response object not set"); - } - } - - @Override - public void setSelectedCallServices(List<CallServiceDescriptor> callServices) { - if (mSelectionResponse != null) { - try { - mSelectionResponse.setSelectedCallServiceDescriptors(callServices); - } catch (RemoteException e) { - Log.d(TAG, "Failed to set call services", e); - } - } else { - Log.wtf(TAG, "Selector response object not set"); - } + mHandler.obtainMessage(MSG_SELECT, args).sendToTarget(); } } @@ -177,31 +90,19 @@ public abstract class CallServiceSelector extends Service { } /** - * Determines whether the given call is switchable. That is, whether the call can be moved to - * another {@link CallService} seamlessly. Once this is determined, the result is passed to the - * given {@link CallSwitchabilityResponse} listener.<br /> - * <br /> - * This method is called on the main thread and is not safe to block. + * Sets an adapter that allows the selector to communicate with Telecomm. * - * @param callInfo The call being potentially switched between {@link CallService}s. - * @param response The {@link CallSwitchabilityResponse} listener to call back with the result. + * @param adapter Adapter object for communicating with Telecomm. */ - protected abstract void isSwitchable(CallInfo callInfo, CallSwitchabilityResponse response); + protected abstract void setCallServiceSelectorAdapter(CallServiceSelectorAdapter adapter); /** * Given a list of {@link CallServiceDescriptor}s, order them into a prioritized list and return - * them through the given {@link CallServiceSelectionResponse} listener.<br /> - * <br /> - * This method is called on the UI thread and is not safe to block. + * them through {@link CallServiceSelectorAdapter#select}. * * @param callInfo The call being placed using the {@link CallService}s. * @param descriptors The descriptors of the available {@link CallService}s with which to place * the call. - * @param response The {@link CallServiceSelectionResponse} listener to call back with the - * result. */ - protected abstract void select( - CallInfo callInfo, - List<CallServiceDescriptor> descriptors, - CallServiceSelectionResponse response); + protected abstract void select(CallInfo callInfo, List<CallServiceDescriptor> descriptors); } |