Prevent ArrayIndexOutOfBoundsException for some invalid sysui_nav_bar values
A user can change sysui_nav_bar via adb.
If value of sysui_nav_bar doesn't contain two semicolons, split String array
is accessed out of bounds throwing an exception, sending SystemUI
in an exception loop.
Test: manual
Test: adb exec-out settings put secure sysui_nav_bar "home;back"
Change-Id: Ia9d74be36d287085650393476029489c9a359a0f
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
index 4e79314b..9f89fe6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
@@ -219,6 +219,11 @@
newLayout = getDefaultLayout();
}
String[] sets = newLayout.split(GRAVITY_SEPARATOR, 3);
+ if (sets.length != 3) {
+ Log.d(TAG, "Invalid layout.");
+ newLayout = getDefaultLayout();
+ sets = newLayout.split(GRAVITY_SEPARATOR, 3);
+ }
String[] start = sets[0].split(BUTTON_SEPARATOR);
String[] center = sets[1].split(BUTTON_SEPARATOR);
String[] end = sets[2].split(BUTTON_SEPARATOR);