Loading core/java/android/view/Display.java +3 −3 Original line number Diff line number Diff line Loading @@ -1463,10 +1463,10 @@ public final class Display { return false; } final Configuration config = mResources.getConfiguration(); // TODO(b/179308296) Temporarily exclude Launcher from being given max bounds, by checking // if the caller is the recents component. // TODO(b/179308296) Temporarily - never report max bounds to only Launcher if the feature // is disabled. return config != null && !config.windowConfiguration.getMaxBounds().isEmpty() && !isRecentsComponent(); && (mDisplayInfo.shouldConstrainMetricsForLauncher || !isRecentsComponent()); } /** Loading core/java/android/view/DisplayInfo.java +14 −1 Original line number Diff line number Diff line Loading @@ -305,6 +305,13 @@ public final class DisplayInfo implements Parcelable { */ public float brightnessDefault; /** * @hide * True if Display#getRealSize and getRealMetrics should be constrained for Launcher, false * otherwise. */ public boolean shouldConstrainMetricsForLauncher = false; /** * The {@link RoundedCorners} if present, otherwise {@code null}. */ Loading Loading @@ -381,7 +388,8 @@ public final class DisplayInfo implements Parcelable { && brightnessMinimum == other.brightnessMinimum && brightnessMaximum == other.brightnessMaximum && brightnessDefault == other.brightnessDefault && Objects.equals(roundedCorners, other.roundedCorners); && Objects.equals(roundedCorners, other.roundedCorners) && shouldConstrainMetricsForLauncher == other.shouldConstrainMetricsForLauncher; } @Override Loading Loading @@ -432,6 +440,7 @@ public final class DisplayInfo implements Parcelable { brightnessMaximum = other.brightnessMaximum; brightnessDefault = other.brightnessDefault; roundedCorners = other.roundedCorners; shouldConstrainMetricsForLauncher = other.shouldConstrainMetricsForLauncher; } public void readFromParcel(Parcel source) { Loading Loading @@ -488,6 +497,7 @@ public final class DisplayInfo implements Parcelable { for (int i = 0; i < numUserDisabledFormats; i++) { userDisabledHdrTypes[i] = source.readInt(); } shouldConstrainMetricsForLauncher = source.readBoolean(); } @Override Loading Loading @@ -542,6 +552,7 @@ public final class DisplayInfo implements Parcelable { for (int i = 0; i < userDisabledHdrTypes.length; i++) { dest.writeInt(userDisabledHdrTypes[i]); } dest.writeBoolean(shouldConstrainMetricsForLauncher); } @Override Loading Loading @@ -796,6 +807,8 @@ public final class DisplayInfo implements Parcelable { sb.append(brightnessMaximum); sb.append(", brightnessDefault "); sb.append(brightnessDefault); sb.append(", shouldConstrainMetricsForLauncher "); sb.append(shouldConstrainMetricsForLauncher); sb.append("}"); return sb.toString(); } Loading services/core/java/com/android/server/display/DisplayManagerService.java +18 −2 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ import android.hardware.display.DisplayManagerGlobal; import android.hardware.display.DisplayManagerInternal; import android.hardware.display.DisplayManagerInternal.DisplayGroupListener; import android.hardware.display.DisplayManagerInternal.DisplayTransactionListener; import android.hardware.display.DisplayManagerInternal.RefreshRateLimitation; import android.hardware.display.DisplayManagerInternal.RefreshRateRange; import android.hardware.display.DisplayViewport; import android.hardware.display.DisplayedContentSample; import android.hardware.display.DisplayedContentSamplingAttributes; Loading Loading @@ -636,6 +634,9 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId); if (display != null) { // Do not let constrain be overwritten by override from WindowManager. info.shouldConstrainMetricsForLauncher = display.getDisplayInfoLocked().shouldConstrainMetricsForLauncher; if (display.setDisplayInfoOverrideFromWindowManagerLocked(info)) { handleLogicalDisplayChangedLocked(display); scheduleTraversalLocked(false); Loading Loading @@ -1723,6 +1724,21 @@ public final class DisplayManagerService extends SystemService { } } void setShouldConstrainMetricsForLauncher(boolean constrain) { // Apply constrain for every display. synchronized (mSyncRoot) { int[] displayIds = mLogicalDisplayMapper.getDisplayIdsLocked(Process.myUid()); for (int i : displayIds) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(i); if (display == null) { return; } display.getDisplayInfoLocked().shouldConstrainMetricsForLauncher = constrain; setDisplayInfoOverrideFromWindowManagerInternal(i, display.getDisplayInfoLocked()); } } } private void clearViewportsLocked() { mViewports.clear(); } Loading services/core/java/com/android/server/display/DisplayManagerShellCommand.java +16 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ class DisplayManagerShellCommand extends ShellCommand { return setDisplayModeDirectorLoggingEnabled(false); case "dwb-set-cct": return setAmbientColorTemperatureOverride(); case "constrain-launcher-metrics": return setConstrainLauncherMetrics(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -88,6 +90,9 @@ class DisplayManagerShellCommand extends ShellCommand { pw.println(" Disable display mode director logging."); pw.println(" dwb-set-cct CCT"); pw.println(" Sets the ambient color temperature override to CCT (use -1 to disable)."); pw.println(" constrain-launcher-metrics [true|false]"); pw.println(" Sets if Display#getRealSize and getRealMetrics should be constrained for "); pw.println(" Launcher."); pw.println(); Intent.printIntentArgsHelp(pw , ""); } Loading Loading @@ -150,4 +155,15 @@ class DisplayManagerShellCommand extends ShellCommand { mService.setAmbientColorTemperatureOverride(cct); return 0; } private int setConstrainLauncherMetrics() { String constrainText = getNextArg(); if (constrainText == null) { getErrPrintWriter().println("Error: no value specified"); return 1; } boolean constrain = Boolean.parseBoolean(constrainText); mService.setShouldConstrainMetricsForLauncher(constrain); return 0; } } services/core/java/com/android/server/display/LogicalDisplay.java +2 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,8 @@ final class LogicalDisplay { info.physicalXDpi = mOverrideDisplayInfo.physicalXDpi; info.physicalYDpi = mOverrideDisplayInfo.physicalYDpi; info.roundedCorners = mOverrideDisplayInfo.roundedCorners; info.shouldConstrainMetricsForLauncher = mOverrideDisplayInfo.shouldConstrainMetricsForLauncher; } mInfo.set(info); } Loading Loading
core/java/android/view/Display.java +3 −3 Original line number Diff line number Diff line Loading @@ -1463,10 +1463,10 @@ public final class Display { return false; } final Configuration config = mResources.getConfiguration(); // TODO(b/179308296) Temporarily exclude Launcher from being given max bounds, by checking // if the caller is the recents component. // TODO(b/179308296) Temporarily - never report max bounds to only Launcher if the feature // is disabled. return config != null && !config.windowConfiguration.getMaxBounds().isEmpty() && !isRecentsComponent(); && (mDisplayInfo.shouldConstrainMetricsForLauncher || !isRecentsComponent()); } /** Loading
core/java/android/view/DisplayInfo.java +14 −1 Original line number Diff line number Diff line Loading @@ -305,6 +305,13 @@ public final class DisplayInfo implements Parcelable { */ public float brightnessDefault; /** * @hide * True if Display#getRealSize and getRealMetrics should be constrained for Launcher, false * otherwise. */ public boolean shouldConstrainMetricsForLauncher = false; /** * The {@link RoundedCorners} if present, otherwise {@code null}. */ Loading Loading @@ -381,7 +388,8 @@ public final class DisplayInfo implements Parcelable { && brightnessMinimum == other.brightnessMinimum && brightnessMaximum == other.brightnessMaximum && brightnessDefault == other.brightnessDefault && Objects.equals(roundedCorners, other.roundedCorners); && Objects.equals(roundedCorners, other.roundedCorners) && shouldConstrainMetricsForLauncher == other.shouldConstrainMetricsForLauncher; } @Override Loading Loading @@ -432,6 +440,7 @@ public final class DisplayInfo implements Parcelable { brightnessMaximum = other.brightnessMaximum; brightnessDefault = other.brightnessDefault; roundedCorners = other.roundedCorners; shouldConstrainMetricsForLauncher = other.shouldConstrainMetricsForLauncher; } public void readFromParcel(Parcel source) { Loading Loading @@ -488,6 +497,7 @@ public final class DisplayInfo implements Parcelable { for (int i = 0; i < numUserDisabledFormats; i++) { userDisabledHdrTypes[i] = source.readInt(); } shouldConstrainMetricsForLauncher = source.readBoolean(); } @Override Loading Loading @@ -542,6 +552,7 @@ public final class DisplayInfo implements Parcelable { for (int i = 0; i < userDisabledHdrTypes.length; i++) { dest.writeInt(userDisabledHdrTypes[i]); } dest.writeBoolean(shouldConstrainMetricsForLauncher); } @Override Loading Loading @@ -796,6 +807,8 @@ public final class DisplayInfo implements Parcelable { sb.append(brightnessMaximum); sb.append(", brightnessDefault "); sb.append(brightnessDefault); sb.append(", shouldConstrainMetricsForLauncher "); sb.append(shouldConstrainMetricsForLauncher); sb.append("}"); return sb.toString(); } Loading
services/core/java/com/android/server/display/DisplayManagerService.java +18 −2 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ import android.hardware.display.DisplayManagerGlobal; import android.hardware.display.DisplayManagerInternal; import android.hardware.display.DisplayManagerInternal.DisplayGroupListener; import android.hardware.display.DisplayManagerInternal.DisplayTransactionListener; import android.hardware.display.DisplayManagerInternal.RefreshRateLimitation; import android.hardware.display.DisplayManagerInternal.RefreshRateRange; import android.hardware.display.DisplayViewport; import android.hardware.display.DisplayedContentSample; import android.hardware.display.DisplayedContentSamplingAttributes; Loading Loading @@ -636,6 +634,9 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId); if (display != null) { // Do not let constrain be overwritten by override from WindowManager. info.shouldConstrainMetricsForLauncher = display.getDisplayInfoLocked().shouldConstrainMetricsForLauncher; if (display.setDisplayInfoOverrideFromWindowManagerLocked(info)) { handleLogicalDisplayChangedLocked(display); scheduleTraversalLocked(false); Loading Loading @@ -1723,6 +1724,21 @@ public final class DisplayManagerService extends SystemService { } } void setShouldConstrainMetricsForLauncher(boolean constrain) { // Apply constrain for every display. synchronized (mSyncRoot) { int[] displayIds = mLogicalDisplayMapper.getDisplayIdsLocked(Process.myUid()); for (int i : displayIds) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(i); if (display == null) { return; } display.getDisplayInfoLocked().shouldConstrainMetricsForLauncher = constrain; setDisplayInfoOverrideFromWindowManagerInternal(i, display.getDisplayInfoLocked()); } } } private void clearViewportsLocked() { mViewports.clear(); } Loading
services/core/java/com/android/server/display/DisplayManagerShellCommand.java +16 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ class DisplayManagerShellCommand extends ShellCommand { return setDisplayModeDirectorLoggingEnabled(false); case "dwb-set-cct": return setAmbientColorTemperatureOverride(); case "constrain-launcher-metrics": return setConstrainLauncherMetrics(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -88,6 +90,9 @@ class DisplayManagerShellCommand extends ShellCommand { pw.println(" Disable display mode director logging."); pw.println(" dwb-set-cct CCT"); pw.println(" Sets the ambient color temperature override to CCT (use -1 to disable)."); pw.println(" constrain-launcher-metrics [true|false]"); pw.println(" Sets if Display#getRealSize and getRealMetrics should be constrained for "); pw.println(" Launcher."); pw.println(); Intent.printIntentArgsHelp(pw , ""); } Loading Loading @@ -150,4 +155,15 @@ class DisplayManagerShellCommand extends ShellCommand { mService.setAmbientColorTemperatureOverride(cct); return 0; } private int setConstrainLauncherMetrics() { String constrainText = getNextArg(); if (constrainText == null) { getErrPrintWriter().println("Error: no value specified"); return 1; } boolean constrain = Boolean.parseBoolean(constrainText); mService.setShouldConstrainMetricsForLauncher(constrain); return 0; } }
services/core/java/com/android/server/display/LogicalDisplay.java +2 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,8 @@ final class LogicalDisplay { info.physicalXDpi = mOverrideDisplayInfo.physicalXDpi; info.physicalYDpi = mOverrideDisplayInfo.physicalYDpi; info.roundedCorners = mOverrideDisplayInfo.roundedCorners; info.shouldConstrainMetricsForLauncher = mOverrideDisplayInfo.shouldConstrainMetricsForLauncher; } mInfo.set(info); } Loading