summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout/chooser_grid_preview_file.xml9
-rw-r--r--java/res/layout/chooser_grid_preview_image.xml9
-rw-r--r--java/res/layout/chooser_grid_preview_text.xml9
-rw-r--r--java/res/values/strings.xml7
-rw-r--r--java/res/values/styles.xml6
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java32
-rw-r--r--java/src/com/android/intentresolver/ChooserContentPreviewUi.java15
-rw-r--r--java/src/com/android/intentresolver/ChooserRequestParameters.java28
8 files changed, 113 insertions, 2 deletions
diff --git a/java/res/layout/chooser_grid_preview_file.xml b/java/res/layout/chooser_grid_preview_file.xml
index e98c3273..94755114 100644
--- a/java/res/layout/chooser_grid_preview_file.xml
+++ b/java/res/layout/chooser_grid_preview_file.xml
@@ -68,6 +68,15 @@
android:singleLine="true"/>
</LinearLayout>
+ <TextView
+ android:id="@+id/reselection_action"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/select_files"
+ android:gravity="center"
+ style="@style/ReselectionAction" />
+
<ViewStub
android:id="@+id/action_row_stub"
android:layout_width="match_parent"
diff --git a/java/res/layout/chooser_grid_preview_image.xml b/java/res/layout/chooser_grid_preview_image.xml
index 95cee0cb..23bc25d7 100644
--- a/java/res/layout/chooser_grid_preview_image.xml
+++ b/java/res/layout/chooser_grid_preview_image.xml
@@ -33,6 +33,15 @@
android:paddingBottom="@dimen/chooser_view_spacing"
android:background="?android:attr/colorBackground" />
+ <TextView
+ android:id="@+id/reselection_action"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/select_images"
+ android:gravity="center"
+ style="@style/ReselectionAction" />
+
<ViewStub
android:id="@+id/action_row_stub"
android:layout_width="match_parent"
diff --git a/java/res/layout/chooser_grid_preview_text.xml b/java/res/layout/chooser_grid_preview_text.xml
index db7282e3..49a2edff 100644
--- a/java/res/layout/chooser_grid_preview_text.xml
+++ b/java/res/layout/chooser_grid_preview_text.xml
@@ -52,6 +52,15 @@
</RelativeLayout>
+ <TextView
+ android:id="@+id/reselection_action"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/select_text"
+ android:gravity="center"
+ style="@style/ReselectionAction" />
+
<ViewStub
android:id="@+id/action_row_stub"
android:layout_width="match_parent"
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index a536d3bc..59179504 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -101,4 +101,11 @@
<string name="miniresolver_use_personal_browser">Use personal browser</string>
<!-- 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>
</resources>
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index cbbf406d..229512fa 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -46,4 +46,10 @@
<item name="*android:iconfactoryIconSize">@dimen/chooser_icon_size</item>
<item name="*android:iconfactoryBadgeSize">@dimen/chooser_badge_size</item>
</style>
+
+ <style name="ReselectionAction">
+ <item name="android:paddingTop">5dp</item>
+ <item name="android:paddingBottom">5dp</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ </style>
</resources>
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index dce8bde1..5a1d2a39 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -160,6 +160,7 @@ public class ChooserActivity extends ResolverActivity implements
private static final boolean DEBUG = true;
static final boolean ENABLE_CUSTOM_ACTIONS = false;
+ static final boolean ENABLE_RESELECTION_ACTION = false;
public static final String LAUNCH_LOCATION_DIRECT_SHARE = "direct_share";
private static final String SHORTCUT_TARGET = "shortcut_target";
@@ -267,7 +268,11 @@ public class ChooserActivity extends ResolverActivity implements
try {
mChooserRequest = new ChooserRequestParameters(
- getIntent(), getReferrer(), getNearbySharingComponent(), ENABLE_CUSTOM_ACTIONS);
+ getIntent(),
+ getReferrer(),
+ getNearbySharingComponent(),
+ ENABLE_CUSTOM_ACTIONS,
+ ENABLE_RESELECTION_ACTION);
} catch (IllegalArgumentException e) {
Log.e(TAG, "Caller provided invalid Chooser request parameters", e);
finish();
@@ -743,6 +748,18 @@ public class ChooserActivity extends ResolverActivity implements
}
return actions;
}
+
+ @Nullable
+ @Override
+ public Runnable getReselectionAction() {
+ if (!ENABLE_RESELECTION_ACTION) {
+ return null;
+ }
+ PendingIntent reselectionAction = mChooserRequest.getReselectionAction();
+ return reselectionAction == null
+ ? null
+ : createReselectionRunnable(reselectionAction);
+ }
};
ViewGroup layout = ChooserContentPreviewUi.displayContentPreview(
@@ -962,6 +979,19 @@ public class ChooserActivity extends ResolverActivity implements
);
}
+ private Runnable createReselectionRunnable(PendingIntent pendingIntent) {
+ return () -> {
+ try {
+ pendingIntent.send();
+ } catch (PendingIntent.CanceledException e) {
+ Log.d(TAG, "Payload reselection action has been cancelled");
+ }
+ // TODO: add reporting
+ setResult(RESULT_OK);
+ finish();
+ };
+ }
+
@Nullable
private View getFirstVisibleImgPreviewView() {
View firstImage = findViewById(com.android.internal.R.id.content_preview_image_1_large);
diff --git a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
index 27645da4..390c47c7 100644
--- a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
@@ -90,6 +90,12 @@ public final class ChooserContentPreviewUi {
/** Create custom actions */
List<ActionRow.Action> createCustomActions();
+
+ /**
+ * Provides a re-selection action, if any.
+ */
+ @Nullable
+ Runnable getReselectionAction();
}
/**
@@ -218,6 +224,15 @@ public final class ChooserContentPreviewUi {
default:
Log.e(TAG, "Unexpected content preview type: " + previewType);
}
+ Runnable reselectionAction = actionFactory.getReselectionAction();
+ if (reselectionAction != null && layout != null
+ && ChooserActivity.ENABLE_RESELECTION_ACTION) {
+ View reselectionView = layout.findViewById(R.id.reselection_action);
+ if (reselectionView != null) {
+ reselectionView.setVisibility(View.VISIBLE);
+ reselectionView.setOnClickListener(view -> reselectionAction.run());
+ }
+ }
return layout;
}
diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java
index a7e543a5..97bee82c 100644
--- a/java/src/com/android/intentresolver/ChooserRequestParameters.java
+++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java
@@ -18,6 +18,7 @@ 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;
@@ -72,6 +73,7 @@ public class ChooserRequestParameters {
private final ImmutableList<ComponentName> mFilteredComponentNames;
private final ImmutableList<ChooserTarget> mCallerChooserTargets;
private final ImmutableList<ChooserAction> mChooserActions;
+ private final PendingIntent mReselectionAction;
private final boolean mRetainInOnStop;
@Nullable
@@ -99,7 +101,8 @@ public class ChooserRequestParameters {
final Intent clientIntent,
final Uri referrer,
@Nullable final ComponentName nearbySharingComponent,
- boolean extractCustomActions) {
+ boolean extractCustomActions,
+ boolean extractReslectionAction) {
final Intent requestedTarget = parseTargetIntentExtra(
clientIntent.getParcelableExtra(Intent.EXTRA_INTENT));
mTarget = intentWithModifiedLaunchFlags(requestedTarget);
@@ -137,6 +140,9 @@ public class ChooserRequestParameters {
mChooserActions = extractCustomActions
? getChooserActions(clientIntent)
: ImmutableList.of();
+ mReselectionAction = extractReslectionAction
+ ? getReselectionActionExtra(clientIntent)
+ : null;
}
public Intent getTargetIntent() {
@@ -182,6 +188,11 @@ public class ChooserRequestParameters {
return mChooserActions;
}
+ @Nullable
+ public PendingIntent getReselectionAction() {
+ return mReselectionAction;
+ }
+
/**
* Whether the {@link ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP} behavior was requested.
*/
@@ -321,6 +332,21 @@ public class ChooserRequestParameters {
.collect(toImmutableList());
}
+ @Nullable
+ private static PendingIntent getReselectionActionExtra(Intent intent) {
+ try {
+ return intent.getParcelableExtra(
+ Intent.EXTRA_CHOOSER_PAYLOAD_RESELECTION_ACTION,
+ PendingIntent.class);
+ } catch (Throwable t) {
+ Log.w(
+ TAG,
+ "Unable to retrieve Intent.EXTRA_CHOOSER_PAYLOAD_RESELECTION_ACTION argument",
+ t);
+ return null;
+ }
+ }
+
private static <T> Collector<T, ?, ImmutableList<T>> toImmutableList() {
return Collectors.collectingAndThen(Collectors.toList(), ImmutableList::copyOf);
}