Merge "Remote mCurClientInKeyguard dependency in IMMS" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
53a2aa20d8
@@ -24,12 +24,15 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A
|
|||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
|
import android.inputmethodservice.InputMethodService;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.WindowInsets;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -42,12 +45,14 @@ import com.android.systemui.dump.DumpManager;
|
|||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@@ -69,6 +74,7 @@ public final class NavBarHelper implements
|
|||||||
Dumpable {
|
Dumpable {
|
||||||
private final AccessibilityManager mAccessibilityManager;
|
private final AccessibilityManager mAccessibilityManager;
|
||||||
private final Lazy<AssistManager> mAssistManagerLazy;
|
private final Lazy<AssistManager> mAssistManagerLazy;
|
||||||
|
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
|
||||||
private final UserTracker mUserTracker;
|
private final UserTracker mUserTracker;
|
||||||
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
|
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
|
||||||
private final List<NavbarTaskbarStateUpdater> mA11yEventListeners = new ArrayList<>();
|
private final List<NavbarTaskbarStateUpdater> mA11yEventListeners = new ArrayList<>();
|
||||||
@@ -98,12 +104,14 @@ public final class NavBarHelper implements
|
|||||||
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
||||||
OverviewProxyService overviewProxyService,
|
OverviewProxyService overviewProxyService,
|
||||||
Lazy<AssistManager> assistManagerLazy,
|
Lazy<AssistManager> assistManagerLazy,
|
||||||
|
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
|
||||||
NavigationModeController navigationModeController,
|
NavigationModeController navigationModeController,
|
||||||
UserTracker userTracker,
|
UserTracker userTracker,
|
||||||
DumpManager dumpManager) {
|
DumpManager dumpManager) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mAccessibilityManager = accessibilityManager;
|
mAccessibilityManager = accessibilityManager;
|
||||||
mAssistManagerLazy = assistManagerLazy;
|
mAssistManagerLazy = assistManagerLazy;
|
||||||
|
mStatusBarOptionalLazy = statusBarOptionalLazy;
|
||||||
mUserTracker = userTracker;
|
mUserTracker = userTracker;
|
||||||
accessibilityManagerWrapper.addCallback(
|
accessibilityManagerWrapper.addCallback(
|
||||||
accessibilityManager1 -> NavBarHelper.this.dispatchA11yEventUpdate());
|
accessibilityManager1 -> NavBarHelper.this.dispatchA11yEventUpdate());
|
||||||
@@ -231,6 +239,19 @@ public final class NavBarHelper implements
|
|||||||
updateAssitantAvailability();
|
updateAssitantAvailability();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Whether the IME is shown on top of the screen given the {@code vis} flag of
|
||||||
|
* {@link InputMethodService} and the keyguard states.
|
||||||
|
*/
|
||||||
|
public boolean isImeShown(int vis) {
|
||||||
|
View shadeWindowView = mStatusBarOptionalLazy.get().get().getNotificationShadeWindowView();
|
||||||
|
boolean isKeyguardShowing = mStatusBarOptionalLazy.get().get().isKeyguardShowing();
|
||||||
|
boolean imeVisibleOnShade = shadeWindowView != null && shadeWindowView.isAttachedToWindow()
|
||||||
|
&& shadeWindowView.getRootWindowInsets().isVisible(WindowInsets.Type.ime());
|
||||||
|
return imeVisibleOnShade
|
||||||
|
|| (!isKeyguardShowing && (vis & InputMethodService.IME_VISIBLE) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callbacks will get fired once immediately after registering via
|
* Callbacks will get fired once immediately after registering via
|
||||||
* {@link #registerNavTaskStateUpdater(NavbarTaskbarStateUpdater)}
|
* {@link #registerNavTaskStateUpdater(NavbarTaskbarStateUpdater)}
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ import android.graphics.Insets;
|
|||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
import android.inputmethodservice.InputMethodService;
|
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -884,7 +883,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
|||||||
if (displayId != mDisplayId) {
|
if (displayId != mDisplayId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0;
|
boolean imeShown = mNavBarHelper.isImeShown(vis);
|
||||||
|
showImeSwitcher = imeShown && showImeSwitcher;
|
||||||
int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition,
|
int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition,
|
||||||
imeShown, showImeSwitcher);
|
imeShown, showImeSwitcher);
|
||||||
if (hints == mNavigationIconHints) return;
|
if (hints == mNavigationIconHints) return;
|
||||||
@@ -1757,4 +1757,4 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
|||||||
mInputMethodManager);
|
mInputMethodManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import android.content.ComponentCallbacks;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
import android.inputmethodservice.InputMethodService;
|
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -265,7 +264,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
@Override
|
@Override
|
||||||
public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition,
|
public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition,
|
||||||
boolean showImeSwitcher) {
|
boolean showImeSwitcher) {
|
||||||
boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0;
|
boolean imeShown = mNavBarHelper.isImeShown(vis);
|
||||||
|
showImeSwitcher = imeShown && showImeSwitcher;
|
||||||
int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition,
|
int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition,
|
||||||
imeShown, showImeSwitcher);
|
imeShown, showImeSwitcher);
|
||||||
if (hints != mNavigationIconHints) {
|
if (hints != mNavigationIconHints) {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.android.systemui.navigationbar;
|
|||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -34,6 +35,7 @@ import com.android.systemui.assist.AssistManager;
|
|||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -42,6 +44,8 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@@ -82,8 +86,8 @@ public class NavBarHelperTest extends SysuiTestCase {
|
|||||||
|
|
||||||
mNavBarHelper = new NavBarHelper(mContext, mAccessibilityManager,
|
mNavBarHelper = new NavBarHelper(mContext, mAccessibilityManager,
|
||||||
mAccessibilityManagerWrapper, mAccessibilityButtonModeObserver,
|
mAccessibilityManagerWrapper, mAccessibilityButtonModeObserver,
|
||||||
mOverviewProxyService, mAssistManagerLazy, mNavigationModeController,
|
mOverviewProxyService, mAssistManagerLazy, () -> Optional.of(mock(StatusBar.class)),
|
||||||
mUserTracker, mDumpManager);
|
mNavigationModeController, mUserTracker, mDumpManager);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,17 +23,20 @@ import static android.inputmethodservice.InputMethodService.IME_INVISIBLE;
|
|||||||
import static android.inputmethodservice.InputMethodService.IME_VISIBLE;
|
import static android.inputmethodservice.InputMethodService.IME_VISIBLE;
|
||||||
import static android.view.Display.DEFAULT_DISPLAY;
|
import static android.view.Display.DEFAULT_DISPLAY;
|
||||||
import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS;
|
import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS;
|
||||||
|
import static android.view.WindowInsets.Type.ime;
|
||||||
|
|
||||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
||||||
import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent.NAVBAR_ASSIST_LONGPRESS;
|
import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent.NAVBAR_ASSIST_LONGPRESS;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
@@ -57,6 +60,7 @@ 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.View;
|
||||||
|
import android.view.WindowInsets;
|
||||||
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;
|
||||||
@@ -72,6 +76,7 @@ import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
|||||||
import com.android.systemui.accessibility.SystemActions;
|
import com.android.systemui.accessibility.SystemActions;
|
||||||
import com.android.systemui.assist.AssistManager;
|
import com.android.systemui.assist.AssistManager;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
|
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
@@ -83,8 +88,10 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
|||||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.LightBarController;
|
import com.android.systemui.statusbar.phone.LightBarController;
|
||||||
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
|
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||||
@@ -98,6 +105,7 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.mockito.Spy;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -130,7 +138,6 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
|
EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
|
||||||
@Mock
|
@Mock
|
||||||
EdgeBackGestureHandler mEdgeBackGestureHandler;
|
EdgeBackGestureHandler mEdgeBackGestureHandler;
|
||||||
@Mock
|
|
||||||
NavBarHelper mNavBarHelper;
|
NavBarHelper mNavBarHelper;
|
||||||
@Mock
|
@Mock
|
||||||
private LightBarController mLightBarController;
|
private LightBarController mLightBarController;
|
||||||
@@ -148,6 +155,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
private InputMethodManager mInputMethodManager;
|
private InputMethodManager mInputMethodManager;
|
||||||
@Mock
|
@Mock
|
||||||
private AssistManager mAssistManager;
|
private AssistManager mAssistManager;
|
||||||
|
@Mock
|
||||||
|
private StatusBar mStatusBar;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
||||||
@@ -172,6 +181,12 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
mDependency.injectTestDependency(OverviewProxyService.class, mOverviewProxyService);
|
mDependency.injectTestDependency(OverviewProxyService.class, mOverviewProxyService);
|
||||||
mDependency.injectTestDependency(NavigationModeController.class, mNavigationModeController);
|
mDependency.injectTestDependency(NavigationModeController.class, mNavigationModeController);
|
||||||
TestableLooper.get(this).runWithLooper(() -> {
|
TestableLooper.get(this).runWithLooper(() -> {
|
||||||
|
mNavBarHelper = spy(new NavBarHelper(mContext, mock(AccessibilityManager.class),
|
||||||
|
mock(AccessibilityManagerWrapper.class),
|
||||||
|
mock(AccessibilityButtonModeObserver.class), mOverviewProxyService,
|
||||||
|
() -> mock(AssistManager.class), () -> Optional.of(mStatusBar),
|
||||||
|
mock(NavigationModeController.class), mock(UserTracker.class),
|
||||||
|
mock(DumpManager.class)));
|
||||||
mNavigationBar = createNavBar(mContext);
|
mNavigationBar = createNavBar(mContext);
|
||||||
mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal);
|
mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal);
|
||||||
});
|
});
|
||||||
@@ -256,6 +271,11 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
// Create default & external NavBar fragment.
|
// Create default & external NavBar fragment.
|
||||||
NavigationBar defaultNavBar = mNavigationBar;
|
NavigationBar defaultNavBar = mNavigationBar;
|
||||||
NavigationBar externalNavBar = mExternalDisplayNavigationBar;
|
NavigationBar externalNavBar = mExternalDisplayNavigationBar;
|
||||||
|
NotificationShadeWindowView mockShadeWindowView = mock(NotificationShadeWindowView.class);
|
||||||
|
WindowInsets windowInsets = new WindowInsets.Builder().setVisible(ime(), false).build();
|
||||||
|
doReturn(windowInsets).when(mockShadeWindowView).getRootWindowInsets();
|
||||||
|
doReturn(mockShadeWindowView).when(mStatusBar).getNotificationShadeWindowView();
|
||||||
|
doReturn(true).when(mockShadeWindowView).isAttachedToWindow();
|
||||||
doNothing().when(defaultNavBar).checkNavBarModes();
|
doNothing().when(defaultNavBar).checkNavBarModes();
|
||||||
doNothing().when(externalNavBar).checkNavBarModes();
|
doNothing().when(externalNavBar).checkNavBarModes();
|
||||||
defaultNavBar.createView(null);
|
defaultNavBar.createView(null);
|
||||||
@@ -281,6 +301,40 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
assertFalse((defaultNavBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
assertFalse((defaultNavBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetImeWindowStatusWhenKeyguardLockingAndImeInsetsChange() {
|
||||||
|
NotificationShadeWindowView mockShadeWindowView = mock(NotificationShadeWindowView.class);
|
||||||
|
doReturn(mockShadeWindowView).when(mStatusBar).getNotificationShadeWindowView();
|
||||||
|
doReturn(true).when(mockShadeWindowView).isAttachedToWindow();
|
||||||
|
doNothing().when(mNavigationBar).checkNavBarModes();
|
||||||
|
mNavigationBar.createView(null);
|
||||||
|
WindowInsets windowInsets = new WindowInsets.Builder().setVisible(ime(), false).build();
|
||||||
|
doReturn(windowInsets).when(mockShadeWindowView).getRootWindowInsets();
|
||||||
|
|
||||||
|
// Verify navbar altered back icon when an app is showing IME
|
||||||
|
mNavigationBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
|
||||||
|
BACK_DISPOSITION_DEFAULT, true);
|
||||||
|
assertTrue((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);
|
||||||
|
assertTrue((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||||
|
|
||||||
|
// Verify navbar didn't alter and showing back icon when the keyguard is showing without
|
||||||
|
// requesting IME insets visible.
|
||||||
|
doReturn(true).when(mStatusBar).isKeyguardShowing();
|
||||||
|
mNavigationBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
|
||||||
|
BACK_DISPOSITION_DEFAULT, true);
|
||||||
|
assertFalse((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);
|
||||||
|
assertFalse((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||||
|
|
||||||
|
// Verify navbar altered and showing back icon when the keyguard is showing and
|
||||||
|
// requesting IME insets visible.
|
||||||
|
windowInsets = new WindowInsets.Builder().setVisible(ime(), true).build();
|
||||||
|
doReturn(windowInsets).when(mockShadeWindowView).getRootWindowInsets();
|
||||||
|
mNavigationBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
|
||||||
|
BACK_DISPOSITION_DEFAULT, true);
|
||||||
|
assertTrue((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);
|
||||||
|
assertTrue((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testA11yEventAfterDetach() {
|
public void testA11yEventAfterDetach() {
|
||||||
View v = mNavigationBar.createView(null);
|
View v = mNavigationBar.createView(null);
|
||||||
@@ -314,7 +368,7 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
Optional.of(mock(Pip.class)),
|
Optional.of(mock(Pip.class)),
|
||||||
Optional.of(mock(LegacySplitScreen.class)),
|
Optional.of(mock(LegacySplitScreen.class)),
|
||||||
Optional.of(mock(Recents.class)),
|
Optional.of(mock(Recents.class)),
|
||||||
() -> Optional.of(mock(StatusBar.class)),
|
() -> Optional.of(mStatusBar),
|
||||||
mock(ShadeController.class),
|
mock(ShadeController.class),
|
||||||
mock(NotificationRemoteInputManager.class),
|
mock(NotificationRemoteInputManager.class),
|
||||||
mock(NotificationShadeDepthController.class),
|
mock(NotificationShadeDepthController.class),
|
||||||
|
|||||||
@@ -542,9 +542,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
|||||||
*/
|
*/
|
||||||
private InputMethodSubtype mCurrentSubtype;
|
private InputMethodSubtype mCurrentSubtype;
|
||||||
|
|
||||||
// Was the keyguard locked when this client became current?
|
|
||||||
private boolean mCurClientInKeyguard;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@code true} if the IME has not been mostly hidden via {@link android.view.InsetsController}
|
* {@code true} if the IME has not been mostly hidden via {@link android.view.InsetsController}
|
||||||
*/
|
*/
|
||||||
@@ -2363,14 +2360,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
|||||||
mImeHiddenByDisplayPolicy = false;
|
mImeHiddenByDisplayPolicy = false;
|
||||||
|
|
||||||
if (mCurClient != cs) {
|
if (mCurClient != cs) {
|
||||||
// Was the keyguard locked when switching over to the new client?
|
|
||||||
mCurClientInKeyguard = isKeyguardLocked();
|
|
||||||
// If the client is changing, we need to switch over to the new
|
// If the client is changing, we need to switch over to the new
|
||||||
// one.
|
// one.
|
||||||
unbindCurrentClientLocked(UnbindReason.SWITCH_CLIENT);
|
unbindCurrentClientLocked(UnbindReason.SWITCH_CLIENT);
|
||||||
if (DEBUG) Slog.v(TAG, "switching to client: client="
|
|
||||||
+ cs.client.asBinder() + " keyguard=" + mCurClientInKeyguard);
|
|
||||||
|
|
||||||
// If the screen is on, inform the new client it is active
|
// If the screen is on, inform the new client it is active
|
||||||
if (mIsInteractive) {
|
if (mIsInteractive) {
|
||||||
scheduleSetActiveToClient(cs, true /* active */, false /* fullscreen */,
|
scheduleSetActiveToClient(cs, true /* active */, false /* fullscreen */,
|
||||||
@@ -2875,10 +2867,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
|||||||
// all updateSystemUi happens on system previlege.
|
// all updateSystemUi happens on system previlege.
|
||||||
final long ident = Binder.clearCallingIdentity();
|
final long ident = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
// apply policy for binder calls
|
|
||||||
if (vis != 0 && isKeyguardLocked() && !mCurClientInKeyguard) {
|
|
||||||
vis = 0;
|
|
||||||
}
|
|
||||||
if (!mCurPerceptible) {
|
if (!mCurPerceptible) {
|
||||||
vis &= ~InputMethodService.IME_VISIBLE;
|
vis &= ~InputMethodService.IME_VISIBLE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user