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

Commit 49d86943 authored by shubang's avatar shubang Committed by Shubang Lu
Browse files

Tuner API: clean up permission check

1. Now permission check is done in system process,
TunerResourceManagerService.
2. Settings or configs classes themselves don't access tuner resouces,
so permission is not necessary. Permissions are checked when they are
used as parameters to access tuner resource. i.e.
openFilter(filterConfig, ...)

Bug: 149785806
Test: mmm
Change-Id: Id0d7a6aa3b8c894acece109885b58f774ab1b024
parent f4d1abb3
Loading
Loading
Loading
Loading
+23 −23
Original line number Diff line number Diff line
@@ -4940,7 +4940,7 @@ package android.media.tv.tuner.dvr {
  }
  public class DvrSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.dvr.DvrSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.dvr.DvrSettings.Builder builder();
    method public int getDataFormat();
    method public long getHighThreshold();
    method public long getLowThreshold();
@@ -4975,7 +4975,7 @@ package android.media.tv.tuner.dvr {
package android.media.tv.tuner.filter {
  public final class AlpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.AlpFilterConfiguration.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.filter.AlpFilterConfiguration.Builder builder();
    method public int getLengthType();
    method public int getPacketType();
    method public int getType();
@@ -5006,7 +5006,7 @@ package android.media.tv.tuner.filter {
  }
  public class AvSettings extends android.media.tv.tuner.filter.Settings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.AvSettings.Builder builder(@NonNull android.content.Context, int, boolean);
    method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean);
    method public boolean isPassthrough();
  }
@@ -5024,7 +5024,7 @@ package android.media.tv.tuner.filter {
  }
  public class DownloadSettings extends android.media.tv.tuner.filter.Settings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.DownloadSettings.Builder builder(@NonNull android.content.Context, int);
    method @NonNull public static android.media.tv.tuner.filter.DownloadSettings.Builder builder(int);
    method public int getDownloadId();
  }
@@ -5086,7 +5086,7 @@ package android.media.tv.tuner.filter {
  }
  public final class IpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
    method public int getDstPort();
    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
@@ -5125,7 +5125,7 @@ package android.media.tv.tuner.filter {
  }
  public final class MmtpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder builder();
    method public int getMmtpPacketId();
    method public int getType();
  }
@@ -5148,7 +5148,7 @@ package android.media.tv.tuner.filter {
  }
  public class PesSettings extends android.media.tv.tuner.filter.Settings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.PesSettings.Builder builder(@NonNull android.content.Context, int);
    method @NonNull public static android.media.tv.tuner.filter.PesSettings.Builder builder(int);
    method public int getStreamId();
    method public boolean isRaw();
  }
@@ -5160,7 +5160,7 @@ package android.media.tv.tuner.filter {
  }
  public class RecordSettings extends android.media.tv.tuner.filter.Settings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.RecordSettings.Builder builder(@NonNull android.content.Context, int);
    method @NonNull public static android.media.tv.tuner.filter.RecordSettings.Builder builder(int);
    method public int getScIndexMask();
    method public int getScIndexType();
    method public int getTsIndexMask();
@@ -5221,7 +5221,7 @@ package android.media.tv.tuner.filter {
  }
  public class SectionSettingsWithSectionBits extends android.media.tv.tuner.filter.SectionSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder builder(@NonNull android.content.Context, int);
    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder builder(int);
    method @NonNull public byte[] getFilterBytes();
    method @NonNull public byte[] getMask();
    method @NonNull public byte[] getMode();
@@ -5235,7 +5235,7 @@ package android.media.tv.tuner.filter {
  }
  public class SectionSettingsWithTableInfo extends android.media.tv.tuner.filter.SectionSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder builder(@NonNull android.content.Context, int);
    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder builder(int);
    method public int getTableId();
    method public int getVersion();
  }
@@ -5268,7 +5268,7 @@ package android.media.tv.tuner.filter {
  }
  public final class TlvFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.TlvFilterConfiguration.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.filter.TlvFilterConfiguration.Builder builder();
    method public int getPacketType();
    method public int getType();
    method public boolean isCompressedIpPacket();
@@ -5289,7 +5289,7 @@ package android.media.tv.tuner.filter {
  }
  public final class TsFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.filter.TsFilterConfiguration.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.filter.TsFilterConfiguration.Builder builder();
    method public int getTpid();
    method public int getType();
  }
@@ -5317,7 +5317,7 @@ package android.media.tv.tuner.frontend {
  }
  public class AnalogFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder();
    method public int getSifStandard();
    method public int getSignalType();
    method public int getType();
@@ -5368,7 +5368,7 @@ package android.media.tv.tuner.frontend {
  }
  public class Atsc3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder builder();
    method public int getBandwidth();
    method public int getDemodOutputFormat();
    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings[] getPlpSettings();
@@ -5431,7 +5431,7 @@ package android.media.tv.tuner.frontend {
  }
  public class Atsc3PlpSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder builder();
    method public int getCodeRate();
    method public int getFec();
    method public int getInterleaveMode();
@@ -5453,7 +5453,7 @@ package android.media.tv.tuner.frontend {
  }
  public class AtscFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.AtscFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.AtscFrontendSettings.Builder builder();
    method public int getModulation();
    method public int getType();
    field public static final int MODULATION_AUTO = 1; // 0x1
@@ -5475,7 +5475,7 @@ package android.media.tv.tuner.frontend {
  }
  public class DvbcFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder builder();
    method public int getAnnex();
    method public long getInnerFec();
    method public int getModulation();
@@ -5514,7 +5514,7 @@ package android.media.tv.tuner.frontend {
  }
  public class DvbsCodeRate {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.DvbsCodeRate.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.DvbsCodeRate.Builder builder();
    method public int getBitsPer1000Symbol();
    method public long getInnerFec();
    method public boolean isLinear();
@@ -5536,7 +5536,7 @@ package android.media.tv.tuner.frontend {
  }
  public class DvbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder builder();
    method @Nullable public android.media.tv.tuner.frontend.DvbsCodeRate getCodeRate();
    method public int getInputStreamId();
    method public int getModulation();
@@ -5606,7 +5606,7 @@ package android.media.tv.tuner.frontend {
  }
  public class DvbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder builder();
    method public int getBandwidth();
    method public int getConstellation();
    method public int getGuardInterval();
@@ -5825,7 +5825,7 @@ package android.media.tv.tuner.frontend {
  }
  public class Isdbs3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder builder();
    method public int getCodeRate();
    method public int getModulation();
    method public int getRolloff();
@@ -5874,7 +5874,7 @@ package android.media.tv.tuner.frontend {
  }
  public class IsdbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder builder();
    method public int getCodeRate();
    method public int getModulation();
    method public int getRolloff();
@@ -5920,7 +5920,7 @@ package android.media.tv.tuner.frontend {
  }
  public class IsdbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder builder(@NonNull android.content.Context);
    method @NonNull public static android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder builder();
    method public int getBandwidth();
    method public int getCodeRate();
    method public int getGuardInterval();
+0 −2
Original line number Diff line number Diff line
@@ -450,7 +450,6 @@ public class Tuner implements AutoCloseable {
     * @see #setOnTuneEventListener(Executor, OnTuneEventListener)
     */
    public void clearOnTuneEventListener() {
        TunerUtils.checkTunerPermission(mContext);
        mOnTuneEventListener = null;
        mOnTunerEventExecutor = null;

@@ -497,7 +496,6 @@ public class Tuner implements AutoCloseable {
     */
    @Result
    public int cancelTuning() {
        TunerUtils.checkTunerPermission(mContext);
        return nativeStopTune();
    }

+0 −40
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
package android.media.tv.tuner;

import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.tv.tuner.V1_0.Constants;
import android.media.tv.tuner.filter.Filter;

@@ -28,44 +26,6 @@ import android.media.tv.tuner.filter.Filter;
 * @hide
 */
public final class TunerUtils {
    private static final String TUNER_PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
    private static final String DESCRAMBLER_PERMISSION =
            android.Manifest.permission.ACCESS_TV_DESCRAMBLER;

    /**
     * Checks whether the caller has permission to access tuner.
     *
     * @param context context of the caller.
     * @throws SecurityException if the caller doesn't have the permission.
     */
    public static void checkTunerPermission(Context context) {
        checkPermission(context, TUNER_PERMISSION);
    }

    /**
     * Checks whether the caller has permission to access the descrambler.
     *
     * @param context context of the caller.
     * @throws SecurityException if the caller doesn't have the permission.
     */
    public static void checkDescramblerPermission(Context context) {
        checkPermission(context, DESCRAMBLER_PERMISSION);
    }

    /**
     * Checks whether the caller has the given permission.
     *
     * @param context context of the caller.
     * @param permission the given permission.
     * @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.");
        }
    }

    /**
     * Gets the corresponding filter subtype constant defined in tuner HAL.
+1 −8
Original line number Diff line number Diff line
@@ -19,11 +19,8 @@ package android.media.tv.tuner.dvr;
import android.annotation.BytesLong;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.content.Context;
import android.hardware.tv.tuner.V1_0.Constants;
import android.media.tv.tuner.TunerUtils;
import android.media.tv.tuner.filter.Filter;

import java.lang.annotation.Retention;
@@ -123,13 +120,9 @@ public class DvrSettings {

    /**
     * Creates a builder for {@link DvrSettings}.
     *
     * @param context the context of the caller.
     */
    @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
    @NonNull
    public static Builder builder(@NonNull Context context) {
        TunerUtils.checkTunerPermission(context);
    public static Builder builder() {
        return new Builder();
    }

+1 −8
Original line number Diff line number Diff line
@@ -19,11 +19,8 @@ package android.media.tv.tuner.filter;
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;
import android.media.tv.tuner.TunerUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -111,13 +108,9 @@ public final class AlpFilterConfiguration extends FilterConfiguration {

    /**
     * Creates a builder for {@link AlpFilterConfiguration}.
     *
     * @param context the context of the caller.
     */
    @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
    @NonNull
    public static Builder builder(@NonNull Context context) {
        TunerUtils.checkTunerPermission(context);
    public static Builder builder() {
        return new Builder();
    }

Loading