diff options
Diffstat (limited to 'java/src')
8 files changed, 32 insertions, 36 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 3a11bee2..707c64b7 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -303,7 +303,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements new ViewModelProvider(this, createPreviewViewModelFactory()) .get(BasePreviewViewModel.class); mChooserContentPreviewUi = new ChooserContentPreviewUi( - getLifecycle(), + getCoroutineScope(getLifecycle()), previewViewModel.createOrReuseProvider(mChooserRequest), mChooserRequest.getTargetIntent(), previewViewModel.createOrReuseImageLoader(), diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index 7226ae4a..a015147d 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -16,8 +16,6 @@ package com.android.intentresolver.contentpreview; -import static androidx.lifecycle.LifecycleKt.getCoroutineScope; - import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_FILE; import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_IMAGE; import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_TEXT; @@ -33,7 +31,6 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; -import androidx.lifecycle.Lifecycle; import com.android.intentresolver.widget.ActionRow; import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback; @@ -41,6 +38,8 @@ import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatu import java.util.List; import java.util.function.Consumer; +import kotlinx.coroutines.CoroutineScope; + /** * Collection of helpers for building the content preview UI displayed in * {@link com.android.intentresolver.ChooserActivity}. @@ -48,7 +47,7 @@ import java.util.function.Consumer; */ public final class ChooserContentPreviewUi { - private final Lifecycle mLifecycle; + private final CoroutineScope mScope; /** * Delegate to build the default system action buttons to display in the preview layout, if/when @@ -93,14 +92,14 @@ public final class ChooserContentPreviewUi { final ContentPreviewUi mContentPreviewUi; public ChooserContentPreviewUi( - Lifecycle lifecycle, + CoroutineScope scope, PreviewDataProvider previewData, Intent targetIntent, ImageLoader imageLoader, ActionFactory actionFactory, TransitionElementStatusCallback transitionElementStatusCallback, HeadlineGenerator headlineGenerator) { - mLifecycle = lifecycle; + mScope = scope; mContentPreviewUi = createContentPreview( previewData, targetIntent, @@ -126,7 +125,7 @@ public final class ChooserContentPreviewUi { int previewType = previewData.getPreviewType(); if (previewType == CONTENT_PREVIEW_TEXT) { return createTextPreview( - mLifecycle, + mScope, targetIntent, actionFactory, imageLoader, @@ -138,8 +137,7 @@ public final class ChooserContentPreviewUi { actionFactory, headlineGenerator); if (previewData.getUriCount() > 0) { - previewData.getFirstFileName( - mLifecycle, fileContentPreviewUi::setFirstFileName); + previewData.getFirstFileName(mScope, fileContentPreviewUi::setFirstFileName); } return fileContentPreviewUi; } @@ -149,7 +147,7 @@ public final class ChooserContentPreviewUi { if (!TextUtils.isEmpty(text)) { FilesPlusTextContentPreviewUi previewUi = new FilesPlusTextContentPreviewUi( - mLifecycle, + mScope, isSingleImageShare, previewData.getUriCount(), targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT), @@ -160,7 +158,7 @@ public final class ChooserContentPreviewUi { headlineGenerator); if (previewData.getUriCount() > 0) { JavaFlowHelper.collectToList( - getCoroutineScope(mLifecycle), + mScope, previewData.getImagePreviewFileInfoFlow(), previewUi::updatePreviewMetadata); } @@ -168,7 +166,7 @@ public final class ChooserContentPreviewUi { } return new UnifiedContentPreviewUi( - getCoroutineScope(mLifecycle), + mScope, isSingleImageShare, targetIntent.getType(), actionFactory, @@ -198,7 +196,7 @@ public final class ChooserContentPreviewUi { } private static TextContentPreviewUi createTextPreview( - Lifecycle lifecycle, + CoroutineScope scope, Intent targetIntent, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, @@ -214,7 +212,7 @@ public final class ChooserContentPreviewUi { } } return new TextContentPreviewUi( - lifecycle, + scope, sharingText, previewTitle, previewThumbnail, diff --git a/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java index 1f84b348..78fc6586 100644 --- a/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java @@ -31,7 +31,6 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.lifecycle.Lifecycle; import com.android.intentresolver.R; import com.android.intentresolver.widget.ActionRow; @@ -41,6 +40,8 @@ import java.util.HashMap; import java.util.List; import java.util.function.Consumer; +import kotlinx.coroutines.CoroutineScope; + /** * FilesPlusTextContentPreviewUi is shown when the user is sending 1 or more files along with * non-empty EXTRA_TEXT. The text can be toggled with a checkbox. If a single image file is being @@ -48,7 +49,7 @@ import java.util.function.Consumer; * file content). */ class FilesPlusTextContentPreviewUi extends ContentPreviewUi { - private final Lifecycle mLifecycle; + private final CoroutineScope mScope; @Nullable private final String mIntentMimeType; private final CharSequence mText; @@ -69,7 +70,7 @@ class FilesPlusTextContentPreviewUi extends ContentPreviewUi { private static final boolean SHOW_TOGGLE_CHECKMARK = false; FilesPlusTextContentPreviewUi( - Lifecycle lifecycle, + CoroutineScope scope, boolean isSingleImage, int fileCount, CharSequence text, @@ -82,7 +83,7 @@ class FilesPlusTextContentPreviewUi extends ContentPreviewUi { throw new IllegalArgumentException( "fileCount = " + fileCount + " and isSingleImage = true"); } - mLifecycle = lifecycle; + mScope = scope; mIntentMimeType = intentMimeType; mFileCount = fileCount; mIsSingleImage = isSingleImage; @@ -166,7 +167,7 @@ class FilesPlusTextContentPreviewUi extends ContentPreviewUi { ImageView imagePreview = mContentPreviewView.requireViewById(R.id.image_view); if (mIsSingleImage && mFirstFilePreviewUri != null) { mImageLoader.loadImage( - mLifecycle, + mScope, mFirstFilePreviewUri, bitmap -> { if (bitmap == null) { diff --git a/java/src/com/android/intentresolver/contentpreview/ImageLoader.kt b/java/src/com/android/intentresolver/contentpreview/ImageLoader.kt index 8d0fb84b..629651a3 100644 --- a/java/src/com/android/intentresolver/contentpreview/ImageLoader.kt +++ b/java/src/com/android/intentresolver/contentpreview/ImageLoader.kt @@ -18,8 +18,8 @@ package com.android.intentresolver.contentpreview import android.graphics.Bitmap import android.net.Uri -import androidx.lifecycle.Lifecycle import java.util.function.Consumer +import kotlinx.coroutines.CoroutineScope /** A content preview image loader. */ interface ImageLoader : suspend (Uri) -> Bitmap?, suspend (Uri, Boolean) -> Bitmap? { @@ -30,7 +30,7 @@ interface ImageLoader : suspend (Uri) -> Bitmap?, suspend (Uri, Boolean) -> Bitm * @param callback a callback that will be invoked with the loaded image or null if loading has * failed. */ - fun loadImage(callerLifecycle: Lifecycle, uri: Uri, callback: Consumer<Bitmap?>) + fun loadImage(callerScope: CoroutineScope, uri: Uri, callback: Consumer<Bitmap?>) /** Prepopulate the image loader cache. */ fun prePopulate(uris: List<Uri>) diff --git a/java/src/com/android/intentresolver/contentpreview/ImagePreviewImageLoader.kt b/java/src/com/android/intentresolver/contentpreview/ImagePreviewImageLoader.kt index 22dd1125..572ccf0b 100644 --- a/java/src/com/android/intentresolver/contentpreview/ImagePreviewImageLoader.kt +++ b/java/src/com/android/intentresolver/contentpreview/ImagePreviewImageLoader.kt @@ -24,8 +24,6 @@ import android.util.Size import androidx.annotation.GuardedBy import androidx.annotation.VisibleForTesting import androidx.collection.LruCache -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.coroutineScope import java.util.function.Consumer import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CompletableDeferred @@ -70,8 +68,8 @@ constructor( override suspend fun invoke(uri: Uri, caching: Boolean): Bitmap? = loadImageAsync(uri, caching) - override fun loadImage(callerLifecycle: Lifecycle, uri: Uri, callback: Consumer<Bitmap?>) { - callerLifecycle.coroutineScope.launch { + override fun loadImage(callerScope: CoroutineScope, uri: Uri, callback: Consumer<Bitmap?>) { + callerScope.launch { val image = loadImageAsync(uri, caching = true) if (isActive) { callback.accept(image) diff --git a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt index bb303c7b..38918d79 100644 --- a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt +++ b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt @@ -29,8 +29,6 @@ import android.text.TextUtils import android.util.Log import androidx.annotation.OpenForTesting import androidx.annotation.VisibleForTesting -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.coroutineScope import com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_FILE import com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_IMAGE import com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_TEXT @@ -185,11 +183,11 @@ constructor( * is not provided, derived from the URI. */ @Throws(IndexOutOfBoundsException::class) - fun getFirstFileName(callerLifecycle: Lifecycle, callback: Consumer<String>) { + fun getFirstFileName(callerScope: CoroutineScope, callback: Consumer<String>) { if (records.isEmpty()) { throw IndexOutOfBoundsException("There are no shared URIs") } - callerLifecycle.coroutineScope.launch { + callerScope.launch { val result = scope.async { getFirstFileName() }.await() callback.accept(result) } diff --git a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java index db7b261e..b0dc3c58 100644 --- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java @@ -29,13 +29,14 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.lifecycle.Lifecycle; import com.android.intentresolver.R; import com.android.intentresolver.widget.ActionRow; +import kotlinx.coroutines.CoroutineScope; + class TextContentPreviewUi extends ContentPreviewUi { - private final Lifecycle mLifecycle; + private final CoroutineScope mScope; @Nullable private final CharSequence mSharingText; @Nullable @@ -47,14 +48,14 @@ class TextContentPreviewUi extends ContentPreviewUi { private final HeadlineGenerator mHeadlineGenerator; TextContentPreviewUi( - Lifecycle lifecycle, + CoroutineScope scope, @Nullable CharSequence sharingText, @Nullable CharSequence previewTitle, @Nullable Uri previewThumbnail, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, HeadlineGenerator headlineGenerator) { - mLifecycle = lifecycle; + mScope = scope; mSharingText = sharingText; mPreviewTitle = previewTitle; mPreviewThumbnail = previewThumbnail; @@ -122,7 +123,7 @@ class TextContentPreviewUi extends ContentPreviewUi { previewThumbnailView.setVisibility(View.GONE); } else { mImageLoader.loadImage( - mLifecycle, + mScope, mPreviewThumbnail, (bitmap) -> updateViewWithImage( contentPreviewLayout.findViewById( diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java index a3177028..c1d73e69 100644 --- a/java/src/com/android/intentresolver/v2/ChooserActivity.java +++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java @@ -316,7 +316,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements new ViewModelProvider(this, createPreviewViewModelFactory()) .get(BasePreviewViewModel.class); mChooserContentPreviewUi = new ChooserContentPreviewUi( - getLifecycle(), + getCoroutineScope(getLifecycle()), previewViewModel.createOrReuseProvider(mChooserRequest), mChooserRequest.getTargetIntent(), previewViewModel.createOrReuseImageLoader(), |