diff options
author | 2025-03-03 12:17:03 -0800 | |
---|---|---|
committer | 2025-03-03 12:17:03 -0800 | |
commit | 1e6bca7ffcac0f3401a1788e833139844984e258 (patch) | |
tree | 377c6330f6c305cbb781d2a335b87612e4ae1c79 | |
parent | 8c39920ec894bbe66f05801f3f2ab02ad02165e6 (diff) | |
parent | f7e06adf61d555cf3756fdee611c37b0f788afec (diff) |
Merge "Revert^2 "Query for contacts in the same user as the call when deciding trusted"" into main
-rw-r--r-- | service/java/com/android/ecm/EnhancedConfirmationService.java | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/service/java/com/android/ecm/EnhancedConfirmationService.java b/service/java/com/android/ecm/EnhancedConfirmationService.java index 46eecd69c..2e83a802b 100644 --- a/service/java/com/android/ecm/EnhancedConfirmationService.java +++ b/service/java/com/android/ecm/EnhancedConfirmationService.java @@ -34,6 +34,7 @@ import android.app.ecm.IEnhancedConfirmationManager; import android.app.role.RoleManager; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInstaller; @@ -44,6 +45,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Binder; import android.os.Build; +import android.os.Bundle; import android.os.Looper; import android.os.SystemConfigManager; import android.os.UserHandle; @@ -114,7 +116,6 @@ public class EnhancedConfirmationService extends SystemService { new EnhancedConfirmationManagerLocalImpl(this)); } - private ContentResolver mContentResolver; private TelephonyManager mTelephonyManager; @GuardedBy("mUserAccessibilityManagers") @@ -132,7 +133,6 @@ public class EnhancedConfirmationService extends SystemService { systemConfigManager.getEnhancedConfirmationTrustedInstallers()); publishBinderService(Context.ECM_ENHANCED_CONFIRMATION_SERVICE, new Stub()); - mContentResolver = getContext().getContentResolver(); mTelephonyManager = getContext().getSystemService(TelephonyManager.class); } @@ -188,10 +188,16 @@ public class EnhancedConfirmationService extends SystemService { // device, either because the device lacks telephony calling, or the telephony service // is unavailable. } + UserHandle user = getContext().getUser(); + Bundle extras = call.getDetails().getExtras(); + if (extras != null) { + user = extras.getParcelable(Intent.EXTRA_USER_HANDLE, UserHandle.class); + } if (number != null) { - return hasContactWithPhoneNumber(number) ? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED; + return hasContactWithPhoneNumber(number, user) + ? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED; } else { - return hasContactWithDisplayName(call.getDetails().getCallerDisplayName()) + return hasContactWithDisplayName(call.getDetails().getCallerDisplayName(), user) ? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED; } } @@ -208,7 +214,7 @@ public class EnhancedConfirmationService extends SystemService { } @WorkerThread - private boolean hasContactWithPhoneNumber(String phoneNumber) { + private boolean hasContactWithPhoneNumber(String phoneNumber, UserHandle user) { assertNotMainThread(); if (phoneNumber == null) { return false; @@ -219,13 +225,13 @@ public class EnhancedConfirmationService extends SystemService { PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID }; - try (Cursor res = mContentResolver.query(uri, projection, null, null)) { + try (Cursor res = getUserContentResolver(user).query(uri, projection, null, null)) { return res != null && res.getCount() > 0; } } @WorkerThread - private boolean hasContactWithDisplayName(String displayName) { + private boolean hasContactWithDisplayName(String displayName, UserHandle user) { assertNotMainThread(); if (displayName == null) { return false; @@ -234,11 +240,16 @@ public class EnhancedConfirmationService extends SystemService { String[] projection = new String[]{PhoneLookup._ID}; String selection = StructuredName.DISPLAY_NAME + " = ?"; String[] selectionArgs = new String[]{displayName}; - try (Cursor res = mContentResolver.query(uri, projection, selection, selectionArgs, null)) { + try (Cursor res = getUserContentResolver(user) + .query(uri, projection, selection, selectionArgs, null)) { return res != null && res.getCount() > 0; } } + private ContentResolver getUserContentResolver(UserHandle user) { + return getContext().createContextAsUser(user, 0).getContentResolver(); + } + private boolean hasCallOfType(@CallType int callType) { for (int ongoingCallType : mOngoingCalls.values()) { if (ongoingCallType == callType) { |