Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf1e3768 authored by Hongguang Chen's avatar Hongguang Chen Committed by Android (Google) Code Review
Browse files

Merge "Add SharedFilter to tuner frameworks."

parents 8fd05882 bcca4dc8
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ package android {
    field public static final String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
    field public static final String ACCESS_TUNED_INFO = "android.permission.ACCESS_TUNED_INFO";
    field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
    field public static final String ACCESS_TV_SHARED_FILTER = "android.permission.ACCESS_TV_SHARED_FILTER";
    field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
    field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
    field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
@@ -6127,6 +6128,7 @@ package android.media.tv.tuner {
    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 @RequiresPermission(android.Manifest.permission.ACCESS_TV_SHARED_FILTER) public static android.media.tv.tuner.filter.SharedFilter openSharedFilter(@NonNull android.content.Context, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.filter.SharedFilterCallback);
    method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter();
    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);
@@ -6335,10 +6337,12 @@ package android.media.tv.tuner.filter {
  public class Filter implements java.lang.AutoCloseable {
    method public void close();
    method public int configure(@NonNull android.media.tv.tuner.filter.FilterConfiguration);
    method @Nullable public String createSharedFilter();
    method public int flush();
    method @Deprecated public int getId();
    method public long getIdLong();
    method public int read(@NonNull byte[], long, long);
    method public void releaseSharedFilter(@NonNull String);
    method public int setDataSource(@Nullable android.media.tv.tuner.filter.Filter);
    method public int setMonitorEventMask(int);
    method public int start();
@@ -6588,6 +6592,20 @@ package android.media.tv.tuner.filter {
    method public int getType();
  }
  public final class SharedFilter implements java.lang.AutoCloseable {
    method public void close();
    method public int flush();
    method public int read(@NonNull byte[], long, long);
    method public int start();
    method public int stop();
    field public static final int STATUS_INACCESSIBLE = 128; // 0x80
  }
  public interface SharedFilterCallback {
    method public void onFilterEvent(@NonNull android.media.tv.tuner.filter.SharedFilter, @NonNull android.media.tv.tuner.filter.FilterEvent[]);
    method public void onFilterStatusChanged(@NonNull android.media.tv.tuner.filter.SharedFilter, int);
  }
  public class TemiEvent extends android.media.tv.tuner.filter.FilterEvent {
    method @NonNull public byte[] getDescriptorData();
    method public byte getDescriptorTag();
+6 −0
Original line number Diff line number Diff line
@@ -5802,6 +5802,12 @@
    <permission android:name="android.permission.ACCESS_TV_DESCRAMBLER"
        android:protectionLevel="signature|privileged|vendorPrivileged" />

    <!-- @SystemApi Allows an application to access shared filter of TV tuner HAL
         <p>Not for use by third-party applications.
         @hide -->
    <permission android:name="android.permission.ACCESS_TV_SHARED_FILTER"
        android:protectionLevel="signature|privileged|vendorPrivileged" />

    <!-- Allows an application to create trusted displays. @hide -->
    <permission android:name="android.permission.ADD_TRUSTED_DISPLAY"
                android:protectionLevel="signature" />
+1 −0
Original line number Diff line number Diff line
@@ -425,6 +425,7 @@ applications that come with the platform
        <permission name="android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS"/>
        <!-- Permissions required for CTS test - TunerTest -->
        <permission name="android.permission.ACCESS_TV_DESCRAMBLER" />
        <permission name="android.permission.ACCESS_TV_SHARED_FILTER" />
        <permission name="android.permission.ACCESS_TV_TUNER" />
        <permission name="android.permission.TUNER_RESOURCE_ACCESS" />
        <!-- Permissions required for CTS test - TVInputManagerTest -->
+35 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.tv.tuner.Constant;
import android.hardware.tv.tuner.Constant64Bit;
import android.hardware.tv.tuner.FrontendScanType;
@@ -37,6 +38,8 @@ import android.media.tv.tuner.filter.Filter;
import android.media.tv.tuner.filter.Filter.Subtype;
import android.media.tv.tuner.filter.Filter.Type;
import android.media.tv.tuner.filter.FilterCallback;
import android.media.tv.tuner.filter.SharedFilter;
import android.media.tv.tuner.filter.SharedFilterCallback;
import android.media.tv.tuner.filter.TimeFilter;
import android.media.tv.tuner.frontend.Atsc3PlpInfo;
import android.media.tv.tuner.frontend.FrontendInfo;
@@ -622,6 +625,7 @@ public class Tuner implements AutoCloseable {
    private native int nativeCloseFrontend(int handle);
    private native int nativeClose();

    private static native SharedFilter nativeOpenSharedFilter(String token);

    /**
     * Listener for resource lost.
@@ -1572,6 +1576,37 @@ public class Tuner implements AutoCloseable {
        return dvr;
    }

    /**
     * Open a shared filter instance.
     *
     * @param context the context of the caller.
     * @param sharedFilterToken the token of the shared filter being opened.
     * @param executor the executor on which callback will be invoked.
     * @param cb the listener to receive notifications from shared filter.
     * @return the opened shared filter object. {@code null} if the operation failed.
     */
    @RequiresPermission(android.Manifest.permission.ACCESS_TV_SHARED_FILTER)
    @Nullable
    static public SharedFilter openSharedFilter(@NonNull Context context,
            @NonNull String sharedFilterToken, @CallbackExecutor @NonNull Executor executor,
            @NonNull SharedFilterCallback cb) {
        Objects.requireNonNull(sharedFilterToken, "sharedFilterToken must not be null");
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(cb, "SharedFilterCallback must not be null");

        if (context.checkCallingOrSelfPermission(
                    android.Manifest.permission.ACCESS_TV_SHARED_FILTER)
                != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Caller must have ACCESS_TV_SHAREDFILTER permission.");
        }

        SharedFilter filter = nativeOpenSharedFilter(sharedFilterToken);
        if (filter != null) {
            filter.setCallback(cb, executor);
        }
        return filter;
    }

    private boolean requestDemux() {
        int[] demuxHandle = new int[1];
        TunerDemuxRequest request = new TunerDemuxRequest();
+11 −0
Original line number Diff line number Diff line
@@ -172,5 +172,16 @@ public final class TunerUtils {
        }
    }

    /**
     * Checks the accessibility of a resource instance.
     *
     * @throws IllegalStateException if the resource has already been inaccessible.
     */
    public static void checkResourceAccessible(String name, boolean accessible) {
        if (!accessible) {
            throw new IllegalStateException(name + " is inaccessible");
        }
    }

    private TunerUtils() {}
}
Loading