Loading src/com/android/server/telecom/DefaultDialerCache.java +6 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.IntConsumer; public class DefaultDialerCache { public interface DefaultDialerManagerAdapter { Loading Loading @@ -192,6 +194,10 @@ public class DefaultDialerCache { return getDefaultDialerApplication(mContext.getUserId()); } public void observeDefaultDialerApplication(Executor executor, IntConsumer observer) { mRoleManagerAdapter.observeDefaultDialerApp(executor, observer); } public boolean isDefaultOrSystemDialer(String packageName, int userId) { String defaultDialer = getDefaultDialerApplication(userId); return Objects.equals(packageName, defaultDialer) Loading src/com/android/server/telecom/RoleManagerAdapter.java +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.content.Intent; import android.os.UserHandle; import java.util.List; import java.util.concurrent.Executor; import java.util.function.IntConsumer; /** * Provides a means of wrapping {@code RoleManager} operations which Telecom uses to aid in testing Loading Loading @@ -71,6 +73,12 @@ public interface RoleManagerAdapter { */ String getDefaultDialerApp(int user); /** * Observe changes to the package name of the app which fills the * {@link android.app.role.RoleManager} {@link android.app.role.RoleManager#ROLE_DIALER} role. */ void observeDefaultDialerApp(Executor executor, IntConsumer observer); /** * Override the {@link android.app.role.RoleManager} default dialer app with another value. * Used for testing purposes only. Loading src/com/android/server/telecom/RoleManagerAdapterImpl.java +8 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import com.android.internal.util.IndentingPrintWriter; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; import java.util.function.IntConsumer; import java.util.stream.Collectors; public class RoleManagerAdapterImpl implements RoleManagerAdapter { Loading Loading @@ -82,6 +84,12 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { return getRoleManagerDefaultDialerApp(user); } @Override public void observeDefaultDialerApp(Executor executor, IntConsumer observer) { mRoleManager.addOnRoleHoldersChangedListenerAsUser(executor, (roleName, user) -> observer.accept(user.getIdentifier()), UserHandle.ALL); } @Override public void setTestDefaultDialer(String packageName) { mOverrideDefaultDialerApp = packageName; Loading src/com/android/server/telecom/TelecomServiceImpl.java +14 −11 Original line number Diff line number Diff line Loading @@ -1337,17 +1337,8 @@ public class TelecomServiceImpl { synchronized (mLock) { long token = Binder.clearCallingIdentity(); try { final boolean result = mDefaultDialerCache.setDefaultDialer( packageName, ActivityManager.getCurrentUser()); if (result) { final Intent intent = new Intent(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED); intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName); mContext.sendBroadcastAsUser(intent, new UserHandle(ActivityManager.getCurrentUser())); } return result; return mDefaultDialerCache.setDefaultDialer(packageName, ActivityManager.getCurrentUser()); } finally { Binder.restoreCallingIdentity(token); } Loading Loading @@ -1739,6 +1730,18 @@ public class TelecomServiceImpl { mCallIntentProcessorAdapter = callIntentProcessorAdapter; mSubscriptionManagerAdapter = subscriptionManagerAdapter; mSettingsSecureAdapter = settingsSecureAdapter; mDefaultDialerCache.observeDefaultDialerApplication(mContext.getMainExecutor(), userId -> { String defaultDialer = mDefaultDialerCache.getDefaultDialerApplication(userId); if (defaultDialer == null) { // We are replacing the dialer, just wait for the upcoming callback. return; } final Intent intent = new Intent(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED) .putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, defaultDialer); mContext.sendBroadcastAsUser(intent, UserHandle.of(userId)); }); } public static String getSystemDialerPackage(Context context) { Loading tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.Executor; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.Matchers.anyString; Loading Loading @@ -99,6 +100,13 @@ public class ComponentContextFixture implements TestFixture<Context> { return mPackageManager; } @Override public Executor getMainExecutor() { // TODO: This doesn't actually execute anything as we don't need to do so for now, but // future users might need it. return mMainExecutor; } @Override public String getPackageName() { return "com.android.server.telecom.tests"; Loading Loading @@ -436,6 +444,7 @@ public class ComponentContextFixture implements TestFixture<Context> { private final Resources mResources = mock(Resources.class); private final Context mApplicationContextSpy = spy(mApplicationContext); private final PackageManager mPackageManager = mock(PackageManager.class); private final Executor mMainExecutor = mock(Executor.class); private final AudioManager mAudioManager = spy(new FakeAudioManager(mContext)); private final TelephonyManager mTelephonyManager = mock(TelephonyManager.class); private final AppOpsManager mAppOpsManager = mock(AppOpsManager.class); Loading Loading
src/com/android/server/telecom/DefaultDialerCache.java +6 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.IntConsumer; public class DefaultDialerCache { public interface DefaultDialerManagerAdapter { Loading Loading @@ -192,6 +194,10 @@ public class DefaultDialerCache { return getDefaultDialerApplication(mContext.getUserId()); } public void observeDefaultDialerApplication(Executor executor, IntConsumer observer) { mRoleManagerAdapter.observeDefaultDialerApp(executor, observer); } public boolean isDefaultOrSystemDialer(String packageName, int userId) { String defaultDialer = getDefaultDialerApplication(userId); return Objects.equals(packageName, defaultDialer) Loading
src/com/android/server/telecom/RoleManagerAdapter.java +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.content.Intent; import android.os.UserHandle; import java.util.List; import java.util.concurrent.Executor; import java.util.function.IntConsumer; /** * Provides a means of wrapping {@code RoleManager} operations which Telecom uses to aid in testing Loading Loading @@ -71,6 +73,12 @@ public interface RoleManagerAdapter { */ String getDefaultDialerApp(int user); /** * Observe changes to the package name of the app which fills the * {@link android.app.role.RoleManager} {@link android.app.role.RoleManager#ROLE_DIALER} role. */ void observeDefaultDialerApp(Executor executor, IntConsumer observer); /** * Override the {@link android.app.role.RoleManager} default dialer app with another value. * Used for testing purposes only. Loading
src/com/android/server/telecom/RoleManagerAdapterImpl.java +8 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import com.android.internal.util.IndentingPrintWriter; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; import java.util.function.IntConsumer; import java.util.stream.Collectors; public class RoleManagerAdapterImpl implements RoleManagerAdapter { Loading Loading @@ -82,6 +84,12 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { return getRoleManagerDefaultDialerApp(user); } @Override public void observeDefaultDialerApp(Executor executor, IntConsumer observer) { mRoleManager.addOnRoleHoldersChangedListenerAsUser(executor, (roleName, user) -> observer.accept(user.getIdentifier()), UserHandle.ALL); } @Override public void setTestDefaultDialer(String packageName) { mOverrideDefaultDialerApp = packageName; Loading
src/com/android/server/telecom/TelecomServiceImpl.java +14 −11 Original line number Diff line number Diff line Loading @@ -1337,17 +1337,8 @@ public class TelecomServiceImpl { synchronized (mLock) { long token = Binder.clearCallingIdentity(); try { final boolean result = mDefaultDialerCache.setDefaultDialer( packageName, ActivityManager.getCurrentUser()); if (result) { final Intent intent = new Intent(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED); intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName); mContext.sendBroadcastAsUser(intent, new UserHandle(ActivityManager.getCurrentUser())); } return result; return mDefaultDialerCache.setDefaultDialer(packageName, ActivityManager.getCurrentUser()); } finally { Binder.restoreCallingIdentity(token); } Loading Loading @@ -1739,6 +1730,18 @@ public class TelecomServiceImpl { mCallIntentProcessorAdapter = callIntentProcessorAdapter; mSubscriptionManagerAdapter = subscriptionManagerAdapter; mSettingsSecureAdapter = settingsSecureAdapter; mDefaultDialerCache.observeDefaultDialerApplication(mContext.getMainExecutor(), userId -> { String defaultDialer = mDefaultDialerCache.getDefaultDialerApplication(userId); if (defaultDialer == null) { // We are replacing the dialer, just wait for the upcoming callback. return; } final Intent intent = new Intent(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED) .putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, defaultDialer); mContext.sendBroadcastAsUser(intent, UserHandle.of(userId)); }); } public static String getSystemDialerPackage(Context context) { Loading
tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.Executor; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.Matchers.anyString; Loading Loading @@ -99,6 +100,13 @@ public class ComponentContextFixture implements TestFixture<Context> { return mPackageManager; } @Override public Executor getMainExecutor() { // TODO: This doesn't actually execute anything as we don't need to do so for now, but // future users might need it. return mMainExecutor; } @Override public String getPackageName() { return "com.android.server.telecom.tests"; Loading Loading @@ -436,6 +444,7 @@ public class ComponentContextFixture implements TestFixture<Context> { private final Resources mResources = mock(Resources.class); private final Context mApplicationContextSpy = spy(mApplicationContext); private final PackageManager mPackageManager = mock(PackageManager.class); private final Executor mMainExecutor = mock(Executor.class); private final AudioManager mAudioManager = spy(new FakeAudioManager(mContext)); private final TelephonyManager mTelephonyManager = mock(TelephonyManager.class); private final AppOpsManager mAppOpsManager = mock(AppOpsManager.class); Loading