Merge "Calculate StatusBar height locally in Launcher" into tm-qpr-dev am: effbe5aa48

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20980927

Change-Id: I9b3dae6a3c9b7ef68ee0977a8ee89b076358513a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Nick Chameyev
2023-01-20 12:03:02 +00:00
committed by Automerger Merge Worker
2 changed files with 22 additions and 4 deletions

View File

@@ -23,6 +23,7 @@ import android.view.Surface;
import android.view.WindowManager;
import android.view.WindowMetrics;
import com.android.internal.policy.SystemBarUtils;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.window.CachedDisplayInfo;
import com.android.launcher3.util.window.WindowManagerProxy;
@@ -44,6 +45,13 @@ public class SystemWindowManagerProxy extends WindowManagerProxy {
.getRotation();
}
@Override
protected int getStatusBarHeight(Context context, boolean isPortrait, int statusBarInset) {
// See b/264656380, calculate the status bar height manually as the inset in the system
// server might not be updated by this point yet causing extra DeviceProfile updates
return SystemBarUtils.getStatusBarHeight(context);
}
@Override
public ArrayMap<CachedDisplayInfo, WindowBounds[]> estimateInternalDisplayBounds(
Context displayInfoContext) {

View File

@@ -161,12 +161,10 @@ public class WindowManagerProxy implements ResourceBasedOverride {
insetsBuilder.setInsetsIgnoringVisibility(WindowInsets.Type.navigationBars(), newNavInsets);
Insets statusBarInsets = oldInsets.getInsets(WindowInsets.Type.statusBars());
int statusBarHeight = getDimenByName(systemRes,
(isPortrait) ? STATUS_BAR_HEIGHT_PORTRAIT : STATUS_BAR_HEIGHT_LANDSCAPE,
STATUS_BAR_HEIGHT);
Insets newStatusBarInsets = Insets.of(
statusBarInsets.left,
Math.max(statusBarInsets.top, statusBarHeight),
getStatusBarHeight(context, isPortrait, statusBarInsets.top),
statusBarInsets.right,
statusBarInsets.bottom);
insetsBuilder.setInsets(WindowInsets.Type.statusBars(), newStatusBarInsets);
@@ -190,6 +188,15 @@ public class WindowManagerProxy implements ResourceBasedOverride {
return result;
}
protected int getStatusBarHeight(Context context, boolean isPortrait, int statusBarInset) {
Resources systemRes = context.getResources();
int statusBarHeight = getDimenByName(systemRes,
isPortrait ? STATUS_BAR_HEIGHT_PORTRAIT : STATUS_BAR_HEIGHT_LANDSCAPE,
STATUS_BAR_HEIGHT);
return Math.max(statusBarInset, statusBarHeight);
}
/**
* Returns a list of possible WindowBounds for the display keyed on the 4 surface rotations
*/
@@ -212,6 +219,9 @@ public class WindowManagerProxy implements ResourceBasedOverride {
boolean isTabletOrGesture = isTablet
|| (Utilities.ATLEAST_R && isGestureNav(context));
// Use the status bar height resources because current system API to get the status bar
// height doesn't allow to do this for an arbitrary display, it returns value only
// for the current active display (see com.android.internal.policy.StatusBarUtils)
int statusBarHeightPortrait = getDimenByName(systemRes,
STATUS_BAR_HEIGHT_PORTRAIT, STATUS_BAR_HEIGHT);
int statusBarHeightLandscape = getDimenByName(systemRes,