diff --git a/api/system-current.txt b/api/system-current.txt index 773cd4d1cf040..86b6ec632a32d 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4826,7 +4826,7 @@ package android.media.tv.tuner { method public int getAudioFilterCount(); method public int getDemuxCount(); method public int getFilterCapabilities(); - method @Nullable @Size(5) public int[] getLinkCapabilities(); + method @NonNull @Size(5) public int[] getLinkCapabilities(); method public int getPcrFilterCount(); method public int getPesFilterCount(); method public int getPlaybackCount(); @@ -4842,7 +4842,7 @@ package android.media.tv.tuner { method public int addPid(int, int, @Nullable android.media.tv.tuner.filter.Filter); method public void close(); method public int removePid(int, int, @Nullable android.media.tv.tuner.filter.Filter); - method public int setKeyToken(@Nullable byte[]); + method public int setKeyToken(@NonNull byte[]); field public static final int PID_TYPE_MMTP = 2; // 0x2 field public static final int PID_TYPE_T = 1; // 0x1 } @@ -4879,10 +4879,11 @@ package android.media.tv.tuner { } public class Tuner implements java.lang.AutoCloseable { - ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @NonNull String, int, @Nullable android.media.tv.tuner.Tuner.OnResourceLostListener); + ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @Nullable String, int); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int cancelScanning(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int cancelTuning(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearOnTuneEventListener(); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearResourceLostListener(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void close(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int connectCiCam(int); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int disconnectCiCam(); @@ -4892,15 +4893,16 @@ package android.media.tv.tuner { method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo(); method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]); method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler(); - method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener); - method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnRecordStatusChangedListener); + method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener); + method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnRecordStatusChangedListener); method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.filter.Filter openFilter(int, int, long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.filter.FilterCallback); - method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnb(@Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.LnbCallback); - method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnbByName(@Nullable String, @Nullable java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback); + method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnb(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback); + method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnbByName(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback); method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback); - method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setLna(boolean); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setLnaEnabled(boolean); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void updateResourcePriority(int, int); diff --git a/media/java/android/media/tv/tuner/DemuxCapabilities.java b/media/java/android/media/tv/tuner/DemuxCapabilities.java index 364516cf488d3..0f5bf082d44fe 100644 --- a/media/java/android/media/tv/tuner/DemuxCapabilities.java +++ b/media/java/android/media/tv/tuner/DemuxCapabilities.java @@ -18,7 +18,7 @@ package android.media.tv.tuner; import android.annotation.BytesLong; import android.annotation.IntDef; -import android.annotation.Nullable; +import android.annotation.NonNull; import android.annotation.Size; import android.annotation.SystemApi; import android.media.tv.tuner.filter.Filter; @@ -159,7 +159,7 @@ public class DemuxCapabilities { * {@link FilterConfiguration}. *

The ith element represents the filter's capability as the source for the ith type. */ - @Nullable + @NonNull @Size(5) public int[] getLinkCapabilities() { return mLinkCaps; diff --git a/media/java/android/media/tv/tuner/Descrambler.java b/media/java/android/media/tv/tuner/Descrambler.java index f46d3ce03cb0a..40add566e8580 100644 --- a/media/java/android/media/tv/tuner/Descrambler.java +++ b/media/java/android/media/tv/tuner/Descrambler.java @@ -17,12 +17,15 @@ package android.media.tv.tuner; import android.annotation.IntDef; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.media.tv.tuner.TunerConstants.Result; import android.media.tv.tuner.filter.Filter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.Objects; /** * This class is used to interact with descramblers. @@ -75,6 +78,7 @@ public class Descrambler implements AutoCloseable { * @param filter an optional filter instance to identify upper stream. * @return result status of the operation. */ + @Result public int addPid(@PidType int pidType, int pid, @Nullable Filter filter) { return nativeAddPid(pidType, pid, filter); } @@ -89,6 +93,7 @@ public class Descrambler implements AutoCloseable { * @param filter an optional filter instance to identify upper stream. * @return result status of the operation. */ + @Result public int removePid(@PidType int pidType, int pid, @Nullable Filter filter) { return nativeRemovePid(pidType, pid, filter); } @@ -102,7 +107,9 @@ public class Descrambler implements AutoCloseable { * @param keyToken the token to be used to link the key slot. * @return result status of the operation. */ - public int setKeyToken(@Nullable byte[] keyToken) { + @Result + public int setKeyToken(@NonNull byte[] keyToken) { + Objects.requireNonNull(keyToken, "key token must not be null"); return nativeSetKeyToken(keyToken); } diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 4db110991d127..e0df15a4d0047 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -37,6 +37,7 @@ import android.media.tv.tuner.filter.TimeFilter; import android.media.tv.tuner.frontend.FrontendInfo; import android.media.tv.tuner.frontend.FrontendSettings; import android.media.tv.tuner.frontend.FrontendStatus; +import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType; import android.media.tv.tuner.frontend.OnTuneEventListener; import android.media.tv.tuner.frontend.ScanCallback; import android.os.Handler; @@ -44,6 +45,7 @@ import android.os.Looper; import android.os.Message; import java.util.List; +import java.util.Objects; import java.util.concurrent.Executor; /** @@ -87,6 +89,10 @@ public class Tuner implements AutoCloseable { private ScanCallback mScanCallback; @Nullable private Executor mScanCallbackExecutor; + @Nullable + private OnResourceLostListener mOnResourceLostListener; + @Nullable + private Executor mOnResourceLostListenerExecutor; /** * Constructs a Tuner instance. @@ -96,13 +102,36 @@ public class Tuner implements AutoCloseable { * @param useCase the use case of this Tuner instance. */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) - public Tuner(@NonNull Context context, @NonNull String tvInputSessionId, - @TvInputService.PriorityHintUseCaseType int useCase, - @Nullable OnResourceLostListener listener) { + public Tuner(@NonNull Context context, @Nullable String tvInputSessionId, + @TvInputService.PriorityHintUseCaseType int useCase) { nativeSetup(); mContext = context; } + /** + * Sets the listener for resource lost. + * + * @param executor the executor on which the listener should be invoked. + * @param listener the listener that will be run. + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + public void setResourceLostListener(@NonNull @CallbackExecutor Executor executor, + @NonNull OnResourceLostListener listener) { + Objects.requireNonNull(executor, "OnResourceLostListener must not be null"); + Objects.requireNonNull(listener, "executor must not be null"); + mOnResourceLostListener = listener; + mOnResourceLostListenerExecutor = executor; + } + + /** + * Removes the listener for resource lost. + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + public void clearResourceLostListener() { + mOnResourceLostListener = null; + mOnResourceLostListenerExecutor = null; + } + /** * Shares the frontend resource with another Tuner instance * @@ -386,7 +415,7 @@ public class Tuner implements AutoCloseable { */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Result - public int setLna(boolean enable) { + public int setLnaEnabled(boolean enable) { TunerUtils.checkTunerPermission(mContext); return nativeSetLna(enable); } @@ -397,10 +426,10 @@ public class Tuner implements AutoCloseable { *

This retrieve the statuses of the frontend for given status types. * * @param statusTypes an array of status types which the caller requests. - * @return statuses which response the caller's requests. + * @return statuses which response the caller's requests. {@code null} if the operation failed. */ @Nullable - public FrontendStatus getFrontendStatus(@NonNull int[] statusTypes) { + public FrontendStatus getFrontendStatus(@NonNull @FrontendStatusType int[] statusTypes) { return nativeGetFrontendStatus(statusTypes); } @@ -481,6 +510,10 @@ public class Tuner implements AutoCloseable { /** * Gets Demux capabilities. + * + * @param context the context of the caller. + * @return A {@link DemuxCapabilities} instance that represents the demux capabilities. + * {@code null} if the operation failed. */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Nullable @@ -552,13 +585,15 @@ public class Tuner implements AutoCloseable { */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Nullable - public Lnb openLnb(@CallbackExecutor @Nullable Executor executor, @Nullable LnbCallback cb) { + public Lnb openLnb(@CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) { + Objects.requireNonNull(executor, "executor must not be null"); + Objects.requireNonNull(cb, "LnbCallback must not be null"); TunerUtils.checkTunerPermission(mContext); return openLnbByName(null, executor, cb); } /** - * Opens an LNB (low-noise block downconverter) object. + * Opens an LNB (low-noise block downconverter) object specified by the give name. * * @param name the LNB name. * @param executor the executor on which callback will be invoked. The default event handler @@ -568,8 +603,10 @@ public class Tuner implements AutoCloseable { */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Nullable - public Lnb openLnbByName(@Nullable String name, @CallbackExecutor @Nullable Executor executor, + public Lnb openLnbByName(@NonNull String name, @CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) { + Objects.requireNonNull(executor, "executor must not be null"); + Objects.requireNonNull(cb, "LnbCallback must not be null"); TunerUtils.checkTunerPermission(mContext); // TODO: use resource manager to get LNB ID. return new Lnb(0); @@ -633,8 +670,10 @@ public class Tuner implements AutoCloseable { @Nullable public DvrRecorder openDvrRecorder( @BytesLong long bufferSize, - @CallbackExecutor @Nullable Executor executor, - @Nullable OnRecordStatusChangedListener l) { + @CallbackExecutor @NonNull Executor executor, + @NonNull OnRecordStatusChangedListener l) { + Objects.requireNonNull(executor, "executor must not be null"); + Objects.requireNonNull(l, "OnRecordStatusChangedListener must not be null"); TunerUtils.checkTunerPermission(mContext); DvrRecorder dvr = nativeOpenDvrRecorder(bufferSize); return dvr; @@ -654,8 +693,10 @@ public class Tuner implements AutoCloseable { @Nullable public DvrPlayback openDvrPlayback( @BytesLong long bufferSize, - @CallbackExecutor @Nullable Executor executor, - @Nullable OnPlaybackStatusChangedListener l) { + @CallbackExecutor @NonNull Executor executor, + @NonNull OnPlaybackStatusChangedListener l) { + Objects.requireNonNull(executor, "executor must not be null"); + Objects.requireNonNull(l, "OnPlaybackStatusChangedListener must not be null"); TunerUtils.checkTunerPermission(mContext); DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize); return dvr; diff --git a/media/java/android/media/tv/tuner/frontend/ScanCallback.java b/media/java/android/media/tv/tuner/frontend/ScanCallback.java index 8105c74cfb623..63bc248ab7bdc 100644 --- a/media/java/android/media/tv/tuner/frontend/ScanCallback.java +++ b/media/java/android/media/tv/tuner/frontend/ScanCallback.java @@ -53,7 +53,7 @@ public interface ScanCallback { void onInputStreamIds(@NonNull int[] inputStreamIds); /** Locked signal standard for DVBS. */ - void onDvbsStandard(@DvbsFrontendSettings.Standard int dvbsStandandard); + void onDvbsStandard(@DvbsFrontendSettings.Standard int dvbsStandard); /** Locked signal standard. for DVBT */ void onDvbtStandard(@DvbtFrontendSettings.Standard int dvbtStandard); diff --git a/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java b/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java index cbfbf77d11f54..afdbce0badae3 100644 --- a/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java +++ b/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java @@ -48,13 +48,13 @@ public class TunerTest { @Test public void testTunerConstructor() throws Exception { - Tuner tuner = new Tuner(mContext, "123", 1, null); + Tuner tuner = new Tuner(mContext, "123", 1); assertNotNull(tuner); } @Test public void testOpenDescrambler() throws Exception { - Tuner tuner = new Tuner(mContext, "123", 1, null); + Tuner tuner = new Tuner(mContext, "123", 1); Descrambler descrambler = tuner.openDescrambler(); assertNotNull(descrambler); }