Order Call Services explicitly in TelephonySelector.
Change-Id: Ib690cb70d86ba472487c13af5fa88b853a789f46
diff --git a/src/com/android/services/telephony/TelephonyCallServiceSelector.java b/src/com/android/services/telephony/TelephonyCallServiceSelector.java
index 8bfe5ef..b1c5fc2 100644
--- a/src/com/android/services/telephony/TelephonyCallServiceSelector.java
+++ b/src/com/android/services/telephony/TelephonyCallServiceSelector.java
@@ -33,26 +33,42 @@
protected void select(CallInfo callInfo, List<CallServiceDescriptor> descriptors) {
ArrayList<CallServiceDescriptor> selectedDescriptors =
new ArrayList<CallServiceDescriptor>();
+
+ CallServiceDescriptor descriptor = getDescriptor(descriptors, CdmaCallService.class);
+ if (descriptor != null) {
+ if (CdmaCallService.shouldSelect(this, callInfo)) {
+ selectedDescriptors.add(descriptor);
+ }
+ }
+ descriptor = getDescriptor(descriptors, GsmCallService.class);
+ if (descriptor != null) {
+ if (GsmCallService.shouldSelect(this, callInfo)) {
+ selectedDescriptors.add(descriptor);
+ }
+ }
+ descriptor = getDescriptor(descriptors, SipCallService.class);
+ if (descriptor != null) {
+ if (SipCallService.shouldSelect(this, callInfo)) {
+ selectedDescriptors.add(descriptor);
+ }
+ }
+
+ getAdapter().setSelectedCallServices(callInfo.getId(), selectedDescriptors);
+ }
+
+ private CallServiceDescriptor getDescriptor(
+ List<CallServiceDescriptor> descriptors, Class<?> clazz) {
+
for (CallServiceDescriptor descriptor : descriptors) {
if (!getPackageName().equals(descriptor.getServiceComponent().getPackageName())) {
continue;
}
- String name = descriptor.getServiceComponent().getClassName();
- if (name.equals(CdmaConnectionService.class.getName())) {
- if (CdmaConnectionService.canCall(this, callInfo.getHandle())) {
- selectedDescriptors.add(descriptor);
- }
- } else if (name.equals(GsmConnectionService.class.getName())) {
- if (GsmConnectionService.canCall(this, callInfo.getHandle())) {
- selectedDescriptors.add(descriptor);
- }
- } else if (name.equals(SipConnectionService.class.getName())) {
- if (SipConnectionService.canCall(this, callInfo.getHandle())) {
- selectedDescriptors.add(descriptor);
- }
+ if (clazz.getName().equals(descriptor.getServiceComponent().getClassName())) {
+ return descriptor;
}
}
- getAdapter().setSelectedCallServices(callInfo.getId(), selectedDescriptors);
+
+ return null;
}
}