Add functionality for number verification
Add the NumberVerificationManager and plumb it into the incoming call
flow. Also make changes to testapps to enable testing this and add a
shell command to override the authorized package.
Bug: 119675160
Test: unit, testapps. GTS later.
Change-Id: I606c4595c7ff22074314b54cafe1eff475f15ea3
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index cb59583..a41e9d9 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -16,6 +16,8 @@
package com.android.phone;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+
import static com.android.internal.telephony.PhoneConstants.SUBSCRIPTION_KEY;
import android.Manifest.permission;
@@ -66,6 +68,7 @@
import android.telephony.ModemActivityInfo;
import android.telephony.NeighboringCellInfo;
import android.telephony.NetworkScanRequest;
+import android.telephony.PhoneNumberRange;
import android.telephony.RadioAccessFamily;
import android.telephony.Rlog;
import android.telephony.ServiceState;
@@ -105,6 +108,7 @@
import com.android.internal.telephony.CellNetworkScanResult;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.DefaultPhoneNotifier;
+import com.android.internal.telephony.INumberVerificationCallback;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.LocaleTracker;
@@ -2374,6 +2378,30 @@
}
}
+ @Override
+ public void requestNumberVerification(PhoneNumberRange range, long timeoutMillis,
+ INumberVerificationCallback callback, String callingPackage) {
+ if (mApp.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
+ != PERMISSION_GRANTED) {
+ throw new SecurityException("Caller must hold the MODIFY_PHONE_STATE permission");
+ }
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
+
+ String authorizedPackage = NumberVerificationManager.getAuthorizedPackage(mApp);
+ if (!TextUtils.equals(callingPackage, authorizedPackage)) {
+ throw new SecurityException("Calling package must be configured in the device config");
+ }
+
+ if (range == null) {
+ throw new NullPointerException("Range must be non-null");
+ }
+
+ timeoutMillis = Math.min(timeoutMillis,
+ TelephonyManager.MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS);
+
+ NumberVerificationManager.getInstance().requestVerification(range, callback, timeoutMillis);
+ }
+
/**
* Returns true if CDMA provisioning needs to run.
*/
@@ -5336,7 +5364,7 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
if (mPhone.getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
+ != PERMISSION_GRANTED) {
writer.println("Permission Denial: can't dump Phone from pid="
+ Binder.getCallingPid()
+ ", uid=" + Binder.getCallingUid()