Fix for blank titlebar after layout
Currently android DisplayList calculates the transparent
regions of layers on layout, taking translation of
views also into account. We have a bug in browser where
TitleBar becomes blank when it is translated out of viewport
and relayout happens due to orientation change.
The fix will translate the titlebar Y to 0 during layout
and translate it back to its original position after the
layout.
Change-Id: I8d66148bd164c4cdfd7b48f98f420174dc18fbd9
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 9dbfe24..8e1e62c 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -844,7 +844,6 @@
public void translateTitleBar(float topControlsOffsetYPix) {
if (mTitleBar != null && !mInActionMode) {
- mTitleBar.bringToFront();
if (topControlsOffsetYPix != 0.0) {
mTitleBar.setEnabled(false);
} else {
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 490cc15..30401ee 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -27,21 +27,17 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
+import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityManager;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
import org.codeaurora.swe.WebView;
import android.widget.FrameLayout;
-import android.widget.RelativeLayout;
-
/**
* Base class for a title bar used by the browser.
*/
-public class TitleBar extends RelativeLayout {
+public class TitleBar extends FrameLayout implements ViewTreeObserver.OnPreDrawListener {
private static final int PROGRESS_MAX = 100;
private static final float ANIM_TITLEBAR_DECELERATE = 2.5f;
@@ -61,6 +57,8 @@
private boolean mSkipTitleBarAnimations;
private Animator mTitleBarAnimator;
private boolean mIsFixedTitleBar;
+ private float mCurrentTranslationY;
+ private boolean mUpdateTranslationY = false;
public TitleBar(Context context, UiController controller, BaseUi ui,
FrameLayout contentView) {
@@ -103,6 +101,31 @@
mBaseUi.setContentViewMarginTop(0);
}
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+
+ mCurrentTranslationY = this.getTranslationY();
+ if (mCurrentTranslationY < 0) {
+ mUpdateTranslationY = true;
+ this.setTranslationY(0);
+
+ final ViewTreeObserver observer = this.getViewTreeObserver();
+ observer.addOnPreDrawListener(this);
+ }
+ }
+
+ @Override
+ public boolean onPreDraw() {
+ if (mUpdateTranslationY) {
+ this.setTranslationY(mCurrentTranslationY);
+ mUpdateTranslationY = false;
+ }
+ final ViewTreeObserver observer = this.getViewTreeObserver();
+ observer.removeOnPreDrawListener(this);
+ return true;
+ }
+
private void setFixedTitleBar() {
boolean isFixed = !getContext().getResources().getBoolean(R.bool.hide_title);