Merge "Tuner API: modify permission check" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ae73c6c7c3
@@ -4827,11 +4827,11 @@ package android.media.tv.tuner {
|
||||
}
|
||||
|
||||
public class Lnb implements java.lang.AutoCloseable {
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void close();
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int sendDiseqcMessage(@NonNull byte[]);
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setSatellitePosition(int);
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setTone(int);
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setVoltage(int);
|
||||
method public void close();
|
||||
method public int sendDiseqcMessage(@NonNull byte[]);
|
||||
method public int setSatellitePosition(int);
|
||||
method public int setTone(int);
|
||||
method public int setVoltage(int);
|
||||
field public static final int EVENT_TYPE_DISEQC_RX_OVERFLOW = 0; // 0x0
|
||||
field public static final int EVENT_TYPE_DISEQC_RX_PARITY_ERROR = 2; // 0x2
|
||||
field public static final int EVENT_TYPE_DISEQC_RX_TIMEOUT = 1; // 0x1
|
||||
@@ -4859,32 +4859,32 @@ 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, @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();
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int getAvSyncHwId(@NonNull android.media.tv.tuner.filter.Filter);
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public long getAvSyncTime(int);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(@NonNull android.content.Context);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo();
|
||||
method public int cancelScanning();
|
||||
method public int cancelTuning();
|
||||
method public void clearOnTuneEventListener();
|
||||
method public void clearResourceLostListener();
|
||||
method public void close();
|
||||
method public int connectCiCam(int);
|
||||
method public int disconnectCiCam();
|
||||
method public int getAvSyncHwId(@NonNull android.media.tv.tuner.filter.Filter);
|
||||
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 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, @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(@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.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
|
||||
method @Nullable public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
|
||||
method @Nullable 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 public android.media.tv.tuner.Lnb openLnb(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
|
||||
method @Nullable 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 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);
|
||||
method public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback);
|
||||
method public int setLnaEnabled(boolean);
|
||||
method public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener);
|
||||
method public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener);
|
||||
method public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner);
|
||||
method public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings);
|
||||
method public void updateResourcePriority(int, int);
|
||||
field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
|
||||
field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
|
||||
field public static final int INVALID_STREAM_ID = 65535; // 0xffff
|
||||
|
||||
@@ -19,7 +19,6 @@ package android.media.tv.tuner;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SystemApi;
|
||||
import android.content.Context;
|
||||
import android.hardware.tv.tuner.V1_0.Constants;
|
||||
@@ -173,10 +172,8 @@ public class Lnb implements AutoCloseable {
|
||||
* @param voltage the power voltage constant the Lnb to use.
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int setVoltage(@Voltage int voltage) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
return nativeSetVoltage(voltage);
|
||||
}
|
||||
|
||||
@@ -186,10 +183,8 @@ public class Lnb implements AutoCloseable {
|
||||
* @param tone the tone mode the Lnb to use.
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int setTone(@Tone int tone) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
return nativeSetTone(tone);
|
||||
}
|
||||
|
||||
@@ -199,10 +194,8 @@ public class Lnb implements AutoCloseable {
|
||||
* @param position the position the Lnb to use.
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int setSatellitePosition(@Position int position) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
return nativeSetSatellitePosition(position);
|
||||
}
|
||||
|
||||
@@ -216,19 +209,15 @@ public class Lnb implements AutoCloseable {
|
||||
*
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int sendDiseqcMessage(@NonNull byte[] message) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
return nativeSendDiseqcMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Releases the LNB instance.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void close() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
nativeClose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType;
|
||||
import android.media.tv.tuner.frontend.OnTuneEventListener;
|
||||
import android.media.tv.tuner.frontend.ScanCallback;
|
||||
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
|
||||
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerResourceManager;
|
||||
@@ -218,6 +220,8 @@ public class Tuner implements AutoCloseable {
|
||||
@Nullable
|
||||
private Executor mOnResourceLostListenerExecutor;
|
||||
|
||||
private Integer mDemuxHandle;
|
||||
private Integer mDescramblerHandle;
|
||||
|
||||
private final TunerResourceManager.ResourcesReclaimListener mResourceListener =
|
||||
new TunerResourceManager.ResourcesReclaimListener() {
|
||||
@@ -255,7 +259,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @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");
|
||||
@@ -267,7 +270,6 @@ public class Tuner implements AutoCloseable {
|
||||
/**
|
||||
* Removes the listener for resource lost.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void clearResourceLostListener() {
|
||||
mOnResourceLostListener = null;
|
||||
mOnResourceLostListenerExecutor = null;
|
||||
@@ -278,7 +280,6 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @param tuner the Tuner instance to share frontend resource with.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void shareFrontendFromTuner(@NonNull Tuner tuner) {
|
||||
// TODO: implementation.
|
||||
}
|
||||
@@ -294,7 +295,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @param priority the new priority.
|
||||
* @param niceValue the nice value.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void updateResourcePriority(int priority, int niceValue) {
|
||||
// TODO: implementation.
|
||||
}
|
||||
@@ -304,7 +304,6 @@ public class Tuner implements AutoCloseable {
|
||||
/**
|
||||
* Releases the Tuner instance.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Override
|
||||
public void close() {
|
||||
// TODO: implementation.
|
||||
@@ -429,10 +428,8 @@ public class Tuner implements AutoCloseable {
|
||||
* @throws SecurityException if the caller does not have appropriate permissions.
|
||||
* @see #tune(FrontendSettings)
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void setOnTuneEventListener(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull OnTuneEventListener eventListener) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
mOnTuneEventListener = eventListener;
|
||||
mOnTunerEventExecutor = executor;
|
||||
}
|
||||
@@ -443,7 +440,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @throws SecurityException if the caller does not have appropriate permissions.
|
||||
* @see #setOnTuneEventListener(Executor, OnTuneEventListener)
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public void clearOnTuneEventListener() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
mOnTuneEventListener = null;
|
||||
@@ -474,7 +470,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @throws SecurityException if the caller does not have appropriate permissions.
|
||||
* @see #setOnTuneEventListener(Executor, OnTuneEventListener)
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int tune(@NonNull FrontendSettings settings) {
|
||||
mFrontendType = settings.getType();
|
||||
@@ -491,7 +486,6 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int cancelTuning() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
@@ -509,7 +503,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @throws IllegalStateException if {@code scan} is called again before
|
||||
* {@link #cancelScanning()} is called.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int scan(@NonNull FrontendSettings settings, @ScanType int scanType,
|
||||
@NonNull @CallbackExecutor Executor executor, @NonNull ScanCallback scanCallback) {
|
||||
@@ -537,10 +530,8 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @throws SecurityException if the caller does not have appropriate permissions.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int cancelScanning() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
int retVal = nativeStopScan();
|
||||
mScanCallback = null;
|
||||
mScanCallbackExecutor = null;
|
||||
@@ -548,11 +539,11 @@ public class Tuner implements AutoCloseable {
|
||||
}
|
||||
|
||||
private boolean requestFrontend() {
|
||||
int[] feId = new int[1];
|
||||
int[] feHandle = new int[1];
|
||||
TunerFrontendRequest request = new TunerFrontendRequest(mClientId, mFrontendType);
|
||||
boolean granted = mTunerResourceManager.requestFrontend(request, feId);
|
||||
boolean granted = mTunerResourceManager.requestFrontend(request, feHandle);
|
||||
if (granted) {
|
||||
mFrontendHandle = feId[0];
|
||||
mFrontendHandle = feHandle[0];
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
@@ -579,10 +570,8 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int setLnaEnabled(boolean enable) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
return nativeSetLna(enable);
|
||||
}
|
||||
|
||||
@@ -605,9 +594,8 @@ public class Tuner implements AutoCloseable {
|
||||
* @param filter the filter instance for the hardware sync ID.
|
||||
* @return the id of hardware A/V sync.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public int getAvSyncHwId(@NonNull Filter filter) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
Integer id = nativeGetAvSyncHwId(filter);
|
||||
return id == null ? INVALID_AV_SYNC_ID : id;
|
||||
}
|
||||
@@ -621,9 +609,8 @@ public class Tuner implements AutoCloseable {
|
||||
* @param avSyncHwId the hardware id of A/V sync.
|
||||
* @return the current timestamp of hardware A/V sync.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
public long getAvSyncTime(int avSyncHwId) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
Long time = nativeGetAvSyncTime(avSyncHwId);
|
||||
return time == null ? INVALID_TIMESTAMP : time;
|
||||
}
|
||||
@@ -637,10 +624,9 @@ public class Tuner implements AutoCloseable {
|
||||
* @param ciCamId specify CI-CAM Id to connect.
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int connectCiCam(int ciCamId) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
return nativeConnectCiCam(ciCamId);
|
||||
}
|
||||
|
||||
@@ -651,10 +637,9 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @return result status of the operation.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Result
|
||||
public int disconnectCiCam() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
return nativeDisconnectCiCam();
|
||||
}
|
||||
|
||||
@@ -663,10 +648,9 @@ public class Tuner implements AutoCloseable {
|
||||
*
|
||||
* @return The frontend information. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public FrontendInfo getFrontendInfo() {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND);
|
||||
if (mFrontend == null) {
|
||||
throw new IllegalStateException("frontend is not initialized");
|
||||
}
|
||||
@@ -679,14 +663,11 @@ 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
|
||||
public static DemuxCapabilities getDemuxCapabilities(@NonNull Context context) {
|
||||
TunerUtils.checkTunerPermission(context);
|
||||
public DemuxCapabilities getDemuxCapabilities() {
|
||||
return nativeGetDemuxCapabilities();
|
||||
}
|
||||
|
||||
@@ -792,12 +773,11 @@ public class Tuner implements AutoCloseable {
|
||||
* @param cb the callback to receive notifications from filter.
|
||||
* @return the opened filter. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public Filter openFilter(@Type int mainType, @Subtype int subType,
|
||||
@BytesLong long bufferSize, @CallbackExecutor @Nullable Executor executor,
|
||||
@Nullable FilterCallback cb) {
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
Filter filter = nativeOpenFilter(
|
||||
mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize);
|
||||
if (filter != null) {
|
||||
@@ -821,7 +801,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @param cb the callback to receive notifications from LNB.
|
||||
* @return the opened LNB object. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public Lnb openLnb(@CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) {
|
||||
Objects.requireNonNull(executor, "executor must not be null");
|
||||
@@ -840,23 +819,22 @@ public class Tuner implements AutoCloseable {
|
||||
* @param cb the callback to receive notifications from LNB.
|
||||
* @return the opened LNB object. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public Lnb openLnbByName(@NonNull String name, @CallbackExecutor @NonNull Executor executor,
|
||||
@NonNull LnbCallback cb) {
|
||||
Objects.requireNonNull(name, "LNB name must not be null");
|
||||
Objects.requireNonNull(executor, "executor must not be null");
|
||||
Objects.requireNonNull(cb, "LnbCallback must not be null");
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_LNB);
|
||||
return nativeOpenLnbByName(name);
|
||||
}
|
||||
|
||||
private boolean requestLnb() {
|
||||
int[] lnbId = new int[1];
|
||||
int[] lnbHandle = new int[1];
|
||||
TunerLnbRequest request = new TunerLnbRequest(mClientId);
|
||||
boolean granted = mTunerResourceManager.requestLnb(request, lnbId);
|
||||
boolean granted = mTunerResourceManager.requestLnb(request, lnbHandle);
|
||||
if (granted) {
|
||||
mLnbHandle = lnbId[0];
|
||||
mLnbHandle = lnbHandle[0];
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
@@ -868,6 +846,7 @@ public class Tuner implements AutoCloseable {
|
||||
*/
|
||||
@Nullable
|
||||
public TimeFilter openTimeFilter() {
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
return nativeOpenTimeFilter();
|
||||
}
|
||||
|
||||
@@ -885,7 +864,7 @@ public class Tuner implements AutoCloseable {
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER)
|
||||
@Nullable
|
||||
public Descrambler openDescrambler() {
|
||||
TunerUtils.checkDescramblerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DESCRAMBLER);
|
||||
return nativeOpenDescrambler();
|
||||
}
|
||||
|
||||
@@ -899,7 +878,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @param l the listener to receive notifications from DVR recorder.
|
||||
* @return the opened DVR recorder object. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public DvrRecorder openDvrRecorder(
|
||||
@BytesLong long bufferSize,
|
||||
@@ -907,7 +885,7 @@ public class Tuner implements AutoCloseable {
|
||||
@NonNull OnRecordStatusChangedListener l) {
|
||||
Objects.requireNonNull(executor, "executor must not be null");
|
||||
Objects.requireNonNull(l, "OnRecordStatusChangedListener must not be null");
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
DvrRecorder dvr = nativeOpenDvrRecorder(bufferSize);
|
||||
return dvr;
|
||||
}
|
||||
@@ -922,7 +900,6 @@ public class Tuner implements AutoCloseable {
|
||||
* @param l the listener to receive notifications from DVR recorder.
|
||||
* @return the opened DVR playback object. {@code null} if the operation failed.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
|
||||
@Nullable
|
||||
public DvrPlayback openDvrPlayback(
|
||||
@BytesLong long bufferSize,
|
||||
@@ -930,13 +907,32 @@ public class Tuner implements AutoCloseable {
|
||||
@NonNull OnPlaybackStatusChangedListener l) {
|
||||
Objects.requireNonNull(executor, "executor must not be null");
|
||||
Objects.requireNonNull(l, "OnPlaybackStatusChangedListener must not be null");
|
||||
TunerUtils.checkTunerPermission(mContext);
|
||||
checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
|
||||
DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize);
|
||||
return dvr;
|
||||
}
|
||||
|
||||
private boolean requestDemux() {
|
||||
int[] demuxHandle = new int[1];
|
||||
TunerDemuxRequest request = new TunerDemuxRequest(mClientId);
|
||||
boolean granted = mTunerResourceManager.requestDemux(request, demuxHandle);
|
||||
if (granted) {
|
||||
mDemuxHandle = demuxHandle[0];
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
|
||||
private boolean requestDescrambler() {
|
||||
int[] descramblerHandle = new int[1];
|
||||
TunerDescramblerRequest request = new TunerDescramblerRequest(mClientId);
|
||||
boolean granted = mTunerResourceManager.requestDescrambler(request, descramblerHandle);
|
||||
if (granted) {
|
||||
mDescramblerHandle = descramblerHandle[0];
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
|
||||
private boolean checkResource(int resourceType) {
|
||||
// TODO: demux and descrambler
|
||||
switch (resourceType) {
|
||||
case TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND: {
|
||||
if (mFrontendHandle == null && !requestFrontend()) {
|
||||
@@ -950,6 +946,18 @@ public class Tuner implements AutoCloseable {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX: {
|
||||
if (mDemuxHandle == null && !requestDemux()) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TunerResourceManager.TUNER_RESOURCE_TYPE_DESCRAMBLER: {
|
||||
if (mDescramblerHandle == null && !requestDescrambler()) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ public final class TunerUtils {
|
||||
* @throws SecurityException if the caller doesn't have the permission.
|
||||
*/
|
||||
public static void checkPermission(Context context, String permission) {
|
||||
// TODO: remove checkPermission methods
|
||||
if (context.checkCallingOrSelfPermission(permission)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
throw new SecurityException("Caller must have " + permission + " permission.");
|
||||
|
||||
@@ -100,6 +100,7 @@ public class TunerResourceManagerService extends SystemService {
|
||||
@NonNull IResourcesReclaimListener listener, @NonNull int[] clientId)
|
||||
throws RemoteException {
|
||||
enforceTrmAccessPermission("registerClientProfile");
|
||||
enforceTunerAccessPermission("registerClientProfile");
|
||||
if (profile == null) {
|
||||
throw new RemoteException("ResourceClientProfile can't be null");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user