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

Commit 5fb600b1 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Add digital radio flags to ProgramInfo API.

Bug: b/32621193
Test: manual (KitchenSink)
Change-Id: I24b6beb326d23f456a010699d5ecdf20464ebb78
parent d3549d5c
Loading
Loading
Loading
Loading
+37 −2
Original line number Diff line number Diff line
@@ -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) {
+3 −2
Original line number Diff line number Diff line
@@ -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);