From b82e8dae149a9f247e5c9fcae02ced460670b0e7 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Sat, 18 Apr 2015 14:37:50 -0700 Subject: Use TelecomManager.placeCall API Bug: 20348183 Change-Id: If1b193f933b4a7b2b322784b0cbbc66c210b25df --- AndroidManifest.xml | 1 - src/com/android/dialer/CallDetailActivity.java | 4 +- src/com/android/dialer/DialtactsActivity.java | 6 +- src/com/android/dialer/calllog/IntentProvider.java | 8 +- .../android/dialer/dialpad/DialpadFragment.java | 8 +- .../interactions/PhoneNumberInteraction.java | 4 +- src/com/android/dialer/util/CallIntentUtil.java | 144 ++++++++++++++++++++ src/com/android/dialer/util/DialerUtils.java | 10 +- .../android/dialer/util/PrivilegedCallUtil.java | 145 --------------------- .../src/com/android/dialer/util/TestConstants.java | 2 +- 10 files changed, 165 insertions(+), 167 deletions(-) create mode 100644 src/com/android/dialer/util/CallIntentUtil.java delete mode 100644 src/com/android/dialer/util/PrivilegedCallUtil.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5b7944d2c..8ca8e4c97 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -19,7 +19,6 @@ coreApp="true"> - diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java index 5dae9d07d..dbcfa64af 100644 --- a/src/com/android/dialer/CallDetailActivity.java +++ b/src/com/android/dialer/CallDetailActivity.java @@ -63,7 +63,7 @@ import com.android.dialer.calllog.PhoneNumberDisplayHelper; import com.android.dialer.calllog.PhoneNumberUtilsWrapper; import com.android.dialer.util.AsyncTaskExecutor; import com.android.dialer.util.AsyncTaskExecutors; -import com.android.dialer.util.PrivilegedCallUtil; +import com.android.dialer.util.CallIntentUtil; import com.android.dialer.util.DialerUtils; import com.android.dialer.voicemail.VoicemailPlaybackFragment; import com.android.dialer.voicemail.VoicemailStatusHelper; @@ -317,7 +317,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware getSystemService(Context.TELEPHONY_SERVICE); if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) { DialerUtils.startActivityWithErrorToast(this, - PrivilegedCallUtil.getCallIntent(Uri.fromParts(PhoneAccount.SCHEME_TEL, + CallIntentUtil.getCallIntent(Uri.fromParts(PhoneAccount.SCHEME_TEL, mNumber, null)), R.string.call_not_available); return true; } diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 787b6fae4..2bda09184 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -82,7 +82,7 @@ import com.android.dialer.list.SearchFragment; import com.android.dialer.list.SmartDialSearchFragment; import com.android.dialer.list.SpeedDialFragment; import com.android.dialer.settings.DialerSettingsActivity; -import com.android.dialer.util.PrivilegedCallUtil; +import com.android.dialer.util.CallIntentUtil; import com.android.dialer.util.DialerUtils; import com.android.dialer.widget.ActionBarController; import com.android.dialer.widget.SearchEditTextLayout; @@ -1158,8 +1158,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O @Override public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) { Intent intent = isVideoCall ? - PrivilegedCallUtil.getVideoCallIntent(phoneNumber, getCallOrigin()) : - PrivilegedCallUtil.getCallIntent(phoneNumber, getCallOrigin()); + CallIntentUtil.getVideoCallIntent(phoneNumber, getCallOrigin()) : + CallIntentUtil.getCallIntent(phoneNumber, getCallOrigin()); DialerUtils.startActivityWithErrorToast(this, intent); mClearSearchOnPause = true; } diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java index 2bd3f2eef..73c7e8212 100644 --- a/src/com/android/dialer/calllog/IntentProvider.java +++ b/src/com/android/dialer/calllog/IntentProvider.java @@ -30,7 +30,7 @@ import com.android.contacts.common.model.ContactLoader; import com.android.dialer.CallDetailActivity; import com.android.dialer.DialtactsActivity; import com.android.dialer.PhoneCallDetails; -import com.android.dialer.util.PrivilegedCallUtil; +import com.android.dialer.util.CallIntentUtil; import java.util.ArrayList; @@ -54,7 +54,7 @@ public abstract class IntentProvider { return new IntentProvider() { @Override public Intent getIntent(Context context) { - return PrivilegedCallUtil.getCallIntent(number, accountHandle); + return CallIntentUtil.getCallIntent(number, accountHandle); } }; } @@ -68,7 +68,7 @@ public abstract class IntentProvider { return new IntentProvider() { @Override public Intent getIntent(Context context) { - return PrivilegedCallUtil.getVideoCallIntent(number, accountHandle); + return CallIntentUtil.getVideoCallIntent(number, accountHandle); } }; } @@ -77,7 +77,7 @@ public abstract class IntentProvider { return new IntentProvider() { @Override public Intent getIntent(Context context) { - return PrivilegedCallUtil.getVoicemailIntent(); + return CallIntentUtil.getVoicemailIntent(); } }; } diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index f18903b93..d8b507eaa 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -78,7 +78,7 @@ import com.android.dialer.NeededForReflection; import com.android.dialer.R; import com.android.dialer.SpecialCharSequenceMgr; import com.android.dialer.calllog.PhoneAccountUtils; -import com.android.dialer.util.PrivilegedCallUtil; +import com.android.dialer.util.CallIntentUtil; import com.android.dialer.util.DialerUtils; import com.android.phone.common.CallLogAsync; import com.android.phone.common.HapticFeedback; @@ -1001,7 +1001,7 @@ public class DialpadFragment extends Fragment } public void callVoicemail() { - DialerUtils.startActivityWithErrorToast(getActivity(), PrivilegedCallUtil + DialerUtils.startActivityWithErrorToast(getActivity(), CallIntentUtil .getVoicemailIntent()); hideAndClearDialpad(false); } @@ -1098,7 +1098,7 @@ public class DialpadFragment extends Fragment // Clear the digits just in case. clearDialpad(); } else { - final Intent intent = PrivilegedCallUtil.getCallIntent(number, + final Intent intent = CallIntentUtil.getCallIntent(number, (getActivity() instanceof DialtactsActivity ? ((DialtactsActivity) getActivity()).getCallOrigin() : null)); DialerUtils.startActivityWithErrorToast(getActivity(), intent); @@ -1616,7 +1616,7 @@ public class DialpadFragment extends Fragment } private Intent newFlashIntent() { - final Intent intent = PrivilegedCallUtil.getCallIntent(EMPTY_NUMBER); + final Intent intent = CallIntentUtil.getCallIntent(EMPTY_NUMBER); intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true); return intent; } diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java index 78c468bbc..8d6de7162 100644 --- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java +++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java @@ -52,7 +52,7 @@ import com.android.contacts.common.activity.TransactionSafeActivity; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.R; import com.android.dialer.contact.ContactUpdateService; -import com.android.dialer.util.PrivilegedCallUtil; +import com.android.dialer.util.CallIntentUtil; import com.android.dialer.util.DialerUtils; import com.google.common.annotations.VisibleForTesting; @@ -322,7 +322,7 @@ public class PhoneNumberInteraction implements OnLoadCompleteListener { Intent.ACTION_SENDTO, Uri.fromParts("sms", phoneNumber, null)); break; default: - intent = PrivilegedCallUtil.getCallIntent(phoneNumber, callOrigin); + intent = CallIntentUtil.getCallIntent(phoneNumber, callOrigin); break; } DialerUtils.startActivityWithErrorToast(context, intent); diff --git a/src/com/android/dialer/util/CallIntentUtil.java b/src/com/android/dialer/util/CallIntentUtil.java new file mode 100644 index 000000000..2d9fef3d6 --- /dev/null +++ b/src/com/android/dialer/util/CallIntentUtil.java @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.dialer.util; + +import android.content.Intent; +import android.net.Uri; +import android.telecom.PhoneAccount; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.telecom.VideoProfile; + +import com.android.contacts.common.CallUtil; +import com.android.phone.common.PhoneConstants; + +/** + * Utilities for creation of {@link Intent#ACTION_CALL} intents. + */ +public class CallIntentUtil { + + public static final String CALL_ACTION = Intent.ACTION_CALL; + + /** + * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined + * automatically. + */ + public static Intent getCallIntent(String number) { + return getCallIntent(number, null, null); + } + + /** + * Return an Intent for making a phone call. A given Uri will be used as is (without any + * sanity check). + */ + public static Intent getCallIntent(Uri uri) { + return getCallIntent(uri, null, null); + } + + /** + * A variant of {@link #getCallIntent(String)} but also accept a call origin. + * For more information about call origin, see comments in Phone package (PhoneApp). + */ + public static Intent getCallIntent(String number, String callOrigin) { + return getCallIntent(CallUtil.getCallUri(number), callOrigin, null); + } + + /** + * A variant of {@link #getCallIntent(String)} but also include {@code Account}. + */ + public static Intent getCallIntent(String number, PhoneAccountHandle accountHandle) { + return getCallIntent(number, null, accountHandle); + } + + /** + * A variant of {@link #getCallIntent(android.net.Uri)} but also include {@code Account}. + */ + public static Intent getCallIntent(Uri uri, PhoneAccountHandle accountHandle) { + return getCallIntent(uri, null, accountHandle); + } + + /** + * A variant of {@link #getCallIntent(String, String)} but also include {@code Account}. + */ + public static Intent getCallIntent( + String number, String callOrigin, PhoneAccountHandle accountHandle) { + return getCallIntent(CallUtil.getCallUri(number), callOrigin, accountHandle); + } + + /** + * A variant of {@link #getCallIntent(android.net.Uri)} but also accept a call + * origin and {@code Account}. + * For more information about call origin, see comments in Phone package (PhoneApp). + */ + public static Intent getCallIntent( + Uri uri, String callOrigin, PhoneAccountHandle accountHandle) { + return getCallIntent(uri, callOrigin, accountHandle, + VideoProfile.VideoState.AUDIO_ONLY); + } + + /** + * A variant of {@link #getCallIntent(String, String)} for starting a video call. + */ + public static Intent getVideoCallIntent(String number, String callOrigin) { + return getCallIntent(CallUtil.getCallUri(number), callOrigin, null, + VideoProfile.VideoState.BIDIRECTIONAL); + } + + /** + * A variant of {@link #getCallIntent(String, String, android.telecom.PhoneAccountHandle)} for + * starting a video call. + */ + public static Intent getVideoCallIntent( + String number, String callOrigin, PhoneAccountHandle accountHandle) { + return getCallIntent(CallUtil.getCallUri(number), callOrigin, accountHandle, + VideoProfile.VideoState.BIDIRECTIONAL); + } + + /** + * A variant of {@link #getCallIntent(String, String, android.telecom.PhoneAccountHandle)} for + * starting a video call. + */ + public static Intent getVideoCallIntent(String number, PhoneAccountHandle accountHandle) { + return getVideoCallIntent(number, null, accountHandle); + } + + /** + * A variant of {@link #getCallIntent(android.net.Uri)} for calling Voicemail. + */ + public static Intent getVoicemailIntent() { + return getCallIntent(Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null)); + } + + /** + * A variant of {@link #getCallIntent(android.net.Uri)} but also accept a call + * origin and {@code Account} and {@code VideoCallProfile} state. + * For more information about call origin, see comments in Phone package (PhoneApp). + */ + public static Intent getCallIntent( + Uri uri, String callOrigin, PhoneAccountHandle accountHandle, int videoState) { + final Intent intent = new Intent(CALL_ACTION, uri); + intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, videoState); + if (callOrigin != null) { + intent.putExtra(PhoneConstants.EXTRA_CALL_ORIGIN, callOrigin); + } + if (accountHandle != null) { + intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle); + } + + return intent; + } +} diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java index d59deb4ef..3899b3736 100644 --- a/src/com/android/dialer/util/DialerUtils.java +++ b/src/com/android/dialer/util/DialerUtils.java @@ -71,9 +71,8 @@ public class DialerUtils { */ public static void startActivityWithErrorToast(Context context, Intent intent, int msgId) { try { - if ((Intent.ACTION_CALL.equals(intent.getAction()) - || Intent.ACTION_CALL_PRIVILEGED.equals(intent.getAction())) - && context instanceof Activity) { + if ((CallIntentUtil.CALL_ACTION.equals(intent.getAction()) + && context instanceof Activity)) { // All dialer-initiated calls should pass the touch point to the InCallUI Point touchPoint = TouchPointManager.getInstance().getPoint(); if (touchPoint.x != 0 || touchPoint.y != 0) { @@ -81,8 +80,9 @@ public class DialerUtils { extras.putParcelable(TouchPointManager.TOUCH_POINT, touchPoint); intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras); } - - ((Activity) context).startActivityForResult(intent, 0); + final TelecomManager tm = + (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); + tm.placeCall(intent.getData(), intent.getExtras()); } else { context.startActivity(intent); } diff --git a/src/com/android/dialer/util/PrivilegedCallUtil.java b/src/com/android/dialer/util/PrivilegedCallUtil.java deleted file mode 100644 index 367f36566..000000000 --- a/src/com/android/dialer/util/PrivilegedCallUtil.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.dialer.util; - -import android.content.Intent; -import android.net.Uri; -import android.telecom.PhoneAccount; -import android.telecom.PhoneAccountHandle; -import android.telecom.TelecomManager; -import android.telecom.VideoProfile; - -import com.android.contacts.common.CallUtil; -import com.android.phone.common.PhoneConstants; - -/** - * Utilities related to calls that can only be used by system apps. These - * use {@link Intent#ACTION_CALL_PRIVILEGED}. - */ -public class PrivilegedCallUtil { - - public static final String CALL_ACTION = Intent.ACTION_CALL_PRIVILEGED; - - /** - * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined - * automatically. - */ - public static Intent getCallIntent(String number) { - return getCallIntent(number, null, null); - } - - /** - * Return an Intent for making a phone call. A given Uri will be used as is (without any - * sanity check). - */ - public static Intent getCallIntent(Uri uri) { - return getCallIntent(uri, null, null); - } - - /** - * A variant of {@link #getCallIntent(String)} but also accept a call origin. - * For more information about call origin, see comments in Phone package (PhoneApp). - */ - public static Intent getCallIntent(String number, String callOrigin) { - return getCallIntent(CallUtil.getCallUri(number), callOrigin, null); - } - - /** - * A variant of {@link #getCallIntent(String)} but also include {@code Account}. - */ - public static Intent getCallIntent(String number, PhoneAccountHandle accountHandle) { - return getCallIntent(number, null, accountHandle); - } - - /** - * A variant of {@link #getCallIntent(android.net.Uri)} but also include {@code Account}. - */ - public static Intent getCallIntent(Uri uri, PhoneAccountHandle accountHandle) { - return getCallIntent(uri, null, accountHandle); - } - - /** - * A variant of {@link #getCallIntent(String, String)} but also include {@code Account}. - */ - public static Intent getCallIntent( - String number, String callOrigin, PhoneAccountHandle accountHandle) { - return getCallIntent(CallUtil.getCallUri(number), callOrigin, accountHandle); - } - - /** - * A variant of {@link #getCallIntent(android.net.Uri)} but also accept a call - * origin and {@code Account}. - * For more information about call origin, see comments in Phone package (PhoneApp). - */ - public static Intent getCallIntent( - Uri uri, String callOrigin, PhoneAccountHandle accountHandle) { - return getCallIntent(uri, callOrigin, accountHandle, - VideoProfile.VideoState.AUDIO_ONLY); - } - - /** - * A variant of {@link #getCallIntent(String, String)} for starting a video call. - */ - public static Intent getVideoCallIntent(String number, String callOrigin) { - return getCallIntent(CallUtil.getCallUri(number), callOrigin, null, - VideoProfile.VideoState.BIDIRECTIONAL); - } - - /** - * A variant of {@link #getCallIntent(String, String, android.telecom.PhoneAccountHandle)} for - * starting a video call. - */ - public static Intent getVideoCallIntent( - String number, String callOrigin, PhoneAccountHandle accountHandle) { - return getCallIntent(CallUtil.getCallUri(number), callOrigin, accountHandle, - VideoProfile.VideoState.BIDIRECTIONAL); - } - - /** - * A variant of {@link #getCallIntent(String, String, android.telecom.PhoneAccountHandle)} for - * starting a video call. - */ - public static Intent getVideoCallIntent(String number, PhoneAccountHandle accountHandle) { - return getVideoCallIntent(number, null, accountHandle); - } - - /** - * A variant of {@link #getCallIntent(android.net.Uri)} for calling Voicemail. - */ - public static Intent getVoicemailIntent() { - return getCallIntent(Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null)); - } - - /** - * A variant of {@link #getCallIntent(android.net.Uri)} but also accept a call - * origin and {@code Account} and {@code VideoCallProfile} state. - * For more information about call origin, see comments in Phone package (PhoneApp). - */ - public static Intent getCallIntent( - Uri uri, String callOrigin, PhoneAccountHandle accountHandle, int videoState) { - final Intent intent = new Intent(CALL_ACTION, uri); - intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, videoState); - if (callOrigin != null) { - intent.putExtra(PhoneConstants.EXTRA_CALL_ORIGIN, callOrigin); - } - if (accountHandle != null) { - intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle); - } - - return intent; - } -} diff --git a/tests/src/com/android/dialer/util/TestConstants.java b/tests/src/com/android/dialer/util/TestConstants.java index ff4a2faad..8ebf7f1e9 100644 --- a/tests/src/com/android/dialer/util/TestConstants.java +++ b/tests/src/com/android/dialer/util/TestConstants.java @@ -1,5 +1,5 @@ package com.android.dialer.util; public class TestConstants { - public static final String CALL_INTENT_ACTION = PrivilegedCallUtil.CALL_ACTION; + public static final String CALL_INTENT_ACTION = CallIntentUtil.CALL_ACTION; } -- cgit v1.2.3