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

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

Merge "VDM APIs to override ViewConfiguration attributes" into main

parents e1d45bfe 3d04e098
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -3417,6 +3417,31 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.ActivityPolicyExemption.Builder setPackageName(@NonNull String);
  }
  @FlaggedApi("android.companion.virtualdevice.flags.viewconfiguration_apis") public final class ViewConfigurationParams implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public java.time.Duration getDoubleTapMinTimeDuration();
    method @NonNull public java.time.Duration getDoubleTapTimeoutDuration();
    method @FloatRange(from=0) public float getMaximumFlingVelocityDpPerSecond();
    method @FloatRange(from=0) public float getMinimumFlingVelocityDpPerSecond();
    method @FloatRange(from=0) public float getScrollFriction();
    method @NonNull public java.time.Duration getTapTimeoutDuration();
    method @FloatRange(from=0) public float getTouchSlopDp();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.ViewConfigurationParams> CREATOR;
  }
  @FlaggedApi("android.companion.virtualdevice.flags.viewconfiguration_apis") public static final class ViewConfigurationParams.Builder {
    ctor public ViewConfigurationParams.Builder();
    method @NonNull public android.companion.virtual.ViewConfigurationParams build();
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setDoubleTapMinTimeDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setDoubleTapTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMaximumFlingVelocityDpPerSecond(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMinimumFlingVelocityDpPerSecond(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setScrollFriction(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setTapTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setTouchSlopDp(@FloatRange(from=0) float);
  }
  public final class VirtualDevice implements android.os.Parcelable {
    method public boolean hasCustomAudioInputSupport();
    method public boolean hasCustomCameraSupport();
@@ -3506,6 +3531,7 @@ package android.companion.virtual {
    method @Nullable public String getName();
    method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public java.time.Duration getScreenOffTimeout();
    method @NonNull public java.util.Set<android.os.UserHandle> getUsersWithMatchingAccounts();
    method @FlaggedApi("android.companion.virtualdevice.flags.viewconfiguration_apis") @Nullable public android.companion.virtual.ViewConfigurationParams getViewConfigurationParams();
    method @NonNull public java.util.List<android.companion.virtual.sensor.VirtualSensorConfig> getVirtualSensorConfigs();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @Deprecated public static final int ACTIVITY_POLICY_DEFAULT_ALLOWED = 0; // 0x0
@@ -3545,6 +3571,7 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setName(@NonNull String);
    method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setScreenOffTimeout(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setUsersWithMatchingAccounts(@NonNull java.util.Set<android.os.UserHandle>);
    method @FlaggedApi("android.companion.virtualdevice.flags.viewconfiguration_apis") @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setViewConfigurationParams(@Nullable android.companion.virtual.ViewConfigurationParams);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setVirtualSensorCallback(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.sensor.VirtualSensorCallback);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setVirtualSensorDirectChannelCallback(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.sensor.VirtualSensorDirectChannelCallback);
  }
+388 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.companion.virtual;

import android.annotation.FlaggedApi;
import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.companion.virtualdevice.flags.Flags;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.ViewConfiguration;

import java.time.Duration;
import java.util.Objects;

/**
 * Parameters related to {@link ViewConfiguration} that can be configured when creating a virtual
 * device. When these parameters are set, {@link ViewConfiguration} methods would return the
 * configured values for any context associated with the virtual device.
 *
 * @hide
 */
@SystemApi
@FlaggedApi(Flags.FLAG_VIEWCONFIGURATION_APIS)
public final class ViewConfigurationParams implements Parcelable {

    /**
     * @hide
     */
    public static final int INVALID_VALUE = -1;

    private final float mTouchSlopDp;
    private final float mMinimumFlingVelocityDpPerSecond;
    private final float mMaximumFlingVelocityDpPerSecond;
    private final float mScrollFriction;
    private final int mTapTimeoutMillis;
    private final int mDoubleTapTimeoutMillis;
    private final int mDoubleTapMinTimeMillis;

    private ViewConfigurationParams(float touchSlopDp, float minimumFlingVelocityDpPerSecond,
            float maximumFlingVelocityDpPerSecond, float scrollFriction, int tapTimeoutMillis,
            int doubleTapTimeoutMillis, int doubleTapMinTimeMillis) {
        mTouchSlopDp = touchSlopDp;
        mMinimumFlingVelocityDpPerSecond = minimumFlingVelocityDpPerSecond;
        mMaximumFlingVelocityDpPerSecond = maximumFlingVelocityDpPerSecond;
        mScrollFriction = scrollFriction;
        mTapTimeoutMillis = tapTimeoutMillis;
        mDoubleTapTimeoutMillis = doubleTapTimeoutMillis;
        mDoubleTapMinTimeMillis = doubleTapMinTimeMillis;
    }

    private ViewConfigurationParams(Parcel in) {
        mTouchSlopDp = in.readFloat();
        mMinimumFlingVelocityDpPerSecond = in.readFloat();
        mMaximumFlingVelocityDpPerSecond = in.readFloat();
        mScrollFriction = in.readFloat();
        mTapTimeoutMillis = in.readInt();
        mDoubleTapTimeoutMillis = in.readInt();
        mDoubleTapMinTimeMillis = in.readInt();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeFloat(mTouchSlopDp);
        dest.writeFloat(mMinimumFlingVelocityDpPerSecond);
        dest.writeFloat(mMaximumFlingVelocityDpPerSecond);
        dest.writeFloat(mScrollFriction);
        dest.writeInt(mTapTimeoutMillis);
        dest.writeInt(mDoubleTapTimeoutMillis);
        dest.writeInt(mDoubleTapMinTimeMillis);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ViewConfigurationParams that)) return false;
        return Float.compare(mTouchSlopDp, that.mTouchSlopDp) == 0
                && Float.compare(mMinimumFlingVelocityDpPerSecond,
                    that.mMinimumFlingVelocityDpPerSecond) == 0
                && Float.compare(mMaximumFlingVelocityDpPerSecond,
                    that.mMaximumFlingVelocityDpPerSecond) == 0
                && Float.compare(mScrollFriction, that.mScrollFriction) == 0
                && mTapTimeoutMillis == that.mTapTimeoutMillis
                && mDoubleTapTimeoutMillis == that.mDoubleTapTimeoutMillis
                && mDoubleTapMinTimeMillis == that.mDoubleTapMinTimeMillis;
    }

    @Override
    public int hashCode() {
        return Objects.hash(mTouchSlopDp, mMinimumFlingVelocityDpPerSecond,
                mMaximumFlingVelocityDpPerSecond, mScrollFriction, mTapTimeoutMillis,
                mDoubleTapTimeoutMillis, mDoubleTapMinTimeMillis);
    }

    @Override
    @NonNull
    public String toString() {
        return "ViewConfigurationParams("
                + "mTouchSlopDp=" + mTouchSlopDp
                + ", mMinimumFlingVelocityDpPerSecond=" + mMinimumFlingVelocityDpPerSecond
                + ", mMaximumFlingVelocityDpPerSecond=" + mMaximumFlingVelocityDpPerSecond
                + ", mScrollFriction=" + mScrollFriction
                + ", mTapTimeoutMillis=" + mTapTimeoutMillis
                + ", mDoubleTapTimeoutMillis=" + mDoubleTapTimeoutMillis
                + ", mDoubleTapMinTimeMillis=" + mDoubleTapMinTimeMillis
                + ')';
    }

    /**
     * Returns the touch slop in density independent pixels (dp).
     *
     * @see ViewConfiguration#getScaledTouchSlop()
     */
    @FloatRange(from = 0)
    public float getTouchSlopDp() {
        return mTouchSlopDp;
    }

    /**
     * Returns the minimum fling velocity in density independent pixels (dp) per second.
     *
     * @see ViewConfiguration#getScaledMinimumFlingVelocity()
     */
    @FloatRange(from = 0)
    public float getMinimumFlingVelocityDpPerSecond() {
        return mMinimumFlingVelocityDpPerSecond;
    }

    /**
     * Returns the maximum fling velocity in density independent pixels (dp) per second.
     *
     * @see ViewConfiguration#getScaledMaximumFlingVelocity()
     */
    @FloatRange(from = 0)
    public float getMaximumFlingVelocityDpPerSecond() {
        return mMaximumFlingVelocityDpPerSecond;
    }

    /**
     * Returns the scroll friction.
     *
     * @see ViewConfiguration#getScrollFrictionAmount()
     */
    @FloatRange(from = 0)
    public float getScrollFriction() {
        return mScrollFriction;
    }

    /**
     * Returns a {@link Duration} representing the tap timeout.
     *
     * @see ViewConfiguration#getTapTimeoutMillis()
     */
    @NonNull
    public Duration getTapTimeoutDuration() {
        return Duration.ofMillis(mTapTimeoutMillis);
    }

    /**
     * Returns a {@link Duration} representing the double tap timeout.
     *
     * @see ViewConfiguration#getDoubleTapTimeoutMillis()
     */
    @NonNull
    public Duration getDoubleTapTimeoutDuration() {
        return Duration.ofMillis(mDoubleTapTimeoutMillis);
    }

    /**
     * Returns a {@link Duration} representing the double tap minimum time.
     */
    @NonNull
    public Duration getDoubleTapMinTimeDuration() {
        return Duration.ofMillis(mDoubleTapMinTimeMillis);
    }

    @NonNull
    public static final Creator<ViewConfigurationParams> CREATOR =
            new Creator<>() {
                @Override
                public ViewConfigurationParams createFromParcel(Parcel in) {
                    return new ViewConfigurationParams(in);
                }

                @Override
                public ViewConfigurationParams[] newArray(int size) {
                    return new ViewConfigurationParams[size];
                }
            };

    /**
     * Builder for {@link ViewConfigurationParams}.
     */
    @FlaggedApi(Flags.FLAG_VIEWCONFIGURATION_APIS)
    public static final class Builder {

        private float mTouchSlopDp = INVALID_VALUE;
        private float mMinimumFlingVelocityDpPerSecond = INVALID_VALUE;
        private float mMaximumFlingVelocityDpPerSecond = INVALID_VALUE;
        private float mScrollFriction = INVALID_VALUE;
        private int mTapTimeoutMillis = INVALID_VALUE;
        private int mDoubleTapTimeoutMillis = INVALID_VALUE;
        private int mDoubleTapMinTimeMillis = INVALID_VALUE;

        /**
         * Sets the touch slop in density independent pixels (dp). When this is set,
         * {@link ViewConfiguration#getScaledTouchSlop()} would return this value multiplied by
         * the display density for any context associated with the virtual device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledTouchSlop()
         */
        @NonNull
        public Builder setTouchSlopDp(@FloatRange(from = 0) float touchSlopDp) {
            if (touchSlopDp < 0) {
                throw new IllegalArgumentException("Touch slop cannot be negative");
            }
            mTouchSlopDp = touchSlopDp;
            return this;
        }

        /**
         * Sets the minimum fling velocity in density independent pixels (dp) per second. When
         * this is set, {@link ViewConfiguration#getScaledMinimumFlingVelocity()} would return this
         * value multiplied by the display density for any context associated with the virtual
         * device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledMinimumFlingVelocity()
         */
        @NonNull
        public Builder setMinimumFlingVelocityDpPerSecond(
                @FloatRange(from = 0) float minimumFlingVelocityDpPerSecond) {
            if (minimumFlingVelocityDpPerSecond < 0) {
                throw new IllegalArgumentException("Minimum ling velocity cannot be negative");
            }
            mMinimumFlingVelocityDpPerSecond = minimumFlingVelocityDpPerSecond;
            return this;
        }

        /**
         * Sets the maximum fling velocity in density independent pixels (dp) per second. When
         * this is set, {@link ViewConfiguration#getScaledMaximumFlingVelocity()} would return this
         * value multiplied by the display density for any context associated with the virtual
         * device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledMaximumFlingVelocity()
         */
        @NonNull
        public Builder setMaximumFlingVelocityDpPerSecond(
                @FloatRange(from = 0) float maximumFlingVelocityDpPerSecond) {
            if (maximumFlingVelocityDpPerSecond < 0) {
                throw new IllegalArgumentException("Maximum fling velocity cannot be negative");
            }
            mMaximumFlingVelocityDpPerSecond = maximumFlingVelocityDpPerSecond;
            return this;
        }

        /**
         * Sets the scroll friction.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScrollFrictionAmount()
         */
        @NonNull
        public Builder setScrollFriction(@FloatRange(from = 0) float scrollFriction) {
            if (scrollFriction < 0) {
                throw new IllegalArgumentException("Scroll friction cannot be negative");
            }
            mScrollFriction = scrollFriction;
            return this;
        }

        /**
         * Sets the tap timeout as {@link Duration}.
         *
         * @throws IllegalArgumentException if the corresponding milliseconds value is negative, or
         * greater than {@link Integer#MAX_VALUE}.
         * @see ViewConfiguration#getTapTimeoutMillis()
         */
        @NonNull
        public Builder setTapTimeoutDuration(@NonNull Duration duration) {
            Objects.requireNonNull(duration);
            if (duration.isNegative()) {
                throw new IllegalArgumentException("Tap timeout cannot be negative");
            }
            long millis = duration.toMillis();
            if (millis > Integer.MAX_VALUE) {
                throw new IllegalArgumentException(
                        "Tap timeout cannot be larger than " + Integer.MAX_VALUE);
            }
            mTapTimeoutMillis = (int) millis;
            return this;
        }

        /**
         * Sets the double tap timeout as {@link Duration}.
         *
         * @throws IllegalArgumentException if the corresponding milliseconds value is negative, or
         * greater than {@link Integer#MAX_VALUE}.
         * @see ViewConfiguration#getDoubleTapTimeoutMillis()
         */
        @NonNull
        public Builder setDoubleTapTimeoutDuration(@NonNull Duration duration) {
            Objects.requireNonNull(duration);
            if (duration.isNegative()) {
                throw new IllegalArgumentException("Double tap timeout cannot be negative");
            }
            long millis = duration.toMillis();
            if (millis > Integer.MAX_VALUE) {
                throw new IllegalArgumentException(
                        "Double tap timeout cannot be larger than " + Integer.MAX_VALUE);
            }
            mDoubleTapTimeoutMillis = (int) millis;
            return this;
        }

        /**
         * Sets the double tap minimum time as {@link Duration}.
         *
         * @throws IllegalArgumentException if the corresponding milliseconds value is negative, or
         * greater than {@link Integer#MAX_VALUE}.
         */
        @NonNull
        public Builder setDoubleTapMinTimeDuration(@NonNull Duration duration) {
            Objects.requireNonNull(duration);
            if (duration.isNegative()) {
                throw new IllegalArgumentException("Double tap min time cannot be negative");
            }
            long millis = duration.toMillis();
            if (millis > Integer.MAX_VALUE) {
                throw new IllegalArgumentException(
                        "Double tap min time cannot be larger than " + Integer.MAX_VALUE);
            }
            mDoubleTapMinTimeMillis = (int) millis;
            return this;
        }

        /**
         * Builds the {@link ViewConfigurationParams} instance.
         *
         * @throws IllegalArgumentException if there's no parameter set, or if the minimum fling
         *                                  velocity is greater than the maximum fling velocity.
         */
        @NonNull
        public ViewConfigurationParams build() {
            if (mTouchSlopDp == INVALID_VALUE
                    && mMinimumFlingVelocityDpPerSecond == INVALID_VALUE
                    && mMaximumFlingVelocityDpPerSecond == INVALID_VALUE
                    && mScrollFriction == INVALID_VALUE
                    && mTapTimeoutMillis == INVALID_VALUE
                    && mDoubleTapTimeoutMillis == INVALID_VALUE
                    && mDoubleTapMinTimeMillis == INVALID_VALUE) {
                throw new IllegalArgumentException("None of the parameters are set");
            }
            if (mMinimumFlingVelocityDpPerSecond != INVALID_VALUE
                    && mMaximumFlingVelocityDpPerSecond != INVALID_VALUE
                    && mMinimumFlingVelocityDpPerSecond > mMaximumFlingVelocityDpPerSecond) {
                throw new IllegalArgumentException(
                        "Minimum fling velocity cannot be greater than the maximum fling velocity");
            }
            return new ViewConfigurationParams(mTouchSlopDp, mMinimumFlingVelocityDpPerSecond,
                    mMaximumFlingVelocityDpPerSecond, mScrollFriction, mTapTimeoutMillis,
                    mDoubleTapTimeoutMillis, mDoubleTapMinTimeMillis);
        }
    }
}
+39 −5
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ import java.util.Set;
import java.util.concurrent.Executor;

/**
 * Params that can be configured when creating virtual devices.
 * Parameters that can be configured when creating virtual devices.
 *
 * @hide
 */
@@ -331,6 +331,7 @@ public final class VirtualDeviceParams implements Parcelable {
    private final int mAudioRecordingSessionId;
    private final long mDimDuration;
    private final long mScreenOffTimeout;
    @Nullable private final ViewConfigurationParams mViewConfigurationParams;

    private VirtualDeviceParams(
            @LockState int lockState,
@@ -348,7 +349,8 @@ public final class VirtualDeviceParams implements Parcelable {
            int audioPlaybackSessionId,
            int audioRecordingSessionId,
            long dimDuration,
            long screenOffTimeout) {
            long screenOffTimeout,
            @Nullable ViewConfigurationParams viewConfigurationParams) {
        mLockState = lockState;
        mUsersWithMatchingAccounts =
                new ArraySet<>(Objects.requireNonNull(usersWithMatchingAccounts));
@@ -368,6 +370,7 @@ public final class VirtualDeviceParams implements Parcelable {
        mAudioRecordingSessionId = audioRecordingSessionId;
        mDimDuration = dimDuration;
        mScreenOffTimeout = screenOffTimeout;
        mViewConfigurationParams = viewConfigurationParams;
    }

    @SuppressWarnings("unchecked")
@@ -390,6 +393,8 @@ public final class VirtualDeviceParams implements Parcelable {
        mInputMethodComponent = parcel.readTypedObject(ComponentName.CREATOR);
        mDimDuration = parcel.readLong();
        mScreenOffTimeout = parcel.readLong();
        mViewConfigurationParams = Flags.viewconfigurationApis()
                ? parcel.readTypedObject(ViewConfigurationParams.CREATOR) : null;
    }

    /**
@@ -619,6 +624,15 @@ public final class VirtualDeviceParams implements Parcelable {
        return mAudioRecordingSessionId;
    }

    /**
     * Returns the (optional) {@link ViewConfigurationParams} for the virtual device.
     */
    @Nullable
    @FlaggedApi(Flags.FLAG_VIEWCONFIGURATION_APIS)
    public ViewConfigurationParams getViewConfigurationParams() {
        return mViewConfigurationParams;
    }

    @Override
    public int describeContents() {
        return 0;
@@ -643,6 +657,7 @@ public final class VirtualDeviceParams implements Parcelable {
        dest.writeTypedObject(mInputMethodComponent, flags);
        dest.writeLong(mDimDuration);
        dest.writeLong(mScreenOffTimeout);
        dest.writeTypedObject(mViewConfigurationParams, flags);
    }

    @Override
@@ -679,7 +694,8 @@ public final class VirtualDeviceParams implements Parcelable {
                && mAudioPlaybackSessionId == that.mAudioPlaybackSessionId
                && mAudioRecordingSessionId == that.mAudioRecordingSessionId
                && mDimDuration == that.mDimDuration
                && mScreenOffTimeout == that.mScreenOffTimeout;
                && mScreenOffTimeout == that.mScreenOffTimeout
                && Objects.equals(mViewConfigurationParams, that.mViewConfigurationParams);
    }

    @Override
@@ -688,7 +704,8 @@ public final class VirtualDeviceParams implements Parcelable {
                mLockState, mUsersWithMatchingAccounts, mCrossTaskNavigationExemptions,
                mDefaultNavigationPolicy, mActivityPolicyExemptions, mDefaultActivityPolicy, mName,
                mDevicePolicies, mHomeComponent, mInputMethodComponent, mAudioPlaybackSessionId,
                mAudioRecordingSessionId, mDimDuration, mScreenOffTimeout);
                mAudioRecordingSessionId, mDimDuration, mScreenOffTimeout,
                mViewConfigurationParams);
        for (int i = 0; i < mDevicePolicies.size(); i++) {
            hashCode = 31 * hashCode + mDevicePolicies.keyAt(i);
            hashCode = 31 * hashCode + mDevicePolicies.valueAt(i);
@@ -714,6 +731,7 @@ public final class VirtualDeviceParams implements Parcelable {
                + " mAudioRecordingSessionId=" + mAudioRecordingSessionId
                + " mDimDuration=" + mDimDuration
                + " mScreenOffTimeout=" + mScreenOffTimeout
                + " mViewConfigurationParams=" + mViewConfigurationParams
                + ")";
    }

@@ -737,6 +755,7 @@ public final class VirtualDeviceParams implements Parcelable {
        pw.println(prefix + "mAudioRecordingSessionId=" + mAudioRecordingSessionId);
        pw.println(prefix + "mDimDuration=" + mDimDuration);
        pw.println(prefix + "mScreenOffTimeout=" + mScreenOffTimeout);
        pw.println(prefix + "mViewConfigurationParams=" + mViewConfigurationParams);
    }

    @NonNull
@@ -782,6 +801,7 @@ public final class VirtualDeviceParams implements Parcelable {
        @Nullable private ComponentName mInputMethodComponent;
        private Duration mDimDuration = Duration.ZERO;
        private Duration mScreenOffTimeout = Duration.ZERO;
        @Nullable private ViewConfigurationParams mViewConfigurationParams;

        private static class VirtualSensorCallbackDelegate extends IVirtualSensorCallback.Stub {
            @NonNull
@@ -1235,6 +1255,19 @@ public final class VirtualDeviceParams implements Parcelable {
            return this;
        }

        /**
         * Sets the optional {@link ViewConfigurationParams} for the virtual device.
         *
         * @see ViewConfigurationParams
         */
        @NonNull
        @FlaggedApi(Flags.FLAG_VIEWCONFIGURATION_APIS)
        public Builder setViewConfigurationParams(
                @Nullable ViewConfigurationParams viewConfigurationParams) {
            mViewConfigurationParams = viewConfigurationParams;
            return this;
        }

        /**
         * Builds the {@link VirtualDeviceParams} instance.
         *
@@ -1352,7 +1385,8 @@ public final class VirtualDeviceParams implements Parcelable {
                    mAudioPlaybackSessionId,
                    mAudioRecordingSessionId,
                    mDimDuration.toMillis(),
                    mScreenOffTimeout.toMillis());
                    mScreenOffTimeout.toMillis(),
                    mViewConfigurationParams);
        }
    }
}
+168 −0

File added.

Preview size limit exceeded, changes collapsed.

+15 −2

File changed.

Preview size limit exceeded, changes collapsed.

Loading