Merge "Fix FloatingToolbar flickers." into mnc-dev

This commit is contained in:
Abodunrinwa Toki
2015-06-19 14:26:08 +00:00
committed by Android (Google) Code Review
5 changed files with 33 additions and 9 deletions

View File

@@ -34575,6 +34575,7 @@ package android.view {
method public abstract void invalidate(); method public abstract void invalidate();
method public void invalidateContentRect(); method public void invalidateContentRect();
method public boolean isTitleOptional(); method public boolean isTitleOptional();
method public void onWindowFocusChanged(boolean);
method public abstract void setCustomView(android.view.View); method public abstract void setCustomView(android.view.View);
method public abstract void setSubtitle(java.lang.CharSequence); method public abstract void setSubtitle(java.lang.CharSequence);
method public abstract void setSubtitle(int); method public abstract void setSubtitle(int);

View File

@@ -36856,6 +36856,7 @@ package android.view {
method public abstract void invalidate(); method public abstract void invalidate();
method public void invalidateContentRect(); method public void invalidateContentRect();
method public boolean isTitleOptional(); method public boolean isTitleOptional();
method public void onWindowFocusChanged(boolean);
method public abstract void setCustomView(android.view.View); method public abstract void setCustomView(android.view.View);
method public abstract void setSubtitle(java.lang.CharSequence); method public abstract void setSubtitle(java.lang.CharSequence);
method public abstract void setSubtitle(int); method public abstract void setSubtitle(int);

View File

@@ -260,6 +260,16 @@ public abstract class ActionMode {
*/ */
public abstract MenuInflater getMenuInflater(); public abstract MenuInflater getMenuInflater();
/**
* Called when the window containing the view that started this action mode gains or loses
* focus.
*
* @param hasWindowFocus True if the window containing the view that started this action mode
* now has focus, false otherwise.
*
*/
public void onWindowFocusChanged(boolean hasWindowFocus) {}
/** /**
* Returns whether the UI presenting this action mode can take focus or not. * Returns whether the UI presenting this action mode can take focus or not.
* This is used by internal components within the framework that would otherwise * This is used by internal components within the framework that would otherwise

View File

@@ -3223,12 +3223,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
cb.onWindowFocusChanged(hasWindowFocus); cb.onWindowFocusChanged(hasWindowFocus);
} }
if (mFloatingToolbar != null) { if (mPrimaryActionMode != null) {
if (hasWindowFocus) { mPrimaryActionMode.onWindowFocusChanged(hasWindowFocus);
mFloatingToolbar.show(); }
} else { if (mFloatingActionMode != null) {
mFloatingToolbar.dismiss(); mFloatingActionMode.onWindowFocusChanged(hasWindowFocus);
}
} }
} }
@@ -3441,8 +3440,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mFloatingActionMode = mode; mFloatingActionMode = mode;
mFloatingToolbar = new FloatingToolbar(mContext, PhoneWindow.this); mFloatingToolbar = new FloatingToolbar(mContext, PhoneWindow.this);
((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar); ((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar);
mFloatingActionMode.invalidate(); mFloatingActionMode.invalidate(); // Will show the floating toolbar if necessary.
mFloatingToolbar.show();
mFloatingActionModeOriginatingView.getViewTreeObserver() mFloatingActionModeOriginatingView.getViewTreeObserver()
.addOnPreDrawListener(mFloatingToolbarPreDrawListener); .addOnPreDrawListener(mFloatingToolbarPreDrawListener);
} }

View File

@@ -196,6 +196,13 @@ public class FloatingActionMode extends ActionMode {
} }
} }
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
checkToolbarInitialized();
mFloatingToolbarVisibilityHelper.setWindowFocused(hasWindowFocus);
mFloatingToolbarVisibilityHelper.updateToolbarVisibility();
}
@Override @Override
public void finish() { public void finish() {
checkToolbarInitialized(); checkToolbarInitialized();
@@ -237,6 +244,7 @@ public class FloatingActionMode extends ActionMode {
} }
private void reset() { private void reset() {
mFloatingToolbar.dismiss();
mFloatingToolbarVisibilityHelper.deactivate(); mFloatingToolbarVisibilityHelper.deactivate();
mOriginatingView.removeCallbacks(mMovingOff); mOriginatingView.removeCallbacks(mMovingOff);
mOriginatingView.removeCallbacks(mHideOff); mOriginatingView.removeCallbacks(mHideOff);
@@ -253,6 +261,7 @@ public class FloatingActionMode extends ActionMode {
private boolean mHideRequested; private boolean mHideRequested;
private boolean mMoving; private boolean mMoving;
private boolean mOutOfBounds; private boolean mOutOfBounds;
private boolean mWindowFocused = true;
private boolean mActive; private boolean mActive;
@@ -264,6 +273,7 @@ public class FloatingActionMode extends ActionMode {
mHideRequested = false; mHideRequested = false;
mMoving = false; mMoving = false;
mOutOfBounds = false; mOutOfBounds = false;
mWindowFocused = true;
mActive = true; mActive = true;
} }
@@ -285,12 +295,16 @@ public class FloatingActionMode extends ActionMode {
mOutOfBounds = outOfBounds; mOutOfBounds = outOfBounds;
} }
public void setWindowFocused(boolean windowFocused) {
mWindowFocused = windowFocused;
}
public void updateToolbarVisibility() { public void updateToolbarVisibility() {
if (!mActive) { if (!mActive) {
return; return;
} }
if (mHideRequested || mMoving || mOutOfBounds) { if (mHideRequested || mMoving || mOutOfBounds || !mWindowFocused) {
mToolbar.hide(); mToolbar.hide();
} else { } else {
mToolbar.show(); mToolbar.show();