ADD week 5
This commit is contained in:
		| @@ -0,0 +1,290 @@ | ||||
| package androidx.appcompat.view.menu; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.Resources; | ||||
| import android.os.Parcelable; | ||||
| import android.view.Gravity; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewTreeObserver; | ||||
| import android.widget.AdapterView; | ||||
| import android.widget.FrameLayout; | ||||
| import android.widget.ListView; | ||||
| import android.widget.PopupWindow; | ||||
| import android.widget.TextView; | ||||
| import androidx.appcompat.R; | ||||
| import androidx.appcompat.view.menu.MenuPresenter; | ||||
| import androidx.appcompat.widget.MenuPopupWindow; | ||||
| import androidx.core.view.ViewCompat; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class StandardMenuPopup extends MenuPopup implements PopupWindow.OnDismissListener, AdapterView.OnItemClickListener, MenuPresenter, View.OnKeyListener { | ||||
|     private static final int ITEM_LAYOUT = R.layout.abc_popup_menu_item_layout; | ||||
|     private final MenuAdapter mAdapter; | ||||
|     private View mAnchorView; | ||||
|     private int mContentWidth; | ||||
|     private final Context mContext; | ||||
|     private boolean mHasContentWidth; | ||||
|     private final MenuBuilder mMenu; | ||||
|     private PopupWindow.OnDismissListener mOnDismissListener; | ||||
|     private final boolean mOverflowOnly; | ||||
|     final MenuPopupWindow mPopup; | ||||
|     private final int mPopupMaxWidth; | ||||
|     private final int mPopupStyleAttr; | ||||
|     private final int mPopupStyleRes; | ||||
|     private MenuPresenter.Callback mPresenterCallback; | ||||
|     private boolean mShowTitle; | ||||
|     View mShownAnchorView; | ||||
|     ViewTreeObserver mTreeObserver; | ||||
|     private boolean mWasDismissed; | ||||
|     final ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { // from class: androidx.appcompat.view.menu.StandardMenuPopup.1 | ||||
|         @Override // android.view.ViewTreeObserver.OnGlobalLayoutListener | ||||
|         public void onGlobalLayout() { | ||||
|             if (!StandardMenuPopup.this.isShowing() || StandardMenuPopup.this.mPopup.isModal()) { | ||||
|                 return; | ||||
|             } | ||||
|             View view = StandardMenuPopup.this.mShownAnchorView; | ||||
|             if (view == null || !view.isShown()) { | ||||
|                 StandardMenuPopup.this.dismiss(); | ||||
|             } else { | ||||
|                 StandardMenuPopup.this.mPopup.show(); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|     private final View.OnAttachStateChangeListener mAttachStateChangeListener = new View.OnAttachStateChangeListener() { // from class: androidx.appcompat.view.menu.StandardMenuPopup.2 | ||||
|         @Override // android.view.View.OnAttachStateChangeListener | ||||
|         public void onViewAttachedToWindow(View view) { | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.View.OnAttachStateChangeListener | ||||
|         public void onViewDetachedFromWindow(View view) { | ||||
|             if (StandardMenuPopup.this.mTreeObserver != null) { | ||||
|                 if (!StandardMenuPopup.this.mTreeObserver.isAlive()) { | ||||
|                     StandardMenuPopup.this.mTreeObserver = view.getViewTreeObserver(); | ||||
|                 } | ||||
|                 StandardMenuPopup.this.mTreeObserver.removeGlobalOnLayoutListener(StandardMenuPopup.this.mGlobalLayoutListener); | ||||
|             } | ||||
|             view.removeOnAttachStateChangeListener(this); | ||||
|         } | ||||
|     }; | ||||
|     private int mDropDownGravity = 0; | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void addMenu(MenuBuilder menuBuilder) { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean flagActionItems() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void onRestoreInstanceState(Parcelable parcelable) { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public Parcelable onSaveInstanceState() { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setAnchorView(View view) { | ||||
|         this.mAnchorView = view; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void setCallback(MenuPresenter.Callback callback) { | ||||
|         this.mPresenterCallback = callback; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setGravity(int i) { | ||||
|         this.mDropDownGravity = i; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) { | ||||
|         this.mOnDismissListener = onDismissListener; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setShowTitle(boolean z) { | ||||
|         this.mShowTitle = z; | ||||
|     } | ||||
|  | ||||
|     public StandardMenuPopup(Context context, MenuBuilder menuBuilder, View view, int i, int i2, boolean z) { | ||||
|         this.mContext = context; | ||||
|         this.mMenu = menuBuilder; | ||||
|         this.mOverflowOnly = z; | ||||
|         this.mAdapter = new MenuAdapter(menuBuilder, LayoutInflater.from(context), z, ITEM_LAYOUT); | ||||
|         this.mPopupStyleAttr = i; | ||||
|         this.mPopupStyleRes = i2; | ||||
|         Resources resources = context.getResources(); | ||||
|         this.mPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2, resources.getDimensionPixelSize(R.dimen.abc_config_prefDialogWidth)); | ||||
|         this.mAnchorView = view; | ||||
|         this.mPopup = new MenuPopupWindow(context, null, i, i2); | ||||
|         menuBuilder.addMenuPresenter(this, context); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setForceShowIcon(boolean z) { | ||||
|         this.mAdapter.setForceShowIcon(z); | ||||
|     } | ||||
|  | ||||
|     private boolean tryShow() { | ||||
|         View view; | ||||
|         if (isShowing()) { | ||||
|             return true; | ||||
|         } | ||||
|         if (this.mWasDismissed || (view = this.mAnchorView) == null) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mShownAnchorView = view; | ||||
|         this.mPopup.setOnDismissListener(this); | ||||
|         this.mPopup.setOnItemClickListener(this); | ||||
|         this.mPopup.setModal(true); | ||||
|         View view2 = this.mShownAnchorView; | ||||
|         boolean z = this.mTreeObserver == null; | ||||
|         ViewTreeObserver viewTreeObserver = view2.getViewTreeObserver(); | ||||
|         this.mTreeObserver = viewTreeObserver; | ||||
|         if (z) { | ||||
|             viewTreeObserver.addOnGlobalLayoutListener(this.mGlobalLayoutListener); | ||||
|         } | ||||
|         view2.addOnAttachStateChangeListener(this.mAttachStateChangeListener); | ||||
|         this.mPopup.setAnchorView(view2); | ||||
|         this.mPopup.setDropDownGravity(this.mDropDownGravity); | ||||
|         if (!this.mHasContentWidth) { | ||||
|             this.mContentWidth = measureIndividualMenuWidth(this.mAdapter, null, this.mContext, this.mPopupMaxWidth); | ||||
|             this.mHasContentWidth = true; | ||||
|         } | ||||
|         this.mPopup.setContentWidth(this.mContentWidth); | ||||
|         this.mPopup.setInputMethodMode(2); | ||||
|         this.mPopup.setEpicenterBounds(getEpicenterBounds()); | ||||
|         this.mPopup.show(); | ||||
|         ListView listView = this.mPopup.getListView(); | ||||
|         listView.setOnKeyListener(this); | ||||
|         if (this.mShowTitle && this.mMenu.getHeaderTitle() != null) { | ||||
|             FrameLayout frameLayout = (FrameLayout) LayoutInflater.from(this.mContext).inflate(R.layout.abc_popup_menu_header_item_layout, (ViewGroup) listView, false); | ||||
|             TextView textView = (TextView) frameLayout.findViewById(android.R.id.title); | ||||
|             if (textView != null) { | ||||
|                 textView.setText(this.mMenu.getHeaderTitle()); | ||||
|             } | ||||
|             frameLayout.setEnabled(false); | ||||
|             listView.addHeaderView(frameLayout, null, false); | ||||
|         } | ||||
|         this.mPopup.setAdapter(this.mAdapter); | ||||
|         this.mPopup.show(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.ShowableListMenu | ||||
|     public void show() { | ||||
|         if (!tryShow()) { | ||||
|             throw new IllegalStateException("StandardMenuPopup cannot be used without an anchor"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.ShowableListMenu | ||||
|     public void dismiss() { | ||||
|         if (isShowing()) { | ||||
|             this.mPopup.dismiss(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.ShowableListMenu | ||||
|     public boolean isShowing() { | ||||
|         return !this.mWasDismissed && this.mPopup.isShowing(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.PopupWindow.OnDismissListener | ||||
|     public void onDismiss() { | ||||
|         this.mWasDismissed = true; | ||||
|         this.mMenu.close(); | ||||
|         ViewTreeObserver viewTreeObserver = this.mTreeObserver; | ||||
|         if (viewTreeObserver != null) { | ||||
|             if (!viewTreeObserver.isAlive()) { | ||||
|                 this.mTreeObserver = this.mShownAnchorView.getViewTreeObserver(); | ||||
|             } | ||||
|             this.mTreeObserver.removeGlobalOnLayoutListener(this.mGlobalLayoutListener); | ||||
|             this.mTreeObserver = null; | ||||
|         } | ||||
|         this.mShownAnchorView.removeOnAttachStateChangeListener(this.mAttachStateChangeListener); | ||||
|         PopupWindow.OnDismissListener onDismissListener = this.mOnDismissListener; | ||||
|         if (onDismissListener != null) { | ||||
|             onDismissListener.onDismiss(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void updateMenuView(boolean z) { | ||||
|         this.mHasContentWidth = false; | ||||
|         MenuAdapter menuAdapter = this.mAdapter; | ||||
|         if (menuAdapter != null) { | ||||
|             menuAdapter.notifyDataSetChanged(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean onSubMenuSelected(SubMenuBuilder subMenuBuilder) { | ||||
|         if (subMenuBuilder.hasVisibleItems()) { | ||||
|             MenuPopupHelper menuPopupHelper = new MenuPopupHelper(this.mContext, subMenuBuilder, this.mShownAnchorView, this.mOverflowOnly, this.mPopupStyleAttr, this.mPopupStyleRes); | ||||
|             menuPopupHelper.setPresenterCallback(this.mPresenterCallback); | ||||
|             menuPopupHelper.setForceShowIcon(MenuPopup.shouldPreserveIconSpacing(subMenuBuilder)); | ||||
|             menuPopupHelper.setOnDismissListener(this.mOnDismissListener); | ||||
|             this.mOnDismissListener = null; | ||||
|             this.mMenu.close(false); | ||||
|             int horizontalOffset = this.mPopup.getHorizontalOffset(); | ||||
|             int verticalOffset = this.mPopup.getVerticalOffset(); | ||||
|             if ((Gravity.getAbsoluteGravity(this.mDropDownGravity, ViewCompat.getLayoutDirection(this.mAnchorView)) & 7) == 5) { | ||||
|                 horizontalOffset += this.mAnchorView.getWidth(); | ||||
|             } | ||||
|             if (menuPopupHelper.tryShow(horizontalOffset, verticalOffset)) { | ||||
|                 MenuPresenter.Callback callback = this.mPresenterCallback; | ||||
|                 if (callback == null) { | ||||
|                     return true; | ||||
|                 } | ||||
|                 callback.onOpenSubMenu(subMenuBuilder); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void onCloseMenu(MenuBuilder menuBuilder, boolean z) { | ||||
|         if (menuBuilder != this.mMenu) { | ||||
|             return; | ||||
|         } | ||||
|         dismiss(); | ||||
|         MenuPresenter.Callback callback = this.mPresenterCallback; | ||||
|         if (callback != null) { | ||||
|             callback.onCloseMenu(menuBuilder, z); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View.OnKeyListener | ||||
|     public boolean onKey(View view, int i, KeyEvent keyEvent) { | ||||
|         if (keyEvent.getAction() != 1 || i != 82) { | ||||
|             return false; | ||||
|         } | ||||
|         dismiss(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.ShowableListMenu | ||||
|     public ListView getListView() { | ||||
|         return this.mPopup.getListView(); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setHorizontalOffset(int i) { | ||||
|         this.mPopup.setHorizontalOffset(i); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPopup | ||||
|     public void setVerticalOffset(int i) { | ||||
|         this.mPopup.setVerticalOffset(i); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user