1 /* 2 * Copyright (C) 2017 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 package android.view.autofill; 17 18 import android.annotation.TestApi; 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 import android.view.View; 22 23 /** 24 * A unique identifier for an autofill node inside an {@link android.app.Activity}. 25 */ 26 public final class AutofillId implements Parcelable { 27 28 private final int mViewId; 29 private final boolean mVirtual; 30 private final int mVirtualId; 31 32 /** @hide */ 33 @TestApi 34 public AutofillId(int id) { 35 mVirtual = false; 36 mViewId = id; 37 mVirtualId = View.NO_ID; 38 } 39 40 /** @hide */ 41 @TestApi 42 public AutofillId(AutofillId parent, int virtualChildId) { 43 mVirtual = true; 44 mViewId = parent.mViewId; 45 mVirtualId = virtualChildId; 46 } 47 48 /** @hide */ 49 public AutofillId(int parentId, int virtualChildId) { 50 mVirtual = true; 51 mViewId = parentId; 52 mVirtualId = virtualChildId; 53 } 54 55 /** @hide */ 56 public int getViewId() { 57 return mViewId; 58 } 59 60 /** @hide */ 61 public int getVirtualChildId() { 62 return mVirtualId; 63 } 64 65 /** @hide */ 66 public boolean isVirtual() { 67 return mVirtual; 68 } 69 70 ///////////////////////////////// 71 // Object "contract" methods. // 72 ///////////////////////////////// 73 74 @Override 75 public int hashCode() { 76 final int prime = 31; 77 int result = 1; 78 result = prime * result + mViewId; 79 result = prime * result + mVirtualId; 80 return result; 81 } 82 83 @Override 84 public boolean equals(Object obj) { 85 if (this == obj) return true; 86 if (obj == null) return false; 87 if (getClass() != obj.getClass()) return false; 88 final AutofillId other = (AutofillId) obj; 89 if (mViewId != other.mViewId) return false; 90 if (mVirtualId != other.mVirtualId) return false; 91 return true; 92 } 93 94 @Override 95 public String toString() { 96 final StringBuilder builder = new StringBuilder().append(mViewId); 97 if (mVirtual) { 98 builder.append(':').append(mVirtualId); 99 } 100 return builder.toString(); 101 } 102 103 @Override 104 public int describeContents() { 105 return 0; 106 } 107 108 @Override 109 public void writeToParcel(Parcel parcel, int flags) { 110 parcel.writeInt(mViewId); 111 parcel.writeInt(mVirtual ? 1 : 0); 112 parcel.writeInt(mVirtualId); 113 } 114 115 private AutofillId(Parcel parcel) { 116 mViewId = parcel.readInt(); 117 mVirtual = parcel.readInt() == 1; 118 mVirtualId = parcel.readInt(); 119 } 120 121 public static final Parcelable.Creator<AutofillId> CREATOR = 122 new Parcelable.Creator<AutofillId>() { 123 @Override 124 public AutofillId createFromParcel(Parcel source) { 125 return new AutofillId(source); 126 } 127 128 @Override 129 public AutofillId[] newArray(int size) { 130 return new AutofillId[size]; 131 } 132 }; 133 } 134