am 07e440b2: Merge "Fix FloatingToolbar flickers." into mnc-dev

* commit '07e440b2786a5104129a8776a21172539fb4c4a0':
  Fix FloatingToolbar flickers.
This commit is contained in:
Abodunrinwa Toki
2015-06-19 14:37:01 +00:00
committed by Android Git Automerger
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 void invalidateContentRect();
method public boolean isTitleOptional();
method public void onWindowFocusChanged(boolean);
method public abstract void setCustomView(android.view.View);
method public abstract void setSubtitle(java.lang.CharSequence);
method public abstract void setSubtitle(int);

View File

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

View File

@@ -260,6 +260,16 @@ public abstract class ActionMode {
*/
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.
* 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);
}
if (mFloatingToolbar != null) {
if (hasWindowFocus) {
mFloatingToolbar.show();
} else {
mFloatingToolbar.dismiss();
}
if (mPrimaryActionMode != null) {
mPrimaryActionMode.onWindowFocusChanged(hasWindowFocus);
}
if (mFloatingActionMode != null) {
mFloatingActionMode.onWindowFocusChanged(hasWindowFocus);
}
}
@@ -3441,8 +3440,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mFloatingActionMode = mode;
mFloatingToolbar = new FloatingToolbar(mContext, PhoneWindow.this);
((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar);
mFloatingActionMode.invalidate();
mFloatingToolbar.show();
mFloatingActionMode.invalidate(); // Will show the floating toolbar if necessary.
mFloatingActionModeOriginatingView.getViewTreeObserver()
.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
public void finish() {
checkToolbarInitialized();
@@ -237,6 +244,7 @@ public class FloatingActionMode extends ActionMode {
}
private void reset() {
mFloatingToolbar.dismiss();
mFloatingToolbarVisibilityHelper.deactivate();
mOriginatingView.removeCallbacks(mMovingOff);
mOriginatingView.removeCallbacks(mHideOff);
@@ -253,6 +261,7 @@ public class FloatingActionMode extends ActionMode {
private boolean mHideRequested;
private boolean mMoving;
private boolean mOutOfBounds;
private boolean mWindowFocused = true;
private boolean mActive;
@@ -264,6 +273,7 @@ public class FloatingActionMode extends ActionMode {
mHideRequested = false;
mMoving = false;
mOutOfBounds = false;
mWindowFocused = true;
mActive = true;
}
@@ -285,12 +295,16 @@ public class FloatingActionMode extends ActionMode {
mOutOfBounds = outOfBounds;
}
public void setWindowFocused(boolean windowFocused) {
mWindowFocused = windowFocused;
}
public void updateToolbarVisibility() {
if (!mActive) {
return;
}
if (mHideRequested || mMoving || mOutOfBounds) {
if (mHideRequested || mMoving || mOutOfBounds || !mWindowFocused) {
mToolbar.hide();
} else {
mToolbar.show();