diff options
author | 2024-10-09 05:39:39 +0000 | |
---|---|---|
committer | 2024-10-09 05:39:39 +0000 | |
commit | d0c066eeeb980606277f9e5ad3e357bc97d312ef (patch) | |
tree | 4b54433d2a3b66667feaeaab4ec9fc9696dcc2d5 /services/appfunctions/java | |
parent | 19cb1d7862db7b426554dd55b84cd4f4d205da38 (diff) |
Close the SearchResults object when there are no more results.
Change-Id: I1d6d5172cf3fc432368b847039eb95958bc585bd
Flag: android.app.appfunctions.flags.enable_app_function_manager
Test: CTS
Bug: 357551503
Diffstat (limited to 'services/appfunctions/java')
4 files changed, 38 insertions, 24 deletions
diff --git a/services/appfunctions/java/com/android/server/appfunctions/AppFunctionDumpHelper.java b/services/appfunctions/java/com/android/server/appfunctions/AppFunctionDumpHelper.java index 9fc413f6224b..a832545475bf 100644 --- a/services/appfunctions/java/com/android/server/appfunctions/AppFunctionDumpHelper.java +++ b/services/appfunctions/java/com/android/server/appfunctions/AppFunctionDumpHelper.java @@ -84,15 +84,17 @@ public final class AppFunctionDumpHelper { new FutureGlobalSearchSession(appSearchManager, Runnable::run)) { pw.println(); - FutureSearchResults futureSearchResults = - searchSession.search("", buildAppFunctionMetadataSearchSpec()).get(); - List<SearchResult> searchResultsList; - do { - searchResultsList = futureSearchResults.getNextPage().get(); - for (SearchResult searchResult : searchResultsList) { - dumpAppFunctionMetadata(pw, searchResult); - } - } while (!searchResultsList.isEmpty()); + try (FutureSearchResults futureSearchResults = + searchSession.search("", buildAppFunctionMetadataSearchSpec()).get(); ) { + List<SearchResult> searchResultsList; + do { + searchResultsList = futureSearchResults.getNextPage().get(); + for (SearchResult searchResult : searchResultsList) { + dumpAppFunctionMetadata(pw, searchResult); + } + } while (!searchResultsList.isEmpty()); + } + } catch (Exception e) { pw.println("Failed to dump AppFunction state: " + e); } diff --git a/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResults.java b/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResults.java index 45cbdb4021e5..c38ff143178f 100644 --- a/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResults.java +++ b/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResults.java @@ -24,11 +24,12 @@ import android.app.appsearch.SearchResults; import com.android.internal.infra.AndroidFuture; +import java.io.Closeable; import java.io.IOException; import java.util.List; /** A future API wrapper of {@link android.app.appsearch.SearchResults}. */ -public interface FutureSearchResults { +public interface FutureSearchResults extends Closeable { /** Converts a failed app search result codes into an exception. */ @NonNull @@ -52,4 +53,7 @@ public interface FutureSearchResults { * there are no more results. */ AndroidFuture<List<SearchResult>> getNextPage(); + + @Override + void close(); } diff --git a/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResultsImpl.java b/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResultsImpl.java index c3be342043ba..c8bc538f7226 100644 --- a/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResultsImpl.java +++ b/services/appfunctions/java/com/android/server/appfunctions/FutureSearchResultsImpl.java @@ -54,4 +54,9 @@ public class FutureSearchResultsImpl implements FutureSearchResults { } }); } + + @Override + public void close() { + mSearchResults.close(); + } } diff --git a/services/appfunctions/java/com/android/server/appfunctions/MetadataSyncAdapter.java b/services/appfunctions/java/com/android/server/appfunctions/MetadataSyncAdapter.java index bbf6c0beb163..96be76975e9d 100644 --- a/services/appfunctions/java/com/android/server/appfunctions/MetadataSyncAdapter.java +++ b/services/appfunctions/java/com/android/server/appfunctions/MetadataSyncAdapter.java @@ -420,26 +420,29 @@ public class MetadataSyncAdapter { Objects.requireNonNull(propertyPackageName); ArrayMap<String, ArraySet<String>> packageToFunctionIds = new ArrayMap<>(); - FutureSearchResults futureSearchResults = + try (FutureSearchResults futureSearchResults = searchSession .search( "", buildMetadataSearchSpec( schemaType, propertyFunctionId, propertyPackageName)) - .get(); - List<SearchResult> searchResultsList = futureSearchResults.getNextPage().get(); - // TODO(b/357551503): This could be expensive if we have more functions - while (!searchResultsList.isEmpty()) { - for (SearchResult searchResult : searchResultsList) { - String packageName = - searchResult.getGenericDocument().getPropertyString(propertyPackageName); - String functionId = - searchResult.getGenericDocument().getPropertyString(propertyFunctionId); - packageToFunctionIds - .computeIfAbsent(packageName, k -> new ArraySet<>()) - .add(functionId); + .get(); ) { + List<SearchResult> searchResultsList = futureSearchResults.getNextPage().get(); + // TODO(b/357551503): This could be expensive if we have more functions + while (!searchResultsList.isEmpty()) { + for (SearchResult searchResult : searchResultsList) { + String packageName = + searchResult + .getGenericDocument() + .getPropertyString(propertyPackageName); + String functionId = + searchResult.getGenericDocument().getPropertyString(propertyFunctionId); + packageToFunctionIds + .computeIfAbsent(packageName, k -> new ArraySet<>()) + .add(functionId); + } + searchResultsList = futureSearchResults.getNextPage().get(); } - searchResultsList = futureSearchResults.getNextPage().get(); } return packageToFunctionIds; } |