// Code generated by Wire protocol buffer compiler, do not edit. // Source file: protos-repo/checkin.proto package org.microg.gms.checkin; import com.squareup.wire.Message; import com.squareup.wire.ProtoField; import java.util.Collections; import java.util.List; import static com.squareup.wire.Message.Datatype.BOOL; import static com.squareup.wire.Message.Datatype.FIXED64; import static com.squareup.wire.Message.Datatype.FLOAT; import static com.squareup.wire.Message.Datatype.INT32; import static com.squareup.wire.Message.Datatype.INT64; import static com.squareup.wire.Message.Datatype.STRING; import static com.squareup.wire.Message.Label.REPEATED; import static com.squareup.wire.Message.Label.REQUIRED; /** * Sample data, if provided, is fished from a Nexus 7 (2013) / flo running Android 5.0 */ public final class CheckinRequest extends Message { public static final String DEFAULT_IMEI = ""; public static final Long DEFAULT_ANDROIDID = 0L; public static final String DEFAULT_DIGEST = ""; public static final String DEFAULT_DESIREDBUILD = ""; public static final String DEFAULT_LOCALE = ""; public static final Long DEFAULT_LOGGINGID = 0L; public static final String DEFAULT_MARKETCHECKIN = ""; public static final List DEFAULT_MACADDRESS = Collections.emptyList(); public static final String DEFAULT_MEID = ""; public static final List DEFAULT_ACCOUNTCOOKIE = Collections.emptyList(); public static final String DEFAULT_TIMEZONE = ""; public static final Long DEFAULT_SECURITYTOKEN = 0L; public static final Integer DEFAULT_VERSION = 0; public static final List DEFAULT_OTACERT = Collections.emptyList(); public static final String DEFAULT_SERIAL = ""; public static final String DEFAULT_ESN = ""; public static final List DEFAULT_MACADDRESSTYPE = Collections.emptyList(); public static final Integer DEFAULT_FRAGMENT = 0; public static final String DEFAULT_USERNAME = ""; public static final Integer DEFAULT_USERSERIALNUMBER = 0; /** * unused */ @ProtoField(tag = 1, type = STRING) public final String imei; /** * Gservices["android_id"] or 0 on first-checkin */ @ProtoField(tag = 2, type = INT64) public final Long androidId; /** * Gservices["digest"] or "" */ @ProtoField(tag = 3, type = STRING) public final String digest; @ProtoField(tag = 4, label = REQUIRED) public final Checkin checkin; /** * unused */ @ProtoField(tag = 5, type = STRING) public final String desiredBuild; /** * Locale.toString */ @ProtoField(tag = 6, type = STRING) public final String locale; /** * GoogleSettingsContract.Partner["logging_id2"] (choosen randomly on first checkin) * eg. 12561488293572742346 */ @ProtoField(tag = 7, type = INT64) public final Long loggingId; /** * unused */ @ProtoField(tag = 8, type = STRING) public final String marketCheckin; /** * NetworkInfo.getExtraInfo, WifiInfo.getMacAddress (12 hex-digits) * eg. d850e6abcdef */ @ProtoField(tag = 9, type = STRING, label = REPEATED) public final List macAddress; /** * TelephonyManager.getDeviceId (14 hex-digits), not set on tablets */ @ProtoField(tag = 10, type = STRING) public final String meid; /** * "[]" followed by "", empty string on first checkin */ @ProtoField(tag = 11, type = STRING, label = REPEATED) public final List accountCookie; /** * TimeZone.getId * eg. GMT */ @ProtoField(tag = 12, type = STRING) public final String timeZone; /** * security token as given on first checkin, not set on first checkin */ @ProtoField(tag = 13, type = FIXED64) public final Long securityToken; /** * use 3 */ @ProtoField(tag = 14, type = INT32) public final Integer version; /** * SHA-1 of each in /system/etc/security/otacerts.zip or "--IOException--" or "--no-output--" * eg. dKXTm1QH9QShGQwBM/4rg6/lCNQ= */ @ProtoField(tag = 15, type = STRING, label = REPEATED) public final List otaCert; /** * Build.SERIAL != "unknown" * eg. 07d90b18 */ @ProtoField(tag = 16, type = STRING) public final String serial; /** * TelephonyManager.getDeviceId (8 hex-digits), not set on tablets */ @ProtoField(tag = 17, type = STRING) public final String esn; @ProtoField(tag = 18) public final DeviceConfig deviceConfiguration; /** * "ethernet" or "wifi" */ @ProtoField(tag = 19, type = STRING, label = REPEATED) public final List macAddressType; /** * unknown, use 0 on pre- and first-checkin, and 1 for later checkins * also present on pre-checkin */ @ProtoField(tag = 20, type = INT32, label = REQUIRED) public final Integer fragment; /** * unknown */ @ProtoField(tag = 21, type = STRING) public final String userName; /** * UserManager.getUserSerialNumber * eg. 0 */ @ProtoField(tag = 22, type = INT32) public final Integer userSerialNumber; public CheckinRequest(String imei, Long androidId, String digest, Checkin checkin, String desiredBuild, String locale, Long loggingId, String marketCheckin, List macAddress, String meid, List accountCookie, String timeZone, Long securityToken, Integer version, List otaCert, String serial, String esn, DeviceConfig deviceConfiguration, List macAddressType, Integer fragment, String userName, Integer userSerialNumber) { this.imei = imei; this.androidId = androidId; this.digest = digest; this.checkin = checkin; this.desiredBuild = desiredBuild; this.locale = locale; this.loggingId = loggingId; this.marketCheckin = marketCheckin; this.macAddress = immutableCopyOf(macAddress); this.meid = meid; this.accountCookie = immutableCopyOf(accountCookie); this.timeZone = timeZone; this.securityToken = securityToken; this.version = version; this.otaCert = immutableCopyOf(otaCert); this.serial = serial; this.esn = esn; this.deviceConfiguration = deviceConfiguration; this.macAddressType = immutableCopyOf(macAddressType); this.fragment = fragment; this.userName = userName; this.userSerialNumber = userSerialNumber; } private CheckinRequest(Builder builder) { this(builder.imei, builder.androidId, builder.digest, builder.checkin, builder.desiredBuild, builder.locale, builder.loggingId, builder.marketCheckin, builder.macAddress, builder.meid, builder.accountCookie, builder.timeZone, builder.securityToken, builder.version, builder.otaCert, builder.serial, builder.esn, builder.deviceConfiguration, builder.macAddressType, builder.fragment, builder.userName, builder.userSerialNumber); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof CheckinRequest)) return false; CheckinRequest o = (CheckinRequest) other; return equals(imei, o.imei) && equals(androidId, o.androidId) && equals(digest, o.digest) && equals(checkin, o.checkin) && equals(desiredBuild, o.desiredBuild) && equals(locale, o.locale) && equals(loggingId, o.loggingId) && equals(marketCheckin, o.marketCheckin) && equals(macAddress, o.macAddress) && equals(meid, o.meid) && equals(accountCookie, o.accountCookie) && equals(timeZone, o.timeZone) && equals(securityToken, o.securityToken) && equals(version, o.version) && equals(otaCert, o.otaCert) && equals(serial, o.serial) && equals(esn, o.esn) && equals(deviceConfiguration, o.deviceConfiguration) && equals(macAddressType, o.macAddressType) && equals(fragment, o.fragment) && equals(userName, o.userName) && equals(userSerialNumber, o.userSerialNumber); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = imei != null ? imei.hashCode() : 0; result = result * 37 + (androidId != null ? androidId.hashCode() : 0); result = result * 37 + (digest != null ? digest.hashCode() : 0); result = result * 37 + (checkin != null ? checkin.hashCode() : 0); result = result * 37 + (desiredBuild != null ? desiredBuild.hashCode() : 0); result = result * 37 + (locale != null ? locale.hashCode() : 0); result = result * 37 + (loggingId != null ? loggingId.hashCode() : 0); result = result * 37 + (marketCheckin != null ? marketCheckin.hashCode() : 0); result = result * 37 + (macAddress != null ? macAddress.hashCode() : 1); result = result * 37 + (meid != null ? meid.hashCode() : 0); result = result * 37 + (accountCookie != null ? accountCookie.hashCode() : 1); result = result * 37 + (timeZone != null ? timeZone.hashCode() : 0); result = result * 37 + (securityToken != null ? securityToken.hashCode() : 0); result = result * 37 + (version != null ? version.hashCode() : 0); result = result * 37 + (otaCert != null ? otaCert.hashCode() : 1); result = result * 37 + (serial != null ? serial.hashCode() : 0); result = result * 37 + (esn != null ? esn.hashCode() : 0); result = result * 37 + (deviceConfiguration != null ? deviceConfiguration.hashCode() : 0); result = result * 37 + (macAddressType != null ? macAddressType.hashCode() : 1); result = result * 37 + (fragment != null ? fragment.hashCode() : 0); result = result * 37 + (userName != null ? userName.hashCode() : 0); result = result * 37 + (userSerialNumber != null ? userSerialNumber.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public String imei; public Long androidId; public String digest; public Checkin checkin; public String desiredBuild; public String locale; public Long loggingId; public String marketCheckin; public List macAddress; public String meid; public List accountCookie; public String timeZone; public Long securityToken; public Integer version; public List otaCert; public String serial; public String esn; public DeviceConfig deviceConfiguration; public List macAddressType; public Integer fragment; public String userName; public Integer userSerialNumber; public Builder() { } public Builder(CheckinRequest message) { super(message); if (message == null) return; this.imei = message.imei; this.androidId = message.androidId; this.digest = message.digest; this.checkin = message.checkin; this.desiredBuild = message.desiredBuild; this.locale = message.locale; this.loggingId = message.loggingId; this.marketCheckin = message.marketCheckin; this.macAddress = copyOf(message.macAddress); this.meid = message.meid; this.accountCookie = copyOf(message.accountCookie); this.timeZone = message.timeZone; this.securityToken = message.securityToken; this.version = message.version; this.otaCert = copyOf(message.otaCert); this.serial = message.serial; this.esn = message.esn; this.deviceConfiguration = message.deviceConfiguration; this.macAddressType = copyOf(message.macAddressType); this.fragment = message.fragment; this.userName = message.userName; this.userSerialNumber = message.userSerialNumber; } /** * unused */ public Builder imei(String imei) { this.imei = imei; return this; } /** * Gservices["android_id"] or 0 on first-checkin */ public Builder androidId(Long androidId) { this.androidId = androidId; return this; } /** * Gservices["digest"] or "" */ public Builder digest(String digest) { this.digest = digest; return this; } public Builder checkin(Checkin checkin) { this.checkin = checkin; return this; } /** * unused */ public Builder desiredBuild(String desiredBuild) { this.desiredBuild = desiredBuild; return this; } /** * Locale.toString */ public Builder locale(String locale) { this.locale = locale; return this; } /** * GoogleSettingsContract.Partner["logging_id2"] (choosen randomly on first checkin) * eg. 12561488293572742346 */ public Builder loggingId(Long loggingId) { this.loggingId = loggingId; return this; } /** * unused */ public Builder marketCheckin(String marketCheckin) { this.marketCheckin = marketCheckin; return this; } /** * NetworkInfo.getExtraInfo, WifiInfo.getMacAddress (12 hex-digits) * eg. d850e6abcdef */ public Builder macAddress(List macAddress) { this.macAddress = checkForNulls(macAddress); return this; } /** * TelephonyManager.getDeviceId (14 hex-digits), not set on tablets */ public Builder meid(String meid) { this.meid = meid; return this; } /** * "[]" followed by "", empty string on first checkin */ public Builder accountCookie(List accountCookie) { this.accountCookie = checkForNulls(accountCookie); return this; } /** * TimeZone.getId * eg. GMT */ public Builder timeZone(String timeZone) { this.timeZone = timeZone; return this; } /** * security token as given on first checkin, not set on first checkin */ public Builder securityToken(Long securityToken) { this.securityToken = securityToken; return this; } /** * use 3 */ public Builder version(Integer version) { this.version = version; return this; } /** * SHA-1 of each in /system/etc/security/otacerts.zip or "--IOException--" or "--no-output--" * eg. dKXTm1QH9QShGQwBM/4rg6/lCNQ= */ public Builder otaCert(List otaCert) { this.otaCert = checkForNulls(otaCert); return this; } /** * Build.SERIAL != "unknown" * eg. 07d90b18 */ public Builder serial(String serial) { this.serial = serial; return this; } /** * TelephonyManager.getDeviceId (8 hex-digits), not set on tablets */ public Builder esn(String esn) { this.esn = esn; return this; } public Builder deviceConfiguration(DeviceConfig deviceConfiguration) { this.deviceConfiguration = deviceConfiguration; return this; } /** * "ethernet" or "wifi" */ public Builder macAddressType(List macAddressType) { this.macAddressType = checkForNulls(macAddressType); return this; } /** * unknown, use 0 on pre- and first-checkin, and 1 for later checkins * also present on pre-checkin */ public Builder fragment(Integer fragment) { this.fragment = fragment; return this; } /** * unknown */ public Builder userName(String userName) { this.userName = userName; return this; } /** * UserManager.getUserSerialNumber * eg. 0 */ public Builder userSerialNumber(Integer userSerialNumber) { this.userSerialNumber = userSerialNumber; return this; } @Override public CheckinRequest build() { checkRequiredFields(); return new CheckinRequest(this); } } public static final class Checkin extends Message { public static final Long DEFAULT_LASTCHECKINMS = 0L; public static final List DEFAULT_EVENT = Collections.emptyList(); public static final List DEFAULT_STAT = Collections.emptyList(); public static final List DEFAULT_REQUESTEDGROUP = Collections.emptyList(); public static final String DEFAULT_CELLOPERATOR = ""; public static final String DEFAULT_SIMOPERATOR = ""; public static final String DEFAULT_ROAMING = ""; public static final Integer DEFAULT_USERNUMBER = 0; /** * empty Build on pre-checkin */ @ProtoField(tag = 1, label = REQUIRED) public final Checkin.Build build; /** * last checkin ms or 0 if first checkin * eg. 0 */ @ProtoField(tag = 2, type = INT64) public final Long lastCheckinMs; /** * eg. ("event_log_start",~,1424612602652) on first checkin */ @ProtoField(tag = 3, label = REPEATED, messageType = Checkin.Event.class) public final List event; /** * unknown, n/a on first checkin */ @ProtoField(tag = 4, label = REPEATED, messageType = Checkin.Statistic.class) public final List stat; /** * unused */ @ProtoField(tag = 5, type = STRING, label = REPEATED) public final List requestedGroup; /** * TelephonyManager.getNetworkOperator != null|empty */ @ProtoField(tag = 6, type = STRING) public final String cellOperator; /** * TelephonyManager.getSimOperator != null|empty */ @ProtoField(tag = 7, type = STRING) public final String simOperator; /** * "WIFI::" | ("mobile" | "notmobile" | "unknown") + "-" + ("roaming" | "notroaming" | "unknown") */ @ProtoField(tag = 8, type = STRING) public final String roaming; /** * UserHandle.myUserId * eg. 0 */ @ProtoField(tag = 9, type = INT32) public final Integer userNumber; public Checkin(Checkin.Build build, Long lastCheckinMs, List event, List stat, List requestedGroup, String cellOperator, String simOperator, String roaming, Integer userNumber) { this.build = build; this.lastCheckinMs = lastCheckinMs; this.event = immutableCopyOf(event); this.stat = immutableCopyOf(stat); this.requestedGroup = immutableCopyOf(requestedGroup); this.cellOperator = cellOperator; this.simOperator = simOperator; this.roaming = roaming; this.userNumber = userNumber; } private Checkin(Builder builder) { this(builder.build, builder.lastCheckinMs, builder.event, builder.stat, builder.requestedGroup, builder.cellOperator, builder.simOperator, builder.roaming, builder.userNumber); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof Checkin)) return false; Checkin o = (Checkin) other; return equals(build, o.build) && equals(lastCheckinMs, o.lastCheckinMs) && equals(event, o.event) && equals(stat, o.stat) && equals(requestedGroup, o.requestedGroup) && equals(cellOperator, o.cellOperator) && equals(simOperator, o.simOperator) && equals(roaming, o.roaming) && equals(userNumber, o.userNumber); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = build != null ? build.hashCode() : 0; result = result * 37 + (lastCheckinMs != null ? lastCheckinMs.hashCode() : 0); result = result * 37 + (event != null ? event.hashCode() : 1); result = result * 37 + (stat != null ? stat.hashCode() : 1); result = result * 37 + (requestedGroup != null ? requestedGroup.hashCode() : 1); result = result * 37 + (cellOperator != null ? cellOperator.hashCode() : 0); result = result * 37 + (simOperator != null ? simOperator.hashCode() : 0); result = result * 37 + (roaming != null ? roaming.hashCode() : 0); result = result * 37 + (userNumber != null ? userNumber.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public Checkin.Build build; public Long lastCheckinMs; public List event; public List stat; public List requestedGroup; public String cellOperator; public String simOperator; public String roaming; public Integer userNumber; public Builder() { } public Builder(Checkin message) { super(message); if (message == null) return; this.build = message.build; this.lastCheckinMs = message.lastCheckinMs; this.event = copyOf(message.event); this.stat = copyOf(message.stat); this.requestedGroup = copyOf(message.requestedGroup); this.cellOperator = message.cellOperator; this.simOperator = message.simOperator; this.roaming = message.roaming; this.userNumber = message.userNumber; } /** * empty Build on pre-checkin */ public Builder build(Checkin.Build build) { this.build = build; return this; } /** * last checkin ms or 0 if first checkin * eg. 0 */ public Builder lastCheckinMs(Long lastCheckinMs) { this.lastCheckinMs = lastCheckinMs; return this; } /** * eg. ("event_log_start",~,1424612602652) on first checkin */ public Builder event(List event) { this.event = checkForNulls(event); return this; } /** * unknown, n/a on first checkin */ public Builder stat(List stat) { this.stat = checkForNulls(stat); return this; } /** * unused */ public Builder requestedGroup(List requestedGroup) { this.requestedGroup = checkForNulls(requestedGroup); return this; } /** * TelephonyManager.getNetworkOperator != null|empty */ public Builder cellOperator(String cellOperator) { this.cellOperator = cellOperator; return this; } /** * TelephonyManager.getSimOperator != null|empty */ public Builder simOperator(String simOperator) { this.simOperator = simOperator; return this; } /** * "WIFI::" | ("mobile" | "notmobile" | "unknown") + "-" + ("roaming" | "notroaming" | "unknown") */ public Builder roaming(String roaming) { this.roaming = roaming; return this; } /** * UserHandle.myUserId * eg. 0 */ public Builder userNumber(Integer userNumber) { this.userNumber = userNumber; return this; } @Override public Checkin build() { checkRequiredFields(); return new Checkin(this); } } public static final class Build extends Message { public static final String DEFAULT_FINGERPRINT = ""; public static final String DEFAULT_HARDWARE = ""; public static final String DEFAULT_BRAND = ""; public static final String DEFAULT_RADIO = ""; public static final String DEFAULT_BOOTLOADER = ""; public static final String DEFAULT_CLIENTID = ""; public static final Long DEFAULT_TIME = 0L; public static final Integer DEFAULT_PACKAGEVERSIONCODE = 0; public static final String DEFAULT_DEVICE = ""; public static final Integer DEFAULT_SDKVERSION = 0; public static final String DEFAULT_MODEL = ""; public static final String DEFAULT_MANUFACTURER = ""; public static final String DEFAULT_PRODUCT = ""; public static final Boolean DEFAULT_OTAINSTALLED = false; /** * Build.FINGERPRINT * eg. google/razor/flo:5.0.1/LRX22C/1602158:user/release-keys */ @ProtoField(tag = 1, type = STRING) public final String fingerprint; /** * Build.HARDWARE * eg. flo */ @ProtoField(tag = 2, type = STRING) public final String hardware; /** * Build.BRAND * eg. google */ @ProtoField(tag = 3, type = STRING) public final String brand; /** * Build.getRadioVersion() */ @ProtoField(tag = 4, type = STRING) public final String radio; /** * Build.BOOTLOADER * eg. FLO-04.04 */ @ProtoField(tag = 5, type = STRING) public final String bootloader; /** * GoogleSettingsContract.Partner["client_id"] * eg. android-google */ @ProtoField(tag = 6, type = STRING) public final String clientId; /** * Build.TIME / 1000L * eg. 1416533192 */ @ProtoField(tag = 7, type = INT64) public final Long time; /** * PackageInfo.versionCode * eg. 6188736 */ @ProtoField(tag = 8, type = INT32) public final Integer packageVersionCode; /** * Build.DEVICE * eg. flo */ @ProtoField(tag = 9, type = STRING) public final String device; /** * Build.VERSION.SDK_INT * eg. 21 */ @ProtoField(tag = 10, type = INT32) public final Integer sdkVersion; /** * Build.MODEL * eg. Nexus 7 */ @ProtoField(tag = 11, type = STRING) public final String model; /** * Build.MANUFACTURER * eg. asus */ @ProtoField(tag = 12, type = STRING) public final String manufacturer; /** * Build.PRODUCT * eg. razor */ @ProtoField(tag = 13, type = STRING) public final String product; /** * fileExists("/system/recovery-from-boot.p") * eg. false */ @ProtoField(tag = 14, type = BOOL) public final Boolean otaInstalled; public Build(String fingerprint, String hardware, String brand, String radio, String bootloader, String clientId, Long time, Integer packageVersionCode, String device, Integer sdkVersion, String model, String manufacturer, String product, Boolean otaInstalled) { this.fingerprint = fingerprint; this.hardware = hardware; this.brand = brand; this.radio = radio; this.bootloader = bootloader; this.clientId = clientId; this.time = time; this.packageVersionCode = packageVersionCode; this.device = device; this.sdkVersion = sdkVersion; this.model = model; this.manufacturer = manufacturer; this.product = product; this.otaInstalled = otaInstalled; } private Build(Builder builder) { this(builder.fingerprint, builder.hardware, builder.brand, builder.radio, builder.bootloader, builder.clientId, builder.time, builder.packageVersionCode, builder.device, builder.sdkVersion, builder.model, builder.manufacturer, builder.product, builder.otaInstalled); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof Build)) return false; Build o = (Build) other; return equals(fingerprint, o.fingerprint) && equals(hardware, o.hardware) && equals(brand, o.brand) && equals(radio, o.radio) && equals(bootloader, o.bootloader) && equals(clientId, o.clientId) && equals(time, o.time) && equals(packageVersionCode, o.packageVersionCode) && equals(device, o.device) && equals(sdkVersion, o.sdkVersion) && equals(model, o.model) && equals(manufacturer, o.manufacturer) && equals(product, o.product) && equals(otaInstalled, o.otaInstalled); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = fingerprint != null ? fingerprint.hashCode() : 0; result = result * 37 + (hardware != null ? hardware.hashCode() : 0); result = result * 37 + (brand != null ? brand.hashCode() : 0); result = result * 37 + (radio != null ? radio.hashCode() : 0); result = result * 37 + (bootloader != null ? bootloader.hashCode() : 0); result = result * 37 + (clientId != null ? clientId.hashCode() : 0); result = result * 37 + (time != null ? time.hashCode() : 0); result = result * 37 + (packageVersionCode != null ? packageVersionCode.hashCode() : 0); result = result * 37 + (device != null ? device.hashCode() : 0); result = result * 37 + (sdkVersion != null ? sdkVersion.hashCode() : 0); result = result * 37 + (model != null ? model.hashCode() : 0); result = result * 37 + (manufacturer != null ? manufacturer.hashCode() : 0); result = result * 37 + (product != null ? product.hashCode() : 0); result = result * 37 + (otaInstalled != null ? otaInstalled.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public String fingerprint; public String hardware; public String brand; public String radio; public String bootloader; public String clientId; public Long time; public Integer packageVersionCode; public String device; public Integer sdkVersion; public String model; public String manufacturer; public String product; public Boolean otaInstalled; public Builder() { } public Builder(Build message) { super(message); if (message == null) return; this.fingerprint = message.fingerprint; this.hardware = message.hardware; this.brand = message.brand; this.radio = message.radio; this.bootloader = message.bootloader; this.clientId = message.clientId; this.time = message.time; this.packageVersionCode = message.packageVersionCode; this.device = message.device; this.sdkVersion = message.sdkVersion; this.model = message.model; this.manufacturer = message.manufacturer; this.product = message.product; this.otaInstalled = message.otaInstalled; } /** * Build.FINGERPRINT * eg. google/razor/flo:5.0.1/LRX22C/1602158:user/release-keys */ public Builder fingerprint(String fingerprint) { this.fingerprint = fingerprint; return this; } /** * Build.HARDWARE * eg. flo */ public Builder hardware(String hardware) { this.hardware = hardware; return this; } /** * Build.BRAND * eg. google */ public Builder brand(String brand) { this.brand = brand; return this; } /** * Build.getRadioVersion() */ public Builder radio(String radio) { this.radio = radio; return this; } /** * Build.BOOTLOADER * eg. FLO-04.04 */ public Builder bootloader(String bootloader) { this.bootloader = bootloader; return this; } /** * GoogleSettingsContract.Partner["client_id"] * eg. android-google */ public Builder clientId(String clientId) { this.clientId = clientId; return this; } /** * Build.TIME / 1000L * eg. 1416533192 */ public Builder time(Long time) { this.time = time; return this; } /** * PackageInfo.versionCode * eg. 6188736 */ public Builder packageVersionCode(Integer packageVersionCode) { this.packageVersionCode = packageVersionCode; return this; } /** * Build.DEVICE * eg. flo */ public Builder device(String device) { this.device = device; return this; } /** * Build.VERSION.SDK_INT * eg. 21 */ public Builder sdkVersion(Integer sdkVersion) { this.sdkVersion = sdkVersion; return this; } /** * Build.MODEL * eg. Nexus 7 */ public Builder model(String model) { this.model = model; return this; } /** * Build.MANUFACTURER * eg. asus */ public Builder manufacturer(String manufacturer) { this.manufacturer = manufacturer; return this; } /** * Build.PRODUCT * eg. razor */ public Builder product(String product) { this.product = product; return this; } /** * fileExists("/system/recovery-from-boot.p") * eg. false */ public Builder otaInstalled(Boolean otaInstalled) { this.otaInstalled = otaInstalled; return this; } @Override public Build build() { return new Build(this); } } } public static final class Event extends Message { public static final String DEFAULT_TAG = ""; public static final String DEFAULT_VALUE = ""; public static final Long DEFAULT_TIMEMS = 0L; @ProtoField(tag = 1, type = STRING) public final String tag; @ProtoField(tag = 2, type = STRING) public final String value; @ProtoField(tag = 3, type = INT64) public final Long timeMs; public Event(String tag, String value, Long timeMs) { this.tag = tag; this.value = value; this.timeMs = timeMs; } private Event(Builder builder) { this(builder.tag, builder.value, builder.timeMs); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof Event)) return false; Event o = (Event) other; return equals(tag, o.tag) && equals(value, o.value) && equals(timeMs, o.timeMs); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = tag != null ? tag.hashCode() : 0; result = result * 37 + (value != null ? value.hashCode() : 0); result = result * 37 + (timeMs != null ? timeMs.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public String tag; public String value; public Long timeMs; public Builder() { } public Builder(Event message) { super(message); if (message == null) return; this.tag = message.tag; this.value = message.value; this.timeMs = message.timeMs; } public Builder tag(String tag) { this.tag = tag; return this; } public Builder value(String value) { this.value = value; return this; } public Builder timeMs(Long timeMs) { this.timeMs = timeMs; return this; } @Override public Event build() { return new Event(this); } } } public static final class Statistic extends Message { public static final String DEFAULT_TAG = ""; public static final Integer DEFAULT_COUNT = 0; public static final Float DEFAULT_SUM = 0F; @ProtoField(tag = 1, type = STRING, label = REQUIRED) public final String tag; @ProtoField(tag = 2, type = INT32) public final Integer count; @ProtoField(tag = 3, type = FLOAT) public final Float sum; public Statistic(String tag, Integer count, Float sum) { this.tag = tag; this.count = count; this.sum = sum; } private Statistic(Builder builder) { this(builder.tag, builder.count, builder.sum); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof Statistic)) return false; Statistic o = (Statistic) other; return equals(tag, o.tag) && equals(count, o.count) && equals(sum, o.sum); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = tag != null ? tag.hashCode() : 0; result = result * 37 + (count != null ? count.hashCode() : 0); result = result * 37 + (sum != null ? sum.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public String tag; public Integer count; public Float sum; public Builder() { } public Builder(Statistic message) { super(message); if (message == null) return; this.tag = message.tag; this.count = message.count; this.sum = message.sum; } public Builder tag(String tag) { this.tag = tag; return this; } public Builder count(Integer count) { this.count = count; return this; } public Builder sum(Float sum) { this.sum = sum; return this; } @Override public Statistic build() { checkRequiredFields(); return new Statistic(this); } } } } public static final class DeviceConfig extends Message { public static final Integer DEFAULT_TOUCHSCREEN = 0; public static final Integer DEFAULT_KEYBOARDTYPE = 0; public static final Integer DEFAULT_NAVIGATION = 0; public static final Integer DEFAULT_SCREENLAYOUT = 0; public static final Boolean DEFAULT_HASHARDKEYBOARD = false; public static final Boolean DEFAULT_HASFIVEWAYNAVIGATION = false; public static final Integer DEFAULT_DENSITYDPI = 0; public static final Integer DEFAULT_GLESVERSION = 0; public static final List DEFAULT_SHAREDLIBRARY = Collections.emptyList(); public static final List DEFAULT_AVAILABLEFEATURE = Collections.emptyList(); public static final List DEFAULT_NATIVEPLATFORM = Collections.emptyList(); public static final Integer DEFAULT_WIDTHPIXELS = 0; public static final Integer DEFAULT_HEIGHTPIXELS = 0; public static final List DEFAULT_LOCALE = Collections.emptyList(); public static final List DEFAULT_GLEXTENSION = Collections.emptyList(); public static final Integer DEFAULT_DEVICECLASS = 0; public static final Integer DEFAULT_MAXAPKDOWNLOADSIZEMB = 0; /** * ConfigurationInfo.reqTouchScreen * eg. 3 */ @ProtoField(tag = 1, type = INT32) public final Integer touchScreen; /** * ConfigurationInfo.reqKeyboardType * eg. 1 */ @ProtoField(tag = 2, type = INT32) public final Integer keyboardType; /** * ConfigurationInfo.reqNavigation * eg. 1 */ @ProtoField(tag = 3, type = INT32) public final Integer navigation; /** * ConfigurationInfo.screenLayout * eg. 3 */ @ProtoField(tag = 4, type = INT32) public final Integer screenLayout; /** * ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD * eg. 0 */ @ProtoField(tag = 5, type = BOOL) public final Boolean hasHardKeyboard; /** * ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV * eg. 0 */ @ProtoField(tag = 6, type = BOOL) public final Boolean hasFiveWayNavigation; /** * DisplayMetrics.densityDpi * eg. 320 */ @ProtoField(tag = 7, type = INT32) public final Integer densityDpi; /** * ConfigurationInfo.reqGlEsVersion * eg. 196608 */ @ProtoField(tag = 8, type = INT32) public final Integer glEsVersion; /** * PackageManager.getSystemSharedLibraryNames * eg. "android.test.runner", "com.android.future.usb.accessory", "com.android.location.provider", * "com.android.media.remotedisplay", "com.android.mediadrm.signer", "com.google.android.maps", * "com.google.android.media.effects", "com.google.widevine.software.drm", "javax.obex" */ @ProtoField(tag = 9, type = STRING, label = REPEATED) public final List sharedLibrary; /** * PackageManager.getSystemAvailableFeatures * eg. android.hardware.[...] */ @ProtoField(tag = 10, type = STRING, label = REPEATED) public final List availableFeature; /** * Build.CPU_ABI and Build.CPU_ABI2 != "unknown" * eg. "armeabi-v7a", "armeabi" */ @ProtoField(tag = 11, type = STRING, label = REPEATED) public final List nativePlatform; /** * DisplayMetrics.widthPixels * eg. 1200 */ @ProtoField(tag = 12, type = INT32) public final Integer widthPixels; /** * DisplayMetrics.heightPixels * eg. 1824 */ @ProtoField(tag = 13, type = INT32) public final Integer heightPixels; /** * Context.getAssets.getLocales * eg. [...], "en-US", [...] */ @ProtoField(tag = 14, type = STRING, label = REPEATED) public final List locale; /** * GLES10.glGetString(GLES10.GL_EXTENSIONS) * eg. "GL_AMD_compressed_ATC_texture", [...] */ @ProtoField(tag = 15, type = STRING, label = REPEATED) public final List glExtension; /** * unused */ @ProtoField(tag = 16, type = INT32) public final Integer deviceClass; /** * unused */ @ProtoField(tag = 17, type = INT32) public final Integer maxApkDownloadSizeMb; public DeviceConfig(Integer touchScreen, Integer keyboardType, Integer navigation, Integer screenLayout, Boolean hasHardKeyboard, Boolean hasFiveWayNavigation, Integer densityDpi, Integer glEsVersion, List sharedLibrary, List availableFeature, List nativePlatform, Integer widthPixels, Integer heightPixels, List locale, List glExtension, Integer deviceClass, Integer maxApkDownloadSizeMb) { this.touchScreen = touchScreen; this.keyboardType = keyboardType; this.navigation = navigation; this.screenLayout = screenLayout; this.hasHardKeyboard = hasHardKeyboard; this.hasFiveWayNavigation = hasFiveWayNavigation; this.densityDpi = densityDpi; this.glEsVersion = glEsVersion; this.sharedLibrary = immutableCopyOf(sharedLibrary); this.availableFeature = immutableCopyOf(availableFeature); this.nativePlatform = immutableCopyOf(nativePlatform); this.widthPixels = widthPixels; this.heightPixels = heightPixels; this.locale = immutableCopyOf(locale); this.glExtension = immutableCopyOf(glExtension); this.deviceClass = deviceClass; this.maxApkDownloadSizeMb = maxApkDownloadSizeMb; } private DeviceConfig(Builder builder) { this(builder.touchScreen, builder.keyboardType, builder.navigation, builder.screenLayout, builder.hasHardKeyboard, builder.hasFiveWayNavigation, builder.densityDpi, builder.glEsVersion, builder.sharedLibrary, builder.availableFeature, builder.nativePlatform, builder.widthPixels, builder.heightPixels, builder.locale, builder.glExtension, builder.deviceClass, builder.maxApkDownloadSizeMb); setBuilder(builder); } @Override public boolean equals(Object other) { if (other == this) return true; if (!(other instanceof DeviceConfig)) return false; DeviceConfig o = (DeviceConfig) other; return equals(touchScreen, o.touchScreen) && equals(keyboardType, o.keyboardType) && equals(navigation, o.navigation) && equals(screenLayout, o.screenLayout) && equals(hasHardKeyboard, o.hasHardKeyboard) && equals(hasFiveWayNavigation, o.hasFiveWayNavigation) && equals(densityDpi, o.densityDpi) && equals(glEsVersion, o.glEsVersion) && equals(sharedLibrary, o.sharedLibrary) && equals(availableFeature, o.availableFeature) && equals(nativePlatform, o.nativePlatform) && equals(widthPixels, o.widthPixels) && equals(heightPixels, o.heightPixels) && equals(locale, o.locale) && equals(glExtension, o.glExtension) && equals(deviceClass, o.deviceClass) && equals(maxApkDownloadSizeMb, o.maxApkDownloadSizeMb); } @Override public int hashCode() { int result = hashCode; if (result == 0) { result = touchScreen != null ? touchScreen.hashCode() : 0; result = result * 37 + (keyboardType != null ? keyboardType.hashCode() : 0); result = result * 37 + (navigation != null ? navigation.hashCode() : 0); result = result * 37 + (screenLayout != null ? screenLayout.hashCode() : 0); result = result * 37 + (hasHardKeyboard != null ? hasHardKeyboard.hashCode() : 0); result = result * 37 + (hasFiveWayNavigation != null ? hasFiveWayNavigation.hashCode() : 0); result = result * 37 + (densityDpi != null ? densityDpi.hashCode() : 0); result = result * 37 + (glEsVersion != null ? glEsVersion.hashCode() : 0); result = result * 37 + (sharedLibrary != null ? sharedLibrary.hashCode() : 1); result = result * 37 + (availableFeature != null ? availableFeature.hashCode() : 1); result = result * 37 + (nativePlatform != null ? nativePlatform.hashCode() : 1); result = result * 37 + (widthPixels != null ? widthPixels.hashCode() : 0); result = result * 37 + (heightPixels != null ? heightPixels.hashCode() : 0); result = result * 37 + (locale != null ? locale.hashCode() : 1); result = result * 37 + (glExtension != null ? glExtension.hashCode() : 1); result = result * 37 + (deviceClass != null ? deviceClass.hashCode() : 0); result = result * 37 + (maxApkDownloadSizeMb != null ? maxApkDownloadSizeMb.hashCode() : 0); hashCode = result; } return result; } public static final class Builder extends Message.Builder { public Integer touchScreen; public Integer keyboardType; public Integer navigation; public Integer screenLayout; public Boolean hasHardKeyboard; public Boolean hasFiveWayNavigation; public Integer densityDpi; public Integer glEsVersion; public List sharedLibrary; public List availableFeature; public List nativePlatform; public Integer widthPixels; public Integer heightPixels; public List locale; public List glExtension; public Integer deviceClass; public Integer maxApkDownloadSizeMb; public Builder() { } public Builder(DeviceConfig message) { super(message); if (message == null) return; this.touchScreen = message.touchScreen; this.keyboardType = message.keyboardType; this.navigation = message.navigation; this.screenLayout = message.screenLayout; this.hasHardKeyboard = message.hasHardKeyboard; this.hasFiveWayNavigation = message.hasFiveWayNavigation; this.densityDpi = message.densityDpi; this.glEsVersion = message.glEsVersion; this.sharedLibrary = copyOf(message.sharedLibrary); this.availableFeature = copyOf(message.availableFeature); this.nativePlatform = copyOf(message.nativePlatform); this.widthPixels = message.widthPixels; this.heightPixels = message.heightPixels; this.locale = copyOf(message.locale); this.glExtension = copyOf(message.glExtension); this.deviceClass = message.deviceClass; this.maxApkDownloadSizeMb = message.maxApkDownloadSizeMb; } /** * ConfigurationInfo.reqTouchScreen * eg. 3 */ public Builder touchScreen(Integer touchScreen) { this.touchScreen = touchScreen; return this; } /** * ConfigurationInfo.reqKeyboardType * eg. 1 */ public Builder keyboardType(Integer keyboardType) { this.keyboardType = keyboardType; return this; } /** * ConfigurationInfo.reqNavigation * eg. 1 */ public Builder navigation(Integer navigation) { this.navigation = navigation; return this; } /** * ConfigurationInfo.screenLayout * eg. 3 */ public Builder screenLayout(Integer screenLayout) { this.screenLayout = screenLayout; return this; } /** * ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD * eg. 0 */ public Builder hasHardKeyboard(Boolean hasHardKeyboard) { this.hasHardKeyboard = hasHardKeyboard; return this; } /** * ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV * eg. 0 */ public Builder hasFiveWayNavigation(Boolean hasFiveWayNavigation) { this.hasFiveWayNavigation = hasFiveWayNavigation; return this; } /** * DisplayMetrics.densityDpi * eg. 320 */ public Builder densityDpi(Integer densityDpi) { this.densityDpi = densityDpi; return this; } /** * ConfigurationInfo.reqGlEsVersion * eg. 196608 */ public Builder glEsVersion(Integer glEsVersion) { this.glEsVersion = glEsVersion; return this; } /** * PackageManager.getSystemSharedLibraryNames * eg. "android.test.runner", "com.android.future.usb.accessory", "com.android.location.provider", * "com.android.media.remotedisplay", "com.android.mediadrm.signer", "com.google.android.maps", * "com.google.android.media.effects", "com.google.widevine.software.drm", "javax.obex" */ public Builder sharedLibrary(List sharedLibrary) { this.sharedLibrary = checkForNulls(sharedLibrary); return this; } /** * PackageManager.getSystemAvailableFeatures * eg. android.hardware.[...] */ public Builder availableFeature(List availableFeature) { this.availableFeature = checkForNulls(availableFeature); return this; } /** * Build.CPU_ABI and Build.CPU_ABI2 != "unknown" * eg. "armeabi-v7a", "armeabi" */ public Builder nativePlatform(List nativePlatform) { this.nativePlatform = checkForNulls(nativePlatform); return this; } /** * DisplayMetrics.widthPixels * eg. 1200 */ public Builder widthPixels(Integer widthPixels) { this.widthPixels = widthPixels; return this; } /** * DisplayMetrics.heightPixels * eg. 1824 */ public Builder heightPixels(Integer heightPixels) { this.heightPixels = heightPixels; return this; } /** * Context.getAssets.getLocales * eg. [...], "en-US", [...] */ public Builder locale(List locale) { this.locale = checkForNulls(locale); return this; } /** * GLES10.glGetString(GLES10.GL_EXTENSIONS) * eg. "GL_AMD_compressed_ATC_texture", [...] */ public Builder glExtension(List glExtension) { this.glExtension = checkForNulls(glExtension); return this; } /** * unused */ public Builder deviceClass(Integer deviceClass) { this.deviceClass = deviceClass; return this; } /** * unused */ public Builder maxApkDownloadSizeMb(Integer maxApkDownloadSizeMb) { this.maxApkDownloadSizeMb = maxApkDownloadSizeMb; return this; } @Override public DeviceConfig build() { return new DeviceConfig(this); } } } }