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

Commit d7a4455b authored by Shubang Lu's avatar Shubang Lu
Browse files

[MQ] Add TestApi for status change

And support SDR suffix

Bug: 419120638
Bug: 418731727
Test: CTS
Flag: EXEMPT bugfix
Change-Id: I8167b8b4e1876696614867c6b5468e969af89e4e
parent 022e8eda
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -512,6 +512,19 @@ public final class MediaQualityManager {
        }
    }

    /**
     * Trigger a status change of the given picture profile.
     * <p>For testing only. TODO: make it a @TestApi.
     * @hide
     */
    public void changeStreamStatus(@NonNull String profileId, @NonNull String newStatus) {
        try {
            mService.changeStreamStatus(profileId, newStatus, mUserHandle.getIdentifier());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Registers a {@link SoundProfileCallback}.
     */
+2 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ interface IMediaQualityManager {
    void setPictureProfileAllowList(in List<String> packages, int userId);
    List<PictureProfileHandle> getPictureProfileHandle(in String[] id, int userId);

    void changeStreamStatus(in String profileId, in String newStatus, int userId);

    long getPictureProfileHandleValue(in String id, int userId);
    long getDefaultPictureProfileHandleValue(int userId);
    void notifyPictureProfileHandleSelection(in long handle, int userId);
+70 −5
Original line number Diff line number Diff line
@@ -208,11 +208,13 @@ public class MediaQualityService extends SystemService {
                mMediaQuality.setSoundProfileAdjustmentListener(mSoundProfileAdjListener);

                synchronized (mPictureProfileLock) {
                    String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                            + BaseParameters.PARAMETER_NAME + " = ?";
                    String selection = BaseParameters.PARAMETER_TYPE + " = ? AND ("
                            + BaseParameters.PARAMETER_NAME + " = ? OR "
                            + BaseParameters.PARAMETER_NAME + " = ?)";
                    String[] selectionArguments = {
                            Integer.toString(PictureProfile.TYPE_SYSTEM),
                            PictureProfile.NAME_DEFAULT
                            PictureProfile.NAME_DEFAULT,
                            PictureProfile.NAME_DEFAULT + "/" + PictureProfile.STATUS_SDR
                    };
                    List<PictureProfile> packageDefaultPictureProfiles =
                            mMqDatabaseUtils.getPictureProfilesBasedOnConditions(MediaQualityUtils
@@ -403,6 +405,25 @@ public class MediaQualityService extends SystemService {
            });
        }

        @Override
        public void changeStreamStatus(
                @NonNull String profileId, @NonNull String newStatus, int userId) {
            Long dbId = null;
            synchronized (mPictureProfileLock) {
                dbId = mPictureProfileTempIdMap.getKey(profileId);
                if (dbId == null) {
                    return;
                }
            }
            try {
                mPictureProfileAdjListener.onStreamStatusChanged(
                        dbId, mPictureProfileAdjListener.toHalStatus(newStatus));
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }

        }

        private boolean hasPermissionToRemovePictureProfile(PictureProfile toDelete, int uid) {
            if (toDelete != null) {
                return toDelete.getName().equalsIgnoreCase(getPackageOfUid(uid));
@@ -655,12 +676,14 @@ public class MediaQualityService extends SystemService {
                        null, PictureProfile.ERROR_NO_PERMISSION, callingUid, callingPid);
            }
            String[] columns = {BaseParameters.PARAMETER_ID};
            String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                    + BaseParameters.PARAMETER_NAME + " = ? AND "
            String selection = BaseParameters.PARAMETER_TYPE + " = ? AND ("
                    + BaseParameters.PARAMETER_NAME + " = ? OR "
                    + BaseParameters.PARAMETER_NAME + " = ?) AND "
                    + BaseParameters.PARAMETER_INPUT_ID + " = ?";
            String[] selectionArguments = {
                    Integer.toString(PictureProfile.TYPE_SYSTEM),
                    PictureProfile.NAME_DEFAULT,
                    PictureProfile.NAME_DEFAULT + "/" + PictureProfile.STATUS_SDR,
                    inputId
            };
            synchronized (mPictureProfileLock) {
@@ -2224,6 +2247,48 @@ public class MediaQualityService extends SystemService {
            }
        }

        private byte toHalStatus(@NonNull String profileStatus) {
            // TODO: use biMap
            switch (profileStatus) {
                case PictureProfile.STATUS_SDR:
                    return StreamStatus.SDR;
                case PictureProfile.STATUS_HDR10:
                    return StreamStatus.HDR10;
                case PictureProfile.STATUS_TCH:
                    return StreamStatus.TCH;
                case PictureProfile.STATUS_DOLBY_VISION:
                    return StreamStatus.DOLBYVISION;
                case PictureProfile.STATUS_HLG:
                    return StreamStatus.HLG;
                case PictureProfile.STATUS_HDR10_PLUS:
                    return StreamStatus.HDR10PLUS;
                case PictureProfile.STATUS_HDR_VIVID:
                    return StreamStatus.HDRVIVID;
                case PictureProfile.STATUS_IMAX_SDR:
                    return StreamStatus.IMAXSDR;
                case PictureProfile.STATUS_IMAX_HDR10:
                    return StreamStatus.IMAXHDR10;
                case PictureProfile.STATUS_IMAX_HDR10_PLUS:
                    return StreamStatus.IMAXHDR10PLUS;
                case PictureProfile.STATUS_FMM_SDR:
                    return StreamStatus.FMMSDR;
                case PictureProfile.STATUS_FMM_HDR10:
                    return StreamStatus.FMMHDR10;
                case PictureProfile.STATUS_FMM_HDR10_PLUS:
                    return StreamStatus.FMMHDR10PLUS;
                case PictureProfile.STATUS_FMM_HLG:
                    return StreamStatus.FMMHLG;
                case PictureProfile.STATUS_FMM_DOLBY:
                    return StreamStatus.FMMDOLBY;
                case PictureProfile.STATUS_FMM_TCH:
                    return StreamStatus.FMMTCH;
                case PictureProfile.STATUS_FMM_HDR_VIVID:
                    return StreamStatus.FMMHDRVIVID;
                default:
                    return (byte) 0;
            }
        }

        private boolean isSdr(@NonNull String profileStatus) {
            return profileStatus.equals(PictureProfile.STATUS_SDR)
                    || profileStatus.isEmpty();