From fff6fcfc6887e113e25cfb7a8e07b8b73af0c62c Mon Sep 17 00:00:00 2001 From: wangqi Date: Thu, 31 Aug 2017 15:30:58 -0700 Subject: Use TelecomManager#isInManagedCall starting from O. The TelecomManager#isInCall method returns true anytime the user is in a call. Starting in O, the APIs include support for self-managed ConnectionServices so that other apps like Duo can tell Telecom about its calls. So, if the user is in a Duo call, isInCall would return true. Dialer uses this to determine whether to show the "return to call in progress" when Dialer is launched. Instead, Dialer should use TelecomManager#isInManagedCall, which only returns true if the device is in a managed call which Dialer would know about. Bug: 36991070 Test: none PiperOrigin-RevId: 167200903 Change-Id: I12ac7b893dcbfa2fc842ca5ab356fbbc490a098b --- java/com/android/dialer/app/DialtactsActivity.java | 2 +- .../app/voicemail/VoicemailPlaybackPresenter.java | 2 +- .../dialer/callcomposer/CallComposerActivity.java | 2 +- .../dialer/dialpadview/DialpadFragment.java | 2 +- java/com/android/dialer/telecom/TelecomUtil.java | 22 ++++++++++++++++++++-- .../android/incallui/ReturnToCallController.java | 4 ++-- 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index 3e6b50cae..a4c075c51 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -1410,7 +1410,7 @@ public class DialtactsActivity extends TransactionSafeActivity } private boolean phoneIsInUse() { - return TelecomUtil.isInCall(this); + return TelecomUtil.isInManagedCall(this); } private boolean canIntentBeHandled(Intent intent) { diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java index de4e1cc4a..685357ace 100644 --- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java +++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java @@ -516,7 +516,7 @@ public class VoicemailPlaybackPresenter mView.disableUiElements(); mIsPrepared = false; - if (mContext != null && TelecomUtil.isInCall(mContext)) { + if (mContext != null && TelecomUtil.isInManagedCall(mContext)) { handleError(new IllegalStateException("Cannot play voicemail when call is in progress")); return; } diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java index fa380cc19..4a6cdbbd8 100644 --- a/java/com/android/dialer/callcomposer/CallComposerActivity.java +++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java @@ -438,7 +438,7 @@ public class CallComposerActivity extends AppCompatActivity maybeShowPrivacyToast(data); if (data.hasImageData() && ConfigProviderBindings.get(this).getBoolean("enable_delayed_ec_images", true) - && !TelecomUtil.isInCall(this)) { + && !TelecomUtil.isInManagedCall(this)) { timeoutHandler.postDelayed(placeTelecomCallRunnable, getRCSTimeoutMillis()); startActivity( CallPendingActivity.getIntent( diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index e22250c6f..86a83796e 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -1278,7 +1278,7 @@ public class DialpadFragment extends Fragment * or ringing or dialing, or on hold). */ private boolean isPhoneInUse() { - return getContext() != null && TelecomUtil.isInCall(getContext()); + return getContext() != null && TelecomUtil.isInManagedCall(getContext()); } /** @return true if the phone is a CDMA phone type */ diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java index 573bfe2d9..8ff4b3967 100644 --- a/java/com/android/dialer/telecom/TelecomUtil.java +++ b/java/com/android/dialer/telecom/TelecomUtil.java @@ -21,6 +21,8 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; import android.provider.CallLog.Calls; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; @@ -140,7 +142,11 @@ public abstract class TelecomUtil { return new ArrayList<>(); } - public static boolean isInCall(Context context) { + /** + * Returns true if there is a dialer managed call in progress. Self managed calls starting from O + * are not included. + */ + public static boolean isInManagedCall(Context context) { return instance.isInCall(context); } @@ -234,7 +240,19 @@ public abstract class TelecomUtil { public boolean isInCall(Context context) { if (hasReadPhoneStatePermission(context)) { - return getTelecomManager(context).isInCall(); + // The TelecomManager#isInCall method returns true anytime the user is in a call. + // Starting in O, the APIs include support for self-managed ConnectionServices so that other + // apps like Duo can tell Telecom about its calls. So, if the user is in a Duo call, + // isInCall would return true. + // Dialer uses this to determine whether to show the "return to call in progress" when + // Dialer is launched. + // Instead, Dialer should use TelecomManager#isInManagedCall, which only returns true if the + // device is in a managed call which Dialer would know about. + if (VERSION.SDK_INT >= VERSION_CODES.O) { + return getTelecomManager(context).isInManagedCall(); + } else { + return getTelecomManager(context).isInCall(); + } } return false; } diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java index e5c761820..e54102ca8 100644 --- a/java/com/android/incallui/ReturnToCallController.java +++ b/java/com/android/incallui/ReturnToCallController.java @@ -94,7 +94,7 @@ public class ReturnToCallController implements InCallUiListener, Listener, Audio if (showing) { hide(); } else { - if (TelecomUtil.isInCall(context)) { + if (TelecomUtil.isInManagedCall(context)) { show(); } } @@ -175,7 +175,7 @@ public class ReturnToCallController implements InCallUiListener, Listener, Audio } if (bubble != null && bubble.isVisible() - && (!TelecomUtil.isInCall(context) + && (!TelecomUtil.isInManagedCall(context) || CallList.getInstance().getActiveOrBackgroundCall() != null)) { bubble.showText(context.getText(R.string.incall_call_ended)); } -- cgit v1.2.3