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

Commit e75d2656 authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

Topology API

- getDisplayTopology
- registerTopologyListener
- unregisterTopologyListener
- Display.isInternal
- DisplayTopology.getAbsoluteBounds

Bug: 404269099
Flag: com.android.server.display.feature.flags.display_topology_api
Test: TopologyUpdateDeliveryTest, DisplayTest, DisplayManagerTest
Change-Id: I56ad1a78690c06ef0f007fdef2cb64f75fcc5f10
parent 7cfe707c
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -20878,13 +20878,16 @@ package android.hardware.display {
    method @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull android.hardware.display.VirtualDisplayConfig);
    method @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull android.hardware.display.VirtualDisplayConfig, @Nullable android.os.Handler, @Nullable android.hardware.display.VirtualDisplay.Callback);
    method public android.view.Display getDisplay(int);
    method @FlaggedApi("com.android.server.display.feature.flags.display_topology_api") @Nullable @RequiresPermission("android.permission.MANAGE_DISPLAYS") public android.hardware.display.DisplayTopology getDisplayTopology();
    method public android.view.Display[] getDisplays();
    method public android.view.Display[] getDisplays(String);
    method @NonNull public android.hardware.display.HdrConversionMode getHdrConversionMode();
    method public int getMatchContentFrameRateUserPreference();
    method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler);
    method @FlaggedApi("com.android.server.display.feature.flags.display_listener_performance_improvements") public void registerDisplayListener(@NonNull java.util.concurrent.Executor, long, @NonNull android.hardware.display.DisplayManager.DisplayListener);
    method @FlaggedApi("com.android.server.display.feature.flags.display_topology_api") @RequiresPermission("android.permission.MANAGE_DISPLAYS") public void registerTopologyListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.hardware.display.DisplayTopology>);
    method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener);
    method @FlaggedApi("com.android.server.display.feature.flags.display_topology_api") @RequiresPermission("android.permission.MANAGE_DISPLAYS") public void unregisterTopologyListener(@NonNull java.util.function.Consumer<android.hardware.display.DisplayTopology>);
    field @FlaggedApi("com.android.server.display.feature.flags.display_category_built_in") public static final String DISPLAY_CATEGORY_BUILT_IN_DISPLAYS = "android.hardware.display.category.BUILT_IN_DISPLAYS";
    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
    field @FlaggedApi("com.android.server.display.feature.flags.display_listener_performance_improvements") public static final long EVENT_TYPE_DISPLAY_ADDED = 1L; // 0x1L
@@ -20909,6 +20912,13 @@ package android.hardware.display {
    method public void onDisplayRemoved(int);
  }
  @FlaggedApi("com.android.server.display.feature.flags.display_topology_api") public final class DisplayTopology implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public android.util.SparseArray<android.graphics.RectF> getAbsoluteBounds();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.DisplayTopology> CREATOR;
  }
  public final class HdrConversionMode implements android.os.Parcelable {
    ctor public HdrConversionMode(int, int);
    ctor public HdrConversionMode(int);
@@ -52238,6 +52248,7 @@ package android.view {
    method @FlaggedApi("com.android.server.display.feature.flags.enable_has_arr_support") public boolean hasArrSupport();
    method public boolean isHdr();
    method public boolean isHdrSdrRatioAvailable();
    method @FlaggedApi("com.android.server.display.feature.flags.display_topology_api") public boolean isInternal();
    method public boolean isMinimalPostProcessingSupported();
    method public boolean isValid();
    method public boolean isWideColorGamut();
+0 −8
Original line number Diff line number Diff line
@@ -1757,7 +1757,6 @@ package android.hardware.display {
  public final class DisplayManager {
    method public boolean areUserDisabledHdrTypesAllowed();
    method @RequiresPermission(android.Manifest.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE) public void clearGlobalUserPreferredDisplayMode();
    method @FlaggedApi("com.android.server.display.feature.flags.display_topology") @Nullable @RequiresPermission("android.permission.MANAGE_DISPLAYS") public android.hardware.display.DisplayTopology getDisplayTopology();
    method @Nullable public android.view.Display.Mode getGlobalUserPreferredDisplayMode();
    method @NonNull public android.hardware.display.HdrConversionMode getHdrConversionModeSetting();
    method @NonNull public int[] getSupportedHdrOutputTypes();
@@ -1784,13 +1783,6 @@ package android.hardware.display {
    field public static final int VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH = 64; // 0x40
  }

  @FlaggedApi("com.android.server.display.feature.flags.display_topology") public final class DisplayTopology implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public android.util.SparseArray<android.graphics.RectF> getAbsoluteBounds();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.DisplayTopology> CREATOR;
  }

}

package android.hardware.fingerprint {
+3 −8
Original line number Diff line number Diff line
@@ -1942,13 +1942,10 @@ public final class DisplayManager {
    /**
     * @return The current display topology that represents the relative positions of extended
     * displays.
     *
     * @hide
     */
    @RequiresPermission(MANAGE_DISPLAYS)
    @Nullable
    @TestApi
    @FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY)
    @FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY_API)
    public DisplayTopology getDisplayTopology() {
        return mGlobal.getDisplayTopology();
    }
@@ -1968,10 +1965,9 @@ public final class DisplayManager {
     * Register a listener to receive display topology updates.
     * @param executor The executor specifying the thread on which the callbacks will be invoked
     * @param listener The listener
     *
     * @hide
     */
    @RequiresPermission(MANAGE_DISPLAYS)
    @FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY_API)
    public void registerTopologyListener(@NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<DisplayTopology> listener) {
        mGlobal.registerTopologyListener(executor, listener, ActivityThread.currentPackageName());
@@ -1980,10 +1976,9 @@ public final class DisplayManager {
    /**
     * Unregister a display topology listener.
     * @param listener The listener to unregister
     *
     * @hide
     */
    @RequiresPermission(MANAGE_DISPLAYS)
    @FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY_API)
    public void unregisterTopologyListener(@NonNull Consumer<DisplayTopology> listener) {
        mGlobal.unregisterTopologyListener(listener);
    }
+9 −16
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import static android.hardware.display.DisplayTopology.TreeNode.POSITION_TOP;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.graphics.PointF;
import android.graphics.RectF;
import android.os.Parcel;
@@ -42,7 +41,6 @@ import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.feature.flags.Flags;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -58,11 +56,8 @@ import java.util.Queue;
/**
 * Represents the relative placement of extended displays.
 * Does not support concurrent calls, so a lock should be held when calling into this class.
 *
 * @hide
 */
@TestApi
@FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY)
@FlaggedApi(Flags.FLAG_DISPLAY_TOPOLOGY_API)
public final class DisplayTopology implements Parcelable {
    private static final String TAG = "DisplayTopology";
    private static final float EPSILON = 0.0001f;
@@ -590,19 +585,18 @@ public final class DisplayTopology implements Parcelable {
     * @hide
     * @param pw The stream to dump information to.
     */
    public void dump(PrintWriter pw) {
    public void dump(IndentingPrintWriter pw) {
        pw.println("DisplayTopology:");
        pw.println("--------------------");
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw);
        ipw.increaseIndent();
        pw.increaseIndent();

        ipw.println("mPrimaryDisplayId: " + mPrimaryDisplayId);
        pw.println("mPrimaryDisplayId: " + mPrimaryDisplayId);

        ipw.println("Topology tree:");
        pw.println("Topology tree:");
        if (mRoot != null) {
            ipw.increaseIndent();
            mRoot.dump(ipw);
            ipw.decreaseIndent();
            pw.increaseIndent();
            mRoot.dump(pw);
            pw.decreaseIndent();
        }
    }

@@ -622,8 +616,7 @@ public final class DisplayTopology implements Parcelable {
    @Override
    public String toString() {
        StringWriter out = new StringWriter();
        PrintWriter writer = new PrintWriter(out);
        dump(writer);
        dump(new IndentingPrintWriter(out));
        return out.toString();
    }

+10 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS;
import static android.hardware.flags.Flags.FLAG_OVERLAYPROPERTIES_CLASS_API;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;

import static com.android.server.display.feature.flags.Flags.FLAG_DISPLAY_TOPOLOGY_API;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_GET_SUPPORTED_REFRESH_RATES;
import static com.android.server.display.feature.flags.Flags.FLAG_HIGHEST_HDR_SDR_RATIO_API;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_HAS_ARR_SUPPORT;
@@ -841,6 +842,15 @@ public final class Display {
        return mType;
    }

    /**
     * Check if this is a built-in display.
     */
    @FlaggedApi(FLAG_DISPLAY_TOPOLOGY_API)
    public boolean isInternal() {
        return mType == TYPE_INTERNAL;
    }


    /**
     * Gets the display address, or null if none.
     * Interpretation varies by display type.
Loading