summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2023-06-10 01:24:04 +0000
committer Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2023-06-10 01:24:04 +0000
commite2714a122f472ab55ff243ec08f103c93e4e061d (patch)
tree0dd4e0ba6d171cc288cb5afdcc40641b7f1d7241 /java/src
parent7e9de9118ffc0d4f5657353a13825388e0e4d8af (diff)
parentc5155ad57306f17e1b07ccf5e7e3c4bad2892c6a (diff)
Snap for 10296977 from c5155ad57306f17e1b07ccf5e7e3c4bad2892c6a to udc-release
Change-Id: Ia072c9063e5c704b2db15688830c3c04f958e52a
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java32
-rw-r--r--java/src/com/android/intentresolver/grid/ChooserGridAdapter.java10
-rw-r--r--java/src/com/android/intentresolver/icons/DefaultTargetDataLoader.kt1
-rw-r--r--java/src/com/android/intentresolver/icons/LoadDirectShareIconTask.java20
-rw-r--r--java/src/com/android/intentresolver/util/UriFilters.kt27
5 files changed, 36 insertions, 54 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index a2dff970..c8062830 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -99,7 +99,6 @@ 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;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -143,8 +142,6 @@ public class ChooserActivity extends ResolverActivity implements
*/
public static final String FIRST_IMAGE_PREVIEW_TRANSITION_NAME = "screenshot_preview_image";
- private static final String PREF_NUM_SHEET_EXPANSIONS = "pref_num_sheet_expansions";
-
private static final boolean DEBUG = true;
public static final String LAUNCH_LOCATION_DIRECT_SHARE = "direct_share";
@@ -323,21 +320,8 @@ public class ChooserActivity extends ResolverActivity implements
mResolverDrawerLayout.addOnLayoutChangeListener(this::handleLayoutChange);
mResolverDrawerLayout.setOnCollapsedChangedListener(
- new ResolverDrawerLayout.OnCollapsedChangedListener() {
-
- // Only consider one expansion per activity creation
- private boolean mWrittenOnce = false;
-
- @Override
- public void onCollapsedChanged(boolean isCollapsed) {
- if (!isCollapsed && !mWrittenOnce) {
- incrementNumSheetExpansions();
- mWrittenOnce = true;
- }
- getChooserActivityLogger()
- .logSharesheetExpansionChanged(isCollapsed);
- }
- });
+ isCollapsed ->
+ getChooserActivityLogger().logSharesheetExpansionChanged(isCollapsed));
}
if (DEBUG) {
@@ -725,15 +709,6 @@ public class ChooserActivity extends ResolverActivity implements
return resolver.query(uri, null, null, null, null);
}
- private int getNumSheetExpansions() {
- return getPreferences(Context.MODE_PRIVATE).getInt(PREF_NUM_SHEET_EXPANSIONS, 0);
- }
-
- private void incrementNumSheetExpansions() {
- getPreferences(Context.MODE_PRIVATE).edit().putInt(PREF_NUM_SHEET_EXPANSIONS,
- getNumSheetExpansions() + 1).apply();
- }
-
@Override
protected void onStop() {
super.onStop();
@@ -1248,8 +1223,7 @@ public class ChooserActivity extends ResolverActivity implements
},
chooserListAdapter,
shouldShowContentPreview(),
- mMaxTargetsPerRow,
- getNumSheetExpansions());
+ mMaxTargetsPerRow);
}
@VisibleForTesting
diff --git a/java/src/com/android/intentresolver/grid/ChooserGridAdapter.java b/java/src/com/android/intentresolver/grid/ChooserGridAdapter.java
index e6f70d4f..8db03645 100644
--- a/java/src/com/android/intentresolver/grid/ChooserGridAdapter.java
+++ b/java/src/com/android/intentresolver/grid/ChooserGridAdapter.java
@@ -99,8 +99,6 @@ public final class ChooserGridAdapter extends RecyclerView.Adapter<RecyclerView.
private static final int VIEW_TYPE_CALLER_AND_RANK = 5;
private static final int VIEW_TYPE_FOOTER = 6;
- private static final int NUM_EXPANSIONS_TO_HIDE_AZ_LABEL = 20;
-
private final ChooserActivityDelegate mChooserActivityDelegate;
private final ChooserListAdapter mChooserListAdapter;
private final LayoutInflater mLayoutInflater;
@@ -109,7 +107,6 @@ public final class ChooserGridAdapter extends RecyclerView.Adapter<RecyclerView.
private final boolean mShouldShowContentPreview;
private final int mChooserWidthPixels;
private final int mChooserRowTextOptionTranslatePixelSize;
- private final boolean mShowAzLabelIfPoss;
private int mChooserTargetWidth = 0;
@@ -120,8 +117,7 @@ public final class ChooserGridAdapter extends RecyclerView.Adapter<RecyclerView.
ChooserActivityDelegate chooserActivityDelegate,
ChooserListAdapter wrappedAdapter,
boolean shouldShowContentPreview,
- int maxTargetsPerRow,
- int numSheetExpansions) {
+ int maxTargetsPerRow) {
super();
mChooserActivityDelegate = chooserActivityDelegate;
@@ -136,8 +132,6 @@ public final class ChooserGridAdapter extends RecyclerView.Adapter<RecyclerView.
mChooserRowTextOptionTranslatePixelSize = context.getResources().getDimensionPixelSize(
R.dimen.chooser_row_text_option_translate);
- mShowAzLabelIfPoss = numSheetExpansions < NUM_EXPANSIONS_TO_HIDE_AZ_LABEL;
-
wrappedAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
@@ -243,7 +237,7 @@ public final class ChooserGridAdapter extends RecyclerView.Adapter<RecyclerView.
public int getAzLabelRowCount() {
// Only show a label if the a-z list is showing
- return (mShowAzLabelIfPoss && mChooserListAdapter.getAlphaTargetCount() > 0) ? 1 : 0;
+ return (mChooserListAdapter.getAlphaTargetCount() > 0) ? 1 : 0;
}
@Override
diff --git a/java/src/com/android/intentresolver/icons/DefaultTargetDataLoader.kt b/java/src/com/android/intentresolver/icons/DefaultTargetDataLoader.kt
index 0414dea7..0e4d0209 100644
--- a/java/src/com/android/intentresolver/icons/DefaultTargetDataLoader.kt
+++ b/java/src/com/android/intentresolver/icons/DefaultTargetDataLoader.kt
@@ -86,7 +86,6 @@ class DefaultTargetDataLoader(
LoadDirectShareIconTask(
context.createContextAsUser(userHandle, 0),
info,
- userHandle,
presentationFactory,
) { result ->
removeTask(taskId)
diff --git a/java/src/com/android/intentresolver/icons/LoadDirectShareIconTask.java b/java/src/com/android/intentresolver/icons/LoadDirectShareIconTask.java
index b7bacc90..6aee69b5 100644
--- a/java/src/com/android/intentresolver/icons/LoadDirectShareIconTask.java
+++ b/java/src/com/android/intentresolver/icons/LoadDirectShareIconTask.java
@@ -28,7 +28,6 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Trace;
-import android.os.UserHandle;
import android.util.Log;
import androidx.annotation.WorkerThread;
@@ -36,6 +35,7 @@ import androidx.annotation.WorkerThread;
import com.android.intentresolver.SimpleIconFactory;
import com.android.intentresolver.TargetPresentationGetter;
import com.android.intentresolver.chooser.SelectableTargetInfo;
+import com.android.intentresolver.util.UriFilters;
import java.util.function.Consumer;
@@ -49,7 +49,6 @@ class LoadDirectShareIconTask extends BaseLoadIconTask {
LoadDirectShareIconTask(
Context context,
SelectableTargetInfo targetInfo,
- UserHandle userHandle,
TargetPresentationGetter.Factory presentationFactory,
Consumer<Drawable> callback) {
super(context, presentationFactory, callback);
@@ -61,11 +60,18 @@ class LoadDirectShareIconTask extends BaseLoadIconTask {
Drawable drawable;
Trace.beginSection("shortcut-icon");
try {
- drawable = getChooserTargetIconDrawable(
- mContext,
- mTargetInfo.getChooserTargetIcon(),
- mTargetInfo.getChooserTargetComponentName(),
- mTargetInfo.getDirectShareShortcutInfo());
+ final Icon icon = mTargetInfo.getChooserTargetIcon();
+ if (icon == null || UriFilters.hasValidIcon(icon)) {
+ drawable = getChooserTargetIconDrawable(
+ mContext,
+ icon,
+ mTargetInfo.getChooserTargetComponentName(),
+ mTargetInfo.getDirectShareShortcutInfo());
+ } else {
+ Log.e(TAG, "Failed to load shortcut icon for "
+ + mTargetInfo.getChooserTargetComponentName() + "; no access");
+ drawable = loadIconPlaceholder();
+ }
} catch (Exception e) {
Log.e(
TAG,
diff --git a/java/src/com/android/intentresolver/util/UriFilters.kt b/java/src/com/android/intentresolver/util/UriFilters.kt
index 8714c314..a4c6e574 100644
--- a/java/src/com/android/intentresolver/util/UriFilters.kt
+++ b/java/src/com/android/intentresolver/util/UriFilters.kt
@@ -19,6 +19,7 @@ package com.android.intentresolver.util
import android.content.ContentProvider.getUserIdFromUri
import android.content.ContentResolver.SCHEME_CONTENT
+import android.graphics.drawable.Icon
import android.graphics.drawable.Icon.TYPE_URI
import android.graphics.drawable.Icon.TYPE_URI_ADAPTIVE_BITMAP
import android.net.Uri
@@ -38,13 +39,14 @@ import android.service.chooser.ChooserAction
*/
val Uri?.ownedByCurrentUser: Boolean
@JvmName("isOwnedByCurrentUser")
- get() = this?.let {
- when (getUserIdFromUri(this, UserHandle.USER_CURRENT)) {
- UserHandle.USER_CURRENT,
- UserHandle.myUserId() -> true
- else -> false
- }
- } == true
+ get() =
+ this?.let {
+ when (getUserIdFromUri(this, UserHandle.USER_CURRENT)) {
+ UserHandle.USER_CURRENT,
+ UserHandle.myUserId() -> true
+ else -> false
+ }
+ } == true
/** Does the [Uri] reference a content provider ('content://')? */
internal val Uri.contentScheme: Boolean
@@ -56,8 +58,15 @@ internal val Uri.contentScheme: Boolean
* @param action the chooser action
* @see [Uri.ownedByCurrentUser]
*/
-fun hasValidIcon(action: ChooserAction) =
- with(action.icon) {
+fun hasValidIcon(action: ChooserAction) = hasValidIcon(action.icon)
+
+/**
+ * Checks if the Icon backed by content:// [Uri] is safe for display.
+ *
+ * @see [Uri.ownedByCurrentUser]
+ */
+fun hasValidIcon(icon: Icon) =
+ with(icon) {
when (type) {
TYPE_URI,
TYPE_URI_ADAPTIVE_BITMAP -> !uri.contentScheme || uri.ownedByCurrentUser