Loading core/api/current.txt +15 −0 Original line number Diff line number Diff line Loading @@ -27170,6 +27170,15 @@ package android.media.projection { package android.media.quality { @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class ActiveProcessingPicture implements android.os.Parcelable { ctor public ActiveProcessingPicture(int, @NonNull String); method public int describeContents(); method public int getId(); method @NonNull public String getProfileId(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.media.quality.ActiveProcessingPicture> CREATOR; } @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class AmbientBacklightEvent implements android.os.Parcelable { ctor public AmbientBacklightEvent(int, @Nullable android.media.quality.AmbientBacklightMetadata); method public int describeContents(); Loading Loading @@ -27256,6 +27265,7 @@ package android.media.quality { } @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class MediaQualityManager { method public void addActiveProcessingPictureListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method public void createPictureProfile(@NonNull android.media.quality.PictureProfile); method public void createSoundProfile(@NonNull android.media.quality.SoundProfile); method @NonNull public java.util.List<android.media.quality.PictureProfile> getAvailablePictureProfiles(); Loading @@ -27270,6 +27280,7 @@ package android.media.quality { method public void registerAmbientBacklightCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.AmbientBacklightCallback); method public void registerPictureProfileCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.PictureProfileCallback); method public void registerSoundProfileCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.SoundProfileCallback); method public void removeActiveProcessingPictureListener(@NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method public void removePictureProfile(@NonNull String); method public void removeSoundProfile(@NonNull String); method public void setAmbientBacklightEnabled(boolean); Loading @@ -27281,6 +27292,10 @@ package android.media.quality { method public void updateSoundProfile(@NonNull String, @NonNull android.media.quality.SoundProfile); } public static interface MediaQualityManager.ActiveProcessingPictureListener { method public void onActiveProcessingPicturesChanged(@NonNull java.util.List<android.media.quality.ActiveProcessingPicture>); } public abstract static class MediaQualityManager.AmbientBacklightCallback { ctor public MediaQualityManager.AmbientBacklightCallback(); method public void onAmbientBacklightEvent(@NonNull android.media.quality.AmbientBacklightEvent); core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7987,6 +7987,7 @@ package android.media.musicrecognition { package android.media.quality { @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class MediaQualityManager { method public void addGlobalActiveProcessingPictureListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method @NonNull public java.util.List<java.lang.String> getPictureProfileAllowList(); method @NonNull public java.util.List<java.lang.String> getPictureProfilePackageNames(); method @NonNull public java.util.List<android.media.quality.PictureProfile> getPictureProfilesByPackage(@NonNull String); media/java/android/media/quality/ActiveProcessingPicture.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media.quality; parcelable ActiveProcessingPicture; No newline at end of file media/java/android/media/quality/ActiveProcessingPicture.java 0 → 100644 +86 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media.quality; import android.annotation.FlaggedApi; import android.media.tv.flags.Flags; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.NonNull; /** * Active picture represents an image or video undergoing picture processing which uses a picture * profile. The picture profile is used to configure the picture processing parameters. */ @FlaggedApi(Flags.FLAG_MEDIA_QUALITY_FW) public final class ActiveProcessingPicture implements Parcelable { private final int mId; private final String mProfileId; public ActiveProcessingPicture(int id, @NonNull String profileId) { mId = id; mProfileId = profileId; } /** @hide */ ActiveProcessingPicture(Parcel in) { mId = in.readInt(); mProfileId = in.readString(); } @NonNull public static final Creator<ActiveProcessingPicture> CREATOR = new Creator<>() { @Override public ActiveProcessingPicture createFromParcel(Parcel in) { return new ActiveProcessingPicture(in); } @Override public ActiveProcessingPicture[] newArray(int size) { return new ActiveProcessingPicture[size]; } }; /** * An ID that uniquely identifies the active content. * * <p>The ID is assigned by the system to distinguish different active contents. */ public int getId() { return mId; } /** * The ID of the picture profile used to configure the content. */ @NonNull public String getProfileId() { return mProfileId; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(mId); dest.writeString(mProfileId); } } media/java/android/media/quality/MediaQualityManager.java +86 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.CallbackExecutor; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.content.Context; Loading Loading @@ -55,6 +56,9 @@ public final class MediaQualityManager { private final List<SoundProfileCallbackRecord> mSpCallbackRecords = new ArrayList<>(); // @GuardedBy("mLock") private final List<AmbientBacklightCallbackRecord> mAbCallbackRecords = new ArrayList<>(); // @GuardedBy("mLock") private final List<ActiveProcessingPictureListenerRecord> mApListenerRecords = new ArrayList<>(); /** Loading Loading @@ -1016,4 +1020,86 @@ public final class MediaQualityManager { public void onAmbientBacklightEvent(@NonNull AmbientBacklightEvent event) { } } /** * Listener used to monitor status of active pictures. */ public interface ActiveProcessingPictureListener { /** * Called when active pictures are changed. * * @param activeProcessingPictures contents currently undergoing picture processing. */ void onActiveProcessingPicturesChanged( @NonNull List<ActiveProcessingPicture> activeProcessingPictures); } /** * Adds an active picture listener for the contents owner by the caller. */ public void addActiveProcessingPictureListener( @CallbackExecutor @NonNull Executor executor, @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); Preconditions.checkNotNull(executor); synchronized (mLock) { mApListenerRecords.add( new ActiveProcessingPictureListenerRecord(listener, executor, false)); } } /** * Adds an active picture listener for all contents. * * @hide */ @SuppressLint("PairedRegistration") @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE) public void addGlobalActiveProcessingPictureListener( @NonNull Executor executor, @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); Preconditions.checkNotNull(executor); synchronized (mLock) { mApListenerRecords.add( new ActiveProcessingPictureListenerRecord(listener, executor, true)); } } /** * Removes an active picture listener for the contents. */ public void removeActiveProcessingPictureListener( @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); synchronized (mLock) { for (Iterator<ActiveProcessingPictureListenerRecord> it = mApListenerRecords.iterator(); it.hasNext(); ) { ActiveProcessingPictureListenerRecord record = it.next(); if (record.getListener() == listener) { it.remove(); break; } } } } private static final class ActiveProcessingPictureListenerRecord { private final ActiveProcessingPictureListener mListener; private final Executor mExecutor; private final boolean mIsGlobal; ActiveProcessingPictureListenerRecord( ActiveProcessingPictureListener listener, Executor executor, boolean isGlobal) { mListener = listener; mExecutor = executor; mIsGlobal = isGlobal; } public ActiveProcessingPictureListener getListener() { return mListener; } } } Loading
core/api/current.txt +15 −0 Original line number Diff line number Diff line Loading @@ -27170,6 +27170,15 @@ package android.media.projection { package android.media.quality { @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class ActiveProcessingPicture implements android.os.Parcelable { ctor public ActiveProcessingPicture(int, @NonNull String); method public int describeContents(); method public int getId(); method @NonNull public String getProfileId(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.media.quality.ActiveProcessingPicture> CREATOR; } @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class AmbientBacklightEvent implements android.os.Parcelable { ctor public AmbientBacklightEvent(int, @Nullable android.media.quality.AmbientBacklightMetadata); method public int describeContents(); Loading Loading @@ -27256,6 +27265,7 @@ package android.media.quality { } @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class MediaQualityManager { method public void addActiveProcessingPictureListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method public void createPictureProfile(@NonNull android.media.quality.PictureProfile); method public void createSoundProfile(@NonNull android.media.quality.SoundProfile); method @NonNull public java.util.List<android.media.quality.PictureProfile> getAvailablePictureProfiles(); Loading @@ -27270,6 +27280,7 @@ package android.media.quality { method public void registerAmbientBacklightCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.AmbientBacklightCallback); method public void registerPictureProfileCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.PictureProfileCallback); method public void registerSoundProfileCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.SoundProfileCallback); method public void removeActiveProcessingPictureListener(@NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method public void removePictureProfile(@NonNull String); method public void removeSoundProfile(@NonNull String); method public void setAmbientBacklightEnabled(boolean); Loading @@ -27281,6 +27292,10 @@ package android.media.quality { method public void updateSoundProfile(@NonNull String, @NonNull android.media.quality.SoundProfile); } public static interface MediaQualityManager.ActiveProcessingPictureListener { method public void onActiveProcessingPicturesChanged(@NonNull java.util.List<android.media.quality.ActiveProcessingPicture>); } public abstract static class MediaQualityManager.AmbientBacklightCallback { ctor public MediaQualityManager.AmbientBacklightCallback(); method public void onAmbientBacklightEvent(@NonNull android.media.quality.AmbientBacklightEvent);
core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7987,6 +7987,7 @@ package android.media.musicrecognition { package android.media.quality { @FlaggedApi("android.media.tv.flags.media_quality_fw") public final class MediaQualityManager { method public void addGlobalActiveProcessingPictureListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.quality.MediaQualityManager.ActiveProcessingPictureListener); method @NonNull public java.util.List<java.lang.String> getPictureProfileAllowList(); method @NonNull public java.util.List<java.lang.String> getPictureProfilePackageNames(); method @NonNull public java.util.List<android.media.quality.PictureProfile> getPictureProfilesByPackage(@NonNull String);
media/java/android/media/quality/ActiveProcessingPicture.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media.quality; parcelable ActiveProcessingPicture; No newline at end of file
media/java/android/media/quality/ActiveProcessingPicture.java 0 → 100644 +86 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media.quality; import android.annotation.FlaggedApi; import android.media.tv.flags.Flags; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.NonNull; /** * Active picture represents an image or video undergoing picture processing which uses a picture * profile. The picture profile is used to configure the picture processing parameters. */ @FlaggedApi(Flags.FLAG_MEDIA_QUALITY_FW) public final class ActiveProcessingPicture implements Parcelable { private final int mId; private final String mProfileId; public ActiveProcessingPicture(int id, @NonNull String profileId) { mId = id; mProfileId = profileId; } /** @hide */ ActiveProcessingPicture(Parcel in) { mId = in.readInt(); mProfileId = in.readString(); } @NonNull public static final Creator<ActiveProcessingPicture> CREATOR = new Creator<>() { @Override public ActiveProcessingPicture createFromParcel(Parcel in) { return new ActiveProcessingPicture(in); } @Override public ActiveProcessingPicture[] newArray(int size) { return new ActiveProcessingPicture[size]; } }; /** * An ID that uniquely identifies the active content. * * <p>The ID is assigned by the system to distinguish different active contents. */ public int getId() { return mId; } /** * The ID of the picture profile used to configure the content. */ @NonNull public String getProfileId() { return mProfileId; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(mId); dest.writeString(mProfileId); } }
media/java/android/media/quality/MediaQualityManager.java +86 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.CallbackExecutor; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.content.Context; Loading Loading @@ -55,6 +56,9 @@ public final class MediaQualityManager { private final List<SoundProfileCallbackRecord> mSpCallbackRecords = new ArrayList<>(); // @GuardedBy("mLock") private final List<AmbientBacklightCallbackRecord> mAbCallbackRecords = new ArrayList<>(); // @GuardedBy("mLock") private final List<ActiveProcessingPictureListenerRecord> mApListenerRecords = new ArrayList<>(); /** Loading Loading @@ -1016,4 +1020,86 @@ public final class MediaQualityManager { public void onAmbientBacklightEvent(@NonNull AmbientBacklightEvent event) { } } /** * Listener used to monitor status of active pictures. */ public interface ActiveProcessingPictureListener { /** * Called when active pictures are changed. * * @param activeProcessingPictures contents currently undergoing picture processing. */ void onActiveProcessingPicturesChanged( @NonNull List<ActiveProcessingPicture> activeProcessingPictures); } /** * Adds an active picture listener for the contents owner by the caller. */ public void addActiveProcessingPictureListener( @CallbackExecutor @NonNull Executor executor, @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); Preconditions.checkNotNull(executor); synchronized (mLock) { mApListenerRecords.add( new ActiveProcessingPictureListenerRecord(listener, executor, false)); } } /** * Adds an active picture listener for all contents. * * @hide */ @SuppressLint("PairedRegistration") @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE) public void addGlobalActiveProcessingPictureListener( @NonNull Executor executor, @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); Preconditions.checkNotNull(executor); synchronized (mLock) { mApListenerRecords.add( new ActiveProcessingPictureListenerRecord(listener, executor, true)); } } /** * Removes an active picture listener for the contents. */ public void removeActiveProcessingPictureListener( @NonNull ActiveProcessingPictureListener listener) { Preconditions.checkNotNull(listener); synchronized (mLock) { for (Iterator<ActiveProcessingPictureListenerRecord> it = mApListenerRecords.iterator(); it.hasNext(); ) { ActiveProcessingPictureListenerRecord record = it.next(); if (record.getListener() == listener) { it.remove(); break; } } } } private static final class ActiveProcessingPictureListenerRecord { private final ActiveProcessingPictureListener mListener; private final Executor mExecutor; private final boolean mIsGlobal; ActiveProcessingPictureListenerRecord( ActiveProcessingPictureListener listener, Executor executor, boolean isGlobal) { mListener = listener; mExecutor = executor; mIsGlobal = isGlobal; } public ActiveProcessingPictureListener getListener() { return mListener; } } }