Merge "Fix Floating Toolbar appearing after ActionMode was cancelled" into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
99bd704f1c
@@ -3376,9 +3376,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
mFloatingActionMode.finish();
|
mFloatingActionMode.finish();
|
||||||
}
|
}
|
||||||
cleanupFloatingActionModeViews();
|
cleanupFloatingActionModeViews();
|
||||||
mFloatingToolbar = new FloatingToolbar(mContext, PhoneWindow.this);
|
final FloatingActionMode mode =
|
||||||
final FloatingActionMode mode = new FloatingActionMode(
|
new FloatingActionMode(mContext, callback, originatingView);
|
||||||
mContext, callback, originatingView, mFloatingToolbar);
|
|
||||||
mFloatingActionModeOriginatingView = originatingView;
|
mFloatingActionModeOriginatingView = originatingView;
|
||||||
mFloatingToolbarPreDrawListener =
|
mFloatingToolbarPreDrawListener =
|
||||||
new OnPreDrawListener() {
|
new OnPreDrawListener() {
|
||||||
@@ -3393,6 +3392,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
|
|
||||||
private void setHandledFloatingActionMode(ActionMode mode) {
|
private void setHandledFloatingActionMode(ActionMode mode) {
|
||||||
mFloatingActionMode = mode;
|
mFloatingActionMode = mode;
|
||||||
|
mFloatingToolbar = new FloatingToolbar(mContext, PhoneWindow.this);
|
||||||
|
((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar);
|
||||||
mFloatingActionMode.invalidate();
|
mFloatingActionMode.invalidate();
|
||||||
mFloatingToolbar.show();
|
mFloatingToolbar.show();
|
||||||
mFloatingActionModeOriginatingView.getViewTreeObserver()
|
mFloatingActionModeOriginatingView.getViewTreeObserver()
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.view.MenuInflater;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import com.android.internal.util.Preconditions;
|
||||||
import com.android.internal.view.menu.MenuBuilder;
|
import com.android.internal.view.menu.MenuBuilder;
|
||||||
import com.android.internal.widget.FloatingToolbar;
|
import com.android.internal.widget.FloatingToolbar;
|
||||||
|
|
||||||
@@ -32,20 +33,28 @@ public class FloatingActionMode extends ActionMode {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final ActionMode.Callback2 mCallback;
|
private final ActionMode.Callback2 mCallback;
|
||||||
private final MenuBuilder mMenu;
|
private final MenuBuilder mMenu;
|
||||||
private final FloatingToolbar mFloatingToolbar;
|
|
||||||
private final Rect mContentRect;
|
private final Rect mContentRect;
|
||||||
private final Rect mContentRectOnWindow;
|
private final Rect mContentRectOnWindow;
|
||||||
private final Rect mPreviousContentRectOnWindow;
|
private final Rect mPreviousContentRectOnWindow;
|
||||||
private final int[] mViewPosition;
|
private final int[] mViewPosition;
|
||||||
private final View mOriginatingView;
|
private final View mOriginatingView;
|
||||||
|
private FloatingToolbar mFloatingToolbar;
|
||||||
|
|
||||||
public FloatingActionMode(
|
public FloatingActionMode(
|
||||||
Context context, ActionMode.Callback2 callback, View originatingView,
|
Context context, ActionMode.Callback2 callback, View originatingView) {
|
||||||
FloatingToolbar floatingToolbar) {
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mCallback = callback;
|
mCallback = callback;
|
||||||
mMenu = new MenuBuilder(context).setDefaultShowAsAction(
|
mMenu = new MenuBuilder(context).setDefaultShowAsAction(
|
||||||
MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||||
|
setType(ActionMode.TYPE_FLOATING);
|
||||||
|
mContentRect = new Rect();
|
||||||
|
mContentRectOnWindow = new Rect();
|
||||||
|
mPreviousContentRectOnWindow = new Rect();
|
||||||
|
mViewPosition = new int[2];
|
||||||
|
mOriginatingView = originatingView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFloatingToolbar(FloatingToolbar floatingToolbar) {
|
||||||
mFloatingToolbar = floatingToolbar
|
mFloatingToolbar = floatingToolbar
|
||||||
.setMenu(mMenu)
|
.setMenu(mMenu)
|
||||||
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||||
@@ -54,12 +63,6 @@ public class FloatingActionMode extends ActionMode {
|
|||||||
return mCallback.onActionItemClicked(FloatingActionMode.this, item);
|
return mCallback.onActionItemClicked(FloatingActionMode.this, item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setType(ActionMode.TYPE_FLOATING);
|
|
||||||
mContentRect = new Rect();
|
|
||||||
mContentRectOnWindow = new Rect();
|
|
||||||
mPreviousContentRectOnWindow = new Rect();
|
|
||||||
mViewPosition = new int[2];
|
|
||||||
mOriginatingView = originatingView;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,6 +82,7 @@ public class FloatingActionMode extends ActionMode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invalidate() {
|
public void invalidate() {
|
||||||
|
Preconditions.checkNotNull(mFloatingToolbar);
|
||||||
mCallback.onPrepareActionMode(this, mMenu);
|
mCallback.onPrepareActionMode(this, mMenu);
|
||||||
mFloatingToolbar.updateLayout();
|
mFloatingToolbar.updateLayout();
|
||||||
invalidateContentRect();
|
invalidateContentRect();
|
||||||
@@ -86,11 +90,13 @@ public class FloatingActionMode extends ActionMode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invalidateContentRect() {
|
public void invalidateContentRect() {
|
||||||
|
Preconditions.checkNotNull(mFloatingToolbar);
|
||||||
mCallback.onGetContentRect(this, mOriginatingView, mContentRect);
|
mCallback.onGetContentRect(this, mOriginatingView, mContentRect);
|
||||||
repositionToolbar();
|
repositionToolbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateViewLocationInWindow() {
|
public void updateViewLocationInWindow() {
|
||||||
|
Preconditions.checkNotNull(mFloatingToolbar);
|
||||||
mOriginatingView.getLocationInWindow(mViewPosition);
|
mOriginatingView.getLocationInWindow(mViewPosition);
|
||||||
repositionToolbar();
|
repositionToolbar();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user