Add Call Redirection app into RoleManagerAdapter in Telecom

Test: Treehugger
Bug: 64959558
Change-Id: I3c7e8b0828567d0fd10ee79e49bfeeddbc447d5b
diff --git a/src/com/android/server/telecom/RoleManagerAdapter.java b/src/com/android/server/telecom/RoleManagerAdapter.java
index 9a0545e..f6cdc6c 100644
--- a/src/com/android/server/telecom/RoleManagerAdapter.java
+++ b/src/com/android/server/telecom/RoleManagerAdapter.java
@@ -27,6 +27,21 @@
 public interface RoleManagerAdapter {
     /**
      * Returns the package name of the app which fills the {@link android.app.role.RoleManager} call
+     * redirection role.
+     * @return the package name of the app filling the role, {@code null} otherwise}.
+     */
+    String getDefaultCallRedirectionApp();
+
+    /**
+     * Override the {@link android.app.role.RoleManager} call redirection app with another value.
+     * Used for testing purposes only.
+     * @param packageName Package name of the app to fill the call redirection role.  Where
+     *                    {@code null}, the override is removed.
+     */
+    void setTestDefaultCallRedirectionApp(String packageName);
+
+    /**
+     * Returns the package name of the app which fills the {@link android.app.role.RoleManager} call
      * screening role.
      * @return the package name of the app filling the role, {@code null} otherwise}.
      */
diff --git a/src/com/android/server/telecom/RoleManagerAdapterImpl.java b/src/com/android/server/telecom/RoleManagerAdapterImpl.java
index c6142f9..c912cc8 100644
--- a/src/com/android/server/telecom/RoleManagerAdapterImpl.java
+++ b/src/com/android/server/telecom/RoleManagerAdapterImpl.java
@@ -27,6 +27,8 @@
 
 public class RoleManagerAdapterImpl implements RoleManagerAdapter {
     // TODO: replace with actual role manager const.
+    private static final String ROLE_CALL_REDIRECTION = "android.app.role.PROXY_CALLING_APP";
+    // TODO: replace with actual role manager const.
     private static final String ROLE_CAR_MODE_DIALER = "android.app.role.ROLE_CAR_MODE_DIALER";
     // TODO: replace with actual role manager const.
     private static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
@@ -34,6 +36,7 @@
     private static final String ROLE_CALL_COMPANION_APP =
             "android.app.role.ROLE_CALL_COMPANION_APP";
 
+    private String mOverrideDefaultCallRedirectionApp = null;
     private String mOverrideDefaultCallScreeningApp = null;
     private String mOverrideDefaultCarModeApp = null;
     private List<String> mOverrideCallCompanionApps = new ArrayList<>();
@@ -43,6 +46,19 @@
     }
 
     @Override
+    public String getDefaultCallRedirectionApp() {
+        if (mOverrideDefaultCallRedirectionApp != null) {
+            return mOverrideDefaultCallRedirectionApp;
+        }
+        return getRoleManagerCallRedirectionApp();
+    }
+
+    @Override
+    public void setTestDefaultCallRedirectionApp(String packageName) {
+        mOverrideDefaultCallRedirectionApp = packageName;
+    }
+
+    @Override
     public String getDefaultCallScreeningApp() {
         if (mOverrideDefaultCallScreeningApp != null) {
             return mOverrideDefaultCallScreeningApp;
@@ -89,6 +105,11 @@
         mCurrentUserHandle = currentUserHandle;
     }
 
+    private String getRoleManagerCallRedirectionApp() {
+        // TODO: Link in RoleManager
+        return null;
+    }
+
     private String getRoleManagerCallScreeningApp() {
         // TODO: Link in RoleManager
         return null;
@@ -110,6 +131,15 @@
      * @param pw The {@code IndentingPrintWriter} to write the state to.
      */
     public void dump(IndentingPrintWriter pw) {
+        pw.print("DefaultCallRedirectionApp: ");
+        if (mOverrideDefaultCallRedirectionApp != null) {
+            pw.print("(override ");
+            pw.print(mOverrideDefaultCallRedirectionApp);
+            pw.print(") ");
+            pw.print(getRoleManagerCallRedirectionApp());
+        }
+        pw.println();
+
         pw.print("DefaultCallScreeningApp: ");
         if (mOverrideDefaultCallScreeningApp != null) {
             pw.print("(override ");
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index dc66440..14d54b0 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -1669,6 +1669,28 @@
         }
 
         @Override
+        public void setTestDefaultCallRedirectionApp(String packageName) {
+            try {
+                Log.startSession("TSI.sTDCRA");
+                enforceModifyPermission();
+                if (!Build.IS_USERDEBUG) {
+                    throw new SecurityException("Test-only API.");
+                }
+                synchronized (mLock) {
+                    long token = Binder.clearCallingIdentity();
+                    try {
+                        mCallsManager.getRoleManagerAdapter().setTestDefaultCallRedirectionApp(
+                                packageName);
+                    } finally {
+                        Binder.restoreCallingIdentity(token);
+                    }
+                }
+            } finally {
+                Log.endSession();
+            }
+        }
+
+        @Override
         public void setTestDefaultCallScreeningApp(String packageName) {
             try {
                 Log.startSession("TSI.sTDCSA");