summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yixiao Luo <yixiaoluo@google.com> 2025-03-21 11:53:50 -0700
committer Yixiao Luo <yixiaoluo@google.com> 2025-03-21 15:35:34 -0700
commitd68fdb13331d530cbc0a03e87f354aacbd62da11 (patch)
tree593a41f86acd87b4bac53076a952ffd417cca454
parent9075f39fca1e800d786ce4974214424bf74588cd (diff)
Retrieve the default picture profile for each package when MQ service starts
Query the database to populate the default picture profiles into in-memory cache when MQ service starts. Keep the cache updated when a picture profile is created, updated, or removed. Bug: 405143664 Test: atest CtsMediaQualityTestCases Flag: android.media.tv.flags.media_quality_fw_bugfix Change-Id: Ia182151cde7e172d5d01924d8889602afc22561a
-rw-r--r--media/java/android/media/quality/PictureProfile.java11
-rw-r--r--services/core/java/com/android/server/media/quality/MediaQualityService.java37
2 files changed, 46 insertions, 2 deletions
diff --git a/media/java/android/media/quality/PictureProfile.java b/media/java/android/media/quality/PictureProfile.java
index 3bccd89c91c3..095dbb1ae2cf 100644
--- a/media/java/android/media/quality/PictureProfile.java
+++ b/media/java/android/media/quality/PictureProfile.java
@@ -18,6 +18,7 @@ package android.media.quality;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
+import android.annotation.StringDef;
import android.annotation.SystemApi;
import android.media.tv.TvInputInfo;
import android.media.tv.flags.Flags;
@@ -74,6 +75,16 @@ public final class PictureProfile implements Parcelable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
+ @StringDef(prefix = "NAME_", value = {
+ NAME_DEFAULT
+ })
+ public @interface ProfileName {}
+
+ /** @hide */
+ public static final String NAME_DEFAULT = "default";
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
@IntDef(flag = false, prefix = "ERROR_", value = {
ERROR_UNKNOWN,
ERROR_NO_PERMISSION,
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 d1dcd9d9fa75..c87f2c1f80db 100644
--- a/services/core/java/com/android/server/media/quality/MediaQualityService.java
+++ b/services/core/java/com/android/server/media/quality/MediaQualityService.java
@@ -165,6 +165,7 @@ public class MediaQualityService extends SystemService {
soundProfilePrefs, Context.MODE_PRIVATE);
}
+ @GuardedBy("mPictureProfileLock")
@Override
public void onStart() {
IBinder binder = ServiceManager.getService(IMediaQuality.DESCRIPTOR + "/default");
@@ -185,8 +186,22 @@ public class MediaQualityService extends SystemService {
mMediaQuality.setPictureProfileAdjustmentListener(mPictureProfileAdjListener);
mMediaQuality.setSoundProfileAdjustmentListener(mSoundProfileAdjListener);
- // TODO: populate mPackageDefaultPictureProfileHandleMap
-
+ synchronized (mPictureProfileLock) {
+ String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
+ + BaseParameters.PARAMETER_NAME + " = ?";
+ String[] selectionArguments = {
+ Integer.toString(PictureProfile.TYPE_SYSTEM),
+ PictureProfile.NAME_DEFAULT
+ };
+ List<PictureProfile> packageDefaultPictureProfiles =
+ mMqDatabaseUtils.getPictureProfilesBasedOnConditions(MediaQualityUtils
+ .getMediaProfileColumns(false), selection, selectionArguments);
+ mPackageDefaultPictureProfileHandleMap.clear();
+ for (PictureProfile profile : packageDefaultPictureProfiles) {
+ mPackageDefaultPictureProfileHandleMap.put(
+ profile.getPackageName(), profile.getHandle().getId());
+ }
+ }
} catch (RemoteException e) {
Slog.e(TAG, "Failed to set ambient backlight detector callback", e);
}
@@ -229,6 +244,10 @@ public class MediaQualityService extends SystemService {
pp.setProfileId(value);
mMqManagerNotifier.notifyOnPictureProfileAdded(value, pp,
Binder.getCallingUid(), Binder.getCallingPid());
+ if (isPackageDefaultPictureProfile(pp)) {
+ mPackageDefaultPictureProfileHandleMap.put(
+ pp.getPackageName(), pp.getHandle().getId());
+ }
}
}
);
@@ -253,6 +272,10 @@ public class MediaQualityService extends SystemService {
pp.getParameters());
updateDatabaseOnPictureProfileAndNotifyManagerAndHal(values,
pp.getParameters());
+ if (isPackageDefaultPictureProfile(pp)) {
+ mPackageDefaultPictureProfileHandleMap.put(
+ pp.getPackageName(), pp.getHandle().getId());
+ }
}
});
}
@@ -297,6 +320,11 @@ public class MediaQualityService extends SystemService {
mHalNotifier.notifyHalOnPictureProfileChange(dbId, null);
}
}
+
+ if (isPackageDefaultPictureProfile(toDelete)) {
+ mPackageDefaultPictureProfileHandleMap.remove(
+ toDelete.getPackageName());
+ }
}
});
}
@@ -1946,4 +1974,9 @@ public class MediaQualityService extends SystemService {
vendorBundleToByteArray, vendorBundleToByteArray.length);
pictureParameters.vendorPictureParameters.setParcelable(defaultExtension);
}
+
+ private boolean isPackageDefaultPictureProfile(PictureProfile pp) {
+ return pp != null && pp.getProfileType() == PictureProfile.TYPE_SYSTEM &&
+ pp.getName().equals(PictureProfile.NAME_DEFAULT);
+ }
}