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

Commit 0769484c authored by arangelov's avatar arangelov Committed by Antoan Angelov
Browse files

Also skip calling ShortcutManager APIs if work user is locked

Fixes: 159696895
Test: manual
Test: atest ChooserActivityTest
Change-Id: I3e90d5a56551b9952bfcd761c3a19a309d7cbc72
parent 733b8ee0
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -2021,6 +2021,9 @@ public class ChooserActivity extends ResolverActivity implements
        if (!isUserRunning(userHandle)) {
            return false;
        }
        if (!isUserUnlocked(userHandle)) {
            return false;
        }
        if (isQuietModeEnabled(userHandle)) {
            return false;
        }
@@ -2872,6 +2875,12 @@ public class ChooserActivity extends ResolverActivity implements
        return userManager.isUserRunning(userHandle);
    }

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

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

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

    @Test
    public void testWorkTab_workUserLocked_workTargetsShown() {
    public void testWorkTab_workUserNotRunning_workTargetsShown() {
        // enable the work tab feature flag
        ResolverActivity.ENABLE_TABBED_VIEW = true;
        markWorkProfileUserAvailable();
@@ -2059,6 +2059,70 @@ public class ChooserActivityTest {
        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) {
        Intent chooserIntent = new Intent();
        chooserIntent.setAction(Intent.ACTION_CHOOSER);
+13 −0
Original line number Diff line number Diff line
@@ -229,9 +229,20 @@ public class ChooserWrapperActivity extends ChooserActivity {

    @Override
    protected boolean isUserRunning(UserHandle userHandle) {
        if (userHandle.equals(UserHandle.SYSTEM)) {
            return super.isUserRunning(userHandle);
        }
        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.
     * <p>
@@ -258,6 +269,7 @@ public class ChooserWrapperActivity extends ChooserActivity {
        public boolean hasCrossProfileIntents;
        public boolean isQuietModeEnabled;
        public boolean isWorkProfileUserRunning;
        public boolean isWorkProfileUserUnlocked;
        public AbstractMultiProfilePagerAdapter.Injector multiPagerAdapterInjector;
        public PackageManager packageManager;

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