diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index 48d1d2b1b32f8..ac8d578adae82 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -59,7 +59,6 @@ import java.util.List; */ public class ActionMenuPresenter extends BaseMenuPresenter implements ActionProvider.SubUiVisibilityListener { - private static final String TAG = "ActionMenuPresenter"; private static final int ITEM_ANIMATION_DURATION = 150; private static final boolean ACTIONBAR_ANIMATIONS_ENABLED = false; @@ -87,20 +86,16 @@ public class ActionMenuPresenter extends BaseMenuPresenter private OpenOverflowRunnable mPostedOpenRunnable; private ActionMenuPopupCallback mPopupCallback; - private final boolean mShowCascadingMenus; - final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback(); int mOpenSubMenuId; // These collections are used to store pre- and post-layout information for menu items, // which is used to determine appropriate animations to run for changed items. - private SparseArray mPreLayoutItems = - new SparseArray(); - private SparseArray mPostLayoutItems = - new SparseArray(); + private SparseArray mPreLayoutItems = new SparseArray<>(); + private SparseArray mPostLayoutItems = new SparseArray<>(); // The list of currently running animations on menu items. - private List mRunningItemAnimations = new ArrayList(); + private List mRunningItemAnimations = new ArrayList<>(); private ViewTreeObserver.OnPreDrawListener mItemAnimationPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { @Override @@ -130,9 +125,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter public ActionMenuPresenter(Context context) { super(context, com.android.internal.R.layout.action_menu_layout, com.android.internal.R.layout.action_menu_item_layout); - - mShowCascadingMenus = context.getResources().getBoolean( - com.android.internal.R.bool.config_enableCascadingSubmenus); } @Override @@ -845,8 +837,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter } private class OverflowMenuButton extends ImageButton implements ActionMenuView.ActionMenuChildView { - private final float[] mTempPts = new float[2]; - public OverflowMenuButton(Context context) { super(context, null, com.android.internal.R.attr.actionOverflowButtonStyle); diff --git a/core/java/android/widget/ForwardingListener.java b/core/java/android/widget/ForwardingListener.java index 7ddeff91c1e04..b383e1c55aada 100644 --- a/core/java/android/widget/ForwardingListener.java +++ b/core/java/android/widget/ForwardingListener.java @@ -53,12 +53,6 @@ public abstract class ForwardingListener /** Whether this listener is currently forwarding touch events. */ private boolean mForwarding; - /** - * Whether forwarding was initiated by a long-press. If so, we won't - * force the window to dismiss when the touch stream ends. - */ - private boolean mWasLongPress; - /** The id of the first pointer down in the current event stream. */ private int mActivePointerId; @@ -172,7 +166,6 @@ public abstract class ForwardingListener switch (actionMasked) { case MotionEvent.ACTION_DOWN: mActivePointerId = srcEvent.getPointerId(0); - mWasLongPress = false; if (mDisallowIntercept == null) { mDisallowIntercept = new DisallowIntercept(); @@ -243,7 +236,6 @@ public abstract class ForwardingListener e.recycle(); mForwarding = true; - mWasLongPress = true; } /** diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index b95bc283d11a1..595adc218e65a 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -16,18 +16,20 @@ package android.widget; -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; +import com.android.internal.R; +import com.android.internal.view.menu.ShowableListMenu; + +import android.annotation.AttrRes; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.StyleRes; import android.content.Context; import android.content.res.TypedArray; import android.database.DataSetObserver; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.text.TextUtils; import android.util.AttributeSet; -import android.util.IntProperty; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; @@ -38,13 +40,7 @@ import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewParent; import android.view.WindowManager; -import android.view.animation.AccelerateDecelerateInterpolator; - -import com.android.internal.R; -import com.android.internal.view.menu.ShowableListMenu; -import com.android.internal.widget.AutoScrollHelper.AbsListViewAutoScroller; - -import java.util.Locale; +import android.widget.AdapterView.OnItemSelectedListener; /** * A ListPopupWindow anchors itself to a host view and displays a @@ -109,8 +105,6 @@ public class ListPopupWindow implements ShowableListMenu { private boolean mModal; - private int mLayoutDirection; - PopupWindow mPopup; /** @@ -174,7 +168,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param context Context used for contained views. */ - public ListPopupWindow(Context context) { + public ListPopupWindow(@NonNull Context context) { this(context, null, com.android.internal.R.attr.listPopupWindowStyle, 0); } @@ -185,7 +179,7 @@ public class ListPopupWindow implements ShowableListMenu { * @param context Context used for contained views. * @param attrs Attributes from inflating parent views used to style the popup. */ - public ListPopupWindow(Context context, AttributeSet attrs) { + public ListPopupWindow(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.listPopupWindowStyle, 0); } @@ -197,7 +191,8 @@ public class ListPopupWindow implements ShowableListMenu { * @param attrs Attributes from inflating parent views used to style the popup. * @param defStyleAttr Default style attribute to use for popup content. */ - public ListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr) { + public ListPopupWindow(@NonNull Context context, @Nullable AttributeSet attrs, + @AttrRes int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } @@ -210,7 +205,8 @@ public class ListPopupWindow implements ShowableListMenu { * @param defStyleAttr Style attribute to read for default styling of popup content. * @param defStyleRes Style resource ID to use for default styling of popup content. */ - public ListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + public ListPopupWindow(@NonNull Context context, @Nullable AttributeSet attrs, + @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { mContext = context; mHandler = new Handler(context.getMainLooper()); @@ -227,9 +223,6 @@ public class ListPopupWindow implements ShowableListMenu { mPopup = new PopupWindow(context, attrs, defStyleAttr, defStyleRes); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); - // Set the default layout direction to match the default locale one - final Locale locale = mContext.getResources().getConfiguration().locale; - mLayoutDirection = TextUtils.getLayoutDirectionFromLocale(locale); } /** @@ -238,7 +231,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param adapter The adapter to use to create this window's content. */ - public void setAdapter(ListAdapter adapter) { + public void setAdapter(@Nullable ListAdapter adapter) { if (mObserver == null) { mObserver = new PopupDataSetObserver(); } else if (mAdapter != null) { @@ -371,7 +364,7 @@ public class ListPopupWindow implements ShowableListMenu { /** * @return The background drawable for the popup window. */ - public Drawable getBackground() { + public @Nullable Drawable getBackground() { return mPopup.getBackground(); } @@ -380,7 +373,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param d A drawable to set as the background. */ - public void setBackgroundDrawable(Drawable d) { + public void setBackgroundDrawable(@Nullable Drawable d) { mPopup.setBackgroundDrawable(d); } @@ -389,7 +382,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param animationStyle Animation style to use. */ - public void setAnimationStyle(int animationStyle) { + public void setAnimationStyle(@StyleRes int animationStyle) { mPopup.setAnimationStyle(animationStyle); } @@ -399,7 +392,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @return Animation style that will be used. */ - public int getAnimationStyle() { + public @StyleRes int getAnimationStyle() { return mPopup.getAnimationStyle(); } @@ -408,7 +401,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @return The popup's anchor view */ - public View getAnchorView() { + public @Nullable View getAnchorView() { return mDropDownAnchorView; } @@ -418,7 +411,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param anchor The view to use as an anchor. */ - public void setAnchorView(View anchor) { + public void setAnchorView(@Nullable View anchor) { mDropDownAnchorView = anchor; } @@ -537,7 +530,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @see ListView#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener) */ - public void setOnItemClickListener(AdapterView.OnItemClickListener clickListener) { + public void setOnItemClickListener(@Nullable AdapterView.OnItemClickListener clickListener) { mItemClickListener = clickListener; } @@ -546,9 +539,9 @@ public class ListPopupWindow implements ShowableListMenu { * * @param selectedListener Listener to register. * - * @see ListView#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener) + * @see ListView#setOnItemSelectedListener(OnItemSelectedListener) */ - public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener selectedListener) { + public void setOnItemSelectedListener(@Nullable OnItemSelectedListener selectedListener) { mItemSelectedListener = selectedListener; } @@ -558,7 +551,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param prompt View to use as an informational prompt. */ - public void setPromptView(View prompt) { + public void setPromptView(@Nullable View prompt) { boolean showing = isShowing(); if (showing) { removePromptView(); @@ -686,7 +679,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @param listener Listener that will be notified when the popup is dismissed. */ - public void setOnDismissListener(PopupWindow.OnDismissListener listener) { + public void setOnDismissListener(@Nullable PopupWindow.OnDismissListener listener) { mPopup.setOnDismissListener(listener); } @@ -795,7 +788,7 @@ public class ListPopupWindow implements ShowableListMenu { /** * @return The currently selected item or null if the popup is not showing. */ - public Object getSelectedItem() { + public @Nullable Object getSelectedItem() { if (!isShowing()) { return null; } @@ -834,7 +827,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @see ListView#getSelectedView() */ - public View getSelectedView() { + public @Nullable View getSelectedView() { if (!isShowing()) { return null; } @@ -846,11 +839,11 @@ public class ListPopupWindow implements ShowableListMenu { * Only valid when {@link #isShowing()} == {@code true}. */ @Override - public ListView getListView() { + public @Nullable ListView getListView() { return mDropDownList; } - DropDownListView createDropDownListView(Context context, boolean hijackFocus) { + @NonNull DropDownListView createDropDownListView(Context context, boolean hijackFocus) { return new DropDownListView(context, hijackFocus); } @@ -874,7 +867,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @see #setModal(boolean) */ - public boolean onKeyDown(int keyCode, KeyEvent event) { + public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { // when the drop down is shown, we drive it directly if (isShowing()) { // the key events are forwarded to the list in the drop down view @@ -969,7 +962,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @see #setModal(boolean) */ - public boolean onKeyUp(int keyCode, KeyEvent event) { + public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) { if (isShowing() && mDropDownList.getSelectedItemPosition() >= 0) { boolean consumed = mDropDownList.onKeyUp(keyCode, event); if (consumed && KeyEvent.isConfirmKey(keyCode)) { @@ -993,7 +986,7 @@ public class ListPopupWindow implements ShowableListMenu { * * @see #setModal(boolean) */ - public boolean onKeyPreIme(int keyCode, KeyEvent event) { + public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && isShowing()) { // special case for the back key, we do not even try to send it // to the drop down list but instead, consume it immediately @@ -1159,7 +1152,6 @@ public class ListPopupWindow implements ShowableListMenu { mPopup.setContentView(dropDownView); } else { - dropDownView = (ViewGroup) mPopup.getContentView(); final View view = mPromptView; if (view != null) { LinearLayout.LayoutParams hintParams = diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java index c2adc42cb824a..a67e43a1c647d 100644 --- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java +++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.android.internal.view.menu; import android.content.Context; @@ -7,7 +23,6 @@ import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.View.OnAttachStateChangeListener; import android.view.View.OnKeyListener; import android.view.ViewTreeObserver.OnGlobalLayoutListener; @@ -30,7 +45,7 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On MenuPresenter, OnKeyListener { private final Context mContext; - private final LayoutInflater mInflater; + private final MenuBuilder mMenu; private final MenuAdapter mAdapter; private final boolean mOverflowOnly; @@ -79,8 +94,6 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On private Callback mPresenterCallback; private ViewTreeObserver mTreeObserver; - private ViewGroup mMeasureParent; - /** Whether the popup has been dismissed. Once dismissed, it cannot be opened again. */ private boolean mWasDismissed; @@ -99,10 +112,10 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On public StandardMenuPopup(Context context, MenuBuilder menu, View anchorView, int popupStyleAttr, int popupStyleRes, boolean overflowOnly) { mContext = Preconditions.checkNotNull(context); - mInflater = LayoutInflater.from(context); mMenu = menu; mOverflowOnly = overflowOnly; - mAdapter = new MenuAdapter(menu, mInflater, mOverflowOnly); + final LayoutInflater inflater = LayoutInflater.from(context); + mAdapter = new MenuAdapter(menu, inflater, mOverflowOnly); mPopupStyleAttr = popupStyleAttr; mPopupStyleRes = popupStyleRes; @@ -155,8 +168,7 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On mPopup.setDropDownGravity(mDropDownGravity); if (!mHasContentWidth) { - mContentWidth = measureIndividualMenuWidth( - mAdapter, mMeasureParent, mContext, mPopupMaxWidth); + mContentWidth = measureIndividualMenuWidth(mAdapter, null, mContext, mPopupMaxWidth); mHasContentWidth = true; } @@ -177,7 +189,9 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On false); TextView titleView = (TextView) titleItemView.findViewById( com.android.internal.R.id.title); - titleView.setText(mMenu.getHeaderTitle()); + if (titleView != null) { + titleView.setText(mMenu.getHeaderTitle()); + } titleItemView.setEnabled(false); listView.addHeaderView(titleItemView, null, false);