1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.adservices.ondevicepersonalization; 18 19 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; 20 import static android.content.res.Configuration.ORIENTATION_PORTRAIT; 21 import static android.content.res.Configuration.ORIENTATION_UNDEFINED; 22 23 import android.annotation.FlaggedApi; 24 import android.annotation.IntDef; 25 import android.annotation.IntRange; 26 import android.annotation.NonNull; 27 import android.annotation.Nullable; 28 import android.net.NetworkCapabilities; 29 import android.os.Parcelable; 30 import android.telephony.TelephonyManager; 31 32 import com.android.adservices.ondevicepersonalization.flags.Flags; 33 import com.android.ondevicepersonalization.internal.util.AnnotationValidations; 34 import com.android.ondevicepersonalization.internal.util.DataClass; 35 36 import java.lang.annotation.Retention; 37 import java.lang.annotation.RetentionPolicy; 38 import java.time.Duration; 39 import java.util.Collections; 40 import java.util.Map; 41 42 /** 43 * User data provided by the platform to an {@link IsolatedService}. 44 * 45 */ 46 // This class should be updated with the Kotlin mirror 47 // {@link com.android.ondevicepersonalization.services.policyengine.data.UserData}. 48 @FlaggedApi(Flags.FLAG_ON_DEVICE_PERSONALIZATION_APIS_ENABLED) 49 @DataClass(genHiddenBuilder = true, genEqualsHashCode = true, genConstDefs = false) 50 public final class UserData implements Parcelable { 51 /** 52 * The device timezone +/- offset from UTC. 53 * 54 * @hide 55 */ 56 int mTimezoneUtcOffsetMins = 0; 57 58 /** @hide **/ 59 @IntDef(prefix = {"ORIENTATION_"}, value = { 60 ORIENTATION_UNDEFINED, 61 ORIENTATION_PORTRAIT, 62 ORIENTATION_LANDSCAPE 63 }) 64 @Retention(RetentionPolicy.SOURCE) 65 public @interface Orientation { 66 } 67 68 /** 69 * The device orientation. The value can be one of the constants ORIENTATION_UNDEFINED, 70 * ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE defined in 71 * {@link android.content.res.Configuration}. 72 */ 73 @Orientation int mOrientation = 0; 74 75 /** The available space on device in bytes. */ 76 @IntRange(from = 0) long mAvailableStorageBytes = 0; 77 78 /** Battery percentage. */ 79 @IntRange(from = 0, to = 100) int mBatteryPercentage = 0; 80 81 /** The Service Provider Name (SPN) returned by {@link TelephonyManager#getSimOperatorName()} */ 82 @NonNull String mCarrier = ""; 83 84 /** @hide **/ 85 @IntDef({ 86 TelephonyManager.NETWORK_TYPE_UNKNOWN, 87 TelephonyManager.NETWORK_TYPE_GPRS, 88 TelephonyManager.NETWORK_TYPE_EDGE, 89 TelephonyManager.NETWORK_TYPE_UMTS, 90 TelephonyManager.NETWORK_TYPE_CDMA, 91 TelephonyManager.NETWORK_TYPE_EVDO_0, 92 TelephonyManager.NETWORK_TYPE_EVDO_A, 93 TelephonyManager.NETWORK_TYPE_1xRTT, 94 TelephonyManager.NETWORK_TYPE_HSDPA, 95 TelephonyManager.NETWORK_TYPE_HSUPA, 96 TelephonyManager.NETWORK_TYPE_HSPA, 97 TelephonyManager.NETWORK_TYPE_EVDO_B, 98 TelephonyManager.NETWORK_TYPE_LTE, 99 TelephonyManager.NETWORK_TYPE_EHRPD, 100 TelephonyManager.NETWORK_TYPE_HSPAP, 101 TelephonyManager.NETWORK_TYPE_GSM, 102 TelephonyManager.NETWORK_TYPE_TD_SCDMA, 103 TelephonyManager.NETWORK_TYPE_IWLAN, 104 105 //TODO: In order for @SystemApi methods to use this class, there cannot be any 106 // public hidden members. This network type is marked as hidden because it is not a 107 // true network type and we are looking to remove it completely from the available list 108 // of network types. 109 //TelephonyManager.NETWORK_TYPE_LTE_CA, 110 111 TelephonyManager.NETWORK_TYPE_NR, 112 }) 113 @Retention(RetentionPolicy.SOURCE) 114 public @interface NetworkType { 115 } 116 117 /** 118 * A filtered subset of the Network capabilities of the device that contains upstream 119 * and downstream speeds, and whether the network is metered. 120 * This is an instance of {@link NetworkCapabilities} that contains the capability 121 * {@link android.net.NetworkCapabilities#NET_CAPABILITY_NOT_METERED} if the network is not 122 * metered, and {@link NetworkCapabilities#getLinkDownstreamBandwidthKbps()} and 123 * {@link NetworkCapabilities#getLinkUpstreamBandwidthKbps()} return the downstream and 124 * upstream connection speeds. All other methods of this {@link NetworkCapabilities} object 125 * return empty or default values. 126 */ 127 @Nullable NetworkCapabilities mNetworkCapabilities = null; 128 129 /** 130 * Data network type. This is the value of 131 * {@link android.telephony.TelephonyManager#getDataNetworkType()}. 132 */ 133 @NetworkType int mDataNetworkType = 0; 134 135 /** A map from package name to app information for installed and uninstalled apps. */ 136 @DataClass.PluralOf("appInfo") 137 @NonNull Map<String, AppInfo> mAppInfos = Collections.emptyMap(); 138 139 /** The device timezone +/- offset from UTC. */ getTimezoneUtcOffset()140 @NonNull public Duration getTimezoneUtcOffset() { 141 return Duration.ofMinutes(mTimezoneUtcOffsetMins); 142 } 143 144 145 146 // Code below generated by codegen v1.0.23. 147 // 148 // DO NOT MODIFY! 149 // CHECKSTYLE:OFF Generated code 150 // 151 // To regenerate run: 152 // $ codegen $ANDROID_BUILD_TOP/packages/modules/OnDevicePersonalization/framework/java/android/adservices/ondevicepersonalization/UserData.java 153 // 154 // To exclude the generated code from IntelliJ auto-formatting enable (one-time): 155 // Settings > Editor > Code Style > Formatter Control 156 //@formatter:off 157 158 159 @DataClass.Generated.Member UserData( int timezoneUtcOffsetMins, @Orientation int orientation, @IntRange(from = 0) long availableStorageBytes, @IntRange(from = 0, to = 100) int batteryPercentage, @NonNull String carrier, @Nullable NetworkCapabilities networkCapabilities, @NetworkType int dataNetworkType, @NonNull Map<String,AppInfo> appInfos)160 /* package-private */ UserData( 161 int timezoneUtcOffsetMins, 162 @Orientation int orientation, 163 @IntRange(from = 0) long availableStorageBytes, 164 @IntRange(from = 0, to = 100) int batteryPercentage, 165 @NonNull String carrier, 166 @Nullable NetworkCapabilities networkCapabilities, 167 @NetworkType int dataNetworkType, 168 @NonNull Map<String,AppInfo> appInfos) { 169 this.mTimezoneUtcOffsetMins = timezoneUtcOffsetMins; 170 this.mOrientation = orientation; 171 AnnotationValidations.validate( 172 Orientation.class, null, mOrientation); 173 this.mAvailableStorageBytes = availableStorageBytes; 174 AnnotationValidations.validate( 175 IntRange.class, null, mAvailableStorageBytes, 176 "from", 0); 177 this.mBatteryPercentage = batteryPercentage; 178 AnnotationValidations.validate( 179 IntRange.class, null, mBatteryPercentage, 180 "from", 0, 181 "to", 100); 182 this.mCarrier = carrier; 183 AnnotationValidations.validate( 184 NonNull.class, null, mCarrier); 185 this.mNetworkCapabilities = networkCapabilities; 186 this.mDataNetworkType = dataNetworkType; 187 AnnotationValidations.validate( 188 NetworkType.class, null, mDataNetworkType); 189 this.mAppInfos = appInfos; 190 AnnotationValidations.validate( 191 NonNull.class, null, mAppInfos); 192 193 // onConstructed(); // You can define this method to get a callback 194 } 195 196 /** 197 * The device timezone +/- offset from UTC. 198 * 199 * @hide 200 */ 201 @DataClass.Generated.Member getTimezoneUtcOffsetMins()202 public int getTimezoneUtcOffsetMins() { 203 return mTimezoneUtcOffsetMins; 204 } 205 206 /** 207 * The device orientation. The value can be one of the constants ORIENTATION_UNDEFINED, 208 * ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE defined in 209 * {@link android.content.res.Configuration}. 210 */ 211 @DataClass.Generated.Member getOrientation()212 public @Orientation int getOrientation() { 213 return mOrientation; 214 } 215 216 /** 217 * The available space on device in bytes. 218 */ 219 @DataClass.Generated.Member getAvailableStorageBytes()220 public @IntRange(from = 0) long getAvailableStorageBytes() { 221 return mAvailableStorageBytes; 222 } 223 224 /** 225 * Battery percentage. 226 */ 227 @DataClass.Generated.Member getBatteryPercentage()228 public @IntRange(from = 0, to = 100) int getBatteryPercentage() { 229 return mBatteryPercentage; 230 } 231 232 /** 233 * The Service Provider Name (SPN) returned by {@link TelephonyManager#getSimOperatorName()} 234 */ 235 @DataClass.Generated.Member getCarrier()236 public @NonNull String getCarrier() { 237 return mCarrier; 238 } 239 240 /** 241 * A filtered subset of the Network capabilities of the device that contains upstream 242 * and downstream speeds, and whether the network is metered. 243 * This is an instance of {@link NetworkCapabilities} that contains the capability 244 * {@link android.net.NetworkCapabilities#NET_CAPABILITY_NOT_METERED} if the network is not 245 * metered, and {@link NetworkCapabilities#getLinkDownstreamBandwidthKbps()} and 246 * {@link NetworkCapabilities#getLinkUpstreamBandwidthKbps()} return the downstream and 247 * upstream connection speeds. All other methods of this {@link NetworkCapabilities} object 248 * return empty or default values. 249 */ 250 @DataClass.Generated.Member getNetworkCapabilities()251 public @Nullable NetworkCapabilities getNetworkCapabilities() { 252 return mNetworkCapabilities; 253 } 254 255 /** 256 * Data network type. This is the value of 257 * {@link android.telephony.TelephonyManager#getDataNetworkType()}. 258 */ 259 @DataClass.Generated.Member getDataNetworkType()260 public @NetworkType int getDataNetworkType() { 261 return mDataNetworkType; 262 } 263 264 /** 265 * A map from package name to app information for installed and uninstalled apps. 266 */ 267 @DataClass.Generated.Member getAppInfos()268 public @NonNull Map<String,AppInfo> getAppInfos() { 269 return mAppInfos; 270 } 271 272 @Override 273 @DataClass.Generated.Member equals(@ullable Object o)274 public boolean equals(@Nullable Object o) { 275 // You can override field equality logic by defining either of the methods like: 276 // boolean fieldNameEquals(UserData other) { ... } 277 // boolean fieldNameEquals(FieldType otherValue) { ... } 278 279 if (this == o) return true; 280 if (o == null || getClass() != o.getClass()) return false; 281 @SuppressWarnings("unchecked") 282 UserData that = (UserData) o; 283 //noinspection PointlessBooleanExpression 284 return true 285 && mTimezoneUtcOffsetMins == that.mTimezoneUtcOffsetMins 286 && mOrientation == that.mOrientation 287 && mAvailableStorageBytes == that.mAvailableStorageBytes 288 && mBatteryPercentage == that.mBatteryPercentage 289 && java.util.Objects.equals(mCarrier, that.mCarrier) 290 && java.util.Objects.equals(mNetworkCapabilities, that.mNetworkCapabilities) 291 && mDataNetworkType == that.mDataNetworkType 292 && java.util.Objects.equals(mAppInfos, that.mAppInfos); 293 } 294 295 @Override 296 @DataClass.Generated.Member hashCode()297 public int hashCode() { 298 // You can override field hashCode logic by defining methods like: 299 // int fieldNameHashCode() { ... } 300 301 int _hash = 1; 302 _hash = 31 * _hash + mTimezoneUtcOffsetMins; 303 _hash = 31 * _hash + mOrientation; 304 _hash = 31 * _hash + Long.hashCode(mAvailableStorageBytes); 305 _hash = 31 * _hash + mBatteryPercentage; 306 _hash = 31 * _hash + java.util.Objects.hashCode(mCarrier); 307 _hash = 31 * _hash + java.util.Objects.hashCode(mNetworkCapabilities); 308 _hash = 31 * _hash + mDataNetworkType; 309 _hash = 31 * _hash + java.util.Objects.hashCode(mAppInfos); 310 return _hash; 311 } 312 313 @Override 314 @DataClass.Generated.Member writeToParcel(@onNull android.os.Parcel dest, int flags)315 public void writeToParcel(@NonNull android.os.Parcel dest, int flags) { 316 // You can override field parcelling by defining methods like: 317 // void parcelFieldName(Parcel dest, int flags) { ... } 318 319 int flg = 0; 320 if (mNetworkCapabilities != null) flg |= 0x20; 321 dest.writeInt(flg); 322 dest.writeInt(mTimezoneUtcOffsetMins); 323 dest.writeInt(mOrientation); 324 dest.writeLong(mAvailableStorageBytes); 325 dest.writeInt(mBatteryPercentage); 326 dest.writeString(mCarrier); 327 if (mNetworkCapabilities != null) dest.writeTypedObject(mNetworkCapabilities, flags); 328 dest.writeInt(mDataNetworkType); 329 dest.writeMap(mAppInfos); 330 } 331 332 @Override 333 @DataClass.Generated.Member describeContents()334 public int describeContents() { return 0; } 335 336 /** @hide */ 337 @SuppressWarnings({"unchecked", "RedundantCast"}) 338 @DataClass.Generated.Member UserData(@onNull android.os.Parcel in)339 /* package-private */ UserData(@NonNull android.os.Parcel in) { 340 // You can override field unparcelling by defining methods like: 341 // static FieldType unparcelFieldName(Parcel in) { ... } 342 343 int flg = in.readInt(); 344 int timezoneUtcOffsetMins = in.readInt(); 345 int orientation = in.readInt(); 346 long availableStorageBytes = in.readLong(); 347 int batteryPercentage = in.readInt(); 348 String carrier = in.readString(); 349 NetworkCapabilities networkCapabilities = (flg & 0x20) == 0 ? null : (NetworkCapabilities) in.readTypedObject(NetworkCapabilities.CREATOR); 350 int dataNetworkType = in.readInt(); 351 Map<String,AppInfo> appInfos = new java.util.LinkedHashMap<>(); 352 in.readMap(appInfos, AppInfo.class.getClassLoader()); 353 354 this.mTimezoneUtcOffsetMins = timezoneUtcOffsetMins; 355 this.mOrientation = orientation; 356 AnnotationValidations.validate( 357 Orientation.class, null, mOrientation); 358 this.mAvailableStorageBytes = availableStorageBytes; 359 AnnotationValidations.validate( 360 IntRange.class, null, mAvailableStorageBytes, 361 "from", 0); 362 this.mBatteryPercentage = batteryPercentage; 363 AnnotationValidations.validate( 364 IntRange.class, null, mBatteryPercentage, 365 "from", 0, 366 "to", 100); 367 this.mCarrier = carrier; 368 AnnotationValidations.validate( 369 NonNull.class, null, mCarrier); 370 this.mNetworkCapabilities = networkCapabilities; 371 this.mDataNetworkType = dataNetworkType; 372 AnnotationValidations.validate( 373 NetworkType.class, null, mDataNetworkType); 374 this.mAppInfos = appInfos; 375 AnnotationValidations.validate( 376 NonNull.class, null, mAppInfos); 377 378 // onConstructed(); // You can define this method to get a callback 379 } 380 381 @DataClass.Generated.Member 382 public static final @NonNull Parcelable.Creator<UserData> CREATOR 383 = new Parcelable.Creator<UserData>() { 384 @Override 385 public UserData[] newArray(int size) { 386 return new UserData[size]; 387 } 388 389 @Override 390 public UserData createFromParcel(@NonNull android.os.Parcel in) { 391 return new UserData(in); 392 } 393 }; 394 395 /** 396 * A builder for {@link UserData} 397 * @hide 398 */ 399 @SuppressWarnings("WeakerAccess") 400 @DataClass.Generated.Member 401 public static final class Builder { 402 403 private int mTimezoneUtcOffsetMins; 404 private @Orientation int mOrientation; 405 private @IntRange(from = 0) long mAvailableStorageBytes; 406 private @IntRange(from = 0, to = 100) int mBatteryPercentage; 407 private @NonNull String mCarrier; 408 private @Nullable NetworkCapabilities mNetworkCapabilities; 409 private @NetworkType int mDataNetworkType; 410 private @NonNull Map<String,AppInfo> mAppInfos; 411 412 private long mBuilderFieldsSet = 0L; 413 Builder()414 public Builder() { 415 } 416 417 /** 418 * The device timezone +/- offset from UTC. 419 * 420 * @hide 421 */ 422 @DataClass.Generated.Member setTimezoneUtcOffsetMins(int value)423 public @NonNull Builder setTimezoneUtcOffsetMins(int value) { 424 checkNotUsed(); 425 mBuilderFieldsSet |= 0x1; 426 mTimezoneUtcOffsetMins = value; 427 return this; 428 } 429 430 /** 431 * The device orientation. The value can be one of the constants ORIENTATION_UNDEFINED, 432 * ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE defined in 433 * {@link android.content.res.Configuration}. 434 */ 435 @DataClass.Generated.Member setOrientation(@rientation int value)436 public @NonNull Builder setOrientation(@Orientation int value) { 437 checkNotUsed(); 438 mBuilderFieldsSet |= 0x2; 439 mOrientation = value; 440 return this; 441 } 442 443 /** 444 * The available space on device in bytes. 445 */ 446 @DataClass.Generated.Member setAvailableStorageBytes(@ntRangefrom = 0) long value)447 public @NonNull Builder setAvailableStorageBytes(@IntRange(from = 0) long value) { 448 checkNotUsed(); 449 mBuilderFieldsSet |= 0x4; 450 mAvailableStorageBytes = value; 451 return this; 452 } 453 454 /** 455 * Battery percentage. 456 */ 457 @DataClass.Generated.Member setBatteryPercentage(@ntRangefrom = 0, to = 100) int value)458 public @NonNull Builder setBatteryPercentage(@IntRange(from = 0, to = 100) int value) { 459 checkNotUsed(); 460 mBuilderFieldsSet |= 0x8; 461 mBatteryPercentage = value; 462 return this; 463 } 464 465 /** 466 * The Service Provider Name (SPN) returned by {@link TelephonyManager#getSimOperatorName()} 467 */ 468 @DataClass.Generated.Member setCarrier(@onNull String value)469 public @NonNull Builder setCarrier(@NonNull String value) { 470 checkNotUsed(); 471 mBuilderFieldsSet |= 0x10; 472 mCarrier = value; 473 return this; 474 } 475 476 /** 477 * A filtered subset of the Network capabilities of the device that contains upstream 478 * and downstream speeds, and whether the network is metered. 479 * This is an instance of {@link NetworkCapabilities} that contains the capability 480 * {@link android.net.NetworkCapabilities#NET_CAPABILITY_NOT_METERED} if the network is not 481 * metered, and {@link NetworkCapabilities#getLinkDownstreamBandwidthKbps()} and 482 * {@link NetworkCapabilities#getLinkUpstreamBandwidthKbps()} return the downstream and 483 * upstream connection speeds. All other methods of this {@link NetworkCapabilities} object 484 * return empty or default values. 485 */ 486 @DataClass.Generated.Member setNetworkCapabilities(@onNull NetworkCapabilities value)487 public @NonNull Builder setNetworkCapabilities(@NonNull NetworkCapabilities value) { 488 checkNotUsed(); 489 mBuilderFieldsSet |= 0x20; 490 mNetworkCapabilities = value; 491 return this; 492 } 493 494 /** 495 * Data network type. This is the value of 496 * {@link android.telephony.TelephonyManager#getDataNetworkType()}. 497 */ 498 @DataClass.Generated.Member setDataNetworkType(@etworkType int value)499 public @NonNull Builder setDataNetworkType(@NetworkType int value) { 500 checkNotUsed(); 501 mBuilderFieldsSet |= 0x40; 502 mDataNetworkType = value; 503 return this; 504 } 505 506 /** 507 * A map from package name to app information for installed and uninstalled apps. 508 */ 509 @DataClass.Generated.Member setAppInfos(@onNull Map<String,AppInfo> value)510 public @NonNull Builder setAppInfos(@NonNull Map<String,AppInfo> value) { 511 checkNotUsed(); 512 mBuilderFieldsSet |= 0x80; 513 mAppInfos = value; 514 return this; 515 } 516 517 /** @see #setAppInfos */ 518 @DataClass.Generated.Member addAppInfo(@onNull String key, @NonNull AppInfo value)519 public @NonNull Builder addAppInfo(@NonNull String key, @NonNull AppInfo value) { 520 if (mAppInfos == null) setAppInfos(new java.util.LinkedHashMap()); 521 mAppInfos.put(key, value); 522 return this; 523 } 524 525 /** Builds the instance. This builder should not be touched after calling this! */ build()526 public @NonNull UserData build() { 527 checkNotUsed(); 528 mBuilderFieldsSet |= 0x100; // Mark builder used 529 530 if ((mBuilderFieldsSet & 0x1) == 0) { 531 mTimezoneUtcOffsetMins = 0; 532 } 533 if ((mBuilderFieldsSet & 0x2) == 0) { 534 mOrientation = 0; 535 } 536 if ((mBuilderFieldsSet & 0x4) == 0) { 537 mAvailableStorageBytes = 0; 538 } 539 if ((mBuilderFieldsSet & 0x8) == 0) { 540 mBatteryPercentage = 0; 541 } 542 if ((mBuilderFieldsSet & 0x10) == 0) { 543 mCarrier = ""; 544 } 545 if ((mBuilderFieldsSet & 0x20) == 0) { 546 mNetworkCapabilities = null; 547 } 548 if ((mBuilderFieldsSet & 0x40) == 0) { 549 mDataNetworkType = 0; 550 } 551 if ((mBuilderFieldsSet & 0x80) == 0) { 552 mAppInfos = Collections.emptyMap(); 553 } 554 UserData o = new UserData( 555 mTimezoneUtcOffsetMins, 556 mOrientation, 557 mAvailableStorageBytes, 558 mBatteryPercentage, 559 mCarrier, 560 mNetworkCapabilities, 561 mDataNetworkType, 562 mAppInfos); 563 return o; 564 } 565 checkNotUsed()566 private void checkNotUsed() { 567 if ((mBuilderFieldsSet & 0x100) != 0) { 568 throw new IllegalStateException( 569 "This Builder should not be reused. Use a new Builder instance instead"); 570 } 571 } 572 } 573 574 @DataClass.Generated( 575 time = 1707172832988L, 576 codegenVersion = "1.0.23", 577 sourceFile = "packages/modules/OnDevicePersonalization/framework/java/android/adservices/ondevicepersonalization/UserData.java", 578 inputSignatures = " int mTimezoneUtcOffsetMins\n @android.adservices.ondevicepersonalization.UserData.Orientation int mOrientation\n @android.annotation.IntRange long mAvailableStorageBytes\n @android.annotation.IntRange int mBatteryPercentage\n @android.annotation.NonNull java.lang.String mCarrier\n @android.annotation.Nullable android.net.NetworkCapabilities mNetworkCapabilities\n @android.adservices.ondevicepersonalization.UserData.NetworkType int mDataNetworkType\n @com.android.ondevicepersonalization.internal.util.DataClass.PluralOf(\"appInfo\") @android.annotation.NonNull java.util.Map<java.lang.String,android.adservices.ondevicepersonalization.AppInfo> mAppInfos\npublic @android.annotation.NonNull java.time.Duration getTimezoneUtcOffset()\nclass UserData extends java.lang.Object implements [android.os.Parcelable]\n@com.android.ondevicepersonalization.internal.util.DataClass(genHiddenBuilder=true, genEqualsHashCode=true, genConstDefs=false)") 579 @Deprecated __metadata()580 private void __metadata() {} 581 582 583 //@formatter:on 584 // End of generated code 585 586 } 587