Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d68fdb13 authored by Yixiao Luo's avatar Yixiao Luo
Browse files

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
parent 9075f39f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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;
@@ -72,6 +73,16 @@ public final class PictureProfile implements Parcelable {
     */
    public static final int TYPE_APPLICATION = 2;

    /** @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 = {
+35 −2
Original line number Diff line number Diff line
@@ -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);
    }
}