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

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

Merge "Send stacked apps through full standard start flow."

parents b11fa5e5 e12616a3
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -1439,9 +1439,10 @@ public class ChooserActivity extends ResolverActivity implements

        final long selectionCost = System.currentTimeMillis() - mChooserShownTime;

        // Stacked apps get a disambiguation first
        if (targetInfo instanceof MultiDisplayResolveInfo) {
            MultiDisplayResolveInfo mti = (MultiDisplayResolveInfo) targetInfo;
            if (!mti.hasSelected()) {
                // Stacked apps get a disambiguation first
                CharSequence[] labels = new CharSequence[mti.getTargets().size()];
                int i = 0;
                for (TargetInfo ti : mti.getTargets()) {
@@ -1449,11 +1450,12 @@ public class ChooserActivity extends ResolverActivity implements
                }
                ChooserStackedAppDialogFragment f = new ChooserStackedAppDialogFragment(
                        targetInfo.getDisplayLabel(),
                    ((MultiDisplayResolveInfo) targetInfo).getTargets(), labels);
                        ((MultiDisplayResolveInfo) targetInfo), labels, which);

                f.show(getFragmentManager(), TARGET_DETAILS_FRAGMENT_TAG);
                return;
            }
        }

        super.startSelected(which, always, filtered);

+7 −13
Original line number Diff line number Diff line
@@ -24,10 +24,7 @@ import android.content.DialogInterface;
import android.content.res.Configuration;
import android.os.Bundle;

import com.android.internal.app.chooser.DisplayResolveInfo;

import java.util.ArrayList;
import java.util.List;
import com.android.internal.app.chooser.MultiDisplayResolveInfo;

/**
 * Shows individual actions for a "stacked" app target - such as an app with multiple posting
@@ -38,24 +35,20 @@ public class ChooserStackedAppDialogFragment extends DialogFragment
    private static final String TITLE_KEY = "title";
    private static final String PINNED_KEY = "pinned";

    private List<DisplayResolveInfo> mTargetInfos = new ArrayList<>();
    private MultiDisplayResolveInfo mTargetInfos;
    private CharSequence[] mLabels;
    private int mParentWhich;

    public ChooserStackedAppDialogFragment() {
    }

    public ChooserStackedAppDialogFragment(CharSequence title) {
        Bundle args = new Bundle();
        args.putCharSequence(TITLE_KEY, title);
        setArguments(args);
    }

    public ChooserStackedAppDialogFragment(CharSequence title,
            List<DisplayResolveInfo> targets, CharSequence[] labels) {
            MultiDisplayResolveInfo targets, CharSequence[] labels, int parentWhich) {
        Bundle args = new Bundle();
        args.putCharSequence(TITLE_KEY, title);
        mTargetInfos = targets;
        mLabels = labels;
        mParentWhich = parentWhich;
        setArguments(args);
    }

@@ -72,7 +65,8 @@ public class ChooserStackedAppDialogFragment extends DialogFragment
    @Override
    public void onClick(DialogInterface dialog, int which) {
        final Bundle args = getArguments();
        mTargetInfos.get(which).start(getActivity(), null);
        mTargetInfos.setSelected(which);
        ((ChooserActivity) getActivity()).startSelected(mParentWhich, false, true);
        dismiss();
    }

+34 −0
Original line number Diff line number Diff line
@@ -16,6 +16,12 @@

package com.android.internal.app.chooser;

import android.app.Activity;
import android.os.Bundle;
import android.os.UserHandle;

import com.android.internal.app.ResolverActivity;

import java.util.ArrayList;
import java.util.List;

@@ -27,6 +33,8 @@ public class MultiDisplayResolveInfo extends DisplayResolveInfo {
    List<DisplayResolveInfo> mTargetInfos = new ArrayList<>();
    // We'll use this DRI for basic presentation info - eg icon, name.
    final DisplayResolveInfo mBaseInfo;
    // Index of selected target
    private int mSelected = -1;

    /**
     * @param firstInfo A representative DRI to use for the main icon, title, etc for this Info.
@@ -57,4 +65,30 @@ public class MultiDisplayResolveInfo extends DisplayResolveInfo {
        return mTargetInfos;
    }

    public void setSelected(int selected) {
        mSelected = selected;
    }

    /**
     * Whether or not the user has selected a specific target for this MultiInfo.
     */
    public boolean hasSelected() {
        return mSelected >= 0;
    }

    @Override
    public boolean start(Activity activity, Bundle options) {
        return mTargetInfos.get(mSelected).start(activity, options);
    }

    @Override
    public boolean startAsCaller(ResolverActivity activity, Bundle options, int userId) {
        return mTargetInfos.get(mSelected).startAsCaller(activity, options, userId);
    }

    @Override
    public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
        return mTargetInfos.get(mSelected).startAsUser(activity, options, user);
    }

}