// 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;
}