summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout/chooser_grid_preview_file.xml1
-rw-r--r--java/res/layout/chooser_grid_preview_image.xml1
-rw-r--r--java/res/layout/chooser_grid_preview_text.xml1
-rw-r--r--java/res/values/strings.xml7
-rw-r--r--java/src/com/android/intentresolver/ChooserActionFactory.java59
-rw-r--r--java/src/com/android/intentresolver/ChooserRequestParameters.java9
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java2
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java8
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt12
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java16
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt2
11 files changed, 58 insertions, 60 deletions
diff --git a/java/res/layout/chooser_grid_preview_file.xml b/java/res/layout/chooser_grid_preview_file.xml
index 095e5d62..6ba06b3d 100644
--- a/java/res/layout/chooser_grid_preview_file.xml
+++ b/java/res/layout/chooser_grid_preview_file.xml
@@ -74,7 +74,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
- android:text="@string/select_files"
android:gravity="center"
style="@style/ReselectionAction" />
diff --git a/java/res/layout/chooser_grid_preview_image.xml b/java/res/layout/chooser_grid_preview_image.xml
index 792b7d4d..1c0e4c2e 100644
--- a/java/res/layout/chooser_grid_preview_image.xml
+++ b/java/res/layout/chooser_grid_preview_image.xml
@@ -64,7 +64,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
- android:text="@string/select_images"
android:gravity="center"
style="@style/ReselectionAction" />
diff --git a/java/res/layout/chooser_grid_preview_text.xml b/java/res/layout/chooser_grid_preview_text.xml
index 49a2edff..f25eca9a 100644
--- a/java/res/layout/chooser_grid_preview_text.xml
+++ b/java/res/layout/chooser_grid_preview_text.xml
@@ -57,7 +57,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
- android:text="@string/select_text"
android:gravity="center"
style="@style/ReselectionAction" />
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 1cd39d42..3f0c12d3 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -184,13 +184,6 @@
<!-- Button option. Open the link in the work browser. [CHAR LIMIT=NONE] -->
<string name="miniresolver_use_work_browser">Use work browser</string>
- <!-- Tittle for a button. Launches client-provided content reselection action. -->
- <string name="select_files">Select Files</string>
- <!-- Tittle for a button. Launches client-provided content reselection action. -->
- <string name="select_images">Select Images</string>
- <!-- Tittle for a button. Launches client-provided content reselection action. -->
- <string name="select_text">Select Text</string>
-
<!-- Title for a button. Excludes a text from the shared content (a media and a text). -->
<string name="exclude_text">Exclude text</string>
<!-- Title for a button. Adds back a (previously excluded) text into the shared content. -->
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java
index 82103b39..d0e6e53f 100644
--- a/java/src/com/android/intentresolver/ChooserActionFactory.java
+++ b/java/src/com/android/intentresolver/ChooserActionFactory.java
@@ -97,7 +97,7 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
private final TargetInfo mNearbySharingTarget;
private final Runnable mOnNearbyButtonClicked;
private final ImmutableList<ChooserAction> mCustomActions;
- private final Runnable mOnModifyShareClicked;
+ private final @Nullable ChooserAction mModifyShareAction;
private final Consumer<Boolean> mExcludeSharedTextAction;
private final Consumer</* @Nullable */ Integer> mFinishCallback;
private final ChooserActivityLogger mLogger;
@@ -162,10 +162,7 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
logger),
chooserRequest.getChooserActions(),
(featureFlagRepository.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)
- ? createModifyShareRunnable(
- chooserRequest.getModifyShareAction(),
- finishCallback,
- logger)
+ ? chooserRequest.getModifyShareAction()
: null),
onUpdateSharedTextIsExcluded,
logger,
@@ -183,7 +180,7 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
TargetInfo nearbySharingTarget,
Runnable onNearbyButtonClicked,
List<ChooserAction> customActions,
- @Nullable Runnable onModifyShareClicked,
+ @Nullable ChooserAction modifyShareAction,
Consumer<Boolean> onUpdateSharedTextIsExcluded,
ChooserActivityLogger logger,
Consumer</* @Nullable */ Integer> finishCallback) {
@@ -196,7 +193,7 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
mNearbySharingTarget = nearbySharingTarget;
mOnNearbyButtonClicked = onNearbyButtonClicked;
mCustomActions = ImmutableList.copyOf(customActions);
- mOnModifyShareClicked = onModifyShareClicked;
+ mModifyShareAction = modifyShareAction;
mExcludeSharedTextAction = onUpdateSharedTextIsExcluded;
mLogger = logger;
mFinishCallback = finishCallback;
@@ -247,8 +244,15 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
public List<ActionRow.Action> createCustomActions() {
List<ActionRow.Action> actions = new ArrayList<>();
for (int i = 0; i < mCustomActions.size(); i++) {
+ final int position = i;
ActionRow.Action actionRow = createCustomAction(
- mContext, mCustomActions.get(i), mFinishCallback, i, mLogger);
+ mContext,
+ mCustomActions.get(i),
+ mFinishCallback,
+ () -> {
+ mLogger.logCustomActionSelected(position);
+ }
+ );
if (actionRow != null) {
actions.add(actionRow);
}
@@ -261,27 +265,14 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
*/
@Override
@Nullable
- public Runnable getModifyShareAction() {
- return mOnModifyShareClicked;
- }
-
- private static Runnable createModifyShareRunnable(
- PendingIntent pendingIntent,
- Consumer<Integer> finishCallback,
- ChooserActivityLogger logger) {
- if (pendingIntent == null) {
- return null;
- }
-
- return () -> {
- try {
- pendingIntent.send();
- } catch (PendingIntent.CanceledException e) {
- Log.d(TAG, "Payload reselection action has been cancelled");
- }
- logger.logActionSelected(ChooserActivityLogger.SELECTION_TYPE_MODIFY_SHARE);
- finishCallback.accept(Activity.RESULT_OK);
- };
+ public ActionRow.Action getModifyShareAction() {
+ return createCustomAction(
+ mContext,
+ mModifyShareAction,
+ mFinishCallback,
+ () -> {
+ mLogger.logActionSelected(ChooserActivityLogger.SELECTION_TYPE_MODIFY_SHARE);
+ });
}
/**
@@ -481,8 +472,10 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
Context context,
ChooserAction action,
Consumer<Integer> finishCallback,
- int position,
- ChooserActivityLogger logger) {
+ Runnable loggingRunnable) {
+ if (action == null || action.getAction() == null) {
+ return null;
+ }
Drawable icon = action.getIcon().loadDrawable(context);
if (icon == null && TextUtils.isEmpty(action.getLabel())) {
return null;
@@ -507,7 +500,9 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
} catch (PendingIntent.CanceledException e) {
Log.d(TAG, "Custom action, " + action.getLabel() + ", has been cancelled");
}
- logger.logCustomActionSelected(position);
+ if (loggingRunnable != null) {
+ loggingRunnable.run();
+ }
finishCallback.accept(Activity.RESULT_OK);
}
);
diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java
index dbd72a1f..8e0014d6 100644
--- a/java/src/com/android/intentresolver/ChooserRequestParameters.java
+++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java
@@ -18,7 +18,6 @@ package com.android.intentresolver;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
@@ -78,7 +77,7 @@ public class ChooserRequestParameters {
private final ImmutableList<ComponentName> mFilteredComponentNames;
private final ImmutableList<ChooserTarget> mCallerChooserTargets;
private final @NonNull ImmutableList<ChooserAction> mChooserActions;
- private final PendingIntent mModifyShareAction;
+ private final ChooserAction mModifyShareAction;
private final boolean mRetainInOnStop;
@Nullable
@@ -204,7 +203,7 @@ public class ChooserRequestParameters {
}
@Nullable
- public PendingIntent getModifyShareAction() {
+ public ChooserAction getModifyShareAction() {
return mModifyShareAction;
}
@@ -352,11 +351,11 @@ public class ChooserRequestParameters {
}
@Nullable
- private static PendingIntent getModifyShareAction(Intent intent) {
+ private static ChooserAction getModifyShareAction(Intent intent) {
try {
return intent.getParcelableExtra(
Intent.EXTRA_CHOOSER_MODIFY_SHARE_ACTION,
- PendingIntent.class);
+ ChooserAction.class);
} catch (Throwable t) {
Log.w(
TAG,
diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
index 205be444..8cc747bf 100644
--- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
@@ -74,7 +74,7 @@ public final class ChooserContentPreviewUi {
* Provides a share modification action, if any.
*/
@Nullable
- Runnable getModifyShareAction();
+ ActionRow.Action getModifyShareAction();
/**
* <p>
diff --git a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
index 39856e66..96f1c376 100644
--- a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
@@ -30,6 +30,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.animation.DecelerateInterpolator;
+import android.widget.TextView;
import androidx.annotation.LayoutRes;
@@ -117,13 +118,14 @@ abstract class ContentPreviewUi {
ViewGroup layout,
ChooserContentPreviewUi.ActionFactory actionFactory,
FeatureFlagRepository featureFlagRepository) {
- Runnable modifyShareAction = actionFactory.getModifyShareAction();
+ ActionRow.Action modifyShareAction = actionFactory.getModifyShareAction();
if (modifyShareAction != null && layout != null
&& featureFlagRepository.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)) {
- View modifyShareView = layout.findViewById(R.id.reselection_action);
+ TextView modifyShareView = layout.findViewById(R.id.reselection_action);
if (modifyShareView != null) {
+ modifyShareView.setText(modifyShareAction.getLabel());
modifyShareView.setVisibility(View.VISIBLE);
- modifyShareView.setOnClickListener(view -> modifyShareAction.run());
+ modifyShareView.setOnClickListener(view -> modifyShareAction.getOnClicked().run());
}
}
}
diff --git a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
index af134fcd..98c7d5ee 100644
--- a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
+++ b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt
@@ -33,6 +33,7 @@ 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
@@ -50,6 +51,7 @@ class ChooserActionFactoryTest {
private val logger = mock<ChooserActivityLogger>()
private val flags = mock<FeatureFlagRepository>()
private val actionLabel = "Action label"
+ private val modifyShareLabel = "Modify share"
private val testAction = "com.android.intentresolver.testaction"
private val countdown = CountDownLatch(1)
private val testReceiver: BroadcastReceiver = object : BroadcastReceiver() {
@@ -115,7 +117,8 @@ class ChooserActionFactoryTest {
fun testModifyShareAction() {
val factory = createFactory(includeModifyShare = true)
- factory.modifyShareAction!!.run()
+ val action = factory.modifyShareAction ?: error("Modify share action should not be null")
+ action.onClicked.run()
Mockito.verify(logger).logActionSelected(
eq(ChooserActivityLogger.SELECTION_TYPE_MODIFY_SHARE))
@@ -137,7 +140,12 @@ class ChooserActionFactoryTest {
whenever(chooserRequest.chooserActions).thenReturn(ImmutableList.of(action))
if (includeModifyShare) {
- whenever(chooserRequest.modifyShareAction).thenReturn(testPendingIntent)
+ val modifyShare = ChooserAction.Builder(
+ Icon.createWithResource("", Resources.ID_NULL),
+ modifyShareLabel,
+ testPendingIntent
+ ).build()
+ whenever(chooserRequest.modifyShareAction).thenReturn(modifyShare)
}
return ChooserActionFactory(
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index 3bf9f1d8..596b546e 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -1726,13 +1726,17 @@ public class UnbundledChooserActivityTest {
Context testContext = InstrumentationRegistry.getInstrumentation().getContext();
final String modifyShareAction = "test-broadcast-receiver-action";
Intent chooserIntent = Intent.createChooser(createSendTextIntent(), null);
+ String label = "modify share";
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(
+ testContext,
+ 123,
+ new Intent(modifyShareAction),
+ PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT);
+ ChooserAction action = new ChooserAction.Builder(Icon.createWithBitmap(
+ createBitmap()), label, pendingIntent).build();
chooserIntent.putExtra(
Intent.EXTRA_CHOOSER_MODIFY_SHARE_ACTION,
- PendingIntent.getBroadcast(
- testContext,
- 123,
- new Intent(modifyShareAction),
- PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT));
+ action);
// Start activity
mActivityRule.launchActivity(chooserIntent);
waitForIdle();
@@ -1747,7 +1751,7 @@ public class UnbundledChooserActivityTest {
testContext.registerReceiver(testReceiver, new IntentFilter(modifyShareAction));
try {
- onView(withText(R.string.select_text)).perform(click());
+ onView(withText(label)).perform(click());
broadcastInvoked.await();
} finally {
testContext.unregisterReceiver(testReceiver);
diff --git a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
index d870a8c2..23bfaf9f 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
@@ -54,7 +54,7 @@ class ChooserContentPreviewUiTest {
override fun createEditButton(): ActionRow.Action? = null
override fun createNearbyButton(): ActionRow.Action? = null
override fun createCustomActions(): List<ActionRow.Action> = emptyList()
- override fun getModifyShareAction(): Runnable? = null
+ override fun getModifyShareAction(): ActionRow.Action? = null
override fun getExcludeSharedTextAction(): Consumer<Boolean> = Consumer<Boolean> {}
}
private val transitionCallback = mock<ImagePreviewView.TransitionElementStatusCallback>()