Bug 889094 - NPE in BrowserToolbar due to late initialization of mFocusOrder. [r=sriram,bnicholson]

This commit is contained in:
Michal Kajda 2013-07-10 11:12:25 -07:00
parent 1e6e84f8d1
commit 3e96bcc570

View File

@ -232,6 +232,16 @@ public class BrowserToolbar extends GeckoRelativeLayout
mMenuIcon = (GeckoImageView) findViewById(R.id.menu_icon); mMenuIcon = (GeckoImageView) findViewById(R.id.menu_icon);
mActionItemBar = (LinearLayout) findViewById(R.id.menu_items); mActionItemBar = (LinearLayout) findViewById(R.id.menu_items);
mHasSoftMenuButton = !HardwareUtils.hasMenuButton(); mHasSoftMenuButton = !HardwareUtils.hasMenuButton();
// We use different layouts on phones and tablets, so adjust the focus
// order appropriately.
if (HardwareUtils.isTablet()) {
mFocusOrder = Arrays.asList(mTabs, mBack, mForward, this,
mSiteSecurity, mReader, mStop, mActionItemBar, mMenu);
} else {
mFocusOrder = Arrays.asList(this, mSiteSecurity, mReader, mStop,
mTabs, mMenu);
}
} }
@Override @Override
@ -419,16 +429,6 @@ public class BrowserToolbar extends GeckoRelativeLayout
} }
}); });
} }
// We use different layouts on phones and tablets, so adjust the focus
// order appropriately.
if (HardwareUtils.isTablet()) {
mFocusOrder = Arrays.asList(mTabs, mBack, mForward, this,
mSiteSecurity, mReader, mStop, mActionItemBar, mMenu);
} else {
mFocusOrder = Arrays.asList(this, mSiteSecurity, mReader, mStop,
mTabs, mMenu);
}
} }
@Override @Override
@ -893,26 +893,27 @@ public class BrowserToolbar extends GeckoRelativeLayout
continue; continue;
} }
if (prevView != null) { if (view == mActionItemBar) {
if (view == mActionItemBar) { final int childCount = mActionItemBar.getChildCount();
final int childCount = mActionItemBar.getChildCount(); for (int child = 0; child < childCount; child++) {
if (childCount > 1) { View childView = mActionItemBar.getChildAt(child);
View firstChild = mActionItemBar.getChildAt(0); if (prevView != null) {
firstChild.setNextFocusLeftId(prevView.getId()); childView.setNextFocusLeftId(prevView.getId());
prevView.setNextFocusRightId(firstChild.getId()); prevView.setNextFocusRightId(childView.getId());
} }
view = mActionItemBar.getChildAt(childCount - 1); prevView = childView;
} }
} else {
view.setNextFocusLeftId(prevView.getId()); if (prevView != null) {
prevView.setNextFocusRightId(view.getId()); view.setNextFocusLeftId(prevView.getId());
prevView.setNextFocusRightId(view.getId());
}
prevView = view;
} }
}
if (needsNewFocus) { if (needsNewFocus) {
requestFocus(); requestFocus();
}
prevView = view;
} }
} }