chromium/chrome/browser/apps/app_discovery_service/recommended_arc_apps/device_configuration.proto

// Copyright 2009 Google Inc. All Rights Reserved.
// Author: [email protected] (Ilya Firman)
//
// Defines the protocol buffer message used to upload and store device
// configuration details. This message is used in the Checkin and Market
// device-side API, in the IMAS and Search Server Stubby APIs, as well as
// in the Android Kansas and Market storage schemas. Please keep this in
// mind when making changes.
//
// Copied from google3/wireless/android/proto/device_configuration.proto
// The android part in path needs to be removed.

syntax = "proto2";

package device_configuration;

option optimize_for = LITE_RUNTIME;

// The protocol buffer message used to upload device configuration details.
//
// Next id: 30
message DeviceConfigurationProto {
  enum TouchScreen {
    UNDEFINED_TOUCH_SCREEN = 0;
    NOTOUCH = 1;
    STYLUS = 2;
    FINGER = 3;
  }

  // The kind of touch screen attached to the device.
  required TouchScreen touch_screen = 1;

  enum Keyboard {
    UNDEFINED_KEYBOARD = 0;
    NOKEYS = 1;
    QWERTY = 2;
    TWELVE_KEY = 3;
  }

  // The kind of keyboard attached to the device.
  required Keyboard keyboard = 2;

  enum Navigation {
    UNDEFINED_NAVIGATION = 0;
    NONAV = 1;
    DPAD = 2;
    TRACKBALL = 3;
    WHEEL = 4;
  }

  // The kind of navigation method available on the device.
  required Navigation navigation = 3;

  enum ScreenLayout {
    UNDEFINED_SCREEN_LAYOUT = 0;
    SMALL = 1;
    NORMAL = 2;
    LARGE = 3;
    EXTRA_LARGE = 4;
  }

  // Overall layout of the screen (stable). This is calculated by Phonesky from
  // stable screen density, which is provided by the framework.
  required ScreenLayout screen_layout = 4;

  // Layout information read directly from framework. This is not stable and may
  // change depending on dynamic screen size. As of Phonesky gnt release, this
  // field is sent in addition to screen_layout field.
  optional ScreenLayout dynamic_screen_layout = 27;

  // If true, indicates that the device has a physical keyboard.
  required bool has_hard_keyboard = 5;

  // NOTE: We ignore this field.  Instead the navigation field above is used to
  //       determine if a device has five-way navigation capability.
  // If true, indicates that the device supports 5-way navigation.
  required bool has_five_way_navigation = 6;

  // The screen density of the device, in DPI.
  required int32 screen_density = 7;

  // The screen width, in pixels.
  optional int32 screen_width = 12;

  // The screen height, in pixels.
  optional int32 screen_height = 13;

  // The GLES version on the device. The upper order 16 bits represent the
  // major version and the lower order 16 bits the minor version. A value of 0
  // indicates that the version is unavailable.
  required int32 gl_es_version = 8;

  // List of shared libraries that are available on the system.
  // Corresponds to PackageManager.getSystemSharedLibraryNames() in the SDK.
  repeated string system_shared_library = 9;

  // TODO(mruppaner): Mark this as deprecated as soon as we collect the new
  // system_available_feature_info field everywhere correctly.
  //
  // List of features available on the device.
  // Corresponds to PackageManager.getSystemAvailableFeatures() in Eclair and
  // later SDK builds.
  // This field stores the de-duplicated list of features reported in the
  // latest checkin request.
  //
  // See also
  // http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures()
  //
  // Prefer system_available_feature_info if available and set.
  repeated string system_available_feature = 10;

  // TODO(mruppaner): Fill in Play Store and GmsCore versions.
  // List of features available on the device.
  // Corresponds to PackageManager.getSystemAvailableFeatures() in N and
  // later SDK builds as well as devices running Play Store XXX and GmsCore XXX.
  // This field stores the de-duplicated list of features reported in the
  // latest checkin (GmsCore) or /uploadDeviceConfig (Play) request.
  //
  // See also
  // http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures()
  //
  // If set this field should be preferred over system_available_feature.
  repeated FeatureInfo system_available_feature_info = 26;

  // List of native platforms (CPU types) supported by the device, e.g.
  // "armeabi".
  //
  // On L+ devices, this is Build.SUPPORTED_ABIS. On older devices, it is
  // [Build.CPU_ABI] or, if Build.CPU_ABI2 is present, [Build.CPU_ABI,
  // Build.CPU_ABI2]. In any case, the device's preference order is maintained.
  repeated string native_platform = 11;

  // List of locales supported by the device.
  // Useful for self-update targeting and possibly other filtering.
  repeated string system_supported_locale = 14;

  // List of OpenGL extensions supported by the device.
  repeated string gl_extension = 15;

  // Index 16 reserved for deprecated field device_class. It was never stored.
  reserved 16;

  // Maximum APK download size supported by the device, in MB. On pre-Honeycomb
  // devices, this is determined by the size of the /cache partition. As of
  // Jan 2011, this property is not reported by the device: all devices are
  // expected to support 50M downloads, unless specifically overridden in the
  // Market Device Library.
  // Feb 2014, b/12693457 updated the CTS DownloadManagerTest to require 100 MB.
  optional int32 max_apk_download_size_mb = 17 [default = 50];

  // This is the smallest value of both screenWidthDp and screenHeightDp
  // in both portrait and landscape.
  // See
  // http://developer.android.com/reference/android/content/res/Configuration.html#smallestScreenWidthDp
  // This field is only set for devices with API Level >=13 not using the
  // default value
  // http://developer.android.com/reference/android/content/res/Configuration.html#SMALLEST_SCREEN_WIDTH_DP_UNDEFINED
  optional int32 smallest_screen_width_dp = 18;

  // See
  // http://developer.android.com/reference/android/app/ActivityManager.html#isLowRamDevice()
  // This field is only set for device with API >=19.
  optional bool low_ram_device = 19;

  // The total accessible memory in bytes.
  // API >=16 devices can look at
  // http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html#totalMem
  optional int64 total_memory_bytes = 20;

  // Maximum number of CPU cores.
  // API >=18 devices can reliably look at
  // http://developer.android.com/reference/java/lang/Runtime.html#availableProcessors()
  // Note that Runtime#availableProcessors is available since API 1 but the
  // javadoc (as of API 23) gives a clear recommendation:
  // "Returns the number of processor cores available to the VM, at least 1.
  // Traditionally this returned the number currently online, but many mobile
  // devices are able to take unused cores offline to save power, so releases
  // newer than Android 4.2 (Jelly Bean) return the maximum number of cores
  // that could be made available if there were no power or heat constraints."
  optional int32 max_num_of_cpu_cores = 21;

  // Types of network connections the device is currently using (at the time of
  // checkin). These should be a subset of "connection_capabilities" and thus
  // should be within the documented set of connection capabilities, as
  // mentioned above.
  // Case-sensitive.
  repeated string current_connection_type = 22;

  // Value of build property "ro.oem.key1" set by OEMs on the device. This is
  // used by OEMs to configure different list of apps to be auto installed
  // during device setup for different values of the build property.
  // See go/pai-keys-prd.
  optional string ro_oem_key1 = 29;

  // Indicates whether the device is secured with a lock  like a
  // PIN, pattern or password.
  optional bool secure_screenlock = 28;
}

// Definition of an hardware or software feature of an Android device.
//
// Starting in Android N, features can have a version, which must always be
// backwards compatible. That is, a device claiming to support version 3 of a
// specific feature must support apps requesting version 1 of that feature.
//
// See also
// http://developer.android.com/reference/android/content/pm/FeatureInfo.html
//
// Next id: 3
message FeatureInfo {
  // [Required] The name of this feature, for example "android.hardware.camera".
  optional string name = 1;

  // If set, this is the maximum version of this feature supported by the
  // device. The device implicitly supports all older versions of this feature.
  optional int32 version = 2;
}