/* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch.observer; import android.annotation.NonNull; import android.annotation.Nullable; import java.util.Collections; import java.util.Objects; import java.util.Set; /** * Contains information about an individual change detected by an {@link ObserverCallback}. * *

This class reports information about document changes, that is, when documents were added, * updated or removed. * *

Changes are grouped by package, database, schema type and namespace. Each unique combination * of these items will generate a unique {@link DocumentChangeInfo}. * *

Notifications are only sent for documents whose schema type matches an observer's schema * filters (as determined by {@link ObserverSpec#getFilterSchemas}). * *

Note that document changes that happen during schema migration from calling {@link * android.app.appsearch.AppSearchSession#setSchema} are not reported via this class. Such changes * are reported through {@link SchemaChangeInfo}. */ public final class DocumentChangeInfo { private final String mPackageName; private final String mDatabase; private final String mNamespace; private final String mSchemaName; private final Set mChangedDocumentIds; /** * Constructs a new {@link DocumentChangeInfo}. * * @param packageName The package name of the app which owns the documents that changed. * @param database The database in which the documents that changed reside. * @param namespace The namespace in which the documents that changed reside. * @param schemaName The name of the schema type that contains the changed documents. * @param changedDocumentIds The set of document IDs that have been changed as part of this * notification. */ public DocumentChangeInfo( @NonNull String packageName, @NonNull String database, @NonNull String namespace, @NonNull String schemaName, @NonNull Set changedDocumentIds) { mPackageName = Objects.requireNonNull(packageName); mDatabase = Objects.requireNonNull(database); mNamespace = Objects.requireNonNull(namespace); mSchemaName = Objects.requireNonNull(schemaName); mChangedDocumentIds = Collections.unmodifiableSet(Objects.requireNonNull(changedDocumentIds)); } /** Returns the package name of the app which owns the documents that changed. */ @NonNull public String getPackageName() { return mPackageName; } /** Returns the database in which the documents that was changed reside. */ @NonNull public String getDatabaseName() { return mDatabase; } /** Returns the namespace of the documents that changed. */ @NonNull public String getNamespace() { return mNamespace; } /** Returns the name of the schema type that contains the changed documents. */ @NonNull public String getSchemaName() { return mSchemaName; } /** * Returns the set of document IDs that have been changed as part of this notification. * *

This will never be empty. */ @NonNull public Set getChangedDocumentIds() { return mChangedDocumentIds; } @Override public boolean equals(@Nullable Object o) { if (this == o) { return true; } if (!(o instanceof DocumentChangeInfo)) { return false; } DocumentChangeInfo that = (DocumentChangeInfo) o; return mPackageName.equals(that.mPackageName) && mDatabase.equals(that.mDatabase) && mNamespace.equals(that.mNamespace) && mSchemaName.equals(that.mSchemaName) && mChangedDocumentIds.equals(that.mChangedDocumentIds); } @Override public int hashCode() { return Objects.hash(mPackageName, mDatabase, mNamespace, mSchemaName, mChangedDocumentIds); } @NonNull @Override public String toString() { return "DocumentChangeInfo{" + "packageName='" + mPackageName + '\'' + ", database='" + mDatabase + '\'' + ", namespace='" + mNamespace + '\'' + ", schemaName='" + mSchemaName + '\'' + ", changedDocumentIds='" + mChangedDocumentIds + '\'' + '}'; } }