summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/ChooserActionFactory.java5
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java16
-rw-r--r--java/src/com/android/intentresolver/ChooserRequestParameters.java9
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java51
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java20
-rw-r--r--java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java11
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java193
-rw-r--r--java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java11
-rw-r--r--java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java17
-rw-r--r--java/src/com/android/intentresolver/flags/Flags.kt26
-rw-r--r--java/src/com/android/intentresolver/widget/ChooserImagePreviewView.kt163
11 files changed, 28 insertions, 494 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java
index d0e6e53f..8dafae86 100644
--- a/java/src/com/android/intentresolver/ChooserActionFactory.java
+++ b/java/src/com/android/intentresolver/ChooserActionFactory.java
@@ -41,7 +41,6 @@ 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.flags.Flags;
import com.android.intentresolver.widget.ActionRow;
import com.android.internal.annotations.VisibleForTesting;
@@ -161,9 +160,7 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
finishCallback,
logger),
chooserRequest.getChooserActions(),
- (featureFlagRepository.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)
- ? chooserRequest.getModifyShareAction()
- : null),
+ chooserRequest.getModifyShareAction(),
onUpdateSharedTextIsExcluded,
logger,
finishCallback);
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 270fc299..dd0be4f0 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -87,7 +87,6 @@ import com.android.intentresolver.contentpreview.ChooserContentPreviewUi;
import com.android.intentresolver.contentpreview.HeadlineGeneratorImpl;
import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.flags.FeatureFlagRepositoryFactory;
-import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.grid.ChooserGridAdapter;
import com.android.intentresolver.grid.DirectShareViewHolder;
import com.android.intentresolver.model.AbstractResolverComparator;
@@ -293,7 +292,6 @@ public class ChooserActivity extends ResolverActivity implements
createPreviewImageLoader(),
createChooserActionFactory(),
mEnterTransitionAnimationDelegate,
- mFeatureFlagRepository,
new HeadlineGeneratorImpl(this));
setAdditionalTargets(mChooserRequest.getAdditionalTargets());
@@ -1341,15 +1339,11 @@ public class ChooserActivity extends ResolverActivity implements
@VisibleForTesting
protected ImageLoader createPreviewImageLoader() {
final int cacheSize;
- if (mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW)) {
- float chooserWidth = getResources().getDimension(R.dimen.chooser_width);
- // imageWidth = imagePreviewHeight / minAspectRatio (see ScrollableImagePreviewView)
- float imageWidth =
- getResources().getDimension(R.dimen.chooser_preview_image_height_tall) * 5 / 2;
- cacheSize = (int) (Math.ceil(chooserWidth / imageWidth) + 2);
- } else {
- cacheSize = 3;
- }
+ float chooserWidth = getResources().getDimension(R.dimen.chooser_width);
+ // imageWidth = imagePreviewHeight / minAspectRatio (see ScrollableImagePreviewView)
+ float imageWidth =
+ getResources().getDimension(R.dimen.chooser_preview_image_height_tall) * 5 / 2;
+ cacheSize = (int) (Math.ceil(chooserWidth / imageWidth) + 2);
return new ImagePreviewImageLoader(this, getLifecycle(), cacheSize);
}
diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java
index 8e0014d6..f9004a9b 100644
--- a/java/src/com/android/intentresolver/ChooserRequestParameters.java
+++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java
@@ -33,7 +33,6 @@ import android.util.Log;
import android.util.Pair;
import com.android.intentresolver.flags.FeatureFlagRepository;
-import com.android.intentresolver.flags.Flags;
import com.google.common.collect.ImmutableList;
@@ -146,12 +145,8 @@ public class ChooserRequestParameters {
mTargetIntentFilter = getTargetIntentFilter(mTarget);
- mChooserActions = featureFlags.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)
- ? getChooserActions(clientIntent)
- : ImmutableList.of();
- mModifyShareAction = featureFlags.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)
- ? getModifyShareAction(clientIntent)
- : null;
+ mChooserActions = getChooserActions(clientIntent);
+ mModifyShareAction = getModifyShareAction(clientIntent);
}
public Intent getTargetIntent() {
diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
index 3509c67d..318aa627 100644
--- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
@@ -39,14 +39,11 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.android.intentresolver.ImageLoader;
-import com.android.intentresolver.flags.FeatureFlagRepository;
-import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.widget.ActionRow;
import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
import java.util.function.Consumer;
/**
@@ -103,7 +100,6 @@ public final class ChooserContentPreviewUi {
ImageLoader imageLoader,
ActionFactory actionFactory,
TransitionElementStatusCallback transitionElementStatusCallback,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
mContentPreviewUi = createContentPreview(
@@ -113,7 +109,6 @@ public final class ChooserContentPreviewUi {
imageLoader,
actionFactory,
transitionElementStatusCallback,
- featureFlagRepository,
headlineGenerator);
if (mContentPreviewUi.getType() != CONTENT_PREVIEW_IMAGE) {
transitionElementStatusCallback.onAllTransitionElementsReady();
@@ -127,7 +122,6 @@ public final class ChooserContentPreviewUi {
ImageLoader imageLoader,
ActionFactory actionFactory,
TransitionElementStatusCallback transitionElementStatusCallback,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
/* In {@link android.content.Intent#getType}, the app may specify a very general mime type
@@ -145,7 +139,6 @@ public final class ChooserContentPreviewUi {
targetIntent,
actionFactory,
imageLoader,
- featureFlagRepository,
headlineGenerator);
}
List<Uri> uris = extractContentUris(targetIntent);
@@ -154,7 +147,6 @@ public final class ChooserContentPreviewUi {
targetIntent,
actionFactory,
imageLoader,
- featureFlagRepository,
headlineGenerator);
}
ArrayList<FileInfo> files = new ArrayList<>(uris.size());
@@ -164,50 +156,15 @@ public final class ChooserContentPreviewUi {
files,
actionFactory,
imageLoader,
- featureFlagRepository,
headlineGenerator);
}
- if (featureFlagRepository.isEnabled(Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW)) {
- return new UnifiedContentPreviewUi(
- files,
- targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT),
- actionFactory,
- imageLoader,
- typeClassifier,
- transitionElementStatusCallback,
- featureFlagRepository,
- headlineGenerator);
- }
- if (previewCount < uris.size()) {
- return new FileContentPreviewUi(
- files,
- actionFactory,
- imageLoader,
- featureFlagRepository,
- headlineGenerator);
- }
- // The legacy (3-image) image preview is on it's way out and it's unlikely that we'd end up
- // here. To preserve the legacy behavior, before using it, check that all uris are images.
- for (FileInfo fileInfo: files) {
- if (!typeClassifier.isImageType(fileInfo.getMimeType())) {
- return new FileContentPreviewUi(
- files,
- actionFactory,
- imageLoader,
- featureFlagRepository,
- headlineGenerator);
- }
- }
- return new ImageContentPreviewUi(
- files.stream()
- .map(FileInfo::getPreviewUri)
- .filter(Objects::nonNull)
- .toList(),
+ return new UnifiedContentPreviewUi(
+ files,
targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT),
actionFactory,
imageLoader,
+ typeClassifier,
transitionElementStatusCallback,
- featureFlagRepository,
headlineGenerator);
}
@@ -323,7 +280,6 @@ public final class ChooserContentPreviewUi {
Intent targetIntent,
ChooserContentPreviewUi.ActionFactory actionFactory,
ImageLoader imageLoader,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
CharSequence sharingText = targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT);
String previewTitle = targetIntent.getStringExtra(Intent.EXTRA_TITLE);
@@ -341,7 +297,6 @@ public final class ChooserContentPreviewUi {
previewThumbnail,
actionFactory,
imageLoader,
- featureFlagRepository,
headlineGenerator);
}
diff --git a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
index 2a6bff5c..15ba96c0 100644
--- a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
@@ -37,8 +37,6 @@ import android.widget.TextView;
import androidx.annotation.LayoutRes;
import com.android.intentresolver.R;
-import com.android.intentresolver.flags.FeatureFlagRepository;
-import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.widget.ActionRow;
import java.util.ArrayList;
@@ -54,10 +52,8 @@ abstract class ContentPreviewUi {
public abstract ViewGroup display(
Resources resources, LayoutInflater layoutInflater, ViewGroup parent);
- protected static int getActionRowLayout(FeatureFlagRepository featureFlagRepository) {
- return featureFlagRepository.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)
- ? R.layout.scrollable_chooser_action_row
- : R.layout.chooser_action_row;
+ protected static int getActionRowLayout() {
+ return R.layout.scrollable_chooser_action_row;
}
protected static ActionRow inflateActionRow(ViewGroup parent, @LayoutRes int actionRowLayout) {
@@ -71,12 +67,10 @@ abstract class ContentPreviewUi {
protected static List<ActionRow.Action> createActions(
List<ActionRow.Action> systemActions,
- List<ActionRow.Action> customActions,
- FeatureFlagRepository featureFlagRepository) {
+ List<ActionRow.Action> customActions) {
ArrayList<ActionRow.Action> actions =
new ArrayList<>(systemActions.size() + customActions.size());
- if (featureFlagRepository.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)
- && customActions != null && !customActions.isEmpty()) {
+ if (customActions != null && !customActions.isEmpty()) {
actions.addAll(customActions);
} else {
actions.addAll(systemActions);
@@ -133,11 +127,9 @@ abstract class ContentPreviewUi {
protected static void displayModifyShareAction(
ViewGroup layout,
- ChooserContentPreviewUi.ActionFactory actionFactory,
- FeatureFlagRepository featureFlagRepository) {
+ ChooserContentPreviewUi.ActionFactory actionFactory) {
ActionRow.Action modifyShareAction = actionFactory.getModifyShareAction();
- if (modifyShareAction != null && layout != null
- && featureFlagRepository.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)) {
+ if (modifyShareAction != null && layout != null) {
TextView modifyShareView = layout.findViewById(R.id.reselection_action);
if (modifyShareView != null) {
modifyShareView.setText(modifyShareAction.getLabel());
diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
index 52e20cf0..3012eec2 100644
--- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java
@@ -29,7 +29,6 @@ import androidx.annotation.LayoutRes;
import com.android.intentresolver.ImageLoader;
import com.android.intentresolver.R;
-import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.widget.ActionRow;
import java.util.ArrayList;
@@ -44,19 +43,16 @@ class FileContentPreviewUi extends ContentPreviewUi {
private final List<FileInfo> mFiles;
private final ChooserContentPreviewUi.ActionFactory mActionFactory;
private final ImageLoader mImageLoader;
- private final FeatureFlagRepository mFeatureFlagRepository;
private final HeadlineGenerator mHeadlineGenerator;
FileContentPreviewUi(
List<FileInfo> files,
ChooserContentPreviewUi.ActionFactory actionFactory,
ImageLoader imageLoader,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
mFiles = files;
mActionFactory = actionFactory;
mImageLoader = imageLoader;
- mFeatureFlagRepository = featureFlagRepository;
mHeadlineGenerator = headlineGenerator;
}
@@ -68,13 +64,13 @@ class FileContentPreviewUi extends ContentPreviewUi {
@Override
public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) {
ViewGroup layout = displayInternal(resources, layoutInflater, parent);
- displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository);
+ displayModifyShareAction(layout, mActionFactory);
return layout;
}
private ViewGroup displayInternal(
Resources resources, LayoutInflater layoutInflater, ViewGroup parent) {
- @LayoutRes int actionRowLayout = getActionRowLayout(mFeatureFlagRepository);
+ @LayoutRes int actionRowLayout = getActionRowLayout();
ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate(
R.layout.chooser_grid_preview_file, parent, false);
@@ -119,8 +115,7 @@ class FileContentPreviewUi extends ContentPreviewUi {
actionRow.setActions(
createActions(
createFilePreviewActions(),
- mActionFactory.createCustomActions(),
- mFeatureFlagRepository));
+ mActionFactory.createCustomActions()));
}
return contentPreviewLayout;
diff --git a/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java
deleted file mode 100644
index f2c0564a..00000000
--- a/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.intentresolver.contentpreview;
-
-import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_IMAGE;
-
-import android.content.res.Resources;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.text.util.Linkify;
-import android.transition.TransitionManager;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewStub;
-import android.widget.CheckBox;
-import android.widget.TextView;
-
-import androidx.annotation.LayoutRes;
-import androidx.annotation.Nullable;
-
-import com.android.intentresolver.ImageLoader;
-import com.android.intentresolver.R;
-import com.android.intentresolver.flags.FeatureFlagRepository;
-import com.android.intentresolver.flags.Flags;
-import com.android.intentresolver.widget.ActionRow;
-import com.android.intentresolver.widget.ChooserImagePreviewView;
-import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Consumer;
-
-class ImageContentPreviewUi extends ContentPreviewUi {
- private final List<Uri> mImageUris;
- @Nullable
- private final CharSequence mText;
- private final ChooserContentPreviewUi.ActionFactory mActionFactory;
- private final ImageLoader mImageLoader;
- private final TransitionElementStatusCallback mTransitionElementStatusCallback;
- private final FeatureFlagRepository mFeatureFlagRepository;
- private final HeadlineGenerator mHeadlineGenerator;
-
- ImageContentPreviewUi(
- List<Uri> imageUris,
- @Nullable CharSequence text,
- ChooserContentPreviewUi.ActionFactory actionFactory,
- ImageLoader imageLoader,
- TransitionElementStatusCallback transitionElementStatusCallback,
- FeatureFlagRepository featureFlagRepository,
- HeadlineGenerator headlineGenerator) {
- mImageUris = imageUris;
- mText = text;
- mActionFactory = actionFactory;
- mImageLoader = imageLoader;
- mTransitionElementStatusCallback = transitionElementStatusCallback;
- mFeatureFlagRepository = featureFlagRepository;
- mHeadlineGenerator = headlineGenerator;
-
- mImageLoader.prePopulate(mImageUris);
- }
-
- @Override
- public int getType() {
- return CONTENT_PREVIEW_IMAGE;
- }
-
- @Override
- public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) {
- ViewGroup layout = displayInternal(layoutInflater, parent);
- displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository);
- return layout;
- }
-
- private ViewGroup displayInternal(LayoutInflater layoutInflater, ViewGroup parent) {
- @LayoutRes int actionRowLayout = getActionRowLayout(mFeatureFlagRepository);
- ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate(
- R.layout.chooser_grid_preview_image, parent, false);
- ChooserImagePreviewView imagePreview = inflateImagePreviewView(contentPreviewLayout);
-
- final ActionRow actionRow = inflateActionRow(contentPreviewLayout, actionRowLayout);
- if (actionRow != null) {
- actionRow.setActions(
- createActions(
- createImagePreviewActions(),
- mActionFactory.createCustomActions(),
- mFeatureFlagRepository));
- }
-
- if (mImageUris.size() == 0) {
- Log.i(
- TAG,
- "Attempted to display image preview area with zero"
- + " available images detected in EXTRA_STREAM list");
- imagePreview.setVisibility(View.GONE);
- mTransitionElementStatusCallback.onAllTransitionElementsReady();
- return contentPreviewLayout;
- }
-
- setTextInImagePreviewVisibility(contentPreviewLayout, mActionFactory);
- imagePreview.setTransitionElementStatusCallback(mTransitionElementStatusCallback);
- imagePreview.setImages(mImageUris, mImageLoader);
-
- updateHeadline(contentPreviewLayout);
-
- return contentPreviewLayout;
- }
-
- private List<ActionRow.Action> createImagePreviewActions() {
- ArrayList<ActionRow.Action> actions = new ArrayList<>(2);
- //TODO: add copy action;
- ActionRow.Action action = mActionFactory.createNearbyButton();
- if (action != null) {
- actions.add(action);
- }
- action = mActionFactory.createEditButton();
- if (action != null) {
- actions.add(action);
- }
- return actions;
- }
-
- private ChooserImagePreviewView inflateImagePreviewView(ViewGroup previewLayout) {
- ViewStub stub = previewLayout.findViewById(R.id.image_preview_stub);
- if (stub != null) {
- stub.setLayoutResource(R.layout.chooser_image_preview_view);
- stub.inflate();
- }
- return previewLayout.findViewById(
- com.android.internal.R.id.content_preview_image_area);
- }
-
- private void updateHeadline(ViewGroup contentPreview) {
- CheckBox includeTextCheckbox = contentPreview.requireViewById(R.id.include_text_action);
- if (includeTextCheckbox.getVisibility() == View.VISIBLE
- && includeTextCheckbox.isChecked()) {
- displayHeadline(contentPreview, mHeadlineGenerator.getImageWithTextHeadline(mText));
- } else {
- displayHeadline(
- contentPreview, mHeadlineGenerator.getImagesHeadline(mImageUris.size()));
- }
- }
-
- private void setTextInImagePreviewVisibility(
- ViewGroup contentPreview, ChooserContentPreviewUi.ActionFactory actionFactory) {
- int visibility = mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW)
- && !TextUtils.isEmpty(mText)
- ? View.VISIBLE
- : View.GONE;
-
- final TextView textView = contentPreview
- .requireViewById(com.android.internal.R.id.content_preview_text);
- CheckBox actionView = contentPreview
- .requireViewById(R.id.include_text_action);
- textView.setVisibility(visibility);
- boolean isLink = visibility == View.VISIBLE && HttpUriMatcher.isHttpUri(mText.toString());
- textView.setAutoLinkMask(isLink ? Linkify.WEB_URLS : 0);
- textView.setText(mText);
-
- if (visibility == View.VISIBLE) {
- final int[] actionLabels = isLink
- ? new int[] { R.string.include_link, R.string.exclude_link }
- : new int[] { R.string.include_text, R.string.exclude_text };
- final Consumer<Boolean> shareTextAction = actionFactory.getExcludeSharedTextAction();
- actionView.setChecked(true);
- actionView.setText(actionLabels[1]);
- shareTextAction.accept(false);
- actionView.setOnCheckedChangeListener((view, isChecked) -> {
- view.setText(actionLabels[isChecked ? 1 : 0]);
- TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent());
- textView.setVisibility(isChecked ? View.VISIBLE : View.GONE);
- shareTextAction.accept(!isChecked);
- updateHeadline(contentPreview);
- });
- }
- actionView.setVisibility(visibility);
- }
-}
diff --git a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java
index d0cba5bb..70df6479 100644
--- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java
@@ -30,7 +30,6 @@ import androidx.annotation.Nullable;
import com.android.intentresolver.ImageLoader;
import com.android.intentresolver.R;
-import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.widget.ActionRow;
import java.util.ArrayList;
@@ -45,7 +44,6 @@ class TextContentPreviewUi extends ContentPreviewUi {
private final Uri mPreviewThumbnail;
private final ImageLoader mImageLoader;
private final ChooserContentPreviewUi.ActionFactory mActionFactory;
- private final FeatureFlagRepository mFeatureFlagRepository;
private final HeadlineGenerator mHeadlineGenerator;
TextContentPreviewUi(
@@ -54,14 +52,12 @@ class TextContentPreviewUi extends ContentPreviewUi {
@Nullable Uri previewThumbnail,
ChooserContentPreviewUi.ActionFactory actionFactory,
ImageLoader imageLoader,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
mSharingText = sharingText;
mPreviewTitle = previewTitle;
mPreviewThumbnail = previewThumbnail;
mImageLoader = imageLoader;
mActionFactory = actionFactory;
- mFeatureFlagRepository = featureFlagRepository;
mHeadlineGenerator = headlineGenerator;
}
@@ -73,14 +69,14 @@ class TextContentPreviewUi extends ContentPreviewUi {
@Override
public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) {
ViewGroup layout = displayInternal(layoutInflater, parent);
- displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository);
+ displayModifyShareAction(layout, mActionFactory);
return layout;
}
private ViewGroup displayInternal(
LayoutInflater layoutInflater,
ViewGroup parent) {
- @LayoutRes int actionRowLayout = getActionRowLayout(mFeatureFlagRepository);
+ @LayoutRes int actionRowLayout = getActionRowLayout();
ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate(
R.layout.chooser_grid_preview_text, parent, false);
@@ -89,8 +85,7 @@ class TextContentPreviewUi extends ContentPreviewUi {
actionRow.setActions(
createActions(
createTextPreviewActions(),
- mActionFactory.createCustomActions(),
- mFeatureFlagRepository));
+ mActionFactory.createCustomActions()));
}
if (mSharingText == null) {
diff --git a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
index 2d2ae52b..00a11e30 100644
--- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
@@ -35,8 +35,6 @@ import androidx.annotation.Nullable;
import com.android.intentresolver.ImageLoader;
import com.android.intentresolver.R;
-import com.android.intentresolver.flags.FeatureFlagRepository;
-import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.widget.ActionRow;
import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback;
import com.android.intentresolver.widget.ScrollableImagePreviewView;
@@ -54,7 +52,6 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
private final ImageLoader mImageLoader;
private final MimeTypeClassifier mTypeClassifier;
private final TransitionElementStatusCallback mTransitionElementStatusCallback;
- private final FeatureFlagRepository mFeatureFlagRepository;
private final HeadlineGenerator mHeadlineGenerator;
UnifiedContentPreviewUi(
@@ -64,7 +61,6 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
ImageLoader imageLoader,
MimeTypeClassifier typeClassifier,
TransitionElementStatusCallback transitionElementStatusCallback,
- FeatureFlagRepository featureFlagRepository,
HeadlineGenerator headlineGenerator) {
mFiles = files;
mText = text;
@@ -72,7 +68,6 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
mImageLoader = imageLoader;
mTypeClassifier = typeClassifier;
mTransitionElementStatusCallback = transitionElementStatusCallback;
- mFeatureFlagRepository = featureFlagRepository;
mHeadlineGenerator = headlineGenerator;
mImageLoader.prePopulate(mFiles.stream()
@@ -89,12 +84,12 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
@Override
public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) {
ViewGroup layout = displayInternal(layoutInflater, parent);
- displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository);
+ displayModifyShareAction(layout, mActionFactory);
return layout;
}
private ViewGroup displayInternal(LayoutInflater layoutInflater, ViewGroup parent) {
- @LayoutRes int actionRowLayout = getActionRowLayout(mFeatureFlagRepository);
+ @LayoutRes int actionRowLayout = getActionRowLayout();
ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate(
R.layout.chooser_grid_preview_image, parent, false);
ScrollableImagePreviewView imagePreview = inflateImagePreviewView(contentPreviewLayout);
@@ -104,8 +99,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
actionRow.setActions(
createActions(
createImagePreviewActions(),
- mActionFactory.createCustomActions(),
- mFeatureFlagRepository));
+ mActionFactory.createCustomActions()));
}
if (mFiles.size() == 0) {
@@ -140,10 +134,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
mFiles.size() - previews.size(),
mImageLoader);
- if (mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW)
- && !TextUtils.isEmpty(mText)
- && mFiles.size() == 1
- && allImages) {
+ if (!TextUtils.isEmpty(mText) && mFiles.size() == 1 && allImages) {
setTextInImagePreviewVisibility(contentPreviewLayout, mActionFactory);
updateTextWithImageHeadline(contentPreviewLayout);
} else {
diff --git a/java/src/com/android/intentresolver/flags/Flags.kt b/java/src/com/android/intentresolver/flags/Flags.kt
index 40f32bf3..b303dd1a 100644
--- a/java/src/com/android/intentresolver/flags/Flags.kt
+++ b/java/src/com/android/intentresolver/flags/Flags.kt
@@ -21,32 +21,8 @@ import com.android.systemui.flags.UnreleasedFlag
// Flag id, name and namespace should be kept in sync with [com.android.systemui.flags.Flags] to
// make the flags available in the flag flipper app (see go/sysui-flags).
+// All flags added should be included in UnbundledChooserActivityTest.ALL_FLAGS.
object Flags {
- const val SHARESHEET_CUSTOM_ACTIONS_NAME = "sharesheet_custom_actions"
- const val SHARESHEET_RESELECTION_ACTION_NAME = "sharesheet_reselection_action"
- const val SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME = "sharesheet_image_text_preview"
- const val SHARESHEET_SCROLLABLE_IMAGE_PREVIEW_NAME = "sharesheet_scrollable_image_preview"
-
- // TODO(b/266983432) Tracking Bug
- @JvmField
- val SHARESHEET_CUSTOM_ACTIONS = releasedFlag(1501, SHARESHEET_CUSTOM_ACTIONS_NAME)
-
- // TODO(b/266982749) Tracking Bug
- @JvmField
- val SHARESHEET_RESELECTION_ACTION = releasedFlag(1502, SHARESHEET_RESELECTION_ACTION_NAME)
-
- // TODO(b/266983474) Tracking Bug
- @JvmField
- val SHARESHEET_IMAGE_AND_TEXT_PREVIEW = releasedFlag(
- id = 1503, name = SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME
- )
-
- // TODO(b/267355521) Tracking Bug
- @JvmField
- val SHARESHEET_SCROLLABLE_IMAGE_PREVIEW = releasedFlag(
- 1504, SHARESHEET_SCROLLABLE_IMAGE_PREVIEW_NAME
- )
-
private fun releasedFlag(id: Int, name: String) =
ReleasedFlag(id, name, "systemui")
diff --git a/java/src/com/android/intentresolver/widget/ChooserImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ChooserImagePreviewView.kt
deleted file mode 100644
index 6273296d..00000000
--- a/java/src/com/android/intentresolver/widget/ChooserImagePreviewView.kt
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.intentresolver.widget
-
-import android.animation.ObjectAnimator
-import android.content.Context
-import android.net.Uri
-import android.util.AttributeSet
-import android.view.LayoutInflater
-import android.view.animation.DecelerateInterpolator
-import android.widget.RelativeLayout
-import androidx.core.view.isVisible
-import com.android.intentresolver.R
-import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.MainScope
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-import com.android.internal.R as IntR
-
-private const val IMAGE_FADE_IN_MILLIS = 150L
-
-class ChooserImagePreviewView : RelativeLayout, ImagePreviewView {
-
- constructor(context: Context) : this(context, null)
- constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
-
- constructor(
- context: Context, attrs: AttributeSet?, defStyleAttr: Int
- ) : this(context, attrs, defStyleAttr, 0)
-
- constructor(
- context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int
- ) : super(context, attrs, defStyleAttr, defStyleRes)
-
- private val coroutineScope = MainScope()
- private lateinit var mainImage: RoundedRectImageView
- private lateinit var secondLargeImage: RoundedRectImageView
- private lateinit var secondSmallImage: RoundedRectImageView
- private lateinit var thirdImage: RoundedRectImageView
-
- private var loadImageJob: Job? = null
- private var transitionStatusElementCallback: TransitionElementStatusCallback? = null
-
- override fun onFinishInflate() {
- LayoutInflater.from(context)
- .inflate(R.layout.chooser_image_preview_view_internals, this, true)
- mainImage = requireViewById(IntR.id.content_preview_image_1_large)
- secondLargeImage = requireViewById(IntR.id.content_preview_image_2_large)
- secondSmallImage = requireViewById(IntR.id.content_preview_image_2_small)
- thirdImage = requireViewById(IntR.id.content_preview_image_3_small)
- }
-
- /**
- * Specifies a transition animation target readiness callback. The callback will be
- * invoked once when views preparation is done.
- * Should be called before [setImages].
- */
- override fun setTransitionElementStatusCallback(callback: TransitionElementStatusCallback?) {
- transitionStatusElementCallback = callback
- }
-
- fun setImages(uris: List<Uri>, imageLoader: ImageLoader) {
- loadImageJob?.cancel()
- loadImageJob = coroutineScope.launch {
- when (uris.size) {
- 0 -> hideAllViews()
- 1 -> showOneImage(uris, imageLoader)
- 2 -> showTwoImages(uris, imageLoader)
- else -> showThreeImages(uris, imageLoader)
- }
- }
- }
-
- private fun hideAllViews() {
- mainImage.isVisible = false
- secondLargeImage.isVisible = false
- secondSmallImage.isVisible = false
- thirdImage.isVisible = false
- invokeTransitionViewReadyCallback()
- }
-
- private suspend fun showOneImage(uris: List<Uri>, imageLoader: ImageLoader) {
- secondLargeImage.isVisible = false
- secondSmallImage.isVisible = false
- thirdImage.isVisible = false
- showImages(uris, imageLoader, mainImage)
- }
-
- private suspend fun showTwoImages(uris: List<Uri>, imageLoader: ImageLoader) {
- secondSmallImage.isVisible = false
- thirdImage.isVisible = false
- showImages(uris, imageLoader, mainImage, secondLargeImage)
- }
-
- private suspend fun showThreeImages(uris: List<Uri>, imageLoader: ImageLoader) {
- secondLargeImage.isVisible = false
- showImages(uris, imageLoader, mainImage, secondSmallImage, thirdImage)
- thirdImage.setExtraImageCount(uris.size - 3)
- }
-
- private suspend fun showImages(
- uris: List<Uri>, imageLoader: ImageLoader, vararg views: RoundedRectImageView
- ) = coroutineScope {
- for (i in views.indices) {
- launch {
- loadImageIntoView(views[i], uris[i], imageLoader)
- }
- }
- }
-
- private suspend fun loadImageIntoView(
- view: RoundedRectImageView, uri: Uri, imageLoader: ImageLoader
- ) {
- val bitmap = runCatching {
- imageLoader(uri)
- }.getOrDefault(null)
- if (bitmap == null) {
- view.isVisible = false
- if (view === mainImage) {
- invokeTransitionViewReadyCallback()
- }
- } else {
- view.isVisible = true
- view.setImageBitmap(bitmap)
-
- view.alpha = 0f
- ObjectAnimator.ofFloat(view, "alpha", 0.0f, 1.0f).apply {
- interpolator = DecelerateInterpolator(1.0f)
- duration = IMAGE_FADE_IN_MILLIS
- start()
- }
- if (view === mainImage && transitionStatusElementCallback != null) {
- view.waitForPreDraw()
- invokeTransitionViewReadyCallback()
- }
- }
- }
-
- private fun invokeTransitionViewReadyCallback() {
- transitionStatusElementCallback?.apply {
- if (mainImage.isVisible && mainImage.drawable != null) {
- mainImage.transitionName?.let { onTransitionElementReady(it) }
- }
- onAllTransitionElementsReady()
- }
- transitionStatusElementCallback = null
- }
-}