summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout/chooser_grid_preview_file.xml12
-rw-r--r--java/src/com/android/intentresolver/ChooserActionFactory.java3
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java8
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java1
-rw-r--r--java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java62
-rw-r--r--java/src/com/android/intentresolver/widget/ImagePreviewView.kt2
-rw-r--r--java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt17
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt3
8 files changed, 36 insertions, 72 deletions
diff --git a/java/res/layout/chooser_grid_preview_file.xml b/java/res/layout/chooser_grid_preview_file.xml
index c9ef952a..40ab2f0b 100644
--- a/java/res/layout/chooser_grid_preview_file.xml
+++ b/java/res/layout/chooser_grid_preview_file.xml
@@ -39,15 +39,6 @@
android:layout_marginBottom="@dimen/chooser_view_spacing"
android:id="@androidprv:id/content_preview_file_layout">
- <com.android.intentresolver.widget.RoundedRectImageView
- android:id="@androidprv:id/content_preview_file_thumbnail"
- android:layout_width="75dp"
- android:layout_height="75dp"
- android:layout_marginRight="16dp"
- android:adjustViewBounds="true"
- android:layout_gravity="center_vertical"
- android:gravity="center"
- android:scaleType="centerCrop"/>
<ImageView
android:id="@androidprv:id/content_preview_file_icon"
android:layout_width="36dp"
@@ -56,8 +47,7 @@
android:adjustViewBounds="true"
android:layout_gravity="center_vertical"
android:gravity="center"
- android:scaleType="fitCenter"
- android:visibility="gone"/>
+ android:scaleType="fitCenter" />
<TextView
android:id="@androidprv:id/content_preview_filename"
android:layout_width="0dp"
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java
index 8dafae86..23e04560 100644
--- a/java/src/com/android/intentresolver/ChooserActionFactory.java
+++ b/java/src/com/android/intentresolver/ChooserActionFactory.java
@@ -40,7 +40,6 @@ import android.view.View;
import com.android.intentresolver.chooser.DisplayResolveInfo;
import com.android.intentresolver.chooser.TargetInfo;
import com.android.intentresolver.contentpreview.ChooserContentPreviewUi;
-import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.widget.ActionRow;
import com.android.internal.annotations.VisibleForTesting;
@@ -104,7 +103,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
/**
* @param context
* @param chooserRequest data about the invocation of the current Sharesheet session.
- * @param featureFlagRepository feature flags that may control the eligibility of some actions.
* @param integratedDeviceComponents info about other components that are available on this
* device to implement the supported action types.
* @param onUpdateSharedTextIsExcluded a delegate to be invoked when the "exclude shared text"
@@ -118,7 +116,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
public ChooserActionFactory(
Context context,
ChooserRequestParameters chooserRequest,
- FeatureFlagRepository featureFlagRepository,
ChooserIntegratedDeviceComponents integratedDeviceComponents,
ChooserActivityLogger logger,
Consumer<Boolean> onUpdateSharedTextIsExcluded,
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 75ee0648..404d6da3 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -92,6 +92,7 @@ import com.android.intentresolver.model.AppPredictionServiceResolverComparator;
import com.android.intentresolver.model.ResolverRankerServiceResolverComparator;
import com.android.intentresolver.shortcuts.AppPredictorFactory;
import com.android.intentresolver.shortcuts.ShortcutLoader;
+import com.android.intentresolver.widget.ImagePreviewView;
import com.android.intentresolver.widget.ResolverDrawerLayout;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.PackageMonitor;
@@ -682,8 +683,10 @@ public class ChooserActivity extends ResolverActivity implements
@Nullable
private View getFirstVisibleImgPreviewView() {
- View firstImage = findViewById(com.android.internal.R.id.content_preview_image_1_large);
- return firstImage != null && firstImage.isVisibleToUser() ? firstImage : null;
+ View imagePreview = findViewById(R.id.scrollable_image_preview);
+ return imagePreview instanceof ImagePreviewView
+ ? ((ImagePreviewView) imagePreview).getTransitionView()
+ : null;
}
/**
@@ -1295,7 +1298,6 @@ public class ChooserActivity extends ResolverActivity implements
return new ChooserActionFactory(
this,
mChooserRequest,
- mFeatureFlagRepository,
mIntegratedDeviceComponents,
getChooserActivityLogger(),
(isExcluded) -> mExcludeSharedText = isExcluded,
diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
index 318aa627..56027a16 100644
--- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
@@ -155,7 +155,6 @@ public final class ChooserContentPreviewUi {
return new FileContentPreviewUi(
files,
actionFactory,
- imageLoader,
headlineGenerator);
}
return new UnifiedContentPreviewUi(
diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
index e814eb12..e9d65eed 100644
--- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
@@ -25,7 +25,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.intentresolver.ImageLoader;
import com.android.intentresolver.R;
import com.android.intentresolver.widget.ActionRow;
@@ -40,17 +39,14 @@ class FileContentPreviewUi extends ContentPreviewUi {
private final List<FileInfo> mFiles;
private final ChooserContentPreviewUi.ActionFactory mActionFactory;
- private final ImageLoader mImageLoader;
private final HeadlineGenerator mHeadlineGenerator;
FileContentPreviewUi(
List<FileInfo> files,
ChooserContentPreviewUi.ActionFactory actionFactory,
- ImageLoader imageLoader,
HeadlineGenerator headlineGenerator) {
mFiles = files;
mActionFactory = actionFactory;
- mImageLoader = imageLoader;
mHeadlineGenerator = headlineGenerator;
}
@@ -82,30 +78,27 @@ class FileContentPreviewUi extends ContentPreviewUi {
return contentPreviewLayout;
}
+ FileInfo fileInfo = mFiles.get(0);
+ final CharSequence fileName;
+ final int iconId;
if (uriCount == 1) {
- loadFileUriIntoView(mFiles.get(0), contentPreviewLayout, mImageLoader);
+ fileName = fileInfo.getName();
+ iconId = R.drawable.chooser_file_generic;
} else {
- FileInfo fileInfo = mFiles.get(0);
int remUriCount = uriCount - 1;
Map<String, Object> arguments = new HashMap<>();
arguments.put(PLURALS_COUNT, remUriCount);
arguments.put(PLURALS_FILE_NAME, fileInfo.getName());
- String fileName =
- PluralsMessageFormatter.format(resources, arguments, R.string.file_count);
-
- TextView fileNameView = contentPreviewLayout.findViewById(
- com.android.internal.R.id.content_preview_filename);
- fileNameView.setText(fileName);
-
- View thumbnailView = contentPreviewLayout.findViewById(
- com.android.internal.R.id.content_preview_file_thumbnail);
- thumbnailView.setVisibility(View.GONE);
-
- ImageView fileIconView = contentPreviewLayout.findViewById(
- com.android.internal.R.id.content_preview_file_icon);
- fileIconView.setVisibility(View.VISIBLE);
- fileIconView.setImageResource(R.drawable.ic_file_copy);
+ fileName = PluralsMessageFormatter.format(resources, arguments, R.string.file_count);
+ iconId = R.drawable.ic_file_copy;
}
+ TextView fileNameView = contentPreviewLayout.findViewById(
+ com.android.internal.R.id.content_preview_filename);
+ fileNameView.setText(fileName);
+
+ ImageView fileIconView = contentPreviewLayout.findViewById(
+ com.android.internal.R.id.content_preview_file_icon);
+ fileIconView.setImageResource(iconId);
final ActionRow actionRow =
contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row);
@@ -127,31 +120,4 @@ class FileContentPreviewUi extends ContentPreviewUi {
}
return actions;
}
-
- private static void loadFileUriIntoView(
- final FileInfo fileInfo,
- final View parent,
- final ImageLoader imageLoader) {
- TextView fileNameView = parent.findViewById(
- com.android.internal.R.id.content_preview_filename);
- fileNameView.setText(fileInfo.getName());
-
- if (fileInfo.getPreviewUri() != null) {
- imageLoader.loadImage(
- fileInfo.getPreviewUri(),
- (bitmap) -> updateViewWithImage(
- parent.findViewById(
- com.android.internal.R.id.content_preview_file_thumbnail),
- bitmap));
- } else {
- View thumbnailView = parent.findViewById(
- com.android.internal.R.id.content_preview_file_thumbnail);
- thumbnailView.setVisibility(View.GONE);
-
- ImageView fileIconView = parent.findViewById(
- com.android.internal.R.id.content_preview_file_icon);
- fileIconView.setVisibility(View.VISIBLE);
- fileIconView.setImageResource(R.drawable.chooser_file_generic);
- }
- }
}
diff --git a/java/src/com/android/intentresolver/widget/ImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ImagePreviewView.kt
index 8813adca..5f92b149 100644
--- a/java/src/com/android/intentresolver/widget/ImagePreviewView.kt
+++ b/java/src/com/android/intentresolver/widget/ImagePreviewView.kt
@@ -18,11 +18,13 @@ package com.android.intentresolver.widget
import android.graphics.Bitmap
import android.net.Uri
+import android.view.View
internal typealias ImageLoader = suspend (Uri) -> Bitmap?
interface ImagePreviewView {
fun setTransitionElementStatusCallback(callback: TransitionElementStatusCallback?)
+ fun getTransitionView(): View?
/**
* [ImagePreviewView] progressively prepares views for shared element transition and reports
diff --git a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
index 8dcaacb8..7755610d 100644
--- a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
+++ b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
@@ -122,6 +122,15 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
previewAdapter.transitionStatusElementCallback = callback
}
+ override fun getTransitionView(): View? {
+ for (i in 0 until childCount) {
+ val child = getChildAt(i)
+ val vh = getChildViewHolder(child)
+ if (vh is PreviewViewHolder && vh.image.transitionName != null) return child
+ }
+ return null
+ }
+
fun setPreviews(previews: List<Preview>, otherItemCount: Int, imageLoader: ImageLoader) {
previewAdapter.reset(0, imageLoader)
batchLoader?.cancel()
@@ -250,7 +259,8 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
is PreviewViewHolder -> vh.bind(
previews[position],
imageLoader ?: error("ImageLoader is missing"),
- if (position == firstImagePos && transitionStatusElementCallback != null) {
+ isSharedTransitionElement = position == firstImagePos,
+ previewReadyCallback = if (position == firstImagePos && transitionStatusElementCallback != null) {
this::onTransitionElementReady
} else {
null
@@ -282,7 +292,7 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
}
private class PreviewViewHolder(view: View) : ViewHolder(view) {
- private val image = view.requireViewById<ImageView>(R.id.image)
+ val image = view.requireViewById<ImageView>(R.id.image)
private val badgeFrame = view.requireViewById<View>(R.id.badge_frame)
private val badge = view.requireViewById<ImageView>(R.id.badge)
private var scope: CoroutineScope? = null
@@ -290,13 +300,14 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
fun bind(
preview: Preview,
imageLoader: ImageLoader,
+ isSharedTransitionElement: Boolean,
previewReadyCallback: ((String) -> Unit)?
) {
image.setImageDrawable(null)
(image.layoutParams as? ConstraintLayout.LayoutParams)?.let { params ->
params.dimensionRatio = preview.aspectRatioString
}
- image.transitionName = if (previewReadyCallback != null) {
+ image.transitionName = if (isSharedTransitionElement) {
TRANSITION_NAME
} else {
null
diff --git a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
index 0a8c22b7..d72c9aa6 100644
--- a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
+++ b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
@@ -29,11 +29,9 @@ import android.view.View
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.android.intentresolver.flags.FeatureFlagRepository
-import com.android.intentresolver.flags.Flags
import com.google.common.collect.ImmutableList
import com.google.common.truth.Truth.assertThat
import org.junit.After
-import org.junit.Assert
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
@@ -142,7 +140,6 @@ class ChooserActionFactoryTest {
return ChooserActionFactory(
context,
chooserRequest,
- flags,
mock<ChooserIntegratedDeviceComponents>(),
logger,
Consumer<Boolean>{},