diff options
author | 2025-03-21 11:53:50 -0700 | |
---|---|---|
committer | 2025-03-21 15:35:34 -0700 | |
commit | d68fdb13331d530cbc0a03e87f354aacbd62da11 (patch) | |
tree | 593a41f86acd87b4bac53076a952ffd417cca454 | |
parent | 9075f39fca1e800d786ce4974214424bf74588cd (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.java | 11 | ||||
-rw-r--r-- | services/core/java/com/android/server/media/quality/MediaQualityService.java | 37 |
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); + } } |