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

Commit 921e8303 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am 0dd9ec14: Merge "Make ResolverActivity update dynamically." into ics-mr1

* commit '0dd9ec14':
  Make ResolverActivity update dynamically.
parents 673a66e3 0dd9ec14
Loading
Loading
Loading
Loading
+57 −15
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.internal.app;

import com.android.internal.R;
import com.android.internal.content.PackageMonitor;

import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
@@ -58,6 +60,12 @@ public class ResolverActivity extends AlertActivity implements
    private TextView mClearDefaultHint;
    private PackageManager mPm;

    private final PackageMonitor mPackageMonitor = new PackageMonitor() {
        @Override public void onSomePackagesChanged() {
            mAdapter.handlePackagesChanged();
        }
    };

    private Intent makeMyIntent() {
        Intent intent = new Intent(getIntent());
        // The resolver activity is set to be hidden from recent tasks.
@@ -88,6 +96,8 @@ public class ResolverActivity extends AlertActivity implements
        ap.mTitle = title;
        ap.mOnClickListener = this;

        mPackageMonitor.register(this, false);

        if (alwaysUseOption) {
            LayoutInflater inflater = (LayoutInflater) getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
@@ -114,6 +124,19 @@ public class ResolverActivity extends AlertActivity implements
        setupAlert();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        mPackageMonitor.register(this, false);
        mAdapter.handlePackagesChanged();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mPackageMonitor.unregister();
    }

    public void onClick(DialogInterface dialog, int which) {
        ResolveInfo ri = mAdapter.resolveInfoForPosition(which);
        Intent intent = mAdapter.intentForPosition(which);
@@ -225,29 +248,48 @@ public class ResolverActivity extends AlertActivity implements
    }

    private final class ResolveListAdapter extends BaseAdapter {
        private final Intent[] mInitialIntents;
        private final List<ResolveInfo> mBaseResolveList;
        private final Intent mIntent;
        private final LayoutInflater mInflater;

        private List<ResolveInfo> mCurrentResolveList;
        private List<DisplayResolveInfo> mList;

        public ResolveListAdapter(Context context, Intent intent,
                Intent[] initialIntents, List<ResolveInfo> rList) {
            mIntent = new Intent(intent);
            mIntent.setComponent(null);
            mInitialIntents = initialIntents;
            mBaseResolveList = rList;
            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rebuildList();
        }

        public void handlePackagesChanged() {
            rebuildList();
            notifyDataSetChanged();
            if (mList.size() <= 0) {
                // We no longer have any items...  just finish the activity.
                finish();
            }
        }

            if (rList == null) {
                rList = mPm.queryIntentActivities(
                        intent, PackageManager.MATCH_DEFAULT_ONLY
        private void rebuildList() {
            if (mBaseResolveList != null) {
                mCurrentResolveList = mBaseResolveList;
            } else {
                mCurrentResolveList = mPm.queryIntentActivities(
                        mIntent, PackageManager.MATCH_DEFAULT_ONLY
                        | (mAlwaysCheck != null ? PackageManager.GET_RESOLVED_FILTER : 0));
            }
            int N;
            if ((rList != null) && ((N = rList.size()) > 0)) {
            if ((mCurrentResolveList != null) && ((N = mCurrentResolveList.size()) > 0)) {
                // Only display the first matches that are either of equal
                // priority or have asked to be default options.
                ResolveInfo r0 = rList.get(0);
                ResolveInfo r0 = mCurrentResolveList.get(0);
                for (int i=1; i<N; i++) {
                    ResolveInfo ri = rList.get(i);
                    ResolveInfo ri = mCurrentResolveList.get(i);
                    if (false) Log.v(
                        "ResolveListActivity",
                        r0.activityInfo.name + "=" +
@@ -257,7 +299,7 @@ public class ResolverActivity extends AlertActivity implements
                   if (r0.priority != ri.priority ||
                        r0.isDefault != ri.isDefault) {
                        while (i < N) {
                            rList.remove(i);
                            mCurrentResolveList.remove(i);
                            N--;
                        }
                    }
@@ -265,15 +307,15 @@ public class ResolverActivity extends AlertActivity implements
                if (N > 1) {
                    ResolveInfo.DisplayNameComparator rComparator =
                            new ResolveInfo.DisplayNameComparator(mPm);
                    Collections.sort(rList, rComparator);
                    Collections.sort(mCurrentResolveList, rComparator);
                }
                
                mList = new ArrayList<DisplayResolveInfo>();
                
                // First put the initial items at the top.
                if (initialIntents != null) {
                    for (int i=0; i<initialIntents.length; i++) {
                        Intent ii = initialIntents[i];
                if (mInitialIntents != null) {
                    for (int i=0; i<mInitialIntents.length; i++) {
                        Intent ii = mInitialIntents[i];
                        if (ii == null) {
                            continue;
                        }
@@ -300,14 +342,14 @@ public class ResolverActivity extends AlertActivity implements
                
                // Check for applications with same name and use application name or
                // package name if necessary
                r0 = rList.get(0);
                r0 = mCurrentResolveList.get(0);
                int start = 0;
                CharSequence r0Label =  r0.loadLabel(mPm);
                for (int i = 1; i < N; i++) {
                    if (r0Label == null) {
                        r0Label = r0.activityInfo.packageName;
                    }
                    ResolveInfo ri = rList.get(i);
                    ResolveInfo ri = mCurrentResolveList.get(i);
                    CharSequence riLabel = ri.loadLabel(mPm);
                    if (riLabel == null) {
                        riLabel = ri.activityInfo.packageName;
@@ -315,13 +357,13 @@ public class ResolverActivity extends AlertActivity implements
                    if (riLabel.equals(r0Label)) {
                        continue;
                    }
                    processGroup(rList, start, (i-1), r0, r0Label);
                    processGroup(mCurrentResolveList, start, (i-1), r0, r0Label);
                    r0 = ri;
                    r0Label = riLabel;
                    start = i;
                }
                // Process last group
                processGroup(rList, start, (N-1), r0, r0Label);
                processGroup(mCurrentResolveList, start, (N-1), r0, r0Label);
            }
        }