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

Commit cf51a08e authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "VirtualDisplay API for brightness callback and default." into main

parents 000884e8 e94e6400
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5293,13 +5293,19 @@ package android.hardware.display {
    field public static final int VIRTUAL_DISPLAY_FLAG_TRUSTED = 1024; // 0x400
  }
  public abstract static class VirtualDisplay.Callback {
    method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public void onRequestedBrightnessChanged(@FloatRange(from=0.0f, to=1.0f) float);
  }
  public final class VirtualDisplayConfig implements android.os.Parcelable {
    method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @FloatRange(from=0.0f, to=1.0f) public float getDefaultBrightness();
    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("com.android.window.flags.vdm_force_app_universal_resizable_api") public boolean isIgnoreActivitySizeRestrictions();
  }
  public static final class VirtualDisplayConfig.Builder {
    method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setDefaultBrightness(@FloatRange(from=0.0f, to=1.0f) float);
    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("com.android.window.flags.vdm_force_app_universal_resizable_api") @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setIgnoreActivitySizeRestrictions(boolean);
+7 −0
Original line number Diff line number Diff line
@@ -1432,6 +1432,13 @@ public final class DisplayManagerGlobal {
                mExecutor.execute(mCallback::onStopped);
            }
        }

        @Override // Binder call
        public void onRequestedBrightnessChanged(float brightness) {
            if (mCallback != null) {
                mExecutor.execute(() -> mCallback.onRequestedBrightnessChanged(brightness));
            }
        }
    }

    /**
+5 −0
Original line number Diff line number Diff line
@@ -38,4 +38,9 @@ oneway interface IVirtualDisplayCallback {
     * of the application to release() the virtual display.
     */
    void onStopped();

    /**
     * Called when the virtual display's requested brightness has changed.
     */
    void onRequestedBrightnessChanged(float brightness);
}
+22 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@
package android.hardware.display;

import android.annotation.FlaggedApi;
import android.annotation.FloatRange;
import android.annotation.SystemApi;
import android.view.Display;
import android.view.Surface;

@@ -164,5 +166,25 @@ public final class VirtualDisplay {
         * of the application to release() the virtual display.
         */
        public void onStopped() { }

        /**
         * Called when the requested brightness of the display has changed.
         *
         * <p>The system may adjust the display's brightness based on user or app activity. This
         * callback will only be invoked if the display has an explicitly specified default
         * brightness value.</p>
         *
         * <p>Value of {@code 0.0} indicates the minimum supported brightness and value of
         * {@code 1.0} indicates the maximum supported brightness.</p>
         *
         * @see android.view.View#setKeepScreenOn(boolean)
         * @see android.view.WindowManager.LayoutParams#screenBrightness
         * @see VirtualDisplayConfig.Builder#setDefaultBrightness(float)
         * @hide
         */
        @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER)
        @SystemApi
        public void onRequestedBrightnessChanged(
                @FloatRange(from = 0.0f, to = 1.0f) float brightness) {}
    }
}
+59 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.media.projection.MediaProjection;
import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PowerManager;
import android.util.ArraySet;
import android.view.Display;
import android.view.DisplayCutout;
@@ -61,6 +62,7 @@ public final class VirtualDisplayConfig implements Parcelable {
    private final boolean mIsHomeSupported;
    private final DisplayCutout mDisplayCutout;
    private final boolean mIgnoreActivitySizeRestrictions;
    private final float mDefaultBrightness;

    private VirtualDisplayConfig(
            @NonNull String name,
@@ -76,7 +78,8 @@ public final class VirtualDisplayConfig implements Parcelable {
            float requestedRefreshRate,
            boolean isHomeSupported,
            @Nullable DisplayCutout displayCutout,
            boolean ignoreActivitySizeRestrictions) {
            boolean ignoreActivitySizeRestrictions,
            @FloatRange(from = 0.0f, to = 1.0f) float defaultBrightness) {
        mName = name;
        mWidth = width;
        mHeight = height;
@@ -91,6 +94,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        mIsHomeSupported = isHomeSupported;
        mDisplayCutout = displayCutout;
        mIgnoreActivitySizeRestrictions = ignoreActivitySizeRestrictions;
        mDefaultBrightness = defaultBrightness;
    }

    /**
@@ -156,6 +160,22 @@ public final class VirtualDisplayConfig implements Parcelable {
        return mDisplayCutout;
    }

    /**
     * Returns the default brightness of the display.
     *
     * <p>Value of {@code 0.0} indicates the minimum supported brightness and value of {@code 1.0}
     * indicates the maximum supported brightness.</p>
     *
     * @see Builder#setDefaultBrightness(float)
     * @hide
     */
    @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER)
    @SystemApi
    public @FloatRange(from = 0.0f, to = 1.0f) float getDefaultBrightness() {
        return mDefaultBrightness;
    }


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

    @Override
@@ -272,7 +293,8 @@ public final class VirtualDisplayConfig implements Parcelable {
                && mRequestedRefreshRate == that.mRequestedRefreshRate
                && mIsHomeSupported == that.mIsHomeSupported
                && mIgnoreActivitySizeRestrictions == that.mIgnoreActivitySizeRestrictions
                && Objects.equals(mDisplayCutout, that.mDisplayCutout);
                && Objects.equals(mDisplayCutout, that.mDisplayCutout)
                && mDefaultBrightness == that.mDefaultBrightness;
    }

    @Override
@@ -281,7 +303,7 @@ public final class VirtualDisplayConfig implements Parcelable {
                mName, mWidth, mHeight, mDensityDpi, mFlags, mSurface, mUniqueId,
                mDisplayIdToMirror, mWindowManagerMirroringEnabled, mDisplayCategories,
                mRequestedRefreshRate, mIsHomeSupported, mDisplayCutout,
                mIgnoreActivitySizeRestrictions);
                mIgnoreActivitySizeRestrictions, mDefaultBrightness);
        return hashCode;
    }

@@ -303,6 +325,7 @@ public final class VirtualDisplayConfig implements Parcelable {
                + " mIsHomeSupported=" + mIsHomeSupported
                + " mDisplayCutout=" + mDisplayCutout
                + " mIgnoreActivitySizeRestrictions=" + mIgnoreActivitySizeRestrictions
                + " mDefaultBrightness=" + mDefaultBrightness
                + ")";
    }

@@ -321,6 +344,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        mIsHomeSupported = in.readBoolean();
        mDisplayCutout = DisplayCutout.ParcelableWrapper.readCutoutFromParcel(in);
        mIgnoreActivitySizeRestrictions = in.readBoolean();
        mDefaultBrightness = in.readFloat();
    }

    @NonNull
@@ -355,6 +379,7 @@ public final class VirtualDisplayConfig implements Parcelable {
        private boolean mIsHomeSupported = false;
        private DisplayCutout mDisplayCutout = null;
        private boolean mIgnoreActivitySizeRestrictions = false;
        private float mDefaultBrightness = 0.0f;

        /**
         * Creates a new Builder.
@@ -546,6 +571,35 @@ public final class VirtualDisplayConfig implements Parcelable {
            return this;
        }

        /**
         * Sets the default brightness of the display.
         *
         * <p>The system will use this brightness value whenever the display should be bright, i.e.
         * it is powered on and not dimmed due to user activity or app activity.</p>
         *
         * <p>Value of {@code 0.0} indicates the minimum supported brightness and value of
         * {@code 1.0} indicates the maximum supported brightness.</p>
         *
         * <p>If unset, defaults to {@code 0.0}</p>
         *
         * @see android.view.View#setKeepScreenOn(boolean)
         * @see Builder#setDefaultBrightness(float)
         * @see VirtualDisplay.Callback#onRequestedBrightnessChanged(float)
         * @hide
         */
        @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER)
        @SystemApi
        @NonNull
        public Builder setDefaultBrightness(@FloatRange(from = 0.0f, to = 1.0f) float brightness) {
            if (brightness < PowerManager.BRIGHTNESS_MIN
                    || brightness > PowerManager.BRIGHTNESS_MAX) {
                throw new IllegalArgumentException(
                        "Virtual display default brightness must be in range [0.0, 1.0]");
            }
            mDefaultBrightness = brightness;
            return this;
        }

        /**
         * Builds the {@link VirtualDisplayConfig} instance.
         */
@@ -565,7 +619,8 @@ public final class VirtualDisplayConfig implements Parcelable {
                    mRequestedRefreshRate,
                    mIsHomeSupported,
                    mDisplayCutout,
                    mIgnoreActivitySizeRestrictions);
                    mIgnoreActivitySizeRestrictions,
                    mDefaultBrightness);
        }
    }
}
Loading