From 1c15cee227b8a41e8098bf37dc9a00400a4339ee Mon Sep 17 00:00:00 2001 From: Amy Zhang Date: Wed, 19 Aug 2020 15:05:29 -0700 Subject: [PATCH 1/2] Expose FrontendInfo list of all the existed Frontends in Tuner java Test: make Bug: 158818697 Change-Id: Iddea804a2ab9c8609d843c6259763e092b003131 --- api/system-current.txt | 1 + core/api/system-current.txt | 1 + media/java/android/media/tv/tuner/Tuner.java | 35 +++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) 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); From d92c6372226c282941e8c9ad2731e16b9379d5e8 Mon Sep 17 00:00:00 2001 From: Amy Zhang Date: Mon, 21 Sep 2020 19:57:23 -0700 Subject: [PATCH 2/2] Add comparator for FrontendInfo Test: atest android.media.tv.tuner.cts Bug: 158818697 Change-Id: Idb7c12750d6b5a82a86bd0fa03afe151a1366bb4 --- .../media/tv/tuner/frontend/FrontendInfo.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/media/java/android/media/tv/tuner/frontend/FrontendInfo.java b/media/java/android/media/tv/tuner/frontend/FrontendInfo.java index 68c0c9659cb9e..f3e94760c847d 100644 --- a/media/java/android/media/tv/tuner/frontend/FrontendInfo.java +++ b/media/java/android/media/tv/tuner/frontend/FrontendInfo.java @@ -22,6 +22,9 @@ import android.media.tv.tuner.frontend.FrontendSettings.Type; import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType; import android.util.Range; +import java.util.Arrays; +import java.util.Objects; + /** * This class is used to specify meta information of a frontend. * @@ -118,4 +121,30 @@ public class FrontendInfo { public FrontendCapabilities getFrontendCapabilities() { return mFrontendCap; } + + + /** @hide */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || !(o instanceof FrontendInfo)) { + return false; + } + // TODO: compare FrontendCapabilities + FrontendInfo info = (FrontendInfo) o; + return mId == info.getId() && mType == info.getType() + && Objects.equals(mFrequencyRange, info.getFrequencyRange()) + && Objects.equals(mSymbolRateRange, info.getSymbolRateRange()) + && mAcquireRange == info.getAcquireRange() + && mExclusiveGroupId == info.getExclusiveGroupId() + && Arrays.equals(mStatusCaps, info.getStatusCapabilities()); + } + + /** @hide */ + @Override + public int hashCode() { + return mId; + } }