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

Commit 0440fcb2 authored by Antoan Angelov's avatar Antoan Angelov Committed by Automerger Merge Worker
Browse files

Merge "Also skip calling ShortcutManager APIs if work user is locked" into rvc-dev am: 625ada92

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12034926

Change-Id: I7400f14ce4b6a1a927c4b833720008e930e47191
parents 00758e11 625ada92
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -2040,6 +2040,9 @@ public class ChooserActivity extends ResolverActivity implements
        if (!isUserRunning(userHandle)) {
        if (!isUserRunning(userHandle)) {
            return false;
            return false;
        }
        }
        if (!isUserUnlocked(userHandle)) {
            return false;
        }
        if (isQuietModeEnabled(userHandle)) {
        if (isQuietModeEnabled(userHandle)) {
            return false;
            return false;
        }
        }
@@ -2891,6 +2894,12 @@ public class ChooserActivity extends ResolverActivity implements
        return userManager.isUserRunning(userHandle);
        return userManager.isUserRunning(userHandle);
    }
    }


    @VisibleForTesting
    protected boolean isUserUnlocked(UserHandle userHandle) {
        UserManager userManager = getSystemService(UserManager.class);
        return userManager.isUserUnlocked(userHandle);
    }

    @VisibleForTesting
    @VisibleForTesting
    protected boolean isQuietModeEnabled(UserHandle userHandle) {
    protected boolean isQuietModeEnabled(UserHandle userHandle) {
        UserManager userManager = getSystemService(UserManager.class);
        UserManager userManager = getSystemService(UserManager.class);
+66 −2
Original line number Original line Diff line number Diff line
@@ -1996,7 +1996,7 @@ public class ChooserActivityTest {
    }
    }


    @Test
    @Test
    public void testWorkTab_selectingWorkTabWithLockedWorkUser_directShareTargetsNotQueried() {
    public void testWorkTab_selectingWorkTabWithNotRunningWorkUser_directShareTargetsNotQueried() {
        // enable the work tab feature flag
        // enable the work tab feature flag
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        markWorkProfileUserAvailable();
        markWorkProfileUserAvailable();
@@ -2035,7 +2035,7 @@ public class ChooserActivityTest {
    }
    }


    @Test
    @Test
    public void testWorkTab_workUserLocked_workTargetsShown() {
    public void testWorkTab_workUserNotRunning_workTargetsShown() {
        // enable the work tab feature flag
        // enable the work tab feature flag
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        markWorkProfileUserAvailable();
        markWorkProfileUserAvailable();
@@ -2059,6 +2059,70 @@ public class ChooserActivityTest {
        assertEquals(3, activity.getWorkListAdapter().getCount());
        assertEquals(3, activity.getWorkListAdapter().getCount());
    }
    }


    @Test
    public void testWorkTab_selectingWorkTabWithLockedWorkUser_directShareTargetsNotQueried() {
        // enable the work tab feature flag
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        markWorkProfileUserAvailable();
        List<ResolvedComponentInfo> personalResolvedComponentInfos =
                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
        List<ResolvedComponentInfo> workResolvedComponentInfos =
                createResolvedComponentsForTest(3);
        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
        sOverrides.isWorkProfileUserUnlocked = false;
        boolean[] isQueryDirectShareCalledOnWorkProfile = new boolean[] { false };
        sOverrides.onQueryDirectShareTargets = chooserListAdapter -> {
            isQueryDirectShareCalledOnWorkProfile[0] =
                    (chooserListAdapter.getUserHandle().getIdentifier() == 10);
            return null;
        };
        boolean[] isQueryTargetServicesCalledOnWorkProfile = new boolean[] { false };
        sOverrides.onQueryTargetServices = chooserListAdapter -> {
            isQueryTargetServicesCalledOnWorkProfile[0] =
                    (chooserListAdapter.getUserHandle().getIdentifier() == 10);
            return null;
        };
        Intent sendIntent = createSendTextIntent();
        sendIntent.setType("TestType");

        mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test"));
        waitForIdle();
        onView(withId(R.id.contentPanel))
                .perform(swipeUp());
        onView(withText(R.string.resolver_work_tab)).perform(click());
        waitForIdle();

        assertFalse("Direct share targets were queried on a locked work profile user",
                isQueryDirectShareCalledOnWorkProfile[0]);
        assertFalse("Target services were queried on a locked work profile user",
                isQueryTargetServicesCalledOnWorkProfile[0]);
    }

    @Test
    public void testWorkTab_workUserLocked_workTargetsShown() {
        // enable the work tab feature flag
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        markWorkProfileUserAvailable();
        List<ResolvedComponentInfo> personalResolvedComponentInfos =
                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
        List<ResolvedComponentInfo> workResolvedComponentInfos =
                createResolvedComponentsForTest(3);
        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
        Intent sendIntent = createSendTextIntent();
        sendIntent.setType("TestType");
        sOverrides.isWorkProfileUserUnlocked = false;

        final ChooserWrapperActivity activity =
                mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test"));
        waitForIdle();
        onView(withId(R.id.contentPanel))
                .perform(swipeUp());
        onView(withText(R.string.resolver_work_tab)).perform(click());
        waitForIdle();

        assertEquals(3, activity.getWorkListAdapter().getCount());
    }

    private Intent createChooserIntent(Intent intent, Intent[] initialIntents) {
    private Intent createChooserIntent(Intent intent, Intent[] initialIntents) {
        Intent chooserIntent = new Intent();
        Intent chooserIntent = new Intent();
        chooserIntent.setAction(Intent.ACTION_CHOOSER);
        chooserIntent.setAction(Intent.ACTION_CHOOSER);
+13 −0
Original line number Original line Diff line number Diff line
@@ -229,9 +229,20 @@ public class ChooserWrapperActivity extends ChooserActivity {


    @Override
    @Override
    protected boolean isUserRunning(UserHandle userHandle) {
    protected boolean isUserRunning(UserHandle userHandle) {
        if (userHandle.equals(UserHandle.SYSTEM)) {
            return super.isUserRunning(userHandle);
        }
        return sOverrides.isWorkProfileUserRunning;
        return sOverrides.isWorkProfileUserRunning;
    }
    }


    @Override
    protected boolean isUserUnlocked(UserHandle userHandle) {
        if (userHandle.equals(UserHandle.SYSTEM)) {
            return super.isUserUnlocked(userHandle);
        }
        return sOverrides.isWorkProfileUserUnlocked;
    }

    /**
    /**
     * We cannot directly mock the activity created since instrumentation creates it.
     * We cannot directly mock the activity created since instrumentation creates it.
     * <p>
     * <p>
@@ -258,6 +269,7 @@ public class ChooserWrapperActivity extends ChooserActivity {
        public boolean hasCrossProfileIntents;
        public boolean hasCrossProfileIntents;
        public boolean isQuietModeEnabled;
        public boolean isQuietModeEnabled;
        public boolean isWorkProfileUserRunning;
        public boolean isWorkProfileUserRunning;
        public boolean isWorkProfileUserUnlocked;
        public AbstractMultiProfilePagerAdapter.Injector multiPagerAdapterInjector;
        public AbstractMultiProfilePagerAdapter.Injector multiPagerAdapterInjector;
        public PackageManager packageManager;
        public PackageManager packageManager;


@@ -281,6 +293,7 @@ public class ChooserWrapperActivity extends ChooserActivity {
            hasCrossProfileIntents = true;
            hasCrossProfileIntents = true;
            isQuietModeEnabled = false;
            isQuietModeEnabled = false;
            isWorkProfileUserRunning = true;
            isWorkProfileUserRunning = true;
            isWorkProfileUserUnlocked = true;
            packageManager = null;
            packageManager = null;
            multiPagerAdapterInjector = new AbstractMultiProfilePagerAdapter.Injector() {
            multiPagerAdapterInjector = new AbstractMultiProfilePagerAdapter.Injector() {
                @Override
                @Override