Revert "Integrate Settings with Preference Service"
This reverts commit 9edbc798bf4dbe37b7faf80c8d2d736f2c5d7fa5.
Reason for revert: Likely culprit for b/382590599 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.
Change-Id: Ib41c13e8ba2e0eaa1ec31486ccf1f61f55793e95
diff --git a/Android.bp b/Android.bp
index 907ff12..a160785 100644
--- a/Android.bp
+++ b/Android.bp
@@ -132,7 +132,6 @@
],
flags_packages: [
"aconfig_settings_flags",
- "aconfig_settingslib_flags",
"android.app.flags-aconfig",
"android.provider.flags-aconfig",
"android.security.flags-aconfig",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2295ee3..db2e0d4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5412,17 +5412,6 @@
</intent-filter>
</service>
- <!-- Service to expose Preference Metadata and Get/Set functionality -->
- <service
- android:name=".service.PreferenceService"
- android:exported="true"
- android:featureFlag="com.android.settingslib.flags.settings_catalyst"
- android:permission="android.permission.READ_SYSTEM_PREFERENCES">
- <intent-filter>
- <action android:name="android.service.settings.preferences.action.PREFERENCE_SERVICE" />
- </intent-filter>
- </service>
-
<receiver android:name="com.android.settings.connecteddevice.audiosharing.AudioSharingReceiver"
android:exported="false">
<intent-filter>
diff --git a/src/com/android/settings/service/PreferenceService.kt b/src/com/android/settings/service/PreferenceService.kt
deleted file mode 100644
index 3a67762..0000000
--- a/src/com/android/settings/service/PreferenceService.kt
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.service
-
-import android.os.Binder
-import android.os.OutcomeReceiver
-import android.os.Process
-import android.service.settings.preferences.GetValueRequest
-import android.service.settings.preferences.GetValueResult
-import android.service.settings.preferences.MetadataRequest
-import android.service.settings.preferences.MetadataResult
-import android.service.settings.preferences.SetValueRequest
-import android.service.settings.preferences.SetValueResult
-import android.service.settings.preferences.SettingsPreferenceService
-import com.android.settingslib.graph.PreferenceGetterApiHandler
-import com.android.settingslib.graph.PreferenceSetterApiHandler
-import com.android.settingslib.ipc.ApiPermissionChecker
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
-import java.lang.Exception
-
-class PreferenceService : SettingsPreferenceService() {
-
- private val scope = CoroutineScope(Job() + Dispatchers.Main)
-
- private val getApiHandler = PreferenceGetterApiHandler(1, ApiPermissionChecker.alwaysAllow())
- private val setApiHandler = PreferenceSetterApiHandler(2, ApiPermissionChecker.alwaysAllow())
-
- override fun onGetAllPreferenceMetadata(
- request: MetadataRequest,
- callback: OutcomeReceiver<MetadataResult, Exception>
- ) {
- // TODO(379750656): Update graph API to be usable outside SettingsLib
- callback.onError(UnsupportedOperationException("Not yet supported"))
- }
-
- override fun onGetPreferenceValue(
- request: GetValueRequest,
- callback: OutcomeReceiver<GetValueResult, Exception>
- ) {
- scope.launch(Dispatchers.IO) {
- val apiRequest = transformFrameworkGetValueRequest(request)
- val response = getApiHandler.invoke(application, Process.myUid(),
- Binder.getCallingPid(), apiRequest)
- val result = transformCatalystGetValueResponse(
- this@PreferenceService,
- request,
- response
- )
- if (result == null) {
- callback.onError(IllegalStateException("No response"))
- } else {
- callback.onResult(result)
- }
- }
- }
-
- override fun onSetPreferenceValue(
- request: SetValueRequest,
- callback: OutcomeReceiver<SetValueResult, Exception>
- ) {
- scope.launch(Dispatchers.IO) {
- val apiRequest = transformFrameworkSetValueRequest(request)
- if (apiRequest == null) {
- callback.onResult(
- SetValueResult.Builder(SetValueResult.RESULT_INVALID_REQUEST).build()
- )
- } else {
- val response = setApiHandler.invoke(application, Process.myUid(),
- Binder.getCallingPid(), apiRequest)
-
- callback.onResult(transformCatalystSetValueResponse(response))
- }
- }
- }
-}
diff --git a/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt b/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt
deleted file mode 100644
index 7a4c7fc..0000000
--- a/src/com/android/settings/service/PreferenceServiceRequestTransformer.kt
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.service
-
-import android.content.Context
-import android.service.settings.preferences.GetValueRequest
-import android.service.settings.preferences.GetValueResult
-import android.service.settings.preferences.SetValueRequest
-import android.service.settings.preferences.SetValueResult
-import android.service.settings.preferences.SettingsPreferenceMetadata
-import android.service.settings.preferences.SettingsPreferenceValue
-import com.android.settingslib.graph.PreferenceCoordinate
-import com.android.settingslib.graph.PreferenceGetterErrorCode
-import com.android.settingslib.graph.PreferenceGetterFlags
-import com.android.settingslib.graph.PreferenceGetterRequest
-import com.android.settingslib.graph.PreferenceGetterResponse
-import com.android.settingslib.graph.PreferenceSetterRequest
-import com.android.settingslib.graph.PreferenceSetterResult
-import com.android.settingslib.graph.preferenceValueProto
-import com.android.settingslib.graph.proto.PreferenceProto
-import com.android.settingslib.graph.proto.PreferenceValueProto
-import com.android.settingslib.graph.getText
-import com.android.settingslib.graph.toIntent
-import com.android.settingslib.metadata.SensitivityLevel
-
-/** Translate Framework GET VALUE request to Catalyst GET VALUE request */
-fun transformFrameworkGetValueRequest(
- request: GetValueRequest,
- flags: Int = PreferenceGetterFlags.ALL
-): PreferenceGetterRequest {
- val coord = PreferenceCoordinate(request.screenKey, request.preferenceKey)
- return PreferenceGetterRequest(
- arrayOf(coord),
- flags
- )
-}
-
-/** Translate Catalyst GET VALUE result to Framework GET VALUE result */
-fun transformCatalystGetValueResponse(
- context: Context,
- request: GetValueRequest,
- response: PreferenceGetterResponse
-): GetValueResult? {
- val coord = PreferenceCoordinate(request.screenKey, request.preferenceKey)
- val errorResponse = response.errors[coord]
- val valueResponse = response.preferences[coord]
- when {
- errorResponse != null -> {
- val errorCode = when (errorResponse) {
- PreferenceGetterErrorCode.NOT_FOUND -> GetValueResult.RESULT_UNSUPPORTED
- PreferenceGetterErrorCode.DISALLOW -> GetValueResult.RESULT_DISALLOW
- else -> GetValueResult.RESULT_INTERNAL_ERROR
- }
- 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()
- }
- else -> return null
- }
-}
-
-/** Translate Framework SET VALUE request to Catalyst SET VALUE request */
-fun transformFrameworkSetValueRequest(request: SetValueRequest): PreferenceSetterRequest? {
- val valueProto = when (request.preferenceValue.type) {
- SettingsPreferenceValue.TYPE_BOOLEAN -> preferenceValueProto {
- booleanValue = request.preferenceValue.booleanValue
- }
- SettingsPreferenceValue.TYPE_INT -> preferenceValueProto {
- intValue = request.preferenceValue.intValue
- }
- else -> null
- }
- return valueProto?.let {
- PreferenceSetterRequest(request.screenKey, request.preferenceKey, it)
- }
-}
-
-/** Translate Catalyst SET VALUE result to Framework SET VALUE result */
-fun transformCatalystSetValueResponse(@PreferenceSetterResult response: Int): SetValueResult {
- val resultCode = when (response) {
- PreferenceSetterResult.OK -> SetValueResult.RESULT_OK
- PreferenceSetterResult.UNAVAILABLE -> SetValueResult.RESULT_UNAVAILABLE
- PreferenceSetterResult.DISABLED -> SetValueResult.RESULT_DISABLED
- PreferenceSetterResult.UNSUPPORTED -> SetValueResult.RESULT_UNSUPPORTED
- PreferenceSetterResult.DISALLOW -> SetValueResult.RESULT_DISALLOW
- PreferenceSetterResult.REQUIRE_APP_PERMISSION ->
- SetValueResult.RESULT_REQUIRE_APP_PERMISSION
- PreferenceSetterResult.REQUIRE_USER_AGREEMENT -> SetValueResult.RESULT_REQUIRE_USER_CONSENT
- PreferenceSetterResult.RESTRICTED -> SetValueResult.RESULT_RESTRICTED
- PreferenceSetterResult.INVALID_REQUEST -> SetValueResult.RESULT_INVALID_REQUEST
- else -> SetValueResult.RESULT_INTERNAL_ERROR
- }
- return SetValueResult.Builder(resultCode).build()
-}
-
-private fun PreferenceProto.toMetadata(
- context: Context,
- screenKey: String
-): SettingsPreferenceMetadata {
- val sensitivity = when (sensitivityLevel) {
- SensitivityLevel.NO_SENSITIVITY -> SettingsPreferenceMetadata.NO_SENSITIVITY
- SensitivityLevel.LOW_SENSITIVITY -> SettingsPreferenceMetadata.EXPECT_POST_CONFIRMATION
- SensitivityLevel.MEDIUM_SENSITIVITY -> SettingsPreferenceMetadata.EXPECT_PRE_CONFIRMATION
- else -> SettingsPreferenceMetadata.NO_DIRECT_ACCESS
- }
- return SettingsPreferenceMetadata.Builder(screenKey, key)
- .setTitle(title.getText(context))
- .setSummary(summary.getText(context))
- .setEnabled(enabled)
- .setAvailable(available)
- .setRestricted(restricted)
- .setWritable(persistent)
- .setLaunchIntent(launchIntent.toIntent())
- .setWriteSensitivity(sensitivity)
- .build()
-}
diff --git a/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt b/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt
deleted file mode 100644
index f064b22..0000000
--- a/tests/robotests/src/com/android/settings/service/PreferenceServiceRequestTransformerTest.kt
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.service
-
-import android.content.ComponentName
-import android.content.Context
-import android.content.Intent
-import android.platform.test.annotations.RequiresFlagsEnabled
-import android.platform.test.flag.junit.CheckFlagsRule
-import android.platform.test.flag.junit.DeviceFlagsValueProvider
-import android.service.settings.preferences.GetValueRequest
-import android.service.settings.preferences.GetValueResult
-import android.service.settings.preferences.SetValueRequest
-import android.service.settings.preferences.SetValueResult
-import android.service.settings.preferences.SettingsPreferenceMetadata
-import android.service.settings.preferences.SettingsPreferenceValue
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settings.homepage.SettingsHomepageActivity
-import com.android.settingslib.flags.Flags.FLAG_SETTINGS_CATALYST
-import com.android.settingslib.graph.PreferenceCoordinate
-import com.android.settingslib.graph.PreferenceGetterErrorCode
-import com.android.settingslib.graph.PreferenceGetterFlags
-import com.android.settingslib.graph.PreferenceGetterResponse
-import com.android.settingslib.graph.PreferenceSetterResult
-import com.android.settingslib.graph.proto.PreferenceProto
-import com.android.settingslib.graph.proto.PreferenceValueProto
-import com.android.settingslib.graph.proto.TextProto
-import com.android.settingslib.graph.toProto
-import com.android.settingslib.metadata.SensitivityLevel
-import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@RequiresFlagsEnabled(FLAG_SETTINGS_CATALYST)
-class PreferenceServiceRequestTransformerTest {
-
- @get:Rule
- val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
-
- @Test
- fun transformFrameworkGetValueRequest_returnsValidCatalystRequest() {
- val fRequest = GetValueRequest.Builder("screen", "pref").build()
- val cRequest = transformFrameworkGetValueRequest(fRequest)
- with(cRequest) {
- assertThat(preferences).hasLength(1)
- assertThat(preferences.first().screenKey).isEqualTo(fRequest.screenKey)
- assertThat(preferences.first().key).isEqualTo(fRequest.preferenceKey)
- assertThat(flags).isEqualTo(PreferenceGetterFlags.ALL)
- }
- }
-
- @Test
- fun transformCatalystGetValueResponse_success_returnsValidFrameworkResponse() {
- val context: Context = ApplicationProvider.getApplicationContext()
- val fRequest = GetValueRequest.Builder("screen", "key").build()
- val cResult = PreferenceGetterResponse(
- emptyMap(),
- mapOf(
- PreferenceCoordinate(fRequest.screenKey, fRequest.preferenceKey) to
- PreferenceProto.newBuilder()
- .setKey("key")
- .setTitle(TextProto.newBuilder().setString("title"))
- .setSummary(TextProto.newBuilder().setString("summary"))
- .setEnabled(true)
- .setAvailable(true)
- .setRestricted(true)
- .setPersistent(true)
- .setSensitivityLevel(SensitivityLevel.LOW_SENSITIVITY)
- .setLaunchIntent(
- Intent(context, SettingsHomepageActivity::class.java).toProto()
- )
- .setValue(PreferenceValueProto.newBuilder().setBooleanValue(true))
- .build()
- )
- )
- val fResult = transformCatalystGetValueResponse(context, fRequest, cResult)
- assertThat(fResult!!.resultCode).isEqualTo(GetValueResult.RESULT_OK)
- with(fResult.metadata!!) {
- assertThat(title).isEqualTo("title")
- assertThat(summary).isEqualTo("summary")
- assertThat(isEnabled).isTrue()
- assertThat(isAvailable).isTrue()
- assertThat(isRestricted).isTrue()
- assertThat(isWritable).isTrue()
- assertThat(writeSensitivity)
- .isEqualTo(SettingsPreferenceMetadata.EXPECT_POST_CONFIRMATION)
- assertThat(launchIntent).isNotNull()
- assertThat(launchIntent!!.component!!.className)
- .isEqualTo(SettingsHomepageActivity::class.java.name)
- }
- with(fResult.value!!) {
- assertThat(type).isEqualTo(SettingsPreferenceValue.TYPE_BOOLEAN)
- assertThat(booleanValue).isTrue()
- }
- }
-
- @Test
- fun transformCatalystGetValueResponse_failure_returnsValidFrameworkResponse() {
- val context: Context = ApplicationProvider.getApplicationContext()
- val fRequest = GetValueRequest.Builder("screen", "key").build()
- val cResult = PreferenceGetterResponse(
- mapOf(
- PreferenceCoordinate(fRequest.screenKey, fRequest.preferenceKey) to
- PreferenceGetterErrorCode.NOT_FOUND
- ),
- emptyMap()
- )
- val fResult = transformCatalystGetValueResponse(context, fRequest, cResult)
- with(fResult!!) {
- assertThat(resultCode).isEqualTo(GetValueResult.RESULT_UNSUPPORTED)
- assertThat(metadata).isNull()
- assertThat(value).isNull()
- }
- }
-
- @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)
- assertThat(fResult).isNull()
- }
-
- @Test
- fun transformFrameworkSetValueRequest_typeBoolean_returnsValidCatalystRequest() {
- val fRequest = SetValueRequest.Builder(
- "screen",
- "pref",
- SettingsPreferenceValue.Builder(SettingsPreferenceValue.TYPE_BOOLEAN)
- .setBooleanValue(true)
- .build()
- ).build()
- val cRequest = transformFrameworkSetValueRequest(fRequest)
- with(cRequest!!) {
- assertThat(screenKey).isEqualTo(fRequest.screenKey)
- assertThat(key).isEqualTo(fRequest.preferenceKey)
- assertThat(value.hasBooleanValue()).isTrue()
- assertThat(value.booleanValue).isTrue()
- }
- }
-
- @Test
- fun transformFrameworkSetValueRequest_typeInt_returnsValidCatalystRequest() {
- val fRequest = SetValueRequest.Builder(
- "screen",
- "pref",
- SettingsPreferenceValue.Builder(SettingsPreferenceValue.TYPE_INT)
- .setIntValue(5)
- .build()
- ).build()
- val cRequest = transformFrameworkSetValueRequest(fRequest)
- with(cRequest!!) {
- assertThat(screenKey).isEqualTo(fRequest.screenKey)
- assertThat(key).isEqualTo(fRequest.preferenceKey)
- assertThat(value.hasIntValue()).isTrue()
- assertThat(value.intValue).isEqualTo(5)
- }
- }
-
- @Test
- fun transformFrameworkSetValueRequest_typeString_returnsNull() {
- val fRequest = SetValueRequest.Builder(
- "screen",
- "pref",
- SettingsPreferenceValue.Builder(SettingsPreferenceValue.TYPE_STRING)
- .setStringValue("value")
- .build()
- ).build()
- val cRequest = transformFrameworkSetValueRequest(fRequest)
- assertThat(cRequest).isNull()
- }
-
- @Test
- fun transformCatalystSetValueResponse_returnsValidFrameworkResponse() {
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.OK).resultCode
- ).isEqualTo(SetValueResult.RESULT_OK)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.UNAVAILABLE).resultCode
- ).isEqualTo(SetValueResult.RESULT_UNAVAILABLE)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.DISABLED).resultCode
- ).isEqualTo(SetValueResult.RESULT_DISABLED)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.UNSUPPORTED).resultCode
- ).isEqualTo(SetValueResult.RESULT_UNSUPPORTED)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.DISALLOW).resultCode
- ).isEqualTo(SetValueResult.RESULT_DISALLOW)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.REQUIRE_APP_PERMISSION)
- .resultCode
- ).isEqualTo(SetValueResult.RESULT_REQUIRE_APP_PERMISSION)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.REQUIRE_USER_AGREEMENT)
- .resultCode
- ).isEqualTo(SetValueResult.RESULT_REQUIRE_USER_CONSENT)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.RESTRICTED).resultCode
- ).isEqualTo(SetValueResult.RESULT_RESTRICTED)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.INVALID_REQUEST).resultCode
- ).isEqualTo(SetValueResult.RESULT_INVALID_REQUEST)
-
- assertThat(
- transformCatalystSetValueResponse(PreferenceSetterResult.INTERNAL_ERROR).resultCode
- ).isEqualTo(SetValueResult.RESULT_INTERNAL_ERROR)
- }
-}
\ No newline at end of file