Replace TitleBar sub views with a ViewStub.
Optimise startup performance by using a ViewStub for TitleBar views
that aren't needed until later.
Bug: 5179151
Change-Id: I87cf23cbd1e3b818a566c95dc6bb9cc1ff366587
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 9848a39..8fa4d43 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -25,6 +25,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewStub;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
@@ -72,11 +73,27 @@
LayoutInflater factory = LayoutInflater.from(context);
factory.inflate(R.layout.title_bar, this);
mProgress = (PageProgressView) findViewById(R.id.progress);
- mAutoLogin = (AutologinBar) findViewById(R.id.autologin);
- mAutoLogin.setTitleBar(this);
mNavBar = (NavigationBarBase) findViewById(R.id.taburlbar);
mNavBar.setTitleBar(this);
- mSnapshotBar = (SnapshotBar) findViewById(R.id.snapshotbar);
+ }
+
+ private void inflateAutoLoginBar() {
+ if (mAutoLogin != null) {
+ return;
+ }
+
+ ViewStub stub = (ViewStub) findViewById(R.id.autologin_stub);
+ mAutoLogin = (AutologinBar) stub.inflate();
+ mAutoLogin.setTitleBar(this);
+ }
+
+ private void inflateSnapshotBar() {
+ if (mSnapshotBar != null) {
+ return;
+ }
+
+ ViewStub stub = (ViewStub) findViewById(R.id.snapshotbar_stub);
+ mSnapshotBar = (SnapshotBar) stub.inflate();
mSnapshotBar.setTitleBar(this);
}
@@ -236,13 +253,19 @@
public int getEmbeddedHeight() {
int height = mNavBar.getHeight();
- if (mAutoLogin.getVisibility() == View.VISIBLE) {
+ if (mAutoLogin != null && mAutoLogin.getVisibility() == View.VISIBLE) {
height += mAutoLogin.getHeight();
}
return height;
}
public void updateAutoLogin(Tab tab, boolean animate) {
+ if (mAutoLogin == null) {
+ if (tab.getDeviceAccountLogin() == null) {
+ return;
+ }
+ inflateAutoLoginBar();
+ }
mAutoLogin.updateAutoLogin(tab, animate);
}
@@ -250,6 +273,9 @@
if (mUseQuickControls) {
mBaseUi.showTitleBar();
}
+ if (mAutoLogin == null) {
+ inflateAutoLoginBar();
+ }
mAutoLogin.setVisibility(View.VISIBLE);
if (animate) {
mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
@@ -291,12 +317,12 @@
public boolean wantsToBeVisible() {
return inAutoLogin()
- || (mSnapshotBar.getVisibility() == View.VISIBLE
+ || (mSnapshotBar != null && mSnapshotBar.getVisibility() == View.VISIBLE
&& mSnapshotBar.isAnimating());
}
private boolean inAutoLogin() {
- return mAutoLogin.getVisibility() == View.VISIBLE;
+ return mAutoLogin != null && mAutoLogin.getVisibility() == View.VISIBLE;
}
public boolean isEditingUrl() {
@@ -348,12 +374,18 @@
}
public void onTabDataChanged(Tab tab) {
- mSnapshotBar.onTabDataChanged(tab);
+ if (mSnapshotBar != null) {
+ mSnapshotBar.onTabDataChanged(tab);
+ }
+
if (tab.isSnapshot()) {
+ inflateSnapshotBar();
mSnapshotBar.setVisibility(VISIBLE);
mNavBar.setVisibility(GONE);
} else {
- mSnapshotBar.setVisibility(GONE);
+ if (mSnapshotBar != null) {
+ mSnapshotBar.setVisibility(GONE);
+ }
mNavBar.setVisibility(VISIBLE);
}
}