Fix NPE in Toolbar - framework edition
Caused by super constructor calling non-final methods which Toolbar overrides, and then tries to reference final variables. BUG: 28806107 Change-Id: Ieaf5f7611dbbf954e49c31e604aa2f7627248615
This commit is contained in:
@@ -161,7 +161,7 @@ public class Toolbar extends ViewGroup {
|
||||
private int mTitleMarginTop;
|
||||
private int mTitleMarginBottom;
|
||||
|
||||
private final RtlSpacingHelper mContentInsets = new RtlSpacingHelper();
|
||||
private RtlSpacingHelper mContentInsets;
|
||||
private int mContentInsetStartWithNavigation;
|
||||
private int mContentInsetEndWithActions;
|
||||
|
||||
@@ -270,6 +270,7 @@ public class Toolbar extends ViewGroup {
|
||||
final int contentInsetRight =
|
||||
a.getDimensionPixelSize(R.styleable.Toolbar_contentInsetRight, 0);
|
||||
|
||||
ensureContentInsets();
|
||||
mContentInsets.setAbsolute(contentInsetLeft, contentInsetRight);
|
||||
|
||||
if (contentInsetStart != RtlSpacingHelper.UNDEFINED ||
|
||||
@@ -463,13 +464,13 @@ public class Toolbar extends ViewGroup {
|
||||
*/
|
||||
public void setTitleMarginBottom(int margin) {
|
||||
mTitleMarginBottom = margin;
|
||||
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRtlPropertiesChanged(@ResolvedLayoutDir int layoutDirection) {
|
||||
super.onRtlPropertiesChanged(layoutDirection);
|
||||
ensureContentInsets();
|
||||
mContentInsets.setDirection(layoutDirection == LAYOUT_DIRECTION_RTL);
|
||||
}
|
||||
|
||||
@@ -1092,6 +1093,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetStart
|
||||
*/
|
||||
public void setContentInsetsRelative(int contentInsetStart, int contentInsetEnd) {
|
||||
ensureContentInsets();
|
||||
mContentInsets.setRelative(contentInsetStart, contentInsetEnd);
|
||||
}
|
||||
|
||||
@@ -1112,7 +1114,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetStart
|
||||
*/
|
||||
public int getContentInsetStart() {
|
||||
return mContentInsets.getStart();
|
||||
return mContentInsets != null ? mContentInsets.getStart() : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1132,7 +1134,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetEnd
|
||||
*/
|
||||
public int getContentInsetEnd() {
|
||||
return mContentInsets.getEnd();
|
||||
return mContentInsets != null ? mContentInsets.getEnd() : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1154,6 +1156,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetRight
|
||||
*/
|
||||
public void setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight) {
|
||||
ensureContentInsets();
|
||||
mContentInsets.setAbsolute(contentInsetLeft, contentInsetRight);
|
||||
}
|
||||
|
||||
@@ -1174,7 +1177,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetLeft
|
||||
*/
|
||||
public int getContentInsetLeft() {
|
||||
return mContentInsets.getLeft();
|
||||
return mContentInsets != null ? mContentInsets.getLeft() : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1194,7 +1197,7 @@ public class Toolbar extends ViewGroup {
|
||||
* @attr ref android.R.styleable#Toolbar_contentInsetRight
|
||||
*/
|
||||
public int getContentInsetRight() {
|
||||
return mContentInsets.getRight();
|
||||
return mContentInsets != null ? mContentInsets.getRight() : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2128,6 +2131,12 @@ public class Toolbar extends ViewGroup {
|
||||
}
|
||||
}
|
||||
|
||||
private void ensureContentInsets() {
|
||||
if (mContentInsets == null) {
|
||||
mContentInsets = new RtlSpacingHelper();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Accessor to enable LayoutLib to get ActionMenuPresenter directly.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user