diff options
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 30 | ||||
-rw-r--r-- | src/com/android/dialer/dialpad/DialpadFragment.java | 3 | ||||
-rw-r--r-- | src/com/android/dialer/list/SearchFragment.java | 19 |
3 files changed, 34 insertions, 18 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 2e3d2562f..e76653eb6 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -41,6 +41,8 @@ import android.os.Trace; import android.provider.CallLog.Calls; import android.preference.PreferenceManager; import android.provider.ContactsContract; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.CommonDataKinds.SipAddress; import android.speech.RecognizerIntent; import android.support.v4.view.ViewPager; import android.telecom.PhoneAccount; @@ -1484,12 +1486,21 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // Only use selected call method if call method spinner is visible (t9 dialpad or search) CallMethodInfo cmi = isInSearchUi() || isDialpadShown() ? mCurrentCallMethod : null; - if ((cmi == null || !cmi.mIsInCallProvider) && - (TextUtils.isEmpty(mimeType) || - TextUtils.equals(mimeType, - ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) || - TextUtils.equals(mimeType, - ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE))) { + boolean isInCallProvider = (cmi != null && cmi.mIsInCallProvider); + boolean isEmergencyNumber = PhoneNumberUtils.isEmergencyNumber(phoneNumber); + boolean isRegularCallableMimeType = TextUtils.isEmpty(mimeType) || + TextUtils.equals(mimeType, Phone.CONTENT_ITEM_TYPE) || + TextUtils.equals(mimeType, SipAddress.CONTENT_ITEM_TYPE); + + // Assume InCallAPI Provider only if not emergency number and selected call method is incall + // provider or number's mimetype is null or a non-incall mimetype + if (!isEmergencyNumber && (isInCallProvider || !isRegularCallableMimeType)) { + StartCallRequest request = new StartCallRequest(phoneNumber, OriginCodes.CONTACT_SEARCH, + 0, new StartInCallCallReceiver(new Handler(Looper.getMainLooper()))); + + InCallServices.getInstance().startVoiceCallForMimeType( + AmbientConnection.CLIENT.get(this), mimeType, request); + } else { // If no sim is selected, or emergency callmethod selected, or number is // an emergency number, phone account handle should be null, and will use the // default account. @@ -1501,13 +1512,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O IntentUtil.getVideoCallIntent(phoneNumber, getCallOrigin()) : IntentUtil.getCallIntent(phoneNumber, getCallOrigin(), handle); DialerUtils.startActivityWithErrorToast(this, intent); - } else { - StartCallRequest request = new StartCallRequest(phoneNumber, - OriginCodes.CONTACT_SEARCH, 0, - new StartInCallCallReceiver(new Handler(Looper.getMainLooper()))); - - InCallServices.getInstance().startVoiceCallForMimeType( - AmbientConnection.CLIENT.get(this), mimeType, request); } mClearSearchOnPause = true; } diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index 94c324db0..399564e71 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -1907,7 +1907,8 @@ public class DialpadFragment extends Fragment } private void startCall(String number) { - if (mCurrentCallMethodInfo != null && mCurrentCallMethodInfo.mIsInCallProvider) { + if (mCurrentCallMethodInfo != null && mCurrentCallMethodInfo.mIsInCallProvider && + !PhoneNumberUtils.isEmergencyNumber(number)) { mCurrentCallMethodInfo.placeCall(OriginCodes.DIALPAD_DIRECT_DIAL, number, getActivity(), false, true); } else { diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java index 9bc1bd7db..2088e2405 100644 --- a/src/com/android/dialer/list/SearchFragment.java +++ b/src/com/android/dialer/list/SearchFragment.java @@ -22,12 +22,15 @@ import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.app.DialogFragment; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; +import android.telecom.PhoneAccountHandle; +import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -294,7 +297,8 @@ public class SearchFragment extends PhoneNumberPickerFragment switch (shortcutType) { case DialerPhoneNumberListAdapter.SHORTCUT_INVALID: - if (getCurrentCallMethod().mIsInCallProvider) { + number = adapter.getQueryString(); + if (getCurrentCallMethod().mIsInCallProvider && !PhoneNumberUtils.isEmergencyNumber(number)) { onProviderClick(position, getCurrentCallMethod()); } else { super.onItemClick(position, id); @@ -302,7 +306,7 @@ public class SearchFragment extends PhoneNumberPickerFragment break; case DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL: number = adapter.getQueryString(); - if (getCurrentCallMethod().mIsInCallProvider) { + if (getCurrentCallMethod().mIsInCallProvider && !PhoneNumberUtils.isEmergencyNumber(number)) { placePSTNCall(number, getCurrentCallMethod()); } else { listener = getOnPhoneNumberPickerListener(); @@ -342,8 +346,15 @@ public class SearchFragment extends PhoneNumberPickerFragment int truePosition = adapter.getShortcutTypeFromPosition(position, true); int index = DialerPhoneNumberListAdapter.SHORTCUT_COUNT - truePosition - 1; number = adapter.getQueryString(); - CallMethodInfo cmi = adapter.getProviders().get(index); - cmi.placeCall(OriginCodes.DIALPAD_T9_SEARCH, number, getContext(), false, true); + if (!PhoneNumberUtils.isEmergencyNumber(number)) { + CallMethodInfo cmi = adapter.getProviders().get(index); + cmi.placeCall(OriginCodes.DIALPAD_T9_SEARCH, number, getContext(), false, true); + } else { + listener = getOnPhoneNumberPickerListener(); + if (listener != null && !checkForProhibitedPhoneNumber(number)) { + listener.onCallNumberDirectly(number); + } + } break; } } |