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

Commit 580c30a6 authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Wire up caller chooser targets for ChooserActivity" into mnc-dev

parents 1f0943dd 0ccc0e93
Loading
Loading
Loading
Loading
+53 −21
Original line number Diff line number Diff line
@@ -307,7 +307,7 @@ public class ChooserActivity extends ResolverActivity {
    ResolveListAdapter createAdapter(Context context, Intent[] initialIntents,
            List<ResolveInfo> rList, int launchedFromUid, boolean filterLastUsed) {
        final ChooserListAdapter adapter = new ChooserListAdapter(context, initialIntents, rList,
                launchedFromUid, filterLastUsed);
                launchedFromUid, filterLastUsed, mCallerChooserTargets);
        if (DEBUG) Log.d(TAG, "Adapter created; querying services");
        queryTargetServices(adapter);
        return adapter;
@@ -315,45 +315,70 @@ public class ChooserActivity extends ResolverActivity {

    class ChooserTargetInfo implements TargetInfo {
        private final TargetInfo mSourceInfo;
        private final ResolveInfo mBackupResolveInfo;
        private final ChooserTarget mChooserTarget;
        private final Drawable mDisplayIcon;

        public ChooserTargetInfo(ChooserTarget target) {
            this(null, target);
        }

        public ChooserTargetInfo(TargetInfo sourceInfo, ChooserTarget chooserTarget) {
            mSourceInfo = sourceInfo;
            mChooserTarget = chooserTarget;
            mDisplayIcon = new BitmapDrawable(getResources(), chooserTarget.getIcon());

            if (sourceInfo != null) {
                mBackupResolveInfo = null;
            } else {
                mBackupResolveInfo = getPackageManager().resolveActivity(getResolvedIntent(), 0);
            }
        }

        @Override
        public Intent getResolvedIntent() {
            final Intent targetIntent = mChooserTarget.getIntent();
            return targetIntent != null ? targetIntent : mSourceInfo.getResolvedIntent();
            if (targetIntent != null) {
                return targetIntent;
            } else if (mSourceInfo != null) {
                return mSourceInfo.getResolvedIntent();
            }
            return getTargetIntent();
        }

        @Override
        public ComponentName getResolvedComponentName() {
            if (mSourceInfo != null) {
                return mSourceInfo.getResolvedComponentName();
            } else if (mBackupResolveInfo != null) {
                return new ComponentName(mBackupResolveInfo.activityInfo.packageName,
                        mBackupResolveInfo.activityInfo.name);
            }
            return null;
        }

        private Intent getFillInIntent() {
            return mSourceInfo != null ? mSourceInfo.getResolvedIntent() : getTargetIntent();
        }

        @Override
        public boolean start(Activity activity, Bundle options) {
            return mChooserTarget.sendIntent(activity, mSourceInfo.getResolvedIntent());
            return mChooserTarget.sendIntent(activity, getFillInIntent());
        }

        @Override
        public boolean startAsCaller(Activity activity, Bundle options, int userId) {
            return mChooserTarget.sendIntentAsCaller(activity, mSourceInfo.getResolvedIntent(),
                    userId);
            return mChooserTarget.sendIntentAsCaller(activity, getFillInIntent(), userId);
        }

        @Override
        public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
            return mChooserTarget.sendIntentAsUser(activity, mSourceInfo.getResolvedIntent(), user);
            return mChooserTarget.sendIntentAsUser(activity, getFillInIntent(), user);
        }

        @Override
        public ResolveInfo getResolveInfo() {
            return mSourceInfo.getResolveInfo();
            return mSourceInfo != null ? mSourceInfo.getResolveInfo() : mBackupResolveInfo;
        }

        @Override
@@ -363,7 +388,7 @@ public class ChooserActivity extends ResolverActivity {

        @Override
        public CharSequence getExtendedInfo() {
            return mSourceInfo.getExtendedInfo();
            return mSourceInfo != null ? mSourceInfo.getExtendedInfo() : null;
        }

        @Override
@@ -374,10 +399,15 @@ public class ChooserActivity extends ResolverActivity {

    public class ChooserListAdapter extends ResolveListAdapter {
        private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
        private final List<ChooserTargetInfo> mCallerTargets = new ArrayList<>();

        public ChooserListAdapter(Context context, Intent[] initialIntents, List<ResolveInfo> rList,
                int launchedFromUid, boolean filterLastUsed) {
                int launchedFromUid, boolean filterLastUsed, ChooserTarget[] callerChooserTargets) {
            super(context, initialIntents, rList, launchedFromUid, filterLastUsed);

            for (ChooserTarget target : callerChooserTargets) {
                mCallerTargets.add(new ChooserTargetInfo(target));
            }
        }

        @Override
@@ -407,23 +437,25 @@ public class ChooserActivity extends ResolverActivity {

        @Override
        public int getCount() {
            int count = super.getCount();
            if (mServiceTargets != null) {
                count += mServiceTargets.size();
            }
            return count;
            return super.getCount() + mServiceTargets.size() + mCallerTargets.size();
        }

        @Override
        public TargetInfo getItem(int position) {
            int offset = 0;
            if (mServiceTargets != null) {

            final int callerTargetCount = mCallerTargets.size();
            if (position < callerTargetCount) {
                return mCallerTargets.get(position);
            }
            offset += callerTargetCount;

            final int serviceTargetCount = mServiceTargets.size();
                if (position < serviceTargetCount) {
                    return mServiceTargets.get(position);
            if (position - offset < serviceTargetCount) {
                return mServiceTargets.get(position - offset);
            }
            offset += serviceTargetCount;
            }

            return super.getItem(position - offset);
        }

+4 −0
Original line number Diff line number Diff line
@@ -376,6 +376,10 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic
        }
    }

    public Intent getTargetIntent() {
        return mIntent;
    }

    private String getReferrerPackageName() {
        final Uri referrer = getReferrer();
        if (referrer != null && "android-app".equals(referrer.getScheme())) {