From 02c378757fb0f1cd37471f2eb6cfc4d1411330b9 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Sat, 8 Feb 2025 12:32:48 +0800 Subject: [PATCH] [Catalyst] Provide GetValueResult.metadata whenever possible Fix: 394975570 Flag: com.android.settingslib.flags.settings_catalyst Test: atest Change-Id: Ifbe92902e0337f00d6b2154c7bad9fda460a4a78 --- .../PreferenceServiceRequestTransformer.kt | 51 ++++++++----------- ...PreferenceServiceRequestTransformerTest.kt | 22 ++++++-- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt b/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt index 6b33b07af88..b057d1421d4 100644 --- a/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt +++ b/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt @@ -101,9 +101,7 @@ fun transformFrameworkGetValueRequest( /** Translate Catalyst GET VALUE result to Framework GET VALUE result */ fun transformCatalystGetValueResponse( - context: Context, - request: GetValueRequest, - response: PreferenceGetterResponse + context: Context, request: GetValueRequest, response: PreferenceGetterResponse ): GetValueResult? { val coord = PreferenceCoordinate(request.screenKey, request.preferenceKey) val errorResponse = response.errors[coord] @@ -118,37 +116,32 @@ fun transformCatalystGetValueResponse( return GetValueResult.Builder(errorCode).build() } valueResponse != null -> { - val resultBuilder = GetValueResult.Builder(GetValueResult.RESULT_OK) - resultBuilder.setMetadata(valueResponse.toMetadata(context, coord.screenKey)) - val prefValue = valueResponse.value - when (prefValue.valueCase.number) { - PreferenceValueProto.BOOLEAN_VALUE_FIELD_NUMBER -> { - resultBuilder.setValue( - SettingsPreferenceValue.Builder( - SettingsPreferenceValue.TYPE_BOOLEAN - ).setBooleanValue(prefValue.booleanValue) - .build() - ) - return resultBuilder.build() - } - PreferenceValueProto.INT_VALUE_FIELD_NUMBER -> { - resultBuilder.setValue( - SettingsPreferenceValue.Builder( - SettingsPreferenceValue.TYPE_INT - ).setIntValue(prefValue.intValue) - .build() - ) - return resultBuilder.build() - } - } - return GetValueResult.Builder( - GetValueResult.RESULT_UNSUPPORTED - ).build() + val metadata = valueResponse.toMetadata(context, coord.screenKey) + val value = valueResponse.value.toSettingsPreferenceValue() + return when (value) { + null -> GetValueResult.Builder(GetValueResult.RESULT_UNSUPPORTED) + else -> GetValueResult.Builder(GetValueResult.RESULT_OK).setValue(value) + }.setMetadata(metadata).build() } else -> return null } } +private fun PreferenceValueProto.toSettingsPreferenceValue(): SettingsPreferenceValue? = + when (valueCase.number) { + PreferenceValueProto.BOOLEAN_VALUE_FIELD_NUMBER -> { + SettingsPreferenceValue.Builder( + SettingsPreferenceValue.TYPE_BOOLEAN + ).setBooleanValue(booleanValue) + } + PreferenceValueProto.INT_VALUE_FIELD_NUMBER -> { + SettingsPreferenceValue.Builder( + SettingsPreferenceValue.TYPE_INT + ).setIntValue(intValue) + } + else -> null + }?.build() + /** Translate Framework SET VALUE request to Catalyst SET VALUE request */ fun transformFrameworkSetValueRequest(request: SetValueRequest): PreferenceSetterRequest? { val valueProto = when (request.preferenceValue.type) { diff --git a/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt b/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt index 80cd2fdfcd4..636fab327b2 100644 --- a/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt +++ b/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt @@ -60,9 +60,10 @@ class PreferenceServiceRequestTransformerTest { @get:Rule val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + private val context: Context = ApplicationProvider.getApplicationContext() + @Test fun transformCatalystGetMetadataResponse_emptyGraph_returnsFrameworkResponseWithError() { - val context: Context = ApplicationProvider.getApplicationContext() val graphProto = PreferenceGraphProto.newBuilder().build() val fResult = transformCatalystGetMetadataResponse(context, graphProto) with(fResult) { @@ -73,7 +74,6 @@ class PreferenceServiceRequestTransformerTest { @Test fun transformCatalystGetMetadataResponse_populatedGraph_returnsFrameworkResponseWithSuccess() { - val context: Context = ApplicationProvider.getApplicationContext() val screen = preferenceScreenProto { root = preferenceGroupProto { addAllPreferences( @@ -143,7 +143,6 @@ class PreferenceServiceRequestTransformerTest { @Test fun transformCatalystGetValueResponse_success_returnsValidFrameworkResponse() { - val context: Context = ApplicationProvider.getApplicationContext() val fRequest = GetValueRequest.Builder("screen", "key").build() val cResult = PreferenceGetterResponse( @@ -202,9 +201,23 @@ class PreferenceServiceRequestTransformerTest { } } + @Test + fun transformCatalystGetValueResponse_success_noValue() { + val fRequest = GetValueRequest.Builder("screen", "key").build() + val cResult = PreferenceGetterResponse( + emptyMap(), + mapOf(PreferenceCoordinate( + fRequest.screenKey, + fRequest.preferenceKey + ) to preferenceProto { key = "key" }), + ) + val fResult = transformCatalystGetValueResponse(context, fRequest, cResult)!! + assertThat(fResult.resultCode).isEqualTo(GetValueResult.RESULT_UNSUPPORTED) + assertThat(fResult.metadata).isNotNull() + } + @Test fun transformCatalystGetValueResponse_failure_returnsValidFrameworkResponse() { - val context: Context = ApplicationProvider.getApplicationContext() val fRequest = GetValueRequest.Builder("screen", "key").build() val cResult = PreferenceGetterResponse( @@ -224,7 +237,6 @@ class PreferenceServiceRequestTransformerTest { @Test fun transformCatalystGetValueResponse_invalidResponse_returnsNull() { - val context: Context = ApplicationProvider.getApplicationContext() val fRequest = GetValueRequest.Builder("screen", "key").build() val cResult = PreferenceGetterResponse(emptyMap(), emptyMap()) val fResult = transformCatalystGetValueResponse(context, fRequest, cResult)