169c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackbornpackage android.app.assist; 269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 3f8a8174cd5bc8aff63befd6ca6d96d21e89260bdFelipe Lemeimport android.annotation.NonNull; 4495cadd8a99d52965a22ffd83c2abe0930cb0968Philip P. Moltmannimport android.annotation.Nullable; 569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackbornimport android.app.Activity; 616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.content.ComponentName; 770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackbornimport android.graphics.Matrix; 816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.graphics.Rect; 94711ed9f9f8c4a320c66f2a277817acfea127703Felipe Lemeimport android.net.Uri; 103e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackbornimport android.os.BadParcelableException; 1116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.Binder; 1216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.Bundle; 1316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.IBinder; 14b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Lemeimport android.os.LocaleList; 1569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackbornimport android.os.Parcel; 1669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackbornimport android.os.Parcelable; 1716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.PooledStringReader; 1816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.PooledStringWriter; 1916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.RemoteException; 2016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.os.SystemClock; 2173fedacfebcccd54f2c36ff7c8eb9929e8ce8455Felipe Lemeimport android.service.autofill.FillRequest; 2216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.text.TextUtils; 2316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.util.Log; 2425bf787ffbc2c878683e824643941829e5b6967aFelipe Lemeimport android.util.Pair; 2516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.view.View; 2616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.view.ViewRootImpl; 27c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Lemeimport android.view.ViewStructure; 2825bf787ffbc2c878683e824643941829e5b6967aFelipe Lemeimport android.view.ViewStructure.HtmlInfo; 2925bf787ffbc2c878683e824643941829e5b6967aFelipe Lemeimport android.view.ViewStructure.HtmlInfo.Builder; 3016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.view.WindowManager; 3116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.view.WindowManagerGlobal; 32640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.view.autofill.AutofillId; 33640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.view.autofill.AutofillValue; 3416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 3516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport java.util.ArrayList; 3616aafc36ded4a118f86890261f8f87a6927dc547Felipe Lemeimport java.util.Arrays; 3709a70628da3aa617cdabace129bf8dbe64bc19b3Felipe Lemeimport java.util.List; 3869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 3969c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn/** 402f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * Assist data automatically created by the platform's implementation of assist and autofill. 4130e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 422f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>The structure is used for assist purposes when created by 4330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * {@link android.app.Activity#onProvideAssistData}, {@link View#onProvideStructure(ViewStructure)}, 4430e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * or {@link View#onProvideVirtualStructure(ViewStructure)}. 4530e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 462f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>The structure is used for autofill purposes when created by 4730e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * {@link View#onProvideAutofillStructure(ViewStructure, int)}, 4830e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * or {@link View#onProvideAutofillVirtualStructure(ViewStructure, int)}. 4930e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 502f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>For performance reasons, some properties of the assist data might be available just for assist 512f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * or autofill purposes; in those case, the property availability will be document in its javadoc. 5269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn */ 5316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornpublic class AssistStructure implements Parcelable { 5416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final String TAG = "AssistStructure"; 5569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 56782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn static final boolean DEBUG_PARCEL = false; 573e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn static final boolean DEBUG_PARCEL_CHILDREN = false; 58782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn static final boolean DEBUG_PARCEL_TREE = false; 59782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 603e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn static final int VALIDATE_WINDOW_TOKEN = 0x11111111; 613e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn static final int VALIDATE_VIEW_TOKEN = 0x22222222; 623e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn 6316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn boolean mHaveData; 6416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 6516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ComponentName mActivityComponent; 66858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani private boolean mIsHomeActivity; 670aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme private int mFlags; 6816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 6916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final ArrayList<WindowNode> mWindowNodes = new ArrayList<>(); 7016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 7116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final ArrayList<ViewNodeBuilder> mPendingAsyncChildren = new ArrayList<>(); 7216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 7316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn SendChannel mSendChannel; 7416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn IBinder mReceiveChannel; 7516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 7616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Rect mTmpRect = new Rect(); 7716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 780200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme boolean mSanitizeOnWrite = false; 79858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani private long mAcquisitionStartTime; 80858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani private long mAcquisitionEndTime; 810200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 8216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1; 8316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final String DESCRIPTOR = "android.app.AssistStructure"; 8416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 85858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** @hide */ 86858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public void setAcquisitionStartTime(long acquisitionStartTime) { 87858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mAcquisitionStartTime = acquisitionStartTime; 88858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 89858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 90858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** @hide */ 91858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public void setAcquisitionEndTime(long acquisitionEndTime) { 92858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mAcquisitionEndTime = acquisitionEndTime; 93858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 94858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 95858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** 96858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @hide 97858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * Set the home activity flag. 98858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani */ 99858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public void setHomeActivity(boolean isHomeActivity) { 100858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mIsHomeActivity = isHomeActivity; 101858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 102858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 103858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** 104858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * Returns the time when the activity started generating assist data to build the 105858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * AssistStructure. The time is as specified by {@link SystemClock#uptimeMillis()}. 106858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * 107858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @see #getAcquisitionEndTime() 108858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @return Returns the acquisition start time of the assist data, in milliseconds. 109858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani */ 110858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public long getAcquisitionStartTime() { 111858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani ensureData(); 112858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani return mAcquisitionStartTime; 113858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 114858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 115858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** 116858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * Returns the time when the activity finished generating assist data to build the 117858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * AssistStructure. The time is as specified by {@link SystemClock#uptimeMillis()}. 118858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * 119858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @see #getAcquisitionStartTime() 120858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @return Returns the acquisition end time of the assist data, in milliseconds. 121858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani */ 122858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public long getAcquisitionEndTime() { 123858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani ensureData(); 124858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani return mAcquisitionEndTime; 125858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 126858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 127782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final static class SendChannel extends Binder { 128782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn volatile AssistStructure mAssistStructure; 129782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 130782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn SendChannel(AssistStructure as) { 131782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mAssistStructure = as; 132782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 133782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 13416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) 13516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn throws RemoteException { 13616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (code == TRANSACTION_XFER) { 137782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn AssistStructure as = mAssistStructure; 138782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (as == null) { 139782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 140782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 141782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 14216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn data.enforceInterface(DESCRIPTOR); 143782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn IBinder token = data.readStrongBinder(); 144782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Request for data on " + as 145782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + " using token " + token); 146782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (token != null) { 147782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Resuming partial write of " + token); 148782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (token instanceof ParcelTransferWriter) { 149782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ParcelTransferWriter xfer = (ParcelTransferWriter)token; 150782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn xfer.writeToParcel(as, reply); 151782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 152782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 153782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn Log.w(TAG, "Caller supplied bad token type: " + token); 154782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // Don't write anything; this is the end of the data. 155782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 156782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 157782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn //long start = SystemClock.uptimeMillis(); 158782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ParcelTransferWriter xfer = new ParcelTransferWriter(as, reply); 159782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn xfer.writeToParcel(as, reply); 160782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn //Log.i(TAG, "Time to parcel: " + (SystemClock.uptimeMillis()-start) + "ms"); 16116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return true; 16216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } else { 16316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return super.onTransact(code, data, reply, flags); 16416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 16516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 16616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 16716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 168782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final static class ViewStackEntry { 169782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ViewNode node; 170782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int curChild; 171782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int numChildren; 172782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 173782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 174782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final static class ParcelTransferWriter extends Binder { 175782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final boolean mWriteStructure; 176782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mCurWindow; 177782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mNumWindows; 178782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final ArrayList<ViewStackEntry> mViewStack = new ArrayList<>(); 179782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ViewStackEntry mCurViewStackEntry; 180782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mCurViewStackPos; 181782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mNumWrittenWindows; 182782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mNumWrittenViews; 183782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final float[] mTmpMatrix = new float[9]; 1840200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme final boolean mSanitizeOnWrite; 185782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 186782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ParcelTransferWriter(AssistStructure as, Parcel out) { 1870200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme mSanitizeOnWrite = as.mSanitizeOnWrite; 188782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mWriteStructure = as.waitForReady(); 189782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ComponentName.writeToParcel(as.mActivityComponent, out); 1900aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme out.writeInt(as.mFlags); 191858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani out.writeLong(as.mAcquisitionStartTime); 192858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani out.writeLong(as.mAcquisitionEndTime); 193782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mNumWindows = as.mWindowNodes.size(); 194782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mWriteStructure && mNumWindows > 0) { 195782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn out.writeInt(mNumWindows); 196782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } else { 197782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn out.writeInt(0); 198782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 199782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 200782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 201782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn void writeToParcel(AssistStructure as, Parcel out) { 202782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int start = out.dataPosition(); 203782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mNumWrittenWindows = 0; 204782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mNumWrittenViews = 0; 205782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn boolean more = writeToParcelInner(as, out); 206782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn Log.i(TAG, "Flattened " + (more ? "partial" : "final") + " assist data: " 207782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + (out.dataPosition() - start) 208782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + " bytes, containing " + mNumWrittenWindows + " windows, " 209782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mNumWrittenViews + " views"); 210782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 211782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 212782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn boolean writeToParcelInner(AssistStructure as, Parcel out) { 213782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mNumWindows == 0) { 214782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return false; 215782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 216782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringWriter @ " + out.dataPosition()); 217782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn PooledStringWriter pwriter = new PooledStringWriter(out); 218782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn while (writeNextEntryToParcel(as, out, pwriter)) { 21986cbc2bf30a7623b2ad6564cf50ca20f87067ea7Dianne Hackborn // If the parcel is above the IPC limit, then we are getting too 220782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // large for a single IPC so stop here and let the caller come back when it 221782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // is ready for more. 22286cbc2bf30a7623b2ad6564cf50ca20f87067ea7Dianne Hackborn if (out.dataSize() > IBinder.MAX_IPC_SIZE) { 223782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Assist data size is " + out.dataSize() 224782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + " @ pos " + out.dataPosition() + "; returning partial result"); 225782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn out.writeInt(0); 226782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn out.writeStrongBinder(this); 227782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Finishing PooledStringWriter @ " 228782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + out.dataPosition() + ", size " + pwriter.getStringCount()); 229782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn pwriter.finish(); 230782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 231782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 232782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 233782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Finishing PooledStringWriter @ " 234782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + out.dataPosition() + ", size " + pwriter.getStringCount()); 235782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn pwriter.finish(); 236782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mViewStack.clear(); 237782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return false; 238782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 239782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 240782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn void pushViewStackEntry(ViewNode node, int pos) { 241782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ViewStackEntry entry; 242782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (pos >= mViewStack.size()) { 243782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn entry = new ViewStackEntry(); 244782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mViewStack.add(entry); 245782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "New stack entry at " + pos + ": " + entry); 246782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } else { 247782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn entry = mViewStack.get(pos); 248782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "Existing stack entry at " + pos + ": " + entry); 249782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 250782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn entry.node = node; 251782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn entry.numChildren = node.getChildCount(); 252782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn entry.curChild = 0; 253782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurViewStackEntry = entry; 254782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 255782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 2563e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn void writeView(ViewNode child, Parcel out, PooledStringWriter pwriter, int levelAdj) { 2573e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "write view: at " + out.dataPosition() 2583e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", windows=" + mNumWrittenWindows 2593e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", views=" + mNumWrittenViews 2603e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", level=" + (mCurViewStackPos+levelAdj)); 2613e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn out.writeInt(VALIDATE_VIEW_TOKEN); 2620200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme int flags = child.writeSelfToParcel(out, pwriter, mSanitizeOnWrite, mTmpMatrix); 2633e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn mNumWrittenViews++; 2643e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn // If the child has children, push it on the stack to write them next. 2653e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if ((flags&ViewNode.FLAGS_HAS_CHILDREN) != 0) { 2663e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (DEBUG_PARCEL_TREE || DEBUG_PARCEL_CHILDREN) Log.d(TAG, 2673e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn "Preparing to write " + child.mChildren.length 2683e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + " children: @ #" + mNumWrittenViews 2693e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", level " + (mCurViewStackPos+levelAdj)); 2703e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn out.writeInt(child.mChildren.length); 2713e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn int pos = ++mCurViewStackPos; 2723e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn pushViewStackEntry(child, pos); 2733e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn } 2743e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn } 2753e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn 276782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn boolean writeNextEntryToParcel(AssistStructure as, Parcel out, PooledStringWriter pwriter) { 277782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // Write next view node if appropriate. 278782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mCurViewStackEntry != null) { 279782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mCurViewStackEntry.curChild < mCurViewStackEntry.numChildren) { 280782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // Write the next child in the current view. 281782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "Writing child #" 282782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mCurViewStackEntry.curChild + " in " + mCurViewStackEntry.node); 283782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ViewNode child = mCurViewStackEntry.node.mChildren[mCurViewStackEntry.curChild]; 284782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurViewStackEntry.curChild++; 2853e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn writeView(child, out, pwriter, 1); 286782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 287782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 288782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 289782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // We are done writing children of the current view; pop off the stack. 290782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn do { 291782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int pos = --mCurViewStackPos; 292782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "Done with " + mCurViewStackEntry.node 293782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + "; popping up to " + pos); 294782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (pos < 0) { 295782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // Reached the last view; step to next window. 296782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "Done with view hierarchy!"); 297782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurViewStackEntry = null; 298782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn break; 299782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 300782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurViewStackEntry = mViewStack.get(pos); 301782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } while (mCurViewStackEntry.curChild >= mCurViewStackEntry.numChildren); 302782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 303782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 304782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 305782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // Write the next window if appropriate. 306782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int pos = mCurWindow; 307782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (pos < mNumWindows) { 308782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn WindowNode win = as.mWindowNodes.get(pos); 309782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurWindow++; 310782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "write window #" + pos + ": at " + out.dataPosition() 311782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", windows=" + mNumWrittenWindows 312782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", views=" + mNumWrittenViews); 3133e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn out.writeInt(VALIDATE_WINDOW_TOKEN); 314782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn win.writeSelfToParcel(out, pwriter, mTmpMatrix); 315782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mNumWrittenWindows++; 316782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ViewNode root = win.mRoot; 317782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurViewStackPos = 0; 3183e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (DEBUG_PARCEL_TREE) Log.d(TAG, "Writing initial root view " + root); 3193e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn writeView(root, out, pwriter, 0); 320782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return true; 321782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 322782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 323782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return false; 324782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 325782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 326782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 327782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final class ParcelTransferReader { 328782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final float[] mTmpMatrix = new float[9]; 329782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn PooledStringReader mStringReader; 330782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 331782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mNumReadWindows; 332782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn int mNumReadViews; 333782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 334782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn private final IBinder mChannel; 335782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn private IBinder mTransferToken; 336782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn private Parcel mCurParcel; 337782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 338782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ParcelTransferReader(IBinder channel) { 339782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mChannel = channel; 340782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 341782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 342782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn void go() { 343782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn fetchData(); 344782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mActivityComponent = ComponentName.readFromParcel(mCurParcel); 3450aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme mFlags = mCurParcel.readInt(); 346858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mAcquisitionStartTime = mCurParcel.readLong(); 347858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mAcquisitionEndTime = mCurParcel.readLong(); 348782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final int N = mCurParcel.readInt(); 349782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (N > 0) { 350782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringReader @ " 351782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mCurParcel.dataPosition()); 352782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mStringReader = new PooledStringReader(mCurParcel); 353782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "PooledStringReader size = " 354782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mStringReader.getStringCount()); 355782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn for (int i=0; i<N; i++) { 356782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mWindowNodes.add(new WindowNode(this)); 357782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 358782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 359782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Finished reading: at " + mCurParcel.dataPosition() 360782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows 361782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", views=" + mNumReadViews); 362782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 363782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 3643e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn Parcel readParcel(int validateToken, int level) { 365782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "readParcel: at " + mCurParcel.dataPosition() 366782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows 3673e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", views=" + mNumReadViews + ", level=" + level); 3683e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn int token = mCurParcel.readInt(); 3693e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (token != 0) { 3703e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (token != validateToken) { 3713e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn throw new BadParcelableException("Got token " + Integer.toHexString(token) 3723e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", expected token " + Integer.toHexString(validateToken)); 3733e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn } 374782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return mCurParcel; 375782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 376782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn // We have run out of partial data, need to read another batch. 377782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mTransferToken = mCurParcel.readStrongBinder(); 378782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mTransferToken == null) { 379782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn throw new IllegalStateException( 380782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn "Reached end of partial data without transfer token"); 381782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 382782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Ran out of partial data at " 383782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mCurParcel.dataPosition() + ", token " + mTransferToken); 384782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn fetchData(); 385782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringReader @ " 386782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mCurParcel.dataPosition()); 387782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mStringReader = new PooledStringReader(mCurParcel); 388782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "PooledStringReader size = " 389782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + mStringReader.getStringCount()); 390782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "readParcel: at " + mCurParcel.dataPosition() 391782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows 392782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn + ", views=" + mNumReadViews); 393782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurParcel.readInt(); 394782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return mCurParcel; 395782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 396782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 397782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn private void fetchData() { 398782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn Parcel data = Parcel.obtain(); 399782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn data.writeInterfaceToken(DESCRIPTOR); 400782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn data.writeStrongBinder(mTransferToken); 401782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (DEBUG_PARCEL) Log.d(TAG, "Requesting data with token " + mTransferToken); 402782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mCurParcel != null) { 403782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurParcel.recycle(); 404782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 405782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mCurParcel = Parcel.obtain(); 406782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn try { 407782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mChannel.transact(TRANSACTION_XFER, data, mCurParcel, 0); 408782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } catch (RemoteException e) { 409782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn Log.w(TAG, "Failure reading AssistStructure data", e); 410782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn throw new IllegalStateException("Failure reading AssistStructure data: " + e); 411782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 412782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn data.recycle(); 413782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mNumReadWindows = mNumReadViews = 0; 414782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 415782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn } 416782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn 41716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final static class ViewNodeText { 41816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn CharSequence mText; 41916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn float mTextSize; 42016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mTextStyle; 4216f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int mTextColor = ViewNode.TEXT_COLOR_UNDEFINED; 4226f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int mTextBackgroundColor = ViewNode.TEXT_COLOR_UNDEFINED; 4236f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int mTextSelectionStart; 4246f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int mTextSelectionEnd; 4256f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int[] mLineCharOffsets; 4266f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn int[] mLineBaselines; 42716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String mHint; 42816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 42916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNodeText() { 43016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 43116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 4326f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn boolean isSimple() { 4336f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn return mTextBackgroundColor == ViewNode.TEXT_COLOR_UNDEFINED 4346f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn && mTextSelectionStart == 0 && mTextSelectionEnd == 0 4356f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn && mLineCharOffsets == null && mLineBaselines == null && mHint == null; 4366f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 4376f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn 4386f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn ViewNodeText(Parcel in, boolean simple) { 43916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 44016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mTextSize = in.readFloat(); 44116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mTextStyle = in.readInt(); 4426f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mTextColor = in.readInt(); 4436f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn if (!simple) { 4446f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mTextBackgroundColor = in.readInt(); 4456f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mTextSelectionStart = in.readInt(); 4466f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mTextSelectionEnd = in.readInt(); 4476f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mLineCharOffsets = in.createIntArray(); 4486f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mLineBaselines = in.createIntArray(); 4496f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mHint = in.readString(); 4506f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 45116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 45216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 4530200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme void writeToParcel(Parcel out, boolean simple, boolean writeSensitive) { 4540200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme TextUtils.writeToParcel(writeSensitive ? mText : "", out, 0); 45516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeFloat(mTextSize); 45616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mTextStyle); 4576f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeInt(mTextColor); 4586f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn if (!simple) { 4596f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeInt(mTextBackgroundColor); 4606f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeInt(mTextSelectionStart); 4616f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeInt(mTextSelectionEnd); 4626f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeIntArray(mLineCharOffsets); 4636f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeIntArray(mLineBaselines); 4646f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn out.writeString(mHint); 4656f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 46616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 46716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 46816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 46916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 47016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Describes a window in the assist data. 47116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 47216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static public class WindowNode { 47316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int mX; 47416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int mY; 47516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int mWidth; 47616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int mHeight; 47716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final CharSequence mTitle; 47816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int mDisplayId; 47916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final ViewNode mRoot; 48016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 481fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov WindowNode(AssistStructure assist, ViewRootImpl root, boolean forAutoFill, int flags) { 48216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn View view = root.getView(); 48316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Rect rect = new Rect(); 48416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn view.getBoundsOnScreen(rect); 48516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mX = rect.left - view.getLeft(); 48616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mY = rect.top - view.getTop(); 48716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mWidth = rect.width(); 48816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mHeight = rect.height(); 48916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mTitle = root.getTitle(); 49016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mDisplayId = root.getDisplayId(); 49116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mRoot = new ViewNode(); 4926d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme 49333791fd54b0e2acd6e7c06517cf2f994fa3d4213Felipe Leme ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false); 49471377a4ae2d52494f19f15a0a1b860e356e80caaFelipe Leme if ((root.getWindowFlags() & WindowManager.LayoutParams.FLAG_SECURE) != 0) { 4956d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme if (forAutoFill) { 49673fedacfebcccd54f2c36ff7c8eb9929e8ce8455Felipe Leme final int autofillFlags = (flags & FillRequest.FLAG_MANUAL_REQUEST) != 0 497fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov ? View.AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS : 0; 498fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov view.onProvideAutofillStructure(builder, autofillFlags); 4991ca634a544a47193dd9e57f9b3eb3e42ab0dbbf1Felipe Leme } else { 50071377a4ae2d52494f19f15a0a1b860e356e80caaFelipe Leme // This is a secure window, so it doesn't want a screenshot, and that 50171377a4ae2d52494f19f15a0a1b860e356e80caaFelipe Leme // means we should also not copy out its view hierarchy for Assist 5026d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme view.onProvideStructure(builder); 50371377a4ae2d52494f19f15a0a1b860e356e80caaFelipe Leme builder.setAssistBlocked(true); 50471377a4ae2d52494f19f15a0a1b860e356e80caaFelipe Leme return; 5051ca634a544a47193dd9e57f9b3eb3e42ab0dbbf1Felipe Leme } 50616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 5076d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme if (forAutoFill) { 50873fedacfebcccd54f2c36ff7c8eb9929e8ce8455Felipe Leme final int autofillFlags = (flags & FillRequest.FLAG_MANUAL_REQUEST) != 0 509fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov ? View.AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS : 0; 510fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov view.dispatchProvideAutofillStructure(builder, autofillFlags); 5111ca634a544a47193dd9e57f9b3eb3e42ab0dbbf1Felipe Leme } else { 5126d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme view.dispatchProvideStructure(builder); 5131ca634a544a47193dd9e57f9b3eb3e42ab0dbbf1Felipe Leme } 51416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 51516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 516782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn WindowNode(ParcelTransferReader reader) { 5173e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn Parcel in = reader.readParcel(VALIDATE_WINDOW_TOKEN, 0); 518782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn reader.mNumReadWindows++; 51916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mX = in.readInt(); 52016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mY = in.readInt(); 52116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mWidth = in.readInt(); 52216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mHeight = in.readInt(); 52316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 52416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mDisplayId = in.readInt(); 5253e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn mRoot = new ViewNode(reader, 0); 52616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 52716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 528782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn void writeSelfToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) { 52916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mX); 53016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mY); 53116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mWidth); 53216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mHeight); 53316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn TextUtils.writeToParcel(mTitle, out, 0); 53416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn out.writeInt(mDisplayId); 53516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 53616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 53716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 53816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the left edge of the window, in pixels, relative to the left 53916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * edge of the screen. 54016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 54116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getLeft() { 54216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mX; 54316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 54416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 54516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 54616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the top edge of the window, in pixels, relative to the top 54716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * edge of the screen. 54816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 54916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTop() { 55016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mY; 55116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 55216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 55316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 55416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the total width of the window in pixels. 55516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 55616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getWidth() { 55716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mWidth; 55816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 55916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 56016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 56116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the total height of the window in pixels. 56216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 56316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getHeight() { 56416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mHeight; 56516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 56616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 56716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 56816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the title associated with the window, if it has one. 56916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 57016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public CharSequence getTitle() { 57116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mTitle; 57216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 57316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 57416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 57516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the ID of the display this window is on, for use with 57616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link android.hardware.display.DisplayManager#getDisplay DisplayManager.getDisplay()}. 57716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 57816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getDisplayId() { 57916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mDisplayId; 58016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 58116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 58216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 58316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the {@link ViewNode} containing the root content of the window. 58416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 58516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public ViewNode getRootViewNode() { 58616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mRoot; 58716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 58816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 58916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 59016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 59116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Describes a single view in the assist data. 59216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 59316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static public class ViewNode { 59416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 59516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Magic value for text color that has not been defined, which is very unlikely 59616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * to be confused with a real text color. 59716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 59816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public static final int TEXT_COLOR_UNDEFINED = 1; 59916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 60016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public static final int TEXT_STYLE_BOLD = 1<<0; 60116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public static final int TEXT_STYLE_ITALIC = 1<<1; 60216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public static final int TEXT_STYLE_UNDERLINE = 1<<2; 60316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public static final int TEXT_STYLE_STRIKE_THRU = 1<<3; 60416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 60570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn int mId = View.NO_ID; 60616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String mIdPackage; 60716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String mIdType; 60816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String mIdEntry; 60916aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme 61085d1c2d2905362b984563d9b5e8332010c272fc5Felipe Leme // TODO: once we have more flags, it might be better to store the individual 6116d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme // fields (viewId and childId) of the field. 612640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme AutofillId mAutofillId; 61330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @View.AutofillType int mAutofillType = View.AUTOFILL_TYPE_NONE; 61481192b40de3578368a38c9815d0af87565f99228Philip P. Moltmann @Nullable String[] mAutofillHints; 615640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme AutofillValue mAutofillValue; 6167e4c205d8f7e6746ab6e0701e4d7776a2cdd6aa0Felipe Leme CharSequence[] mAutofillOptions; 6170200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme boolean mSanitized; 61825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme HtmlInfo mHtmlInfo; 61916aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme 620cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme // POJO used to override some autofill-related values when the node is parcelized. 621cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme // Not written to parcel. 622cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme AutofillOverlay mAutofillOverlay; 623cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme 62416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mX; 62516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mY; 62616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mScrollX; 62716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mScrollY; 62816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mWidth; 62916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mHeight; 63070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Matrix mMatrix; 63170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn float mElevation; 63270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn float mAlpha = 1.0f; 63316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 63416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_DISABLED = 0x00000001; 63516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_VISIBILITY_MASK = View.VISIBLE|View.INVISIBLE|View.GONE; 63616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_FOCUSABLE = 0x00000010; 63716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_FOCUSED = 0x00000020; 63816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_SELECTED = 0x00000040; 63916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_ASSIST_BLOCKED = 0x00000080; 64016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_CHECKABLE = 0x00000100; 64116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static final int FLAGS_CHECKED = 0x00000200; 64270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_CLICKABLE = 0x00000400; 64370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_LONG_CLICKABLE = 0x00000800; 64470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_ACCESSIBILITY_FOCUSED = 0x00001000; 64570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_ACTIVATED = 0x00002000; 64670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_CONTEXT_CLICKABLE = 0x00004000; 647858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani static final int FLAGS_OPAQUE = 0x00008000; 64870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 64985d1c2d2905362b984563d9b5e8332010c272fc5Felipe Leme // TODO: autofill data is made of many fields and ideally we should verify 6506d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme // one-by-one to optimize what's sent over, but there isn't enough flag bits for that, we'd 6516d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme // need to create a 'flags2' or 'autoFillFlags' field and add these flags there. 6526d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme // So, to keep thinkg simpler for now, let's just use on flag for all of them... 653640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme static final int FLAGS_HAS_AUTOFILL_DATA = 0x80000000; 65470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_MATRIX = 0x40000000; 65570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_ALPHA = 0x20000000; 65670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_ELEVATION = 0x10000000; 65770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_SCROLL = 0x08000000; 65870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_LARGE_COORDS = 0x04000000; 65970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_CONTENT_DESCRIPTION = 0x02000000; 66070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_HAS_TEXT = 0x01000000; 6616f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn static final int FLAGS_HAS_COMPLEX_TEXT = 0x00800000; 6626f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn static final int FLAGS_HAS_EXTRAS = 0x00400000; 6636f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn static final int FLAGS_HAS_ID = 0x00200000; 6646f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn static final int FLAGS_HAS_CHILDREN = 0x00100000; 665c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme static final int FLAGS_HAS_URL = 0x00080000; 66616aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme static final int FLAGS_HAS_INPUT_TYPE = 0x00040000; 667b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme static final int FLAGS_HAS_LOCALE_LIST = 0x00010000; 66870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn static final int FLAGS_ALL_CONTROL = 0xfff00000; 66916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 67016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int mFlags; 67116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 67216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String mClassName; 67316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn CharSequence mContentDescription; 67416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 67516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNodeText mText; 67616aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme int mInputType; 6774711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme String mWebDomain; 67816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Bundle mExtras; 679b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme LocaleList mLocaleList; 68016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 68116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode[] mChildren; 68216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 68316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode() { 68416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 68516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 6863e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn ViewNode(ParcelTransferReader reader, int nestingLevel) { 6873e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn final Parcel in = reader.readParcel(VALIDATE_VIEW_TOKEN, nestingLevel); 688782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn reader.mNumReadViews++; 689782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn final PooledStringReader preader = reader.mStringReader; 69070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mClassName = preader.readString(); 69170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mFlags = in.readInt(); 69270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn final int flags = mFlags; 69370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ID) != 0) { 69470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mId = in.readInt(); 69570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mId != 0) { 69670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mIdEntry = preader.readString(); 69770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mIdEntry != null) { 69870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mIdType = preader.readString(); 69970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mIdPackage = preader.readString(); 70070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 70116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 70270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 7031a1e4687e4401068af0e4901477a8169278aa39bFelipe Leme 704640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme if ((flags&FLAGS_HAS_AUTOFILL_DATA) != 0) { 7050200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme mSanitized = in.readInt() == 1; 706640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme mAutofillId = in.readParcelable(null); 7078931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme mAutofillType = in.readInt(); 70881192b40de3578368a38c9815d0af87565f99228Philip P. Moltmann mAutofillHints = in.readStringArray(); 709640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme mAutofillValue = in.readParcelable(null); 7107e4c205d8f7e6746ab6e0701e4d7776a2cdd6aa0Felipe Leme mAutofillOptions = in.readCharSequenceArray(); 71125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final Parcelable p = in.readParcelable(null); 71225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (p instanceof HtmlInfo) { 71325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mHtmlInfo = (HtmlInfo) p; 71425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 71529a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme } 71670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) { 71770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mX = in.readInt(); 71870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mY = in.readInt(); 71970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mWidth = in.readInt(); 72070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mHeight = in.readInt(); 72116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } else { 72270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn int val = in.readInt(); 72370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mX = val&0x7fff; 72470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mY = (val>>16)&0x7fff; 72570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn val = in.readInt(); 72670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mWidth = val&0x7fff; 72770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mHeight = (val>>16)&0x7fff; 72816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 72970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_SCROLL) != 0) { 73070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mScrollX = in.readInt(); 73170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mScrollY = in.readInt(); 73270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 73370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_MATRIX) != 0) { 73470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mMatrix = new Matrix(); 735782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn in.readFloatArray(reader.mTmpMatrix); 736782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mMatrix.setValues(reader.mTmpMatrix); 73770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 73870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ELEVATION) != 0) { 73970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mElevation = in.readFloat(); 74070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 74170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ALPHA) != 0) { 74270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mAlpha = in.readFloat(); 74370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 74470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_CONTENT_DESCRIPTION) != 0) { 74570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 74670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 74770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_TEXT) != 0) { 7486f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn mText = new ViewNodeText(in, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0); 74916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 75016aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme if ((flags&FLAGS_HAS_INPUT_TYPE) != 0) { 75116aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme mInputType = in.readInt(); 75216aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme } 753c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme if ((flags&FLAGS_HAS_URL) != 0) { 7544711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme mWebDomain = in.readString(); 755c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 756b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme if ((flags&FLAGS_HAS_LOCALE_LIST) != 0) { 757b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme mLocaleList = in.readParcelable(null); 758b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 75970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_EXTRAS) != 0) { 76070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mExtras = in.readBundle(); 76170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 76270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_CHILDREN) != 0) { 76370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn final int NCHILDREN = in.readInt(); 7643e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn if (DEBUG_PARCEL_TREE || DEBUG_PARCEL_CHILDREN) Log.d(TAG, 7653e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn "Preparing to read " + NCHILDREN 7663e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + " children: @ #" + reader.mNumReadViews 7673e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn + ", level " + nestingLevel); 76816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mChildren = new ViewNode[NCHILDREN]; 76916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn for (int i=0; i<NCHILDREN; i++) { 7703e8125b40ef2f559a123baadb8b253123c75a4eeDianne Hackborn mChildren[i] = new ViewNode(reader, nestingLevel + 1); 77116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 77216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 77316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 77416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 7750200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme int writeSelfToParcel(Parcel out, PooledStringWriter pwriter, boolean sanitizeOnWrite, 7760200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme float[] tmpMatrix) { 777640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme // Guard used to skip non-sanitized data when writing for autofill. 7780200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme boolean writeSensitive = true; 7790200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 78070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn int flags = mFlags & ~FLAGS_ALL_CONTROL; 781cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme 78270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mId != View.NO_ID) { 78370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_ID; 78470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 785640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme if (mAutofillId != null) { 786640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme flags |= FLAGS_HAS_AUTOFILL_DATA; 78729a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme } 78870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((mX&~0x7fff) != 0 || (mY&~0x7fff) != 0 78970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn || (mWidth&~0x7fff) != 0 | (mHeight&~0x7fff) != 0) { 79070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_LARGE_COORDS; 79170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 79270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mScrollX != 0 || mScrollY != 0) { 79370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_SCROLL; 79470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 79570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mMatrix != null) { 79670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_MATRIX; 79770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 79870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mElevation != 0) { 79970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_ELEVATION; 80070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 80170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mAlpha != 1.0f) { 80270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_ALPHA; 80370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 80470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mContentDescription != null) { 80570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_CONTENT_DESCRIPTION; 80616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 80716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mText != null) { 80870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_TEXT; 8096f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn if (!mText.isSimple()) { 8106f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn flags |= FLAGS_HAS_COMPLEX_TEXT; 8116f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 81270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 81316aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme if (mInputType != 0) { 81416aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme flags |= FLAGS_HAS_INPUT_TYPE; 81516aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme } 8164711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme if (mWebDomain != null) { 817c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme flags |= FLAGS_HAS_URL; 818c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 819b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme if (mLocaleList != null) { 820b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme flags |= FLAGS_HAS_LOCALE_LIST; 821b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 82270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mExtras != null) { 82370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_EXTRAS; 82416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 82516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mChildren != null) { 82670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn flags |= FLAGS_HAS_CHILDREN; 82770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 82870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 82970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn pwriter.writeString(mClassName); 830c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme 831c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme int writtenFlags = flags; 832640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme if ((flags&FLAGS_HAS_AUTOFILL_DATA) != 0 && (mSanitized || !sanitizeOnWrite)) { 833640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme // Remove 'checked' from sanitized autofill request. 834c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme writtenFlags = flags & ~FLAGS_CHECKED; 835c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme } 836cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme if (mAutofillOverlay != null) { 837cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme if (mAutofillOverlay.focused) { 838cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme writtenFlags |= ViewNode.FLAGS_FOCUSED; 839cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } else { 840cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme writtenFlags &= ~ViewNode.FLAGS_FOCUSED; 841cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } 842cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } 843c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme 844c01a873c4f68518be4698077c7eb593a6a3b9f4cFelipe Leme out.writeInt(writtenFlags); 84570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ID) != 0) { 84670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mId); 84770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mId != 0) { 84870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn pwriter.writeString(mIdEntry); 84970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (mIdEntry != null) { 85070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn pwriter.writeString(mIdType); 85170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn pwriter.writeString(mIdPackage); 85270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 85370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 85470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 8551a1e4687e4401068af0e4901477a8169278aa39bFelipe Leme 856640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme if ((flags&FLAGS_HAS_AUTOFILL_DATA) != 0) { 8570200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme writeSensitive = mSanitized || !sanitizeOnWrite; 8580200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme out.writeInt(mSanitized ? 1 : 0); 859640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme out.writeParcelable(mAutofillId, 0); 8608931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme out.writeInt(mAutofillType); 86181192b40de3578368a38c9815d0af87565f99228Philip P. Moltmann out.writeStringArray(mAutofillHints); 862cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme final AutofillValue sanitizedValue; 8637f33cd350be4278ce5d4ef460c11e4dbaf9c473bFelipe Leme if (writeSensitive) { 864cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme sanitizedValue = mAutofillValue; 8657f33cd350be4278ce5d4ef460c11e4dbaf9c473bFelipe Leme } else if (mAutofillOverlay != null && mAutofillOverlay.value != null) { 8667f33cd350be4278ce5d4ef460c11e4dbaf9c473bFelipe Leme sanitizedValue = mAutofillOverlay.value; 867cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } else { 868cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme sanitizedValue = null; 869cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } 8700200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme out.writeParcelable(sanitizedValue, 0); 8717e4c205d8f7e6746ab6e0701e4d7776a2cdd6aa0Felipe Leme out.writeCharSequenceArray(mAutofillOptions); 87225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (mHtmlInfo instanceof Parcelable) { 87325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme out.writeParcelable((Parcelable) mHtmlInfo, 0); 87425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } else { 87525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme out.writeParcelable(null, 0); 87625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 87729a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme } 87870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) { 87970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mX); 88070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mY); 88170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mWidth); 88270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mHeight); 88370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } else { 88470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt((mY<<16) | mX); 88570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt((mHeight<<16) | mWidth); 88670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 88770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_SCROLL) != 0) { 88870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mScrollX); 88970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeInt(mScrollY); 89070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 89170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_MATRIX) != 0) { 89270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mMatrix.getValues(tmpMatrix); 89370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeFloatArray(tmpMatrix); 89470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 89570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ELEVATION) != 0) { 89670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeFloat(mElevation); 89770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 89870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_ALPHA) != 0) { 89970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeFloat(mAlpha); 90070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 90170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_CONTENT_DESCRIPTION) != 0) { 90270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn TextUtils.writeToParcel(mContentDescription, out, 0); 90370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 90470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_TEXT) != 0) { 9050200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0, writeSensitive); 90670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 90716aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme if ((flags&FLAGS_HAS_INPUT_TYPE) != 0) { 90816aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme out.writeInt(mInputType); 90916aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme } 910c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme if ((flags&FLAGS_HAS_URL) != 0) { 9114711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme out.writeString(mWebDomain); 912c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 913b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme if ((flags&FLAGS_HAS_LOCALE_LIST) != 0) { 914b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme out.writeParcelable(mLocaleList, 0); 915b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 91670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if ((flags&FLAGS_HAS_EXTRAS) != 0) { 91770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn out.writeBundle(mExtras); 91870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 919782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return flags; 92016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 92116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 92216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 92316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the ID associated with this view, as per {@link View#getId() View.getId()}. 92416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 92516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getId() { 92616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mId; 92716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 92816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 92916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 93016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getId()} is a resource identifier, this is the package name of that 93116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * identifier. See {@link android.view.ViewStructure#setId ViewStructure.setId} 93216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * for more information. 93316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 93416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public String getIdPackage() { 93516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mIdPackage; 93616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 93716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 93816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 93916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getId()} is a resource identifier, this is the type name of that 94016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * identifier. See {@link android.view.ViewStructure#setId ViewStructure.setId} 94116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * for more information. 94216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 94316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public String getIdType() { 94416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mIdType; 94516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 94616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 94716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 94816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getId()} is a resource identifier, this is the entry name of that 94916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * identifier. See {@link android.view.ViewStructure#setId ViewStructure.setId} 95016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * for more information. 95116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 95216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public String getIdEntry() { 95316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mIdEntry; 95416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 95516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 95616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 957640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Gets the id that can be used to autofill the view contents. 95829a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme * 9592f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes. 96030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 96130e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return id that can be used to autofill the view contents, or {@code null} if the 9622f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * structure was created for assist purposes. 96329a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme */ 96430e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @Nullable public AutofillId getAutofillId() { 965640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme return mAutofillId; 96629a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme } 96729a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme 96829a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme /** 969640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Gets the the type of value that can be used to autofill the view contents. 9706d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme * 9712f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes. 97230e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 97330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return autofill type as defined by {@link View#getAutofillType()}, 9742f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * or {@link View#AUTOFILL_TYPE_NONE} if the structure was created for assist purposes. 9756d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme */ 9768931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme public @View.AutofillType int getAutofillType() { 9778931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme return mAutofillType; 9786d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme } 9796d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme 9806d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme /** 981640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Describes the content of a view so that a autofill service can fill in the appropriate 982ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann * data. 983ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann * 9842f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes, 98530e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * not for Assist - see {@link View#getAutofillHints()} for more info. 986ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann * 98730e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return The autofill hints for this view, or {@code null} if the structure was created 9882f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * for assist purposes. 989ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann */ 990b11802197259019b016c84741fd5ae18a1b276c1Felipe Leme @Nullable public String[] getAutofillHints() { 991b11802197259019b016c84741fd5ae18a1b276c1Felipe Leme return mAutofillHints; 992b11802197259019b016c84741fd5ae18a1b276c1Felipe Leme } 993b11802197259019b016c84741fd5ae18a1b276c1Felipe Leme 994b11802197259019b016c84741fd5ae18a1b276c1Felipe Leme /** 9950200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * Gets the the value of this view. 9960200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * 9972f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes, 9982f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for assist purposes. 99930e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 100030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return the autofill value of this view, or {@code null} if the structure was created 10012f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * for assist purposes. 10020200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme */ 100330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @Nullable public AutofillValue getAutofillValue() { 1004640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme return mAutofillValue; 10050200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 10060200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 1007cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme /** @hide **/ 1008cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme public void setAutofillOverlay(AutofillOverlay overlay) { 1009cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme mAutofillOverlay = overlay; 1010cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } 1011cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme 1012d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme /** 101330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * Gets the options that can be used to autofill this view. 1014d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme * 1015640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * <p>Typically used by nodes whose {@link View#getAutofillType()} is a list to indicate 1016640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * the meaning of each possible value in the list. 1017d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme * 10182f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's relevant when the {@link AssistStructure} is used for autofill purposes, not 10192f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * for assist purposes. 102030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 102130e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return the options that can be used to autofill this view, or {@code null} if the 10222f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * structure was created for assist purposes. 1023d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme */ 102430e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @Nullable public CharSequence[] getAutofillOptions() { 1025640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme return mAutofillOptions; 1026d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme } 1027d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme 102816aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme /** 102916aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme * Gets the {@link android.text.InputType} bits of this structure. 103016aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme * 103116aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme * @return bits as defined by {@link android.text.InputType}. 103216aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme */ 103316aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme public int getInputType() { 103416aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme return mInputType; 103516aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme } 103616aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme 10370200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme /** @hide */ 10380200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme public boolean isSanitized() { 10390200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme return mSanitized; 10400200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 10410200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 10420200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme /** 1043640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Updates the {@link AutofillValue} of this structure. 10440200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * 10450200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * <p>Should be used just before sending the structure to the 1046640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * {@link android.service.autofill.AutofillService} for saving, since it will override the 10470200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * initial value. 10480200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * 10490200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * @hide 10500200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme */ 1051640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme public void updateAutofillValue(AutofillValue value) { 1052640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme mAutofillValue = value; 10539668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann if (value.isText()) { 1054266752317b7752394e39618f6fe1ad2829e919d8Felipe Leme if (mText == null) { 1055266752317b7752394e39618f6fe1ad2829e919d8Felipe Leme mText = new ViewNodeText(); 1056266752317b7752394e39618f6fe1ad2829e919d8Felipe Leme } 10579668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann mText.mText = value.getTextValue(); 10580200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 10590200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 10600200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 10610200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme /** 106216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the left edge of this view, in pixels, relative to the left edge of its parent. 106316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 106416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getLeft() { 106516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mX; 106616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 106716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 106816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 106916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the top edge of this view, in pixels, relative to the top edge of its parent. 107016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 107116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTop() { 107216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mY; 107316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 107416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 107516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 107616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the current X scroll offset of this view, as per 107716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link android.view.View#getScrollX() View.getScrollX()}. 107816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 107916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getScrollX() { 108016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mScrollX; 108116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 108216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 108316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 108416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the current Y scroll offset of this view, as per 108516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link android.view.View#getScrollX() View.getScrollY()}. 108616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 108716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getScrollY() { 108816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mScrollY; 108916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 109016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 109116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 109216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the width of this view, in pixels. 109316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 109416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getWidth() { 109516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mWidth; 109616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 109716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 109816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 109916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the height of this view, in pixels. 110016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 110116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getHeight() { 110216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mHeight; 110316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 110416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 110516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 110670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * Returns the transformation that has been applied to this view, such as a translation 110770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * or scaling. The returned Matrix object is owned by ViewNode; do not modify it. 110870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * Returns null if there is no transformation applied to the view. 1109c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 11102f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 11112f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 111270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn */ 111370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public Matrix getTransformation() { 111470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn return mMatrix; 111570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 111670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 111770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn /** 111870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * Returns the visual elevation of the view, used for shadowing and other visual 111970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * characterstics, as set by {@link ViewStructure#setElevation 112070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * ViewStructure.setElevation(float)}. 1121c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 11222f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 11232f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 112470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn */ 112570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public float getElevation() { 112670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn return mElevation; 112770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 112870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 112970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn /** 113070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * Returns the alpha transformation of the view, used to reduce the overall opacity 113170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * of the view's contents, as set by {@link ViewStructure#setAlpha 113270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn * ViewStructure.setAlpha(float)}. 1133c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 11342f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 11352f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 113670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn */ 113770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public float getAlpha() { 113870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn return mAlpha; 113970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 114070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 114170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn /** 114216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the visibility mode of this view, as per 114316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link android.view.View#getVisibility() View.getVisibility()}. 114416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 114516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getVisibility() { 114616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mFlags&ViewNode.FLAGS_VISIBILITY_MASK; 114716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 114816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 114916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 115016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if assist data has been blocked starting at this node in the hierarchy. 115116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 115216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isAssistBlocked() { 1153fcbfeaf0695da69303e91aebe9ca97ef84437539Dianne Hackborn return (mFlags&ViewNode.FLAGS_ASSIST_BLOCKED) != 0; 115416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 115516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 115616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 115716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node is in an enabled state. 115816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 115916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isEnabled() { 116016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_DISABLED) == 0; 116116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 116216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 116316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 116416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node is clickable by the user. 116516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 116616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isClickable() { 116716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_CLICKABLE) != 0; 116816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 116916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 117016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 117116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node can take input focus. 117216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 117316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isFocusable() { 117416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_FOCUSABLE) != 0; 117516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 117616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 117716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 117816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node currently had input focus at the time that the 117916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * structure was collected. 118016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 118116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isFocused() { 118216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_FOCUSED) != 0; 118316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 118416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 118516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 118616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node currently had accessibility focus at the time that the 118716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * structure was collected. 118816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 118916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isAccessibilityFocused() { 119016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_ACCESSIBILITY_FOCUSED) != 0; 119116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 119216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 119316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 119416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node represents something that is checkable by the user. 119516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 119616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isCheckable() { 119716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_CHECKABLE) != 0; 119816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 119916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 120016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 120116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node is currently in a checked state. 120216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 120316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isChecked() { 120416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_CHECKED) != 0; 120516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 120616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 120716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 120816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node has currently been selected by the user. 120916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 121016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isSelected() { 121116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_SELECTED) != 0; 121216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 121316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 121416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 121516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node has currently been activated by the user. 121616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 121716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isActivated() { 121816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_ACTIVATED) != 0; 121916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 122016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 122116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 1222858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * Returns true if this node is opaque. 1223858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani */ 1224858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public boolean isOpaque() { return (mFlags&ViewNode.FLAGS_OPAQUE) != 0; } 1225858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 1226858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** 122716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node is something the user can perform a long click/press on. 122816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 122916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isLongClickable() { 123016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_LONG_CLICKABLE) != 0; 123116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 123216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 123316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 123416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns true if this node is something the user can perform a context click on. 123516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 123616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean isContextClickable() { 123716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return (mFlags&ViewNode.FLAGS_CONTEXT_CLICKABLE) != 0; 123816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 123916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 124016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 124116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns the class name of the node's implementation, indicating its behavior. 124216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * For example, a button will report "android.widget.Button" meaning it behaves 124316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * like a {@link android.widget.Button}. 124416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 124516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public String getClassName() { 124616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mClassName; 124716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 124816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 124916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 125016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns any content description associated with the node, which semantically describes 125116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * its purpose for accessibility and other uses. 125216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 125316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public CharSequence getContentDescription() { 125416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mContentDescription; 125516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 125616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 125716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 12584711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme * Returns the domain of the HTML document represented by this view. 1259c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme * 126030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * <p>Typically used when the view associated with the view is a container for an HTML 126125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme * document. 1262bd271212a283a8e243ea498117f57b09ca2b346aFelipe Leme * 1263640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * <strong>WARNING:</strong> a {@link android.service.autofill.AutofillService} should only 12642f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * use this domain for autofill purposes when it trusts the app generating it (i.e., the app 1265bd271212a283a8e243ea498117f57b09ca2b346aFelipe Leme * defined by {@link AssistStructure#getActivityComponent()}). 12664711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme * 12674711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme * @return domain-only part of the document. For example, if the full URL is 12684711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme * {@code http://my.site/login?user=my_user}, it returns {@code my.site}. 1269c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme */ 12704711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme @Nullable public String getWebDomain() { 12714711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme return mWebDomain; 1272c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 1273c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme 1274c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme /** 127530e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * Returns the HTML properties associated with this view. 127630e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * 12772f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes, 12782f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for assist purposes. 127925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme * 128030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * @return the HTML properties associated with this view, or {@code null} if the 12812f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * structure was created for assist purposes. 128225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme */ 128330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @Nullable public HtmlInfo getHtmlInfo() { 128425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return mHtmlInfo; 128525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 128625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 128725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme /** 128830e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme * Returns the the list of locales associated with this view. 1289b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme */ 129030e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme @Nullable public LocaleList getLocaleList() { 1291b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme return mLocaleList; 1292b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 1293b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme 1294b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme /** 129516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Returns any text associated with the node that is displayed to the user, or null 129616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * if there is none. 129716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 129816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public CharSequence getText() { 129916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mText : null; 130016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 130116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 130216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 130316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is where the current selection starts. 1304c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13052f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13062f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 130716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 130816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextSelectionStart() { 130916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextSelectionStart : -1; 131016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 131116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 131216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 131316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is where the current selection starts. 131416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If there is no selection, returns the same value as {@link #getTextSelectionStart()}, 131516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * indicating the cursor position. 1316c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13172f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13182f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 131916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 132016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextSelectionEnd() { 132116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextSelectionEnd : -1; 132216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 132316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 132416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 132516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is the main text color associated with it. 132616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If there is no text color, {@link #TEXT_COLOR_UNDEFINED} is returned. 132716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Note that the text may also contain style spans that modify the color of specific 132816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * parts of the text. 132916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 133016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextColor() { 133116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextColor : TEXT_COLOR_UNDEFINED; 133216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 133316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 133416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 133516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is the main text background color associated 133616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * with it. 133716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If there is no text background color, {@link #TEXT_COLOR_UNDEFINED} is returned. 133816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Note that the text may also contain style spans that modify the color of specific 133916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * parts of the text. 1340c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13412f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13422f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 134316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 134416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextBackgroundColor() { 134516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextBackgroundColor : TEXT_COLOR_UNDEFINED; 134616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 134716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 134816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 134916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is the main text size (in pixels) associated 135016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * with it. 135116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Note that the text may also contain style spans that modify the size of specific 135216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * parts of the text. 1353c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13542f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13552f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 135616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 135716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public float getTextSize() { 135816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextSize : 0; 135916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 136016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 136116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 136216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * If {@link #getText()} is non-null, this is the main text style associated 136316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * with it, containing a bit mask of {@link #TEXT_STYLE_BOLD}, 136416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link #TEXT_STYLE_BOLD}, {@link #TEXT_STYLE_STRIKE_THRU}, and/or 136516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link #TEXT_STYLE_UNDERLINE}. 136616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Note that the text may also contain style spans that modify the style of specific 136716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * parts of the text. 1368c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13692f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13702f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 137116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 137216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextStyle() { 137316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mTextStyle : 0; 137416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 137516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 137616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 13776f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * Return per-line offsets into the text returned by {@link #getText()}. Each entry 13786f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * in the array is a formatted line of text, and the value it contains is the offset 13796f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * into the text string where that line starts. May return null if there is no line 13806f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * information. 1381c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13822f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13832f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 13846f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn */ 13856f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn public int[] getTextLineCharOffsets() { 13866f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn return mText != null ? mText.mLineCharOffsets : null; 13876f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 13886f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn 13896f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn /** 13906f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * Return per-line baselines into the text returned by {@link #getText()}. Each entry 13916f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * in the array is a formatted line of text, and the value it contains is the baseline 13926f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * where that text appears in the view. May return null if there is no line 13936f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn * information. 1394c368a240c9a7b03c5fa3071b97ddf56e76dbd068Philip P. Moltmann * 13952f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * <p>It's only relevant when the {@link AssistStructure} is used for assist purposes, 13962f6fc72efcb67737f45edb881eb2aed120a1b0bfFelipe Leme * not for autofill purposes. 13976f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn */ 13986f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn public int[] getTextLineBaselines() { 13996f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn return mText != null ? mText.mLineBaselines : null; 14006f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 14016f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn 14026f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn /** 140316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return additional hint text associated with the node; this is typically used with 140416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * a node that takes user input, describing to the user what the input means. 140516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 140616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public String getHint() { 140716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mText != null ? mText.mHint : null; 140816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 140916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 141016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 141116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return a Bundle containing optional vendor-specific extension information. 141216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 141316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public Bundle getExtras() { 141416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mExtras; 141516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 141616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 141716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 141816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return the number of children this node has. 141916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 142016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getChildCount() { 142116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mChildren != null ? mChildren.length : 0; 142216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 142316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 142416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 142516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return a child of this node, given an index value from 0 to 142616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * {@link #getChildCount()}-1. 142716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 142816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public ViewNode getChildAt(int index) { 142916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mChildren[index]; 143016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 143116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 143216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 1433cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme /** 1434cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme * POJO used to override some autofill-related values when the node is parcelized. 1435cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme * 1436cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme * @hide 1437cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme */ 1438cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme static public class AutofillOverlay { 1439cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme public boolean focused; 1440cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme public AutofillValue value; 1441cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme } 1442cde040ae9563600179502f8ce8dd06bc7bb5a1c0Felipe Leme 14438ecf16d186fa8606571b75c01a21a528a7e55d23Dianne Hackborn static class ViewNodeBuilder extends ViewStructure { 144416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final AssistStructure mAssist; 144516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final ViewNode mNode; 144616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final boolean mAsync; 144716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 144833791fd54b0e2acd6e7c06517cf2f994fa3d4213Felipe Leme ViewNodeBuilder(AssistStructure assist, ViewNode node, boolean async) { 144916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mAssist = assist; 145016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode = node; 145116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mAsync = async; 145216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 145316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 145416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 145516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setId(int id, String packageName, String typeName, String entryName) { 145616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mId = id; 145716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mIdPackage = packageName; 145816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mIdType = typeName; 145916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mIdEntry = entryName; 146016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 146116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 146216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 146316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setDimens(int left, int top, int scrollX, int scrollY, int width, int height) { 146416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mX = left; 146516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mY = top; 146616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mScrollX = scrollX; 146716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mScrollY = scrollY; 146816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mWidth = width; 146916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mHeight = height; 147016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 147116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 147216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 147370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public void setTransformation(Matrix matrix) { 147470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (matrix == null) { 147570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mNode.mMatrix = null; 147670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } else { 147770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mNode.mMatrix = new Matrix(matrix); 147870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 147970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 148070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 148170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn @Override 148270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public void setElevation(float elevation) { 148370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mNode.mElevation = elevation; 148470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 148570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 148670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn @Override 148770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn public void setAlpha(float alpha) { 148870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn mNode.mAlpha = alpha; 148970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 149070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn 149170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn @Override 149216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setVisibility(int visibility) { 149316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_VISIBILITY_MASK) | visibility; 149416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 149516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 149616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 149716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setAssistBlocked(boolean state) { 149816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_ASSIST_BLOCKED) 1499afb308d6519c56cf2b8001b33dade35e682ab241Dianne Hackborn | (state ? ViewNode.FLAGS_ASSIST_BLOCKED : 0); 150016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 150116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 150216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 150316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setEnabled(boolean state) { 150416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_DISABLED) 150516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? 0 : ViewNode.FLAGS_DISABLED); 150616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 150716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 150816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 150916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setClickable(boolean state) { 151016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_CLICKABLE) 151116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_CLICKABLE : 0); 151216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 151316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 151416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 151516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setLongClickable(boolean state) { 151616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_LONG_CLICKABLE) 151716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_LONG_CLICKABLE : 0); 151816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 151916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 152016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 152116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setContextClickable(boolean state) { 152216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_CONTEXT_CLICKABLE) 152316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_CONTEXT_CLICKABLE : 0); 152416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 152516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 152616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 152716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setFocusable(boolean state) { 152816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_FOCUSABLE) 152916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_FOCUSABLE : 0); 153016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 153116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 153216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 153316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setFocused(boolean state) { 153416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_FOCUSED) 153516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_FOCUSED : 0); 153616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 153716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 153816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 153916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setAccessibilityFocused(boolean state) { 154016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_ACCESSIBILITY_FOCUSED) 154116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_ACCESSIBILITY_FOCUSED : 0); 154216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 154316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 154416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 154516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setCheckable(boolean state) { 154616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_CHECKABLE) 154716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_CHECKABLE : 0); 154816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 154916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 155016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 155116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setChecked(boolean state) { 155216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_CHECKED) 155316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_CHECKED : 0); 155416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 155516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 155616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 155716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setSelected(boolean state) { 155816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_SELECTED) 155916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_SELECTED : 0); 156016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 156116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 156216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 156316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setActivated(boolean state) { 156416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_ACTIVATED) 156516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn | (state ? ViewNode.FLAGS_ACTIVATED : 0); 156616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 156716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 156816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 1569858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public void setOpaque(boolean opaque) { 1570858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mNode.mFlags = (mNode.mFlags & ~ViewNode.FLAGS_OPAQUE) 1571858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani | (opaque ? ViewNode.FLAGS_OPAQUE : 0); 1572858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 1573858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 1574858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani @Override 157516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setClassName(String className) { 157616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mClassName = className; 157716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 157816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 157916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 158016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setContentDescription(CharSequence contentDescription) { 158116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mContentDescription = contentDescription; 158216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 158316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 158416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn private final ViewNodeText getNodeText() { 158516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mNode.mText != null) { 158616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText; 158716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 158816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mText = new ViewNodeText(); 158916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText; 159016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 159116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 159216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 159316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setText(CharSequence text) { 159416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNodeText t = getNodeText(); 1595a8fce3b29eff8ed452ee20a1938268b837a105adFelipe Leme t.mText = TextUtils.trimNoCopySpans(text); 159616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextSelectionStart = t.mTextSelectionEnd = -1; 159716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 159816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 159916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 160016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setText(CharSequence text, int selectionStart, int selectionEnd) { 160116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNodeText t = getNodeText(); 1602a8fce3b29eff8ed452ee20a1938268b837a105adFelipe Leme t.mText = TextUtils.trimNoCopySpans(text); 160316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextSelectionStart = selectionStart; 160416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextSelectionEnd = selectionEnd; 160516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 160616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 160716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 160816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setTextStyle(float size, int fgColor, int bgColor, int style) { 160916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNodeText t = getNodeText(); 161016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextColor = fgColor; 161116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextBackgroundColor = bgColor; 161216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextSize = size; 161316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn t.mTextStyle = style; 161416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 161516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 161616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 16176f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn public void setTextLines(int[] charOffsets, int[] baselines) { 16186f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn ViewNodeText t = getNodeText(); 16196f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn t.mLineCharOffsets = charOffsets; 16206f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn t.mLineBaselines = baselines; 16216f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn } 16226f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn 16236f0fdc4167ad906fc7409856e86cd0cc601c3b53Dianne Hackborn @Override 162416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setHint(CharSequence hint) { 162516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn getNodeText().mHint = hint != null ? hint.toString() : null; 162616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 162716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 162816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 162916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public CharSequence getText() { 163016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText != null ? mNode.mText.mText : null; 163116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 163216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 163316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 163416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextSelectionStart() { 163516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText != null ? mNode.mText.mTextSelectionStart : -1; 163616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 163716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 163816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 163916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getTextSelectionEnd() { 164016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText != null ? mNode.mText.mTextSelectionEnd : -1; 164116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 164216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 164316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 164416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public CharSequence getHint() { 164516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mText != null ? mNode.mText.mHint : null; 164616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 164716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 164816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 164916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public Bundle getExtras() { 165016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mNode.mExtras != null) { 165116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mExtras; 165216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 165316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mExtras = new Bundle(); 165416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mExtras; 165516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 165616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 165716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 165816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public boolean hasExtras() { 165916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mExtras != null; 166016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 166116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 166216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 166316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void setChildCount(int num) { 166416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mChildren = new ViewNode[num]; 166516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 166616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 166716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 166816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int addChildCount(int num) { 166916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mNode.mChildren == null) { 167016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn setChildCount(num); 167116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return 0; 167216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 167316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int start = mNode.mChildren.length; 167416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode[] newArray = new ViewNode[start + num]; 167516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn System.arraycopy(mNode.mChildren, 0, newArray, 0, start); 167616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mChildren = newArray; 167716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return start; 167816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 167916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 168016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 168116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getChildCount() { 168216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mNode.mChildren != null ? mNode.mChildren.length : 0; 168316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 168416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 1685f8a8174cd5bc8aff63befd6ca6d96d21e89260bdFelipe Leme @Override 1686f8a8174cd5bc8aff63befd6ca6d96d21e89260bdFelipe Leme public ViewStructure newChild(int index) { 168716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode node = new ViewNode(); 168816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mChildren[index] = node; 168933791fd54b0e2acd6e7c06517cf2f994fa3d4213Felipe Leme return new ViewNodeBuilder(mAssist, node, false); 169016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 169116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 1692f8a8174cd5bc8aff63befd6ca6d96d21e89260bdFelipe Leme @Override 1693f8a8174cd5bc8aff63befd6ca6d96d21e89260bdFelipe Leme public ViewStructure asyncNewChild(int index) { 169416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn synchronized (mAssist) { 169516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode node = new ViewNode(); 169616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mNode.mChildren[index] = node; 169733791fd54b0e2acd6e7c06517cf2f994fa3d4213Felipe Leme ViewNodeBuilder builder = new ViewNodeBuilder(mAssist, node, true); 169816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mAssist.mPendingAsyncChildren.add(builder); 169916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return builder; 170016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 170116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 170216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 170316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 170416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void asyncCommit() { 170516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn synchronized (mAssist) { 170616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (!mAsync) { 170716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn throw new IllegalStateException("Child " + this 17088ecf16d186fa8606571b75c01a21a528a7e55d23Dianne Hackborn + " was not created with ViewStructure.asyncNewChild"); 170916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 171016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (!mAssist.mPendingAsyncChildren.remove(this)) { 171116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn throw new IllegalStateException("Child " + this + " already committed"); 171216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 171316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mAssist.notifyAll(); 171416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 171516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 171616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 171716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 171816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public Rect getTempRect() { 171916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mAssist.mTmpRect; 172016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 172129a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme 172229a5b0d0f1cc7fd6cbfe97c816b8a687d9e438ccFelipe Leme @Override 1723e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme public void setAutofillId(@NonNull AutofillId id) { 1724e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme mNode.mAutofillId = id; 1725e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme } 1726e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme 1727e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme @Override 1728e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme public void setAutofillId(@NonNull AutofillId parentId, int virtualId) { 1729e4f30650ac2b4e7b1b2a8962a3618506aec1b81aFelipe Leme mNode.mAutofillId = new AutofillId(parentId, virtualId); 17306d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme } 17316d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme 17326d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme @Override 1733640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme public AutofillId getAutofillId() { 1734640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme return mNode.mAutofillId; 17358931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme } 17368931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme 17378931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme @Override 17388931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme public void setAutofillType(@View.AutofillType int type) { 17398931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme mNode.mAutofillType = type; 17406d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme } 17416d553874bed06280766ae24ea605f9bbde3f5a4aFelipe Leme 17420200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 174381192b40de3578368a38c9815d0af87565f99228Philip P. Moltmann public void setAutofillHints(@Nullable String[] hints) { 174481192b40de3578368a38c9815d0af87565f99228Philip P. Moltmann mNode.mAutofillHints = hints; 1745ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann } 1746ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann 1747ba6f46260232c04b7e5d75b1c38187e581dabdebPhilip P. Moltmann @Override 1748640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme public void setAutofillValue(AutofillValue value) { 1749640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme mNode.mAutofillValue = value; 17500200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 17510200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 1752d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme @Override 17537e4c205d8f7e6746ab6e0701e4d7776a2cdd6aa0Felipe Leme public void setAutofillOptions(CharSequence[] options) { 1754640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme mNode.mAutofillOptions = options; 1755d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme } 1756d09ccb8db6c541f2d349b923bf9b38f1081aaa8dFelipe Leme 175716aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme @Override 175816aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme public void setInputType(int inputType) { 175916aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme mNode.mInputType = inputType; 176016aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme } 176116aafc36ded4a118f86890261f8f87a6927dc547Felipe Leme 17620200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 1763c9a19b1b274af1fdd8b811c9ce2df994f7db47a4Felipe Leme public void setDataIsSensitive(boolean sensitive) { 1764c9a19b1b274af1fdd8b811c9ce2df994f7db47a4Felipe Leme mNode.mSanitized = !sensitive; 17650200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 1766c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme 1767c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme @Override 17684711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme public void setWebDomain(@Nullable String domain) { 17694711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme if (domain == null) { 17704711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme mNode.mWebDomain = null; 17714711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme return; 17724711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme } 17734711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme mNode.mWebDomain = Uri.parse(domain).getHost(); 1774c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 1775b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme 1776b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme @Override 1777b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme public void setLocaleList(LocaleList localeList) { 1778b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme mNode.mLocaleList = localeList; 1779b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 178025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 178125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 178225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public HtmlInfo.Builder newHtmlInfoBuilder(@NonNull String tagName) { 178325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return new HtmlInfoNodeBuilder(tagName); 178425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 178525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 178625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 178725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public void setHtmlInfo(@NonNull HtmlInfo htmlInfo) { 178825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mNode.mHtmlInfo = htmlInfo; 178925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 179025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 179125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 179225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private static final class HtmlInfoNode extends HtmlInfo implements Parcelable { 179325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private final String mTag; 179425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private final String[] mNames; 179525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private final String[] mValues; 179625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 179725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme // Not parcelable 179825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private ArrayList<Pair<String, String>> mAttributes; 179925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 180025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private HtmlInfoNode(HtmlInfoNodeBuilder builder) { 180125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mTag = builder.mTag; 180225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (builder.mNames == null) { 180325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mNames = null; 180425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mValues = null; 180525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } else { 180625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mNames = new String[builder.mNames.size()]; 180725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mValues = new String[builder.mValues.size()]; 180825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme builder.mNames.toArray(mNames); 180925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme builder.mValues.toArray(mValues); 181025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 181125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 181225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 181325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 181425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public String getTag() { 181525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return mTag; 181625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 181725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 181825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 181909a70628da3aa617cdabace129bf8dbe64bc19b3Felipe Leme public List<Pair<String, String>> getAttributes() { 182025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (mAttributes == null && mNames != null) { 182125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mAttributes = new ArrayList<>(mNames.length); 182225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme for (int i = 0; i < mNames.length; i++) { 182325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final Pair<String, String> pair = new Pair<>(mNames[i], mValues[i]); 182425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mAttributes.add(i, pair); 182525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 182625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 182725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return mAttributes; 182825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 182925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 183025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 183125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public int describeContents() { 183225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return 0; 183325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 183425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 183525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 183625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public void writeToParcel(Parcel parcel, int flags) { 183725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme parcel.writeString(mTag); 183825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme parcel.writeStringArray(mNames); 183925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme parcel.writeStringArray(mValues); 184025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 184125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 184225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @SuppressWarnings("hiding") 184325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public static final Creator<HtmlInfoNode> CREATOR = new Creator<HtmlInfoNode>() { 184425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 184525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public HtmlInfoNode createFromParcel(Parcel parcel) { 184625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme // Always go through the builder to ensure the data ingested by 184725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme // the system obeys the contract of the builder to avoid attacks 184825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme // using specially crafted parcels. 184925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final String tag = parcel.readString(); 185025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final HtmlInfoNodeBuilder builder = new HtmlInfoNodeBuilder(tag); 185125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final String[] names = parcel.readStringArray(); 185225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme final String[] values = parcel.readStringArray(); 185325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (names != null && values != null) { 185425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (names.length != values.length) { 185525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme Log.w(TAG, "HtmlInfo attributes mismatch: names=" + names.length 185625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme + ", values=" + values.length); 185725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } else { 185825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme for (int i = 0; i < names.length; i++) { 185925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme builder.addAttribute(names[i], values[i]); 186025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 186125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 186225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 186325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return builder.build(); 186425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 186525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 186625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 186725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public HtmlInfoNode[] newArray(int size) { 186825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return new HtmlInfoNode[size]; 186925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 187025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme }; 187125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 187225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 187325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private static final class HtmlInfoNodeBuilder extends HtmlInfo.Builder { 187425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private final String mTag; 187525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private ArrayList<String> mNames; 187625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme private ArrayList<String> mValues; 187725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 187825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme HtmlInfoNodeBuilder(String tag) { 187925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mTag = tag; 188025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 188125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 188225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 188325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public Builder addAttribute(String name, String value) { 188425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (mNames == null) { 188525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mNames = new ArrayList<>(); 188625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mValues = new ArrayList<>(); 188725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 188825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mNames.add(name); 188925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme mValues.add(value); 189025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return this; 189125bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 189225bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 189325bf787ffbc2c878683e824643941829e5b6967aFelipe Leme @Override 189425bf787ffbc2c878683e824643941829e5b6967aFelipe Leme public HtmlInfoNode build() { 189525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme return new HtmlInfoNode(this); 189625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 189769c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 189869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 189969c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn /** @hide */ 1900fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov public AssistStructure(Activity activity, boolean forAutoFill, int flags) { 190116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mHaveData = true; 190216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mActivityComponent = activity.getComponentName(); 19030aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme mFlags = flags; 190416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews( 190516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn activity.getActivityToken()); 190616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn for (int i=0; i<views.size(); i++) { 190716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewRootImpl root = views.get(i); 1908fd31f85d0c6f19138d06d565d2b30b59e241a960Svet Ganov mWindowNodes.add(new WindowNode(this, root, forAutoFill, flags)); 190916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 191016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 191116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 191216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public AssistStructure() { 191316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mHaveData = true; 191416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mActivityComponent = null; 19150aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme mFlags = 0; 191669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 191769c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 191816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** @hide */ 191916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public AssistStructure(Parcel in) { 1920858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani mIsHomeActivity = in.readInt() == 1; 192116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mReceiveChannel = in.readStrongBinder(); 192269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 192369c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 19240200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme /** 19250200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * Helper method used to sanitize the structure before it's written to a parcel. 19260200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * 1927640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * <p>Used just on autofill. 19280200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme * @hide 19290200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme */ 19300200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme public void sanitizeForParceling(boolean sanitize) { 19310200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme mSanitizeOnWrite = sanitize; 19320200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 19330200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 193416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** @hide */ 1935bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme public void dump(boolean showSensitive) { 19360200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme if (mActivityComponent == null) { 19370200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme Log.i(TAG, "dump(): calling ensureData() first"); 19380200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme ensureData(); 19390200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 194016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Activity: " + mActivityComponent.flattenToShortString()); 19410200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite); 19420aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme Log.i(TAG, "Flags: " + mFlags); 194316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int N = getWindowNodeCount(); 194416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn for (int i=0; i<N; i++) { 194516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn WindowNode node = getWindowNodeAt(i); 194616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Window #" + i + " [" + node.getLeft() + "," + node.getTop() 194716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + " " + node.getWidth() + "x" + node.getHeight() + "]" + " " + node.getTitle()); 1948bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme dump(" ", node.getRootViewNode(), showSensitive); 194916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 195016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 195116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 1952bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme void dump(String prefix, ViewNode node, boolean showSensitive) { 195316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + "View [" + node.getLeft() + "," + node.getTop() 195416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + " " + node.getWidth() + "x" + node.getHeight() + "]" + " " + node.getClassName()); 195516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int id = node.getId(); 195616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (id != 0) { 195716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn StringBuilder sb = new StringBuilder(); 195816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append(prefix); sb.append(" ID: #"); sb.append(Integer.toHexString(id)); 195916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String entry = node.getIdEntry(); 196016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (entry != null) { 196116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String type = node.getIdType(); 196216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String pkg = node.getIdPackage(); 196316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append(" "); sb.append(pkg); sb.append(":"); sb.append(type); 196416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append("/"); sb.append(entry); 196516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 196616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, sb.toString()); 196716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 196816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int scrollX = node.getScrollX(); 196916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn int scrollY = node.getScrollY(); 197016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (scrollX != 0 || scrollY != 0) { 197116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Scroll: " + scrollX + "," + scrollY); 197216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 197370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Matrix matrix = node.getTransformation(); 197470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (matrix != null) { 197570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Log.i(TAG, prefix + " Transformation: " + matrix); 197670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 197770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn float elevation = node.getElevation(); 197870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (elevation != 0) { 197970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Log.i(TAG, prefix + " Elevation: " + elevation); 198070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 198170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn float alpha = node.getAlpha(); 198270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn if (alpha != 0) { 198370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Log.i(TAG, prefix + " Alpha: " + elevation); 198470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn } 198516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn CharSequence contentDescription = node.getContentDescription(); 198616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (contentDescription != null) { 198716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Content description: " + contentDescription); 198816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 198916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn CharSequence text = node.getText(); 199016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (text != null) { 1991bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme final String safeText = node.isSanitized() || showSensitive ? text.toString() 1992bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme : "REDACTED[" + text.length() + " chars]"; 199316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Text (sel " + node.getTextSelectionStart() + "-" 1994bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme + node.getTextSelectionEnd() + "): " + safeText); 199516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Text size: " + node.getTextSize() + " , style: #" 199616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + node.getTextStyle()); 199716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Text color fg: #" + Integer.toHexString(node.getTextColor()) 199816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + ", bg: #" + Integer.toHexString(node.getTextBackgroundColor())); 1999bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme Log.i(TAG, prefix + " Input type: " + node.getInputType()); 200016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 20014711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme String webDomain = node.getWebDomain(); 20024711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme if (webDomain != null) { 20034711ed9f9f8c4a320c66f2a277817acfea127703Felipe Leme Log.i(TAG, prefix + " Web domain: " + webDomain); 2004c32410068dc23b1eee87bc370525a46ffc7a936dFelipe Leme } 200525bf787ffbc2c878683e824643941829e5b6967aFelipe Leme HtmlInfo htmlInfo = node.getHtmlInfo(); 200625bf787ffbc2c878683e824643941829e5b6967aFelipe Leme if (htmlInfo != null) { 200725bf787ffbc2c878683e824643941829e5b6967aFelipe Leme Log.i(TAG, prefix + " HtmlInfo: tag=" + htmlInfo.getTag() 200825bf787ffbc2c878683e824643941829e5b6967aFelipe Leme + ", attr="+ htmlInfo.getAttributes()); 200925bf787ffbc2c878683e824643941829e5b6967aFelipe Leme } 201025bf787ffbc2c878683e824643941829e5b6967aFelipe Leme 2011b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme LocaleList localeList = node.getLocaleList(); 2012b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme if (localeList != null) { 2013b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme Log.i(TAG, prefix + " LocaleList: " + localeList); 2014b4ca70184c7c7170b05d01aa2f908b3de9d14ab5Felipe Leme } 201516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String hint = node.getHint(); 201616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (hint != null) { 201716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Hint: " + hint); 201816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 201916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Bundle extras = node.getExtras(); 202016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (extras != null) { 202116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Extras: " + extras); 202216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 2023afb308d6519c56cf2b8001b33dade35e682ab241Dianne Hackborn if (node.isAssistBlocked()) { 2024afb308d6519c56cf2b8001b33dade35e682ab241Dianne Hackborn Log.i(TAG, prefix + " BLOCKED"); 2025afb308d6519c56cf2b8001b33dade35e682ab241Dianne Hackborn } 2026640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme AutofillId autofillId = node.getAutofillId(); 2027640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme if (autofillId == null) { 2028640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme Log.i(TAG, prefix + " NO autofill ID"); 20290200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } else { 2030640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme Log.i(TAG, prefix + "Autofill info: id= " + autofillId 20318931e303700a5adb6e013c2b5a6cec621eede968Felipe Leme + ", type=" + node.getAutofillType() 2032640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme + ", options=" + Arrays.toString(node.getAutofillOptions()) 203330e9b266aab920b7dbb6fb4784b3d58d3273b750Felipe Leme + ", hints=" + Arrays.toString(node.getAutofillHints()) 2034640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme + ", value=" + node.getAutofillValue() 20350200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme + ", sanitized=" + node.isSanitized()); 20360200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme } 20370200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme 203816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn final int NCHILDREN = node.getChildCount(); 203916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (NCHILDREN > 0) { 204016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, prefix + " Children:"); 204116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn String cprefix = prefix + " "; 204216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn for (int i=0; i<NCHILDREN; i++) { 204316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ViewNode cnode = node.getChildAt(i); 2044bc561eb06e0ac0f99f0a0589163bf8affc3516aeFelipe Leme dump(cprefix, cnode, showSensitive); 204516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 204616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 204716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 204816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 204916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 205016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return the activity this AssistStructure came from. 205116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 205216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public ComponentName getActivityComponent() { 205316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ensureData(); 205416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mActivityComponent; 205516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 205616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 20570aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme /** @hide */ 20580aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme public int getFlags() { 20590aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme return mFlags; 20600aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme } 20610aa4c5065d1495ec0b2c6fe15324569f31dcbdb1Felipe Leme 206216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 2063858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * Returns whether the activity associated with this AssistStructure was the home activity 206486687827f3936184d71d4d9b019b50661ce69ec7Amith Yamasani * (Launcher) at the time the assist data was acquired. 2065858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani * @return Whether the activity was the home activity. 206686687827f3936184d71d4d9b019b50661ce69ec7Amith Yamasani * @see android.content.Intent#CATEGORY_HOME 2067858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani */ 2068858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani public boolean isHomeActivity() { 2069858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani return mIsHomeActivity; 2070858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani } 2071858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani 2072858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani /** 207316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return the number of window contents that have been collected in this assist data. 207416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 207516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public int getWindowNodeCount() { 207616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ensureData(); 207716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mWindowNodes.size(); 207816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 207916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 208016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** 208116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * Return one of the windows in the assist data. 208216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn * @param index Which window to retrieve, may be 0 to {@link #getWindowNodeCount()}-1. 208316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn */ 208469c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public WindowNode getWindowNodeAt(int index) { 208516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ensureData(); 208616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return mWindowNodes.get(index); 208716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 208816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 208916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn /** @hide */ 209016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void ensureData() { 209116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mHaveData) { 209216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn return; 209316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 209416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn mHaveData = true; 2095782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn ParcelTransferReader reader = new ParcelTransferReader(mReceiveChannel); 2096782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn reader.go(); 209716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 209816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 2099782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn boolean waitForReady() { 210016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn boolean skipStructure = false; 210116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn synchronized (this) { 210216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn long endTime = SystemClock.uptimeMillis() + 5000; 210316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn long now; 210416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn while (mPendingAsyncChildren.size() > 0 && (now=SystemClock.uptimeMillis()) < endTime) { 210516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn try { 210616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn wait(endTime-now); 210716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } catch (InterruptedException e) { 210816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 210916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 211016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (mPendingAsyncChildren.size() > 0) { 211116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn // We waited too long, assume none of the assist structure is valid. 211270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn Log.w(TAG, "Skipping assist structure, waiting too long for async children (have " 211370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn + mPendingAsyncChildren.size() + " remaining"); 211416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn skipStructure = true; 211516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 211616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 2117782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn return !skipStructure; 211816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 211916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 2120782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn /** @hide */ 2121782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn public void clearSendChannel() { 2122782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn if (mSendChannel != null) { 2123782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mSendChannel.mAssistStructure = null; 212416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 212569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 212669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 21270200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 212869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public int describeContents() { 212969c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn return 0; 213069c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 213169c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 21320200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 213369c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public void writeToParcel(Parcel out, int flags) { 2134858f98d13e10afba6420daba0a42b2e056452e24Amith Yamasani out.writeInt(mIsHomeActivity ? 1 : 0); 213569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn if (mHaveData) { 213669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn // This object holds its data. We want to write a send channel that the 213769c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn // other side can use to retrieve that data. 213869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn if (mSendChannel == null) { 2139782d49826862cbdc9d020fc9d85f8a6f64675dcbDianne Hackborn mSendChannel = new SendChannel(this); 214069c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 214169c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn out.writeStrongBinder(mSendChannel); 214269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } else { 214369c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn // This object doesn't hold its data, so just propagate along its receive channel. 214469c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn out.writeStrongBinder(mReceiveChannel); 214569c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 214669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 214769c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 214869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public static final Parcelable.Creator<AssistStructure> CREATOR 214969c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn = new Parcelable.Creator<AssistStructure>() { 21500200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 215169c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public AssistStructure createFromParcel(Parcel in) { 215269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn return new AssistStructure(in); 215369c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 215469c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn 21550200d9ea1509089c0c03b7071aa271e3a9b35c11Felipe Leme @Override 215669c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn public AssistStructure[] newArray(int size) { 215769c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn return new AssistStructure[size]; 215869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn } 215969c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn }; 216069c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn} 2161