1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.app.appsearch.aidl; 18 19 import android.annotation.ElapsedRealtimeLong; 20 import android.annotation.NonNull; 21 import android.app.appsearch.safeparcel.AbstractSafeParcelable; 22 import android.app.appsearch.safeparcel.SafeParcelable; 23 import android.app.appsearch.stats.SchemaMigrationStats; 24 import android.os.Parcel; 25 import android.os.ParcelFileDescriptor; 26 import android.os.Parcelable; 27 import android.os.UserHandle; 28 29 import java.util.Objects; 30 31 /** 32 * Encapsulates a request to make a binder call to insert documents from the given file into the 33 * index. 34 * 35 * @hide 36 */ 37 @SafeParcelable.Class(creator = "PutDocumentsFromFileAidlRequestCreator") 38 public class PutDocumentsFromFileAidlRequest extends AbstractSafeParcelable { 39 @NonNull 40 public static final Parcelable.Creator<PutDocumentsFromFileAidlRequest> CREATOR = 41 new PutDocumentsFromFileAidlRequestCreator(); 42 43 @NonNull 44 @Field(id = 1, getter = "getCallerAttributionSource") 45 private final AppSearchAttributionSource mCallerAttributionSource; 46 47 @NonNull 48 @Field(id = 2, getter = "getDatabaseName") 49 private final String mDatabaseName; 50 51 @NonNull 52 @Field(id = 3, getter = "getParcelFileDescriptor") 53 private final ParcelFileDescriptor mParcelFileDescriptor; 54 55 @NonNull 56 @Field(id = 4, getter = "getUserHandle") 57 private final UserHandle mUserHandle; 58 59 @NonNull 60 @Field(id = 5, getter = "getSchemaMigrationStats") 61 private final SchemaMigrationStats mSchemaMigrationStats; 62 63 @Field(id = 6, getter = "getTotalLatencyStartTimeMillis") 64 @ElapsedRealtimeLong 65 private final long mTotalLatencyStartTimeMillis; 66 67 @Field(id = 7, getter = "getBinderCallStartTimeMillis") 68 @ElapsedRealtimeLong 69 private final long mBinderCallStartTimeMillis; 70 71 /** 72 * Inserts documents from the given file into the index. 73 * 74 * <p>This method does not dispatch change notifications for the individual documents being 75 * inserted, so it is only appropriate to use for batch upload situations where a broader change 76 * notification will indicate what has changed, like schema migration. 77 * 78 * @param callerAttributionSource The permission identity of the package that owns this 79 * document. 80 * @param databaseName The name of the database where this document lives. 81 * @param parcelFileDescriptor The ParcelFileDescriptor where documents should be read from. 82 * @param userHandle Handle of the calling user. 83 * @param schemaMigrationStats the Parcelable contains SchemaMigrationStats information. 84 * @param totalLatencyStartTimeMillis start timestamp to calculate total migration latency in 85 * Millis 86 * @param binderCallStartTimeMillis start timestamp of binder call in Millis 87 */ 88 @Constructor PutDocumentsFromFileAidlRequest( @aramid = 1) @onNull AppSearchAttributionSource callerAttributionSource, @Param(id = 2) @NonNull String databaseName, @Param(id = 3) @NonNull ParcelFileDescriptor parcelFileDescriptor, @Param(id = 4) @NonNull UserHandle userHandle, @Param(id = 5) @NonNull SchemaMigrationStats schemaMigrationStats, @Param(id = 6) @ElapsedRealtimeLong long totalLatencyStartTimeMillis, @Param(id = 7) @ElapsedRealtimeLong long binderCallStartTimeMillis)89 public PutDocumentsFromFileAidlRequest( 90 @Param(id = 1) @NonNull AppSearchAttributionSource callerAttributionSource, 91 @Param(id = 2) @NonNull String databaseName, 92 @Param(id = 3) @NonNull ParcelFileDescriptor parcelFileDescriptor, 93 @Param(id = 4) @NonNull UserHandle userHandle, 94 @Param(id = 5) @NonNull SchemaMigrationStats schemaMigrationStats, 95 @Param(id = 6) @ElapsedRealtimeLong long totalLatencyStartTimeMillis, 96 @Param(id = 7) @ElapsedRealtimeLong long binderCallStartTimeMillis) { 97 mCallerAttributionSource = Objects.requireNonNull(callerAttributionSource); 98 mDatabaseName = Objects.requireNonNull(databaseName); 99 mParcelFileDescriptor = Objects.requireNonNull(parcelFileDescriptor); 100 mUserHandle = Objects.requireNonNull(userHandle); 101 mSchemaMigrationStats = Objects.requireNonNull(schemaMigrationStats); 102 mTotalLatencyStartTimeMillis = totalLatencyStartTimeMillis; 103 mBinderCallStartTimeMillis = binderCallStartTimeMillis; 104 } 105 106 @NonNull getCallerAttributionSource()107 public AppSearchAttributionSource getCallerAttributionSource() { 108 return mCallerAttributionSource; 109 } 110 111 @NonNull getDatabaseName()112 public String getDatabaseName() { 113 return mDatabaseName; 114 } 115 116 @NonNull getParcelFileDescriptor()117 public ParcelFileDescriptor getParcelFileDescriptor() { 118 return mParcelFileDescriptor; 119 } 120 121 @NonNull getUserHandle()122 public UserHandle getUserHandle() { 123 return mUserHandle; 124 } 125 126 @NonNull getSchemaMigrationStats()127 public SchemaMigrationStats getSchemaMigrationStats() { 128 return mSchemaMigrationStats; 129 } 130 getTotalLatencyStartTimeMillis()131 public long getTotalLatencyStartTimeMillis() { 132 return mTotalLatencyStartTimeMillis; 133 } 134 getBinderCallStartTimeMillis()135 public long getBinderCallStartTimeMillis() { 136 return mBinderCallStartTimeMillis; 137 } 138 139 @Override writeToParcel(@onNull Parcel dest, int flags)140 public void writeToParcel(@NonNull Parcel dest, int flags) { 141 PutDocumentsFromFileAidlRequestCreator.writeToParcel(this, dest, flags); 142 } 143 } 144