diff options
author | 2021-03-11 20:55:58 +0000 | |
---|---|---|
committer | 2021-03-11 20:55:58 +0000 | |
commit | cc82a02df92d0b1270d0eb7436dfb90c029ee976 (patch) | |
tree | 91dc9e80ae4e890e1a7d2c0029b5c680703dd5ff | |
parent | 0cdeb3b9946c6c13e057a067b6f2d1661477f8c0 (diff) | |
parent | 0f73fd490748d5d0042bce9aa4277eae18939d9c (diff) |
Merge "Adds one more feild into RotationResolutionRequest." into sc-dev
7 files changed, 215 insertions, 75 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 40d303723099..6c120d1ac9ca 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -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; } diff --git a/core/java/android/service/rotationresolver/RotationResolutionRequest.java b/core/java/android/service/rotationresolver/RotationResolutionRequest.java index 8e76e2fc9202..8dec0922b097 100644 --- a/core/java/android/service/rotationresolver/RotationResolutionRequest.java +++ b/core/java/android/service/rotationresolver/RotationResolutionRequest.java @@ -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()); - } + @Override + @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 + } diff --git a/services/core/java/com/android/server/rotationresolver/RemoteRotationResolverService.java b/services/core/java/com/android/server/rotationresolver/RemoteRotationResolverService.java index cfb4c27820fa..189f47f7f1da 100644 --- a/services/core/java/com/android/server/rotationresolver/RemoteRotationResolverService.java +++ b/services/core/java/com/android/server/rotationresolver/RemoteRotationResolverService.java @@ -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); } diff --git a/services/core/java/com/android/server/rotationresolver/RotationResolverManagerPerUserService.java b/services/core/java/com/android/server/rotationresolver/RotationResolverManagerPerUserService.java index 13f8d61f74f5..1dbe3e485938 100644 --- a/services/core/java/com/android/server/rotationresolver/RotationResolverManagerPerUserService.java +++ b/services/core/java/com/android/server/rotationresolver/RotationResolverManagerPerUserService.java @@ -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) { diff --git a/services/core/java/com/android/server/rotationresolver/RotationResolverManagerService.java b/services/core/java/com/android/server/rotationresolver/RotationResolverManagerService.java index e57d4ce9ec31..a7f3cdb8bcd2 100644 --- a/services/core/java/com/android/server/rotationresolver/RotationResolverManagerService.java +++ b/services/core/java/com/android/server/rotationresolver/RotationResolverManagerService.java @@ -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."); diff --git a/services/core/java/com/android/server/rotationresolver/RotationResolverShellCommand.java b/services/core/java/com/android/server/rotationresolver/RotationResolverShellCommand.java index e5088c023533..a0e04ee7a20d 100644 --- a/services/core/java/com/android/server/rotationresolver/RotationResolverShellCommand.java +++ b/services/core/java/com/android/server/rotationresolver/RotationResolverShellCommand.java @@ -22,6 +22,7 @@ import android.content.ComponentName; import android.os.CancellationSignal; import android.os.ShellCommand; import android.rotationresolver.RotationResolverInternal.RotationResolverCallbackInternal; +import android.service.rotationresolver.RotationResolutionRequest; import android.text.TextUtils; import android.view.Surface; @@ -107,8 +108,10 @@ final class RotationResolverShellCommand extends ShellCommand { } private int runResolveRotation() { - mService.resolveRotationLocked(sTestableRotationCallbackInternal, Surface.ROTATION_0, - Surface.ROTATION_0, "", 2000L, new CancellationSignal()); + final RotationResolutionRequest request = new RotationResolutionRequest("", + Surface.ROTATION_0, Surface.ROTATION_0, true, 2000L); + mService.resolveRotationLocked(sTestableRotationCallbackInternal, request, + new CancellationSignal()); return 0; } diff --git a/services/tests/servicestests/src/com/android/server/rotationresolver/RotationResolverManagerPerUserServiceTest.java b/services/tests/servicestests/src/com/android/server/rotationresolver/RotationResolverManagerPerUserServiceTest.java index 22c38c1961b8..fa2123c0d09a 100644 --- a/services/tests/servicestests/src/com/android/server/rotationresolver/RotationResolverManagerPerUserServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/rotationresolver/RotationResolverManagerPerUserServiceTest.java @@ -31,6 +31,7 @@ import android.content.pm.ServiceInfo; import android.os.CancellationSignal; import android.os.RemoteException; import android.rotationresolver.RotationResolverInternal; +import android.service.rotationresolver.RotationResolutionRequest; import android.view.Surface; import androidx.test.core.app.ApplicationProvider; @@ -58,6 +59,7 @@ public class RotationResolverManagerPerUserServiceTest { private Context mContext; private CancellationSignal mCancellationSignal; private RotationResolverManagerPerUserService mService; + private RotationResolutionRequest mRequest; @Before public void setUp() throws RemoteException { @@ -79,9 +81,10 @@ public class RotationResolverManagerPerUserServiceTest { mCancellationSignal = new CancellationSignal(); + mRequest = new RotationResolutionRequest("", Surface.ROTATION_0, Surface.ROTATION_0, + true, 1000L); this.mService.mCurrentRequest = new RemoteRotationResolverService.RotationRequest( - mMockCallbackInternal, Surface.ROTATION_0, Surface.ROTATION_0, "", 1000L, - mCancellationSignal); + mMockCallbackInternal, mRequest, mCancellationSignal); this.mService.getMaster().mIsServiceEnabled = true; @@ -99,8 +102,7 @@ public class RotationResolverManagerPerUserServiceTest { RotationResolverInternal.RotationResolverCallbackInternal callbackInternal = Mockito.mock(RotationResolverInternal.RotationResolverCallbackInternal.class); - mService.resolveRotationLocked(callbackInternal, Surface.ROTATION_0, Surface.ROTATION_0, - "", 1000L, mCancellationSignal); + mService.resolveRotationLocked(callbackInternal, mRequest, mCancellationSignal); verify(callbackInternal).onSuccess(anyInt()); } @@ -110,8 +112,7 @@ public class RotationResolverManagerPerUserServiceTest { Mockito.mock(RotationResolverInternal.RotationResolverCallbackInternal.class); final CancellationSignal cancellationSignal = new CancellationSignal(); - mService.resolveRotationLocked(callbackInternal, Surface.ROTATION_0, Surface.ROTATION_0, - "", 1000L, cancellationSignal); + mService.resolveRotationLocked(callbackInternal, mRequest, cancellationSignal); cancellationSignal.cancel(); } @@ -132,7 +133,7 @@ public class RotationResolverManagerPerUserServiceTest { @Override public void resolveRotationLocked(RotationRequest request) { - request.mCallbackInternal.onSuccess(request.mProposedRotation); + request.mCallbackInternal.onSuccess(request.mRemoteRequest.getProposedRotation()); } } } |