Merge "Fix Floating Toolbar appearing after ActionMode was cancelled" into mnc-dev

This commit is contained in:
Clara Bayarri
2015-05-13 15:46:57 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 12 deletions

View File

@@ -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()

View File

@@ -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();
} }