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

Commit bb47714f authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk Committed by Android (Google) Code Review
Browse files

Merge "Fill announcement-related gaps in Broadcast Radio APIs."

parents 8ca043b2 24180098
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -41,6 +41,24 @@ interface ITuner extends @1.0::ITuner {
     */
    tune_1_1(ProgramSelector program) generates (Result result);

    /**
     * Cancels announcement.
     *
     * If it was traffic announcement, trafficAnnouncement(false) callback
     * should be called (just like it was ended in a normal way). Similarly for
     * emergency announcement. If there was no announcement, then no action
     * should be taken.
     *
     * There is a race condition between calling cancelAnnouncement and the
     * actual announcement being finished, so trafficAnnouncement /
     * emergencyAnnouncement callback should be tracked with proper locking.
     *
     * @return result OK if successfully cancelled announcement or there was
     *                no announcement.
     *                NOT_INITIALIZED if another error occurs.
     */
    cancelAnnouncement() generates (Result result);

    /**
     * Retrieve current station information.
     * @return result OK if scan successfully started
+5 −0
Original line number Diff line number Diff line
@@ -269,6 +269,11 @@ Return<Result> Tuner::cancel() {
    return Result::OK;
}

Return<Result> Tuner::cancelAnnouncement() {
    ALOGV("%s", __func__);
    return Result::OK;
}

Return<void> Tuner::getProgramInformation(getProgramInformation_cb _hidl_cb) {
    ALOGV("%s", __func__);
    return getProgramInformation_1_1([&](Result result, const ProgramInfo& info) {
+15 −13
Original line number Diff line number Diff line
@@ -34,19 +34,21 @@ struct Tuner : public ITuner {
    void forceClose();

    // V1_1::ITuner methods
    Return<Result> setConfiguration(const V1_0::BandConfig& config) override;
    Return<void> getConfiguration(getConfiguration_cb _hidl_cb) override;
    Return<Result> scan(V1_0::Direction direction, bool skipSubChannel) override;
    Return<Result> step(V1_0::Direction direction, bool skipSubChannel) override;
    Return<Result> tune(uint32_t channel, uint32_t subChannel) override;
    Return<Result> tune_1_1(const ProgramSelector& program) override;
    Return<Result> cancel() override;
    Return<void> getProgramInformation(getProgramInformation_cb _hidl_cb) override;
    Return<void> getProgramInformation_1_1(getProgramInformation_1_1_cb _hidl_cb) override;
    Return<ProgramListResult> startBackgroundScan() override;
    Return<void> getProgramList(const hidl_string& filter, getProgramList_cb _hidl_cb) override;
    Return<void> isAnalogForced(isAnalogForced_cb _hidl_cb) override;
    Return<Result> setAnalogForced(bool isForced) override;
    virtual Return<Result> setConfiguration(const V1_0::BandConfig& config) override;
    virtual Return<void> getConfiguration(getConfiguration_cb _hidl_cb) override;
    virtual Return<Result> scan(V1_0::Direction direction, bool skipSubChannel) override;
    virtual Return<Result> step(V1_0::Direction direction, bool skipSubChannel) override;
    virtual Return<Result> tune(uint32_t channel, uint32_t subChannel) override;
    virtual Return<Result> tune_1_1(const ProgramSelector& program) override;
    virtual Return<Result> cancel() override;
    virtual Return<Result> cancelAnnouncement() override;
    virtual Return<void> getProgramInformation(getProgramInformation_cb _hidl_cb) override;
    virtual Return<void> getProgramInformation_1_1(getProgramInformation_1_1_cb _hidl_cb) override;
    virtual Return<ProgramListResult> startBackgroundScan() override;
    virtual Return<void> getProgramList(const hidl_string& filter,
                                        getProgramList_cb _hidl_cb) override;
    virtual Return<void> isAnalogForced(isAnalogForced_cb _hidl_cb) override;
    virtual Return<Result> setAnalogForced(bool isForced) override;

   private:
    std::mutex mMut;
+11 −0
Original line number Diff line number Diff line
@@ -43,6 +43,17 @@ enum ProgramInfoFlags : uint32_t {
     * increasing volume too much.
     */
    MUTED = 1 << 1,

    /**
     * Station broadcasts traffic information regularly,
     * but not necessarily right now.
     */
    TRAFFIC_PROGRAM = 1 << 2,

    /**
     * Station is broadcasting traffic information at the very moment.
     */
    TRAFFIC_ANNOUNCEMENT = 1 << 3,
};

struct Properties {
+12 −5
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ using testing::_;
using testing::AnyNumber;
using testing::ByMove;
using testing::DoAll;
using testing::Invoke;
using testing::SaveArg;

using broadcastradio::vts::CallBarrier;
@@ -63,8 +64,9 @@ static void printSkipped(std::string msg) {
    std::cout << "[  SKIPPED ] " << msg << std::endl;
}

class TunerCallbackMock : public ITunerCallback {
   public:
struct TunerCallbackMock : public ITunerCallback {
    TunerCallbackMock() { EXPECT_CALL(*this, hardwareFailure()).Times(0); }

    MOCK_METHOD0(hardwareFailure, Return<void>());
    MOCK_TIMEOUT_METHOD2(configChange, Return<void>(Result, const BandConfig&));
    MOCK_METHOD2(tuneComplete, Return<void>(Result, const V1_0::ProgramInfo&));
@@ -106,9 +108,6 @@ class BroadcastRadioHalTest : public ::testing::VtsHalHidlTargetTestBase,
void BroadcastRadioHalTest::SetUp() {
    radioClass = GetParam();

    // set general expectations for a callback
    EXPECT_CALL(*mCallback, hardwareFailure()).Times(0);

    // lookup HIDL service
    auto factory = getService<IBroadcastRadioFactory>();
    ASSERT_NE(nullptr, factory.get());
@@ -287,6 +286,14 @@ TEST_P(BroadcastRadioHalTest, TuneFromProgramList) {
    EXPECT_EQ(firstProgram.selector.primaryId, selCb.primaryId);
}

TEST_P(BroadcastRadioHalTest, CancelAnnouncement) {
    if (skipped) return;
    ASSERT_TRUE(openTuner(0));

    auto hidlResult = mTuner->cancelAnnouncement();
    EXPECT_EQ(Result::OK, hidlResult);
}

INSTANTIATE_TEST_CASE_P(BroadcastRadioHalTestCases, BroadcastRadioHalTest,
                        ::testing::Values(Class::AM_FM, Class::SAT, Class::DT));