diff options
author | Richard MacGregor <rmacgregor@cyngn.com> | 2016-03-10 16:08:36 -0800 |
---|---|---|
committer | Stephen Bird <sbird@cyngn.com> | 2016-04-08 10:21:12 -0700 |
commit | 94ea6ccdfeca0ecb31dde997f8c1337c43941f92 (patch) | |
tree | be7ccd450e5f7894818ffc3f038d3064268c8f63 | |
parent | 58f0d082a69e313fd554eac2904c961222bae10b (diff) | |
download | android_packages_apps_Dialer-94ea6ccdfeca0ecb31dde997f8c1337c43941f92.tar.gz android_packages_apps_Dialer-94ea6ccdfeca0ecb31dde997f8c1337c43941f92.tar.bz2 android_packages_apps_Dialer-94ea6ccdfeca0ecb31dde997f8c1337c43941f92.zip |
Use CALL_ACTION instead of InCallAPI for emergency calls
Don't even attempt to use InCallAPI providers if dialing an emergency
number.
Ticket CD-503
Change-Id: I9633cc499c453a1db557c44eaca802ec13eb96b2
-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; } } |