Merge "Use current user Context to generate NavBar layout" into tm-dev
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user