[Catalyst] Add settings service

Bug: 372981584
Flag: com.android.settings.flags.catalyst_service
Test: Manual
Change-Id: I0bb3752e65e879bd831b7d8c83ea160be32a893e
diff --git a/Android.bp b/Android.bp
index 28c3148..575f051 100644
--- a/Android.bp
+++ b/Android.bp
@@ -98,6 +98,7 @@
         "SettingsLibDataStore",
         "SettingsLibMetadata",
         "SettingsLibPreference",
+        "SettingsLibService",
         "aconfig_settings_flags_lib",
         "accessibility_settings_flags_lib",
         "contextualcards",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6408ab1..0025aba 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5299,6 +5299,17 @@
             android:enabled="true"
             android:exported="false" />
 
+        <!-- Once b/364771256 is fixed, add android:featureFlag="com.android.settings.flags.catalyst_service". -->
+        <!-- Permission is not yet finalized, use READ_BASIC_PHONE_STATE temporarily. -->
+        <service
+            android:name=".SettingsService"
+            android:exported="true"
+            android:permission="android.permission.READ_BASIC_PHONE_STATE">
+            <intent-filter>
+                <action android:name="com.android.settingslib.PREFERENCE_SERVICE" />
+            </intent-filter>
+        </service>
+
         <receiver android:name="com.android.settings.connecteddevice.audiosharing.AudioSharingReceiver"
             android:exported="false">
             <intent-filter>
diff --git a/aconfig/settings_flag_declarations.aconfig b/aconfig/settings_flag_declarations.aconfig
index a9c7bd5..6eb1e02 100644
--- a/aconfig/settings_flag_declarations.aconfig
+++ b/aconfig/settings_flag_declarations.aconfig
@@ -63,3 +63,10 @@
   description: "Flag for all screens"
   bug: "323791114"
 }
+
+flag {
+  name: "catalyst_service"
+  namespace: "android_settings"
+  description: "Flag for catalyst service"
+  bug: "323791114"
+}
diff --git a/src/com/android/settings/SettingsService.kt b/src/com/android/settings/SettingsService.kt
new file mode 100644
index 0000000..2cd706b
--- /dev/null
+++ b/src/com/android/settings/SettingsService.kt
@@ -0,0 +1,30 @@
+/*
+ * 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
+
+import android.content.Intent
+import android.os.IBinder
+import com.android.settings.flags.Flags
+import com.android.settingslib.service.PreferenceService
+
+/** Service to expose settings APIs. */
+class SettingsService : PreferenceService({ _, _, _ -> true }) {
+
+    override fun onBind(intent: Intent): IBinder? {
+        return if (!Flags.catalystService()) null else super.onBind(intent)
+    }
+}