Merge "User arg object in onCallFilteringCompleted" into sc-dev

This commit is contained in:
Hall Liu
2021-02-24 20:05:45 +00:00
committed by Android (Google) Code Review
6 changed files with 176 additions and 58 deletions

View File

@@ -10763,7 +10763,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);
@@ -10779,6 +10779,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();
}
@@ -10940,7 +10950,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);
}

View File

@@ -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;

View File

@@ -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;
@@ -3378,6 +3381,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
*
@@ -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.

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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);