diff options
author | 2021-02-18 18:41:41 -0800 | |
---|---|---|
committer | 2021-02-18 18:52:07 -0800 | |
commit | 739031400286849fdd20db0aa0713a7f4c4cb13c (patch) | |
tree | 90d5ad5fabc10785eeb0e67156fc3f154c8f8ef1 | |
parent | 0aa410feb934e7dd0af298d05071a88230461cb8 (diff) |
User arg object in onCallFilteringCompleted
In Connection#onCallFilteringCompleted, use a single data class argument
instead of making a hodgepodge of args.
Fixes: 180616846
Test: atest CtsTelecomTestCases
Change-Id: I33e80e3f59418c5d87799661c0764da029cc9f62
-rw-r--r-- | core/api/system-current.txt | 14 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Connection.aidl | 22 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Connection.java | 135 | ||||
-rwxr-xr-x | telecomm/java/android/telecom/ConnectionService.java | 36 | ||||
-rw-r--r-- | telecomm/java/android/telecom/RemoteConnection.java | 19 | ||||
-rw-r--r-- | telecomm/java/com/android/internal/telecom/IConnectionService.aidl | 8 |
6 files changed, 176 insertions, 58 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index f5366e377045..fcd80b3ee8f2 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10769,7 +10769,7 @@ package android.telecom { method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method @Nullable public final String getTelecomCallId(); method @Deprecated public void onAudioStateChanged(android.telecom.AudioState); - method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(boolean, boolean, @Nullable android.telecom.CallScreeningService.CallResponse, boolean); + method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo); method public final void resetConnectionTime(); method public void setCallDirection(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long); @@ -10785,6 +10785,16 @@ package android.telecom { field public static final int PROPERTY_REMOTELY_HOSTED = 2048; // 0x800 } + public static final class Connection.CallFilteringCompletionInfo implements android.os.Parcelable { + ctor public Connection.CallFilteringCompletionInfo(boolean, boolean, @Nullable android.telecom.CallScreeningService.CallResponse, @Nullable android.content.ComponentName); + method public int describeContents(); + method @Nullable public android.telecom.CallScreeningService.CallResponse getCallResponse(); + method @Nullable public android.content.ComponentName getCallScreeningComponent(); + method public boolean isBlocked(); + method public boolean isInContacts(); + field @NonNull public static final android.os.Parcelable.Creator<android.telecom.Connection.CallFilteringCompletionInfo> CREATOR; + } + public final class ConnectionRequest implements android.os.Parcelable { method @Nullable public String getTelecomCallId(); } @@ -10946,7 +10956,7 @@ package android.telecom { } public final class RemoteConnection { - method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(boolean, boolean, @Nullable android.telecom.CallScreeningService.CallResponse, boolean); + method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo); method @Deprecated public void setAudioState(android.telecom.AudioState); } diff --git a/telecomm/java/android/telecom/Connection.aidl b/telecomm/java/android/telecom/Connection.aidl new file mode 100644 index 000000000000..5b40036e46f4 --- /dev/null +++ b/telecomm/java/android/telecom/Connection.aidl @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 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 android.telecom; + +/** + * {@hide} + */ +parcelable Connection.CallFilteringCompletionInfo; diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 942a54eb98ba..7c6253ce933a 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -29,6 +29,7 @@ import android.annotation.SystemApi; import android.app.Notification; import android.bluetooth.BluetoothDevice; import android.compat.annotation.UnsupportedAppUsage; +import android.content.ComponentName; import android.content.Intent; import android.hardware.camera2.CameraManager; import android.net.Uri; @@ -38,7 +39,9 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.Parcel; import android.os.ParcelFileDescriptor; +import android.os.Parcelable; import android.os.RemoteException; import android.os.SystemClock; import android.telephony.ims.ImsStreamMediaProfile; @@ -3379,6 +3382,121 @@ public abstract class Connection extends Conferenceable { public void handleRttUpgradeResponse(@Nullable RttTextStream rttTextStream) {} /** + * Information provided to a {@link Connection} upon completion of call filtering in Telecom. + * + * @hide + */ + @SystemApi + public static final class CallFilteringCompletionInfo implements Parcelable { + private final boolean mIsBlocked; + private final boolean mIsInContacts; + private final CallScreeningService.CallResponse mCallResponse; + private final ComponentName mCallScreeningComponent; + + /** + * Constructor for {@link CallFilteringCompletionInfo} + * + * @param isBlocked Whether any part of the call filtering process indicated that this call + * should be blocked. + * @param isInContacts Whether the caller is in the user's contacts. + * @param callResponse The instance of {@link CallScreeningService.CallResponse} provided + * by the {@link CallScreeningService} that processed this call, or + * {@code null} if no call screening service ran. + * @param callScreeningComponent The component of the {@link CallScreeningService} + * that processed this call, or {@link null} if no + * call screening service ran. + */ + public CallFilteringCompletionInfo(boolean isBlocked, boolean isInContacts, + @Nullable CallScreeningService.CallResponse callResponse, + @Nullable ComponentName callScreeningComponent) { + mIsBlocked = isBlocked; + mIsInContacts = isInContacts; + mCallResponse = callResponse; + mCallScreeningComponent = callScreeningComponent; + } + + /** @hide */ + protected CallFilteringCompletionInfo(Parcel in) { + mIsBlocked = in.readByte() != 0; + mIsInContacts = in.readByte() != 0; + CallScreeningService.ParcelableCallResponse response + = in.readParcelable(CallScreeningService.class.getClassLoader()); + mCallResponse = response == null ? null : response.toCallResponse(); + mCallScreeningComponent = in.readParcelable(ComponentName.class.getClassLoader()); + } + + @NonNull + public static final Creator<CallFilteringCompletionInfo> CREATOR = + new Creator<CallFilteringCompletionInfo>() { + @Override + public CallFilteringCompletionInfo createFromParcel(Parcel in) { + return new CallFilteringCompletionInfo(in); + } + + @Override + public CallFilteringCompletionInfo[] newArray(int size) { + return new CallFilteringCompletionInfo[size]; + } + }; + + /** + * @return Whether any part of the call filtering process indicated that this call should be + * blocked. + */ + public boolean isBlocked() { + return mIsBlocked; + } + + /** + * @return Whether the caller is in the user's contacts. + */ + public boolean isInContacts() { + return mIsInContacts; + } + + /** + * @return The instance of {@link CallScreeningService.CallResponse} provided + * by the {@link CallScreeningService} that processed this + * call, or {@code null} if no call screening service ran. + */ + public @Nullable CallScreeningService.CallResponse getCallResponse() { + return mCallResponse; + } + + /** + * @return The component of the {@link CallScreeningService} + * that processed this call, or {@code null} if no call screening service ran. + */ + public @Nullable ComponentName getCallScreeningComponent() { + return mCallScreeningComponent; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public String toString() { + return "CallFilteringCompletionInfo{" + + "mIsBlocked=" + mIsBlocked + + ", mIsInContacts=" + mIsInContacts + + ", mCallResponse=" + mCallResponse + + ", mCallScreeningPackageName='" + mCallScreeningComponent + '\'' + + '}'; + } + + /** @hide */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeByte((byte) (mIsBlocked ? 1 : 0)); + dest.writeByte((byte) (mIsInContacts ? 1 : 0)); + dest.writeParcelable(mCallResponse == null ? null : mCallResponse.toParcelable(), 0); + dest.writeParcelable(mCallScreeningComponent, 0); + } + } + + /** * Indicates that call filtering in Telecom is complete * * This method is called for a connection created via @@ -3386,24 +3504,13 @@ public abstract class Connection extends Conferenceable { * Telecom, including checking the blocked number db, per-contact settings, and custom call * filtering apps. * - * @param isBlocked {@code true} if the call was blocked, {@code false} otherwise. If this is - * {@code true}, {@link #onDisconnect()} will be called soon after - * this is called. - * @param isInContacts Indicates whether the caller is in the user's contacts list. - * @param callScreeningResponse The response that was returned from the - * {@link CallScreeningService} that handled this call. If no - * response was received from a call screening service, - * this will be {@code null}. - * @param isResponseFromSystemDialer Whether {@code callScreeningResponse} was sent from the - * system dialer. If {@code callScreeningResponse} is - * {@code null}, this will be {@code false}. + * @param callFilteringCompletionInfo Info provided by Telecom on the results of call filtering. * @hide */ @SystemApi @RequiresPermission(Manifest.permission.READ_CONTACTS) - public void onCallFilteringCompleted(boolean isBlocked, boolean isInContacts, - @Nullable CallScreeningService.CallResponse callScreeningResponse, - boolean isResponseFromSystemDialer) { } + public void onCallFilteringCompleted( + @NonNull CallFilteringCompletionInfo callFilteringCompletionInfo) { } static String toLogSafePhoneNumber(String number) { // For unknown number, log empty string. diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index 966ece3a3ba2..c189b19c71af 100755 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -758,19 +758,15 @@ public abstract class ConnectionService extends Service { } @Override - public void onCallFilteringCompleted(String callId, boolean isBlocked, boolean isInContacts, - CallScreeningService.ParcelableCallResponse callScreeningResponse, - boolean isResponseFromSystemDialer, + public void onCallFilteringCompleted(String callId, + Connection.CallFilteringCompletionInfo completionInfo, Session.Info sessionInfo) { Log.startSession(sessionInfo, SESSION_CALL_FILTERING_COMPLETED); try { SomeArgs args = SomeArgs.obtain(); args.arg1 = callId; - args.arg2 = isBlocked; - args.arg3 = isInContacts; - args.arg4 = callScreeningResponse; - args.arg5 = isResponseFromSystemDialer; - args.arg6 = Log.createSubsession(); + args.arg2 = completionInfo; + args.arg3 = Log.createSubsession(); mHandler.obtainMessage(MSG_ON_CALL_FILTERING_COMPLETED, args).sendToTarget(); } finally { Log.endSession(); @@ -1441,16 +1437,12 @@ public abstract class ConnectionService extends Service { case MSG_ON_CALL_FILTERING_COMPLETED: { SomeArgs args = (SomeArgs) msg.obj; try { - Log.continueSession((Session) args.arg6, + Log.continueSession((Session) args.arg3, SESSION_HANDLER + SESSION_CALL_FILTERING_COMPLETED); String callId = (String) args.arg1; - boolean isBlocked = (boolean) args.arg2; - boolean isInContacts = (boolean) args.arg3; - CallScreeningService.ParcelableCallResponse callScreeningResponse = - (CallScreeningService.ParcelableCallResponse) args.arg4; - boolean isResponseFromSystemDialer = (boolean) args.arg5; - onCallFilteringCompleted(callId, isBlocked, isInContacts, - callScreeningResponse, isResponseFromSystemDialer); + Connection.CallFilteringCompletionInfo completionInfo = + (Connection.CallFilteringCompletionInfo) args.arg2; + onCallFilteringCompleted(callId, completionInfo); } finally { args.recycle(); Log.endSession(); @@ -2466,16 +2458,12 @@ public abstract class ConnectionService extends Service { } } - private void onCallFilteringCompleted(String callId, boolean isBlocked, boolean isInContacts, - CallScreeningService.ParcelableCallResponse callScreeningResponse, - boolean isResponseFromSystemDialer) { - Log.i(this, "onCallFilteringCompleted(%s, %b, %b, %s, %b)", callId, - isBlocked, isInContacts, callScreeningResponse, isResponseFromSystemDialer); + private void onCallFilteringCompleted(String callId, Connection.CallFilteringCompletionInfo + callFilteringCompletionInfo) { + Log.i(this, "onCallFilteringCompleted(%s, %s)", callId, callFilteringCompletionInfo); Connection connection = findConnectionForAction(callId, "onCallFilteringCompleted"); if (connection != null) { - connection.onCallFilteringCompleted(isBlocked, isInContacts, - callScreeningResponse == null ? null : callScreeningResponse.toCallResponse(), - isResponseFromSystemDialer); + connection.onCallFilteringCompleted(callFilteringCompletionInfo); } } diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java index 6c6097ac71e5..7a6fddb6f029 100644 --- a/telecomm/java/android/telecom/RemoteConnection.java +++ b/telecomm/java/android/telecom/RemoteConnection.java @@ -1202,27 +1202,18 @@ public final class RemoteConnection { /** * Notifies this {@link RemoteConnection} that call filtering has completed, as well as * the results of a contacts lookup for the remote party. - * @param isBlocked Whether call filtering indicates that the call should be blocked - * @param isInContacts Whether the remote party is in the user's contacts - * @param callScreeningResponse The response that was returned from the - * {@link CallScreeningService} that handled this call. If no - * response was received from a call screening service, - * this will be {@code null}. - * @param isResponseFromSystemDialer Whether {@code callScreeningResponse} was sent from the - * system dialer. If {@code callScreeningResponse} is - * {@code null}, this will be {@code false}. + * + * @param completionInfo Info provided by Telecom on the results of call filtering. * @hide */ @SystemApi @RequiresPermission(Manifest.permission.READ_CONTACTS) - public void onCallFilteringCompleted(boolean isBlocked, boolean isInContacts, - @Nullable CallScreeningService.CallResponse callScreeningResponse, - boolean isResponseFromSystemDialer) { + public void onCallFilteringCompleted( + @NonNull Connection.CallFilteringCompletionInfo completionInfo) { Log.startSession("RC.oCFC", getActiveOwnerInfo()); try { if (mConnected) { - mConnectionService.onCallFilteringCompleted(mConnectionId, isBlocked, isInContacts, - callScreeningResponse.toParcelable(), isResponseFromSystemDialer, + mConnectionService.onCallFilteringCompleted(mConnectionId, completionInfo, null /*Session.Info*/); } } catch (RemoteException ignored) { diff --git a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl index 7599e189cc37..d72f8aa82ddb 100644 --- a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl +++ b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl @@ -20,7 +20,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.ParcelFileDescriptor; import android.telecom.CallAudioState; -import android.telecom.CallScreeningService; +import android.telecom.Connection; import android.telecom.ConnectionRequest; import android.telecom.Logging.Session; import android.telecom.PhoneAccountHandle; @@ -119,9 +119,9 @@ oneway interface IConnectionService { void sendCallEvent(String callId, String event, in Bundle extras, in Session.Info sessionInfo); - void onCallFilteringCompleted(String callId, boolean isBlocked, boolean isInContacts, - in CallScreeningService.ParcelableCallResponse callScreeningResponse, - boolean isResponseFromSystemDialer, in Session.Info sessionInfo); + void onCallFilteringCompleted(String callId, + in Connection.CallFilteringCompletionInfo completionInfo, + in Session.Info sessionInfo); void onExtrasChanged(String callId, in Bundle extras, in Session.Info sessionInfo); |