Skip to content

Instantly share code, notes, and snippets.

@phhusson
Created November 12, 2020 21:32
Show Gist options
  • Save phhusson/f286bdedcc5b192a62049bb3099af71a to your computer and use it in GitHub Desktop.
Save phhusson/f286bdedcc5b192a62049bb3099af71a to your computer and use it in GitHub Desktop.
diff --git a/frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java b/frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java
index 852868616af..e170a75d791 100644
--- a/frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -26,6 +26,7 @@ import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_C
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SECURE;
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
+import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH;
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED;
import static android.hardware.display.DisplayViewport.VIEWPORT_EXTERNAL;
import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL;
@@ -2205,6 +2206,12 @@ public final class DisplayManagerService extends SystemService {
flags &= ~VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
}
+ // Trust chromecast
+ if("com.google.android.gms".equals(packageName)) {
+ flags |= VIRTUAL_DISPLAY_FLAG_TRUSTED;
+ flags |= VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH;
+ }
+
// Sometimes users can have sensitive information in system decoration windows. An app
// could create a virtual display with system decorations support and read the user info
// from the surface.
diff --git a/frameworks/base/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/frameworks/base/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index 210d2979c80..9ac655daaa8 100644
--- a/frameworks/base/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/frameworks/base/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -43,6 +43,7 @@ import android.os.SystemProperties;
import android.util.ArrayMap;
import android.util.Slog;
import android.view.Display;
+import android.view.DisplayAddress;
import android.view.Surface;
import android.view.SurfaceControl;
@@ -373,6 +374,13 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
mInfo.modeId = mMode.getModeId();
mInfo.defaultModeId = mMode.getModeId();
mInfo.supportedModes = new Display.Mode[] { mMode };
+
+ if("com.google.android.gms".equals(mOwnerPackageName)) {
+ final DisplayAddress.Physical physicalAddress =
+ DisplayAddress.fromPortAndModel((byte)0x71, 0xdeadbeefL);
+ mInfo.address = physicalAddress;
+ }
+
mInfo.densityDpi = mDensityDpi;
mInfo.xDpi = mDensityDpi;
mInfo.yDpi = mDensityDpi;
diff --git a/frameworks/base/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/frameworks/base/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 6bfcf0c75b8..51d324834a2 100644
--- a/frameworks/base/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -1091,7 +1091,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
final boolean uidPresentOnDisplay = displayContent.isUidPresent(callingUid);
final int displayOwnerUid = displayContent.mDisplay.getOwnerUid();
- if (displayContent.mDisplay.getType() == TYPE_VIRTUAL && displayOwnerUid != SYSTEM_UID) {
+ final String displayOwnerPackageName = displayContent.mDisplay.getOwnerPackageName();
+ if (displayContent.mDisplay.getType() == TYPE_VIRTUAL && displayOwnerUid != SYSTEM_UID && !"com.google.android.gms".equals(displayOwnerPackageName)) {
// Limit launching on virtual displays, because their contents can be read from Surface
// by apps that created them.
if ((aInfo.flags & ActivityInfo.FLAG_ALLOW_EMBEDDED) == 0) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment