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