Loading core/java/com/android/internal/app/ResolverActivity.java +57 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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 + "=" + Loading @@ -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--; } } Loading @@ -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; } Loading @@ -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; Loading @@ -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); } } Loading Loading
core/java/com/android/internal/app/ResolverActivity.java +57 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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 + "=" + Loading @@ -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--; } } Loading @@ -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; } Loading @@ -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; Loading @@ -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); } } Loading