#!/usr/bin/env python3
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""
Continuously poll for energy info for a single Android Device
"""

from queue import Empty
from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest


class EnergyTest(BluetoothBaseTest):
    def __init__(self, controllers):
        BluetoothBaseTest.__init__(self, controllers)
        self.tests = ("test_continuous_energy_report", )

    @BluetoothBaseTest.bt_test_wrap
    def test_continuous_energy_report(self):
        while (True):
            try:
                self.log.info(self.android_devices[
                    0].droid.bluetoothGetControllerActivityEnergyInfo(1))
            except Exception:
                self.log.error("Failed to log energy info... continuing.")
        return True
