diff options
-rw-r--r-- | java/res/layout/chooser_action_row.xml | 21 | ||||
-rw-r--r-- | java/res/layout/chooser_grid_preview_file.xml | 13 | ||||
-rw-r--r-- | java/res/layout/chooser_grid_preview_image.xml | 12 | ||||
-rw-r--r-- | java/res/layout/chooser_grid_preview_text.xml | 12 | ||||
-rw-r--r-- | java/res/layout/scrollable_chooser_action_row.xml | 30 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/ChooserActivity.java | 1 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/ChooserContentPreviewUi.java | 39 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/widget/ScrollableActionRow.kt | 10 |
8 files changed, 96 insertions, 42 deletions
diff --git a/java/res/layout/chooser_action_row.xml b/java/res/layout/chooser_action_row.xml index a6b1e813..620ff704 100644 --- a/java/res/layout/chooser_action_row.xml +++ b/java/res/layout/chooser_action_row.xml @@ -13,11 +13,20 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> - -<com.android.intentresolver.widget.ChooserActionRow +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingLeft="@dimen/chooser_edge_margin_normal" - android:paddingRight="@dimen/chooser_edge_margin_normal" - android:gravity="center" /> + android:layout_height="wrap_content"> + + <com.android.intentresolver.widget.ChooserActionRow + android:id="@androidprv:id/chooser_action_row" + android:layout_width="@dimen/chooser_preview_width" + android:layout_height="wrap_content" + android:paddingLeft="@dimen/chooser_edge_margin_normal" + android:paddingRight="@dimen/chooser_edge_margin_normal" + android:layout_marginBottom="@dimen/chooser_view_spacing" + android:layout_gravity="center_horizontal" + android:gravity="center" /> + +</FrameLayout>
\ No newline at end of file diff --git a/java/res/layout/chooser_grid_preview_file.xml b/java/res/layout/chooser_grid_preview_file.xml index c3392704..e98c3273 100644 --- a/java/res/layout/chooser_grid_preview_file.xml +++ b/java/res/layout/chooser_grid_preview_file.xml @@ -68,13 +68,10 @@ android:singleLine="true"/> </LinearLayout> - <include - android:id="@androidprv:id/chooser_action_row" - layout="@layout/chooser_action_row" - android:layout_width="@dimen/chooser_preview_width" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/chooser_view_spacing" - android:layout_gravity="center" - /> + <ViewStub + android:id="@+id/action_row_stub" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </LinearLayout> diff --git a/java/res/layout/chooser_grid_preview_image.xml b/java/res/layout/chooser_grid_preview_image.xml index 4d15bf75..9d1dc208 100644 --- a/java/res/layout/chooser_grid_preview_image.xml +++ b/java/res/layout/chooser_grid_preview_image.xml @@ -80,14 +80,10 @@ </RelativeLayout> - <include - android:id="@androidprv:id/chooser_action_row" - layout="@layout/chooser_action_row" - android:layout_width="@dimen/chooser_preview_width" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/chooser_view_spacing" - android:layout_gravity="center" - /> + <ViewStub + android:id="@+id/action_row_stub" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> </LinearLayout> diff --git a/java/res/layout/chooser_grid_preview_text.xml b/java/res/layout/chooser_grid_preview_text.xml index 81fdbd08..db7282e3 100644 --- a/java/res/layout/chooser_grid_preview_text.xml +++ b/java/res/layout/chooser_grid_preview_text.xml @@ -52,14 +52,10 @@ </RelativeLayout> - <include - android:id="@androidprv:id/chooser_action_row" - layout="@layout/chooser_action_row" - android:layout_width="@dimen/chooser_preview_width" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/chooser_view_spacing" - android:layout_gravity="center" - /> + <ViewStub + android:id="@+id/action_row_stub" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> <!-- Required sub-layout so we can get the nice rounded corners--> <!-- around this section --> diff --git a/java/res/layout/scrollable_chooser_action_row.xml b/java/res/layout/scrollable_chooser_action_row.xml new file mode 100644 index 00000000..cb5dabf0 --- /dev/null +++ b/java/res/layout/scrollable_chooser_action_row.xml @@ -0,0 +1,30 @@ +<!-- + ~ Copyright (C) 2019 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 + --> + +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <com.android.intentresolver.widget.ScrollableActionRow + android:id="@androidprv:id/chooser_action_row" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:gravity="center" /> +</FrameLayout> diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index c7470ab2..83cdc9ef 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -776,6 +776,7 @@ public class ChooserActivity extends ResolverActivity implements getResources(), getLayoutInflater(), actionFactory, + R.layout.chooser_action_row, parent, previewCoordinator, getContentResolver(), diff --git a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java index f9f4ee98..0cadce4b 100644 --- a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java @@ -34,9 +34,11 @@ import android.util.PluralsMessageFormatter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStub; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.LayoutRes; import androidx.annotation.Nullable; import com.android.intentresolver.widget.ActionRow; @@ -177,6 +179,7 @@ public final class ChooserContentPreviewUi { Resources resources, LayoutInflater layoutInflater, ActionFactory actionFactory, + @LayoutRes int actionRowLayout, ViewGroup parent, ContentPreviewCoordinator previewCoord, ContentResolver contentResolver, @@ -190,7 +193,8 @@ public final class ChooserContentPreviewUi { layoutInflater, createTextPreviewActions(actionFactory), parent, - previewCoord); + previewCoord, + actionRowLayout); break; case CONTENT_PREVIEW_IMAGE: layout = displayImageContentPreview( @@ -200,7 +204,8 @@ public final class ChooserContentPreviewUi { parent, previewCoord, contentResolver, - imageClassifier); + imageClassifier, + actionRowLayout); break; case CONTENT_PREVIEW_FILE: layout = displayFileContentPreview( @@ -210,7 +215,8 @@ public final class ChooserContentPreviewUi { createFilePreviewActions(actionFactory), parent, previewCoord, - contentResolver); + contentResolver, + actionRowLayout); break; default: Log.e(TAG, "Unexpected content preview type: " + previewType); @@ -239,12 +245,12 @@ public final class ChooserContentPreviewUi { LayoutInflater layoutInflater, List<ActionRow.Action> actions, ViewGroup parent, - ContentPreviewCoordinator previewCoord) { + ContentPreviewCoordinator previewCoord, + @LayoutRes int actionRowLayout) { ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate( R.layout.chooser_grid_preview_text, parent, false); - final ActionRow actionRow = - contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); + final ActionRow actionRow = inflateActionRow(contentPreviewLayout, actionRowLayout); if (actionRow != null) { actionRow.setActions(actions); } @@ -312,14 +318,14 @@ public final class ChooserContentPreviewUi { ViewGroup parent, ContentPreviewCoordinator previewCoord, ContentResolver contentResolver, - ImageMimeTypeClassifier imageClassifier) { + ImageMimeTypeClassifier imageClassifier, + @LayoutRes int actionRowLayout) { ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate( R.layout.chooser_grid_preview_image, parent, false); ViewGroup imagePreview = contentPreviewLayout.findViewById( com.android.internal.R.id.content_preview_image_area); - final ActionRow actionRow = - contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); + final ActionRow actionRow = inflateActionRow(contentPreviewLayout, actionRowLayout); if (actionRow != null) { actionRow.setActions(actions); } @@ -403,12 +409,12 @@ public final class ChooserContentPreviewUi { List<ActionRow.Action> actions, ViewGroup parent, ContentPreviewCoordinator previewCoord, - ContentResolver contentResolver) { + ContentResolver contentResolver, + @LayoutRes int actionRowLayout) { ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate( R.layout.chooser_grid_preview_file, parent, false); - final ActionRow actionRow = - contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); + final ActionRow actionRow = inflateActionRow(contentPreviewLayout, actionRowLayout); if (actionRow != null) { actionRow.setActions(actions); } @@ -468,6 +474,15 @@ public final class ChooserContentPreviewUi { return actions; } + private static ActionRow inflateActionRow(ViewGroup parent, @LayoutRes int actionRowLayout) { + final ViewStub stub = parent.findViewById(com.android.intentresolver.R.id.action_row_stub); + if (stub != null) { + stub.setLayoutResource(actionRowLayout); + stub.inflate(); + } + return parent.findViewById(com.android.internal.R.id.chooser_action_row); + } + private static void logContentPreviewWarning(Uri uri) { // The ContentResolver already logs the exception. Log something more informative. Log.w(TAG, "Could not load (" + uri.toString() + ") thumbnail/name for preview. If " diff --git a/java/src/com/android/intentresolver/widget/ScrollableActionRow.kt b/java/src/com/android/intentresolver/widget/ScrollableActionRow.kt index f3a34985..a941b97a 100644 --- a/java/src/com/android/intentresolver/widget/ScrollableActionRow.kt +++ b/java/src/com/android/intentresolver/widget/ScrollableActionRow.kt @@ -17,6 +17,7 @@ package com.android.intentresolver.widget import android.content.Context +import android.graphics.drawable.Drawable import android.util.AttributeSet import android.view.LayoutInflater import android.view.View @@ -104,6 +105,8 @@ class ScrollableActionRow : RecyclerView, ActionRow { fun bind(action: ActionRow.Action) { if (action.icon != null) { action.icon.setBounds(0, 0, iconSize, iconSize) + // some drawables (edit) does not gets tinted when set to the top of the text + // with TextView#setCompoundDrawableRelative view.setCompoundDrawablesRelative(null, action.icon, null, null) } view.text = action.label ?: "" @@ -116,5 +119,12 @@ class ScrollableActionRow : RecyclerView, ActionRow { fun unbind() { view.setOnClickListener(null) } + + private fun tintIcon(drawable: Drawable, view: TextView) { + val tintList = view.compoundDrawableTintList ?: return + drawable.setTintList(tintList) + view.compoundDrawableTintMode?.let { drawable.setTintMode(it) } + view.compoundDrawableTintBlendMode?.let { drawable.setTintBlendMode(it) } + } } } |