chromium/ash/system/bluetooth/bluetooth_device_list_item_battery_view.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_SYSTEM_BLUETOOTH_BLUETOOTH_DEVICE_LIST_ITEM_BATTERY_VIEW_H_
#define ASH_SYSTEM_BLUETOOTH_BLUETOOTH_DEVICE_LIST_ITEM_BATTERY_VIEW_H_

#include <optional>

#include "ash/ash_export.h"
#include "ash/system/power/power_status.h"
#include "ash/system/tray/hover_highlight_view.h"
#include "base/memory/raw_ptr.h"
#include "chromeos/ash/services/bluetooth_config/public/mojom/cros_bluetooth_config.mojom.h"

namespace views {
class ImageView;
class Label;
}  // namespace views

namespace ash {

// This class encapsulates the logic of configuring the view shown for a single
// Bluetooth device battery for a device in the detailed Bluetooth page within
// the quick settings.
class ASH_EXPORT BluetoothDeviceListItemBatteryView : public views::View {
  METADATA_HEADER(BluetoothDeviceListItemBatteryView, views::View)

 public:
  BluetoothDeviceListItemBatteryView();
  BluetoothDeviceListItemBatteryView(
      const BluetoothDeviceListItemBatteryView&) = delete;
  BluetoothDeviceListItemBatteryView& operator=(
      const BluetoothDeviceListItemBatteryView&) = delete;
  ~BluetoothDeviceListItemBatteryView() override;

  // Update the battery icon and text to reflect |new_battery_percentage|, and
  // the label will be set to |label_string_id|.
  void UpdateBatteryInfo(const uint8_t new_battery_percentage,
                         const int label_string_id);

 private:
  // Evaluates whether the |old_charge_percent| and |new_charge_percent| values
  // are different enough to warrant updating the view. We avoid updating the
  // view if possible since the battery icon is not cached.
  bool ApproximatelyEqual(uint8_t old_charge_percent,
                          uint8_t new_charge_percent) const;

  std::optional<uint8_t> last_shown_battery_percentage_;

  raw_ptr<views::Label> label_ = nullptr;
  raw_ptr<views::ImageView> icon_ = nullptr;
};

}  // namespace ash

#endif  // ASH_SYSTEM_BLUETOOTH_BLUETOOTH_DEVICE_LIST_ITEM_BATTERY_VIEW_H_