Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit deaf90ab authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

API for specifying cutout of VirtualDisplay

Fix: 350007135
Flag: android.companion.virtualdevice.flags.virtual_display_insets
Test: see CTS

Change-Id: Id29a9fc8f2837b16c6334382e814d9d2e92aced5
parent b2ea8ff7
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -5161,10 +5161,12 @@ package android.hardware.display {
  }
  }
  public final class VirtualDisplayConfig implements android.os.Parcelable {
  public final class VirtualDisplayConfig implements android.os.Parcelable {
    method @FlaggedApi("android.companion.virtualdevice.flags.virtual_display_insets") @Nullable public android.view.DisplayCutout getDisplayCutout();
    method @FlaggedApi("android.companion.virtual.flags.vdm_custom_home") public boolean isHomeSupported();
    method @FlaggedApi("android.companion.virtual.flags.vdm_custom_home") public boolean isHomeSupported();
  }
  }
  public static final class VirtualDisplayConfig.Builder {
  public static final class VirtualDisplayConfig.Builder {
    method @FlaggedApi("android.companion.virtualdevice.flags.virtual_display_insets") @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setDisplayCutout(@Nullable android.view.DisplayCutout);
    method @FlaggedApi("android.companion.virtual.flags.vdm_custom_home") @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setHomeSupported(boolean);
    method @FlaggedApi("android.companion.virtual.flags.vdm_custom_home") @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setHomeSupported(boolean);
  }
  }
+7 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,13 @@ flag {
     is_fixed_read_only: true
     is_fixed_read_only: true
}
}


flag {
    namespace: "virtual_devices"
    name: "virtual_display_insets"
    description: "APIs for specifying virtual display insets (via cutout)"
    bug: "350007135"
}

flag {
flag {
     namespace: "virtual_devices"
     namespace: "virtual_devices"
     name: "metrics_collection"
     name: "metrics_collection"
+43 −5
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.util.ArraySet;
import android.util.ArraySet;
import android.view.Display;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.Surface;
import android.view.Surface;


import java.util.Collections;
import java.util.Collections;
@@ -55,9 +56,10 @@ public final class VirtualDisplayConfig implements Parcelable {
    private final String mUniqueId;
    private final String mUniqueId;
    private final int mDisplayIdToMirror;
    private final int mDisplayIdToMirror;
    private final boolean mWindowManagerMirroringEnabled;
    private final boolean mWindowManagerMirroringEnabled;
    private ArraySet<String> mDisplayCategories = null;
    private final ArraySet<String> mDisplayCategories;
    private final float mRequestedRefreshRate;
    private final float mRequestedRefreshRate;
    private final boolean mIsHomeSupported;
    private final boolean mIsHomeSupported;
    private final DisplayCutout mDisplayCutout;


    private VirtualDisplayConfig(
    private VirtualDisplayConfig(
            @NonNull String name,
            @NonNull String name,
@@ -71,7 +73,8 @@ public final class VirtualDisplayConfig implements Parcelable {
            boolean windowManagerMirroringEnabled,
            boolean windowManagerMirroringEnabled,
            @NonNull ArraySet<String> displayCategories,
            @NonNull ArraySet<String> displayCategories,
            float requestedRefreshRate,
            float requestedRefreshRate,
            boolean isHomeSupported) {
            boolean isHomeSupported,
            @Nullable DisplayCutout displayCutout) {
        mName = name;
        mName = name;
        mWidth = width;
        mWidth = width;
        mHeight = height;
        mHeight = height;
@@ -84,6 +87,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        mDisplayCategories = displayCategories;
        mDisplayCategories = displayCategories;
        mRequestedRefreshRate = requestedRefreshRate;
        mRequestedRefreshRate = requestedRefreshRate;
        mIsHomeSupported = isHomeSupported;
        mIsHomeSupported = isHomeSupported;
        mDisplayCutout = displayCutout;
    }
    }


    /**
    /**
@@ -134,6 +138,21 @@ public final class VirtualDisplayConfig implements Parcelable {
        return mSurface;
        return mSurface;
    }
    }


    /**
     * Returns the cutout of this display.
     *
     * @return the cutout of the display or {@code null} if none is specified.
     *
     * @see Builder#setDisplayCutout
     * @hide
     */
    @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_VIRTUAL_DISPLAY_INSETS)
    @SystemApi
    @Nullable
    public DisplayCutout getDisplayCutout() {
        return mDisplayCutout;
    }

    /**
    /**
     * Returns the unique identifier for the display. Shouldn't be displayed to the user.
     * Returns the unique identifier for the display. Shouldn't be displayed to the user.
     * @hide
     * @hide
@@ -207,6 +226,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        dest.writeArraySet(mDisplayCategories);
        dest.writeArraySet(mDisplayCategories);
        dest.writeFloat(mRequestedRefreshRate);
        dest.writeFloat(mRequestedRefreshRate);
        dest.writeBoolean(mIsHomeSupported);
        dest.writeBoolean(mIsHomeSupported);
        DisplayCutout.ParcelableWrapper.writeCutoutToParcel(mDisplayCutout, dest, flags);
    }
    }


    @Override
    @Override
@@ -232,7 +252,8 @@ public final class VirtualDisplayConfig implements Parcelable {
                && mWindowManagerMirroringEnabled == that.mWindowManagerMirroringEnabled
                && mWindowManagerMirroringEnabled == that.mWindowManagerMirroringEnabled
                && Objects.equals(mDisplayCategories, that.mDisplayCategories)
                && Objects.equals(mDisplayCategories, that.mDisplayCategories)
                && mRequestedRefreshRate == that.mRequestedRefreshRate
                && mRequestedRefreshRate == that.mRequestedRefreshRate
                && mIsHomeSupported == that.mIsHomeSupported;
                && mIsHomeSupported == that.mIsHomeSupported
                && Objects.equals(mDisplayCutout, that.mDisplayCutout);
    }
    }


    @Override
    @Override
@@ -240,7 +261,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        int hashCode = Objects.hash(
        int hashCode = Objects.hash(
                mName, mWidth, mHeight, mDensityDpi, mFlags, mSurface, mUniqueId,
                mName, mWidth, mHeight, mDensityDpi, mFlags, mSurface, mUniqueId,
                mDisplayIdToMirror, mWindowManagerMirroringEnabled, mDisplayCategories,
                mDisplayIdToMirror, mWindowManagerMirroringEnabled, mDisplayCategories,
                mRequestedRefreshRate, mIsHomeSupported);
                mRequestedRefreshRate, mIsHomeSupported, mDisplayCutout);
        return hashCode;
        return hashCode;
    }
    }


@@ -260,6 +281,7 @@ public final class VirtualDisplayConfig implements Parcelable {
                + " mDisplayCategories=" + mDisplayCategories
                + " mDisplayCategories=" + mDisplayCategories
                + " mRequestedRefreshRate=" + mRequestedRefreshRate
                + " mRequestedRefreshRate=" + mRequestedRefreshRate
                + " mIsHomeSupported=" + mIsHomeSupported
                + " mIsHomeSupported=" + mIsHomeSupported
                + " mDisplayCutout=" + mDisplayCutout
                + ")";
                + ")";
    }
    }


@@ -276,6 +298,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        mDisplayCategories = (ArraySet<String>) in.readArraySet(null);
        mDisplayCategories = (ArraySet<String>) in.readArraySet(null);
        mRequestedRefreshRate = in.readFloat();
        mRequestedRefreshRate = in.readFloat();
        mIsHomeSupported = in.readBoolean();
        mIsHomeSupported = in.readBoolean();
        mDisplayCutout = DisplayCutout.ParcelableWrapper.readCutoutFromParcel(in);
    }
    }


    @NonNull
    @NonNull
@@ -308,6 +331,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        private ArraySet<String> mDisplayCategories = new ArraySet<>();
        private ArraySet<String> mDisplayCategories = new ArraySet<>();
        private float mRequestedRefreshRate = 0.0f;
        private float mRequestedRefreshRate = 0.0f;
        private boolean mIsHomeSupported = false;
        private boolean mIsHomeSupported = false;
        private DisplayCutout mDisplayCutout = null;


        /**
        /**
         * Creates a new Builder.
         * Creates a new Builder.
@@ -468,6 +492,19 @@ public final class VirtualDisplayConfig implements Parcelable {
            return this;
            return this;
        }
        }


        /**
         * Sets the cutout of this display.
         *
         * @hide
         */
        @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_VIRTUAL_DISPLAY_INSETS)
        @SystemApi
        @NonNull
        public Builder setDisplayCutout(@Nullable DisplayCutout displayCutout) {
            mDisplayCutout = displayCutout;
            return this;
        }

        /**
        /**
         * Builds the {@link VirtualDisplayConfig} instance.
         * Builds the {@link VirtualDisplayConfig} instance.
         */
         */
@@ -485,7 +522,8 @@ public final class VirtualDisplayConfig implements Parcelable {
                    mWindowManagerMirroringEnabled,
                    mWindowManagerMirroringEnabled,
                    mDisplayCategories,
                    mDisplayCategories,
                    mRequestedRefreshRate,
                    mRequestedRefreshRate,
                    mIsHomeSupported);
                    mIsHomeSupported,
                    mDisplayCutout);
        }
        }
    }
    }
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -56,6 +56,7 @@ import android.os.SystemProperties;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.Slog;
import android.util.Slog;
import android.view.Display;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.DisplayShape;
import android.view.DisplayShape;
import android.view.Surface;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
@@ -271,6 +272,7 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
        private boolean mIsDisplayOn;
        private boolean mIsDisplayOn;
        private int mDisplayIdToMirror;
        private int mDisplayIdToMirror;
        private boolean mIsWindowManagerMirroring;
        private boolean mIsWindowManagerMirroring;
        private DisplayCutout mDisplayCutout;


        public VirtualDisplayDevice(IBinder displayToken, IBinder appToken,
        public VirtualDisplayDevice(IBinder displayToken, IBinder appToken,
                int ownerUid, String ownerPackageName, Surface surface, int flags,
                int ownerUid, String ownerPackageName, Surface surface, int flags,
@@ -286,6 +288,7 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
            mHeight = virtualDisplayConfig.getHeight();
            mHeight = virtualDisplayConfig.getHeight();
            mDensityDpi = virtualDisplayConfig.getDensityDpi();
            mDensityDpi = virtualDisplayConfig.getDensityDpi();
            mRequestedRefreshRate = virtualDisplayConfig.getRequestedRefreshRate();
            mRequestedRefreshRate = virtualDisplayConfig.getRequestedRefreshRate();
            mDisplayCutout = virtualDisplayConfig.getDisplayCutout();
            mMode = createMode(mWidth, mHeight, getRefreshRate());
            mMode = createMode(mWidth, mHeight, getRefreshRate());
            mSurface = surface;
            mSurface = surface;
            mFlags = flags;
            mFlags = flags;
@@ -567,6 +570,7 @@ public class VirtualDisplayAdapter extends DisplayAdapter {


                mInfo.displayShape =
                mInfo.displayShape =
                        DisplayShape.createDefaultDisplayShape(mInfo.width, mInfo.height, false);
                        DisplayShape.createDefaultDisplayShape(mInfo.width, mInfo.height, false);
                mInfo.displayCutout = mDisplayCutout;
            }
            }
            return mInfo;
            return mInfo;
        }
        }