summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-10-26 09:00:40 -0700
committer Andrey Epin <ayepin@google.com> 2023-10-26 09:09:46 -0700
commit475d1d0fd9f042dcdc085e2ba095e8164dfd1c15 (patch)
tree90d1e5783589e3f9d2bacd94dcdf6ec772c03ed1 /java
parent6e1337987eb2c062ba2cc7959333a3e6355afaee (diff)
Use CoroutineScope as a depenency instead of Lifecycle
In content preview classes, Lifecycele was used as coroutine provider. This change makes CoroutineScope as a depenedency for all those classes. Test: atest IntentResolverUnitTests Change-Id: I2d9f07a54d9bb5b56b20c19a821e4626c86da472
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java2
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java26
-rw-r--r--java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java11
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ImageLoader.kt4
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ImagePreviewImageLoader.kt6
-rw-r--r--java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt6
-rw-r--r--java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java11
-rw-r--r--java/src/com/android/intentresolver/v2/ChooserActivity.java2
-rw-r--r--java/tests/src/com/android/intentresolver/TestPreviewImageLoader.kt4
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt30
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUiTest.kt16
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/TextContentPreviewUiTest.kt8
12 files changed, 58 insertions, 68 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(),
diff --git a/java/tests/src/com/android/intentresolver/TestPreviewImageLoader.kt b/java/tests/src/com/android/intentresolver/TestPreviewImageLoader.kt
index bf87ed8a..9c4d6187 100644
--- a/java/tests/src/com/android/intentresolver/TestPreviewImageLoader.kt
+++ b/java/tests/src/com/android/intentresolver/TestPreviewImageLoader.kt
@@ -18,12 +18,12 @@ package com.android.intentresolver
import android.graphics.Bitmap
import android.net.Uri
-import androidx.lifecycle.Lifecycle
import com.android.intentresolver.contentpreview.ImageLoader
import java.util.function.Consumer
+import kotlinx.coroutines.CoroutineScope
internal class TestPreviewImageLoader(private val bitmaps: Map<Uri, Bitmap>) : ImageLoader {
- override fun loadImage(callerLifecycle: Lifecycle, uri: Uri, callback: Consumer<Bitmap?>) {
+ override fun loadImage(callerScope: CoroutineScope, uri: Uri, callback: Consumer<Bitmap?>) {
callback.accept(bitmaps[uri])
}
diff --git a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
index dab1a956..55cde497 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
@@ -17,10 +17,8 @@
package com.android.intentresolver.contentpreview
import android.content.Intent
-import android.graphics.Bitmap
import android.net.Uri
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.testing.TestLifecycleOwner
+import com.android.intentresolver.TestPreviewImageLoader
import com.android.intentresolver.contentpreview.ChooserContentPreviewUi.ActionFactory
import com.android.intentresolver.mock
import com.android.intentresolver.whenever
@@ -28,28 +26,20 @@ import com.android.intentresolver.widget.ActionRow
import com.android.intentresolver.widget.ImagePreviewView
import com.google.common.truth.Truth.assertThat
import java.util.function.Consumer
+import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Test
import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
class ChooserContentPreviewUiTest {
- private val lifecycleOwner = TestLifecycleOwner()
+ private val testScope = TestScope(EmptyCoroutineContext + UnconfinedTestDispatcher())
private val previewData = mock<PreviewDataProvider>()
private val headlineGenerator = mock<HeadlineGenerator>()
- private val imageLoader =
- object : ImageLoader {
- override fun loadImage(
- callerLifecycle: Lifecycle,
- uri: Uri,
- callback: Consumer<Bitmap?>,
- ) {
- callback.accept(null)
- }
- override fun prePopulate(uris: List<Uri>) = Unit
- override suspend fun invoke(uri: Uri, caching: Boolean): Bitmap? = null
- }
+ private val imageLoader = TestPreviewImageLoader(emptyMap())
private val actionFactory =
object : ActionFactory {
override fun getCopyButtonRunnable(): Runnable? = null
@@ -65,7 +55,7 @@ class ChooserContentPreviewUiTest {
whenever(previewData.previewType).thenReturn(ContentPreviewType.CONTENT_PREVIEW_TEXT)
val testSubject =
ChooserContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
previewData,
Intent(Intent.ACTION_VIEW),
imageLoader,
@@ -84,7 +74,7 @@ class ChooserContentPreviewUiTest {
whenever(previewData.previewType).thenReturn(ContentPreviewType.CONTENT_PREVIEW_FILE)
val testSubject =
ChooserContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
previewData,
Intent(Intent.ACTION_SEND),
imageLoader,
@@ -108,7 +98,7 @@ class ChooserContentPreviewUiTest {
whenever(previewData.imagePreviewFileInfoFlow).thenReturn(MutableSharedFlow())
val testSubject =
ChooserContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
previewData,
Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_TEXT, "Shared text") },
imageLoader,
@@ -132,7 +122,7 @@ class ChooserContentPreviewUiTest {
whenever(previewData.imagePreviewFileInfoFlow).thenReturn(MutableSharedFlow())
val testSubject =
ChooserContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
previewData,
Intent(Intent.ACTION_SEND),
imageLoader,
diff --git a/java/tests/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUiTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUiTest.kt
index 0976dbf1..7cc0b4b2 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUiTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUiTest.kt
@@ -21,7 +21,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import androidx.lifecycle.testing.TestLifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.intentresolver.R
@@ -31,6 +30,9 @@ import com.android.intentresolver.widget.ActionRow
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import java.util.function.Consumer
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.anyInt
@@ -45,7 +47,7 @@ private const val SHARED_TEXT = "Some text to share"
@RunWith(AndroidJUnit4::class)
class FilesPlusTextContentPreviewUiTest {
- private val lifecycleOwner = TestLifecycleOwner()
+ private val testScope = TestScope(EmptyCoroutineContext + UnconfinedTestDispatcher())
private val actionFactory =
object : ChooserContentPreviewUi.ActionFactory {
override fun getEditButtonRunnable(): Runnable? = null
@@ -63,7 +65,7 @@ class FilesPlusTextContentPreviewUiTest {
}
private val context
- get() = getInstrumentation().getContext()
+ get() = getInstrumentation().context
@Test
fun test_displayImagesPlusTextWithoutUriMetadata_showImagesHeadline() {
@@ -252,7 +254,7 @@ class FilesPlusTextContentPreviewUiTest {
val sharedFileCount = 2
val testSubject =
FilesPlusTextContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
/*isSingleImage=*/ false,
sharedFileCount,
SHARED_TEXT,
@@ -284,7 +286,7 @@ class FilesPlusTextContentPreviewUiTest {
val sharedFileCount = 2
val testSubject =
FilesPlusTextContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
/*isSingleImage=*/ false,
sharedFileCount,
SHARED_TEXT,
@@ -332,7 +334,7 @@ class FilesPlusTextContentPreviewUiTest {
): ViewGroup? {
val testSubject =
FilesPlusTextContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
/*isSingleImage=*/ false,
sharedFileCount,
SHARED_TEXT,
@@ -361,7 +363,7 @@ class FilesPlusTextContentPreviewUiTest {
): Pair<ViewGroup?, View> {
val testSubject =
FilesPlusTextContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
/*isSingleImage=*/ false,
sharedFileCount,
SHARED_TEXT,
diff --git a/java/tests/src/com/android/intentresolver/contentpreview/TextContentPreviewUiTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/TextContentPreviewUiTest.kt
index b91ed436..35362401 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/TextContentPreviewUiTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/TextContentPreviewUiTest.kt
@@ -20,7 +20,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import androidx.lifecycle.testing.TestLifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.android.intentresolver.R
@@ -29,6 +28,9 @@ import com.android.intentresolver.whenever
import com.android.intentresolver.widget.ActionRow
import com.google.common.truth.Truth.assertThat
import java.util.function.Consumer
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Test
import org.junit.runner.RunWith
@@ -36,7 +38,7 @@ import org.junit.runner.RunWith
class TextContentPreviewUiTest {
private val text = "Shared Text"
private val title = "Preview Title"
- private val lifecycleOwner = TestLifecycleOwner()
+ private val testScope = TestScope(EmptyCoroutineContext + UnconfinedTestDispatcher())
private val actionFactory =
object : ChooserContentPreviewUi.ActionFactory {
override fun getEditButtonRunnable(): Runnable? = null
@@ -54,7 +56,7 @@ class TextContentPreviewUiTest {
private val testSubject =
TextContentPreviewUi(
- lifecycleOwner.lifecycle,
+ testScope,
text,
title,
/*previewThumbnail=*/ null,