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

Commit 0ed25f0c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Show sharesheet with 1 personal app and >0 work apps with WP off" into rvc-dev

parents 002ed644 ce7d4a62
Loading
Loading
Loading
Loading
+9 −15
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
    private static final String TAG = "AbstractMultiProfilePagerAdapter";
    static final int PROFILE_PERSONAL = 0;
    static final int PROFILE_WORK = 1;

    @IntDef({PROFILE_PERSONAL, PROFILE_WORK})
    @interface Profile {}

@@ -365,7 +366,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
        UserHandle listUserHandle = listAdapter.getUserHandle();
        if (!listUserHandle.equals(mWorkProfileUserHandle)
                || !mInjector.isQuietModeEnabled(mWorkProfileUserHandle)
                || !hasResolvedAppsInWorkProfile(listAdapter)) {
                || listAdapter.getCount() == 0) {
            return false;
        }
        DevicePolicyEventLogger
@@ -382,20 +383,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
        return true;
    }

    /**
     * Returns {@code true} if there is at least one app resolved in the work profile,
     * regardless of whether the work profile is enabled or not.
     */
    private boolean hasResolvedAppsInWorkProfile(ResolverListAdapter listAdapter) {
        List<ResolverActivity.ResolvedComponentInfo> userStateIndependentWorkResolvers =
                listAdapter.mResolverListController.getUserStateIndependentResolversAsUser(
                        listAdapter.getIntents(), mWorkProfileUserHandle);
        return userStateIndependentWorkResolvers.stream()
                .anyMatch(resolvedComponentInfo ->
                        resolvedComponentInfo.getResolveInfoAt(0).targetUserId
                                == UserHandle.USER_CURRENT);
    }

    private void maybeShowNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
        UserHandle listUserHandle = listAdapter.getUserHandle();
        if (mWorkProfileUserHandle != null
@@ -529,6 +516,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
        return false;
    }

    boolean shouldShowEmptyStateScreen(ResolverListAdapter listAdapter) {
        int count = listAdapter.getUnfilteredCount();
        return (count == 0 && listAdapter.getPlaceholderCount() == 0)
                || (listAdapter.getUserHandle().equals(mWorkProfileUserHandle)
                    && isQuietModeEnabled(mWorkProfileUserHandle));
    }

    protected class ProfileDescriptor {
        final ViewGroup rootView;
        private final ViewGroup mEmptyStateView;
+2 −7
Original line number Diff line number Diff line
@@ -994,7 +994,7 @@ public class ResolverActivity extends Activity implements
        if (isAutolaunching() || maybeAutolaunchActivity()) {
            return;
        }
        if (isResolverListEmpty(listAdapter)) {
        if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) {
            mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter);
        } else {
            mMultiProfilePagerAdapter.showListView(listAdapter);
@@ -1641,16 +1641,11 @@ public class ResolverActivity extends Activity implements

    private void setupViewVisibilities() {
        ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter();
        if (!isResolverListEmpty(activeListAdapter)) {
        if (!mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(activeListAdapter)) {
            addUseDifferentAppLabelIfNecessary(activeListAdapter);
        }
    }

    private boolean isResolverListEmpty(ResolverListAdapter listAdapter) {
        int count = listAdapter.getUnfilteredCount();
        return count == 0 && listAdapter.getPlaceholderCount() == 0;
    }

    /**
     * Add a label to signify that the user can pick a different app.
     * @param adapter The adapter used to provide data to item views.
+2 −12
Original line number Diff line number Diff line
@@ -121,23 +121,13 @@ public class ResolverListController {
            List<Intent> intents,
            UserHandle userHandle) {
        int baseFlags = PackageManager.MATCH_DEFAULT_ONLY
                | PackageManager.MATCH_DIRECT_BOOT_AWARE
                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
                | (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0)
                | (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0);
        return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags);
    }

    /**
     * Returns a list of resolved intents which is user state-independent. This means it will
     * return the same results regardless of whether the {@code userHandle} user is disabled or not.
     */
    public List<ResolverActivity.ResolvedComponentInfo> getUserStateIndependentResolversAsUser(
            List<Intent> intents,
            UserHandle userHandle) {
        int baseFlags = PackageManager.MATCH_DIRECT_BOOT_AWARE
                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
        return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags);
    }

    private List<ResolverActivity.ResolvedComponentInfo> getResolversForIntentAsUserInternal(
            List<Intent> intents,
            UserHandle userHandle,
+1 −8
Original line number Diff line number Diff line
@@ -1339,15 +1339,8 @@ public class ChooserActivityTest {
                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
        List<ResolvedComponentInfo> workResolvedComponentInfos =
                createResolvedComponentsForTest(workProfileTargets);
        when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser(
                Mockito.isA(List.class),
                Mockito.isA(UserHandle.class)))
                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
        sOverrides.isQuietModeEnabled = true;
        // When work profile is disabled, we get 0 results when we query the work profile
        // intents.
        setupResolverControllers(personalResolvedComponentInfos,
                /* workResolvedComponentInfos */ new ArrayList<>());
        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
        Intent sendIntent = createSendTextIntent();
        sendIntent.setType("TestType");

+1 −8
Original line number Diff line number Diff line
@@ -614,15 +614,8 @@ public class ResolverActivityTest {
                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
        List<ResolvedComponentInfo> workResolvedComponentInfos =
                createResolvedComponentsForTest(workProfileTargets);
        when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser(
                Mockito.isA(List.class),
                Mockito.isA(UserHandle.class)))
                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
        sOverrides.isQuietModeEnabled = true;
        // When work profile is disabled, we get 0 results when we query the work profile
        // intents.
        setupResolverControllers(personalResolvedComponentInfos,
                /* workResolvedComponentInfos */ new ArrayList<>());
        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
        Intent sendIntent = createSendImageIntent();
        sendIntent.setType("TestType");