Loading core/java/android/hardware/radio/RadioManager.java +60 −3 Original line number Diff line number Diff line Loading @@ -16,11 +16,13 @@ package android.hardware.radio; import android.annotation.NonNull; import android.annotation.SystemApi; import android.content.Context; import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import java.util.List; import java.util.Arrays; Loading Loading @@ -108,10 +110,12 @@ public class RadioManager { private final int mNumAudioSources; private final boolean mIsCaptureSupported; private final BandDescriptor[] mBands; private final boolean mIsBgScanSupported; private final String mVendorExension; ModuleProperties(int id, int classId, String implementor, String product, String version, String serial, int numTuners, int numAudioSources, boolean isCaptureSupported, BandDescriptor[] bands) { BandDescriptor[] bands, boolean isBgScanSupported, String vendorExension) { mId = id; mClassId = classId; mImplementor = implementor; Loading @@ -122,6 +126,8 @@ public class RadioManager { mNumAudioSources = numAudioSources; mIsCaptureSupported = isCaptureSupported; mBands = bands; mIsBgScanSupported = isBgScanSupported; mVendorExension = vendorExension; } Loading Loading @@ -206,7 +212,23 @@ public class RadioManager { * @hide FutureFeature */ public boolean isBackgroundScanningSupported() { return false; return mIsBgScanSupported; } /** * Opaque vendor-specific string, passed from HAL without changes. * Format of this string can vary across vendors. * * It may be used for extra features, that's not supported by a platform, * for example: "preset-slots=6;ultra-hd-capable=false". * * 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; } /** List of descriptors for all bands supported by this module. Loading @@ -231,6 +253,8 @@ public class RadioManager { for (int i = 0; i < tmp.length; i++) { mBands[i] = (BandDescriptor) tmp[i]; } mIsBgScanSupported = in.readInt() == 1; mVendorExension = in.readString(); } public static final Parcelable.Creator<ModuleProperties> CREATOR Loading @@ -256,6 +280,8 @@ public class RadioManager { dest.writeInt(mNumAudioSources); dest.writeInt(mIsCaptureSupported ? 1 : 0); dest.writeParcelableArray(mBands, flags); dest.writeInt(mIsBgScanSupported ? 1 : 0); dest.writeString(mVendorExension); } @Override Loading @@ -271,6 +297,7 @@ public class RadioManager { + ", mNumTuners=" + mNumTuners + ", mNumAudioSources=" + mNumAudioSources + ", mIsCaptureSupported=" + mIsCaptureSupported + ", mIsBgScanSupported=" + mIsBgScanSupported + ", mBands=" + Arrays.toString(mBands) + "]"; } Loading @@ -288,6 +315,8 @@ public class RadioManager { result = prime * result + mNumAudioSources; result = prime * result + (mIsCaptureSupported ? 1 : 0); result = prime * result + Arrays.hashCode(mBands); result = prime * result + (mIsBgScanSupported ? 1 : 0); result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode()); return result; } Loading Loading @@ -330,6 +359,10 @@ public class RadioManager { return false; if (!Arrays.equals(mBands, other.getBands())) return false; if (mIsBgScanSupported != other.isBackgroundScanningSupported()) return false; if (!TextUtils.equals(mVendorExension, other.mVendorExension)) return false; return true; } } Loading Loading @@ -1161,9 +1194,11 @@ public class RadioManager { private final int mFlags; private final int mSignalStrength; private final RadioMetadata mMetadata; private final String mVendorExension; ProgramInfo(int channel, int subChannel, boolean tuned, boolean stereo, boolean digital, int signalStrength, RadioMetadata metadata, int flags) { boolean digital, int signalStrength, RadioMetadata metadata, int flags, String vendorExension) { mChannel = channel; mSubChannel = subChannel; mTuned = tuned; Loading @@ -1172,6 +1207,7 @@ public class RadioManager { mFlags = flags; mSignalStrength = signalStrength; mMetadata = metadata; mVendorExension = vendorExension; } /** Main channel expressed in units according to band type. Loading Loading @@ -1243,6 +1279,22 @@ public class RadioManager { return mMetadata; } /** * Opaque vendor-specific string, passed from HAL without changes. * Format of this string can vary across vendors. * * It may be used for extra features, that's not supported by a platform, * for example: "paid-service=true;bitrate=320kbps". * * 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; } private ProgramInfo(Parcel in) { mChannel = in.readInt(); mSubChannel = in.readInt(); Loading @@ -1256,6 +1308,7 @@ public class RadioManager { mMetadata = null; } mFlags = in.readInt(); mVendorExension = in.readString(); } public static final Parcelable.Creator<ProgramInfo> CREATOR Loading Loading @@ -1284,6 +1337,7 @@ public class RadioManager { mMetadata.writeToParcel(dest, flags); } dest.writeInt(mFlags); dest.writeString(mVendorExension); } @Override Loading Loading @@ -1312,6 +1366,7 @@ public class RadioManager { result = prime * result + mFlags; result = prime * result + mSignalStrength; result = prime * result + ((mMetadata == null) ? 0 : mMetadata.hashCode()); result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode()); return result; } Loading Loading @@ -1341,6 +1396,8 @@ public class RadioManager { return false; } else if (!mMetadata.equals(other.getMetadata())) return false; if (!TextUtils.equals(mVendorExension, other.mVendorExension)) return false; return true; } } Loading core/jni/android_hardware_Radio.cpp +9 −4 Original line number Diff line number Diff line Loading @@ -326,13 +326,15 @@ static jint convertProgramInfoFromNative(JNIEnv *env, ALOGV("%s channel %d tuned %d", __FUNCTION__, nProgramInfo->channel, nProgramInfo->tuned); int flags = 0; // TODO(b/32621193): pass from the HAL jstring jVendorExension = env->NewStringUTF(""); // TODO(b/32621193): pass from the HAL *jProgramInfo = env->NewObject(gRadioProgramInfoClass, gRadioProgramInfoCstor, nProgramInfo->channel, nProgramInfo->sub_channel, nProgramInfo->tuned, nProgramInfo->stereo, nProgramInfo->digital, nProgramInfo->signal_strength, jMetadata, flags); jMetadata, flags, jVendorExension); env->DeleteLocalRef(jMetadata); env->DeleteLocalRef(jVendorExension); return (jint)RADIO_STATUS_OK; } Loading Loading @@ -444,19 +446,22 @@ android_hardware_Radio_listModules(JNIEnv *env, jobject clazz, jstring jProduct = env->NewStringUTF(nModules[i].product); jstring jVersion = env->NewStringUTF(nModules[i].version); jstring jSerial = env->NewStringUTF(nModules[i].serial); bool isBgscanSupported = false; // TODO(b/32621193): pass from the HAL jstring jVendorExension = env->NewStringUTF(""); // TODO(b/32621193): pass from the HAL jobject jModule = env->NewObject(gModulePropertiesClass, gModulePropertiesCstor, nModules[i].handle, nModules[i].class_id, jImplementor, jProduct, jVersion, jSerial, nModules[i].num_tuners, nModules[i].num_audio_sources, nModules[i].supports_capture, jBands); jBands, isBgscanSupported, jVendorExension); env->DeleteLocalRef(jImplementor); env->DeleteLocalRef(jProduct); env->DeleteLocalRef(jVersion); env->DeleteLocalRef(jSerial); env->DeleteLocalRef(jBands); env->DeleteLocalRef(jVendorExension); if (jModule == NULL) { continue; } Loading Loading @@ -883,7 +888,7 @@ int register_android_hardware_Radio(JNIEnv *env) jclass modulePropertiesClass = FindClassOrDie(env, kModulePropertiesClassPathName); gModulePropertiesClass = MakeGlobalRefOrDie(env, modulePropertiesClass); gModulePropertiesCstor = GetMethodIDOrDie(env, modulePropertiesClass, "<init>", "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;)V"); "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;ZLjava/lang/String;)V"); jclass bandDescriptorClass = FindClassOrDie(env, kRadioBandDescriptorClassPathName); gRadioBandDescriptorClass = MakeGlobalRefOrDie(env, bandDescriptorClass); Loading Loading @@ -933,7 +938,7 @@ int register_android_hardware_Radio(JNIEnv *env) jclass programInfoClass = FindClassOrDie(env, kRadioProgramInfoClassPathName); gRadioProgramInfoClass = MakeGlobalRefOrDie(env, programInfoClass); gRadioProgramInfoCstor = GetMethodIDOrDie(env, programInfoClass, "<init>", "(IIZZZILandroid/hardware/radio/RadioMetadata;I)V"); "(IIZZZILandroid/hardware/radio/RadioMetadata;ILjava/lang/String;)V"); jclass metadataClass = FindClassOrDie(env, kRadioMetadataClassPathName); gRadioMetadataClass = MakeGlobalRefOrDie(env, metadataClass); Loading Loading
core/java/android/hardware/radio/RadioManager.java +60 −3 Original line number Diff line number Diff line Loading @@ -16,11 +16,13 @@ package android.hardware.radio; import android.annotation.NonNull; import android.annotation.SystemApi; import android.content.Context; import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import java.util.List; import java.util.Arrays; Loading Loading @@ -108,10 +110,12 @@ public class RadioManager { private final int mNumAudioSources; private final boolean mIsCaptureSupported; private final BandDescriptor[] mBands; private final boolean mIsBgScanSupported; private final String mVendorExension; ModuleProperties(int id, int classId, String implementor, String product, String version, String serial, int numTuners, int numAudioSources, boolean isCaptureSupported, BandDescriptor[] bands) { BandDescriptor[] bands, boolean isBgScanSupported, String vendorExension) { mId = id; mClassId = classId; mImplementor = implementor; Loading @@ -122,6 +126,8 @@ public class RadioManager { mNumAudioSources = numAudioSources; mIsCaptureSupported = isCaptureSupported; mBands = bands; mIsBgScanSupported = isBgScanSupported; mVendorExension = vendorExension; } Loading Loading @@ -206,7 +212,23 @@ public class RadioManager { * @hide FutureFeature */ public boolean isBackgroundScanningSupported() { return false; return mIsBgScanSupported; } /** * Opaque vendor-specific string, passed from HAL without changes. * Format of this string can vary across vendors. * * It may be used for extra features, that's not supported by a platform, * for example: "preset-slots=6;ultra-hd-capable=false". * * 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; } /** List of descriptors for all bands supported by this module. Loading @@ -231,6 +253,8 @@ public class RadioManager { for (int i = 0; i < tmp.length; i++) { mBands[i] = (BandDescriptor) tmp[i]; } mIsBgScanSupported = in.readInt() == 1; mVendorExension = in.readString(); } public static final Parcelable.Creator<ModuleProperties> CREATOR Loading @@ -256,6 +280,8 @@ public class RadioManager { dest.writeInt(mNumAudioSources); dest.writeInt(mIsCaptureSupported ? 1 : 0); dest.writeParcelableArray(mBands, flags); dest.writeInt(mIsBgScanSupported ? 1 : 0); dest.writeString(mVendorExension); } @Override Loading @@ -271,6 +297,7 @@ public class RadioManager { + ", mNumTuners=" + mNumTuners + ", mNumAudioSources=" + mNumAudioSources + ", mIsCaptureSupported=" + mIsCaptureSupported + ", mIsBgScanSupported=" + mIsBgScanSupported + ", mBands=" + Arrays.toString(mBands) + "]"; } Loading @@ -288,6 +315,8 @@ public class RadioManager { result = prime * result + mNumAudioSources; result = prime * result + (mIsCaptureSupported ? 1 : 0); result = prime * result + Arrays.hashCode(mBands); result = prime * result + (mIsBgScanSupported ? 1 : 0); result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode()); return result; } Loading Loading @@ -330,6 +359,10 @@ public class RadioManager { return false; if (!Arrays.equals(mBands, other.getBands())) return false; if (mIsBgScanSupported != other.isBackgroundScanningSupported()) return false; if (!TextUtils.equals(mVendorExension, other.mVendorExension)) return false; return true; } } Loading Loading @@ -1161,9 +1194,11 @@ public class RadioManager { private final int mFlags; private final int mSignalStrength; private final RadioMetadata mMetadata; private final String mVendorExension; ProgramInfo(int channel, int subChannel, boolean tuned, boolean stereo, boolean digital, int signalStrength, RadioMetadata metadata, int flags) { boolean digital, int signalStrength, RadioMetadata metadata, int flags, String vendorExension) { mChannel = channel; mSubChannel = subChannel; mTuned = tuned; Loading @@ -1172,6 +1207,7 @@ public class RadioManager { mFlags = flags; mSignalStrength = signalStrength; mMetadata = metadata; mVendorExension = vendorExension; } /** Main channel expressed in units according to band type. Loading Loading @@ -1243,6 +1279,22 @@ public class RadioManager { return mMetadata; } /** * Opaque vendor-specific string, passed from HAL without changes. * Format of this string can vary across vendors. * * It may be used for extra features, that's not supported by a platform, * for example: "paid-service=true;bitrate=320kbps". * * 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; } private ProgramInfo(Parcel in) { mChannel = in.readInt(); mSubChannel = in.readInt(); Loading @@ -1256,6 +1308,7 @@ public class RadioManager { mMetadata = null; } mFlags = in.readInt(); mVendorExension = in.readString(); } public static final Parcelable.Creator<ProgramInfo> CREATOR Loading Loading @@ -1284,6 +1337,7 @@ public class RadioManager { mMetadata.writeToParcel(dest, flags); } dest.writeInt(mFlags); dest.writeString(mVendorExension); } @Override Loading Loading @@ -1312,6 +1366,7 @@ public class RadioManager { result = prime * result + mFlags; result = prime * result + mSignalStrength; result = prime * result + ((mMetadata == null) ? 0 : mMetadata.hashCode()); result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode()); return result; } Loading Loading @@ -1341,6 +1396,8 @@ public class RadioManager { return false; } else if (!mMetadata.equals(other.getMetadata())) return false; if (!TextUtils.equals(mVendorExension, other.mVendorExension)) return false; return true; } } Loading
core/jni/android_hardware_Radio.cpp +9 −4 Original line number Diff line number Diff line Loading @@ -326,13 +326,15 @@ static jint convertProgramInfoFromNative(JNIEnv *env, ALOGV("%s channel %d tuned %d", __FUNCTION__, nProgramInfo->channel, nProgramInfo->tuned); int flags = 0; // TODO(b/32621193): pass from the HAL jstring jVendorExension = env->NewStringUTF(""); // TODO(b/32621193): pass from the HAL *jProgramInfo = env->NewObject(gRadioProgramInfoClass, gRadioProgramInfoCstor, nProgramInfo->channel, nProgramInfo->sub_channel, nProgramInfo->tuned, nProgramInfo->stereo, nProgramInfo->digital, nProgramInfo->signal_strength, jMetadata, flags); jMetadata, flags, jVendorExension); env->DeleteLocalRef(jMetadata); env->DeleteLocalRef(jVendorExension); return (jint)RADIO_STATUS_OK; } Loading Loading @@ -444,19 +446,22 @@ android_hardware_Radio_listModules(JNIEnv *env, jobject clazz, jstring jProduct = env->NewStringUTF(nModules[i].product); jstring jVersion = env->NewStringUTF(nModules[i].version); jstring jSerial = env->NewStringUTF(nModules[i].serial); bool isBgscanSupported = false; // TODO(b/32621193): pass from the HAL jstring jVendorExension = env->NewStringUTF(""); // TODO(b/32621193): pass from the HAL jobject jModule = env->NewObject(gModulePropertiesClass, gModulePropertiesCstor, nModules[i].handle, nModules[i].class_id, jImplementor, jProduct, jVersion, jSerial, nModules[i].num_tuners, nModules[i].num_audio_sources, nModules[i].supports_capture, jBands); jBands, isBgscanSupported, jVendorExension); env->DeleteLocalRef(jImplementor); env->DeleteLocalRef(jProduct); env->DeleteLocalRef(jVersion); env->DeleteLocalRef(jSerial); env->DeleteLocalRef(jBands); env->DeleteLocalRef(jVendorExension); if (jModule == NULL) { continue; } Loading Loading @@ -883,7 +888,7 @@ int register_android_hardware_Radio(JNIEnv *env) jclass modulePropertiesClass = FindClassOrDie(env, kModulePropertiesClassPathName); gModulePropertiesClass = MakeGlobalRefOrDie(env, modulePropertiesClass); gModulePropertiesCstor = GetMethodIDOrDie(env, modulePropertiesClass, "<init>", "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;)V"); "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;ZLjava/lang/String;)V"); jclass bandDescriptorClass = FindClassOrDie(env, kRadioBandDescriptorClassPathName); gRadioBandDescriptorClass = MakeGlobalRefOrDie(env, bandDescriptorClass); Loading Loading @@ -933,7 +938,7 @@ int register_android_hardware_Radio(JNIEnv *env) jclass programInfoClass = FindClassOrDie(env, kRadioProgramInfoClassPathName); gRadioProgramInfoClass = MakeGlobalRefOrDie(env, programInfoClass); gRadioProgramInfoCstor = GetMethodIDOrDie(env, programInfoClass, "<init>", "(IIZZZILandroid/hardware/radio/RadioMetadata;I)V"); "(IIZZZILandroid/hardware/radio/RadioMetadata;ILjava/lang/String;)V"); jclass metadataClass = FindClassOrDie(env, kRadioMetadataClassPathName); gRadioMetadataClass = MakeGlobalRefOrDie(env, metadataClass); Loading