From 58b977cfd1dcd2b9d631cb1e12212cfd1f8e7bfe Mon Sep 17 00:00:00 2001 From: Roy Chou Date: Thu, 22 Jun 2023 17:02:15 +0000 Subject: [PATCH] chore(#MagSettingsPanel): change persisting scale timing Originally the Settings presisted scale is updated when the panel seekbar progress is changed or the window magnifier scale is changed by accessibility actions. In WindowMagnificationController we keep the same behavior. In WindowMagnificationSettings, per b/286176069 we change to only update the persisted scale with the seekbar final progress when the user interaction on seekbar is ended. We change the onPerformScaleAction parameters so when sysui call the service to change the magnifier scale, we can decide if the persisted scale should be updated. Bug: 286176069 Test: manually atest WindowMagnificationTest atest MagnificationSettingsControllerTest atest WindowMagnificationSettingsTest atest WindowMagnificationControllerTest atest WindowMagnificationManagerTest atest MagnificationControllerTest Change-Id: I995a059c6575298eeae095fb3daa9f037916014a Merged-In: I995a059c6575298eeae095fb3daa9f037916014a --- ...WindowMagnificationConnectionCallback.aidl | 3 ++- .../MagnificationSettingsController.java | 7 ++++--- .../accessibility/WindowMagnification.java | 10 ++++++---- .../WindowMagnificationConnectionImpl.java | 4 ++-- .../WindowMagnificationController.java | 3 ++- .../WindowMagnificationSettings.java | 15 +++++++++++--- .../WindowMagnificationSettingsCallback.java | 3 ++- .../WindowMagnifierCallback.java | 3 ++- .../MagnificationSettingsControllerTest.java | 5 +++-- .../WindowMagnificationControllerTest.java | 6 ++++-- .../WindowMagnificationSettingsTest.java | 20 +++++++++++++++++-- .../WindowMagnificationTest.java | 12 +++++++---- .../MagnificationController.java | 10 +++++++--- .../WindowMagnificationManager.java | 10 ++++++---- .../MagnificationControllerTest.java | 12 ++++++----- .../WindowMagnificationManagerTest.java | 7 +++++-- 16 files changed, 90 insertions(+), 40 deletions(-) diff --git a/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl b/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl index adfeb6d110083..21b433465a3a7 100644 --- a/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl +++ b/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl @@ -57,8 +57,9 @@ import android.graphics.Rect; * * @param displayId The logical display id. * @param scale the target scale, or {@link Float#NaN} to leave unchanged + * @param updatePersistence whether the new scale should be persisted in Settings */ - void onPerformScaleAction(int displayId, float scale); + void onPerformScaleAction(int displayId, float scale, boolean updatePersistence); /** * Called when the accessibility action is performed. diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java index 4052c9a772126..859e183d39fe7 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java @@ -164,8 +164,9 @@ public class MagnificationSettingsController implements ComponentCallbacks { * * @param displayId The logical display id. * @param scale Magnification scale value. + * @param updatePersistence whether the new scale should be persisted. */ - void onMagnifierScale(int displayId, float scale); + void onMagnifierScale(int displayId, float scale, boolean updatePersistence); /** * Called when magnification mode changed. @@ -215,9 +216,9 @@ public class MagnificationSettingsController implements ComponentCallbacks { } @Override - public void onMagnifierScale(float scale) { + public void onMagnifierScale(float scale, boolean updatePersistence) { mSettingsControllerCallback.onMagnifierScale(mDisplayId, - A11Y_ACTION_SCALE_RANGE.clamp(scale)); + A11Y_ACTION_SCALE_RANGE.clamp(scale), updatePersistence); } }; } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index dd5f1400ba90b..baabd95f5caa2 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -333,9 +333,10 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback } @Override - public void onPerformScaleAction(int displayId, float scale) { + public void onPerformScaleAction(int displayId, float scale, boolean updatePersistence) { if (mWindowMagnificationConnectionImpl != null) { - mWindowMagnificationConnectionImpl.onPerformScaleAction(displayId, scale); + mWindowMagnificationConnectionImpl.onPerformScaleAction( + displayId, scale, updatePersistence); } } @@ -384,9 +385,10 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback } @Override - public void onMagnifierScale(int displayId, float scale) { + public void onMagnifierScale(int displayId, float scale, boolean updatePersistence) { if (mWindowMagnificationConnectionImpl != null) { - mWindowMagnificationConnectionImpl.onPerformScaleAction(displayId, scale); + mWindowMagnificationConnectionImpl.onPerformScaleAction( + displayId, scale, updatePersistence); } } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java index f1d00ce218c2a..928445bde8ff1 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java @@ -129,10 +129,10 @@ class WindowMagnificationConnectionImpl extends IWindowMagnificationConnection.S } } - void onPerformScaleAction(int displayId, float scale) { + void onPerformScaleAction(int displayId, float scale, boolean updatePersistence) { if (mConnectionCallback != null) { try { - mConnectionCallback.onPerformScaleAction(displayId, scale); + mConnectionCallback.onPerformScaleAction(displayId, scale, updatePersistence); } catch (RemoteException e) { Log.e(TAG, "Failed to inform performing scale action", e); } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index 2fc0c2674d7fc..602f817f826b1 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -1511,7 +1511,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold private void performScale(float scale) { scale = A11Y_ACTION_SCALE_RANGE.clamp(scale); - mWindowMagnifierCallback.onPerformScaleAction(mDisplayId, scale); + mWindowMagnifierCallback.onPerformScaleAction( + mDisplayId, scale, /* updatePersistence= */ true); } } } \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 916584b94a9cd..6ec5320bf4c34 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -170,8 +170,10 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest // Notify the service to update the magnifier scale only when the progress changed is // triggered by user interaction on seekbar if (fromUser) { - float scale = (progress / (float) mSeekBarMagnitude) + SCALE_MIN_VALUE; - mCallback.onMagnifierScale(scale); + final float scale = transformProgressToScale(progress); + // We don't need to update the persisted scale when the seekbar progress is + // changing. The update should be triggered when the changing is ended. + mCallback.onMagnifierScale(scale, /* updatePersistence= */ false); } } @@ -187,7 +189,14 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest @Override public void onUserInteractionFinalized(SeekBar seekBar, @ControlUnitType int control) { - // Do nothing + // Update the Settings persisted scale only when user interaction with seekbar ends + final int progress = seekBar.getProgress(); + final float scale = transformProgressToScale(progress); + mCallback.onMagnifierScale(scale, /* updatePersistence= */ true); + } + + private float transformProgressToScale(float progress) { + return (progress / (float) mSeekBarMagnitude) + SCALE_MIN_VALUE; } } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettingsCallback.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettingsCallback.java index 3dbff5d7898ff..2eee7a63ab215 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettingsCallback.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettingsCallback.java @@ -52,8 +52,9 @@ public interface WindowMagnificationSettingsCallback { * Called when set magnification scale. * * @param scale Magnification scale value. + * @param updatePersistence whether the scale should be persisted */ - void onMagnifierScale(float scale); + void onMagnifierScale(float scale, boolean updatePersistence); /** * Called when magnification mode changed. diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java index e18161d658a89..a25e9a20f81c5 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java @@ -44,8 +44,9 @@ interface WindowMagnifierCallback { * * @param displayId The logical display id. * @param scale the target scale, or {@link Float#NaN} to leave unchanged + * @param updatePersistence whether the scale should be persisted */ - void onPerformScaleAction(int displayId, float scale); + void onPerformScaleAction(int displayId, float scale, boolean updatePersistence); /** * Called when the accessibility action is performed. diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java index 5bb25f82e7e29..9eead6a422ac5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java @@ -153,10 +153,11 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase { @Test public void testPanelOnMagnifierScale_delegateToCallback() { final float scale = 3.0f; + final boolean updatePersistence = true; mMagnificationSettingsController.mWindowMagnificationSettingsCallback - .onMagnifierScale(scale); + .onMagnifierScale(scale, updatePersistence); verify(mMagnificationSettingControllerCallback).onMagnifierScale( - eq(mContext.getDisplayId()), eq(scale)); + eq(mContext.getDisplayId()), eq(scale), eq(updatePersistence)); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index 31c09b8e7ec44..56f81606a2826 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -645,10 +645,12 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { assertTrue( mirrorView.performAccessibilityAction(R.id.accessibility_action_zoom_out, null)); // Minimum scale is 1.0. - verify(mWindowMagnifierCallback).onPerformScaleAction(eq(displayId), eq(1.0f)); + verify(mWindowMagnifierCallback).onPerformScaleAction( + eq(displayId), /* scale= */ eq(1.0f), /* updatePersistence= */ eq(true)); assertTrue(mirrorView.performAccessibilityAction(R.id.accessibility_action_zoom_in, null)); - verify(mWindowMagnifierCallback).onPerformScaleAction(eq(displayId), eq(2.5f)); + verify(mWindowMagnifierCallback).onPerformScaleAction( + eq(displayId), /* scale= */ eq(2.5f), /* updatePersistence= */ eq(true)); // TODO: Verify the final state when the mirror surface is visible. assertTrue(mirrorView.performAccessibilityAction(R.id.accessibility_action_move_up, null)); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java index 1da072f815c1d..eddb8d186d737 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java @@ -27,6 +27,7 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -438,7 +439,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { mZoomSeekbar.getSeekbar(), /* progress= */ 30, /* fromUser= */ false); verify(mWindowMagnificationSettingsCallback, never()) - .onMagnifierScale(/* scale= */ anyFloat()); + .onMagnifierScale(/* scale= */ anyFloat(), /* updatePersistence= */ eq(false)); } @Test @@ -471,6 +472,21 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { verifyCallbackOnMagnifierScale(8f); } + @Test + public void onSeekbarUserInteractionFinalized_persistedScaleUpdated() { + OnSeekBarWithIconButtonsChangeListener onChangeListener = + mZoomSeekbar.getOnSeekBarWithIconButtonsChangeListener(); + + mZoomSeekbar.setProgress(30); + onChangeListener.onUserInteractionFinalized( + mZoomSeekbar.getSeekbar(), + OnSeekBarWithIconButtonsChangeListener.ControlUnitType.SLIDER); + + // should trigger callback to update magnifier scale and persist the scale + verify(mWindowMagnificationSettingsCallback) + .onMagnifierScale(/* scale= */ eq(4f), /* updatePersistence= */ eq(true)); + } + @Test public void seekbarProgress_scaleUpdatedAfterSettingPanelOpened_progressAlsoUpdated() { setupMagnificationCapabilityAndMode( @@ -486,7 +502,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { private void verifyCallbackOnMagnifierScale(float scale) { verify(mWindowMagnificationSettingsCallback) - .onMagnifierScale(mCallbackMagnifierScaleCaptor.capture()); + .onMagnifierScale(mCallbackMagnifierScaleCaptor.capture(), anyBoolean()); assertThat(mCallbackMagnifierScaleCaptor.getValue()).isWithin(0.01f).of(scale); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java index db580742a68f6..d75781aee26c6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java @@ -163,13 +163,15 @@ public class WindowMagnificationTest extends SysuiTestCase { @Test public void onPerformScaleAction_enabled_notifyCallback() throws RemoteException { final float newScale = 4.0f; + final boolean updatePersistence = true; mCommandQueue.requestWindowMagnificationConnection(true); waitForIdleSync(); mWindowMagnification.mWindowMagnifierCallback - .onPerformScaleAction(TEST_DISPLAY, newScale); + .onPerformScaleAction(TEST_DISPLAY, newScale, updatePersistence); - verify(mConnectionCallback).onPerformScaleAction(TEST_DISPLAY, newScale); + verify(mConnectionCallback).onPerformScaleAction( + eq(TEST_DISPLAY), eq(newScale), eq(updatePersistence)); } @Test @@ -249,10 +251,12 @@ public class WindowMagnificationTest extends SysuiTestCase { mCommandQueue.requestWindowMagnificationConnection(true); waitForIdleSync(); final float scale = 3.0f; + final boolean updatePersistence = false; mWindowMagnification.mMagnificationSettingsControllerCallback.onMagnifierScale( - TEST_DISPLAY, scale); + TEST_DISPLAY, scale, updatePersistence); - verify(mConnectionCallback).onPerformScaleAction(eq(TEST_DISPLAY), eq(scale)); + verify(mConnectionCallback).onPerformScaleAction( + eq(TEST_DISPLAY), eq(scale), eq(updatePersistence)); } @Test diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java index f6948e9cbb3ba..effd8732d086c 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -172,14 +172,18 @@ public class MagnificationController implements WindowMagnificationManager.Callb } @Override - public void onPerformScaleAction(int displayId, float scale) { + public void onPerformScaleAction(int displayId, float scale, boolean updatePersistence) { if (getFullScreenMagnificationController().isActivated(displayId)) { getFullScreenMagnificationController().setScaleAndCenter(displayId, scale, Float.NaN, Float.NaN, false, MAGNIFICATION_GESTURE_HANDLER_ID); - getFullScreenMagnificationController().persistScale(displayId); + if (updatePersistence) { + getFullScreenMagnificationController().persistScale(displayId); + } } else if (getWindowMagnificationMgr().isWindowMagnifierEnabled(displayId)) { getWindowMagnificationMgr().setScale(displayId, scale); - getWindowMagnificationMgr().persistScale(displayId); + if (updatePersistence) { + getWindowMagnificationMgr().persistScale(displayId); + } } } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java index d96682c5529d8..816f22f8c7b09 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java @@ -167,8 +167,9 @@ public class WindowMagnificationManager implements * * @param displayId The logical display id. * @param scale the target scale, or {@link Float#NaN} to leave unchanged + * @param updatePersistence whether the scale should be persisted */ - void onPerformScaleAction(int displayId, float scale); + void onPerformScaleAction(int displayId, float scale, boolean updatePersistence); /** * Called when the accessibility action is performed. @@ -977,14 +978,15 @@ public class WindowMagnificationManager implements } @Override - public void onPerformScaleAction(int displayId, float scale) { + public void onPerformScaleAction(int displayId, float scale, boolean updatePersistence) { if (mTrace.isA11yTracingEnabledForTypes( FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK)) { mTrace.logTrace(TAG + "ConnectionCallback.onPerformScaleAction", FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK, - "displayId=" + displayId + ";scale=" + scale); + "displayId=" + displayId + ";scale=" + scale + + ";updatePersistence=" + updatePersistence); } - mCallback.onPerformScaleAction(displayId, scale); + mCallback.onPerformScaleAction(displayId, scale, updatePersistence); } @Override diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java index 81dd96195ee06..d4c6fad99645a 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java @@ -606,9 +606,10 @@ public class MagnificationControllerTest { public void onPerformScaleAction_fullScreenMagnifierEnabled_handleScaleChange() throws RemoteException { final float newScale = 4.0f; + final boolean updatePersistence = true; setMagnificationEnabled(MODE_FULLSCREEN); - mMagnificationController.onPerformScaleAction(TEST_DISPLAY, newScale); + mMagnificationController.onPerformScaleAction(TEST_DISPLAY, newScale, updatePersistence); verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY), eq(newScale), anyFloat(), anyFloat(), anyBoolean(), anyInt()); @@ -619,12 +620,13 @@ public class MagnificationControllerTest { public void onPerformScaleAction_windowMagnifierEnabled_handleScaleChange() throws RemoteException { final float newScale = 4.0f; + final boolean updatePersistence = false; setMagnificationEnabled(MODE_WINDOW); - mMagnificationController.onPerformScaleAction(TEST_DISPLAY, newScale); + mMagnificationController.onPerformScaleAction(TEST_DISPLAY, newScale, updatePersistence); verify(mWindowMagnificationManager).setScale(eq(TEST_DISPLAY), eq(newScale)); - verify(mWindowMagnificationManager).persistScale(eq(TEST_DISPLAY)); + verify(mWindowMagnificationManager, never()).persistScale(eq(TEST_DISPLAY)); } @Test @@ -1310,9 +1312,9 @@ public class MagnificationControllerTest { } @Override - public void onPerformScaleAction(int displayId, float scale) { + public void onPerformScaleAction(int displayId, float scale, boolean updatePersistence) { if (mCallback != null) { - mCallback.onPerformScaleAction(displayId, scale); + mCallback.onPerformScaleAction(displayId, scale, updatePersistence); } } diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java index e8b337ab97a7c..27e6ef199fe25 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java @@ -576,12 +576,15 @@ public class WindowMagnificationManagerTest { @Test public void onPerformScaleAction_magnifierEnabled_notifyAction() throws RemoteException { final float newScale = 4.0f; + final boolean updatePersistence = true; mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, NaN, NaN); - mMockConnection.getConnectionCallback().onPerformScaleAction(TEST_DISPLAY, newScale); + mMockConnection.getConnectionCallback().onPerformScaleAction( + TEST_DISPLAY, newScale, updatePersistence); - verify(mMockCallback).onPerformScaleAction(eq(TEST_DISPLAY), eq(newScale)); + verify(mMockCallback).onPerformScaleAction( + eq(TEST_DISPLAY), eq(newScale), eq(updatePersistence)); } @Test