// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FLUTTER_RUNTIME_PLATFORM_DATA_H_
#define FLUTTER_RUNTIME_PLATFORM_DATA_H_

#include <memory>
#include <string>
#include <vector>

#include "flutter/lib/ui/window/viewport_metrics.h"
#include "flutter/shell/common/display.h"

namespace flutter {

//------------------------------------------------------------------------------
/// The struct of platform-specific data used for initializing
/// ui.PlatformDispatcher.
///
/// The framework may request data from ui.PlatformDispatcher before the
/// platform is properly configured. When creating the Shell, the engine sets
/// this struct to default values until the platform is ready to send the real
/// data.
///
/// See also:
///
///  * flutter::Shell::Create, which takes a platform_data to initialize the
///    ui.PlatformDispatcher attached to it.
struct PlatformData {
  PlatformData();

  ~PlatformData();

  ViewportMetrics viewport_metrics;
  std::string language_code;
  std::string country_code;
  std::string script_code;
  std::string variant_code;
  std::vector<std::string> locale_data;
  std::string user_settings_data = "{}";
  std::string lifecycle_state;
  bool semantics_enabled = false;
  bool assistive_technology_enabled = false;
  int32_t accessibility_feature_flags_ = 0;
  std::vector<DisplayData> displays;
};

}  // namespace flutter

#endif  // FLUTTER_RUNTIME_PLATFORM_DATA_H_
