From efab4e7f59835cb2ea9fdc42cc8fd9ea3771d261 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 20 Sep 2011 14:35:39 -0700 Subject: ActivityChooserView not showing highest ranked target if default action not shown. The view was not showing the highest ranked activity if the default action button was not shown (happens if no history is present). bug:5224159 Change-Id: I66536513e14496568ea2034467bd29ea4bc93cdb --- core/java/android/widget/ActivityChooserView.java | 31 +++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'core/java/android') diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java index 312303d..25af3fa 100644 --- a/core/java/android/widget/ActivityChooserView.java +++ b/core/java/android/widget/ActivityChooserView.java @@ -23,12 +23,10 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.database.DataSetObserver; -import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; -import android.view.View.MeasureSpec; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; @@ -299,10 +297,12 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod ListPopupWindow popupWindow = getListPopupWindow(); if (!popupWindow.isShowing()) { - if (mIsSelectingDefaultActivity) { - mAdapter.setShowDefaultActivity(true); + final boolean defaultActivityButtonShown = + mDefaultActivityButton.getVisibility() == VISIBLE; + if (mIsSelectingDefaultActivity || !defaultActivityButtonShown) { + mAdapter.setShowDefaultActivity(true, defaultActivityButtonShown); } else { - mAdapter.setShowDefaultActivity(false); + mAdapter.setShowDefaultActivity(false, false); } final int contentWidth = Math.min(mAdapter.measureContentWidth(), mListPopupMaxWidth); popupWindow.setContentWidth(contentWidth); @@ -476,8 +476,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod mAdapter.getDataModel().setDefaultActivity(position); } } else { - // The first item in the model is default action => adjust index - Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1); + // If the default target is not shown in the list, the first + // item in the model is default action => adjust index + position = mAdapter.getShowDefaultActivity() ? position : position + 1; + Intent launchIntent = mAdapter.getDataModel().chooseActivity(position); if (launchIntent != null) { mContext.startActivity(launchIntent); } @@ -553,6 +555,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod private boolean mShowDefaultActivity; + private boolean mHighlightDefaultActivity; + private boolean mShowFooterView; public void setDataModel(ActivityChooserModel dataModel) { @@ -640,7 +644,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod TextView titleView = (TextView) convertView.findViewById(R.id.title); titleView.setText(activity.loadLabel(packageManager)); // Highlight the default. - if (mShowDefaultActivity && position == 0) { + if (mShowDefaultActivity && position == 0 && mHighlightDefaultActivity) { convertView.setActivated(true); } else { convertView.setActivated(false); @@ -709,11 +713,18 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod return mDataModel; } - public void setShowDefaultActivity(boolean showDefaultActivity) { - if (mShowDefaultActivity != showDefaultActivity) { + public void setShowDefaultActivity(boolean showDefaultActivity, + boolean highlightDefaultActivity) { + if (mShowDefaultActivity != showDefaultActivity + || mHighlightDefaultActivity != highlightDefaultActivity) { mShowDefaultActivity = showDefaultActivity; + mHighlightDefaultActivity = highlightDefaultActivity; notifyDataSetChanged(); } } + + public boolean getShowDefaultActivity() { + return mShowDefaultActivity; + } } } -- cgit v1.1