diff --git a/Android.bp b/Android.bp
index 444725e..127556f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -415,6 +415,7 @@
         "mimemap",
         "av-types-aidl-java",
         "tv_tuner_resource_manager_aidl_interface-java",
+        "media_quality_aidl_interface-java",
         "soundtrigger_middleware-aidl-java",
         "modules-utils-binary-xml",
         "modules-utils-build",
diff --git a/media/java/Android.bp b/media/java/Android.bp
index 6878f9d..28b9d3b 100644
--- a/media/java/Android.bp
+++ b/media/java/Android.bp
@@ -15,6 +15,7 @@
     ],
     exclude_srcs: [
         ":framework-media-tv-tunerresourcemanager-sources-aidl",
+        ":framework-media-quality-sources-aidl",
     ],
     visibility: [
         "//frameworks/base",
diff --git a/media/java/android/media/quality/Android.bp b/media/java/android/media/quality/Android.bp
new file mode 100644
index 0000000..080d526
--- /dev/null
+++ b/media/java/android/media/quality/Android.bp
@@ -0,0 +1,39 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+filegroup {
+    name: "framework-media-quality-sources-aidl",
+    srcs: [
+        "aidl/android/media/quality/*.aidl",
+    ],
+    path: "aidl",
+}
+
+aidl_interface {
+    name: "media_quality_aidl_interface",
+    unstable: true,
+    local_include_dir: "aidl",
+    backend: {
+        java: {
+            enabled: true,
+        },
+        cpp: {
+            enabled: false,
+        },
+        ndk: {
+            enabled: false,
+        },
+        rust: {
+            enabled: false,
+        },
+    },
+    srcs: [
+        ":framework-media-quality-sources-aidl",
+    ],
+}
diff --git a/media/java/android/media/quality/IMediaQualityManager.aidl b/media/java/android/media/quality/IMediaQualityManager.aidl
deleted file mode 100644
index 6e9fa1d..0000000
--- a/media/java/android/media/quality/IMediaQualityManager.aidl
+++ /dev/null
@@ -1,81 +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 android.media.quality;
-
-import android.media.quality.AmbientBacklightSettings;
-import android.media.quality.IAmbientBacklightCallback;
-import android.media.quality.IPictureProfileCallback;
-import android.media.quality.ISoundProfileCallback;
-import android.media.quality.ParameterCapability;
-import android.media.quality.PictureProfileHandle;
-import android.media.quality.PictureProfile;
-import android.media.quality.SoundProfileHandle;
-import android.media.quality.SoundProfile;
-import android.os.Bundle;
-import android.os.UserHandle;
-
-/**
- * Interface for Media Quality Manager
- * @hide
- */
-interface IMediaQualityManager {
-    PictureProfile createPictureProfile(in PictureProfile pp, in UserHandle user);
-    void updatePictureProfile(in String id, in PictureProfile pp, in UserHandle user);
-    void removePictureProfile(in String id, in UserHandle user);
-    boolean setDefaultPictureProfile(in String id, in UserHandle user);
-    PictureProfile getPictureProfile(
-            in int type, in String name, in Bundle options, in UserHandle user);
-    List<PictureProfile> getPictureProfilesByPackage(
-            in String packageName, in Bundle options, in UserHandle user);
-    List<PictureProfile> getAvailablePictureProfiles(in Bundle options, in UserHandle user);
-    List<String> getPictureProfilePackageNames(in UserHandle user);
-    List<String> getPictureProfileAllowList(in UserHandle user);
-    void setPictureProfileAllowList(in List<String> packages, in UserHandle user);
-    List<PictureProfileHandle> getPictureProfileHandle(in String[] id, in UserHandle user);
-
-    SoundProfile createSoundProfile(in SoundProfile pp, in UserHandle user);
-    void updateSoundProfile(in String id, in SoundProfile pp, in UserHandle user);
-    void removeSoundProfile(in String id, in UserHandle user);
-    boolean setDefaultSoundProfile(in String id, in UserHandle user);
-    SoundProfile getSoundProfile(
-            in int type, in String name, in Bundle options, in UserHandle user);
-    List<SoundProfile> getSoundProfilesByPackage(
-            in String packageName, in Bundle options, in UserHandle user);
-    List<SoundProfile> getAvailableSoundProfiles(in Bundle options, in UserHandle user);
-    List<String> getSoundProfilePackageNames(in UserHandle user);
-    List<String> getSoundProfileAllowList(in UserHandle user);
-    void setSoundProfileAllowList(in List<String> packages, in UserHandle user);
-    List<SoundProfileHandle> getSoundProfileHandle(in String[] id, in UserHandle user);
-
-    void registerPictureProfileCallback(in IPictureProfileCallback cb);
-    void registerSoundProfileCallback(in ISoundProfileCallback cb);
-    void registerAmbientBacklightCallback(in IAmbientBacklightCallback cb);
-
-    List<ParameterCapability> getParameterCapabilities(in List<String> names, in UserHandle user);
-
-    boolean isSupported(in UserHandle user);
-    void setAutoPictureQualityEnabled(in boolean enabled, in UserHandle user);
-    boolean isAutoPictureQualityEnabled(in UserHandle user);
-    void setSuperResolutionEnabled(in boolean enabled, in UserHandle user);
-    boolean isSuperResolutionEnabled(in UserHandle user);
-    void setAutoSoundQualityEnabled(in boolean enabled, in UserHandle user);
-    boolean isAutoSoundQualityEnabled(in UserHandle user);
-
-    void setAmbientBacklightSettings(in AmbientBacklightSettings settings, in UserHandle user);
-    void setAmbientBacklightEnabled(in boolean enabled, in UserHandle user);
-    boolean isAmbientBacklightEnabled(in UserHandle user);
-}
diff --git a/media/java/android/media/quality/MediaQualityManager.java b/media/java/android/media/quality/MediaQualityManager.java
index 0d6d32a..bfd0138 100644
--- a/media/java/android/media/quality/MediaQualityManager.java
+++ b/media/java/android/media/quality/MediaQualityManager.java
@@ -274,9 +274,9 @@
             @NonNull String name,
             @Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
-            return mService.getPictureProfile(type, name, optionsBundle, mUserHandle);
+            boolean includeParams = options == null || options.mParametersIncluded;
+            return mService.getPictureProfile(
+                    type, name, includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -299,10 +299,9 @@
     public List<PictureProfile> getPictureProfilesByPackage(
             @NonNull String packageName, @Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
+            boolean includeParams = options == null || options.mParametersIncluded;
             return mService.getPictureProfilesByPackage(
-                    packageName, optionsBundle, mUserHandle);
+                    packageName, includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -321,9 +320,8 @@
     @NonNull
     public List<PictureProfile> getAvailablePictureProfiles(@Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
-            return mService.getAvailablePictureProfiles(optionsBundle, mUserHandle);
+            boolean includeParams = options == null || options.mParametersIncluded;
+            return mService.getAvailablePictureProfiles(includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -344,7 +342,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE)
     public boolean setDefaultPictureProfile(@Nullable String pictureProfileId) {
         try {
-            return mService.setDefaultPictureProfile(pictureProfileId, mUserHandle);
+            return mService.setDefaultPictureProfile(pictureProfileId, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -361,7 +359,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE)
     public List<String> getPictureProfilePackageNames() {
         try {
-            return mService.getPictureProfilePackageNames(mUserHandle);
+            return mService.getPictureProfilePackageNames(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -373,7 +371,7 @@
      */
     public List<PictureProfileHandle> getPictureProfileHandle(String[] id) {
         try {
-            return mService.getPictureProfileHandle(id, mUserHandle);
+            return mService.getPictureProfileHandle(id, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -385,7 +383,7 @@
      */
     public List<SoundProfileHandle> getSoundProfileHandle(String[] id) {
         try {
-            return mService.getSoundProfileHandle(id, mUserHandle);
+            return mService.getSoundProfileHandle(id, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -401,7 +399,7 @@
      */
     public void createPictureProfile(@NonNull PictureProfile pp) {
         try {
-            mService.createPictureProfile(pp, mUserHandle);
+            mService.createPictureProfile(pp, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -416,7 +414,7 @@
      */
     public void updatePictureProfile(@NonNull String profileId, @NonNull PictureProfile pp) {
         try {
-            mService.updatePictureProfile(profileId, pp, mUserHandle);
+            mService.updatePictureProfile(profileId, pp, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -430,7 +428,7 @@
      */
     public void removePictureProfile(@NonNull String profileId) {
         try {
-            mService.removePictureProfile(profileId, mUserHandle);
+            mService.removePictureProfile(profileId, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -484,9 +482,8 @@
             @NonNull String name,
             @Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
-            return mService.getSoundProfile(type, name, optionsBundle, mUserHandle);
+            boolean includeParams = options == null || options.mParametersIncluded;
+            return mService.getSoundProfile(type, name, includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -510,9 +507,9 @@
     public List<SoundProfile> getSoundProfilesByPackage(
             @NonNull String packageName, @Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
-            return mService.getSoundProfilesByPackage(packageName, optionsBundle, mUserHandle);
+            boolean includeParams = options == null || options.mParametersIncluded;
+            return mService.getSoundProfilesByPackage(
+                    packageName, includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -531,9 +528,8 @@
     @NonNull
     public List<SoundProfile> getAvailableSoundProfiles(@Nullable ProfileQueryParams options) {
         try {
-            Bundle optionsBundle = options == null
-                    ? ProfileQueryParams.DEFAULT.toBundle() : options.toBundle();
-            return mService.getAvailableSoundProfiles(optionsBundle, mUserHandle);
+            boolean includeParams = options == null || options.mParametersIncluded;
+            return mService.getAvailableSoundProfiles(includeParams, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -554,7 +550,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE)
     public boolean setDefaultSoundProfile(@Nullable String soundProfileId) {
         try {
-            return mService.setDefaultSoundProfile(soundProfileId, mUserHandle);
+            return mService.setDefaultSoundProfile(soundProfileId, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -572,7 +568,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE)
     public List<String> getSoundProfilePackageNames() {
         try {
-            return mService.getSoundProfilePackageNames(mUserHandle);
+            return mService.getSoundProfilePackageNames(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -589,7 +585,7 @@
      */
     public void createSoundProfile(@NonNull SoundProfile sp) {
         try {
-            mService.createSoundProfile(sp, mUserHandle);
+            mService.createSoundProfile(sp, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -604,7 +600,7 @@
      */
     public void updateSoundProfile(@NonNull String profileId, @NonNull SoundProfile sp) {
         try {
-            mService.updateSoundProfile(profileId, sp, mUserHandle);
+            mService.updateSoundProfile(profileId, sp, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -618,7 +614,7 @@
      */
     public void removeSoundProfile(@NonNull String profileId) {
         try {
-            mService.removeSoundProfile(profileId, mUserHandle);
+            mService.removeSoundProfile(profileId, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -636,7 +632,7 @@
     @NonNull
     public List<ParameterCapability> getParameterCapabilities(@NonNull List<String> names) {
         try {
-            return mService.getParameterCapabilities(names, mUserHandle);
+            return mService.getParameterCapabilities(names, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -654,7 +650,7 @@
     @NonNull
     public List<String> getPictureProfileAllowList() {
         try {
-            return mService.getPictureProfileAllowList(mUserHandle);
+            return mService.getPictureProfileAllowList(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -668,7 +664,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE)
     public void setPictureProfileAllowList(@NonNull List<String> packageNames) {
         try {
-            mService.setPictureProfileAllowList(packageNames, mUserHandle);
+            mService.setPictureProfileAllowList(packageNames, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -686,7 +682,7 @@
     @NonNull
     public List<String> getSoundProfileAllowList() {
         try {
-            return mService.getSoundProfileAllowList(mUserHandle);
+            return mService.getSoundProfileAllowList(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -700,7 +696,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE)
     public void setSoundProfileAllowList(@NonNull List<String> packageNames) {
         try {
-            mService.setSoundProfileAllowList(packageNames, mUserHandle);
+            mService.setSoundProfileAllowList(packageNames, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -712,7 +708,7 @@
      */
     public boolean isSupported() {
         try {
-            return mService.isSupported(mUserHandle);
+            return mService.isSupported(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -730,7 +726,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE)
     public void setAutoPictureQualityEnabled(boolean enabled) {
         try {
-            mService.setAutoPictureQualityEnabled(enabled, mUserHandle);
+            mService.setAutoPictureQualityEnabled(enabled, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -741,7 +737,7 @@
      */
     public boolean isAutoPictureQualityEnabled() {
         try {
-            return mService.isAutoPictureQualityEnabled(mUserHandle);
+            return mService.isAutoPictureQualityEnabled(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -758,7 +754,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE)
     public void setSuperResolutionEnabled(boolean enabled) {
         try {
-            mService.setSuperResolutionEnabled(enabled, mUserHandle);
+            mService.setSuperResolutionEnabled(enabled, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -769,7 +765,7 @@
      */
     public boolean isSuperResolutionEnabled() {
         try {
-            return mService.isSuperResolutionEnabled(mUserHandle);
+            return mService.isSuperResolutionEnabled(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -787,7 +783,7 @@
     @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE)
     public void setAutoSoundQualityEnabled(boolean enabled) {
         try {
-            mService.setAutoSoundQualityEnabled(enabled, mUserHandle);
+            mService.setAutoSoundQualityEnabled(enabled, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -798,7 +794,7 @@
      */
     public boolean isAutoSoundQualityEnabled() {
         try {
-            return mService.isAutoSoundQualityEnabled(mUserHandle);
+            return mService.isAutoSoundQualityEnabled(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -847,7 +843,7 @@
             @NonNull AmbientBacklightSettings settings) {
         Preconditions.checkNotNull(settings);
         try {
-            mService.setAmbientBacklightSettings(settings, mUserHandle);
+            mService.setAmbientBacklightSettings(settings, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -858,7 +854,7 @@
      */
     public boolean isAmbientBacklightEnabled() {
         try {
-            return mService.isAmbientBacklightEnabled(mUserHandle);
+            return mService.isAmbientBacklightEnabled(mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -872,7 +868,7 @@
     @RequiresPermission(android.Manifest.permission.READ_COLOR_ZONES)
     public void setAmbientBacklightEnabled(boolean enabled) {
         try {
-            mService.setAmbientBacklightEnabled(enabled, mUserHandle);
+            mService.setAmbientBacklightEnabled(enabled, mUserHandle.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
diff --git a/media/java/android/media/quality/SoundProfileHandle.java b/media/java/android/media/quality/SoundProfileHandle.java
deleted file mode 100644
index edb546e..0000000
--- a/media/java/android/media/quality/SoundProfileHandle.java
+++ /dev/null
@@ -1,72 +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 android.media.quality;
-
-import android.annotation.NonNull;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
-  * A type-safe handle to a sound profile.
-  *
-  * @hide
-  */
-public final class SoundProfileHandle implements Parcelable {
-    public static final @NonNull SoundProfileHandle NONE = new SoundProfileHandle(-1000);
-
-    private final long mId;
-
-    /** @hide */
-    public SoundProfileHandle(long id) {
-        mId = id;
-    }
-
-    /** @hide */
-    public long getId() {
-        return mId;
-    }
-
-    /** @hide */
-    @Override
-    public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeLong(mId);
-    }
-
-    /** @hide */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /** @hide */
-    public static final @NonNull Creator<SoundProfileHandle> CREATOR =
-            new Creator<SoundProfileHandle>() {
-                @Override
-                public SoundProfileHandle createFromParcel(Parcel in) {
-                    return new SoundProfileHandle(in);
-                }
-
-                @Override
-                public SoundProfileHandle[] newArray(int size) {
-                    return new SoundProfileHandle[size];
-                }
-            };
-
-    private SoundProfileHandle(@NonNull Parcel in) {
-        mId = in.readLong();
-    }
-}
diff --git a/media/java/android/media/quality/ActiveProcessingPicture.aidl b/media/java/android/media/quality/aidl/android/media/quality/ActiveProcessingPicture.aidl
similarity index 100%
rename from media/java/android/media/quality/ActiveProcessingPicture.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/ActiveProcessingPicture.aidl
diff --git a/media/java/android/media/quality/AmbientBacklightEvent.aidl b/media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightEvent.aidl
similarity index 100%
rename from media/java/android/media/quality/AmbientBacklightEvent.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightEvent.aidl
diff --git a/media/java/android/media/quality/AmbientBacklightMetadata.aidl b/media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightMetadata.aidl
similarity index 100%
rename from media/java/android/media/quality/AmbientBacklightMetadata.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightMetadata.aidl
diff --git a/media/java/android/media/quality/AmbientBacklightSettings.aidl b/media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightSettings.aidl
similarity index 100%
rename from media/java/android/media/quality/AmbientBacklightSettings.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/AmbientBacklightSettings.aidl
diff --git a/media/java/android/media/quality/IAmbientBacklightCallback.aidl b/media/java/android/media/quality/aidl/android/media/quality/IAmbientBacklightCallback.aidl
similarity index 100%
rename from media/java/android/media/quality/IAmbientBacklightCallback.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/IAmbientBacklightCallback.aidl
diff --git a/media/java/android/media/quality/aidl/android/media/quality/IMediaQualityManager.aidl b/media/java/android/media/quality/aidl/android/media/quality/IMediaQualityManager.aidl
new file mode 100644
index 0000000..0191ea7
--- /dev/null
+++ b/media/java/android/media/quality/aidl/android/media/quality/IMediaQualityManager.aidl
@@ -0,0 +1,81 @@
+/*
+ * 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 android.media.quality;
+
+import android.media.quality.AmbientBacklightSettings;
+import android.media.quality.IAmbientBacklightCallback;
+import android.media.quality.IPictureProfileCallback;
+import android.media.quality.ISoundProfileCallback;
+import android.media.quality.ParameterCapability;
+import android.media.quality.PictureProfileHandle;
+import android.media.quality.PictureProfile;
+import android.media.quality.SoundProfileHandle;
+import android.media.quality.SoundProfile;
+
+/**
+ * Interface for Media Quality Manager
+ * @hide
+ */
+interface IMediaQualityManager {
+    // TODO: use UserHandle
+    PictureProfile createPictureProfile(in PictureProfile pp, int userId);
+    void updatePictureProfile(in String id, in PictureProfile pp, int userId);
+    void removePictureProfile(in String id, int userId);
+    boolean setDefaultPictureProfile(in String id, int userId);
+    // TODO: use Bundle for includeParams
+    PictureProfile getPictureProfile(
+            in int type, in String name, in boolean includeParams, int userId);
+    List<PictureProfile> getPictureProfilesByPackage(
+            in String packageName, in boolean includeParams, int userId);
+    List<PictureProfile> getAvailablePictureProfiles(in boolean includeParams, int userId);
+    List<String> getPictureProfilePackageNames(int userId);
+    List<String> getPictureProfileAllowList(int userId);
+    void setPictureProfileAllowList(in List<String> packages, int userId);
+    List<PictureProfileHandle> getPictureProfileHandle(in String[] id, int userId);
+
+    SoundProfile createSoundProfile(in SoundProfile pp, int userId);
+    void updateSoundProfile(in String id, in SoundProfile pp, int userId);
+    void removeSoundProfile(in String id, int userId);
+    boolean setDefaultSoundProfile(in String id, int userId);
+    SoundProfile getSoundProfile(
+            in int type, in String name, in boolean includeParams, int userId);
+    List<SoundProfile> getSoundProfilesByPackage(
+            in String packageName, in boolean includeParams, int userId);
+    List<SoundProfile> getAvailableSoundProfiles(in boolean includeParams, int userId);
+    List<String> getSoundProfilePackageNames(int userId);
+    List<String> getSoundProfileAllowList(int userId);
+    void setSoundProfileAllowList(in List<String> packages, int userId);
+    List<SoundProfileHandle> getSoundProfileHandle(in String[] id, int userId);
+
+    void registerPictureProfileCallback(in IPictureProfileCallback cb);
+    void registerSoundProfileCallback(in ISoundProfileCallback cb);
+    void registerAmbientBacklightCallback(in IAmbientBacklightCallback cb);
+
+    List<ParameterCapability> getParameterCapabilities(in List<String> names, int userId);
+
+    boolean isSupported(int userId);
+    void setAutoPictureQualityEnabled(in boolean enabled, int userId);
+    boolean isAutoPictureQualityEnabled(int userId);
+    void setSuperResolutionEnabled(in boolean enabled, int userId);
+    boolean isSuperResolutionEnabled(int userId);
+    void setAutoSoundQualityEnabled(in boolean enabled, int userId);
+    boolean isAutoSoundQualityEnabled(int userId);
+
+    void setAmbientBacklightSettings(in AmbientBacklightSettings settings, int userId);
+    void setAmbientBacklightEnabled(in boolean enabled, int userId);
+    boolean isAmbientBacklightEnabled(int userId);
+}
diff --git a/media/java/android/media/quality/IPictureProfileCallback.aidl b/media/java/android/media/quality/aidl/android/media/quality/IPictureProfileCallback.aidl
similarity index 100%
rename from media/java/android/media/quality/IPictureProfileCallback.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/IPictureProfileCallback.aidl
diff --git a/media/java/android/media/quality/ISoundProfileCallback.aidl b/media/java/android/media/quality/aidl/android/media/quality/ISoundProfileCallback.aidl
similarity index 100%
rename from media/java/android/media/quality/ISoundProfileCallback.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/ISoundProfileCallback.aidl
diff --git a/media/java/android/media/quality/ParameterCapability.aidl b/media/java/android/media/quality/aidl/android/media/quality/ParameterCapability.aidl
similarity index 100%
rename from media/java/android/media/quality/ParameterCapability.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/ParameterCapability.aidl
diff --git a/media/java/android/media/quality/PictureProfile.aidl b/media/java/android/media/quality/aidl/android/media/quality/PictureProfile.aidl
similarity index 100%
rename from media/java/android/media/quality/PictureProfile.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/PictureProfile.aidl
diff --git a/media/java/android/media/quality/PictureProfileHandle.aidl b/media/java/android/media/quality/aidl/android/media/quality/PictureProfileHandle.aidl
similarity index 100%
rename from media/java/android/media/quality/PictureProfileHandle.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/PictureProfileHandle.aidl
diff --git a/media/java/android/media/quality/SoundProfile.aidl b/media/java/android/media/quality/aidl/android/media/quality/SoundProfile.aidl
similarity index 100%
rename from media/java/android/media/quality/SoundProfile.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/SoundProfile.aidl
diff --git a/media/java/android/media/quality/SoundProfileHandle.aidl b/media/java/android/media/quality/aidl/android/media/quality/SoundProfileHandle.aidl
similarity index 88%
rename from media/java/android/media/quality/SoundProfileHandle.aidl
rename to media/java/android/media/quality/aidl/android/media/quality/SoundProfileHandle.aidl
index 6b8161c..ea26b19 100644
--- a/media/java/android/media/quality/SoundProfileHandle.aidl
+++ b/media/java/android/media/quality/aidl/android/media/quality/SoundProfileHandle.aidl
@@ -16,4 +16,7 @@
 
 package android.media.quality;
 
-parcelable SoundProfileHandle;
+// TODO: add SoundProfileHandle.java
+parcelable SoundProfileHandle {
+    long id;
+}
diff --git a/services/core/java/com/android/server/media/quality/MediaQualityService.java b/services/core/java/com/android/server/media/quality/MediaQualityService.java
index 91a2843..9e38435 100644
--- a/services/core/java/com/android/server/media/quality/MediaQualityService.java
+++ b/services/core/java/com/android/server/media/quality/MediaQualityService.java
@@ -48,7 +48,6 @@
 import android.media.quality.IPictureProfileCallback;
 import android.media.quality.ISoundProfileCallback;
 import android.media.quality.MediaQualityContract.BaseParameters;
-import android.media.quality.MediaQualityManager;
 import android.media.quality.ParameterCapability;
 import android.media.quality.PictureProfile;
 import android.media.quality.PictureProfileHandle;
@@ -187,7 +186,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public PictureProfile createPictureProfile(PictureProfile pp, UserHandle user) {
+        public PictureProfile createPictureProfile(PictureProfile pp, int userId) {
             if ((pp.getPackageName() != null && !pp.getPackageName().isEmpty()
                     && !incomingPackageEqualsCallingUidPackage(pp.getPackageName()))
                     && !hasGlobalPictureQualityServicePermission()) {
@@ -221,7 +220,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public void updatePictureProfile(String id, PictureProfile pp, UserHandle user) {
+        public void updatePictureProfile(String id, PictureProfile pp, int userId) {
             Long dbId = mPictureProfileTempIdMap.getKey(id);
             if (!hasPermissionToUpdatePictureProfile(dbId, pp)) {
                 mMqManagerNotifier.notifyOnPictureProfileError(id,
@@ -249,7 +248,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public void removePictureProfile(String id, UserHandle user) {
+        public void removePictureProfile(String id, int userId) {
             synchronized (mPictureProfileLock) {
                 Long dbId = mPictureProfileTempIdMap.getKey(id);
 
@@ -290,10 +289,8 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public PictureProfile getPictureProfile(int type, String name, Bundle options,
-                UserHandle user) {
-            boolean includeParams =
-                    options.getBoolean(MediaQualityManager.OPTION_INCLUDE_PARAMETERS, false);
+        public PictureProfile getPictureProfile(int type, String name, boolean includeParams,
+                int userId) {
             String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                     + BaseParameters.PARAMETER_NAME + " = ? AND "
                     + BaseParameters.PARAMETER_PACKAGE + " = ?";
@@ -327,7 +324,7 @@
         @GuardedBy("mPictureProfileLock")
         @Override
         public List<PictureProfile> getPictureProfilesByPackage(
-                String packageName, Bundle options, UserHandle user) {
+                String packageName, boolean includeParams, int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -335,8 +332,6 @@
             }
 
             synchronized (mPictureProfileLock) {
-                boolean includeParams =
-                        options.getBoolean(MediaQualityManager.OPTION_INCLUDE_PARAMETERS, false);
                 String selection = BaseParameters.PARAMETER_PACKAGE + " = ?";
                 String[] selectionArguments = {packageName};
                 return mMqDatabaseUtils.getPictureProfilesBasedOnConditions(MediaQualityUtils
@@ -347,17 +342,17 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public List<PictureProfile> getAvailablePictureProfiles(Bundle options, UserHandle user) {
+        public List<PictureProfile> getAvailablePictureProfiles(boolean includeParams, int userId) {
             String packageName = getPackageOfCallingUid();
             if (packageName != null) {
-                return getPictureProfilesByPackage(packageName, options, user);
+                return getPictureProfilesByPackage(packageName, includeParams, userId);
             }
             return new ArrayList<>();
         }
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public boolean setDefaultPictureProfile(String profileId, UserHandle user) {
+        public boolean setDefaultPictureProfile(String profileId, int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(profileId,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -387,7 +382,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public List<String> getPictureProfilePackageNames(UserHandle user) {
+        public List<String> getPictureProfilePackageNames(int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -406,7 +401,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public List<PictureProfileHandle> getPictureProfileHandle(String[] ids, UserHandle user) {
+        public List<PictureProfileHandle> getPictureProfileHandle(String[] ids, int userId) {
             List<PictureProfileHandle> toReturn = new ArrayList<>();
             synchronized (mPictureProfileLock) {
                 for (String id : ids) {
@@ -423,13 +418,13 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public List<SoundProfileHandle> getSoundProfileHandle(String[] ids, UserHandle user) {
+        public List<SoundProfileHandle> getSoundProfileHandle(String[] ids, int userId) {
             List<SoundProfileHandle> toReturn = new ArrayList<>();
             synchronized (mSoundProfileLock) {
                 for (String id : ids) {
                     Long key = mSoundProfileTempIdMap.getKey(id);
                     if (key != null) {
-                        toReturn.add(new SoundProfileHandle(key));
+                        toReturn.add(MediaQualityUtils.SOUND_PROFILE_HANDLE_NONE);
                     } else {
                         toReturn.add(null);
                     }
@@ -440,7 +435,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public SoundProfile createSoundProfile(SoundProfile sp, UserHandle user) {
+        public SoundProfile createSoundProfile(SoundProfile sp, int userId) {
             if ((sp.getPackageName() != null && !sp.getPackageName().isEmpty()
                     && !incomingPackageEqualsCallingUidPackage(sp.getPackageName()))
                     && !hasGlobalPictureQualityServicePermission()) {
@@ -473,7 +468,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public void updateSoundProfile(String id, SoundProfile sp, UserHandle user) {
+        public void updateSoundProfile(String id, SoundProfile sp, int userId) {
             Long dbId = mSoundProfileTempIdMap.getKey(id);
             if (!hasPermissionToUpdateSoundProfile(dbId, sp)) {
                 mMqManagerNotifier.notifyOnSoundProfileError(id, SoundProfile.ERROR_NO_PERMISSION,
@@ -502,7 +497,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public void removeSoundProfile(String id, UserHandle user) {
+        public void removeSoundProfile(String id, int userId) {
             synchronized (mSoundProfileLock) {
                 Long dbId = mSoundProfileTempIdMap.getKey(id);
                 SoundProfile toDelete = mMqDatabaseUtils.getSoundProfile(dbId);
@@ -542,10 +537,8 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public SoundProfile getSoundProfile(int type, String name, Bundle options,
-                UserHandle user) {
-            boolean includeParams =
-                    options.getBoolean(MediaQualityManager.OPTION_INCLUDE_PARAMETERS, false);
+        public SoundProfile getSoundProfile(int type, String name, boolean includeParams,
+                int userId) {
             String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                     + BaseParameters.PARAMETER_NAME + " = ? AND "
                     + BaseParameters.PARAMETER_PACKAGE + " = ?";
@@ -579,15 +572,13 @@
         @GuardedBy("mSoundProfileLock")
         @Override
         public List<SoundProfile> getSoundProfilesByPackage(
-                String packageName, Bundle options, UserHandle user) {
+                String packageName, boolean includeParams, int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION,
                         Binder.getCallingUid(), Binder.getCallingPid());
             }
 
             synchronized (mSoundProfileLock) {
-                boolean includeParams =
-                        options.getBoolean(MediaQualityManager.OPTION_INCLUDE_PARAMETERS, false);
                 String selection = BaseParameters.PARAMETER_PACKAGE + " = ?";
                 String[] selectionArguments = {packageName};
                 return mMqDatabaseUtils.getSoundProfilesBasedOnConditions(MediaQualityUtils
@@ -598,17 +589,17 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public List<SoundProfile> getAvailableSoundProfiles(Bundle options, UserHandle user) {
+        public List<SoundProfile> getAvailableSoundProfiles(boolean includeParams, int userId) {
             String packageName = getPackageOfCallingUid();
             if (packageName != null) {
-                return getSoundProfilesByPackage(packageName, options, user);
+                return getSoundProfilesByPackage(packageName, includeParams, userId);
             }
             return new ArrayList<>();
         }
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public boolean setDefaultSoundProfile(String profileId, UserHandle user) {
+        public boolean setDefaultSoundProfile(String profileId, int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(profileId,
                         SoundProfile.ERROR_NO_PERMISSION,
@@ -638,7 +629,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public List<String> getSoundProfilePackageNames(UserHandle user) {
+        public List<String> getSoundProfilePackageNames(int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION,
                         Binder.getCallingUid(), Binder.getCallingPid());
@@ -737,7 +728,7 @@
         @GuardedBy("mAmbientBacklightLock")
         @Override
         public void setAmbientBacklightSettings(
-                AmbientBacklightSettings settings, UserHandle user) {
+                AmbientBacklightSettings settings, int userId) {
             if (DEBUG) {
                 Slogf.d(TAG, "setAmbientBacklightSettings " + settings);
             }
@@ -775,7 +766,7 @@
 
         @GuardedBy("mAmbientBacklightLock")
         @Override
-        public void setAmbientBacklightEnabled(boolean enabled, UserHandle user) {
+        public void setAmbientBacklightEnabled(boolean enabled, int userId) {
             if (DEBUG) {
                 Slogf.d(TAG, "setAmbientBacklightEnabled " + enabled);
             }
@@ -795,7 +786,7 @@
 
         @Override
         public List<ParameterCapability> getParameterCapabilities(
-                List<String> names, UserHandle user) {
+                List<String> names, int userId) {
             byte[] byteArray = MediaQualityUtils.convertParameterToByteArray(names);
             ParamCapability[] caps = new ParamCapability[byteArray.length];
             try {
@@ -828,7 +819,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public List<String> getPictureProfileAllowList(UserHandle user) {
+        public List<String> getPictureProfileAllowList(int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -844,7 +835,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public void setPictureProfileAllowList(List<String> packages, UserHandle user) {
+        public void setPictureProfileAllowList(List<String> packages, int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -857,7 +848,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public List<String> getSoundProfileAllowList(UserHandle user) {
+        public List<String> getSoundProfileAllowList(int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION,
                         Binder.getCallingUid(), Binder.getCallingPid());
@@ -872,7 +863,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public void setSoundProfileAllowList(List<String> packages, UserHandle user) {
+        public void setSoundProfileAllowList(List<String> packages, int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION,
                         Binder.getCallingUid(), Binder.getCallingPid());
@@ -883,13 +874,13 @@
         }
 
         @Override
-        public boolean isSupported(UserHandle user) {
+        public boolean isSupported(int userId) {
             return false;
         }
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public void setAutoPictureQualityEnabled(boolean enabled, UserHandle user) {
+        public void setAutoPictureQualityEnabled(boolean enabled, int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -910,7 +901,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public boolean isAutoPictureQualityEnabled(UserHandle user) {
+        public boolean isAutoPictureQualityEnabled(int userId) {
             synchronized (mPictureProfileLock) {
                 try {
                     if (mMediaQuality != null) {
@@ -927,7 +918,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public void setSuperResolutionEnabled(boolean enabled, UserHandle user) {
+        public void setSuperResolutionEnabled(boolean enabled, int userId) {
             if (!hasGlobalPictureQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnPictureProfileError(null,
                         PictureProfile.ERROR_NO_PERMISSION,
@@ -948,7 +939,7 @@
 
         @GuardedBy("mPictureProfileLock")
         @Override
-        public boolean isSuperResolutionEnabled(UserHandle user) {
+        public boolean isSuperResolutionEnabled(int userId) {
             synchronized (mPictureProfileLock) {
                 try {
                     if (mMediaQuality != null) {
@@ -965,7 +956,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public void setAutoSoundQualityEnabled(boolean enabled, UserHandle user) {
+        public void setAutoSoundQualityEnabled(boolean enabled, int userId) {
             if (!hasGlobalSoundQualityServicePermission()) {
                 mMqManagerNotifier.notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION,
                         Binder.getCallingUid(), Binder.getCallingPid());
@@ -986,7 +977,7 @@
 
         @GuardedBy("mSoundProfileLock")
         @Override
-        public boolean isAutoSoundQualityEnabled(UserHandle user) {
+        public boolean isAutoSoundQualityEnabled(int userId) {
             synchronized (mSoundProfileLock) {
                 try {
                     if (mMediaQuality != null) {
@@ -1003,7 +994,7 @@
 
         @GuardedBy("mAmbientBacklightLock")
         @Override
-        public boolean isAmbientBacklightEnabled(UserHandle user) {
+        public boolean isAmbientBacklightEnabled(int userId) {
             return false;
         }
     }
diff --git a/services/core/java/com/android/server/media/quality/MediaQualityUtils.java b/services/core/java/com/android/server/media/quality/MediaQualityUtils.java
index 88d3f1f..303c967 100644
--- a/services/core/java/com/android/server/media/quality/MediaQualityUtils.java
+++ b/services/core/java/com/android/server/media/quality/MediaQualityUtils.java
@@ -60,6 +60,11 @@
     private static final String TAG = "MediaQualityUtils";
     public static final String SETTINGS = "settings";
 
+    public static final SoundProfileHandle SOUND_PROFILE_HANDLE_NONE = new SoundProfileHandle();
+    static {
+        SOUND_PROFILE_HANDLE_NONE.id = -10000;
+    }
+
     /**
      * Convert PictureParameter List to PersistableBundle.
      */
@@ -1022,7 +1027,7 @@
                 getInputId(cursor),
                 getPackageName(cursor),
                 jsonToPersistableBundle(getSettingsString(cursor)),
-                SoundProfileHandle.NONE
+                SOUND_PROFILE_HANDLE_NONE
         );
     }
 
