Revert to the old style when the editor closes
Bug: 187177307
Test: EditingSessionTest.userStyleAndComplicationPreviewDataInEditorObserver
Change-Id: I6590f7f830fb560679a6fa7d94c8213d3750abe9
diff --git a/wear/wear-watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt b/wear/wear-watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt
index ef2ef3f..9e29113 100644
--- a/wear/wear-watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt
+++ b/wear/wear-watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt
@@ -1110,6 +1110,9 @@
val editorObserver = TestEditorObserver()
val observerId = EditorService.globalEditorService.registerObserver(editorObserver)
+ val oldWFColorStyleSetting = editorDelegate.userStyle[colorStyleSetting]!!.id.value
+ val oldWFWatchHandStyleSetting = editorDelegate.userStyle[watchHandStyleSetting]!!.id.value
+
scenario.onActivity { activity ->
runBlocking {
// Select [blueStyleOption] and [gothicStyleOption].
@@ -1135,11 +1138,12 @@
assertThat(result.watchFaceId.id).isEqualTo(testInstanceId.id)
assertTrue(result.shouldCommitChanges)
- // The style change should also have been applied to the watchface
+ // The style change shouldn't be applied to the watchface as it gets reverted to the old
+ // one when editor closes.
assertThat(editorDelegate.userStyle[colorStyleSetting]!!.id.value)
- .isEqualTo(blueStyleOption.id.value)
+ .isEqualTo(oldWFColorStyleSetting)
assertThat(editorDelegate.userStyle[watchHandStyleSetting]!!.id.value)
- .isEqualTo(gothicStyleOption.id.value)
+ .isEqualTo(oldWFWatchHandStyleSetting)
assertThat(result.previewComplicationsData.size).isEqualTo(2)
val leftComplicationData = result.previewComplicationsData[LEFT_COMPLICATION_ID] as
diff --git a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
index c974e38..eef4f27 100644
--- a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
+++ b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
@@ -77,7 +77,10 @@
* Interface for manipulating watch face state during an editing session for a watch face editing
* session. The editor should adjust [userStyle] and call [openComplicationProviderChooser] to
* configure the watch face and call [close] when done. This reports the updated [EditorState] to
- * the [EditorListener]s registered via [EditorServiceClient.addListener].
+ * the [EditorListener]s registered via [EditorServiceClient.addListener]. Style changes applied
+ * during the editor session are temporary and will be reverted when the editor session completes.
+ * In the event that the editor sessions results in a new watch face configuration that will be
+ * subsequently reapplied when the new configuration is provided by the system.
*/
public abstract class EditorSession : AutoCloseable {
/** The [ComponentName] of the watch face being edited. */
@@ -91,7 +94,8 @@
@get:RequiresApi(Build.VERSION_CODES.R)
public abstract val watchFaceId: WatchFaceId
- /** The current [UserStyle]. Assigning to this will cause the style to update. */
+ /** The current [UserStyle]. Assigning to this will cause the style to update. However, styling
+ * changes to the watch face will be reverted upon exit. */
public abstract var userStyle: UserStyle
/** The UTC reference preview time for this watch face in milliseconds since the epoch. */
@@ -113,10 +117,10 @@
* because there are circumstances where [ComponentActivity.onStop] doesn't get called but the
* UX requires us to commit changes.
*
- * If false upon exit for an on watch face editor, the original UserStyle is restored. Note we
- * need SysUI's help to revert any complication provider changes. Caveat some providers have
- * their own config (e.g. the world clock has a timezone setting) and that config currently
- * can't be reverted.
+ * Regardless of the value, on completion of the editor session, the original UserStyle is
+ * restored. Note we need SysUI's help to revert any complication provider changes. Caveat
+ * some providers have their own config (e.g. the world clock has a timezone setting) and
+ * that config currently can't be reverted.
*/
@get:UiThread
@get:JvmName("isCommitChangesOnClose")
@@ -665,8 +669,11 @@
if (this::editorDelegate.isInitialized) {
editorDelegate.onDestroy()
}
- // Revert any changes to the UserStyle if needed.
- if (!commitChangesOnClose && this::previousWatchFaceUserStyle.isInitialized) {
+ // Revert any changes to the user style that was set during the editing session. The
+ // system will update the user style and communicate it to the active watch face if
+ // needed. This guarantees that the system is always the source of truth for the current
+ // style.
+ if (this::previousWatchFaceUserStyle.isInitialized) {
userStyle = previousWatchFaceUserStyle
}
}