Merge "Use current user Context to generate NavBar layout" into tm-dev

This commit is contained in:
Charles Chen
2022-05-05 09:15:03 +00:00
committed by Android (Google) Code Review
5 changed files with 34 additions and 12 deletions

View File

@@ -125,6 +125,7 @@ import com.android.systemui.navigationbar.gestural.QuickswitchOrientedNavHandle;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.recents.Recents; import com.android.systemui.recents.Recents;
import com.android.systemui.settings.UserContextProvider;
import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.shared.rotation.RotationButton; import com.android.systemui.shared.rotation.RotationButton;
import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.rotation.RotationButtonController;
@@ -203,6 +204,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
private final UiEventLogger mUiEventLogger; private final UiEventLogger mUiEventLogger;
private final NavBarHelper mNavBarHelper; private final NavBarHelper mNavBarHelper;
private final NotificationShadeDepthController mNotificationShadeDepthController; private final NotificationShadeDepthController mNotificationShadeDepthController;
private final UserContextProvider mUserContextProvider;
private NavigationBarFrame mFrame; private NavigationBarFrame mFrame;
private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING; private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
@@ -514,7 +516,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
DeadZone deadZone, DeadZone deadZone,
DeviceConfigProxy deviceConfigProxy, DeviceConfigProxy deviceConfigProxy,
NavigationBarTransitions navigationBarTransitions, NavigationBarTransitions navigationBarTransitions,
Optional<BackAnimation> backAnimation) { Optional<BackAnimation> backAnimation,
UserContextProvider userContextProvider) {
super(navigationBarView); super(navigationBarView);
mFrame = navigationBarFrame; mFrame = navigationBarFrame;
mContext = context; mContext = context;
@@ -550,6 +553,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
mAutoHideControllerFactory = autoHideControllerFactory; mAutoHideControllerFactory = autoHideControllerFactory;
mTelecomManagerOptional = telecomManagerOptional; mTelecomManagerOptional = telecomManagerOptional;
mInputMethodManager = inputMethodManager; mInputMethodManager = inputMethodManager;
mUserContextProvider = userContextProvider;
mNavBarMode = mNavigationModeController.addListener(mModeChangedListener); mNavBarMode = mNavigationModeController.addListener(mModeChangedListener);
} }
@@ -1512,35 +1516,36 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
int insetsHeight = -1; int insetsHeight = -1;
int gravity = Gravity.BOTTOM; int gravity = Gravity.BOTTOM;
boolean navBarCanMove = true; boolean navBarCanMove = true;
final Context userContext = mUserContextProvider.createCurrentUserContext(mContext);
if (mWindowManager != null && mWindowManager.getCurrentWindowMetrics() != null) { if (mWindowManager != null && mWindowManager.getCurrentWindowMetrics() != null) {
Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds(); Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds();
navBarCanMove = displaySize.width() != displaySize.height() navBarCanMove = displaySize.width() != displaySize.height()
&& mContext.getResources().getBoolean( && userContext.getResources().getBoolean(
com.android.internal.R.bool.config_navBarCanMove); com.android.internal.R.bool.config_navBarCanMove);
} }
if (!navBarCanMove) { if (!navBarCanMove) {
height = mContext.getResources().getDimensionPixelSize( height = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_frame_height); com.android.internal.R.dimen.navigation_bar_frame_height);
insetsHeight = mContext.getResources().getDimensionPixelSize( insetsHeight = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_height); com.android.internal.R.dimen.navigation_bar_height);
} else { } else {
switch (rotation) { switch (rotation) {
case ROTATION_UNDEFINED: case ROTATION_UNDEFINED:
case Surface.ROTATION_0: case Surface.ROTATION_0:
case Surface.ROTATION_180: case Surface.ROTATION_180:
height = mContext.getResources().getDimensionPixelSize( height = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_frame_height); com.android.internal.R.dimen.navigation_bar_frame_height);
insetsHeight = mContext.getResources().getDimensionPixelSize( insetsHeight = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_height); com.android.internal.R.dimen.navigation_bar_height);
break; break;
case Surface.ROTATION_90: case Surface.ROTATION_90:
gravity = Gravity.RIGHT; gravity = Gravity.RIGHT;
width = mContext.getResources().getDimensionPixelSize( width = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_width); com.android.internal.R.dimen.navigation_bar_width);
break; break;
case Surface.ROTATION_270: case Surface.ROTATION_270:
gravity = Gravity.LEFT; gravity = Gravity.LEFT;
width = mContext.getResources().getDimensionPixelSize( width = userContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_width); com.android.internal.R.dimen.navigation_bar_width);
break; break;
} }
@@ -1565,12 +1570,12 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = null; lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = null;
} }
lp.token = new Binder(); lp.token = new Binder();
lp.accessibilityTitle = mContext.getString(R.string.nav_bar); lp.accessibilityTitle = userContext.getString(R.string.nav_bar);
lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC
| WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT; | WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT;
lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
lp.windowAnimations = 0; lp.windowAnimations = 0;
lp.setTitle("NavigationBar" + mContext.getDisplayId()); lp.setTitle("NavigationBar" + userContext.getDisplayId());
lp.setFitInsetsTypes(0 /* types */); lp.setFitInsetsTypes(0 /* types */);
lp.setTrustedOverlay(); lp.setTrustedOverlay();
return lp; return lp;

View File

@@ -23,4 +23,10 @@ import android.content.Context
*/ */
interface UserContextProvider { interface UserContextProvider {
val userContext: Context val userContext: Context
/**
* Creates the {@code context} with the current user.
* @see Context#createContextAsUser(UserHandle, int)
*/
fun createCurrentUserContext(context: Context): Context
} }

View File

@@ -127,6 +127,12 @@ class UserTrackerImpl internal constructor(
} }
} }
override fun createCurrentUserContext(context: Context): Context {
synchronized(mutex) {
return context.createContextAsUser(userHandle, 0)
}
}
private fun setUserIdInternal(user: Int): Pair<Context, List<UserInfo>> { private fun setUserIdInternal(user: Int): Pair<Context, List<UserInfo>> {
val profiles = userManager.getProfiles(user) val profiles = userManager.getProfiles(user)
val handle = UserHandle(user) val handle = UserHandle(user)

View File

@@ -85,6 +85,7 @@ import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.recents.Recents; import com.android.systemui.recents.Recents;
import com.android.systemui.settings.UserContextProvider;
import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.rotation.RotationButtonController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
@@ -187,6 +188,8 @@ public class NavigationBarTest extends SysuiTestCase {
private DeadZone mDeadZone; private DeadZone mDeadZone;
@Mock @Mock
private CentralSurfaces mCentralSurfaces; private CentralSurfaces mCentralSurfaces;
@Mock
private UserContextProvider mUserContextProvider;
private DeviceConfigProxyFake mDeviceConfigProxyFake = new DeviceConfigProxyFake(); private DeviceConfigProxyFake mDeviceConfigProxyFake = new DeviceConfigProxyFake();
@Rule @Rule
@@ -210,6 +213,8 @@ public class NavigationBarTest extends SysuiTestCase {
when(mNavigationBarTransitions.getLightTransitionsController()) when(mNavigationBarTransitions.getLightTransitionsController())
.thenReturn(mLightBarTransitionsController); .thenReturn(mLightBarTransitionsController);
when(mStatusBarKeyguardViewManager.isNavBarVisible()).thenReturn(true); when(mStatusBarKeyguardViewManager.isNavBarVisible()).thenReturn(true);
when(mUserContextProvider.createCurrentUserContext(any(Context.class)))
.thenReturn(mContext);
setupSysuiDependency(); setupSysuiDependency();
// This class inflates views that call Dependency.get, thus these injections are still // This class inflates views that call Dependency.get, thus these injections are still
// necessary. // necessary.
@@ -458,7 +463,8 @@ public class NavigationBarTest extends SysuiTestCase {
mDeadZone, mDeadZone,
mDeviceConfigProxyFake, mDeviceConfigProxyFake,
mNavigationBarTransitions, mNavigationBarTransitions,
Optional.of(mock(BackAnimation.class)))); Optional.of(mock(BackAnimation.class)),
mUserContextProvider));
} }
private void processAllMessages() { private void processAllMessages() {

View File

@@ -53,7 +53,6 @@ import org.mockito.Mock
import org.mockito.Mockito import org.mockito.Mockito
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.mockito.Mockito.never import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt