diff --git a/apex/appsearch/framework/api/current.txt b/apex/appsearch/framework/api/current.txt index 9fa4b8e5a4e7c..f9ff9dd5fd5b7 100644 --- a/apex/appsearch/framework/api/current.txt +++ b/apex/appsearch/framework/api/current.txt @@ -80,7 +80,8 @@ package android.app.appsearch { method @NonNull public android.app.appsearch.AppSearchSchema.PropertyConfig.Builder setTokenizerType(int); } - public final class AppSearchSession { + public final class AppSearchSession implements java.io.Closeable { + method public void close(); method public void getByUri(@NonNull android.app.appsearch.GetByUriRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback); method public void getSchema(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer>>); method public void putDocuments(@NonNull android.app.appsearch.PutDocumentsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback); diff --git a/apex/appsearch/framework/api/system-current.txt b/apex/appsearch/framework/api/system-current.txt index 73a4a196b90ac..56b7ffd353853 100644 --- a/apex/appsearch/framework/api/system-current.txt +++ b/apex/appsearch/framework/api/system-current.txt @@ -9,7 +9,8 @@ package android.app.appsearch { method public static void initialize(); } - public class GlobalSearchSession { + public class GlobalSearchSession implements java.io.Closeable { + method public void close(); method @NonNull public android.app.appsearch.SearchResults query(@NonNull String, @NonNull android.app.appsearch.SearchSpec, @NonNull java.util.concurrent.Executor); } diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java index d4872e8151348..042757797dce4 100644 --- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java +++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java @@ -28,6 +28,7 @@ import android.util.Log; import com.android.internal.util.Preconditions; +import java.io.Closeable; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +43,7 @@ import java.util.function.Consumer; * * This class is thread safe. */ -public final class AppSearchSession { +public final class AppSearchSession implements Closeable { private static final String TAG = "AppSearchSession"; private final String mDatabaseName; @UserIdInt @@ -490,11 +491,10 @@ public final class AppSearchSession { } /** - * Closes the SearchSessionImpl to persists all update/delete requests to the disk. - * - * @hide + * Closes the {@link AppSearchSession} to persist all schema and document updates, additions, + * and deletes to disk. */ - // TODO(b/175637134) when unhide it, implement Closeable and remove this method. + @Override public void close() { if (mIsMutated && !mIsClosed) { try { diff --git a/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java b/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java index 95f7d796d007a..9e3461675031f 100644 --- a/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java +++ b/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java @@ -23,6 +23,9 @@ import android.annotation.SystemApi; import android.annotation.UserIdInt; import android.os.RemoteException; +import com.android.internal.util.Preconditions; + +import java.io.Closeable; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -34,11 +37,12 @@ import java.util.function.Consumer; * @hide */ @SystemApi -public class GlobalSearchSession { +public class GlobalSearchSession implements Closeable { private final IAppSearchManager mService; @UserIdInt private final int mUserId; + private boolean mIsClosed = false; static void createGlobalSearchSession( @NonNull IAppSearchManager service, @@ -129,7 +133,14 @@ public class GlobalSearchSession { Objects.requireNonNull(queryExpression); Objects.requireNonNull(searchSpec); Objects.requireNonNull(executor); + Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed"); return new SearchResults(mService, /*databaseName=*/null, queryExpression, searchSpec, mUserId, executor); } + + /** Closes the {@link GlobalSearchSession}. */ + @Override + public void close() { + mIsClosed = true; + } }