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

Commit cc82a02d authored by Yi Jiang's avatar Yi Jiang Committed by Android (Google) Code Review
Browse files

Merge "Adds one more feild into RotationResolutionRequest." into sc-dev

parents 0cdeb3b9 0f73fd49
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -9948,11 +9948,13 @@ package android.service.resumeonreboot {
package android.service.rotationresolver {
  public final class RotationResolutionRequest implements android.os.Parcelable {
    ctor public RotationResolutionRequest(@NonNull String, int, int, boolean, long);
    method public int describeContents();
    method public int getCurrentRotation();
    method @NonNull public String getPackageName();
    method public int getProposedRotation();
    method public long getTimeoutMillis();
    method public boolean shouldUseCamera();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.service.rotationresolver.RotationResolutionRequest> CREATOR;
  }
+180 −36
Original line number Diff line number Diff line
@@ -16,12 +16,15 @@

package android.service.rotationresolver;

import android.annotation.DurationMillisLong;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.Surface;

import com.android.internal.util.DataClass;

/**
 * This class represents a request to an {@link RotationResolverService}. The request contains
 * information from the system that can help RotationResolverService to determine the appropriate
@@ -33,68 +36,209 @@ import android.view.Surface;
 * @hide
 */
@SystemApi
@DataClass (
        genParcelable = true,
        genToString = true
)
public final class RotationResolutionRequest implements Parcelable {
    private final @NonNull String mPackageName;
    private final int mProposedRotation;
    private final int mCurrentRotation;
    private final long mTimeoutMillis;
    /** The Name of the package of the current fore-ground activity. */
    @NonNull private final String mPackageName;

    /** The current rotation of the screen. */
    @Surface.Rotation private final int mCurrentRotation;

    /** The proposed screen rotation in the system. */
    @Surface.Rotation private final int mProposedRotation;

    /** Whether should use camera signal to resolver rotation. */
    private final boolean mShouldUseCamera;

    /** The timeout of the request. */
    @DurationMillisLong private final long mTimeoutMillis;




    // Code below generated by codegen v1.0.22.
    //
    // DO NOT MODIFY!
    // CHECKSTYLE:OFF Generated code
    //
    // To regenerate run:
    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/service/rotationresolver/RotationResolutionRequest.java
    //
    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
    //   Settings > Editor > Code Style > Formatter Control
    //@formatter:off


    /**
     * @param proposedRotation The system proposed screen rotation.
     * @param currentRotation  The current screen rotation of the phone.
     * @param packageName The current package name of the activity that is running in
     *                    foreground.
     * @param timeoutMillis    The timeout in millisecond for the rotation request.
     * @hide
     * Creates a new RotationResolutionRequest.
     *
     * @param packageName
     *   The Name of the package of the current fore-ground activity.
     * @param currentRotation
     *   The current rotation of the screen.
     * @param proposedRotation
     *   The proposed screen rotation in the system.
     * @param shouldUseCamera
     *   Whether should use camera signal to resolver rotation.
     * @param timeoutMillis
     *   The timeout of the request.
     */
    public RotationResolutionRequest(int proposedRotation, int currentRotation,
            @NonNull String packageName, long timeoutMillis) {
        mProposedRotation = proposedRotation;
        mCurrentRotation = currentRotation;
        mPackageName = packageName;
        mTimeoutMillis = timeoutMillis;
    @DataClass.Generated.Member
    public RotationResolutionRequest(
            @NonNull String packageName,
            @Surface.Rotation int currentRotation,
            @Surface.Rotation int proposedRotation,
            boolean shouldUseCamera,
            @DurationMillisLong long timeoutMillis) {
        this.mPackageName = packageName;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mPackageName);
        this.mCurrentRotation = currentRotation;
        com.android.internal.util.AnnotationValidations.validate(
                Surface.Rotation.class, null, mCurrentRotation);
        this.mProposedRotation = proposedRotation;
        com.android.internal.util.AnnotationValidations.validate(
                Surface.Rotation.class, null, mProposedRotation);
        this.mShouldUseCamera = shouldUseCamera;
        this.mTimeoutMillis = timeoutMillis;
        com.android.internal.util.AnnotationValidations.validate(
                DurationMillisLong.class, null, mTimeoutMillis);

        // onConstructed(); // You can define this method to get a callback
    }

    @Surface.Rotation public int getProposedRotation() {
        return mProposedRotation;
    /**
     * The Name of the package of the current fore-ground activity.
     */
    @DataClass.Generated.Member
    public @NonNull String getPackageName() {
        return mPackageName;
    }

    public int getCurrentRotation() {
    /**
     * The current rotation of the screen.
     */
    @DataClass.Generated.Member
    public @Surface.Rotation int getCurrentRotation() {
        return mCurrentRotation;
    }

    public @NonNull String getPackageName() {
        return mPackageName;
    /**
     * The proposed screen rotation in the system.
     */
    @DataClass.Generated.Member
    public @Surface.Rotation int getProposedRotation() {
        return mProposedRotation;
    }

    public long getTimeoutMillis() {
    /**
     * Whether should use camera signal to resolver rotation.
     */
    @DataClass.Generated.Member
    public boolean shouldUseCamera() {
        return mShouldUseCamera;
    }

    /**
     * The timeout of the request.
     */
    @DataClass.Generated.Member
    public @DurationMillisLong long getTimeoutMillis() {
        return mTimeoutMillis;
    }

    @Override
    public int describeContents() {
        return 0;
    @DataClass.Generated.Member
    public String toString() {
        // You can override field toString logic by defining methods like:
        // String fieldNameToString() { ... }

        return "RotationResolutionRequest { " +
                "packageName = " + mPackageName + ", " +
                "currentRotation = " + mCurrentRotation + ", " +
                "proposedRotation = " + mProposedRotation + ", " +
                "shouldUseCamera = " + mShouldUseCamera + ", " +
                "timeoutMillis = " + mTimeoutMillis +
        " }";
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int flags) {
        parcel.writeInt(mProposedRotation);
        parcel.writeInt(mCurrentRotation);
        parcel.writeString(mPackageName);
        parcel.writeLong(mTimeoutMillis);
    @DataClass.Generated.Member
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        byte flg = 0;
        if (mShouldUseCamera) flg |= 0x8;
        dest.writeByte(flg);
        dest.writeString(mPackageName);
        dest.writeInt(mCurrentRotation);
        dest.writeInt(mProposedRotation);
        dest.writeLong(mTimeoutMillis);
    }

    public static final @NonNull Creator<RotationResolutionRequest> CREATOR =
            new Creator<RotationResolutionRequest>() {
    @Override
        public RotationResolutionRequest createFromParcel(Parcel source) {
            return new RotationResolutionRequest(source.readInt(), source.readInt(),
                    source.readString(), source.readLong());
    @DataClass.Generated.Member
    public int describeContents() { return 0; }

    /** @hide */
    @SuppressWarnings({"unchecked", "RedundantCast"})
    @DataClass.Generated.Member
    /* package-private */ RotationResolutionRequest(@NonNull Parcel in) {
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        byte flg = in.readByte();
        boolean shouldUseCamera = (flg & 0x8) != 0;
        String packageName = in.readString();
        int currentRotation = in.readInt();
        int proposedRotation = in.readInt();
        long timeoutMillis = in.readLong();

        this.mPackageName = packageName;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mPackageName);
        this.mCurrentRotation = currentRotation;
        com.android.internal.util.AnnotationValidations.validate(
                Surface.Rotation.class, null, mCurrentRotation);
        this.mProposedRotation = proposedRotation;
        com.android.internal.util.AnnotationValidations.validate(
                Surface.Rotation.class, null, mProposedRotation);
        this.mShouldUseCamera = shouldUseCamera;
        this.mTimeoutMillis = timeoutMillis;
        com.android.internal.util.AnnotationValidations.validate(
                DurationMillisLong.class, null, mTimeoutMillis);

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public static final @NonNull Parcelable.Creator<RotationResolutionRequest> CREATOR
            = new Parcelable.Creator<RotationResolutionRequest>() {
        @Override
        public RotationResolutionRequest[] newArray(int size) {
            return new RotationResolutionRequest[size];
        }

        @Override
        public RotationResolutionRequest createFromParcel(@NonNull Parcel in) {
            return new RotationResolutionRequest(in);
        }
    };

    @DataClass.Generated(
            time = 1615402421314L,
            codegenVersion = "1.0.22",
            sourceFile = "frameworks/base/core/java/android/service/rotationresolver/RotationResolutionRequest.java",
            inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.view.Surface.Rotation int mCurrentRotation\nprivate final @android.view.Surface.Rotation int mProposedRotation\nprivate final  boolean mShouldUseCamera\nprivate final @android.annotation.DurationMillisLong long mTimeoutMillis\nclass RotationResolutionRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genToString=true)")
    @Deprecated
    private void __metadata() {}


    //@formatter:on
    // End of generated code

}
+11 −22
Original line number Diff line number Diff line
@@ -77,9 +77,7 @@ class RemoteRotationResolverService extends ServiceConnector.Impl<IRotationResol

    @GuardedBy("mLock")
    public void resolveRotationLocked(RotationRequest request) {
        final RotationResolutionRequest remoteRequest = new RotationResolutionRequest(
                request.mProposedRotation, request.mCurrentRotation, request.mPackageName,
                request.mTimeoutMillis);
        final RotationResolutionRequest remoteRequest = request.mRemoteRequest;
        post(service -> service.resolveRotation(request.mIRotationResolverCallback, remoteRequest));

        // schedule a timeout.
@@ -91,7 +89,7 @@ class RemoteRotationResolverService extends ServiceConnector.Impl<IRotationResol
                    request.cancelInternal();
                }
            }
        }, request.mTimeoutMillis);
        }, request.mRemoteRequest.getTimeoutMillis());
    }

    @VisibleForTesting
@@ -109,28 +107,18 @@ class RemoteRotationResolverService extends ServiceConnector.Impl<IRotationResol
        @GuardedBy("mLock")
        boolean mIsFulfilled;

        private final long mTimeoutMillis;

        @VisibleForTesting
        final int mProposedRotation;

        private final int mCurrentRotation;
        private final String mPackageName;
        final RotationResolutionRequest mRemoteRequest;

        boolean mIsDispatched;
        private final Object mLock = new Object();
        private final long mRequestStartTimeMillis;

        RotationRequest(
                @NonNull RotationResolverInternal.RotationResolverCallbackInternal
                        callbackInternal, int proposedRotation, int currentRotation,
                String packageName, long timeoutMillis,
                @NonNull CancellationSignal cancellationSignal) {
            mTimeoutMillis = timeoutMillis;
                @NonNull RotationResolverInternal.RotationResolverCallbackInternal callbackInternal,
                RotationResolutionRequest request, @NonNull CancellationSignal cancellationSignal) {
            mCallbackInternal = callbackInternal;
            mProposedRotation = proposedRotation;
            mCurrentRotation = currentRotation;
            mPackageName = packageName;
            mRemoteRequest = request;
            mIRotationResolverCallback = new RotationResolverCallback(this);
            mCancellationSignalInternal = cancellationSignal;
            mRequestStartTimeMillis = SystemClock.elapsedRealtime();
@@ -185,8 +173,8 @@ class RemoteRotationResolverService extends ServiceConnector.Impl<IRotationResol
                    request.mCallbackInternal.onSuccess(rotation);
                    final long timeToCalculate =
                            SystemClock.elapsedRealtime() - request.mRequestStartTimeMillis;
                    logRotationStats(request.mProposedRotation, request.mCurrentRotation, rotation,
                            timeToCalculate);
                    logRotationStats(request.mRemoteRequest.getProposedRotation(),
                            request.mRemoteRequest.getCurrentRotation(), rotation, timeToCalculate);
                    Slog.d(TAG, "onSuccess:" + rotation);
                    Slog.d(TAG, "timeToCalculate:" + timeToCalculate);
                }
@@ -204,8 +192,9 @@ class RemoteRotationResolverService extends ServiceConnector.Impl<IRotationResol
                    request.mCallbackInternal.onFailure(error);
                    final long timeToCalculate =
                            SystemClock.elapsedRealtime() - request.mRequestStartTimeMillis;
                    logRotationStats(request.mProposedRotation, request.mCurrentRotation,
                            RESOLUTION_FAILURE, timeToCalculate);
                    logRotationStats(request.mRemoteRequest.getProposedRotation(),
                            request.mRemoteRequest.getCurrentRotation(), RESOLUTION_FAILURE,
                            timeToCalculate);
                    Slog.d(TAG, "onFailure:" + error);
                    Slog.d(TAG, "timeToCalculate:" + timeToCalculate);
                }
+5 −6
Original line number Diff line number Diff line
@@ -34,11 +34,11 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.os.CancellationSignal;
import android.rotationresolver.RotationResolverInternal;
import android.service.rotationresolver.RotationResolutionRequest;
import android.service.rotationresolver.RotationResolverService;
import android.text.TextUtils;
import android.util.IndentingPrintWriter;
import android.util.Slog;
import android.view.Surface;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -95,14 +95,14 @@ final class RotationResolverManagerPerUserService extends
    @VisibleForTesting
    void resolveRotationLocked(
            @NonNull RotationResolverInternal.RotationResolverCallbackInternal callbackInternal,
            @Surface.Rotation int proposedRotation, @Surface.Rotation int currentRotation,
            String packageName, long timeoutMillis,
            @NonNull RotationResolutionRequest request,
            @NonNull CancellationSignal cancellationSignalInternal) {

        if (!isServiceAvailableLocked()) {
            Slog.w(TAG, "Service is not available at this moment.");
            callbackInternal.onFailure(ROTATION_RESULT_FAILURE_CANCELLED);
            logRotationStats(proposedRotation, currentRotation, RESOLUTION_UNAVAILABLE);
            logRotationStats(request.getProposedRotation(), request.getCurrentRotation(),
                    RESOLUTION_UNAVAILABLE);
            return;
        }

@@ -114,8 +114,7 @@ final class RotationResolverManagerPerUserService extends
        }

        mCurrentRequest = new RemoteRotationResolverService.RotationRequest(callbackInternal,
                proposedRotation, currentRotation, packageName, timeoutMillis,
                cancellationSignalInternal);
                request, cancellationSignalInternal);

        cancellationSignalInternal.setOnCancelListener(() -> {
            synchronized (mLock) {
+4 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.os.ShellCallback;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.rotationresolver.RotationResolverInternal;
import android.service.rotationresolver.RotationResolutionRequest;
import android.text.TextUtils;
import android.util.IndentingPrintWriter;
import android.util.Slog;
@@ -158,8 +159,9 @@ public class RotationResolverManagerService extends
                if (mIsServiceEnabled) {
                    final RotationResolverManagerPerUserService service = getServiceForUserLocked(
                            UserHandle.getCallingUserId());
                    service.resolveRotationLocked(callbackInternal, proposedRotation,
                            currentRotation, /* packageName */ "", timeout,
                    final RotationResolutionRequest request = new RotationResolutionRequest("",
                            currentRotation, proposedRotation, true, timeout);
                    service.resolveRotationLocked(callbackInternal, request,
                            cancellationSignalInternal);
                } else {
                    Slog.w(TAG, "Rotation Resolver service is disabled.");
Loading