Merge "Add digital radio flags to ProgramInfo API."

This commit is contained in:
Tomasz Wasilczyk
2017-03-29 18:23:43 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 4 deletions

View File

@@ -1149,21 +1149,27 @@ public class RadioManager {
* {@link RadioTuner#getProgramInformation(RadioManager.ProgramInfo[])} */
public static class ProgramInfo implements Parcelable {
// sourced from hardware/interfaces/broadcastradio/1.1/types.hal
private final static int FLAG_LIVE = 1 << 0;
private final static int FLAG_MUTED = 1 << 1;
private final int mChannel;
private final int mSubChannel;
private final boolean mTuned;
private final boolean mStereo;
private final boolean mDigital;
private final int mFlags;
private final int mSignalStrength;
private final RadioMetadata mMetadata;
ProgramInfo(int channel, int subChannel, boolean tuned, boolean stereo,
boolean digital, int signalStrength, RadioMetadata metadata) {
boolean digital, int signalStrength, RadioMetadata metadata, int flags) {
mChannel = channel;
mSubChannel = subChannel;
mTuned = tuned;
mStereo = stereo;
mDigital = digital;
mFlags = flags;
mSignalStrength = signalStrength;
mMetadata = metadata;
}
@@ -1199,6 +1205,30 @@ public class RadioManager {
public boolean isDigital() {
return mDigital;
}
/**
* {@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;
}
/**
* {@code true} if radio stream is not playing, ie. due to bad reception
* 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;
}
/** Signal strength indicator from 0 (no signal) to 100 (excellent)
* @return the signal strength indication.
*/
@@ -1225,6 +1255,7 @@ public class RadioManager {
} else {
mMetadata = null;
}
mFlags = in.readInt();
}
public static final Parcelable.Creator<ProgramInfo> CREATOR
@@ -1252,6 +1283,7 @@ public class RadioManager {
dest.writeByte((byte)1);
mMetadata.writeToParcel(dest, flags);
}
dest.writeInt(mFlags);
}
@Override
@@ -1263,7 +1295,7 @@ public class RadioManager {
public String toString() {
return "ProgramInfo [mChannel=" + mChannel + ", mSubChannel=" + mSubChannel
+ ", mTuned=" + mTuned + ", mStereo=" + mStereo + ", mDigital=" + mDigital
+ ", mSignalStrength=" + mSignalStrength
+ ", mFlags=" + mFlags + ", mSignalStrength=" + mSignalStrength
+ ((mMetadata == null) ? "" : (", mMetadata=" + mMetadata.toString()))
+ "]";
}
@@ -1277,6 +1309,7 @@ public class RadioManager {
result = prime * result + (mTuned ? 1 : 0);
result = prime * result + (mStereo ? 1 : 0);
result = prime * result + (mDigital ? 1 : 0);
result = prime * result + mFlags;
result = prime * result + mSignalStrength;
result = prime * result + ((mMetadata == null) ? 0 : mMetadata.hashCode());
return result;
@@ -1299,6 +1332,8 @@ public class RadioManager {
return false;
if (mDigital != other.isDigital())
return false;
if (mFlags != other.mFlags)
return false;
if (mSignalStrength != other.getSignalStrength())
return false;
if (mMetadata == null) {

View File

@@ -325,11 +325,12 @@ 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
*jProgramInfo = env->NewObject(gRadioProgramInfoClass, gRadioProgramInfoCstor,
nProgramInfo->channel, nProgramInfo->sub_channel,
nProgramInfo->tuned, nProgramInfo->stereo,
nProgramInfo->digital, nProgramInfo->signal_strength,
jMetadata);
jMetadata, flags);
env->DeleteLocalRef(jMetadata);
return (jint)RADIO_STATUS_OK;
@@ -932,7 +933,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;)V");
"(IIZZZILandroid/hardware/radio/RadioMetadata;I)V");
jclass metadataClass = FindClassOrDie(env, kRadioMetadataClassPathName);
gRadioMetadataClass = MakeGlobalRefOrDie(env, metadataClass);