diff options
author | 2025-02-14 19:57:14 +0000 | |
---|---|---|
committer | 2025-02-27 16:51:14 +0000 | |
commit | 08b441c8cc19e047ae2dbb9a890aa1d21b897796 (patch) | |
tree | 3823e0dc606f7e0f09478c9167cbc7e5cecd0c91 /src | |
parent | f9a154805de4c5e07a02f211e2ac419ace0910d4 (diff) |
Propagate cancellation signal for both media sets and media sets
content.
Also update corresponding tests
Test: verified manually, all corresponding tests updated
Bug: 384475145
Flag: com.android.providers.media.flags.enable_photopicker_search
Change-Id: I1056ee98587cf736742dba654e8a450cdb64ab6c
Diffstat (limited to 'src')
4 files changed, 26 insertions, 11 deletions
diff --git a/src/com/android/providers/media/photopicker/sync/MediaInMediaSetsSyncWorker.java b/src/com/android/providers/media/photopicker/sync/MediaInMediaSetsSyncWorker.java index fa10d730e..146df70ae 100644 --- a/src/com/android/providers/media/photopicker/sync/MediaInMediaSetsSyncWorker.java +++ b/src/com/android/providers/media/photopicker/sync/MediaInMediaSetsSyncWorker.java @@ -29,6 +29,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.OperationCanceledException; import android.provider.CloudMediaProviderContract; import android.util.Log; import android.util.Pair; @@ -135,7 +136,7 @@ public class MediaInMediaSetsSyncWorker extends Worker { int syncSource, @NonNull String mediaSetId, @NonNull Long mediaSetPickerId, @NonNull String mediaSetAuthority, @Nullable String[] mimeTypes) - throws RequestObsoleteException, IllegalArgumentException { + throws RequestObsoleteException, IllegalArgumentException, OperationCanceledException { final PickerSearchProviderClient searchClient = PickerSearchProviderClient.create(mContext, mediaSetAuthority); @@ -214,7 +215,7 @@ public class MediaInMediaSetsSyncWorker extends Worker { private Cursor fetchMediaInMediaSetFromCmp( @NonNull PickerSearchProviderClient pickerSearchProviderClient, @NonNull String mediaSetId, @Nullable String resumePageToken, - @Nullable String[] mimeTypes) { + @Nullable String[] mimeTypes) throws OperationCanceledException { final Cursor cursor = pickerSearchProviderClient.fetchMediasInMediaSetFromCmp( mediaSetId, resumePageToken, @@ -301,4 +302,10 @@ public class MediaInMediaSetsSyncWorker extends Worker { private SQLiteDatabase getDatabase() { return PickerSyncController.getInstanceOrThrow().getDbFacade().getDatabase(); } + + @Override + public void onStopped() { + // Mark the request as cancelled so that the cancellation can be propagated to subtasks. + mCancellationSignal.cancel(); + } } diff --git a/src/com/android/providers/media/photopicker/sync/MediaSetsSyncWorker.java b/src/com/android/providers/media/photopicker/sync/MediaSetsSyncWorker.java index 8e151141a..784d23b60 100644 --- a/src/com/android/providers/media/photopicker/sync/MediaSetsSyncWorker.java +++ b/src/com/android/providers/media/photopicker/sync/MediaSetsSyncWorker.java @@ -29,6 +29,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.OperationCanceledException; import android.provider.CloudMediaProviderContract; import android.util.Log; @@ -124,7 +125,7 @@ public class MediaSetsSyncWorker extends Worker { private void syncMediaSets( int syncSource, @NonNull String categoryId, @NonNull String categoryAuthority, @Nullable String[] mimeTypes) - throws RequestObsoleteException, IllegalArgumentException { + throws RequestObsoleteException, IllegalArgumentException, OperationCanceledException { List<String> mimeTypesList = mimeTypes == null || mimeTypes.length == 0 ? null : Arrays.asList(mimeTypes); @@ -183,7 +184,7 @@ public class MediaSetsSyncWorker extends Worker { String categoryId, String nextPageToken, String[] mimeTypes, - CancellationSignal cancellationSignal) { + CancellationSignal cancellationSignal) throws OperationCanceledException { final Cursor cursor = client.fetchMediaSetsFromCmp( categoryId, nextPageToken, PAGE_SIZE, mimeTypes, cancellationSignal); @@ -239,4 +240,10 @@ public class MediaSetsSyncWorker extends Worker { private SQLiteDatabase getDatabase() { return PickerSyncController.getInstanceOrThrow().getDbFacade().getDatabase(); } + + @Override + public void onStopped() { + // Mark the request as cancelled so that the cancellation can be propagated to subtasks. + mCancellationSignal.cancel(); + } } diff --git a/src/com/android/providers/media/photopicker/sync/PickerSearchProviderClient.java b/src/com/android/providers/media/photopicker/sync/PickerSearchProviderClient.java index 76ac99bfd..4b1e8963b 100644 --- a/src/com/android/providers/media/photopicker/sync/PickerSearchProviderClient.java +++ b/src/com/android/providers/media/photopicker/sync/PickerSearchProviderClient.java @@ -27,6 +27,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.OperationCanceledException; import android.provider.CloudMediaProviderContract; import android.provider.CloudMediaProviderContract.SortOrder; import android.util.Log; @@ -152,7 +153,7 @@ public class PickerSearchProviderClient { final Cursor cursor = mContext.getContentResolver().query( getCloudUriFromPath(CloudMediaProviderContract.URI_PATH_MEDIA_CATEGORY), - null, queryArgs, null); + null, queryArgs, cancellationSignal); if (cursor == null) { Log.d(TAG, "Categories response from the CMP is null."); @@ -170,7 +171,8 @@ public class PickerSearchProviderClient { @Nullable public Cursor fetchMediaSetsFromCmp( @NonNull String mediaCategoryId, @Nullable String nextPageToken, int pageSize, - @Nullable String[] mimeTypes, @Nullable CancellationSignal cancellationSignal) { + @Nullable String[] mimeTypes, @Nullable CancellationSignal cancellationSignal) + throws OperationCanceledException { final Bundle queryArgs = new Bundle(); queryArgs.putString(CloudMediaProviderContract.KEY_MEDIA_CATEGORY_ID, requireNonNull(mediaCategoryId)); @@ -182,7 +184,7 @@ public class PickerSearchProviderClient { final Cursor cursor = mContext.getContentResolver().query( getCloudUriFromPath(CloudMediaProviderContract.URI_PATH_MEDIA_SET), - null, queryArgs, null); + null, queryArgs, cancellationSignal); if (cursor == null) { Log.d(TAG, "Media sets response from the CMP is null."); @@ -204,7 +206,7 @@ public class PickerSearchProviderClient { int pageSize, int sortOrder, @Nullable String[] mimeTypes, - @Nullable CancellationSignal cancellationSignal) { + @Nullable CancellationSignal cancellationSignal) throws OperationCanceledException { final Bundle queryArgs = new Bundle(); queryArgs.putString(CloudMediaProviderContract.KEY_MEDIA_SET_ID, requireNonNull(mediaSetId)); @@ -217,7 +219,7 @@ public class PickerSearchProviderClient { final Cursor cursor = mContext.getContentResolver().query( getCloudUriFromPath(CloudMediaProviderContract.URI_PATH_MEDIA_IN_MEDIA_SET), - null, queryArgs, null); + null, queryArgs, cancellationSignal); if (cursor == null) { Log.d(TAG, "Media set contents response from the CMP is null."); diff --git a/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtil.java b/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtil.java index 0c43445fe..28c3ebbf4 100644 --- a/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtil.java +++ b/src/com/android/providers/media/photopicker/v2/sqlite/MediaInMediaSetsDatabaseUtil.java @@ -61,8 +61,7 @@ public class MediaInMediaSetsDatabaseUtil { */ public static int cacheMediaOfMediaSet( @NonNull SQLiteDatabase database, - @Nullable List<ContentValues> mediaListToInsert, - @NonNull String authority) { + @Nullable List<ContentValues> mediaListToInsert, @NonNull String authority) { requireNonNull(database); requireNonNull(authority); |