/*
 * Copyright (C) 2006 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.
 */

syntax = "proto2";
option java_package = "android.content";
option java_multiple_files = true;

package android.content;

import "frameworks/base/core/proto/android/app/window_configuration.proto";
import "frameworks/base/core/proto/android/content/locale.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";

/**
 * An android resource configuration.
 */
message ConfigurationProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional float font_scale = 1;
  optional uint32 mcc = 2;
  optional uint32 mnc = 3;
  repeated LocaleProto locales = 4;
  optional uint32 screen_layout = 5;
  optional uint32 touchscreen = 6;
  optional uint32 keyboard_hidden = 7;
  optional uint32 hard_keyboard_hidden = 8;
  optional uint32 navigation = 9;
  optional uint32 navigation_hidden = 10;
  optional uint32 orientation = 11;
  optional uint32 ui_mode = 12;
  optional uint32 screen_width_dp = 13;
  optional uint32 screen_height_dp = 14;
  optional uint32 smallest_screen_width_dp = 15;
  optional uint32 density_dpi = 16;
  optional .android.app.WindowConfigurationProto window_configuration = 17;
}

