diff options
8 files changed, 581 insertions, 529 deletions
diff --git a/core/java/android/hardware/devicestate/DeviceStateInfo.java b/core/java/android/hardware/devicestate/DeviceStateInfo.java index 28561ec37ee6..fd6f0b81b6da 100644 --- a/core/java/android/hardware/devicestate/DeviceStateInfo.java +++ b/core/java/android/hardware/devicestate/DeviceStateInfo.java @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.Objects; import java.util.concurrent.Executor; - /** * Information about the state of the device. * @@ -63,11 +62,13 @@ public final class DeviceStateInfo implements Parcelable { * ignoring any override requests made through a call to {@link DeviceStateManager#requestState( * DeviceStateRequest, Executor, DeviceStateRequest.Callback)}. */ + @NonNull public final DeviceState baseState; /** * The state of the device. */ + @NonNull public final DeviceState currentState; /** @@ -78,8 +79,9 @@ public final class DeviceStateInfo implements Parcelable { */ // Using the specific types to avoid virtual method calls in binder transactions @SuppressWarnings("NonApiType") - public DeviceStateInfo(@NonNull ArrayList<DeviceState> supportedStates, DeviceState baseState, - DeviceState state) { + public DeviceStateInfo(@NonNull ArrayList<DeviceState> supportedStates, + @NonNull DeviceState baseState, + @NonNull DeviceState state) { this.supportedStates = supportedStates; this.baseState = baseState; this.currentState = state; @@ -97,7 +99,7 @@ public final class DeviceStateInfo implements Parcelable { public boolean equals(@Nullable Object other) { if (this == other) return true; if (other == null || (getClass() != other.getClass())) return false; - DeviceStateInfo that = (DeviceStateInfo) other; + final DeviceStateInfo that = (DeviceStateInfo) other; return baseState.equals(that.baseState) && currentState.equals(that.currentState) && Objects.equals(supportedStates, that.supportedStates); @@ -126,8 +128,16 @@ public final class DeviceStateInfo implements Parcelable { return diff; } + // Parcelable implementation + @Override - public void writeToParcel(Parcel dest, int flags) { + public int describeContents() { + return 0; + } + + /** Writes to Parcel. */ + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(supportedStates.size()); for (int i = 0; i < supportedStates.size(); i++) { dest.writeTypedObject(supportedStates.get(i).getConfiguration(), flags); @@ -137,28 +147,27 @@ public final class DeviceStateInfo implements Parcelable { dest.writeTypedObject(currentState.getConfiguration(), flags); } - @Override - public int describeContents() { - return 0; + /** Reads from Parcel. */ + private DeviceStateInfo(@NonNull Parcel in) { + final int numberOfSupportedStates = in.readInt(); + final ArrayList<DeviceState> supportedStates = new ArrayList<>(numberOfSupportedStates); + for (int i = 0; i < numberOfSupportedStates; i++) { + final DeviceState.Configuration configuration = + Objects.requireNonNull(in.readTypedObject(DeviceState.Configuration.CREATOR)); + supportedStates.add(i, new DeviceState(configuration)); + } + this.supportedStates = supportedStates; + + this.baseState = new DeviceState( + Objects.requireNonNull(in.readTypedObject(DeviceState.Configuration.CREATOR))); + this.currentState = new DeviceState( + Objects.requireNonNull(in.readTypedObject(DeviceState.Configuration.CREATOR))); } public static final @NonNull Creator<DeviceStateInfo> CREATOR = new Creator<>() { @Override - public DeviceStateInfo createFromParcel(Parcel source) { - final int numberOfSupportedStates = source.readInt(); - final ArrayList<DeviceState> supportedStates = new ArrayList<>(numberOfSupportedStates); - for (int i = 0; i < numberOfSupportedStates; i++) { - DeviceState.Configuration configuration = source.readTypedObject( - DeviceState.Configuration.CREATOR); - supportedStates.add(i, new DeviceState(configuration)); - } - - final DeviceState baseState = new DeviceState( - source.readTypedObject(DeviceState.Configuration.CREATOR)); - final DeviceState currentState = new DeviceState( - source.readTypedObject(DeviceState.Configuration.CREATOR)); - - return new DeviceStateInfo(supportedStates, baseState, currentState); + public DeviceStateInfo createFromParcel(@NonNull Parcel in) { + return new DeviceStateInfo(in); } @Override diff --git a/core/java/android/hardware/devicestate/DeviceStateManagerGlobal.java b/core/java/android/hardware/devicestate/DeviceStateManagerGlobal.java index 0c8401992913..184582716f42 100644 --- a/core/java/android/hardware/devicestate/DeviceStateManagerGlobal.java +++ b/core/java/android/hardware/devicestate/DeviceStateManagerGlobal.java @@ -46,6 +46,7 @@ import java.util.concurrent.Executor; */ @VisibleForTesting(visibility = Visibility.PACKAGE) public final class DeviceStateManagerGlobal { + @Nullable private static DeviceStateManagerGlobal sInstance; private static final String TAG = "DeviceStateManagerGlobal"; private static final boolean DEBUG = Build.IS_DEBUGGABLE; @@ -58,7 +59,7 @@ public final class DeviceStateManagerGlobal { public static DeviceStateManagerGlobal getInstance() { synchronized (DeviceStateManagerGlobal.class) { if (sInstance == null) { - IBinder b = ServiceManager.getService(Context.DEVICE_STATE_SERVICE); + final IBinder b = ServiceManager.getService(Context.DEVICE_STATE_SERVICE); if (b != null) { sInstance = new DeviceStateManagerGlobal(IDeviceStateManager .Stub.asInterface(b)); @@ -94,6 +95,7 @@ public final class DeviceStateManagerGlobal { * * @see DeviceStateManager#getSupportedDeviceStates() */ + @NonNull public List<DeviceState> getSupportedDeviceStates() { synchronized (mLock) { final DeviceStateInfo currentInfo; @@ -126,8 +128,8 @@ public final class DeviceStateManagerGlobal { conditional = true) public void requestState(@NonNull DeviceStateRequest request, @Nullable Executor executor, @Nullable DeviceStateRequest.Callback callback) { - DeviceStateRequestWrapper requestWrapper = new DeviceStateRequestWrapper(request, callback, - executor); + final DeviceStateRequestWrapper requestWrapper = + new DeviceStateRequestWrapper(request, callback, executor); synchronized (mLock) { if (findRequestTokenLocked(request) != null) { // This request has already been submitted. @@ -136,7 +138,7 @@ public final class DeviceStateManagerGlobal { // Add the request wrapper to the mRequests array before requesting the state as the // callback could be triggered immediately if the mDeviceStateManager IBinder is in the // same process as this instance. - IBinder token = new Binder(); + final IBinder token = new Binder(); mRequests.put(token, requestWrapper); try { @@ -176,8 +178,8 @@ public final class DeviceStateManagerGlobal { @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_STATE) public void requestBaseStateOverride(@NonNull DeviceStateRequest request, @Nullable Executor executor, @Nullable DeviceStateRequest.Callback callback) { - DeviceStateRequestWrapper requestWrapper = new DeviceStateRequestWrapper(request, callback, - executor); + final DeviceStateRequestWrapper requestWrapper = + new DeviceStateRequestWrapper(request, callback, executor); synchronized (mLock) { if (findRequestTokenLocked(request) != null) { // This request has already been submitted. @@ -186,7 +188,7 @@ public final class DeviceStateManagerGlobal { // Add the request wrapper to the mRequests array before requesting the state as the // callback could be triggered immediately if the mDeviceStateManager IBinder is in the // same process as this instance. - IBinder token = new Binder(); + final IBinder token = new Binder(); mRequests.put(token, requestWrapper); try { @@ -225,7 +227,7 @@ public final class DeviceStateManagerGlobal { public void registerDeviceStateCallback(@NonNull DeviceStateCallback callback, @NonNull Executor executor) { synchronized (mLock) { - int index = findCallbackLocked(callback); + final int index = findCallbackLocked(callback); if (index != -1) { // This callback is already registered. return; @@ -233,7 +235,8 @@ public final class DeviceStateManagerGlobal { // Add the callback wrapper to the mCallbacks array after registering the callback as // the callback could be triggered immediately if the mDeviceStateManager IBinder is in // the same process as this instance. - DeviceStateCallbackWrapper wrapper = new DeviceStateCallbackWrapper(callback, executor); + final DeviceStateCallbackWrapper wrapper = + new DeviceStateCallbackWrapper(callback, executor); mCallbacks.add(wrapper); if (mLastReceivedInfo != null) { @@ -253,7 +256,7 @@ public final class DeviceStateManagerGlobal { @VisibleForTesting(visibility = Visibility.PACKAGE) public void unregisterDeviceStateCallback(@NonNull DeviceStateCallback callback) { synchronized (mLock) { - int indexToRemove = findCallbackLocked(callback); + final int indexToRemove = findCallbackLocked(callback); if (indexToRemove != -1) { mCallbacks.remove(indexToRemove); } @@ -277,14 +280,16 @@ public final class DeviceStateManagerGlobal { } private void registerCallbackIfNeededLocked() { - if (mCallback == null) { - mCallback = new DeviceStateManagerCallback(); - try { - mDeviceStateManager.registerCallback(mCallback); - } catch (RemoteException ex) { - mCallback = null; - throw ex.rethrowFromSystemServer(); - } + if (mCallback != null) { + return; + } + + mCallback = new DeviceStateManagerCallback(); + try { + mDeviceStateManager.registerCallback(mCallback); + } catch (RemoteException ex) { + mCallback = null; + throw ex.rethrowFromSystemServer(); } } @@ -298,6 +303,7 @@ public final class DeviceStateManagerGlobal { } @Nullable + @GuardedBy("mLock") private IBinder findRequestTokenLocked(@NonNull DeviceStateRequest request) { for (int i = 0; i < mRequests.size(); i++) { if (mRequests.valueAt(i).mRequest.equals(request)) { @@ -309,8 +315,8 @@ public final class DeviceStateManagerGlobal { /** Handles a call from the server that the device state info has changed. */ private void handleDeviceStateInfoChanged(@NonNull DeviceStateInfo info) { - ArrayList<DeviceStateCallbackWrapper> callbacks; - DeviceStateInfo oldInfo; + final ArrayList<DeviceStateCallbackWrapper> callbacks; + final DeviceStateInfo oldInfo; synchronized (mLock) { oldInfo = mLastReceivedInfo; mLastReceivedInfo = info; @@ -335,8 +341,8 @@ public final class DeviceStateManagerGlobal { * Handles a call from the server that a request for the supplied {@code token} has become * active. */ - private void handleRequestActive(IBinder token) { - DeviceStateRequestWrapper request; + private void handleRequestActive(@NonNull IBinder token) { + final DeviceStateRequestWrapper request; synchronized (mLock) { request = mRequests.get(token); } @@ -349,8 +355,8 @@ public final class DeviceStateManagerGlobal { * Handles a call from the server that a request for the supplied {@code token} has become * canceled. */ - private void handleRequestCanceled(IBinder token) { - DeviceStateRequestWrapper request; + private void handleRequestCanceled(@NonNull IBinder token) { + final DeviceStateRequestWrapper request; synchronized (mLock) { request = mRequests.remove(token); } @@ -361,17 +367,17 @@ public final class DeviceStateManagerGlobal { private final class DeviceStateManagerCallback extends IDeviceStateManagerCallback.Stub { @Override - public void onDeviceStateInfoChanged(DeviceStateInfo info) { + public void onDeviceStateInfoChanged(@NonNull DeviceStateInfo info) { handleDeviceStateInfoChanged(info); } @Override - public void onRequestActive(IBinder token) { + public void onRequestActive(@NonNull IBinder token) { handleRequestActive(token); } @Override - public void onRequestCanceled(IBinder token) { + public void onRequestCanceled(@NonNull IBinder token) { handleRequestCanceled(token); } } @@ -388,7 +394,8 @@ public final class DeviceStateManagerGlobal { mExecutor = executor; } - void notifySupportedDeviceStatesChanged(List<DeviceState> newSupportedDeviceStates) { + void notifySupportedDeviceStatesChanged( + @NonNull List<DeviceState> newSupportedDeviceStates) { mExecutor.execute(() -> mDeviceStateCallback.onSupportedStatesChanged(newSupportedDeviceStates)); } @@ -398,7 +405,7 @@ public final class DeviceStateManagerGlobal { () -> mDeviceStateCallback.onDeviceStateChanged(newDeviceState)); } - private void execute(String traceName, Runnable r) { + private void execute(@NonNull String traceName, @NonNull Runnable r) { mExecutor.execute(() -> { if (DEBUG) { Trace.beginSection( @@ -416,6 +423,7 @@ public final class DeviceStateManagerGlobal { } private static final class DeviceStateRequestWrapper { + @NonNull private final DeviceStateRequest mRequest; @Nullable private final DeviceStateRequest.Callback mCallback; diff --git a/core/tests/devicestatetests/Android.bp b/core/tests/devicestatetests/Android.bp index a3303c6ca6d7..a2aa62dcf665 100644 --- a/core/tests/devicestatetests/Android.bp +++ b/core/tests/devicestatetests/Android.bp @@ -26,11 +26,12 @@ android_test { // Include all test java files srcs: ["src/**/*.java"], static_libs: [ + "androidx.test.ext.junit", "androidx.test.rules", "frameworks-base-testutils", "mockito-target-minus-junit4", "platform-test-annotations", - "testng", + "truth", ], libs: ["android.test.runner.stubs.system"], platform_apis: true, diff --git a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateInfoTest.java b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateInfoTest.java index cf7c5491f787..1b78433a5bda 100644 --- a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateInfoTest.java +++ b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateInfoTest.java @@ -22,21 +22,15 @@ import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWAR import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN; import static android.hardware.devicestate.DeviceState.PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; +import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; -import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; import java.util.ArrayList; import java.util.List; @@ -44,13 +38,13 @@ import java.util.Set; /** * Unit tests for {@link DeviceStateInfo}. - * <p/> - * Run with <code>atest DeviceStateInfoTest</code>. + * + * <p> Build/Install/Run: + * atest FrameworksCoreDeviceStateManagerTests:DeviceStateInfoTest */ -@RunWith(JUnit4.class) @SmallTest +@RunWith(AndroidJUnit4.class) public final class DeviceStateInfoTest { - private static final DeviceState DEVICE_STATE_0 = new DeviceState( new DeviceState.Configuration.Builder(0, "STATE_0") .setSystemProperties( @@ -74,88 +68,113 @@ public final class DeviceStateInfoTest { @Test public void create() { - final ArrayList<DeviceState> supportedStates = new ArrayList<>( - List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); + final ArrayList<DeviceState> supportedStates = + new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); final DeviceState baseState = DEVICE_STATE_0; final DeviceState currentState = DEVICE_STATE_2; - final DeviceStateInfo info = new DeviceStateInfo(supportedStates, baseState, currentState); - assertNotNull(info.supportedStates); - assertEquals(supportedStates, info.supportedStates); - assertEquals(baseState, info.baseState); - assertEquals(currentState, info.currentState); + final DeviceStateInfo info = + new DeviceStateInfo(supportedStates, baseState, currentState); + + assertThat(info.supportedStates).containsExactlyElementsIn(supportedStates).inOrder(); + assertThat(info.baseState).isEqualTo(baseState); + assertThat(info.currentState).isEqualTo(currentState); } @Test public void equals() { - final ArrayList<DeviceState> supportedStates = new ArrayList<>( - List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); + final ArrayList<DeviceState> supportedStates = + new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); final DeviceState baseState = DEVICE_STATE_0; final DeviceState currentState = DEVICE_STATE_2; final DeviceStateInfo info = new DeviceStateInfo(supportedStates, baseState, currentState); - Assert.assertEquals(info, info); + final DeviceStateInfo sameInstance = info; + assertThat(info).isEqualTo(sameInstance); - final DeviceStateInfo sameInfo = new DeviceStateInfo(supportedStates, baseState, - currentState); - Assert.assertEquals(info, sameInfo); + final DeviceStateInfo sameInfo = + new DeviceStateInfo(supportedStates, baseState, currentState); + assertThat(info).isEqualTo(sameInfo); + + final DeviceStateInfo copiedInfo = new DeviceStateInfo(info); + assertThat(info).isEqualTo(copiedInfo); final DeviceStateInfo differentInfo = new DeviceStateInfo( new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_2)), baseState, currentState); - assertNotEquals(info, differentInfo); + assertThat(differentInfo).isNotEqualTo(info); + } + + @Test + public void hashCode_sameObject() { + final ArrayList<DeviceState> supportedStates = + new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); + final DeviceState baseState = DEVICE_STATE_0; + final DeviceState currentState = DEVICE_STATE_2; + final DeviceStateInfo info = + new DeviceStateInfo(supportedStates, baseState, currentState); + final DeviceStateInfo copiedInfo = new DeviceStateInfo(info); + + assertThat(info.hashCode()).isEqualTo(copiedInfo.hashCode()); } @Test public void diff_sameObject() { - final ArrayList<DeviceState> supportedStates = new ArrayList<>( - List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); + final ArrayList<DeviceState> supportedStates = + new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); final DeviceState baseState = DEVICE_STATE_0; final DeviceState currentState = DEVICE_STATE_2; final DeviceStateInfo info = new DeviceStateInfo(supportedStates, baseState, currentState); - assertEquals(0, info.diff(info)); + + assertThat(info.diff(info)).isEqualTo(0); } @Test public void diff_differentSupportedStates() { - final DeviceStateInfo info = new DeviceStateInfo(new ArrayList<>(List.of(DEVICE_STATE_1)), - DEVICE_STATE_0, DEVICE_STATE_0); + final DeviceStateInfo info = new DeviceStateInfo( + new ArrayList<>(List.of(DEVICE_STATE_1)), DEVICE_STATE_0, DEVICE_STATE_0); final DeviceStateInfo otherInfo = new DeviceStateInfo( new ArrayList<>(List.of(DEVICE_STATE_2)), DEVICE_STATE_0, DEVICE_STATE_0); + final int diff = info.diff(otherInfo); - assertTrue((diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES) > 0); - assertFalse((diff & DeviceStateInfo.CHANGED_BASE_STATE) > 0); - assertFalse((diff & DeviceStateInfo.CHANGED_CURRENT_STATE) > 0); + + assertThat(diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES).isGreaterThan(0); + assertThat(diff & DeviceStateInfo.CHANGED_BASE_STATE).isEqualTo(0); + assertThat(diff & DeviceStateInfo.CHANGED_CURRENT_STATE).isEqualTo(0); } @Test public void diff_differentNonOverrideState() { - final DeviceStateInfo info = new DeviceStateInfo(new ArrayList<>(List.of(DEVICE_STATE_1)), - DEVICE_STATE_1, DEVICE_STATE_0); + final DeviceStateInfo info = new DeviceStateInfo( + new ArrayList<>(List.of(DEVICE_STATE_1)), DEVICE_STATE_1, DEVICE_STATE_0); final DeviceStateInfo otherInfo = new DeviceStateInfo( new ArrayList<>(List.of(DEVICE_STATE_1)), DEVICE_STATE_2, DEVICE_STATE_0); + final int diff = info.diff(otherInfo); - assertFalse((diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES) > 0); - assertTrue((diff & DeviceStateInfo.CHANGED_BASE_STATE) > 0); - assertFalse((diff & DeviceStateInfo.CHANGED_CURRENT_STATE) > 0); + + assertThat(diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES).isEqualTo(0); + assertThat(diff & DeviceStateInfo.CHANGED_BASE_STATE).isGreaterThan(0); + assertThat(diff & DeviceStateInfo.CHANGED_CURRENT_STATE).isEqualTo(0); } @Test public void diff_differentState() { - final DeviceStateInfo info = new DeviceStateInfo(new ArrayList<>(List.of(DEVICE_STATE_1)), - DEVICE_STATE_0, DEVICE_STATE_1); + final DeviceStateInfo info = new DeviceStateInfo( + new ArrayList<>(List.of(DEVICE_STATE_1)), DEVICE_STATE_0, DEVICE_STATE_1); final DeviceStateInfo otherInfo = new DeviceStateInfo( new ArrayList<>(List.of(DEVICE_STATE_1)), DEVICE_STATE_0, DEVICE_STATE_2); + final int diff = info.diff(otherInfo); - assertFalse((diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES) > 0); - assertFalse((diff & DeviceStateInfo.CHANGED_BASE_STATE) > 0); - assertTrue((diff & DeviceStateInfo.CHANGED_CURRENT_STATE) > 0); + + assertThat(diff & DeviceStateInfo.CHANGED_SUPPORTED_STATES).isEqualTo(0); + assertThat(diff & DeviceStateInfo.CHANGED_BASE_STATE).isEqualTo(0); + assertThat(diff & DeviceStateInfo.CHANGED_CURRENT_STATE).isGreaterThan(0); } @Test public void writeToParcel() { - final ArrayList<DeviceState> supportedStates = new ArrayList<>( - List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); + final ArrayList<DeviceState> supportedStates = + new ArrayList<>(List.of(DEVICE_STATE_0, DEVICE_STATE_1, DEVICE_STATE_2)); final DeviceState nonOverrideState = DEVICE_STATE_0; final DeviceState state = DEVICE_STATE_2; final DeviceStateInfo originalInfo = @@ -166,6 +185,6 @@ public final class DeviceStateInfoTest { parcel.setDataPosition(0); final DeviceStateInfo info = DeviceStateInfo.CREATOR.createFromParcel(parcel); - assertEquals(originalInfo, info); + assertThat(info).isEqualTo(originalInfo); } } diff --git a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateManagerGlobalTest.java b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateManagerGlobalTest.java index f4d363167a75..7c01ecccd173 100644 --- a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateManagerGlobalTest.java +++ b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateManagerGlobalTest.java @@ -16,8 +16,7 @@ package android.hardware.devicestate; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -31,6 +30,9 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.test.FakePermissionEnforcer; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.internal.util.ConcurrentUtils; @@ -38,7 +40,6 @@ import com.android.internal.util.ConcurrentUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; import java.util.ArrayList; import java.util.HashSet; @@ -47,32 +48,35 @@ import java.util.Set; /** * Unit tests for {@link DeviceStateManagerGlobal}. - * <p/> - * Run with <code>atest DeviceStateManagerGlobalTest</code>. + * + * <p> Build/Install/Run: + * atest FrameworksCoreDeviceStateManagerTests:DeviceStateManagerGlobalTest */ -@RunWith(JUnit4.class) @SmallTest +@RunWith(AndroidJUnit4.class) public final class DeviceStateManagerGlobalTest { private static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState( new DeviceState.Configuration.Builder(0 /* identifier */, "" /* name */).build()); private static final DeviceState OTHER_DEVICE_STATE = new DeviceState( new DeviceState.Configuration.Builder(1 /* identifier */, "" /* name */).build()); + @NonNull private TestDeviceStateManagerService mService; + @NonNull private DeviceStateManagerGlobal mDeviceStateManagerGlobal; @Before public void setUp() { - FakePermissionEnforcer permissionEnforcer = new FakePermissionEnforcer(); + final FakePermissionEnforcer permissionEnforcer = new FakePermissionEnforcer(); mService = new TestDeviceStateManagerService(permissionEnforcer); mDeviceStateManagerGlobal = new DeviceStateManagerGlobal(mService); - assertFalse(mService.mCallbacks.isEmpty()); + assertThat(mService.mCallbacks).isNotEmpty(); } @Test public void registerCallback() { - DeviceStateCallback callback1 = mock(DeviceStateCallback.class); - DeviceStateCallback callback2 = mock(DeviceStateCallback.class); + final DeviceStateCallback callback1 = mock(DeviceStateCallback.class); + final DeviceStateCallback callback2 = mock(DeviceStateCallback.class); mDeviceStateManagerGlobal.registerDeviceStateCallback(callback1, ConcurrentUtils.DIRECT_EXECUTOR); @@ -105,8 +109,8 @@ public final class DeviceStateManagerGlobalTest { reset(callback2); // Change the requested state and verify callback - DeviceStateRequest request = DeviceStateRequest.newBuilder( - DEFAULT_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest request = + DeviceStateRequest.newBuilder(DEFAULT_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestState(request, null /* executor */, null /* callback */); verify(callback1).onDeviceStateChanged(eq(mService.getMergedState())); @@ -115,10 +119,10 @@ public final class DeviceStateManagerGlobalTest { @Test public void unregisterCallback() { - DeviceStateCallback callback = mock(DeviceStateCallback.class); + final DeviceStateCallback callback = mock(DeviceStateCallback.class); - mDeviceStateManagerGlobal.registerDeviceStateCallback(callback, - ConcurrentUtils.DIRECT_EXECUTOR); + mDeviceStateManagerGlobal + .registerDeviceStateCallback(callback, ConcurrentUtils.DIRECT_EXECUTOR); // Verify initial callbacks verify(callback).onSupportedStatesChanged(eq(mService.getSupportedDeviceStates())); @@ -134,15 +138,15 @@ public final class DeviceStateManagerGlobalTest { @Test public void submitRequest() { - DeviceStateCallback callback = mock(DeviceStateCallback.class); - mDeviceStateManagerGlobal.registerDeviceStateCallback(callback, - ConcurrentUtils.DIRECT_EXECUTOR); + final DeviceStateCallback callback = mock(DeviceStateCallback.class); + mDeviceStateManagerGlobal + .registerDeviceStateCallback(callback, ConcurrentUtils.DIRECT_EXECUTOR); verify(callback).onDeviceStateChanged(eq(mService.getBaseState())); reset(callback); - DeviceStateRequest request = DeviceStateRequest.newBuilder( - OTHER_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest request = + DeviceStateRequest.newBuilder(OTHER_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestState(request, null /* executor */, null /* callback */); verify(callback).onDeviceStateChanged(eq(OTHER_DEVICE_STATE)); @@ -155,15 +159,15 @@ public final class DeviceStateManagerGlobalTest { @Test public void submitBaseStateOverrideRequest() { - DeviceStateCallback callback = mock(DeviceStateCallback.class); - mDeviceStateManagerGlobal.registerDeviceStateCallback(callback, - ConcurrentUtils.DIRECT_EXECUTOR); + final DeviceStateCallback callback = mock(DeviceStateCallback.class); + mDeviceStateManagerGlobal + .registerDeviceStateCallback(callback, ConcurrentUtils.DIRECT_EXECUTOR); verify(callback).onDeviceStateChanged(eq(mService.getBaseState())); reset(callback); - DeviceStateRequest request = DeviceStateRequest.newBuilder( - OTHER_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest request = + DeviceStateRequest.newBuilder(OTHER_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestBaseStateOverride(request, null /* executor */, null /* callback */); @@ -177,28 +181,28 @@ public final class DeviceStateManagerGlobalTest { @Test public void submitBaseAndEmulatedStateOverride() { - DeviceStateCallback callback = mock(DeviceStateCallback.class); - mDeviceStateManagerGlobal.registerDeviceStateCallback(callback, - ConcurrentUtils.DIRECT_EXECUTOR); + final DeviceStateCallback callback = mock(DeviceStateCallback.class); + mDeviceStateManagerGlobal + .registerDeviceStateCallback(callback, ConcurrentUtils.DIRECT_EXECUTOR); verify(callback).onDeviceStateChanged(eq(mService.getBaseState())); reset(callback); - DeviceStateRequest request = DeviceStateRequest.newBuilder( - OTHER_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest request = + DeviceStateRequest.newBuilder(OTHER_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestBaseStateOverride(request, null /* executor */, null /* callback */); verify(callback).onDeviceStateChanged(eq(OTHER_DEVICE_STATE)); - assertEquals(OTHER_DEVICE_STATE, mService.getBaseState()); + assertThat(mService.getBaseState()).isEqualTo(OTHER_DEVICE_STATE); reset(callback); - DeviceStateRequest secondRequest = DeviceStateRequest.newBuilder( - DEFAULT_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest secondRequest = + DeviceStateRequest.newBuilder(DEFAULT_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestState(secondRequest, null, null); - assertEquals(OTHER_DEVICE_STATE, mService.getBaseState()); + assertThat(mService.getBaseState()).isEqualTo(OTHER_DEVICE_STATE); verify(callback).onDeviceStateChanged(eq(DEFAULT_DEVICE_STATE)); reset(callback); @@ -214,10 +218,10 @@ public final class DeviceStateManagerGlobalTest { @Test public void verifyDeviceStateRequestCallbacksCalled() { - DeviceStateRequest.Callback callback = mock(TestDeviceStateRequestCallback.class); + final DeviceStateRequest.Callback callback = mock(TestDeviceStateRequestCallback.class); - DeviceStateRequest request = DeviceStateRequest.newBuilder( - OTHER_DEVICE_STATE.getIdentifier()).build(); + final DeviceStateRequest request = + DeviceStateRequest.newBuilder(OTHER_DEVICE_STATE.getIdentifier()).build(); mDeviceStateManagerGlobal.requestState(request, ConcurrentUtils.DIRECT_EXECUTOR /* executor */, callback /* callback */); @@ -232,52 +236,55 @@ public final class DeviceStateManagerGlobalTest { public static class TestDeviceStateRequestCallback implements DeviceStateRequest.Callback { @Override - public void onRequestActivated(DeviceStateRequest request) { } + public void onRequestActivated(@NonNull DeviceStateRequest request) { } @Override - public void onRequestCanceled(DeviceStateRequest request) { } + public void onRequestCanceled(@NonNull DeviceStateRequest request) { } @Override - public void onRequestSuspended(DeviceStateRequest request) { } + public void onRequestSuspended(@NonNull DeviceStateRequest request) { } } private static final class TestDeviceStateManagerService extends IDeviceStateManager.Stub { - public static final class Request { - public final IBinder token; - public final int state; - public final int flags; - - private Request(IBinder token, int state, int flags) { - this.token = token; - this.state = state; - this.flags = flags; + static final class Request { + @NonNull + final IBinder mToken; + final int mState; + + private Request(@NonNull IBinder token, int state) { + this.mToken = token; + this.mState = state; } } - private List<DeviceState> mSupportedDeviceStates = List.of(DEFAULT_DEVICE_STATE, - OTHER_DEVICE_STATE); - + @NonNull + private List<DeviceState> mSupportedDeviceStates = + List.of(DEFAULT_DEVICE_STATE, OTHER_DEVICE_STATE); + @NonNull private DeviceState mBaseState = DEFAULT_DEVICE_STATE; + @Nullable private Request mRequest; + @Nullable private Request mBaseStateRequest; private final Set<IDeviceStateManagerCallback> mCallbacks = new HashSet<>(); - TestDeviceStateManagerService(FakePermissionEnforcer enforcer) { + TestDeviceStateManagerService(@NonNull FakePermissionEnforcer enforcer) { super(enforcer); } + @NonNull private DeviceStateInfo getInfo() { final int mergedBaseState = mBaseStateRequest == null - ? mBaseState.getIdentifier() : mBaseStateRequest.state; - final int mergedState = mRequest == null - ? mergedBaseState : mRequest.state; + ? mBaseState.getIdentifier() : mBaseStateRequest.mState; + final int mergedState = mRequest == null ? mergedBaseState : mRequest.mState; + final ArrayList<DeviceState> supportedStates = new ArrayList<>(mSupportedDeviceStates); final DeviceState baseState = new DeviceState( new DeviceState.Configuration.Builder(mergedBaseState, "" /* name */).build()); final DeviceState state = new DeviceState( new DeviceState.Configuration.Builder(mergedState, "" /* name */).build()); - return new DeviceStateInfo(new ArrayList<>(mSupportedDeviceStates), baseState, state); + return new DeviceStateInfo(supportedStates, baseState, state); } private void notifyDeviceStateInfoChanged() { @@ -291,6 +298,7 @@ public final class DeviceStateManagerGlobalTest { } } + @NonNull @Override public DeviceStateInfo getDeviceStateInfo() { return getInfo(); @@ -311,18 +319,18 @@ public final class DeviceStateManagerGlobalTest { } @Override - public void requestState(IBinder token, int state, int flags) { + public void requestState(@NonNull IBinder token, int state, int unusedFlags) { if (mRequest != null) { for (IDeviceStateManagerCallback callback : mCallbacks) { try { - callback.onRequestCanceled(mRequest.token); + callback.onRequestCanceled(mRequest.mToken); } catch (RemoteException e) { e.rethrowFromSystemServer(); } } } - final Request request = new Request(token, state, flags); + final Request request = new Request(token, state); mRequest = request; notifyDeviceStateInfoChanged(); @@ -337,7 +345,7 @@ public final class DeviceStateManagerGlobalTest { @Override public void cancelStateRequest() { - IBinder token = mRequest.token; + final IBinder token = mRequest.mToken; mRequest = null; for (IDeviceStateManagerCallback callback : mCallbacks) { try { @@ -350,19 +358,18 @@ public final class DeviceStateManagerGlobalTest { } @Override - public void requestBaseStateOverride(IBinder token, int state, int flags) { + public void requestBaseStateOverride(@NonNull IBinder token, int state, int unusedFlags) { if (mBaseStateRequest != null) { for (IDeviceStateManagerCallback callback : mCallbacks) { try { - callback.onRequestCanceled(mBaseStateRequest.token); + callback.onRequestCanceled(mBaseStateRequest.mToken); } catch (RemoteException e) { e.rethrowFromSystemServer(); } } } - final Request request = new Request(token, state, flags); - mBaseStateRequest = request; + mBaseStateRequest = new Request(token, state); notifyDeviceStateInfoChanged(); for (IDeviceStateManagerCallback callback : mCallbacks) { @@ -376,7 +383,7 @@ public final class DeviceStateManagerGlobalTest { @Override public void cancelBaseStateOverride() throws RemoteException { - IBinder token = mBaseStateRequest.token; + final IBinder token = mBaseStateRequest.mToken; mBaseStateRequest = null; for (IDeviceStateManagerCallback callback : mCallbacks) { try { @@ -396,24 +403,27 @@ public final class DeviceStateManagerGlobalTest { onStateRequestOverlayDismissed_enforcePermission(); } - public void setSupportedStates(List<DeviceState> states) { + public void setSupportedStates(@NonNull List<DeviceState> states) { mSupportedDeviceStates = states; notifyDeviceStateInfoChanged(); } + @NonNull public List<DeviceState> getSupportedDeviceStates() { return mSupportedDeviceStates; } - public void setBaseState(DeviceState state) { + public void setBaseState(@NonNull DeviceState state) { mBaseState = state; notifyDeviceStateInfoChanged(); } + @NonNull public DeviceState getBaseState() { return getInfo().baseState; } + @NonNull public DeviceState getMergedState() { return getInfo().currentState; } diff --git a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateTest.java b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateTest.java index 78d4324ebb1a..83b5ff3ce0a5 100644 --- a/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateTest.java +++ b/core/tests/devicestatetests/src/android/hardware/devicestate/DeviceStateTest.java @@ -21,17 +21,16 @@ import static android.hardware.devicestate.DeviceState.PROPERTY_POLICY_AVAILABLE import static android.hardware.devicestate.DeviceState.PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS; import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE_IDENTIFIER; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; import android.platform.test.annotations.Presubmit; -import junit.framework.Assert; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; import java.util.HashSet; import java.util.List; @@ -39,28 +38,32 @@ import java.util.Set; /** * Unit tests for {@link android.hardware.devicestate.DeviceState}. - * <p/> - * Run with <code>atest DeviceStateTest</code>. + * + * <p> Build/Install/Run: + * atest FrameworksCoreDeviceStateManagerTests:DeviceStateTest */ @Presubmit -@RunWith(JUnit4.class) +@SmallTest +@RunWith(AndroidJUnit4.class) public final class DeviceStateTest { @Test public void testConstruct() { - DeviceState.Configuration config = new DeviceState.Configuration.Builder( + final DeviceState.Configuration config = new DeviceState.Configuration.Builder( MINIMUM_DEVICE_STATE_IDENTIFIER, "TEST_CLOSED") .setSystemProperties( new HashSet<>(List.of(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS))) .build(); + final DeviceState state = new DeviceState(config); - assertEquals(state.getIdentifier(), MINIMUM_DEVICE_STATE_IDENTIFIER); - assertEquals(state.getName(), "TEST_CLOSED"); - assertTrue(state.hasProperty(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS)); + + assertThat(state.getIdentifier()).isEqualTo(MINIMUM_DEVICE_STATE_IDENTIFIER); + assertThat(state.getName()).isEqualTo("TEST_CLOSED"); + assertThat(state.hasProperty(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS)).isTrue(); } @Test public void testHasProperties() { - DeviceState.Configuration config = new DeviceState.Configuration.Builder( + final DeviceState.Configuration config = new DeviceState.Configuration.Builder( MINIMUM_DEVICE_STATE_IDENTIFIER, "TEST") .setSystemProperties(new HashSet<>(List.of(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS, PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST))) @@ -68,10 +71,10 @@ public final class DeviceStateTest { final DeviceState state = new DeviceState(config); - assertTrue(state.hasProperty(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS)); - assertTrue(state.hasProperty(PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST)); - assertTrue(state.hasProperties(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS, - PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST)); + assertThat(state.hasProperty(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS)).isTrue(); + assertThat(state.hasProperty(PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST)).isTrue(); + assertThat(state.hasProperties(PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS, + PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST)).isTrue(); } @Test @@ -91,7 +94,7 @@ public final class DeviceStateTest { final DeviceState.Configuration stateConfiguration = DeviceState.Configuration.CREATOR.createFromParcel(parcel); - Assert.assertEquals(originalState, new DeviceState(stateConfiguration)); + assertThat(originalState).isEqualTo(new DeviceState(stateConfiguration)); } @Test @@ -109,6 +112,6 @@ public final class DeviceStateTest { final DeviceState.Configuration stateConfiguration = DeviceState.Configuration.CREATOR.createFromParcel(parcel); - Assert.assertEquals(originalState, new DeviceState(stateConfiguration)); + assertThat(originalState).isEqualTo(new DeviceState(stateConfiguration)); } } diff --git a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java index 1094bee1e7e6..6216a58f989a 100644 --- a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java +++ b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java @@ -785,8 +785,8 @@ public final class DeviceStateManagerService extends SystemService { + " IDeviceStateManagerCallback."); } - ProcessRecord record = new ProcessRecord(callback, pid, this::handleProcessDied, - mHandler); + final ProcessRecord record = + new ProcessRecord(callback, pid, this::handleProcessDied, mHandler); try { callback.asBinder().linkToDeath(record, 0); } catch (RemoteException ex) { @@ -797,8 +797,8 @@ public final class DeviceStateManagerService extends SystemService { // Callback clients should not be notified of invalid device states, so calls to // #getDeviceStateInfoLocked should be gated on checks if a committed state is present // before getting the device state info. - DeviceStateInfo currentInfo = mCommittedState.isPresent() - ? getDeviceStateInfoLocked() : null; + final DeviceStateInfo currentInfo = + mCommittedState.isPresent() ? getDeviceStateInfoLocked() : null; if (currentInfo != null) { // If there is not a committed state we'll wait to notify the process of the initial // value. diff --git a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java index 733f0565fd83..b565f4b5367b 100644 --- a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java @@ -24,13 +24,9 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; import static org.testng.Assert.assertThrows; -import android.annotation.NonNull; +import android.content.Context; import android.hardware.devicestate.DeviceState; import android.hardware.devicestate.DeviceStateInfo; import android.hardware.devicestate.DeviceStateRequest; @@ -40,9 +36,10 @@ import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; -import androidx.test.InstrumentationRegistry; +import androidx.annotation.NonNull; +import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.FlakyTest; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import com.android.compatibility.common.util.PollingCheck; import com.android.server.wm.ActivityTaskManagerInternal; @@ -63,16 +60,25 @@ import javax.annotation.Nullable; /** * Unit tests for {@link DeviceStateManagerService}. - * <p/> - * Run with <code>atest DeviceStateManagerServiceTest</code>. + * + * <p> Build/Install/Run: + * atest FrameworksServicesTests:DeviceStateManagerServiceTest */ @Presubmit @RunWith(AndroidJUnit4.class) public final class DeviceStateManagerServiceTest { private static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState( new DeviceState.Configuration.Builder(0, "DEFAULT").build()); + private static final int DEFAULT_DEVICE_STATE_IDENTIFIER = DEFAULT_DEVICE_STATE.getIdentifier(); + private static final String DEFAULT_DEVICE_STATE_TRACE_STRING = + DEFAULT_DEVICE_STATE_IDENTIFIER + ":" + DEFAULT_DEVICE_STATE.getName(); + private static final DeviceState OTHER_DEVICE_STATE = new DeviceState( new DeviceState.Configuration.Builder(1, "DEFAULT").build()); + private static final int OTHER_DEVICE_STATE_IDENTIFIER = OTHER_DEVICE_STATE.getIdentifier(); + private static final String OTHER_DEVICE_STATE_TRACE_STRING = + OTHER_DEVICE_STATE_IDENTIFIER + ":" + OTHER_DEVICE_STATE.getName(); + private static final DeviceState DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP = new DeviceState(new DeviceState.Configuration.Builder(2, "DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP") @@ -93,24 +99,29 @@ public final class DeviceStateManagerServiceTest { private static final int TIMEOUT = 2000; + private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext(); + @NonNull private TestDeviceStatePolicy mPolicy; + @NonNull private TestDeviceStateProvider mProvider; + @NonNull private DeviceStateManagerService mService; + @NonNull private TestSystemPropertySetter mSysPropSetter; + @NonNull private WindowProcessController mWindowProcessController; @Before public void setup() { mProvider = new TestDeviceStateProvider(); - mPolicy = new TestDeviceStatePolicy(mProvider); + mPolicy = new TestDeviceStatePolicy(mContext, mProvider); mSysPropSetter = new TestSystemPropertySetter(); setupDeviceStateManagerService(); flushHandler(); // Flush the handler to ensure the initial values are committed. } private void setupDeviceStateManagerService() { - mService = new DeviceStateManagerService(InstrumentationRegistry.getContext(), mPolicy, - mSysPropSetter); + mService = new DeviceStateManagerService(mContext, mPolicy, mSysPropSetter); // Necessary to allow us to check for top app process id in tests mService.mActivityTaskManagerInternal = mock(ActivityTaskManagerInternal.class); @@ -136,56 +147,53 @@ public final class DeviceStateManagerServiceTest { @Test public void baseStateChanged() { - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); - - mProvider.setState(OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); + + mProvider.setState(OTHER_DEVICE_STATE_IDENTIFIER); flushHandler(); - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); + + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); } @Test public void baseStateChanged_withStatePendingPolicyCallback() { mPolicy.blockConfigure(); - mProvider.setState(OTHER_DEVICE_STATE.getIdentifier()); + mProvider.setState(OTHER_DEVICE_STATE_IDENTIFIER); flushHandler(); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); - - mProvider.setState(DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); + + mProvider.setState(DEFAULT_DEVICE_STATE_IDENTIFIER); flushHandler(); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); mPolicy.resumeConfigure(); flushHandler(); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); } @Test @@ -194,13 +202,12 @@ public final class DeviceStateManagerServiceTest { mProvider.setState(UNSUPPORTED_DEVICE_STATE.getIdentifier()); }); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); } @Test @@ -208,25 +215,23 @@ public final class DeviceStateManagerServiceTest { assertThrows(IllegalArgumentException.class, () -> mProvider.setState(INVALID_DEVICE_STATE_IDENTIFIER)); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); } @Test public void supportedStatesChanged() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); assertThat(mService.getSupportedStates()).containsExactly(DEFAULT_DEVICE_STATE, OTHER_DEVICE_STATE, DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP); @@ -235,30 +240,29 @@ public final class DeviceStateManagerServiceTest { // The current committed and requests states do not change because the current state remains // supported. - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); assertThat(mService.getSupportedStates()).containsExactly(DEFAULT_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().supportedStates, List.of(DEFAULT_DEVICE_STATE)); + assertThat(callback.getLastNotifiedInfo().supportedStates) + .containsExactly(DEFAULT_DEVICE_STATE); } @Test public void supportedStatesChanged_statesRemainSame() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); // An initial callback will be triggered on registration, so we clear it here. flushHandler(); callback.clearLastNotifiedInfo(); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); assertThat(mService.getSupportedStates()).containsExactly(DEFAULT_DEVICE_STATE, OTHER_DEVICE_STATE, DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP); @@ -268,26 +272,26 @@ public final class DeviceStateManagerServiceTest { // The current committed and requests states do not change because the current state remains // supported. - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); assertThat(mService.getSupportedStates()).containsExactly(DEFAULT_DEVICE_STATE, OTHER_DEVICE_STATE, DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP); // The callback wasn't notified about a change in supported states as the states have not // changed. - assertNull(callback.getLastNotifiedInfo()); + assertThat(callback.getLastNotifiedInfo()).isNull(); } @Test public void getDeviceStateInfo() throws RemoteException { - DeviceStateInfo info = mService.getBinderService().getDeviceStateInfo(); - assertNotNull(info); - assertEquals(info.supportedStates, SUPPORTED_DEVICE_STATES); - assertEquals(info.baseState, DEFAULT_DEVICE_STATE); - assertEquals(info.currentState, DEFAULT_DEVICE_STATE); + final DeviceStateInfo info = mService.getBinderService().getDeviceStateInfo(); + assertThat(info).isNotNull(); + assertThat(info.supportedStates) + .containsExactlyElementsIn(SUPPORTED_DEVICE_STATES).inOrder(); + assertThat(info.baseState).isEqualTo(DEFAULT_DEVICE_STATE); + assertThat(info.currentState).isEqualTo(DEFAULT_DEVICE_STATE); } @FlakyTest(bugId = 297949293) @@ -295,105 +299,109 @@ public final class DeviceStateManagerServiceTest { public void getDeviceStateInfo_baseStateAndCommittedStateNotSet() throws RemoteException { // Create a provider and a service without an initial base state. mProvider = new TestDeviceStateProvider(null /* initialState */); - mPolicy = new TestDeviceStatePolicy(mProvider); + mPolicy = new TestDeviceStatePolicy(mContext, mProvider); setupDeviceStateManagerService(); flushHandler(); // Flush the handler to ensure the initial values are committed. - DeviceStateInfo info = mService.getBinderService().getDeviceStateInfo(); + final DeviceStateInfo info = mService.getBinderService().getDeviceStateInfo(); - assertEquals(info.supportedStates, SUPPORTED_DEVICE_STATES); - assertEquals(info.baseState.getIdentifier(), INVALID_DEVICE_STATE_IDENTIFIER); - assertEquals(info.currentState.getIdentifier(), INVALID_DEVICE_STATE_IDENTIFIER); + assertThat(info.supportedStates) + .containsExactlyElementsIn(SUPPORTED_DEVICE_STATES).inOrder(); + assertThat(info.baseState.getIdentifier()).isEqualTo(INVALID_DEVICE_STATE_IDENTIFIER); + assertThat(info.currentState.getIdentifier()).isEqualTo(INVALID_DEVICE_STATE_IDENTIFIER); } @Test public void registerCallback() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); - mProvider.setState(OTHER_DEVICE_STATE.getIdentifier()); + mProvider.setState(OTHER_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() - == OTHER_DEVICE_STATE.getIdentifier()); + == OTHER_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().currentState.getIdentifier() - == OTHER_DEVICE_STATE.getIdentifier()); + == OTHER_DEVICE_STATE_IDENTIFIER); - mProvider.setState(DEFAULT_DEVICE_STATE.getIdentifier()); + mProvider.setState(DEFAULT_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() - == DEFAULT_DEVICE_STATE.getIdentifier()); - + == DEFAULT_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().currentState.getIdentifier() - == DEFAULT_DEVICE_STATE.getIdentifier()); + == DEFAULT_DEVICE_STATE_IDENTIFIER); mPolicy.blockConfigure(); - mProvider.setState(OTHER_DEVICE_STATE.getIdentifier()); + mProvider.setState(OTHER_DEVICE_STATE_IDENTIFIER); // The callback should not have been notified of the state change as the policy is still // pending callback. waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() - == DEFAULT_DEVICE_STATE.getIdentifier()); + == DEFAULT_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().currentState.getIdentifier() - == DEFAULT_DEVICE_STATE.getIdentifier()); + == DEFAULT_DEVICE_STATE_IDENTIFIER); mPolicy.resumeConfigure(); // Now that the policy is finished processing the callback should be notified of the state // change. waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() - == OTHER_DEVICE_STATE.getIdentifier()); + == OTHER_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().currentState.getIdentifier() - == OTHER_DEVICE_STATE.getIdentifier()); + == OTHER_DEVICE_STATE_IDENTIFIER); } @Test - public void registerCallback_emitsInitialValue() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + public void registerCallback_initialValueAvailable_emitsDeviceState() throws RemoteException { + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + mService.getBinderService().registerCallback(callback); flushHandler(); - assertNotNull(callback.getLastNotifiedInfo()); - assertEquals(callback.getLastNotifiedInfo().baseState, DEFAULT_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().currentState, DEFAULT_DEVICE_STATE); + final DeviceStateInfo stateInfo = callback.getLastNotifiedInfo(); + + assertThat(stateInfo).isNotNull(); + assertThat(stateInfo.baseState).isEqualTo(DEFAULT_DEVICE_STATE); + assertThat(stateInfo.currentState).isEqualTo(DEFAULT_DEVICE_STATE); } @Test - public void registerCallback_initialValueUnavailable() throws RemoteException { + public void registerCallback_initialValueUnavailable_nullDeviceState() throws RemoteException { // Create a provider and a service without an initial base state. mProvider = new TestDeviceStateProvider(null /* initialState */); - mPolicy = new TestDeviceStatePolicy(mProvider); + mPolicy = new TestDeviceStatePolicy(mContext, mProvider); setupDeviceStateManagerService(); flushHandler(); // Flush the handler to ensure the initial values are committed. - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); + final DeviceStateInfo stateInfo = callback.getLastNotifiedInfo(); + // The callback should never be called when the base state is not set yet. - assertNull(callback.getLastNotifiedInfo()); + assertThat(stateInfo).isNull(); } @Test public void requestState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); - mService.getBinderService().requestState(token, OTHER_DEVICE_STATE.getIdentifier(), - 0 /* flags */); + mService.getBinderService() + .requestState(token, OTHER_DEVICE_STATE_IDENTIFIER, 0 /* flags */); waitAndAssert(() -> callback.getLastNotifiedStatus(token) == TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); - - assertNotNull(callback.getLastNotifiedInfo()); - assertEquals(callback.getLastNotifiedInfo().baseState, DEFAULT_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().currentState, OTHER_DEVICE_STATE); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getOverrideState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); + + assertThat(callback.getLastNotifiedInfo()).isNotNull(); + assertThat(callback.getLastNotifiedInfo().baseState).isEqualTo(DEFAULT_DEVICE_STATE); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(OTHER_DEVICE_STATE); mService.getBinderService().cancelStateRequest(); @@ -401,21 +409,20 @@ public final class DeviceStateManagerServiceTest { == TestDeviceStateManagerCallback.STATUS_CANCELED); // Committed state is set back to the requested state once the override is cleared. waitAndAssert(() -> mService.getCommittedState().equals(Optional.of(DEFAULT_DEVICE_STATE))); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); - - assertEquals(callback.getLastNotifiedInfo().baseState, DEFAULT_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().currentState, DEFAULT_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); + + assertThat(callback.getLastNotifiedInfo().baseState).isEqualTo(DEFAULT_DEVICE_STATE); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(DEFAULT_DEVICE_STATE); } @FlakyTest(bugId = 200332057) @Test public void requestState_pendingStateAtRequest() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); @@ -423,134 +430,129 @@ public final class DeviceStateManagerServiceTest { final IBinder firstRequestToken = new Binder(); final IBinder secondRequestToken = new Binder(); - assertEquals(callback.getLastNotifiedStatus(firstRequestToken), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); - assertEquals(callback.getLastNotifiedStatus(secondRequestToken), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(firstRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(secondRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); - mService.getBinderService().requestState(firstRequestToken, - OTHER_DEVICE_STATE.getIdentifier(), 0 /* flags */); + mService.getBinderService() + .requestState(firstRequestToken, OTHER_DEVICE_STATE_IDENTIFIER, 0 /* flags */); // Flush the handler twice. The first flush ensures the request is added and the policy is // notified, while the second flush ensures the callback is notified once the change is // committed. flushHandler(2 /* count */); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); - mService.getBinderService().requestState(secondRequestToken, - DEFAULT_DEVICE_STATE.getIdentifier(), 0 /* flags */); + mService.getBinderService() + .requestState(secondRequestToken, DEFAULT_DEVICE_STATE_IDENTIFIER, 0 /* flags */); mPolicy.resumeConfigureOnce(); flushHandler(); // First request status is now canceled as there is another pending request. - assertEquals(callback.getLastNotifiedStatus(firstRequestToken), - TestDeviceStateManagerCallback.STATUS_CANCELED); + assertThat(callback.getLastNotifiedStatus(firstRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); // Second request status still unknown because the service is still awaiting policy // callback. - assertEquals(callback.getLastNotifiedStatus(secondRequestToken), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(callback.getLastNotifiedStatus(secondRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getPendingState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); mPolicy.resumeConfigure(); flushHandler(); - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); // Now cancel the second request to make the first request active. mService.getBinderService().cancelStateRequest(); flushHandler(); - assertEquals(callback.getLastNotifiedStatus(firstRequestToken), - TestDeviceStateManagerCallback.STATUS_CANCELED); - assertEquals(callback.getLastNotifiedStatus(secondRequestToken), - TestDeviceStateManagerCallback.STATUS_CANCELED); - - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getPendingState(), Optional.empty()); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(callback.getLastNotifiedStatus(firstRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); + assertThat(callback.getLastNotifiedStatus(secondRequestToken)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); + + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getPendingState()).isEmpty(); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); } @Test public void requestState_sameAsBaseState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); - mService.getBinderService().requestState(token, DEFAULT_DEVICE_STATE.getIdentifier(), - 0 /* flags */); + mService.getBinderService() + .requestState(token, DEFAULT_DEVICE_STATE_IDENTIFIER, 0 /* flags */); flushHandler(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_ACTIVE); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_ACTIVE); } @Test public void requestState_flagCancelWhenBaseChanges() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); - mService.getBinderService().requestState(token, OTHER_DEVICE_STATE.getIdentifier(), + mService.getBinderService().requestState(token, OTHER_DEVICE_STATE_IDENTIFIER, DeviceStateRequest.FLAG_CANCEL_WHEN_BASE_CHANGES); // Flush the handler twice. The first flush ensures the request is added and the policy is // notified, while the second flush ensures the callback is notified once the change is // committed. flushHandler(2 /* count */); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_ACTIVE); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); - - mProvider.setState(OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getOverrideState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); + + mProvider.setState(OTHER_DEVICE_STATE_IDENTIFIER); flushHandler(); // Request is canceled because the base state changed. - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_CANCELED); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); // Committed state is set back to the requested state once the override is cleared. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); } @Test @@ -581,8 +583,8 @@ public final class DeviceStateManagerServiceTest { requestState_flagCancelWhenRequesterNotOnTop_common( // When the app is foreground, the state should not change () -> { - int pid = Binder.getCallingPid(); - int uid = Binder.getCallingUid(); + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); try { mService.mProcessObserver.onForegroundActivitiesChanged(pid, uid, true /* foregroundActivities */); @@ -594,8 +596,8 @@ public final class DeviceStateManagerServiceTest { () -> { when(mWindowProcessController.getPid()).thenReturn(FAKE_PROCESS_ID); try { - int pid = Binder.getCallingPid(); - int uid = Binder.getCallingUid(); + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); mService.mProcessObserver.onForegroundActivitiesChanged(pid, uid, false /* foregroundActivities */); @@ -609,68 +611,66 @@ public final class DeviceStateManagerServiceTest { @FlakyTest(bugId = 200332057) @Test public void requestState_becomesUnsupported() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); - mService.getBinderService().requestState(token, OTHER_DEVICE_STATE.getIdentifier(), - 0 /* flags */); + mService.getBinderService() + .requestState(token, OTHER_DEVICE_STATE_IDENTIFIER, 0 /* flags */); flushHandler(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_ACTIVE); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getOverrideState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); mProvider.notifySupportedDeviceStates( new DeviceState[]{DEFAULT_DEVICE_STATE}); flushHandler(); // Request is canceled because the state is no longer supported. - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_CANCELED); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); // Committed state is set back to the requested state as the override state is no longer // supported. - assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); } @Test public void requestState_unsupportedState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); assertThrows(IllegalArgumentException.class, () -> { final IBinder token = new Binder(); - mService.getBinderService().requestState(token, - UNSUPPORTED_DEVICE_STATE.getIdentifier(), 0 /* flags */); + mService.getBinderService() + .requestState(token, UNSUPPORTED_DEVICE_STATE.getIdentifier(), 0 /* flags */); }); } @Test public void requestState_invalidState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); assertThrows(IllegalArgumentException.class, () -> { final IBinder token = new Binder(); - mService.getBinderService().requestState(token, INVALID_DEVICE_STATE_IDENTIFIER, - 0 /* flags */); + mService.getBinderService() + .requestState(token, INVALID_DEVICE_STATE_IDENTIFIER, 0 /* flags */); }); } @@ -678,40 +678,39 @@ public final class DeviceStateManagerServiceTest { public void requestState_beforeRegisteringCallback() { assertThrows(IllegalStateException.class, () -> { final IBinder token = new Binder(); - mService.getBinderService().requestState(token, DEFAULT_DEVICE_STATE.getIdentifier(), - 0 /* flags */); + mService.getBinderService() + .requestState(token, DEFAULT_DEVICE_STATE_IDENTIFIER, 0 /* flags */); }); } @Test public void requestBaseStateOverride() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); mService.getBinderService().requestBaseStateOverride(token, - OTHER_DEVICE_STATE.getIdentifier(), + OTHER_DEVICE_STATE_IDENTIFIER, 0 /* flags */); waitAndAssert(() -> callback.getLastNotifiedStatus(token) == TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getOverrideBaseState().get(), OTHER_DEVICE_STATE); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); - - assertNotNull(callback.getLastNotifiedInfo()); - assertEquals(callback.getLastNotifiedInfo().baseState, OTHER_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().currentState, OTHER_DEVICE_STATE); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getOverrideBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); + + assertThat(callback.getLastNotifiedInfo()).isNotNull(); + assertThat(callback.getLastNotifiedInfo().baseState).isEqualTo(OTHER_DEVICE_STATE); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(OTHER_DEVICE_STATE); mService.getBinderService().cancelBaseStateOverride(); @@ -719,52 +718,50 @@ public final class DeviceStateManagerServiceTest { == TestDeviceStateManagerCallback.STATUS_CANCELED); // Committed state is set back to the requested state once the override is cleared. waitAndAssert(() -> mService.getCommittedState().equals(Optional.of(DEFAULT_DEVICE_STATE))); - assertEquals(mSysPropSetter.getValue(), - DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE)); - assertFalse(mService.getOverrideBaseState().isPresent()); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - DEFAULT_DEVICE_STATE.getIdentifier()); + assertThat(mSysPropSetter.getValue()).isEqualTo(DEFAULT_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(DEFAULT_DEVICE_STATE); + assertThat(mService.getOverrideBaseState()).isEmpty(); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(DEFAULT_DEVICE_STATE_IDENTIFIER); waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() - == DEFAULT_DEVICE_STATE.getIdentifier()); - assertEquals(callback.getLastNotifiedInfo().currentState, DEFAULT_DEVICE_STATE); + == DEFAULT_DEVICE_STATE_IDENTIFIER); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(DEFAULT_DEVICE_STATE); } @Test public void requestBaseStateOverride_cancelledByBaseStateUpdate() throws RemoteException { - final DeviceState testDeviceState = new DeviceState(new DeviceState.Configuration.Builder(2, - "TEST").build()); - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final DeviceState testDeviceState = new DeviceState( + new DeviceState.Configuration.Builder(2, "TEST").build()); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); mProvider.notifySupportedDeviceStates(new DeviceState[]{DEFAULT_DEVICE_STATE, OTHER_DEVICE_STATE, testDeviceState}); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); mService.getBinderService().requestBaseStateOverride(token, - OTHER_DEVICE_STATE.getIdentifier(), + OTHER_DEVICE_STATE_IDENTIFIER, 0 /* flags */); waitAndAssert(() -> callback.getLastNotifiedStatus(token) == TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. - assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mSysPropSetter.getValue(), - OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName()); - assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE)); - assertEquals(mService.getOverrideBaseState().get(), OTHER_DEVICE_STATE); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - OTHER_DEVICE_STATE.getIdentifier()); - - assertNotNull(callback.getLastNotifiedInfo()); - assertEquals(callback.getLastNotifiedInfo().baseState, OTHER_DEVICE_STATE); - assertEquals(callback.getLastNotifiedInfo().currentState, OTHER_DEVICE_STATE); + assertThat(mService.getCommittedState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mSysPropSetter.getValue()).isEqualTo(OTHER_DEVICE_STATE_TRACE_STRING); + assertThat(mService.getBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getOverrideBaseState()).hasValue(OTHER_DEVICE_STATE); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(OTHER_DEVICE_STATE_IDENTIFIER); + + assertThat(callback.getLastNotifiedInfo()).isNotNull(); + assertThat(callback.getLastNotifiedInfo().baseState).isEqualTo(OTHER_DEVICE_STATE); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(OTHER_DEVICE_STATE); mProvider.setState(testDeviceState.getIdentifier()); @@ -772,22 +769,22 @@ public final class DeviceStateManagerServiceTest { == TestDeviceStateManagerCallback.STATUS_CANCELED); // Committed state is set to the new base state once the override is cleared. waitAndAssert(() -> mService.getCommittedState().equals(Optional.of(testDeviceState))); - assertEquals(mSysPropSetter.getValue(), - testDeviceState.getIdentifier() + ":" + testDeviceState.getName()); - assertEquals(mService.getBaseState(), Optional.of(testDeviceState)); - assertFalse(mService.getOverrideBaseState().isPresent()); - assertFalse(mService.getOverrideState().isPresent()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - testDeviceState.getIdentifier()); + assertThat(mSysPropSetter.getValue()) + .isEqualTo(testDeviceState.getIdentifier() + ":" + testDeviceState.getName()); + assertThat(mService.getBaseState()).hasValue(testDeviceState); + assertThat(mService.getOverrideBaseState()).isEmpty(); + assertThat(mService.getOverrideState()).isEmpty(); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(testDeviceState.getIdentifier()); waitAndAssert(() -> callback.getLastNotifiedInfo().baseState.getIdentifier() == testDeviceState.getIdentifier()); - assertEquals(callback.getLastNotifiedInfo().currentState, testDeviceState); + assertThat(callback.getLastNotifiedInfo().currentState).isEqualTo(testDeviceState); } @Test public void requestBaseState_unsupportedState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); assertThrows(IllegalArgumentException.class, () -> { @@ -799,7 +796,7 @@ public final class DeviceStateManagerServiceTest { @Test public void requestBaseState_invalidState() throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); assertThrows(IllegalArgumentException.class, () -> { @@ -814,7 +811,7 @@ public final class DeviceStateManagerServiceTest { assertThrows(IllegalStateException.class, () -> { final IBinder token = new Binder(); mService.getBinderService().requestBaseStateOverride(token, - DEFAULT_DEVICE_STATE.getIdentifier(), + DEFAULT_DEVICE_STATE_IDENTIFIER, 0 /* flags */); }); } @@ -834,21 +831,21 @@ public final class DeviceStateManagerServiceTest { Runnable noChangeEvent, Runnable autoCancelEvent ) throws RemoteException { - TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); + final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback(); mService.getBinderService().registerCallback(callback); flushHandler(); final IBinder token = new Binder(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_UNKNOWN); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_UNKNOWN); mService.getBinderService().requestState(token, DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP.getIdentifier(), 0 /* flags */); flushHandler(2 /* count */); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_ACTIVE); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_ACTIVE); // Committed state changes as there is a requested override. assertDeviceStateConditions( @@ -858,8 +855,8 @@ public final class DeviceStateManagerServiceTest { noChangeEvent.run(); flushHandler(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_ACTIVE); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_ACTIVE); assertDeviceStateConditions( DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP, DEFAULT_DEVICE_STATE, /* base state */ @@ -867,8 +864,8 @@ public final class DeviceStateManagerServiceTest { autoCancelEvent.run(); flushHandler(); - assertEquals(callback.getLastNotifiedStatus(token), - TestDeviceStateManagerCallback.STATUS_CANCELED); + assertThat(callback.getLastNotifiedStatus(token)) + .isEqualTo(TestDeviceStateManagerCallback.STATUS_CANCELED); assertDeviceStateConditions(DEFAULT_DEVICE_STATE, DEFAULT_DEVICE_STATE, false /* isOverrideState */); } @@ -881,20 +878,20 @@ public final class DeviceStateManagerServiceTest { * @param isOverrideState whether a state override is active. */ private void assertDeviceStateConditions( - DeviceState state, DeviceState baseState, + @NonNull DeviceState state, @NonNull DeviceState baseState, boolean isOverrideState) { - assertEquals(mService.getCommittedState(), Optional.of(state)); - assertEquals(mService.getBaseState(), Optional.of(baseState)); - assertEquals(mSysPropSetter.getValue(), - state.getIdentifier() + ":" + state.getName()); - assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(), - state.getIdentifier()); + assertThat(mService.getCommittedState()).hasValue(state); + assertThat(mService.getBaseState()).hasValue(baseState); + assertThat(mSysPropSetter.getValue()) + .isEqualTo(state.getIdentifier() + ":" + state.getName()); + assertThat(mPolicy.getMostRecentRequestedStateToConfigure()) + .isEqualTo(state.getIdentifier()); if (isOverrideState) { // When a state override is active, the committed state should batch the override state. - assertEquals(mService.getOverrideState().get(), state); + assertThat(mService.getOverrideState()).hasValue(state); } else { // When there is no state override, the override state should be empty. - assertFalse(mService.getOverrideState().isPresent()); + assertThat(mService.getOverrideState()).isEmpty(); } } @@ -902,10 +899,11 @@ public final class DeviceStateManagerServiceTest { private final DeviceStateProvider mProvider; private int mLastDeviceStateRequestedToConfigure = INVALID_DEVICE_STATE_IDENTIFIER; private boolean mConfigureBlocked = false; + @Nullable private Runnable mPendingConfigureCompleteRunnable; - TestDeviceStatePolicy(DeviceStateProvider provider) { - super(InstrumentationRegistry.getContext()); + TestDeviceStatePolicy(@NonNull Context context, @NonNull DeviceStateProvider provider) { + super(context); mProvider = provider; } @@ -921,7 +919,7 @@ public final class DeviceStateManagerServiceTest { public void resumeConfigure() { mConfigureBlocked = false; if (mPendingConfigureCompleteRunnable != null) { - Runnable onComplete = mPendingConfigureCompleteRunnable; + final Runnable onComplete = mPendingConfigureCompleteRunnable; mPendingConfigureCompleteRunnable = null; onComplete.run(); } @@ -929,7 +927,7 @@ public final class DeviceStateManagerServiceTest { public void resumeConfigureOnce() { if (mPendingConfigureCompleteRunnable != null) { - Runnable onComplete = mPendingConfigureCompleteRunnable; + final Runnable onComplete = mPendingConfigureCompleteRunnable; mPendingConfigureCompleteRunnable = null; onComplete.run(); } @@ -940,7 +938,7 @@ public final class DeviceStateManagerServiceTest { } @Override - public void configureDeviceForState(int state, Runnable onComplete) { + public void configureDeviceForState(int state, @NonNull Runnable onComplete) { if (mPendingConfigureCompleteRunnable != null) { throw new IllegalStateException("configureDeviceForState() called while configure" + " is pending"); @@ -966,7 +964,9 @@ public final class DeviceStateManagerServiceTest { OTHER_DEVICE_STATE, DEVICE_STATE_CANCEL_WHEN_REQUESTER_NOT_ON_TOP}; - @Nullable private final DeviceState mInitialState; + @Nullable + private final DeviceState mInitialState; + @Nullable private Listener mListener; private TestDeviceStateProvider() { @@ -991,7 +991,7 @@ public final class DeviceStateManagerServiceTest { } } - public void notifySupportedDeviceStates(DeviceState[] supportedDeviceStates) { + public void notifySupportedDeviceStates(@NonNull DeviceState[] supportedDeviceStates) { mSupportedDeviceStates = supportedDeviceStates; mListener.onSupportedDeviceStatesChanged(supportedDeviceStates, SUPPORTED_DEVICE_STATES_CHANGED_INITIALIZED); @@ -1018,17 +1018,17 @@ public final class DeviceStateManagerServiceTest { private final HashMap<IBinder, Integer> mLastNotifiedStatus = new HashMap<>(); @Override - public void onDeviceStateInfoChanged(DeviceStateInfo info) { + public void onDeviceStateInfoChanged(@NonNull DeviceStateInfo info) { mLastNotifiedInfo = info; } @Override - public void onRequestActive(IBinder token) { + public void onRequestActive(@NonNull IBinder token) { mLastNotifiedStatus.put(token, STATUS_ACTIVE); } @Override - public void onRequestCanceled(IBinder token) { + public void onRequestCanceled(@NonNull IBinder token) { mLastNotifiedStatus.put(token, STATUS_CANCELED); } @@ -1041,20 +1041,22 @@ public final class DeviceStateManagerServiceTest { mLastNotifiedInfo = null; } - int getLastNotifiedStatus(IBinder requestToken) { + int getLastNotifiedStatus(@NonNull IBinder requestToken) { return mLastNotifiedStatus.getOrDefault(requestToken, STATUS_UNKNOWN); } } private static final class TestSystemPropertySetter implements DeviceStateManagerService.SystemPropertySetter { + @NonNull private String mValue; @Override - public void setDebugTracingDeviceStateProperty(String value) { + public void setDebugTracingDeviceStateProperty(@NonNull String value) { mValue = value; } + @NonNull public String getValue() { return mValue; } |