Temporary flag for Launcher to debug their usage of sandboxed display APIs

The flag does not impact any other application calling the sandboxed
display APIs. The flag will be removed after Launcher finishes
identifying the breakages attributed to the display API changes.

For Launcher to receive the un-sandboxed values:
adb shell cmd display constrain-display-apis false

Test: manual
Bug: 193421404
Change-Id: I5d8612fd7dcb49769ae005130c9786b2d8416bfc
This commit is contained in:
Naomi Musgrave
2021-07-30 08:39:40 +01:00
parent 9e0dd92699
commit 253696fea3
5 changed files with 53 additions and 6 deletions

View File

@@ -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());
}
/**

View File

@@ -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}.
*/
@@ -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
@@ -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) {
@@ -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
@@ -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
@@ -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();
}

View File

@@ -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;
@@ -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);
@@ -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();
}

View File

@@ -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);
}
@@ -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 , "");
}
@@ -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;
}
}

View File

@@ -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);
}