589 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			589 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.Intent;
 | |
| import android.content.pm.PackageManager;
 | |
| import android.content.pm.ResolveInfo;
 | |
| import android.content.res.Resources;
 | |
| import android.content.res.TypedArray;
 | |
| import android.database.DataSetObserver;
 | |
| import android.graphics.drawable.ColorDrawable;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.ViewTreeObserver;
 | |
| import android.view.accessibility.AccessibilityNodeInfo;
 | |
| import android.widget.AdapterView;
 | |
| import android.widget.BaseAdapter;
 | |
| import android.widget.FrameLayout;
 | |
| import android.widget.ImageView;
 | |
| import android.widget.LinearLayout;
 | |
| import android.widget.PopupWindow;
 | |
| import android.widget.TextView;
 | |
| import androidx.appcompat.R;
 | |
| import androidx.appcompat.view.menu.ShowableListMenu;
 | |
| import androidx.appcompat.widget.ActivityChooserModel;
 | |
| import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure;
 | |
| import androidx.core.view.ActionProvider;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class ActivityChooserView extends ViewGroup implements ActivityChooserModel.ActivityChooserModelClient {
 | |
|     private final View mActivityChooserContent;
 | |
|     private final Drawable mActivityChooserContentBackground;
 | |
|     final ActivityChooserViewAdapter mAdapter;
 | |
|     private final Callbacks mCallbacks;
 | |
|     private int mDefaultActionButtonContentDescription;
 | |
|     final FrameLayout mDefaultActivityButton;
 | |
|     private final ImageView mDefaultActivityButtonImage;
 | |
|     final FrameLayout mExpandActivityOverflowButton;
 | |
|     private final ImageView mExpandActivityOverflowButtonImage;
 | |
|     int mInitialActivityCount;
 | |
|     private boolean mIsAttachedToWindow;
 | |
|     boolean mIsSelectingDefaultActivity;
 | |
|     private final int mListPopupMaxWidth;
 | |
|     private ListPopupWindow mListPopupWindow;
 | |
|     final DataSetObserver mModelDataSetObserver;
 | |
|     PopupWindow.OnDismissListener mOnDismissListener;
 | |
|     private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener;
 | |
|     ActionProvider mProvider;
 | |
| 
 | |
|     public void setDefaultActionButtonContentDescription(int i) {
 | |
|         this.mDefaultActionButtonContentDescription = i;
 | |
|     }
 | |
| 
 | |
|     public void setInitialActivityCount(int i) {
 | |
|         this.mInitialActivityCount = i;
 | |
|     }
 | |
| 
 | |
|     public void setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) {
 | |
|         this.mOnDismissListener = onDismissListener;
 | |
|     }
 | |
| 
 | |
|     public void setProvider(ActionProvider actionProvider) {
 | |
|         this.mProvider = actionProvider;
 | |
|     }
 | |
| 
 | |
|     public ActivityChooserView(Context context) {
 | |
|         this(context, null);
 | |
|     }
 | |
| 
 | |
|     public ActivityChooserView(Context context, AttributeSet attributeSet) {
 | |
|         this(context, attributeSet, 0);
 | |
|     }
 | |
| 
 | |
|     public ActivityChooserView(Context context, AttributeSet attributeSet, int i) {
 | |
|         super(context, attributeSet, i);
 | |
|         this.mModelDataSetObserver = new DataSetObserver() { // from class: androidx.appcompat.widget.ActivityChooserView.1
 | |
|             @Override // android.database.DataSetObserver
 | |
|             public void onChanged() {
 | |
|                 super.onChanged();
 | |
|                 ActivityChooserView.this.mAdapter.notifyDataSetChanged();
 | |
|             }
 | |
| 
 | |
|             @Override // android.database.DataSetObserver
 | |
|             public void onInvalidated() {
 | |
|                 super.onInvalidated();
 | |
|                 ActivityChooserView.this.mAdapter.notifyDataSetInvalidated();
 | |
|             }
 | |
|         };
 | |
|         this.mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { // from class: androidx.appcompat.widget.ActivityChooserView.2
 | |
|             @Override // android.view.ViewTreeObserver.OnGlobalLayoutListener
 | |
|             public void onGlobalLayout() {
 | |
|                 if (ActivityChooserView.this.isShowingPopup()) {
 | |
|                     if (!ActivityChooserView.this.isShown()) {
 | |
|                         ActivityChooserView.this.getListPopupWindow().dismiss();
 | |
|                         return;
 | |
|                     }
 | |
|                     ActivityChooserView.this.getListPopupWindow().show();
 | |
|                     if (ActivityChooserView.this.mProvider != null) {
 | |
|                         ActivityChooserView.this.mProvider.subUiVisibilityChanged(true);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         };
 | |
|         this.mInitialActivityCount = 4;
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ActivityChooserView, i, 0);
 | |
|         ViewCompat.saveAttributeDataForStyleable(this, context, R.styleable.ActivityChooserView, attributeSet, obtainStyledAttributes, i, 0);
 | |
|         this.mInitialActivityCount = obtainStyledAttributes.getInt(R.styleable.ActivityChooserView_initialActivityCount, 4);
 | |
|         Drawable drawable = obtainStyledAttributes.getDrawable(R.styleable.ActivityChooserView_expandActivityOverflowButtonDrawable);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         LayoutInflater.from(getContext()).inflate(R.layout.abc_activity_chooser_view, (ViewGroup) this, true);
 | |
|         Callbacks callbacks = new Callbacks();
 | |
|         this.mCallbacks = callbacks;
 | |
|         View findViewById = findViewById(R.id.activity_chooser_view_content);
 | |
|         this.mActivityChooserContent = findViewById;
 | |
|         this.mActivityChooserContentBackground = findViewById.getBackground();
 | |
|         FrameLayout frameLayout = (FrameLayout) findViewById(R.id.default_activity_button);
 | |
|         this.mDefaultActivityButton = frameLayout;
 | |
|         frameLayout.setOnClickListener(callbacks);
 | |
|         frameLayout.setOnLongClickListener(callbacks);
 | |
|         this.mDefaultActivityButtonImage = (ImageView) frameLayout.findViewById(R.id.image);
 | |
|         FrameLayout frameLayout2 = (FrameLayout) findViewById(R.id.expand_activities_button);
 | |
|         frameLayout2.setOnClickListener(callbacks);
 | |
|         frameLayout2.setAccessibilityDelegate(new View.AccessibilityDelegate() { // from class: androidx.appcompat.widget.ActivityChooserView.3
 | |
|             @Override // android.view.View.AccessibilityDelegate
 | |
|             public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfo accessibilityNodeInfo) {
 | |
|                 super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfo);
 | |
|                 AccessibilityNodeInfoCompat.wrap(accessibilityNodeInfo).setCanOpenPopup(true);
 | |
|             }
 | |
|         });
 | |
|         frameLayout2.setOnTouchListener(new ForwardingListener(frameLayout2) { // from class: androidx.appcompat.widget.ActivityChooserView.4
 | |
|             @Override // androidx.appcompat.widget.ForwardingListener
 | |
|             public ShowableListMenu getPopup() {
 | |
|                 return ActivityChooserView.this.getListPopupWindow();
 | |
|             }
 | |
| 
 | |
|             @Override // androidx.appcompat.widget.ForwardingListener
 | |
|             protected boolean onForwardingStarted() {
 | |
|                 ActivityChooserView.this.showPopup();
 | |
|                 return true;
 | |
|             }
 | |
| 
 | |
|             @Override // androidx.appcompat.widget.ForwardingListener
 | |
|             protected boolean onForwardingStopped() {
 | |
|                 ActivityChooserView.this.dismissPopup();
 | |
|                 return true;
 | |
|             }
 | |
|         });
 | |
|         this.mExpandActivityOverflowButton = frameLayout2;
 | |
|         ImageView imageView = (ImageView) frameLayout2.findViewById(R.id.image);
 | |
|         this.mExpandActivityOverflowButtonImage = imageView;
 | |
|         imageView.setImageDrawable(drawable);
 | |
|         ActivityChooserViewAdapter activityChooserViewAdapter = new ActivityChooserViewAdapter();
 | |
|         this.mAdapter = activityChooserViewAdapter;
 | |
|         activityChooserViewAdapter.registerDataSetObserver(new DataSetObserver() { // from class: androidx.appcompat.widget.ActivityChooserView.5
 | |
|             @Override // android.database.DataSetObserver
 | |
|             public void onChanged() {
 | |
|                 super.onChanged();
 | |
|                 ActivityChooserView.this.updateAppearance();
 | |
|             }
 | |
|         });
 | |
|         Resources resources = context.getResources();
 | |
|         this.mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2, resources.getDimensionPixelSize(R.dimen.abc_config_prefDialogWidth));
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.ActivityChooserModel.ActivityChooserModelClient
 | |
|     public void setActivityChooserModel(ActivityChooserModel activityChooserModel) {
 | |
|         this.mAdapter.setDataModel(activityChooserModel);
 | |
|         if (isShowingPopup()) {
 | |
|             dismissPopup();
 | |
|             showPopup();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setExpandActivityOverflowButtonDrawable(Drawable drawable) {
 | |
|         this.mExpandActivityOverflowButtonImage.setImageDrawable(drawable);
 | |
|     }
 | |
| 
 | |
|     public void setExpandActivityOverflowButtonContentDescription(int i) {
 | |
|         this.mExpandActivityOverflowButtonImage.setContentDescription(getContext().getString(i));
 | |
|     }
 | |
| 
 | |
|     public boolean showPopup() {
 | |
|         if (isShowingPopup() || !this.mIsAttachedToWindow) {
 | |
|             return false;
 | |
|         }
 | |
|         this.mIsSelectingDefaultActivity = false;
 | |
|         showPopupUnchecked(this.mInitialActivityCount);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Multi-variable type inference failed */
 | |
|     /* JADX WARN: Type inference failed for: r0v15 */
 | |
|     /* JADX WARN: Type inference failed for: r0v6 */
 | |
|     /* JADX WARN: Type inference failed for: r0v7, types: [boolean, int] */
 | |
|     void showPopupUnchecked(int i) {
 | |
|         if (this.mAdapter.getDataModel() == null) {
 | |
|             throw new IllegalStateException("No data model. Did you call #setDataModel?");
 | |
|         }
 | |
|         getViewTreeObserver().addOnGlobalLayoutListener(this.mOnGlobalLayoutListener);
 | |
|         ?? r0 = this.mDefaultActivityButton.getVisibility() == 0 ? 1 : 0;
 | |
|         int activityCount = this.mAdapter.getActivityCount();
 | |
|         if (i != Integer.MAX_VALUE && activityCount > i + r0) {
 | |
|             this.mAdapter.setShowFooterView(true);
 | |
|             this.mAdapter.setMaxActivityCount(i - 1);
 | |
|         } else {
 | |
|             this.mAdapter.setShowFooterView(false);
 | |
|             this.mAdapter.setMaxActivityCount(i);
 | |
|         }
 | |
|         ListPopupWindow listPopupWindow = getListPopupWindow();
 | |
|         if (listPopupWindow.isShowing()) {
 | |
|             return;
 | |
|         }
 | |
|         if (this.mIsSelectingDefaultActivity || r0 == 0) {
 | |
|             this.mAdapter.setShowDefaultActivity(true, r0);
 | |
|         } else {
 | |
|             this.mAdapter.setShowDefaultActivity(false, false);
 | |
|         }
 | |
|         listPopupWindow.setContentWidth(Math.min(this.mAdapter.measureContentWidth(), this.mListPopupMaxWidth));
 | |
|         listPopupWindow.show();
 | |
|         ActionProvider actionProvider = this.mProvider;
 | |
|         if (actionProvider != null) {
 | |
|             actionProvider.subUiVisibilityChanged(true);
 | |
|         }
 | |
|         listPopupWindow.getListView().setContentDescription(getContext().getString(R.string.abc_activitychooserview_choose_application));
 | |
|         listPopupWindow.getListView().setSelector(new ColorDrawable(0));
 | |
|     }
 | |
| 
 | |
|     public boolean dismissPopup() {
 | |
|         if (!isShowingPopup()) {
 | |
|             return true;
 | |
|         }
 | |
|         getListPopupWindow().dismiss();
 | |
|         ViewTreeObserver viewTreeObserver = getViewTreeObserver();
 | |
|         if (!viewTreeObserver.isAlive()) {
 | |
|             return true;
 | |
|         }
 | |
|         viewTreeObserver.removeGlobalOnLayoutListener(this.mOnGlobalLayoutListener);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public boolean isShowingPopup() {
 | |
|         return getListPopupWindow().isShowing();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onAttachedToWindow() {
 | |
|         super.onAttachedToWindow();
 | |
|         ActivityChooserModel dataModel = this.mAdapter.getDataModel();
 | |
|         if (dataModel != null) {
 | |
|             dataModel.registerObserver(this.mModelDataSetObserver);
 | |
|         }
 | |
|         this.mIsAttachedToWindow = true;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         ActivityChooserModel dataModel = this.mAdapter.getDataModel();
 | |
|         if (dataModel != null) {
 | |
|             dataModel.unregisterObserver(this.mModelDataSetObserver);
 | |
|         }
 | |
|         ViewTreeObserver viewTreeObserver = getViewTreeObserver();
 | |
|         if (viewTreeObserver.isAlive()) {
 | |
|             viewTreeObserver.removeGlobalOnLayoutListener(this.mOnGlobalLayoutListener);
 | |
|         }
 | |
|         if (isShowingPopup()) {
 | |
|             dismissPopup();
 | |
|         }
 | |
|         this.mIsAttachedToWindow = false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onMeasure(int i, int i2) {
 | |
|         View view = this.mActivityChooserContent;
 | |
|         if (this.mDefaultActivityButton.getVisibility() != 0) {
 | |
|             i2 = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(i2), BasicMeasure.EXACTLY);
 | |
|         }
 | |
|         measureChild(view, i, i2);
 | |
|         setMeasuredDimension(view.getMeasuredWidth(), view.getMeasuredHeight());
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
 | |
|         this.mActivityChooserContent.layout(0, 0, i3 - i, i4 - i2);
 | |
|         if (isShowingPopup()) {
 | |
|             return;
 | |
|         }
 | |
|         dismissPopup();
 | |
|     }
 | |
| 
 | |
|     public ActivityChooserModel getDataModel() {
 | |
|         return this.mAdapter.getDataModel();
 | |
|     }
 | |
| 
 | |
|     ListPopupWindow getListPopupWindow() {
 | |
|         if (this.mListPopupWindow == null) {
 | |
|             ListPopupWindow listPopupWindow = new ListPopupWindow(getContext());
 | |
|             this.mListPopupWindow = listPopupWindow;
 | |
|             listPopupWindow.setAdapter(this.mAdapter);
 | |
|             this.mListPopupWindow.setAnchorView(this);
 | |
|             this.mListPopupWindow.setModal(true);
 | |
|             this.mListPopupWindow.setOnItemClickListener(this.mCallbacks);
 | |
|             this.mListPopupWindow.setOnDismissListener(this.mCallbacks);
 | |
|         }
 | |
|         return this.mListPopupWindow;
 | |
|     }
 | |
| 
 | |
|     void updateAppearance() {
 | |
|         if (this.mAdapter.getCount() > 0) {
 | |
|             this.mExpandActivityOverflowButton.setEnabled(true);
 | |
|         } else {
 | |
|             this.mExpandActivityOverflowButton.setEnabled(false);
 | |
|         }
 | |
|         int activityCount = this.mAdapter.getActivityCount();
 | |
|         int historySize = this.mAdapter.getHistorySize();
 | |
|         if (activityCount == 1 || (activityCount > 1 && historySize > 0)) {
 | |
|             this.mDefaultActivityButton.setVisibility(0);
 | |
|             ResolveInfo defaultActivity = this.mAdapter.getDefaultActivity();
 | |
|             PackageManager packageManager = getContext().getPackageManager();
 | |
|             this.mDefaultActivityButtonImage.setImageDrawable(defaultActivity.loadIcon(packageManager));
 | |
|             if (this.mDefaultActionButtonContentDescription != 0) {
 | |
|                 this.mDefaultActivityButton.setContentDescription(getContext().getString(this.mDefaultActionButtonContentDescription, defaultActivity.loadLabel(packageManager)));
 | |
|             }
 | |
|         } else {
 | |
|             this.mDefaultActivityButton.setVisibility(8);
 | |
|         }
 | |
|         if (this.mDefaultActivityButton.getVisibility() == 0) {
 | |
|             this.mActivityChooserContent.setBackgroundDrawable(this.mActivityChooserContentBackground);
 | |
|         } else {
 | |
|             this.mActivityChooserContent.setBackgroundDrawable(null);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private class Callbacks implements AdapterView.OnItemClickListener, View.OnClickListener, View.OnLongClickListener, PopupWindow.OnDismissListener {
 | |
|         Callbacks() {
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.AdapterView.OnItemClickListener
 | |
|         public void onItemClick(AdapterView<?> adapterView, View view, int i, long j) {
 | |
|             int itemViewType = ((ActivityChooserViewAdapter) adapterView.getAdapter()).getItemViewType(i);
 | |
|             if (itemViewType != 0) {
 | |
|                 if (itemViewType == 1) {
 | |
|                     ActivityChooserView.this.showPopupUnchecked(Integer.MAX_VALUE);
 | |
|                     return;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException();
 | |
|             }
 | |
|             ActivityChooserView.this.dismissPopup();
 | |
|             if (ActivityChooserView.this.mIsSelectingDefaultActivity) {
 | |
|                 if (i > 0) {
 | |
|                     ActivityChooserView.this.mAdapter.getDataModel().setDefaultActivity(i);
 | |
|                     return;
 | |
|                 }
 | |
|                 return;
 | |
|             }
 | |
|             if (!ActivityChooserView.this.mAdapter.getShowDefaultActivity()) {
 | |
|                 i++;
 | |
|             }
 | |
|             Intent chooseActivity = ActivityChooserView.this.mAdapter.getDataModel().chooseActivity(i);
 | |
|             if (chooseActivity != null) {
 | |
|                 chooseActivity.addFlags(524288);
 | |
|                 ActivityChooserView.this.getContext().startActivity(chooseActivity);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.View.OnClickListener
 | |
|         public void onClick(View view) {
 | |
|             if (view == ActivityChooserView.this.mDefaultActivityButton) {
 | |
|                 ActivityChooserView.this.dismissPopup();
 | |
|                 Intent chooseActivity = ActivityChooserView.this.mAdapter.getDataModel().chooseActivity(ActivityChooserView.this.mAdapter.getDataModel().getActivityIndex(ActivityChooserView.this.mAdapter.getDefaultActivity()));
 | |
|                 if (chooseActivity != null) {
 | |
|                     chooseActivity.addFlags(524288);
 | |
|                     ActivityChooserView.this.getContext().startActivity(chooseActivity);
 | |
|                     return;
 | |
|                 }
 | |
|                 return;
 | |
|             }
 | |
|             if (view == ActivityChooserView.this.mExpandActivityOverflowButton) {
 | |
|                 ActivityChooserView.this.mIsSelectingDefaultActivity = false;
 | |
|                 ActivityChooserView activityChooserView = ActivityChooserView.this;
 | |
|                 activityChooserView.showPopupUnchecked(activityChooserView.mInitialActivityCount);
 | |
|                 return;
 | |
|             }
 | |
|             throw new IllegalArgumentException();
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.View.OnLongClickListener
 | |
|         public boolean onLongClick(View view) {
 | |
|             if (view == ActivityChooserView.this.mDefaultActivityButton) {
 | |
|                 if (ActivityChooserView.this.mAdapter.getCount() > 0) {
 | |
|                     ActivityChooserView.this.mIsSelectingDefaultActivity = true;
 | |
|                     ActivityChooserView activityChooserView = ActivityChooserView.this;
 | |
|                     activityChooserView.showPopupUnchecked(activityChooserView.mInitialActivityCount);
 | |
|                 }
 | |
|                 return true;
 | |
|             }
 | |
|             throw new IllegalArgumentException();
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.PopupWindow.OnDismissListener
 | |
|         public void onDismiss() {
 | |
|             notifyOnDismissListener();
 | |
|             if (ActivityChooserView.this.mProvider != null) {
 | |
|                 ActivityChooserView.this.mProvider.subUiVisibilityChanged(false);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void notifyOnDismissListener() {
 | |
|             if (ActivityChooserView.this.mOnDismissListener != null) {
 | |
|                 ActivityChooserView.this.mOnDismissListener.onDismiss();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private class ActivityChooserViewAdapter extends BaseAdapter {
 | |
|         private static final int ITEM_VIEW_TYPE_ACTIVITY = 0;
 | |
|         private static final int ITEM_VIEW_TYPE_COUNT = 3;
 | |
|         private static final int ITEM_VIEW_TYPE_FOOTER = 1;
 | |
|         public static final int MAX_ACTIVITY_COUNT_DEFAULT = 4;
 | |
|         public static final int MAX_ACTIVITY_COUNT_UNLIMITED = Integer.MAX_VALUE;
 | |
|         private ActivityChooserModel mDataModel;
 | |
|         private boolean mHighlightDefaultActivity;
 | |
|         private int mMaxActivityCount = 4;
 | |
|         private boolean mShowDefaultActivity;
 | |
|         private boolean mShowFooterView;
 | |
| 
 | |
|         public ActivityChooserModel getDataModel() {
 | |
|             return this.mDataModel;
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.Adapter
 | |
|         public long getItemId(int i) {
 | |
|             return i;
 | |
|         }
 | |
| 
 | |
|         public boolean getShowDefaultActivity() {
 | |
|             return this.mShowDefaultActivity;
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.BaseAdapter, android.widget.Adapter
 | |
|         public int getViewTypeCount() {
 | |
|             return 3;
 | |
|         }
 | |
| 
 | |
|         ActivityChooserViewAdapter() {
 | |
|         }
 | |
| 
 | |
|         public void setDataModel(ActivityChooserModel activityChooserModel) {
 | |
|             ActivityChooserModel dataModel = ActivityChooserView.this.mAdapter.getDataModel();
 | |
|             if (dataModel != null && ActivityChooserView.this.isShown()) {
 | |
|                 dataModel.unregisterObserver(ActivityChooserView.this.mModelDataSetObserver);
 | |
|             }
 | |
|             this.mDataModel = activityChooserModel;
 | |
|             if (activityChooserModel != null && ActivityChooserView.this.isShown()) {
 | |
|                 activityChooserModel.registerObserver(ActivityChooserView.this.mModelDataSetObserver);
 | |
|             }
 | |
|             notifyDataSetChanged();
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.BaseAdapter, android.widget.Adapter
 | |
|         public int getItemViewType(int i) {
 | |
|             return (this.mShowFooterView && i == getCount() - 1) ? 1 : 0;
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.Adapter
 | |
|         public int getCount() {
 | |
|             int activityCount = this.mDataModel.getActivityCount();
 | |
|             if (!this.mShowDefaultActivity && this.mDataModel.getDefaultActivity() != null) {
 | |
|                 activityCount--;
 | |
|             }
 | |
|             int min = Math.min(activityCount, this.mMaxActivityCount);
 | |
|             return this.mShowFooterView ? min + 1 : min;
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.Adapter
 | |
|         public Object getItem(int i) {
 | |
|             int itemViewType = getItemViewType(i);
 | |
|             if (itemViewType != 0) {
 | |
|                 if (itemViewType == 1) {
 | |
|                     return null;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException();
 | |
|             }
 | |
|             if (!this.mShowDefaultActivity && this.mDataModel.getDefaultActivity() != null) {
 | |
|                 i++;
 | |
|             }
 | |
|             return this.mDataModel.getActivity(i);
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.Adapter
 | |
|         public View getView(int i, View view, ViewGroup viewGroup) {
 | |
|             int itemViewType = getItemViewType(i);
 | |
|             if (itemViewType != 0) {
 | |
|                 if (itemViewType == 1) {
 | |
|                     if (view != null && view.getId() == 1) {
 | |
|                         return view;
 | |
|                     }
 | |
|                     View inflate = LayoutInflater.from(ActivityChooserView.this.getContext()).inflate(R.layout.abc_activity_chooser_view_list_item, viewGroup, false);
 | |
|                     inflate.setId(1);
 | |
|                     ((TextView) inflate.findViewById(R.id.title)).setText(ActivityChooserView.this.getContext().getString(R.string.abc_activity_chooser_view_see_all));
 | |
|                     return inflate;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException();
 | |
|             }
 | |
|             if (view == null || view.getId() != R.id.list_item) {
 | |
|                 view = LayoutInflater.from(ActivityChooserView.this.getContext()).inflate(R.layout.abc_activity_chooser_view_list_item, viewGroup, false);
 | |
|             }
 | |
|             PackageManager packageManager = ActivityChooserView.this.getContext().getPackageManager();
 | |
|             ImageView imageView = (ImageView) view.findViewById(R.id.icon);
 | |
|             ResolveInfo resolveInfo = (ResolveInfo) getItem(i);
 | |
|             imageView.setImageDrawable(resolveInfo.loadIcon(packageManager));
 | |
|             ((TextView) view.findViewById(R.id.title)).setText(resolveInfo.loadLabel(packageManager));
 | |
|             if (this.mShowDefaultActivity && i == 0 && this.mHighlightDefaultActivity) {
 | |
|                 view.setActivated(true);
 | |
|             } else {
 | |
|                 view.setActivated(false);
 | |
|             }
 | |
|             return view;
 | |
|         }
 | |
| 
 | |
|         public int measureContentWidth() {
 | |
|             int i = this.mMaxActivityCount;
 | |
|             this.mMaxActivityCount = Integer.MAX_VALUE;
 | |
|             int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, 0);
 | |
|             int makeMeasureSpec2 = View.MeasureSpec.makeMeasureSpec(0, 0);
 | |
|             int count = getCount();
 | |
|             View view = null;
 | |
|             int i2 = 0;
 | |
|             for (int i3 = 0; i3 < count; i3++) {
 | |
|                 view = getView(i3, view, null);
 | |
|                 view.measure(makeMeasureSpec, makeMeasureSpec2);
 | |
|                 i2 = Math.max(i2, view.getMeasuredWidth());
 | |
|             }
 | |
|             this.mMaxActivityCount = i;
 | |
|             return i2;
 | |
|         }
 | |
| 
 | |
|         public void setMaxActivityCount(int i) {
 | |
|             if (this.mMaxActivityCount != i) {
 | |
|                 this.mMaxActivityCount = i;
 | |
|                 notifyDataSetChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public ResolveInfo getDefaultActivity() {
 | |
|             return this.mDataModel.getDefaultActivity();
 | |
|         }
 | |
| 
 | |
|         public void setShowFooterView(boolean z) {
 | |
|             if (this.mShowFooterView != z) {
 | |
|                 this.mShowFooterView = z;
 | |
|                 notifyDataSetChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public int getActivityCount() {
 | |
|             return this.mDataModel.getActivityCount();
 | |
|         }
 | |
| 
 | |
|         public int getHistorySize() {
 | |
|             return this.mDataModel.getHistorySize();
 | |
|         }
 | |
| 
 | |
|         public void setShowDefaultActivity(boolean z, boolean z2) {
 | |
|             if (this.mShowDefaultActivity == z && this.mHighlightDefaultActivity == z2) {
 | |
|                 return;
 | |
|             }
 | |
|             this.mShowDefaultActivity = z;
 | |
|             this.mHighlightDefaultActivity = z2;
 | |
|             notifyDataSetChanged();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class InnerLayout extends LinearLayout {
 | |
|         private static final int[] TINT_ATTRS = {android.R.attr.background};
 | |
| 
 | |
|         public InnerLayout(Context context, AttributeSet attributeSet) {
 | |
|             super(context, attributeSet);
 | |
|             TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, attributeSet, TINT_ATTRS);
 | |
|             setBackgroundDrawable(obtainStyledAttributes.getDrawable(0));
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|     }
 | |
| }
 |