Merge "Try to keep connection state more up to date" into mnc-dev
diff --git a/api/current.txt b/api/current.txt
index dea5255..8c32371 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -34575,6 +34575,7 @@
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);
diff --git a/api/system-current.txt b/api/system-current.txt
index d0225e1..2b5c9d8 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -36856,6 +36856,7 @@
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);
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index 80dcecc..ea979c8 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -261,6 +261,16 @@
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
* present an action mode UI that requires focus, such as an EditText as a custom view.
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 66f6079..15ed5bd 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -3223,12 +3223,11 @@
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 @@
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);
}
diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java
index 784b256..863506b 100644
--- a/core/java/com/android/internal/view/FloatingActionMode.java
+++ b/core/java/com/android/internal/view/FloatingActionMode.java
@@ -197,6 +197,13 @@
}
@Override
+ public void onWindowFocusChanged(boolean hasWindowFocus) {
+ checkToolbarInitialized();
+ mFloatingToolbarVisibilityHelper.setWindowFocused(hasWindowFocus);
+ mFloatingToolbarVisibilityHelper.updateToolbarVisibility();
+ }
+
+ @Override
public void finish() {
checkToolbarInitialized();
reset();
@@ -237,6 +244,7 @@
}
private void reset() {
+ mFloatingToolbar.dismiss();
mFloatingToolbarVisibilityHelper.deactivate();
mOriginatingView.removeCallbacks(mMovingOff);
mOriginatingView.removeCallbacks(mHideOff);
@@ -253,6 +261,7 @@
private boolean mHideRequested;
private boolean mMoving;
private boolean mOutOfBounds;
+ private boolean mWindowFocused = true;
private boolean mActive;
@@ -264,6 +273,7 @@
mHideRequested = false;
mMoving = false;
mOutOfBounds = false;
+ mWindowFocused = true;
mActive = true;
}
@@ -285,12 +295,16 @@
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();