[MQ] Add aidl directory and move aidl files

So they are better managed and can be used in
other languages in the future.

Test: atest MediaQualityTest
Flag: android.media.tv.flags.media_quality_fw
Bug: 400751153
Change-Id: I3f799e47e1443d7948f7d991bf4306ba24ac12dc
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
         );
     }