diff options
11 files changed, 76 insertions, 53 deletions
diff --git a/res/values/config.xml b/res/values/config.xml index c0e96690a..540bece13 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -27,9 +27,6 @@ handle playing of the tones. --> <bool name="allow_local_dtmf_tones">true</bool> - <!-- Package name for the default in-call UI and dialer [DO NOT TRANSLATE] --> - <string name="ui_default_package" translatable="false">com.android.dialer</string> - <!-- Class name for the default in-call UI Service [DO NOT TRANSLATE] --> <string name="incall_default_class" translatable="false">com.android.incallui.InCallServiceImpl</string> diff --git a/src/com/android/server/telecom/DefaultDialerCache.java b/src/com/android/server/telecom/DefaultDialerCache.java index 3b36119fb..749cb401a 100644 --- a/src/com/android/server/telecom/DefaultDialerCache.java +++ b/src/com/android/server/telecom/DefaultDialerCache.java @@ -141,7 +141,7 @@ public class DefaultDialerCache { mContext = context; mDefaultDialerManagerAdapter = defaultDialerManagerAdapter; mLock = lock; - mSystemDialerName = mContext.getResources().getString(R.string.ui_default_package); + mSystemDialerName = TelecomServiceImpl.getSystemDialerPackage(mContext); IntentFilter packageIntentFilter = new IntentFilter(); packageIntentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java index f221f91f1..ac894e9f6 100644 --- a/src/com/android/server/telecom/InCallController.java +++ b/src/com/android/server/telecom/InCallController.java @@ -750,7 +750,7 @@ public class InCallController extends CallsManagerListenerBase { Resources resources = mContext.getResources(); mSystemInCallComponentName = new ComponentName( - resources.getString(R.string.ui_default_package), + TelecomServiceImpl.getSystemDialerPackage(mContext), resources.getString(R.string.incall_default_class)); mSystemStateHelper.addListener(mSystemStateListener); diff --git a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java index 440bb1037..0cfdc4c3c 100644 --- a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java +++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java @@ -464,7 +464,7 @@ public class NewOutgoingCallIntentBroadcaster { Intent systemDialerIntent = new Intent(); final Resources resources = mContext.getResources(); systemDialerIntent.setClassName( - resources.getString(R.string.ui_default_package), + TelecomServiceImpl.getSystemDialerPackage(mContext), resources.getString(R.string.dialer_default_class)); systemDialerIntent.setAction(Intent.ACTION_DIAL); systemDialerIntent.setData(handle); diff --git a/src/com/android/server/telecom/RoleManagerAdapter.java b/src/com/android/server/telecom/RoleManagerAdapter.java index b7e347eb4..647d7bf20 100644 --- a/src/com/android/server/telecom/RoleManagerAdapter.java +++ b/src/com/android/server/telecom/RoleManagerAdapter.java @@ -16,6 +16,7 @@ package com.android.server.telecom; +import android.content.Intent; import android.os.UserHandle; import java.util.List; @@ -25,6 +26,14 @@ import java.util.List; * and remove direct dependencies. */ public interface RoleManagerAdapter { + + /** + * The name of the dialer role. + * + * @see Intent#ACTION_DIAL + */ + String ROLE_DIALER = "android.app.role.DIALER"; + /** * Returns the package name of the app which fills the {@link android.app.role.RoleManager} call * redirection role. diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java index f70261259..189ce2977 100644 --- a/src/com/android/server/telecom/TelecomServiceImpl.java +++ b/src/com/android/server/telecom/TelecomServiceImpl.java @@ -28,14 +28,13 @@ import static android.Manifest.permission.WRITE_SECURE_SETTINGS; import android.Manifest; import android.app.ActivityManager; import android.app.AppOpsManager; +import android.app.role.RoleManager; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.net.Uri; import android.os.Binder; @@ -44,7 +43,6 @@ import android.os.Bundle; import android.os.Process; import android.os.UserHandle; import android.provider.Settings; -import android.telecom.CallScreeningService; import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; @@ -57,7 +55,9 @@ import android.text.TextUtils; import android.util.EventLog; import com.android.internal.telecom.ITelecomService; +import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; +import com.android.internal.util.Preconditions; import com.android.server.telecom.components.UserCallIntentProcessorFactory; import com.android.server.telecom.settings.BlockedNumbersActivity; @@ -676,7 +676,7 @@ public class TelecomServiceImpl { // No need to synchronize Resources resources = mContext.getResources(); return new ComponentName( - resources.getString(R.string.ui_default_package), + TelecomServiceImpl.getSystemDialerPackage(mContext), resources.getString(R.string.dialer_default_class)); } finally { Log.endSession(); @@ -712,7 +712,7 @@ public class TelecomServiceImpl { public String getSystemDialerPackage() { try { Log.startSession("TSI.gSDP"); - return mContext.getResources().getString(R.string.ui_default_package); + return TelecomServiceImpl.getSystemDialerPackage(mContext); } finally { Log.endSession(); } @@ -1747,6 +1747,15 @@ public class TelecomServiceImpl { mNuisanceCallReporter = nuisanceCallReporter; } + public static String getSystemDialerPackage(Context context) { + String[] holders = context.getResources().getStringArray( + com.android.internal.R.array.config_defaultRoleHolders); + return TextUtils.withoutPrefix(RoleManagerAdapter.ROLE_DIALER + ": ", + Preconditions.checkNotNull( + ArrayUtils.find(holders, s -> s.startsWith(RoleManagerAdapter.ROLE_DIALER)), + "No system dialer configured")); + } + public ITelecomService.Stub getBinder() { return mBinderImpl; } diff --git a/src/com/android/server/telecom/TelecomSystem.java b/src/com/android/server/telecom/TelecomSystem.java index 0e3234e2b..371427992 100644 --- a/src/com/android/server/telecom/TelecomSystem.java +++ b/src/com/android/server/telecom/TelecomSystem.java @@ -256,7 +256,7 @@ public class TelecomSystem { mContactsAsyncHelper, mLock); EmergencyCallHelper emergencyCallHelper = new EmergencyCallHelper(mContext, - mContext.getResources().getString(R.string.ui_default_package), timeoutsAdapter); + TelecomServiceImpl.getSystemDialerPackage(mContext), timeoutsAdapter); InCallControllerFactory inCallControllerFactory = new InCallControllerFactory() { @Override diff --git a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java index 553c2637a..964436f05 100644 --- a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +++ b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java @@ -546,6 +546,10 @@ public class ComponentContextFixture implements TestFixture<Context> { when(mResources.getBoolean(eq(id))).thenReturn(value); } + public void putStringArrayResource(int id, String[] value) { + when(mResources.getStringArray(eq(id))).thenReturn(value); + } + public void setTelecomManager(TelecomManager telecomManager) { mTelecomManager = telecomManager; } diff --git a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java index 04b7d96d3..79f4fc4b5 100644 --- a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java +++ b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java @@ -16,6 +16,22 @@ package com.android.server.telecom.tests; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentMatchers.matches; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.Manifest; import android.content.ComponentName; import android.content.ContentResolver; @@ -27,8 +43,8 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.os.Bundle; -import android.os.IBinder; import android.os.Handler; +import android.os.IBinder; import android.os.Looper; import android.os.UserHandle; import android.telecom.InCallService; @@ -71,23 +87,6 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.mockito.ArgumentMatchers.matches; -import static org.mockito.ArgumentMatchers.nullable; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.verify; - @RunWith(JUnit4.class) public class InCallControllerTests extends TelecomTestCase { @Mock CallsManager mMockCallsManager; @@ -126,7 +125,9 @@ public class InCallControllerTests extends TelecomTestCase { MockitoAnnotations.initMocks(this); when(mMockCall.getAnalytics()).thenReturn(new Analytics.CallInfo()); doReturn(mMockResources).when(mMockContext).getResources(); - doReturn(SYS_PKG).when(mMockResources).getString(R.string.ui_default_package); + doReturn(new String[] { RoleManagerAdapter.ROLE_DIALER + ": " + SYS_PKG }) + .when(mMockResources) + .getString(com.android.internal.R.array.config_defaultRoleHolders); doReturn(SYS_CLASS).when(mMockResources).getString(R.string.incall_default_class); doReturn(true).when(mMockResources).getBoolean(R.bool.grant_location_permission_enabled); mEmergencyCallHelper = new EmergencyCallHelper(mMockContext, SYS_PKG, diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java index 9d363e925..760e4dbbd 100644 --- a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java +++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java @@ -16,6 +16,23 @@ package com.android.server.telecom.tests; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isNotNull; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.Manifest; import android.app.Activity; import android.app.AppOpsManager; @@ -37,10 +54,10 @@ import android.test.suitebuilder.annotation.SmallTest; import com.android.server.telecom.Call; import com.android.server.telecom.CallsManager; import com.android.server.telecom.NewOutgoingCallIntentBroadcaster; -import com.android.server.telecom.RoleManagerAdapter; import com.android.server.telecom.PhoneAccountRegistrar; import com.android.server.telecom.PhoneNumberUtilsAdapter; import com.android.server.telecom.PhoneNumberUtilsAdapterImpl; +import com.android.server.telecom.RoleManagerAdapter; import com.android.server.telecom.SystemStateHelper; import com.android.server.telecom.TelecomSystem; @@ -51,23 +68,6 @@ import org.junit.runners.JUnit4; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.nullable; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNotNull; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(JUnit4.class) public class NewOutgoingCallIntentBroadcasterTest extends TelecomTestCase { private static class ReceiverIntentPair { @@ -196,7 +196,9 @@ public class NewOutgoingCallIntentBroadcasterTest extends TelecomTestCase { String ui_package_string = "sample_string_1"; String dialer_default_class_string = "sample_string_2"; - mComponentContextFixture.putResource(R.string.ui_default_package, ui_package_string); + mComponentContextFixture.putStringArrayResource( + com.android.internal.R.array.config_defaultRoleHolders, + new String[] {RoleManagerAdapter.ROLE_DIALER + ": " + ui_package_string}); mComponentContextFixture.putResource(R.string.dialer_default_class, dialer_default_class_string); diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java index 119739621..1da2e49ad 100644 --- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java +++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java @@ -516,9 +516,10 @@ public class TelecomSystemTest extends TelecomTestCase { } private void setupInCallServices() throws Exception { - mComponentContextFixture.putResource( - com.android.server.telecom.R.string.ui_default_package, - mInCallServiceComponentNameX.getPackageName()); + mComponentContextFixture.putStringArrayResource( + com.android.internal.R.array.config_defaultRoleHolders, + new String[] { RoleManagerAdapter.ROLE_DIALER + ": " + + mInCallServiceComponentNameX.getPackageName() }); mComponentContextFixture.putResource( com.android.server.telecom.R.string.incall_default_class, mInCallServiceComponentNameX.getClassName()); |
