Loading media/java/android/media/quality/MediaQualityManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -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}. */ Loading media/java/android/media/quality/aidl/android/media/quality/IMediaQualityManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading services/core/java/com/android/server/media/quality/MediaQualityService.java +70 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)); Loading Loading @@ -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) { Loading Loading @@ -2226,6 +2249,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(); Loading Loading
media/java/android/media/quality/MediaQualityManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -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}. */ Loading
media/java/android/media/quality/aidl/android/media/quality/IMediaQualityManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
services/core/java/com/android/server/media/quality/MediaQualityService.java +70 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)); Loading Loading @@ -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) { Loading Loading @@ -2226,6 +2249,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(); Loading