summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yi Jiang <eejiang@google.com> 2021-03-11 20:55:58 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-03-11 20:55:58 +0000
commitcc82a02df92d0b1270d0eb7436dfb90c029ee976 (patch)
tree91dc9e80ae4e890e1a7d2c0029b5c680703dd5ff
parent0cdeb3b9946c6c13e057a067b6f2d1661477f8c0 (diff)
parent0f73fd490748d5d0042bce9aa4277eae18939d9c (diff)
Merge "Adds one more feild into RotationResolutionRequest." into sc-dev
-rw-r--r--core/api/system-current.txt2
-rw-r--r--core/java/android/service/rotationresolver/RotationResolutionRequest.java216
-rw-r--r--services/core/java/com/android/server/rotationresolver/RemoteRotationResolverService.java33
-rw-r--r--services/core/java/com/android/server/rotationresolver/RotationResolverManagerPerUserService.java11
-rw-r--r--services/core/java/com/android/server/rotationresolver/RotationResolverManagerService.java6
-rw-r--r--services/core/java/com/android/server/rotationresolver/RotationResolverShellCommand.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/rotationresolver/RotationResolverManagerPerUserServiceTest.java15
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());
}
}
}