summaryrefslogtreecommitdiffstats
path: root/telecomm/java/android/telecomm/CallServiceSelector.java
diff options
context:
space:
mode:
Diffstat (limited to 'telecomm/java/android/telecomm/CallServiceSelector.java')
-rw-r--r--telecomm/java/android/telecomm/CallServiceSelector.java157
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);
}