diff options
4 files changed, 73 insertions, 2 deletions
diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java index 0f6468a62794..00312aec1029 100644 --- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java +++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java @@ -641,8 +641,28 @@ public final class AppSearchSession implements Closeable { Objects.requireNonNull(executor); Objects.requireNonNull(callback); Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed"); - // TODO(b/182909475): Implement getStorageInfo - throw new UnsupportedOperationException(); + try { + mService.getStorageInfo( + mPackageName, + mDatabaseName, + mUserId, + new IAppSearchResultCallback.Stub() { + public void onResult(AppSearchResult result) { + executor.execute(() -> { + if (result.isSuccess()) { + Bundle responseBundle = (Bundle) result.getResultValue(); + StorageInfo response = + new StorageInfo(responseBundle); + callback.accept(AppSearchResult.newSuccessfulResult(response)); + } else { + callback.accept(result); + } + }); + } + }); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** diff --git a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl index 48c397f324ec..a8ac27c11089 100644 --- a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl +++ b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl @@ -307,6 +307,22 @@ interface IAppSearchManager { in IAppSearchResultCallback callback); /** + * Gets the storage info. + * + * @param packageName The name of the package to get the storage info for. + * @param databaseName The databaseName to get the storage info for. + * @param userId Id of the calling user + * @param callback {@link IAppSearchResultCallback#onResult} will be called with an + * {@link AppSearchResult}<{@link Bundle}>, where the value is a + * {@link StorageInfo}. + */ + void getStorageInfo( + in String packageName, + in String databaseName, + in int userId, + in IAppSearchResultCallback callback); + + /** * Persists all update/delete requests to the disk. * * @param userId Id of the calling user diff --git a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java index 91ed6cd4a638..991dda7cacd2 100644 --- a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java +++ b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java @@ -33,6 +33,7 @@ import android.app.appsearch.PackageIdentifier; import android.app.appsearch.SearchResultPage; import android.app.appsearch.SearchSpec; import android.app.appsearch.SetSchemaResponse; +import android.app.appsearch.StorageInfo; import android.content.Context; import android.content.pm.PackageManagerInternal; import android.os.Binder; @@ -610,6 +611,34 @@ public class AppSearchManagerService extends SystemService { } @Override + public void getStorageInfo( + @NonNull String packageName, + @NonNull String databaseName, + @UserIdInt int userId, + @NonNull IAppSearchResultCallback callback) { + Preconditions.checkNotNull(packageName); + Preconditions.checkNotNull(databaseName); + Preconditions.checkNotNull(callback); + int callingUid = Binder.getCallingUid(); + int callingUserId = handleIncomingUser(userId, callingUid); + final long callingIdentity = Binder.clearCallingIdentity(); + try { + verifyUserUnlocked(callingUserId); + verifyCallingPackage(callingUid, packageName); + AppSearchImpl impl = + mImplInstanceManager.getAppSearchImpl(callingUserId); + StorageInfo storageInfo = impl.getStorageInfoForDatabase(packageName, databaseName); + Bundle storageInfoBundle = storageInfo.getBundle(); + invokeCallbackOnResult( + callback, AppSearchResult.newSuccessfulResult(storageInfoBundle)); + } catch (Throwable t) { + invokeCallbackOnError(callback, t); + } finally { + Binder.restoreCallingIdentity(callingIdentity); + } + } + + @Override public void persistToDisk(@UserIdInt int userId) { int callingUid = Binder.getCallingUidOrThrow(); int callingUserId = handleIncomingUser(userId, callingUid); diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 02b8dddae7c1..6e1e6ffe53b2 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -848,6 +848,12 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { } @Override + public void getStorageInfo(String packageName, String databaseName, int userId, + IAppSearchResultCallback callback) throws RemoteException { + ignore(callback); + } + + @Override public void persistToDisk(int userId) throws RemoteException { } |