Fix crash when service unbinding exception happens. am: 576b61991d am: 547c8bddf9 am: 05075e3e4e
Original change: https://android-review.googlesource.com/c/platform/packages/services/Telecomm/+/1437314
Change-Id: I9de4cf76eb845b3d5cff187d6a6a3f3f20d3a0aa
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 0785502..6af999e 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -855,7 +855,7 @@
PhoneAccountHandle delegatePhoneAccountHandle = getDelegatePhoneAccountHandle();
boolean isTargetSameAsRemote = targetPhoneAccountHandle != null
&& targetPhoneAccountHandle.equals(remotePhoneAccountHandle);
- if (delegatePhoneAccountHandle.equals(targetPhoneAccountHandle)) {
+ if (Objects.equals(delegatePhoneAccountHandle, targetPhoneAccountHandle)) {
s.append(">>>");
}
s.append("Target");
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index d685a53..f377e24 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -1901,6 +1901,10 @@
private void sendCrashedInCallServiceNotification(String packageName) {
PackageManager packageManager = mContext.getPackageManager();
CharSequence appName;
+ String systemDialer = mDefaultDialerCache.getSystemDialerApplication();
+ if ((systemDialer != null) && systemDialer.equals(packageName)) {
+ return;
+ }
try {
appName = packageManager.getApplicationLabel(
packageManager.getApplicationInfo(packageName, 0));
diff --git a/src/com/android/server/telecom/TtyManager.java b/src/com/android/server/telecom/TtyManager.java
index 2d04234..dfddb8f 100644
--- a/src/com/android/server/telecom/TtyManager.java
+++ b/src/com/android/server/telecom/TtyManager.java
@@ -49,7 +49,9 @@
IntentFilter intentFilter = new IntentFilter(
TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
- mContext.registerReceiver(mReceiver, intentFilter);
+ mContext.registerReceiver(mReceiver, intentFilter,
+ android.Manifest.permission.MODIFY_PHONE_STATE,
+ null);
updateCurrentTtyMode();
}
diff --git a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
index 0e5ac27..de9fc1a 100644
--- a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
+++ b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
@@ -624,6 +624,7 @@
any(Intent.class), any(ServiceConnection.class), anyInt(), any(UserHandle.class)))
.thenReturn(true);
when(mMockContext.getApplicationInfo()).thenReturn(applicationInfo);
+ when(mDefaultDialerCache.getDefaultDialerApplication(CURRENT_USER_ID)).thenReturn(DEF_PKG);
setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
mInCallController.bindToServices(mMockCall);
@@ -650,7 +651,7 @@
verify(mNotificationManager).notify(eq(NOTIFICATION_TAG),
eq(IN_CALL_SERVICE_NOTIFICATION_ID), any(Notification.class));
- verify(mCallInfo).addInCallService(eq(sysDialerComponentName.flattenToShortString()),
+ verify(mCallInfo).addInCallService(eq(defDialerComponentName.flattenToShortString()),
anyInt(), anyLong(), eq(true));
ArgumentCaptor<Intent> bindIntentCaptor2 = ArgumentCaptor.forClass(Intent.class);
@@ -660,6 +661,7 @@
eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE
| Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS),
eq(UserHandle.CURRENT));
+ assertEquals(sysDialerComponentName, bindIntentCaptor2.getValue().getComponent());
}
/**