Merge "Add null checks for various buttons on the Nav Bar."
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
index 2db0804..8bf4572 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
@@ -162,11 +162,16 @@
mDockWindowTouchSlopExceeded = false;
mTouchDownX = (int) event.getX();
mTouchDownY = (int) event.getY();
- View recentsButton = mNavigationBarView.getRecentsButton();
- mDownOnRecents = mTouchDownX >= recentsButton.getLeft()
- && mTouchDownX <= recentsButton.getRight()
- && mTouchDownY >= recentsButton.getTop()
- && mTouchDownY <= recentsButton.getBottom();
+
+ if (mNavigationBarView != null) {
+ View recentsButton = mNavigationBarView.getRecentsButton();
+ if (recentsButton != null) {
+ mDownOnRecents = mTouchDownX >= recentsButton.getLeft()
+ && mTouchDownX <= recentsButton.getRight()
+ && mTouchDownY >= recentsButton.getTop()
+ && mTouchDownY <= recentsButton.getBottom();
+ }
+ }
}
private boolean handleDragActionMoveEvent(MotionEvent event) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index efa8f5b..53099032 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -21,6 +21,7 @@
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
+import android.annotation.Nullable;
import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
import android.content.Context;
@@ -131,12 +132,15 @@
}
public void onBackAltCleared() {
+ View backButton = getBackButton();
+ View homeButton = getHomeButton();
+
// When dismissing ime during unlock, force the back button to run the same appearance
// animation as home (if we catch this condition early enough).
- if (!mBackTransitioning && getBackButton().getVisibility() == VISIBLE
- && mHomeAppearing && getHomeButton().getAlpha() == 0) {
+ if (backButton != null && !mBackTransitioning && backButton.getVisibility() == VISIBLE
+ && mHomeAppearing && homeButton != null && getHomeButton().getAlpha() == 0) {
getBackButton().setAlpha(0);
- ValueAnimator a = ObjectAnimator.ofFloat(getBackButton(), "alpha", 0, 1);
+ ValueAnimator a = ObjectAnimator.ofFloat(backButton, "alpha", 0, 1);
a.setStartDelay(mStartDelay);
a.setDuration(mDuration);
a.setInterpolator(mInterpolator);
@@ -222,7 +226,10 @@
}
public void abortCurrentGesture() {
- getHomeButton().abortCurrentGesture();
+ View homeButton = getHomeButton();
+ if (homeButton != null) {
+ getHomeButton().abortCurrentGesture();
+ }
}
private H mHandler = new H();
@@ -235,26 +242,34 @@
return mRotatedViews;
}
+ // The following Buttons can possibly return null if NavigationBarView is extended to provide
+ // a different layout and the buttons do not exist in that new layout.
+ @Nullable
public KeyButtonView getRecentsButton() {
return (KeyButtonView) getCurrentView().findViewById(R.id.recent_apps);
}
+ @Nullable
public View getMenuButton() {
return getCurrentView().findViewById(R.id.menu);
}
+ @Nullable
public View getBackButton() {
return getCurrentView().findViewById(R.id.back);
}
+ @Nullable
public KeyButtonView getHomeButton() {
return (KeyButtonView) getCurrentView().findViewById(R.id.home);
}
+ @Nullable
public View getImeSwitchButton() {
return getCurrentView().findViewById(R.id.ime_switcher);
}
+ @Nullable
public View getAppShelf() {
return getCurrentView().findViewById(R.id.app_shelf);
}
@@ -329,19 +344,27 @@
? getBackIconWithAlt(mCarMode, mVertical)
: getBackIcon(mCarMode, mVertical);
- ((ImageView) getBackButton()).setImageDrawable(backIcon);
+ View backButton = getBackButton();
+ if (backButton != null && backButton instanceof ImageView) {
+ ((ImageView) backButton).setImageDrawable(backIcon);
+ }
- ((ImageView) getRecentsButton()).setImageDrawable(
- mVertical ? mRecentLandIcon : mRecentIcon);
+ ImageView recentsButton = getRecentsButton();
+ if (recentsButton != null) {
+ recentsButton.setImageDrawable(mVertical ? mRecentLandIcon : mRecentIcon);
+ }
- if (mCarMode) {
- ((ImageView) getHomeButton()).setImageDrawable(mHomeCarModeIcon);
- } else {
- ((ImageView) getHomeButton()).setImageDrawable(mHomeDefaultIcon);
+ ImageView homeButton = getHomeButton();
+ if (homeButton != null) {
+ homeButton.setImageDrawable(mCarMode ? mHomeCarModeIcon : mHomeDefaultIcon);
}
final boolean showImeButton = ((hints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) != 0);
- getImeSwitchButton().setVisibility(showImeButton ? View.VISIBLE : View.INVISIBLE);
+ View imeSwitchButton = getImeSwitchButton();
+ if (imeSwitchButton != null) {
+ imeSwitchButton.setVisibility(showImeButton ? View.VISIBLE : View.INVISIBLE);
+ }
+
// Update menu button in case the IME state has changed.
setMenuVisibility(mShowMenu, true);
@@ -382,9 +405,20 @@
disableRecent = false;
}
- getBackButton() .setVisibility(disableBack ? View.INVISIBLE : View.VISIBLE);
- getHomeButton() .setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
- getRecentsButton().setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
+ View backButton = getBackButton();
+ if (backButton != null) {
+ backButton.setVisibility(disableBack ? View.INVISIBLE : View.VISIBLE);
+ }
+
+ View homeButton = getHomeButton();
+ if (homeButton != null) {
+ homeButton.setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
+ }
+
+ View recentsButton = getRecentsButton();
+ if (recentsButton != null) {
+ recentsButton.setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
+ }
// The app shelf, if it exists, follows the visibility of the home button.
View appShelf = getAppShelf();
@@ -475,7 +509,11 @@
// Only show Menu if IME switcher not shown.
final boolean shouldShow = mShowMenu &&
((mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) == 0);
- getMenuButton().setVisibility(shouldShow ? View.VISIBLE : View.INVISIBLE);
+
+ View menuButton = getMenuButton();
+ if (menuButton != null) {
+ menuButton.setVisibility(shouldShow ? View.VISIBLE : View.INVISIBLE);
+ }
}
@Override
@@ -489,7 +527,10 @@
mCurrentView = mRotatedViews[Surface.ROTATION_0];
- getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
+ View imeSwitchButton = getImeSwitchButton();
+ if (imeSwitchButton != null) {
+ imeSwitchButton.setOnClickListener(mImeSwitcherClickListener);
+ }
updateRTLOrder();
@@ -515,9 +556,13 @@
}
private void updateRecentsIcon(boolean dockedStackExists) {
- getRecentsButton().setImageResource(dockedStackExists
- ? R.drawable.ic_sysbar_docked
- : R.drawable.ic_sysbar_recent);
+ ImageView recentsButton = getRecentsButton();
+
+ if (recentsButton != null) {
+ recentsButton.setImageResource(dockedStackExists
+ ? R.drawable.ic_sysbar_docked
+ : R.drawable.ic_sysbar_recent);
+ }
}
public boolean isVertical() {
@@ -533,7 +578,10 @@
mCurrentView.setVisibility(View.VISIBLE);
updateLayoutTransitionsEnabled();
- getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
+ View imeSwitchButton = getImeSwitchButton();
+ if (imeSwitchButton != null) {
+ imeSwitchButton.setOnClickListener(mImeSwitcherClickListener);
+ }
mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 8a5cf26..7a4adbc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1184,14 +1184,26 @@
private void prepareNavigationBarView() {
mNavigationBarView.reorient();
- mNavigationBarView.getRecentsButton().setOnClickListener(mRecentsClickListener);
- mNavigationBarView.getRecentsButton().setOnTouchListener(mRecentsPreloadOnTouchListener);
- mNavigationBarView.getRecentsButton().setLongClickable(true);
- mNavigationBarView.getRecentsButton().setOnLongClickListener(mRecentsLongClickListener);
- mNavigationBarView.getBackButton().setLongClickable(true);
- mNavigationBarView.getBackButton().setOnLongClickListener(mLongPressBackListener);
- mNavigationBarView.getHomeButton().setOnTouchListener(mHomeActionListener);
- mNavigationBarView.getHomeButton().setOnLongClickListener(mLongPressHomeListener);
+ View recentsButton = mNavigationBarView.getRecentsButton();
+ if (recentsButton != null) {
+ recentsButton.setOnClickListener(mRecentsClickListener);
+ recentsButton.setOnTouchListener(mRecentsPreloadOnTouchListener);
+ recentsButton.setLongClickable(true);
+ recentsButton.setOnLongClickListener(mRecentsLongClickListener);
+ }
+
+ View backButton = mNavigationBarView.getBackButton();
+ if (backButton != null) {
+ backButton.setLongClickable(true);
+ backButton.setOnLongClickListener(mLongPressBackListener);
+ }
+
+ View homeButton = mNavigationBarView.getHomeButton();
+ if (homeButton != null) {
+ homeButton.setOnTouchListener(mHomeActionListener);
+ homeButton.setOnLongClickListener(mLongPressHomeListener);
+ }
+
mAssistManager.onConfigurationChanged();
}