Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62266edc authored by Hai Zhang's avatar Hai Zhang Committed by android-build-merger
Browse files

Merge "Broadcast ACTION_DEFAULT_DIALER_CHANGED when default dialer changed."...

Merge "Broadcast ACTION_DEFAULT_DIALER_CHANGED when default dialer changed." into qt-dev am: 4a191501
am: e06b8225

Change-Id: I92238be9e8dc824763291d15361127d74891daa2
parents abaf09cf e06b8225
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 {
@@ -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)
+8 −0
Original line number Diff line number Diff line
@@ -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
@@ -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.
+8 −0
Original line number Diff line number Diff line
@@ -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 {
@@ -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;
+14 −11
Original line number Diff line number Diff line
@@ -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);
                    }
@@ -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) {
+9 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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";
@@ -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