Merge "ActivityChooserView not showing highest ranked target if default action not shown."

This commit is contained in:
Svetoslav Ganov
2011-09-20 17:41:59 -07:00
committed by Android (Google) Code Review

View File

@@ -23,12 +23,10 @@ import android.content.pm.ResolveInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.database.DataSetObserver; import android.database.DataSetObserver;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -299,10 +297,12 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
ListPopupWindow popupWindow = getListPopupWindow(); ListPopupWindow popupWindow = getListPopupWindow();
if (!popupWindow.isShowing()) { if (!popupWindow.isShowing()) {
if (mIsSelectingDefaultActivity) { final boolean defaultActivityButtonShown =
mAdapter.setShowDefaultActivity(true); mDefaultActivityButton.getVisibility() == VISIBLE;
if (mIsSelectingDefaultActivity || !defaultActivityButtonShown) {
mAdapter.setShowDefaultActivity(true, defaultActivityButtonShown);
} else { } else {
mAdapter.setShowDefaultActivity(false); mAdapter.setShowDefaultActivity(false, false);
} }
final int contentWidth = Math.min(mAdapter.measureContentWidth(), mListPopupMaxWidth); final int contentWidth = Math.min(mAdapter.measureContentWidth(), mListPopupMaxWidth);
popupWindow.setContentWidth(contentWidth); popupWindow.setContentWidth(contentWidth);
@@ -476,8 +476,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
mAdapter.getDataModel().setDefaultActivity(position); mAdapter.getDataModel().setDefaultActivity(position);
} }
} else { } else {
// The first item in the model is default action => adjust index // If the default target is not shown in the list, the first
Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1); // item in the model is default action => adjust index
position = mAdapter.getShowDefaultActivity() ? position : position + 1;
Intent launchIntent = mAdapter.getDataModel().chooseActivity(position);
if (launchIntent != null) { if (launchIntent != null) {
mContext.startActivity(launchIntent); mContext.startActivity(launchIntent);
} }
@@ -553,6 +555,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
private boolean mShowDefaultActivity; private boolean mShowDefaultActivity;
private boolean mHighlightDefaultActivity;
private boolean mShowFooterView; private boolean mShowFooterView;
public void setDataModel(ActivityChooserModel dataModel) { public void setDataModel(ActivityChooserModel dataModel) {
@@ -640,7 +644,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
TextView titleView = (TextView) convertView.findViewById(R.id.title); TextView titleView = (TextView) convertView.findViewById(R.id.title);
titleView.setText(activity.loadLabel(packageManager)); titleView.setText(activity.loadLabel(packageManager));
// Highlight the default. // Highlight the default.
if (mShowDefaultActivity && position == 0) { if (mShowDefaultActivity && position == 0 && mHighlightDefaultActivity) {
convertView.setActivated(true); convertView.setActivated(true);
} else { } else {
convertView.setActivated(false); convertView.setActivated(false);
@@ -709,11 +713,18 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
return mDataModel; return mDataModel;
} }
public void setShowDefaultActivity(boolean showDefaultActivity) { public void setShowDefaultActivity(boolean showDefaultActivity,
if (mShowDefaultActivity != showDefaultActivity) { boolean highlightDefaultActivity) {
if (mShowDefaultActivity != showDefaultActivity
|| mHighlightDefaultActivity != highlightDefaultActivity) {
mShowDefaultActivity = showDefaultActivity; mShowDefaultActivity = showDefaultActivity;
mHighlightDefaultActivity = highlightDefaultActivity;
notifyDataSetChanged(); notifyDataSetChanged();
} }
} }
public boolean getShowDefaultActivity() {
return mShowDefaultActivity;
}
} }
} }