diff options
| author | 2023-06-10 01:24:04 +0000 | |
|---|---|---|
| committer | 2023-06-10 01:24:04 +0000 | |
| commit | e2714a122f472ab55ff243ec08f103c93e4e061d (patch) | |
| tree | 0dd4e0ba6d171cc288cb5afdcc40641b7f1d7241 /java | |
| parent | 7e9de9118ffc0d4f5657353a13825388e0e4d8af (diff) | |
| parent | c5155ad57306f17e1b07ccf5e7e3c4bad2892c6a (diff) | |
Snap for 10296977 from c5155ad57306f17e1b07ccf5e7e3c4bad2892c6a to udc-release
Change-Id: Ia072c9063e5c704b2db15688830c3c04f958e52a
Diffstat (limited to 'java')
9 files changed, 40 insertions, 59 deletions
diff --git a/java/res/layout/chooser_az_label_row.xml b/java/res/layout/chooser_az_label_row.xml index 0e907c10..6a077ded 100644 --- a/java/res/layout/chooser_az_label_row.xml +++ b/java/res/layout/chooser_az_label_row.xml @@ -18,7 +18,7 @@ <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:importantForAccessibility="no" android:src="@drawable/chooser_row_layer_list" - android:paddingTop="16dp" + android:paddingVertical="8dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="center" diff --git a/java/res/layout/resolve_grid_item.xml b/java/res/layout/resolve_grid_item.xml index 704eefc7..25088773 100644 --- a/java/res/layout/resolve_grid_item.xml +++ b/java/res/layout/resolve_grid_item.xml @@ -24,8 +24,7 @@ android:layout_height="wrap_content" android:minHeight="100dp" android:gravity="top|center_horizontal" - android:paddingTop="@dimen/grid_padding_top" - android:paddingBottom="12dp" + android:paddingVertical="@dimen/grid_padding" android:paddingHorizontal="4dp" android:focusable="true" android:background="?android:attr/selectableItemBackgroundBorderless"> diff --git a/java/res/values-h480dp/dimens.xml b/java/res/values-h480dp/dimens.xml index 4d948fe9..b5c86c77 100644 --- a/java/res/values-h480dp/dimens.xml +++ b/java/res/values-h480dp/dimens.xml @@ -23,6 +23,6 @@ <dimen name="chooser_preview_width">-1px</dimen> <dimen name="chooser_preview_image_height_tall">192dp</dimen> - <dimen name="grid_padding_top">10dp</dimen> + <dimen name="grid_padding">10dp</dimen> <dimen name="width_text_image_preview_size">56dp</dimen> </resources> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index ec9ff6b0..6590d70e 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -61,7 +61,7 @@ than 480dp, the values are set in values-h480dp/dimens.xml --> <dimen name="chooser_preview_width">412dp</dimen> <dimen name="chooser_preview_image_height_tall">46dp</dimen> - <dimen name="grid_padding_top">6dp</dimen> + <dimen name="grid_padding">8dp</dimen> <dimen name="width_text_image_preview_size">46dp</dimen> <!-- END SECTION --> </resources> 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 |