From 05392d6360b89538aa8fcbb1afd50775adfadcf4 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Mon, 10 Jul 2017 19:33:22 -0700 Subject: [PATCH] Publish new Broadcast Radio APIs. Also, rename FEATURE_RADIO to FEATURE_BROADCASTRADIO. Bug: b/34348946 Bug: b/63405337 Test: instrumentalization Change-Id: Ibf5851a10b94f9e82db85f740fde6f28efe48666 --- api/system-current.txt | 16 ++++++++++++++++ .../android/content/pm/PackageManager.java | 10 +++++----- .../android/hardware/radio/RadioManager.java | 12 ------------ .../android/hardware/radio/RadioTuner.java | 19 ++----------------- .../java/com/android/server/SystemServer.java | 4 ++-- .../hardware/radio/tests/RadioTest.java | 3 ++- 6 files changed, 27 insertions(+), 37 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index e6675f6780c19..252c571fc8d46 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -11398,6 +11398,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_BACKUP = "android.software.backup"; field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth"; field public static final java.lang.String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le"; + field public static final java.lang.String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio"; field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera"; field public static final java.lang.String FEATURE_CAMERA_ANY = "android.hardware.camera.any"; field public static final java.lang.String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus"; @@ -17315,7 +17316,10 @@ package android.hardware.radio { method public int getNumTuners(); method public java.lang.String getProduct(); method public java.lang.String getSerial(); + method public java.lang.String getServiceName(); + method public java.lang.String getVendorExension(); method public java.lang.String getVersion(); + method public boolean isBackgroundScanningSupported(); method public boolean isCaptureSupported(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -17327,7 +17331,10 @@ package android.hardware.radio { method public android.hardware.radio.RadioMetadata getMetadata(); method public int getSignalStrength(); method public int getSubChannel(); + method public java.lang.String getVendorExension(); method public boolean isDigital(); + method public boolean isLive(); + method public boolean isMuted(); method public boolean isStereo(); method public boolean isTuned(); method public void writeToParcel(android.os.Parcel, int); @@ -17385,15 +17392,21 @@ package android.hardware.radio { method public abstract int getConfiguration(android.hardware.radio.RadioManager.BandConfig[]); method public abstract boolean getMute(); method public abstract int getProgramInformation(android.hardware.radio.RadioManager.ProgramInfo[]); + method public abstract java.util.List getProgramList(java.lang.String); method public abstract boolean hasControl(); + method public abstract boolean isAnalogForced(); method public abstract boolean isAntennaConnected(); method public abstract int scan(int, boolean); + method public abstract void setAnalogForced(boolean); method public abstract int setConfiguration(android.hardware.radio.RadioManager.BandConfig); method public abstract int setMute(boolean); + method public abstract boolean startBackgroundScan(); method public abstract int step(int, boolean); method public abstract int tune(int, int); field public static final int DIRECTION_DOWN = 1; // 0x1 field public static final int DIRECTION_UP = 0; // 0x0 + field public static final int ERROR_BACKGROUND_SCAN_FAILED = 6; // 0x6 + field public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5; // 0x5 field public static final int ERROR_CANCELLED = 2; // 0x2 field public static final int ERROR_CONFIG = 4; // 0x4 field public static final int ERROR_HARDWARE_FAILURE = 0; // 0x0 @@ -17404,12 +17417,15 @@ package android.hardware.radio { public static abstract class RadioTuner.Callback { ctor public RadioTuner.Callback(); method public void onAntennaState(boolean); + method public void onBackgroundScanAvailabilityChange(boolean); + method public void onBackgroundScanComplete(); method public void onConfigurationChanged(android.hardware.radio.RadioManager.BandConfig); method public void onControlChanged(boolean); method public void onEmergencyAnnouncement(boolean); method public void onError(int); method public void onMetadataChanged(android.hardware.radio.RadioMetadata); method public void onProgramInfoChanged(android.hardware.radio.RadioManager.ProgramInfo); + method public void onProgramListChanged(); method public void onTrafficAnnouncement(boolean); } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 827711afe8da2..040f85b3c1325 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -54,7 +54,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; -import android.provider.Settings; import android.util.AndroidException; import android.util.Log; @@ -1901,12 +1900,13 @@ public abstract class PackageManager { public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; /** - * The device includes broadcast radio tuner. - * - * @hide FutureFeature + * Feature for {@link #getSystemAvailableFeatures} and + * {@link #hasSystemFeature}: The device includes broadcast radio tuner. + * @hide */ + @SystemApi @SdkConstant(SdkConstantType.FEATURE) - public static final String FEATURE_RADIO = "android.hardware.radio"; + public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio"; /** * Feature for {@link #getSystemAvailableFeatures} and diff --git a/core/java/android/hardware/radio/RadioManager.java b/core/java/android/hardware/radio/RadioManager.java index f697b89f6fdd3..d25e752f87736 100644 --- a/core/java/android/hardware/radio/RadioManager.java +++ b/core/java/android/hardware/radio/RadioManager.java @@ -153,8 +153,6 @@ public class RadioManager { /** * Module service (driver) name as registered with HIDL. * @return the module service name. - * - * @hide FutureFeature */ public @NonNull String getServiceName() { return mServiceName; @@ -229,8 +227,6 @@ public class RadioManager { * * @return {@code true} if background scanning is supported (not necessary available * at a given time), {@code false} otherwise. - * - * @hide FutureFeature */ public boolean isBackgroundScanningSupported() { return mIsBgScanSupported; @@ -245,8 +241,6 @@ public class RadioManager { * * Client application MUST verify vendor/product name from the * ModuleProperties class before doing any interpretation of this value. - * - * @hide FutureFeature */ public @NonNull String getVendorExension() { return mVendorExension == null ? "" : mVendorExension; @@ -1324,8 +1318,6 @@ public class RadioManager { * {@code true} if the program is currently playing live stream. * This may result in a slightly altered reception parameters, * usually targetted at reduced latency. - * - * @hide FutureFeature */ public boolean isLive() { return (mFlags & FLAG_LIVE) != 0; @@ -1336,8 +1328,6 @@ public class RadioManager { * conditions or buffering. In this state volume knob MAY be disabled to * prevent user increasing volume too much. * It does NOT mean the user has muted audio. - * - * @hide FutureFeature */ public boolean isMuted() { return (mFlags & FLAG_MUTED) != 0; @@ -1366,8 +1356,6 @@ public class RadioManager { * * Client application MUST verify vendor/product name from the * ModuleProperties class before doing any interpretation of this value. - * - * @hide FutureFeature */ public @NonNull String getVendorExension() { return mVendorExension == null ? "" : mVendorExension; diff --git a/core/java/android/hardware/radio/RadioTuner.java b/core/java/android/hardware/radio/RadioTuner.java index 78d7b61e8d228..61e62eaabf8c7 100644 --- a/core/java/android/hardware/radio/RadioTuner.java +++ b/core/java/android/hardware/radio/RadioTuner.java @@ -219,7 +219,6 @@ public abstract class RadioTuner { * is unavailable; ie. temporarily due to ongoing foreground playback in single-tuner device * or permanently if the feature is not supported * (see ModuleProperties#isBackgroundScanningSupported()). - * @hide FutureFeature */ public abstract boolean startBackgroundScan(); @@ -234,7 +233,6 @@ public abstract class RadioTuner { * @throws IllegalStateException if the scan is in progress or has not been started, * startBackgroundScan() call may fix it. * @throws IllegalArgumentException if the filter argument is not valid. - * @hide FutureFeature */ public abstract @NonNull List getProgramList(@Nullable String filter); @@ -244,7 +242,6 @@ public abstract class RadioTuner { * @throws IllegalStateException if the switch is not supported at current * configuration. * @return {@code true} if analog is forced, {@code false} otherwise. - * @hide FutureFeature */ public abstract boolean isAnalogForced(); @@ -260,7 +257,6 @@ public abstract class RadioTuner { * @param isForced {@code true} to force analog, {@code false} for a default behaviour. * @throws IllegalStateException if the switch is not supported at current * configuration. - * @hide FutureFeature */ public abstract void setAnalogForced(boolean isForced); @@ -298,15 +294,9 @@ public abstract class RadioTuner { public static final int ERROR_SCAN_TIMEOUT = 3; /** The requested configuration could not be applied */ public static final int ERROR_CONFIG = 4; - /** - * Background scan was interrupted due to hardware becoming temporarily unavailable. - * @hide FutureFeature - */ + /** Background scan was interrupted due to hardware becoming temporarily unavailable. */ public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5; - /** - * Background scan failed due to other error, ie. HW failure. - * @hide FutureFeature - */ + /** Background scan failed due to other error, ie. HW failure. */ public static final int ERROR_BACKGROUND_SCAN_FAILED = 6; /** @@ -373,14 +363,11 @@ public abstract class RadioTuner { * * @param isAvailable true, if the tuner turned temporarily background- * capable, false in the other case. - * @hide FutureFeature */ public void onBackgroundScanAvailabilityChange(boolean isAvailable) {} /** * Called when a background scan completes successfully. - * - * @hide FutureFeature */ public void onBackgroundScanComplete() {} @@ -388,8 +375,6 @@ public abstract class RadioTuner { * Called when available program list changed. * * Use getProgramList() to get the actual list. - * - * @hide FutureFeature */ public void onProgramListChanged() {} } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index d5e0eb0e1e412..c2a5b6cff8146 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1213,8 +1213,8 @@ public final class SystemServer { mSystemServiceManager.startService(AudioService.Lifecycle.class); traceEnd(); - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_RADIO)) { - traceBeginAndSlog("StartRadioService"); + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_BROADCAST_RADIO)) { + traceBeginAndSlog("StartBroadcastRadioService"); mSystemServiceManager.startService(RadioService.class); traceEnd(); } diff --git a/tests/radio/src/android/hardware/radio/tests/RadioTest.java b/tests/radio/src/android/hardware/radio/tests/RadioTest.java index b7a5ac4eb19b6..72747548660c0 100644 --- a/tests/radio/src/android/hardware/radio/tests/RadioTest.java +++ b/tests/radio/src/android/hardware/radio/tests/RadioTest.java @@ -81,7 +81,8 @@ public class RadioTest { // check if radio is supported and skip the test if it's not PackageManager packageManager = mContext.getPackageManager(); - boolean isRadioSupported = packageManager.hasSystemFeature(PackageManager.FEATURE_RADIO); + boolean isRadioSupported = packageManager.hasSystemFeature( + PackageManager.FEATURE_BROADCAST_RADIO); assumeTrue(isRadioSupported); // Check radio access permission