diff --git a/api/system-current.txt b/api/system-current.txt index 0eaebcef0040d..9a3e84728f76b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5091,6 +5091,7 @@ package android.media.tv.tuner { method public long getAvSyncTime(int); method @Nullable public android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(); method @Nullable public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo(); + method @Nullable public java.util.List getFrontendInfoList(); method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]); method public int linkFrontendToCiCam(int); method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler(); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index ed3b7deaad54d..9bf5fb7732bcf 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5031,6 +5031,7 @@ package android.media.tv.tuner { method public long getAvSyncTime(int); method @Nullable public android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(); method @Nullable public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo(); + method @Nullable public java.util.List getFrontendInfoList(); method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]); method public int linkFrontendToCiCam(int); method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler(); diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index aa3143fafd88d..97161e563dadc 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -61,6 +61,7 @@ import com.android.internal.util.FrameworkStatsLog; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -369,6 +370,28 @@ public class Tuner implements AutoCloseable { mTunerResourceManager.setFrontendInfoList(infos); } + /** + * Get frontend info list from native and build them into a {@link FrontendInfo} list. Any + * {@code null} FrontendInfo element would be removed. + */ + private FrontendInfo[] getFrontendInfoListInternal() { + List ids = getFrontendIds(); + if (ids == null) { + return null; + } + FrontendInfo[] infos = new FrontendInfo[ids.size()]; + for (int i = 0; i < ids.size(); i++) { + int id = ids.get(i); + FrontendInfo frontendInfo = getFrontendInfoById(id); + if (frontendInfo == null) { + Log.e(TAG, "Failed to get a FrontendInfo on frontend id:" + id + "!"); + continue; + } + infos[i] = frontendInfo; + } + return Arrays.stream(infos).filter(Objects::nonNull).toArray(FrontendInfo[]::new); + } + /** @hide */ public static int getTunerVersion() { return sTunerVersion; @@ -932,7 +955,7 @@ public class Tuner implements AutoCloseable { } /** - * Gets the frontend information. + * Gets the initialized frontend information. * * @return The frontend information. {@code null} if the operation failed. */ @@ -950,6 +973,16 @@ public class Tuner implements AutoCloseable { return mFrontendInfo; } + /** + * Get a list all the existed frontend information. + * + * @return The list of all the frontend information. {@code null} if the operation failed. + */ + @Nullable + public List getFrontendInfoList() { + return Arrays.asList(getFrontendInfoListInternal()); + } + /** @hide */ public FrontendInfo getFrontendInfoById(int id) { return nativeGetFrontendInfo(id);