Merge "Add nuisance call reporting API to Telecom." am: d6471064e9

am: 41aa3fa1bc

Change-Id: I1a2318fb310c5c8f172a729f30e4ee8727bed0da
This commit is contained in:
Tyler Gunn
2019-02-05 13:48:47 -08:00
committed by android-build-merger
5 changed files with 167 additions and 0 deletions

View File

@@ -41283,6 +41283,15 @@ package android.telecom {
method public abstract void onScreenCall(@NonNull android.telecom.Call.Details);
method public final void provideCallIdentification(@NonNull android.telecom.Call.Details, @NonNull android.telecom.CallIdentification);
method public final void respondToCall(@NonNull android.telecom.Call.Details, @NonNull android.telecom.CallScreeningService.CallResponse);
field public static final String ACTION_NUISANCE_CALL_STATUS_CHANGED = "android.telecom.action.NUISANCE_CALL_STATUS_CHANGED";
field public static final int CALL_DURATION_LONG = 4; // 0x4
field public static final int CALL_DURATION_MEDIUM = 3; // 0x3
field public static final int CALL_DURATION_SHORT = 2; // 0x2
field public static final int CALL_DURATION_VERY_SHORT = 1; // 0x1
field public static final String EXTRA_CALL_DURATION = "android.telecom.extra.CALL_DURATION";
field public static final String EXTRA_CALL_HANDLE = "android.telecom.extra.CALL_HANDLE";
field public static final String EXTRA_CALL_TYPE = "android.telecom.extra.CALL_TYPE";
field public static final String EXTRA_IS_NUISANCE = "android.telecom.extra.IS_NUISANCE";
field public static final String SERVICE_INTERFACE = "android.telecom.CallScreeningService";
}
@@ -41888,6 +41897,7 @@ package android.telecom {
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, String);
method @RequiresPermission(anyOf={android.Manifest.permission.CALL_PHONE, android.Manifest.permission.MANAGE_OWN_CALLS}) public void placeCall(android.net.Uri, android.os.Bundle);
method public void registerPhoneAccount(android.telecom.PhoneAccount);
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void reportNuisanceCallStatus(@NonNull android.net.Uri, boolean);
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void showInCallScreen(boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void silenceRinger();
method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle);

View File

@@ -481,6 +481,7 @@
<protected-broadcast android:name="android.security.action.TRUST_STORE_CHANGED" />
<protected-broadcast android:name="android.security.action.KEYCHAIN_CHANGED" />
<protected-broadcast android:name="android.security.action.KEY_ACCESS_CHANGED" />
<protected-broadcast android:name="android.telecom.action.NUISANCE_CALL_STATUS_CHANGED" />
<protected-broadcast android:name="android.telecom.action.PHONE_ACCOUNT_REGISTERED" />
<protected-broadcast android:name="android.telecom.action.PHONE_ACCOUNT_UNREGISTERED" />
<protected-broadcast android:name="android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION" />

View File

@@ -16,6 +16,7 @@
package android.telecom;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SdkConstant;
import android.app.Service;
@@ -32,6 +33,9 @@ import com.android.internal.os.SomeArgs;
import com.android.internal.telecom.ICallScreeningAdapter;
import com.android.internal.telecom.ICallScreeningService;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* This service can be implemented by the default dialer (see
* {@link TelecomManager#getDefaultDialerPackage()}) or a third party app to allow or disallow
@@ -88,6 +92,128 @@ import com.android.internal.telecom.ICallScreeningService;
* </pre>
*/
public abstract class CallScreeningService extends Service {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
prefix = { "CALL_DURATION_" },
value = {CALL_DURATION_VERY_SHORT, CALL_DURATION_SHORT, CALL_DURATION_MEDIUM,
CALL_DURATION_LONG})
public @interface CallDuration {}
/**
* Call duration reported with {@link #EXTRA_CALL_DURATION} to indicate to the
* {@link CallScreeningService} the duration of a call for which the user reported the nuisance
* status (see {@link TelecomManager#reportNuisanceCallStatus(Uri, boolean)}). The
* {@link CallScreeningService} can use this as a signal for training nuisance detection
* algorithms. The call duration is reported in coarse grained buckets to minimize exposure of
* identifying call log information to the {@link CallScreeningService}.
* <p>
* Indicates the call was < 3 seconds in duration.
*/
public static final int CALL_DURATION_VERY_SHORT = 1;
/**
* Call duration reported with {@link #EXTRA_CALL_DURATION} to indicate to the
* {@link CallScreeningService} the duration of a call for which the user reported the nuisance
* status (see {@link TelecomManager#reportNuisanceCallStatus(Uri, boolean)}). The
* {@link CallScreeningService} can use this as a signal for training nuisance detection
* algorithms. The call duration is reported in coarse grained buckets to minimize exposure of
* identifying call log information to the {@link CallScreeningService}.
* <p>
* Indicates the call was greater than 3 seconds, but less than 60 seconds in duration.
*/
public static final int CALL_DURATION_SHORT = 2;
/**
* Call duration reported with {@link #EXTRA_CALL_DURATION} to indicate to the
* {@link CallScreeningService} the duration of a call for which the user reported the nuisance
* status (see {@link TelecomManager#reportNuisanceCallStatus(Uri, boolean)}). The
* {@link CallScreeningService} can use this as a signal for training nuisance detection
* algorithms. The call duration is reported in coarse grained buckets to minimize exposure of
* identifying call log information to the {@link CallScreeningService}.
* <p>
* Indicates the call was greater than 60 seconds, but less than 120 seconds in duration.
*/
public static final int CALL_DURATION_MEDIUM = 3;
/**
* Call duration reported with {@link #EXTRA_CALL_DURATION} to indicate to the
* {@link CallScreeningService} the duration of a call for which the user reported the nuisance
* status (see {@link TelecomManager#reportNuisanceCallStatus(Uri, boolean)}). The
* {@link CallScreeningService} can use this as a signal for training nuisance detection
* algorithms. The call duration is reported in coarse grained buckets to minimize exposure of
* identifying call log information to the {@link CallScreeningService}.
* <p>
* Indicates the call was greater than 120 seconds.
*/
public static final int CALL_DURATION_LONG = 4;
/**
* Telecom sends this intent to the {@link CallScreeningService} which the user has chosen to
* fill the call screening role when the user indicates through the default dialer whether a
* call is a nuisance call or not (see
* {@link TelecomManager#reportNuisanceCallStatus(Uri, boolean)}).
* <p>
* The following extra values are provided for the call:
* <ol>
* <li>{@link #EXTRA_CALL_HANDLE} - the handle of the call.</li>
* <li>{@link #EXTRA_IS_NUISANCE} - {@code true} if the user reported the call as a nuisance
* call, {@code false} otherwise.</li>
* <li>{@link #EXTRA_CALL_TYPE} - reports the type of call (incoming, rejected, missed,
* blocked).</li>
* <li>{@link #EXTRA_CALL_DURATION} - the duration of the call (see
* {@link #EXTRA_CALL_DURATION} for valid values).</li>
* </ol>
* <p>
* {@link CallScreeningService} implementations which want to track whether the user reports
* calls are nuisance calls should use declare a broadcast receiver in their manifest for this
* intent.
* <p>
* Note: Only {@link CallScreeningService} implementations which have provided
* {@link CallIdentification} information for calls at some point will receive this intent.
*/
public static final String ACTION_NUISANCE_CALL_STATUS_CHANGED =
"android.telecom.action.NUISANCE_CALL_STATUS_CHANGED";
/**
* Extra used to provide the handle of the call for
* {@link #ACTION_NUISANCE_CALL_STATUS_CHANGED}. The call handle is reported as a
* {@link Uri}.
*/
public static final String EXTRA_CALL_HANDLE = "android.telecom.extra.CALL_HANDLE";
/**
* Boolean extra used to indicate whether the user reported a call as a nuisance call.
* When {@code true}, the user reported that a call was a nuisance call, {@code false}
* otherwise. Sent with {@link #ACTION_NUISANCE_CALL_STATUS_CHANGED}.
*/
public static final String EXTRA_IS_NUISANCE = "android.telecom.extra.IS_NUISANCE";
/**
* Integer extra used with {@link #ACTION_NUISANCE_CALL_STATUS_CHANGED} to report the type of
* call. Valid values are:
* <UL>
* <li>{@link android.provider.CallLog.Calls#MISSED_TYPE}</li>
* <li>{@link android.provider.CallLog.Calls#INCOMING_TYPE}</li>
* <li>{@link android.provider.CallLog.Calls#BLOCKED_TYPE}</li>
* <li>{@link android.provider.CallLog.Calls#REJECTED_TYPE}</li>
* </UL>
*/
public static final String EXTRA_CALL_TYPE = "android.telecom.extra.CALL_TYPE";
/**
* Integer extra used to with {@link #ACTION_NUISANCE_CALL_STATUS_CHANGED} to report how long
* the call lasted. Valid values are:
* <UL>
* <LI>{@link #CALL_DURATION_VERY_SHORT}</LI>
* <LI>{@link #CALL_DURATION_SHORT}</LI>
* <LI>{@link #CALL_DURATION_MEDIUM}</LI>
* <LI>{@link #CALL_DURATION_LONG}</LI>
* </UL>
*/
public static final String EXTRA_CALL_DURATION = "android.telecom.extra.CALL_DURATION";
/**
* The {@link Intent} that must be declared as handled by the service.
*/

View File

@@ -1975,6 +1975,33 @@ public class TelecomManager {
return false;
}
/**
* Called by the default dialer to report to Telecom when the user has marked a previous
* incoming call as a nuisance call or not.
* <p>
* Where the user has chosen a {@link CallScreeningService} to fill the call screening role,
* Telecom will notify that {@link CallScreeningService} of the user's report.
* <p>
* Requires that the caller is the default dialer app.
*
* @param handle The phone number of an incoming call which the user is reporting as either a
* nuisance of non-nuisance call.
* @param isNuisanceCall {@code true} if the user is reporting the call as a nuisance call,
* {@code false} if the user is reporting the call as a non-nuisance call.
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
public void reportNuisanceCallStatus(@NonNull Uri handle, boolean isNuisanceCall) {
ITelecomService service = getTelecomService();
if (service != null) {
try {
service.reportNuisanceCallStatus(handle, isNuisanceCall,
mContext.getOpPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Error calling ITelecomService#showCallScreen", e);
}
}
}
/**
* Handles {@link Intent#ACTION_CALL} intents trampolined from UserCallActivity.
* @param intent The {@link Intent#ACTION_CALL} intent to handle.

View File

@@ -285,6 +285,8 @@ interface ITelecomService {
*/
boolean isInEmergencyCall();
oneway void reportNuisanceCallStatus(in Uri address, boolean isNuisance, String callingPackage);
/**
* @see TelecomServiceImpl#handleCallIntent
*/
@@ -299,4 +301,5 @@ interface ITelecomService {
void addOrRemoveTestCallCompanionApp(String packageName, boolean isAdded);
void setTestAutoModeApp(String packageName);
}