Merge "Prevent NPE in NavigationBar" into sc-v2-dev
This commit is contained in:
@@ -712,6 +712,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
|||||||
mHandler.removeCallbacks(mAutoDim);
|
mHandler.removeCallbacks(mAutoDim);
|
||||||
mHandler.removeCallbacks(mOnVariableDurationHomeLongClick);
|
mHandler.removeCallbacks(mOnVariableDurationHomeLongClick);
|
||||||
mHandler.removeCallbacks(mEnableLayoutTransitions);
|
mHandler.removeCallbacks(mEnableLayoutTransitions);
|
||||||
|
mNavigationBarA11yHelper.removeA11yEventListener(mAccessibilityListener);
|
||||||
mFrame = null;
|
mFrame = null;
|
||||||
mNavigationBarView = null;
|
mNavigationBarView = null;
|
||||||
mOrientationHandle = null;
|
mOrientationHandle = null;
|
||||||
@@ -1391,10 +1392,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
|||||||
void updateAccessibilityServicesState() {
|
void updateAccessibilityServicesState() {
|
||||||
int a11yFlags = mNavigationBarA11yHelper.getA11yButtonState();
|
int a11yFlags = mNavigationBarA11yHelper.getA11yButtonState();
|
||||||
|
|
||||||
|
if (mNavigationBarView != null) {
|
||||||
boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0;
|
boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0;
|
||||||
boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0;
|
boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0;
|
||||||
mNavigationBarView.setAccessibilityButtonState(clickable, longClickable);
|
mNavigationBarView.setAccessibilityButtonState(clickable, longClickable);
|
||||||
|
}
|
||||||
updateSystemUiStateFlags(a11yFlags);
|
updateSystemUiStateFlags(a11yFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ import android.testing.TestableLooper.RunWithLooper;
|
|||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.DisplayInfo;
|
import android.view.DisplayInfo;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.WindowMetrics;
|
import android.view.WindowMetrics;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
@@ -122,6 +123,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
|
EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
|
||||||
@Mock
|
@Mock
|
||||||
EdgeBackGestureHandler mEdgeBackGestureHandler;
|
EdgeBackGestureHandler mEdgeBackGestureHandler;
|
||||||
|
@Mock
|
||||||
|
NavigationBarA11yHelper mNavigationBarA11yHelper;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
||||||
@@ -256,6 +259,20 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
assertFalse((defaultNavBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
assertFalse((defaultNavBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testA11yEventAfterDetach() {
|
||||||
|
View v = mNavigationBar.createView(null);
|
||||||
|
mNavigationBar.onViewAttachedToWindow(v);
|
||||||
|
verify(mNavigationBarA11yHelper).registerA11yEventListener(any(
|
||||||
|
NavigationBarA11yHelper.NavA11yEventListener.class));
|
||||||
|
mNavigationBar.onViewDetachedFromWindow(v);
|
||||||
|
verify(mNavigationBarA11yHelper).removeA11yEventListener(any(
|
||||||
|
NavigationBarA11yHelper.NavA11yEventListener.class));
|
||||||
|
|
||||||
|
// Should be safe even though the internal view is now null.
|
||||||
|
mNavigationBar.updateAccessibilityServicesState();
|
||||||
|
}
|
||||||
|
|
||||||
private NavigationBar createNavBar(Context context) {
|
private NavigationBar createNavBar(Context context) {
|
||||||
DeviceProvisionedController deviceProvisionedController =
|
DeviceProvisionedController deviceProvisionedController =
|
||||||
mock(DeviceProvisionedController.class);
|
mock(DeviceProvisionedController.class);
|
||||||
@@ -287,7 +304,7 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
mHandler,
|
mHandler,
|
||||||
mock(NavigationBarOverlayController.class),
|
mock(NavigationBarOverlayController.class),
|
||||||
mUiEventLogger,
|
mUiEventLogger,
|
||||||
mock(NavigationBarA11yHelper.class),
|
mNavigationBarA11yHelper,
|
||||||
mock(UserTracker.class)));
|
mock(UserTracker.class)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user