Add RDS info to virtual stations, convert to ProgramInfo.

Bug: b/36864090
Test: manual, VTS (none added)
Change-Id: Iad54f5abee4c722030ae118cb3c4d8ad64225b34
diff --git a/broadcastradio/1.1/default/Tuner.cpp b/broadcastradio/1.1/default/Tuner.cpp
index 64d8b89..9b39d36 100644
--- a/broadcastradio/1.1/default/Tuner.cpp
+++ b/broadcastradio/1.1/default/Tuner.cpp
@@ -107,24 +107,17 @@
         virtualRadio = &mVirtualFm;
     }
 
-    auto& info11 = mCurrentProgramInfo;
-    auto& info10 = info11.base;
-
     VirtualProgram virtualProgram;
     if (virtualRadio != nullptr && virtualRadio->getProgram(mCurrentProgram, virtualProgram)) {
-        // TODO(b/36864090): convert virtualProgram to ProgramInfo instead
-        info10.channel = mCurrentProgram;
-        info10.tuned = true;
-        info10.stereo = true;
-        info10.signalStrength = 100;
+        mCurrentProgramInfo = static_cast<ProgramInfo>(virtualProgram);
     } else {
-        info11 = makeDummyProgramInfo(mCurrentProgram);
+        mCurrentProgramInfo = makeDummyProgramInfo(mCurrentProgram);
     }
     mIsTuneCompleted = true;
 
-    mCallback->tuneComplete(Result::OK, info10);
+    mCallback->tuneComplete(Result::OK, mCurrentProgramInfo.base);
     if (mCallback1_1 != nullptr) {
-        mCallback1_1->tuneComplete_1_1(Result::OK, info11);
+        mCallback1_1->tuneComplete_1_1(Result::OK, mCurrentProgramInfo);
     }
 }
 
@@ -274,20 +267,8 @@
         return Void();
     }
 
-    hidl_vec<ProgramInfo> list;
-    auto vList = virtualRadio.getProgramList();
-    list.resize(vList.size());
-    for (size_t i = 0; i < vList.size(); i++) {
-        auto& src = vList[i];
-        auto& dst11 = list[i];
-        auto& dst10 = dst11.base;
-
-        // TODO(b/36864090): convert virtualProgram to ProgramInfo instead
-        dst10.channel = src.channel;
-        dst10.tuned = true;
-    }
-
-    _hidl_cb(ProgramListResult::OK, list);
+    auto list = virtualRadio.getProgramList();
+    _hidl_cb(ProgramListResult::OK, vector<ProgramInfo>(list.begin(), list.end()));
     return Void();
 }
 
diff --git a/broadcastradio/1.1/default/VirtualProgram.cpp b/broadcastradio/1.1/default/VirtualProgram.cpp
index b418bf7..df12a3e 100644
--- a/broadcastradio/1.1/default/VirtualProgram.cpp
+++ b/broadcastradio/1.1/default/VirtualProgram.cpp
@@ -21,6 +21,28 @@
 namespace V1_1 {
 namespace implementation {
 
+using V1_0::MetaData;
+using V1_0::MetadataKey;
+using V1_0::MetadataType;
+
+VirtualProgram::operator ProgramInfo() const {
+    ProgramInfo info11 = {};
+    auto& info10 = info11.base;
+
+    info10.channel = channel;
+    info10.tuned = true;
+    info10.stereo = true;
+    info10.signalStrength = 100;
+
+    info10.metadata = hidl_vec<MetaData>({
+        {MetadataType::TEXT, MetadataKey::RDS_PS, {}, {}, programName, {}},
+        {MetadataType::TEXT, MetadataKey::TITLE, {}, {}, songTitle, {}},
+        {MetadataType::TEXT, MetadataKey::ARTIST, {}, {}, songArtist, {}},
+    });
+
+    return info11;
+}
+
 bool operator<(const VirtualProgram& lhs, const VirtualProgram& rhs) {
     return lhs.channel < rhs.channel;
 }
diff --git a/broadcastradio/1.1/default/VirtualProgram.h b/broadcastradio/1.1/default/VirtualProgram.h
index ff44590..303513f 100644
--- a/broadcastradio/1.1/default/VirtualProgram.h
+++ b/broadcastradio/1.1/default/VirtualProgram.h
@@ -16,6 +16,7 @@
 #ifndef ANDROID_HARDWARE_BROADCASTRADIO_V1_1_VIRTUALPROGRAM_H
 #define ANDROID_HARDWARE_BROADCASTRADIO_V1_1_VIRTUALPROGRAM_H
 
+#include <android/hardware/broadcastradio/1.1/types.h>
 #include <cstdint>
 
 namespace android {
@@ -27,6 +28,11 @@
 struct VirtualProgram {
     uint32_t channel;  // TODO(b/32621193): Station Selector
 
+    std::string programName = "";
+    std::string songArtist = "";
+    std::string songTitle = "";
+
+    explicit operator ProgramInfo() const;
     friend bool operator<(const VirtualProgram& lhs, const VirtualProgram& rhs);
 };
 
diff --git a/broadcastradio/1.1/default/VirtualRadio.cpp b/broadcastradio/1.1/default/VirtualRadio.cpp
index 017a01f..0eab7ae 100644
--- a/broadcastradio/1.1/default/VirtualRadio.cpp
+++ b/broadcastradio/1.1/default/VirtualRadio.cpp
@@ -27,7 +27,13 @@
 using std::vector;
 
 vector<VirtualProgram> gInitialFmPrograms{
-    {94900}, {96500}, {97300}, {99700}, {101300}, {103700}, {106100},
+    {94900, "Wild 94.9", "Drake ft. Rihanna", "Too Good"},
+    {96500, "KOIT", "Celine Dion", "All By Myself"},
+    {97300, "Alice@97.3", "Drops of Jupiter", "Train"},
+    {99700, "99.7 Now!", "The Chainsmokers", "Closer"},
+    {101300, "101-3 KISS-FM", "Justin Timberlake", "Rock Your Body"},
+    {103700, "iHeart80s @ 103.7", "Michael Jackson", "Billie Jean"},
+    {106100, "106 KMEL", "Drake", "Marvins Room"},
 };
 
 VirtualRadio::VirtualRadio(VirtualRadio&& o) : mPrograms(move(o.mPrograms)) {}