diff options
129 files changed, 1220 insertions, 558 deletions
diff --git a/proguard.flags b/proguard.flags index 76449d4e9..34071fa6d 100644 --- a/proguard.flags +++ b/proguard.flags @@ -106,6 +106,7 @@ int dir_menu_view_in_owner; int drawer_layout; int inspector_details_view; + int job_progress_panel_title; int option_menu_create_dir; int option_menu_debug; int option_menu_extract_all; diff --git a/res/flag(com.android.documentsui.flags.use_material3)/color/breadcrumb_item_ripple_color.xml b/res/flag(com.android.documentsui.flags.use_material3)/color/breadcrumb_item_ripple_color.xml new file mode 100644 index 000000000..1ca24551e --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/color/breadcrumb_item_ripple_color.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2025 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 + + https://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. + --> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:alpha="@dimen/ripple_overlay_alpha" android:color="?attr/colorOnSurfaceVariant"/> +</selector>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/color/grid_item_ripple_color.xml b/res/flag(com.android.documentsui.flags.use_material3)/color/grid_item_ripple_color.xml new file mode 100644 index 000000000..85e5b46ce --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/color/grid_item_ripple_color.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2025 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 + --> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_enabled="false" android:color="@android:color/transparent" /> + <!-- By default <ripple> introduces a gray-ish layer for the focused state which we don't + want, hence explicitly setting focused ripple color to transparent to get rid of that. + --> + <item android:state_focused="true" android:color="@android:color/transparent" /> + <item android:state_selected="true" android:alpha="@dimen/ripple_overlay_alpha" + android:color="?attr/colorOnPrimaryContainer" /> + <item android:alpha="@dimen/ripple_overlay_alpha" + android:color="?attr/colorOnSurface" /> +</selector> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/color/horizontal_breadcrumb_color.xml b/res/flag(com.android.documentsui.flags.use_material3)/color/horizontal_breadcrumb_color.xml index ab511326d..f615b257c 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/color/horizontal_breadcrumb_color.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/color/horizontal_breadcrumb_color.xml @@ -15,7 +15,7 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_enabled="true" - android:color="?android:colorAccent" /> - <item android:color="?android:attr/colorControlNormal" /> + <item android:state_enabled="false" + android:color="?attr/colorOnSurface" /> + <item android:color="?attr/colorOnSurfaceVariant" /> </selector> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_background.xml b/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_background.xml index 8e6282199..3ca0191cd 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_background.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_background.xml @@ -17,25 +17,37 @@ <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:color="?attr/colorControlHighlight"> + android:color="@color/breadcrumb_item_ripple_color"> <item android:id="@android:id/mask" - android:drawable="@android:color/white"/> + android:drawable="@drawable/breadcrumb_item_mask"/> <item> <selector> - <item - app:state_highlighted="true" - android:drawable="@color/item_breadcrumb_background_hovered"/> - <item - app:state_highlighted="false" - android:drawable="@android:color/transparent"> - <corners - android:topLeftRadius="2dp" - android:topRightRadius="2dp" - android:bottomLeftRadius="2dp" - android:bottomRightRadius="2dp" - /> + <item android:state_pressed="true"> + <shape android:tint="?attr/colorOnSurfaceVariant"> + <corners android:radius="@dimen/breadcrumb_item_height" /> + <solid android:color="@color/overlay_hover_color_percentage" /> + </shape> + </item> + <item android:state_focused="true"> + <shape> + <corners android:radius="@dimen/breadcrumb_item_height" /> + <stroke + android:width="@dimen/focus_ring_width" + android:color="?attr/colorSecondary" /> + </shape> + </item> + <item android:state_hovered="true"> + <shape android:tint="?attr/colorOnSurfaceVariant"> + <corners android:radius="@dimen/breadcrumb_item_height" /> + <solid android:color="@color/overlay_hover_color_percentage" /> + </shape> + </item> + + <!-- Default: use the container background. --> + <item> + <color android:color="@android:color/transparent"/> </item> </selector> </item> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_mask.xml b/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_mask.xml new file mode 100644 index 000000000..c64be0765 --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/drawable/breadcrumb_item_mask.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2025 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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners android:radius="@dimen/breadcrumb_item_height" /> + <!-- The color here doesn't matter, it's just being used as a mask. --> + <solid android:color="@android:color/white" /> +</shape>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_item_mask.xml b/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_item_mask.xml new file mode 100644 index 000000000..98473059c --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_item_mask.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2025 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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <!-- The color here doesn't matter, it's just being used as a mask. --> + <solid android:color="@android:color/white" /> +</shape>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_nameplate_background.xml b/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_nameplate_background.xml index 502efaede..087fc1c15 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_nameplate_background.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_nameplate_background.xml @@ -14,56 +14,124 @@ limitations under the License. --> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <!-- selected --> - <item - android:state_focused="true" - android:state_hovered="true" - android:state_selected="true"> - <layer-list> +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="@color/grid_item_ripple_color"> + + <!-- The mask below only works for the ripple itself, doesn't work for other <item>s, we + need to explicitly apply the drawable if the other items also need this mask. --> + <item android:id="@android:id/mask" android:drawable="@drawable/grid_item_mask"/> + + <item> + <selector> + <!-- selected --> <item - android:bottom="@dimen/focus_ring_gap" - android:left="@dimen/focus_ring_gap" - android:right="@dimen/focus_ring_gap" - android:top="@dimen/focus_ring_gap"> - <shape> - <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> - <solid android:color="?attr/colorPrimaryContainer" /> - </shape> + android:state_focused="true" + android:state_hovered="true" + android:state_selected="true"> + <layer-list> + <item + android:bottom="@dimen/focus_ring_gap" + android:left="@dimen/focus_ring_gap" + android:right="@dimen/focus_ring_gap" + android:top="@dimen/focus_ring_gap"> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> + <solid android:color="?attr/colorPrimaryContainer" /> + </shape> + </item> + <item + android:bottom="@dimen/focus_ring_gap" + android:left="@dimen/focus_ring_gap" + android:right="@dimen/focus_ring_gap" + android:top="@dimen/focus_ring_gap"> + <shape android:tint="?attr/colorOnPrimaryContainer"> + <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> + <solid android:color="@color/overlay_hover_color_percentage" /> + </shape> + </item> + <item> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <stroke + android:width="@dimen/focus_ring_width" + android:color="?attr/colorSecondary" /> + </shape> + </item> + </layer-list> + </item> + <item android:state_selected="true" android:state_focused="true"> + <layer-list> + <item + android:bottom="@dimen/focus_ring_gap" + android:left="@dimen/focus_ring_gap" + android:right="@dimen/focus_ring_gap" + android:top="@dimen/focus_ring_gap"> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> + <solid android:color="?attr/colorPrimaryContainer" /> + </shape> + </item> + <item> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <stroke + android:width="@dimen/focus_ring_width" + android:color="?attr/colorSecondary" /> + </shape> + </item> + </layer-list> </item> <item - android:bottom="@dimen/focus_ring_gap" - android:left="@dimen/focus_ring_gap" - android:right="@dimen/focus_ring_gap" - android:top="@dimen/focus_ring_gap"> - <shape android:tint="?attr/colorOnPrimaryContainer"> - <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> - <solid android:color="@color/overlay_hover_color_percentage" /> - </shape> + android:state_hovered="true" + android:state_selected="true"> + <layer-list> + <item> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <solid android:color="?attr/colorPrimaryContainer" /> + </shape> + </item> + <item> + <shape android:tint="?attr/colorOnPrimaryContainer"> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <solid android:color="@color/overlay_hover_color_percentage" /> + </shape> + </item> + </layer-list> </item> - <item> + <item android:state_selected="true"> <shape> <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <stroke - android:width="@dimen/focus_ring_width" - android:color="?attr/colorSecondary" /> + <solid android:color="?attr/colorPrimaryContainer" /> </shape> </item> - </layer-list> - </item> - <item android:state_selected="true" android:state_focused="true"> - <layer-list> + + <!-- unselected --> <item - android:bottom="@dimen/focus_ring_gap" - android:left="@dimen/focus_ring_gap" - android:right="@dimen/focus_ring_gap" - android:top="@dimen/focus_ring_gap"> - <shape> - <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> - <solid android:color="?attr/colorPrimaryContainer" /> - </shape> + android:state_focused="true" + android:state_hovered="true"> + <layer-list> + <item + android:bottom="@dimen/focus_ring_gap" + android:left="@dimen/focus_ring_gap" + android:right="@dimen/focus_ring_gap" + android:top="@dimen/focus_ring_gap"> + <shape android:tint="?attr/colorOnSurface"> + <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> + <solid android:color="@color/overlay_hover_color_percentage" /> + </shape> + </item> + <item> + <shape> + <corners android:radius="@dimen/grid_item_nameplate_radius" /> + <stroke + android:width="@dimen/focus_ring_width" + android:color="?attr/colorSecondary" /> + </shape> + </item> + </layer-list> </item> - <item> + <item android:state_focused="true"> <shape> <corners android:radius="@dimen/grid_item_nameplate_radius" /> <stroke @@ -71,70 +139,12 @@ android:color="?attr/colorSecondary" /> </shape> </item> - </layer-list> - </item> - <item - android:state_hovered="true" - android:state_selected="true"> - <layer-list> - <item> - <shape> - <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <solid android:color="?attr/colorPrimaryContainer" /> - </shape> - </item> - <item> - <shape android:tint="?attr/colorOnPrimaryContainer"> - <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <solid android:color="@color/overlay_hover_color_percentage" /> - </shape> - </item> - </layer-list> - </item> - <item android:state_selected="true"> - <shape> - <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <solid android:color="?attr/colorPrimaryContainer" /> - </shape> - </item> - - <!-- unselected --> - <item - android:state_focused="true" - android:state_hovered="true"> - <layer-list> - <item - android:bottom="@dimen/focus_ring_gap" - android:left="@dimen/focus_ring_gap" - android:right="@dimen/focus_ring_gap" - android:top="@dimen/focus_ring_gap"> + <item android:state_hovered="true"> <shape android:tint="?attr/colorOnSurface"> - <corners android:radius="@dimen/grid_item_nameplate_inner_radius" /> - <solid android:color="@color/overlay_hover_color_percentage" /> - </shape> - </item> - <item> - <shape> <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <stroke - android:width="@dimen/focus_ring_width" - android:color="?attr/colorSecondary" /> + <solid android:color="@color/overlay_hover_color_percentage" /> </shape> </item> - </layer-list> - </item> - <item android:state_focused="true"> - <shape> - <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <stroke - android:width="@dimen/focus_ring_width" - android:color="?attr/colorSecondary" /> - </shape> - </item> - <item android:state_hovered="true"> - <shape android:tint="?attr/colorOnSurface"> - <corners android:radius="@dimen/grid_item_nameplate_radius" /> - <solid android:color="@color/overlay_hover_color_percentage" /> - </shape> + </selector> </item> -</selector>
\ No newline at end of file +</ripple>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/drawable/ic_breadcrumb_arrow.xml b/res/flag(com.android.documentsui.flags.use_material3)/drawable/ic_breadcrumb_arrow.xml index 5305b4ae3..8a4aea8ac 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/drawable/ic_breadcrumb_arrow.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/drawable/ic_breadcrumb_arrow.xml @@ -15,12 +15,12 @@ --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:autoMirrored="true" - android:viewportWidth="24" - android:viewportHeight="24"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="960" + android:viewportHeight="960" + android:autoMirrored="true"> <path - android:fillColor="?android:attr/colorControlNormal" - android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6 -6,-6z"/> + android:fillColor="?attr/colorSecondary" + android:pathData="M504,480L320,296L376,240L616,480L376,720L320,664L504,480Z"/> </vector> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/drawer_layout.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/drawer_layout.xml index aeb85442f..0fe74fe64 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/layout/drawer_layout.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/drawer_layout.xml @@ -116,4 +116,12 @@ </LinearLayout> </androidx.drawerlayout.widget.DrawerLayout> + + <!-- Peek overlay --> + <FrameLayout + android:id="@+id/peek_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/fixed_layout.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/fixed_layout.xml index c2a06122a..4445dd1a6 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/layout/fixed_layout.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/fixed_layout.xml @@ -131,4 +131,11 @@ </LinearLayout> + <!-- Peek overlay --> + <FrameLayout + android:id="@+id/peek_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/item_doc_grid.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/item_doc_grid.xml index f854cf5f8..a8e3148b4 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/layout/item_doc_grid.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/item_doc_grid.xml @@ -13,163 +13,170 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/item_root" - android:layout_width="@dimen/grid_item_width" - android:layout_height="@dimen/grid_item_height" - android:layout_margin="@dimen/grid_item_layout_margin" + android:layout_width="match_parent" + android:layout_height="wrap_content" android:clickable="true" android:defaultFocusHighlightEnabled="false" - android:focusable="true" - android:paddingEnd="@dimen/grid_item_padding_end" - android:paddingStart="@dimen/grid_item_padding_start" - android:paddingTop="@dimen/grid_item_padding_top"> - -<!-- Main item thumbnail. Comprised of two overlapping images, the - visibility of which is controlled by code in - DirectoryFragment.java. --> - - <FrameLayout - android:id="@+id/thumbnail" - android:layout_width="@dimen/grid_item_thumbnail_width" - android:layout_height="@dimen/grid_item_thumbnail_height" - android:layout_centerHorizontal="true" - android:background="@drawable/grid_thumbnail_background"> - - <!-- stroke width will be controlled dynamically in the code. --> - <com.google.android.material.card.MaterialCardView - android:id="@+id/icon_wrapper" - android:layout_width="@dimen/grid_item_icon_width" - android:layout_height="@dimen/grid_item_icon_height" - android:layout_gravity="center" - app:cardBackgroundColor="?attr/colorSurfaceContainerLowest" - app:cardElevation="0dp" - app:strokeColor="?attr/colorSecondaryContainer" - app:strokeWidth="0dp"> - - <com.android.documentsui.GridItemThumbnail - android:id="@+id/icon_thumb" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:contentDescription="@null" - android:scaleType="centerCrop" - android:tint="?attr/gridItemTint" - android:tintMode="src_over" /> - - <com.android.documentsui.GridItemThumbnail - android:id="@+id/icon_mime_lg" - android:layout_width="@dimen/icon_size" - android:layout_height="@dimen/icon_size" + android:focusable="true"> + + <RelativeLayout + android:layout_width="@dimen/grid_width" + android:layout_height="@dimen/grid_height" + android:layout_margin="@dimen/grid_item_margin" + android:layout_gravity="center_horizontal" + android:paddingEnd="@dimen/grid_item_padding_end" + android:paddingStart="@dimen/grid_item_padding_start" + android:paddingTop="@dimen/grid_item_padding_top" + android:duplicateParentState="true"> + + <!-- Main item thumbnail. Comprised of two overlapping images, the + visibility of which is controlled by code in + DirectoryFragment.java. --> + + <FrameLayout + android:id="@+id/thumbnail" + android:layout_width="@dimen/grid_item_thumbnail_width" + android:layout_height="@dimen/grid_item_thumbnail_height" + android:layout_centerHorizontal="true" + android:background="@drawable/grid_thumbnail_background"> + + <!-- stroke width will be controlled dynamically in the code. --> + <com.google.android.material.card.MaterialCardView + android:id="@+id/icon_wrapper" + android:layout_width="@dimen/grid_item_icon_width" + android:layout_height="@dimen/grid_item_icon_height" android:layout_gravity="center" - android:contentDescription="@null" - android:scaleType="fitCenter" /> - - </com.google.android.material.card.MaterialCardView> - - </FrameLayout> - - <FrameLayout - android:id="@+id/preview_icon" - android:layout_width="@dimen/button_touch_size" - android:layout_height="@dimen/button_touch_size" - android:layout_alignParentEnd="true" - android:layout_alignParentTop="true" - android:clickable="true" - android:focusable="true" - android:pointerIcon="hand"> - - <ImageView - android:layout_width="@dimen/zoom_icon_size" - android:layout_height="@dimen/zoom_icon_size" - android:layout_gravity="center" - android:background="@drawable/circle_button_background" - android:padding="2dp" - android:scaleType="fitCenter" - android:src="@drawable/ic_zoom_out" /> - - </FrameLayout> - - <!-- Item nameplate. Has some text fields (title, size, mod-time, etc). --> - - <LinearLayout - android:id="@+id/nameplate" - android:layout_width="@dimen/grid_item_nameplate_width" - android:layout_height="@dimen/grid_item_nameplate_height" - android:layout_below="@id/thumbnail" - android:layout_marginTop="@dimen/grid_item_nameplate_marginTop" - android:background="@drawable/grid_nameplate_background" - android:orientation="vertical" - android:duplicateParentState="true" - android:padding="@dimen/grid_item_nameplate_padding"> - - <!-- Top row. --> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center" - android:orientation="horizontal"> + app:cardBackgroundColor="?attr/colorSurfaceContainerLowest" + app:cardElevation="0dp" + app:strokeColor="?attr/colorSecondaryContainer" + app:strokeWidth="0dp"> + + <com.android.documentsui.GridItemThumbnail + android:id="@+id/icon_thumb" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@null" + android:scaleType="centerCrop" + android:tint="?attr/gridItemTint" + android:tintMode="src_over" /> + + <com.android.documentsui.GridItemThumbnail + android:id="@+id/icon_mime_lg" + android:layout_width="@dimen/icon_size" + android:layout_height="@dimen/icon_size" + android:layout_gravity="center" + android:contentDescription="@null" + android:scaleType="fitCenter" /> + + </com.google.android.material.card.MaterialCardView> + + </FrameLayout> + + <FrameLayout + android:id="@+id/preview_icon" + android:layout_width="@dimen/button_touch_size" + android:layout_height="@dimen/button_touch_size" + android:layout_alignParentEnd="true" + android:layout_alignParentTop="true" + android:clickable="true" + android:focusable="true" + android:pointerIcon="hand"> <ImageView - android:id="@+id/icon_profile_badge" - android:layout_width="@dimen/briefcase_icon_size" - android:layout_height="@dimen/briefcase_icon_size" - android:layout_marginEnd="@dimen/briefcase_icon_margin" - android:contentDescription="@string/a11y_work" - android:gravity="center_vertical" - android:src="@drawable/ic_briefcase" - android:tint="?android:attr/colorAccent" /> - - <TextView - android:id="@android:id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:ellipsize="end" - android:singleLine="true" - android:textAlignment="center" - android:textAppearance="@style/FileItemLabelText" /> + android:layout_width="@dimen/zoom_icon_size" + android:layout_height="@dimen/zoom_icon_size" + android:layout_gravity="center" + android:background="@drawable/circle_button_background" + android:padding="2dp" + android:scaleType="fitCenter" + android:src="@drawable/ic_zoom_out" /> - </LinearLayout> + </FrameLayout> + + <!-- Item nameplate. Has some text fields (title, size, mod-time, etc). --> - <!-- Bottom row. --> <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center" - android:orientation="horizontal"> - - <TextView - android:id="@+id/details" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="4dp" - android:ellipsize="end" - android:singleLine="true" - android:textAlignment="viewStart" - android:textAppearance="@style/ItemCaptionText" /> - - <TextView - android:id="@+id/bullet" - android:layout_width="wrap_content" + android:id="@+id/nameplate" + android:layout_width="@dimen/grid_item_nameplate_width" + android:layout_height="@dimen/grid_item_nameplate_height" + android:layout_below="@id/thumbnail" + android:layout_marginTop="@dimen/grid_item_nameplate_marginTop" + android:background="@drawable/grid_nameplate_background" + android:orientation="vertical" + android:duplicateParentState="true" + android:padding="@dimen/grid_item_nameplate_padding"> + + <!-- Top row. --> + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginEnd="4dp" - android:singleLine="true" - android:text="@string/bullet" - android:textAlignment="viewStart" - android:textAppearance="@style/ItemCaptionText" /> - - <TextView - android:id="@+id/date" - android:layout_width="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/icon_profile_badge" + android:layout_width="@dimen/briefcase_icon_size" + android:layout_height="@dimen/briefcase_icon_size" + android:layout_marginEnd="@dimen/briefcase_icon_margin" + android:contentDescription="@string/a11y_work" + android:gravity="center_vertical" + android:src="@drawable/ic_briefcase" + android:tint="?android:attr/colorAccent" /> + + <TextView + android:id="@android:id/title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="end" + android:singleLine="true" + android:textAlignment="center" + android:textAppearance="@style/FileItemLabelText" /> + + </LinearLayout> + + <!-- Bottom row. --> + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:ellipsize="end" - android:singleLine="true" - android:textAlignment="viewStart" - android:textAppearance="@style/ItemCaptionText" /> + android:gravity="center" + android:orientation="horizontal"> + + <TextView + android:id="@+id/details" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="4dp" + android:ellipsize="end" + android:singleLine="true" + android:textAlignment="viewStart" + android:textAppearance="@style/ItemCaptionText" /> + + <TextView + android:id="@+id/bullet" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="4dp" + android:singleLine="true" + android:text="@string/bullet" + android:textAlignment="viewStart" + android:textAppearance="@style/ItemCaptionText" /> + + <TextView + android:id="@+id/date" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="end" + android:singleLine="true" + android:textAlignment="viewStart" + android:textAppearance="@style/ItemCaptionText" /> + + </LinearLayout> </LinearLayout> - </LinearLayout> + </RelativeLayout> -</RelativeLayout>
\ No newline at end of file +</FrameLayout>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/job_progress_panel.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/job_progress_panel.xml new file mode 100644 index 000000000..17f6aa6fc --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/job_progress_panel.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2025 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" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + <com.google.android.material.card.MaterialCardView + style="@style/JobProgressPanelStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/job_progress_panel_title" + android:text="@string/job_progress_panel_title" + android:textAppearance="@style/JobProgressPanelHeaderText" + android:layout_margin="@dimen/job_progress_panel_header_margin" /> + <androidx.recyclerview.widget.RecyclerView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/job_progress_list" /> + </LinearLayout> + </com.google.android.material.card.MaterialCardView> +</FrameLayout> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/nav_rail_layout.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/nav_rail_layout.xml index bfbb83c17..091444155 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/layout/nav_rail_layout.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/nav_rail_layout.xml @@ -179,4 +179,12 @@ </LinearLayout> </androidx.drawerlayout.widget.DrawerLayout> + + <!-- Peek overlay --> + <FrameLayout + android:id="@+id/peek_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/navigation_breadcrumb_item.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/navigation_breadcrumb_item.xml index 672343795..ba99ac35d 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/layout/navigation_breadcrumb_item.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/navigation_breadcrumb_item.xml @@ -15,29 +15,20 @@ limitations under the License. --> - -<!-- - CoordinatorLayout is necessary for various components (e.g. Snackbars, and - floating action buttons) to operate correctly. ---> -<!-- - focusableInTouchMode is set in order to force key events to go to the activity's global key - callback, which is necessary for proper event routing. See BaseActivity.onKeyDown. ---> - <LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:minHeight="48dp" - android:focusable="true" - android:gravity="center_vertical" - android:orientation="horizontal"> + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:minHeight="@dimen/breadcrumb_height" + android:gravity="center_vertical" + android:orientation="horizontal"> <TextView android:id="@+id/breadcrumb_text" android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_height="@dimen/breadcrumb_item_height" + android:focusable="true" + android:clickable="true" android:maxWidth="275dp" android:gravity="center_vertical" android:maxLines="1" @@ -47,8 +38,8 @@ <ImageView android:id="@+id/breadcrumb_arrow" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="@dimen/breadcrumb_item_arrow_size" + android:layout_height="@dimen/breadcrumb_item_arrow_size" android:src="@drawable/ic_breadcrumb_arrow"/> </LinearLayout>
\ No newline at end of file diff --git a/res/flag(com.android.documentsui.flags.use_material3)/layout/peek_layout.xml b/res/flag(com.android.documentsui.flags.use_material3)/layout/peek_layout.xml new file mode 100644 index 000000000..50102d622 --- /dev/null +++ b/res/flag(com.android.documentsui.flags.use_material3)/layout/peek_layout.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2025 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. +--> + +<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/peek_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/peek_overlay_background" + android:focusable="false" /> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/values/colors.xml b/res/flag(com.android.documentsui.flags.use_material3)/values/colors.xml index 84a8f720a..5696288e6 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/values/colors.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/values/colors.xml @@ -29,6 +29,7 @@ <!-- TODO(b/379776735): remove this after use_material3 flag is launched. --> <color name="chip_background_disable_color">#fff1f3f4</color> <color name="menu_search_background">@android:color/transparent</color> + <!-- TODO(b/379776735): remove this after use_material3 flag is launched. --> <color name="item_breadcrumb_background_hovered">#1affffff</color> <!-- All the colors used inside the drag drop badge don't support Material color attributes @@ -90,4 +91,8 @@ </shape> --> <color name="overlay_hover_color_percentage">#14000000</color> <!-- 8% --> + + <!-- Peek overlay static color. Makes the background dimmer with an 80% opacity. This color is not + intended to be dynamic, and is defined specifically for Peek. --> + <color name="peek_overlay_background">#CC000000</color> <!-- 80% --> </resources> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml b/res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml index 16f75313c..fa9e436ab 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml @@ -43,9 +43,10 @@ <dimen name="progress_bar_height">4dp</dimen> <fraction name="grid_scale_min">85%</fraction> <fraction name="grid_scale_max">200%</fraction> - <dimen name="grid_width">152dp</dimen> + <dimen name="grid_width">150dp</dimen> + <dimen name="grid_height">132dp</dimen> <dimen name="grid_section_separator_height">0dp</dimen> - <dimen name="grid_item_margin">6dp</dimen> + <dimen name="grid_item_margin">@dimen/space_small_1</dimen> <dimen name="grid_padding_horiz">4dp</dimen> <dimen name="grid_padding_vert">4dp</dimen> <dimen name="list_item_height">56dp</dimen> @@ -66,11 +67,11 @@ <dimen name="breadcrumb_item_padding_horizontal">12dp</dimen> <dimen name="breadcrumb_item_padding_vertical">6dp</dimen> <dimen name="breadcrumb_item_arrow_padding">@dimen/space_extra_small_2</dimen> - <dimen name="breadcrumb_item_height">36dp</dimen> + <dimen name="breadcrumb_item_height">32dp</dimen> + <dimen name="breadcrumb_height">48dp</dimen> + <dimen name="breadcrumb_item_arrow_size">16dp</dimen> <dimen name="dir_elevation">8dp</dimen> <dimen name="drag_shadow_size">120dp</dimen> - <dimen name="grid_item_width">150dp</dimen> - <dimen name="grid_item_height">132dp</dimen> <dimen name="grid_item_padding_start">@dimen/space_extra_small_2</dimen> <dimen name="grid_item_padding_end">@dimen/space_extra_small_2</dimen> <dimen name="grid_item_padding_top">@dimen/space_extra_small_2</dimen> @@ -79,7 +80,6 @@ <dimen name="grid_item_thumbnail_radius">12dp</dimen> <dimen name="grid_item_icon_width">64dp</dimen> <dimen name="grid_item_icon_height">64dp</dimen> - <dimen name="grid_item_layout_margin">@dimen/space_small_1</dimen> <dimen name="grid_item_nameplate_width">142dp</dimen> <dimen name="grid_item_nameplate_height">44dp</dimen> <dimen name="grid_item_nameplate_padding">4dp</dimen> @@ -248,4 +248,8 @@ <dimen name="focus_ring_gap">5dp</dimen> <dimen name="hover_overlay_alpha">0.08</dimen> <dimen name="ripple_overlay_alpha">0.10</dimen> + + <dimen name="job_progress_panel_width">360dp</dimen> + <dimen name="job_progress_panel_margin">@dimen/space_small_1</dimen> + <dimen name="job_progress_panel_header_margin">@dimen/space_small_1</dimen> </resources> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/values/styles.xml b/res/flag(com.android.documentsui.flags.use_material3)/values/styles.xml index 6819c12a3..481cd0be8 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/values/styles.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/values/styles.xml @@ -190,4 +190,11 @@ <item name="android:textColor">@color/nav_rail_item_text_color</item> <item name="android:textAppearance">@style/NavRailItemTextAppearance</item> </style> + + <style name="JobProgressPanelStyle" parent="@style/Widget.Material3.CardView.Elevated"> + <item name="android:layout_marginStart">@dimen/job_progress_panel_margin</item> + <item name="android:layout_marginBottom">@dimen/job_progress_panel_margin</item> + <item name="cardElevation">1dp</item> + <item name="cardBackgroundColor">?attr/colorSurfaceDim</item> + </style> </resources> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/values/styles_text.xml b/res/flag(com.android.documentsui.flags.use_material3)/values/styles_text.xml index 37dd8a135..57dbb1212 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/values/styles_text.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/values/styles_text.xml @@ -96,9 +96,8 @@ <item name="fontFamily">@string/config_fontFamilyMedium</item> </style> - <style name="BreadcrumbText" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle"> + <style name="BreadcrumbText" parent="@style/TextAppearance.Material3.TitleSmall"> <item name="android:textColor">@color/horizontal_breadcrumb_color</item> - <item name="android:textSize">14sp</item> <item name="fontFamily">@string/config_fontFamilyMedium</item> </style> @@ -160,4 +159,8 @@ <item name="fontFamily">@string/config_fontFamily</item> </style> + <style name="JobProgressPanelHeaderText" parent="@style/TextAppearance.Material3.TitleMedium"> + <item name="fontFamily">@string/config_fontFamilyMedium</item> + </style> + </resources> diff --git a/res/flag(com.android.documentsui.flags.use_material3)/values/themes.xml b/res/flag(com.android.documentsui.flags.use_material3)/values/themes.xml index 314022eea..114d14c88 100644 --- a/res/flag(com.android.documentsui.flags.use_material3)/values/themes.xml +++ b/res/flag(com.android.documentsui.flags.use_material3)/values/themes.xml @@ -79,5 +79,9 @@ <!-- Menu text appearance --> <item name="android:itemTextAppearance">@style/MenuItemTextAppearance</item> + + <!-- System bar colors. --> + <item name="android:statusBarColor">?attr/colorSurfaceContainer</item> + <item name="android:navigationBarColor">?attr/colorSurfaceContainer</item> </style> </resources> diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 8997f38aa..f3dc33788 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Wys tans in roostermodus."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Wys tans in lysmodus."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Lêernaam"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 1ecd90486..4267bd1de 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"በፍርግርግ ሁነታ ላይ በማሳየት ላይ።"</string> <string name="list_mode_showing" msgid="1225413902295895166">"በዝርዝር ሁነታ ላይ በማሳየት ላይ።"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"የፋይል ስም"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 4ca9b882e..6b193c223 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"ضغط"</string> <string name="menu_extract" msgid="8171946945982532262">"الاستخراج إلى…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"استخراج الكل…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"الاستخراج هنا"</string> + <string name="menu_browse" msgid="6007716414766674967">"تصفُّح"</string> <string name="menu_rename" msgid="1883113442688817554">"إعادة تسمية"</string> <string name="menu_inspect" msgid="7279855349299446224">"الحصول على المعلومات"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"إظهار الملفات المخفية"</string> @@ -383,6 +381,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"يتم العرض في وضع الشبكة."</string> <string name="list_mode_showing" msgid="1225413902295895166">"يتم العرض في وضع القائمة."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"اسم الملف"</string> </resources> diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 17ad4cc6b..1d830ebad 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"গ্ৰিড ম’ডত দেখুৱাই থকা হৈছে।"</string> <string name="list_mode_showing" msgid="1225413902295895166">"সূচীযুক্ত ম’ডত দেখুৱাই থকা হৈছে।"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ফাইলৰ নাম"</string> </resources> diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index def80e979..789d477c1 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Tor rejimində göstərilir."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Siyahı rejimində göstərilir."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Fayl adı"</string> </resources> diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 817a50bc5..af9c3d506 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Prikazuje se u režimu mreže."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Prikazuje se u režimu liste."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Naziv fajla"</string> </resources> diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 9c30734e6..b20f4ec6b 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Паказ у рэжыме табліцы."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Паказ у рэжыме спіса."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Назва файла"</string> </resources> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index f2ed3ba57..eb6c137dc 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Показва се в табличен изглед."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Показва се в списъчен изглед."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Име на файла"</string> </resources> diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index ed431aee7..5815a476c 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"সঙ্কুচিত করুন"</string> <string name="menu_extract" msgid="8171946945982532262">"এখানে রাখুন…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"সব এক্সট্র্যাক্ট করুন…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"এখানে এক্সট্র্যাক্ট করুন"</string> + <string name="menu_browse" msgid="6007716414766674967">"ব্রাউজ করুন"</string> <string name="menu_rename" msgid="1883113442688817554">"পুনঃনামকরণ"</string> <string name="menu_inspect" msgid="7279855349299446224">"তথ্য পান"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"লুকানো ফাইল দেখুন"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"গ্রিড মোডে দেখানো হচ্ছে।"</string> <string name="list_mode_showing" msgid="1225413902295895166">"তালিকা মোডে দেখানো হচ্ছে।"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ফাইলের নাম"</string> </resources> diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 0d5a137c3..73a4b502a 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Prikazivanje u vidu mreže."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Prikazivanje u vidu liste."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Naziv fajla"</string> </resources> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index dd7991aef..f78ec3811 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Es mostra en mode de quadrícula."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Es mostra en mode de llista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nom del fitxer"</string> </resources> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index faf9e6177..28b167244 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Zobrazuje se mřížka s položkami."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Zobrazuje se seznam položek."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Název souboru"</string> </resources> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 9f5d1167b..bfc2386f2 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Vises i gittervisning."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Vises i listevisning."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Filnavn"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 58f653792..ee5604973 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Wird im Rastermodus angezeigt."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Wird im Listenmodus angezeigt."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Dateiname"</string> </resources> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 9ae0b4910..7b403cbe4 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Εμφάνιση σε λειτουργία πλέγματος."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Εμφάνιση σε λειτουργία λίστας."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Όνομα αρχείου"</string> </resources> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index b4d44a911..f35f46c0c 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Showing in grid mode."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Showing in list mode."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"File name"</string> </resources> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index b4d44a911..f35f46c0c 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Showing in grid mode."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Showing in list mode."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"File name"</string> </resources> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index b4d44a911..f35f46c0c 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Showing in grid mode."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Showing in list mode."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"File name"</string> </resources> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 0fbb19ee2..68a382f45 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Comprimir"</string> <string name="menu_extract" msgid="8171946945982532262">"Extraer en…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Extraer todo…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Extraer aquí"</string> + <string name="menu_browse" msgid="6007716414766674967">"Explorar"</string> <string name="menu_rename" msgid="1883113442688817554">"Cambiar nombre"</string> <string name="menu_inspect" msgid="7279855349299446224">"Obtener información"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Mostrar archivos ocultos"</string> @@ -317,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Se muestra en modo de cuadrícula."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Se muestra en modo de lista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nombre del archivo"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index a361d294d..737500313 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Comprimir"</string> <string name="menu_extract" msgid="8171946945982532262">"Extraer a…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Extraer todo…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Extraer aquí"</string> + <string name="menu_browse" msgid="6007716414766674967">"Explorar"</string> <string name="menu_rename" msgid="1883113442688817554">"Cambiar nombre"</string> <string name="menu_inspect" msgid="7279855349299446224">"Obtener información"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Mostrar archivos ocultos"</string> @@ -317,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Mostrando modo de cuadrícula."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Mostrando modo de lista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nombre del archivo"</string> </resources> diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 2330938ab..15b81449a 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Kuvatud ruudustikuvaates."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Kuvatud loendivaates."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Faili nimi"</string> </resources> diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 6128ef72d..94305a6d7 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Konprimatu"</string> <string name="menu_extract" msgid="8171946945982532262">"Atera hona…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Atera guztia…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Erauzi hona"</string> + <string name="menu_browse" msgid="6007716414766674967">"Arakatu"</string> <string name="menu_rename" msgid="1883113442688817554">"Aldatu izena"</string> <string name="menu_inspect" msgid="7279855349299446224">"Lortu informazioa"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Erakutsi fitxategi ezkutuak"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Sareta moduan ikusgai."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Zerrenda moduan ikusgai."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Fitxategiaren izena"</string> </resources> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 9fe6eba70..c108d9f07 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"نمایش در حالت جدولی."</string> <string name="list_mode_showing" msgid="1225413902295895166">"نمایش در حالت فهرست."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"نام فایل"</string> </resources> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 03769bc23..7b888bfd4 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Näytetään ruudukkotilassa."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Näytetään luettelotilassa."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Tiedostonimi"</string> </resources> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index ac96f55f4..62d18393d 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Affichage en mode grille."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Affichage en mode liste."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nom de fichier"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 68ec67fc5..3c1475290 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Affichage en mode grille."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Affichage en mode liste."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nom du fichier"</string> </resources> diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 0df799e20..d45dbc211 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Mostrando modo de grade."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Mostrando modo de lista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nome do ficheiro"</string> </resources> diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 5dfe833bd..7f5ffa3e0 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ગ્રિડ મોડમાં બતાવી રહ્યાં છીએ."</string> <string name="list_mode_showing" msgid="1225413902295895166">"સૂચિ મોડમાં બતાવી રહ્યાં છીએ."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ફાઇલનું નામ"</string> </resources> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 4b42a05f9..7fc004024 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ग्रिड मोड में दिखाया जा रहा है."</string> <string name="list_mode_showing" msgid="1225413902295895166">"सूची मोड में दिखाया जा रहा है."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"फ़ाइल का नाम"</string> </resources> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 5942b78aa..e12bc50f0 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Prikazivanje u načinu rešetke."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Prikazivanje u načinu popisa."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Naziv datoteke"</string> </resources> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 38abcc0c8..7119be420 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Megjelenítés rácsnézetben."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Megjelenítés listanézetben."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Fájlnév"</string> </resources> diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index cfd9e24fc..bf75c96c1 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Ցուցադրվում է ցանցի տեսքով։"</string> <string name="list_mode_showing" msgid="1225413902295895166">"Ցուցադրվում է ցանկի տեսքով։"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Ֆայլի անվանումը"</string> </resources> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 75f14dd13..5ac5aa336 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Menampilkan dalam mode petak."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Menampilkan dalam mode daftar."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nama file"</string> </resources> diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index c71925b4b..f78a5fc63 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Sýnir töfluyfirlit."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Sýnir listayfirlit."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Skráarheiti"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ed543fc35..a289cd8b2 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Visualizzazione in modalità griglia."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Visualizzazione in modalità elenco."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nome file"</string> </resources> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index e7f088444..c3c3aff29 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"דחיסה"</string> <string name="menu_extract" msgid="8171946945982532262">"חילוץ לתיקייה…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"חילוץ הכול…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"חילוץ לכאן"</string> + <string name="menu_browse" msgid="6007716414766674967">"עיון"</string> <string name="menu_rename" msgid="1883113442688817554">"שינוי שם"</string> <string name="menu_inspect" msgid="7279855349299446224">"מידע על המסמך"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"הצגת קבצים מוסתרים"</string> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 67523b952..2f3c14114 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"グリッドモードで表示しています。"</string> <string name="list_mode_showing" msgid="1225413902295895166">"リストモードで表示しています。"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ファイル名"</string> </resources> diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 98ea5bd79..ddf8bfcd4 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ნაჩვენებია ბადის რეჟიმში."</string> <string name="list_mode_showing" msgid="1225413902295895166">"ნაჩვენებია სიის რეჟიმში."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ფაილის სახელი"</string> </resources> diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 435c496fe..2d6645340 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Тор режимінде көрсетіледі."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Тізім режимінде көрсетіледі."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Файл атауы"</string> </resources> diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index de0fa6d94..dbe6f87e1 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"បង្ហាញក្នុងមុខងារក្រឡា។"</string> <string name="list_mode_showing" msgid="1225413902295895166">"បង្ហាញក្នុងមុខងារបញ្ជី។"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ឈ្មោះឯកសារ"</string> </resources> diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index dd9db19ee..ab92d4130 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ಗ್ರಿಡ್ ಮೋಡ್ನಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತಿದೆ."</string> <string name="list_mode_showing" msgid="1225413902295895166">"ಪಟ್ಟಿ ಮೋಡ್ನಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತಿದೆ."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ಫೈಲ್ ಹೆಸರು"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 5e8b0a659..a852f9df8 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"그리드 모드로 표시 중입니다."</string> <string name="list_mode_showing" msgid="1225413902295895166">"목록 모드로 표시 중입니다."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"파일 이름"</string> </resources> diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 26d59f1c0..1e9a3dcf3 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Торчо режиминде көрсөтүлүүдө."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Тизме режиминде көрсөтүлүүдө."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Файлдын аты"</string> </resources> diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 6f2912b63..46370f5c0 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ກຳລັງສະແດງໃນໂໝດຕາຕະລາງ."</string> <string name="list_mode_showing" msgid="1225413902295895166">"ກຳລັງສະແດງໃນໂໝດລາຍຊື່."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ຊື່ໄຟລ໌"</string> </resources> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 39790603e..1398ebe85 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Rodoma tinklelio režimu."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Rodoma sąrašo režimu."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Failo pavadinimas"</string> </resources> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 22db437a5..8879c27de 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Tiek attēlots režģa režīms."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Tiek attēlots saraksta režīms."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Faila nosaukums"</string> </resources> diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 9fd70991e..d61524719 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Се прикажува во режим на решетка."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Се прикажува во режим на список."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Име на датотека"</string> </resources> diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index f5f2679d6..116ae0291 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ഗ്രിഡ് മോഡിൽ കാണിക്കുന്നു."</string> <string name="list_mode_showing" msgid="1225413902295895166">"ലിസ്റ്റ് മോഡിൽ കാണിക്കുന്നു."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ഫയലിന്റെ പേര്"</string> </resources> diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index e68478e23..28c3f1670 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Хүснэгтийн горимд харуулж байна."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Жагсаалтын горимд харуулж байна."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Файлын нэр"</string> </resources> diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index fa48f589e..60b72c986 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ग्रिड मोडमध्ये दाखवत आहे."</string> <string name="list_mode_showing" msgid="1225413902295895166">"सूची मोडमध्ये दाखवत आहे."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"फाइलचे नाव"</string> </resources> diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 4aee678c5..fe02922e9 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Ditunjukkan dalam mod grid."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Ditunjukkan dalam mod senarai."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nama fail"</string> </resources> diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index d53ef0d79..573d0bf48 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ဇယားကွက်မုဒ်ဖြင့် ပြသရန်။"</string> <string name="list_mode_showing" msgid="1225413902295895166">"စာရင်းမုဒ်ဖြင့် ပြသရန်။"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ဖိုင်အမည်"</string> </resources> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index ab5f4b3f5..d1a9661ee 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Viser i rutenettmodus."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Viser i listemodus."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Filnavn"</string> </resources> diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 8b06e5352..cb267f0ca 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ग्रिड मोडमा देखाइँदै।"</string> <string name="list_mode_showing" msgid="1225413902295895166">"सूची मोडमा देखाइँदै।"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"फाइलको नाम"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 0b39fab85..4f7add78d 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Tonen in rastermodus."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Tonen in lijstmodus."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Bestandsnaam"</string> </resources> diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 304d427a7..ef985fcbc 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"କମ୍ପ୍ରେସ୍ କରନ୍ତୁ"</string> <string name="menu_extract" msgid="8171946945982532262">"ଏଠାକୁ ଏକ୍ସଟ୍ରାକ୍ଟ କରନ୍ତୁ…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"ସବୁ ଏକ୍ସଟ୍ରାକ୍ଟ କରନ୍ତୁ…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"ଏଠାରେ ଏକ୍ସଟ୍ରାକ୍ଟ କରନ୍ତୁ"</string> + <string name="menu_browse" msgid="6007716414766674967">"ବ୍ରାଉଜ କରନ୍ତୁ"</string> <string name="menu_rename" msgid="1883113442688817554">"ରିନେମ କରନ୍ତୁ"</string> <string name="menu_inspect" msgid="7279855349299446224">"ସୂଚନା ପାଆନ୍ତୁ"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"ଲୁକ୍କାୟିତ ଫାଇଲ ଦେଖାନ୍ତୁ"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ଗ୍ରିଡ୍ ମୋଡରେ ଦେଖାଉଛି।"</string> <string name="list_mode_showing" msgid="1225413902295895166">"ତାଲିକା ମୋଡରେ ଦେଖାଉଛି।"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ଫାଇଲ ନାମ"</string> </resources> diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index a00596080..ac450d395 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ਗ੍ਰਿਡ ਮੋਡ ਵਿੱਚ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ ਹਨ"</string> <string name="list_mode_showing" msgid="1225413902295895166">"ਸੂਚੀ ਮੋਡ ਵਿੱਚ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ ਹਨ।"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ਫ਼ਾਈਲ ਦਾ ਨਾਮ"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 51c021ab0..3e592bc4a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Skompresuj"</string> <string name="menu_extract" msgid="8171946945982532262">"Rozpakuj do…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Wyodrębnij wszystko…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Rozpakuj tutaj"</string> + <string name="menu_browse" msgid="6007716414766674967">"Przeglądaj"</string> <string name="menu_rename" msgid="1883113442688817554">"Zmień nazwę"</string> <string name="menu_inspect" msgid="7279855349299446224">"Zobacz informacje"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Pokaż ukryte pliki"</string> @@ -339,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Wyświetlanie w trybie siatki."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Wyświetlanie w trybie listy."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nazwa pliku"</string> </resources> diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 5fd429d44..72b72aa1c 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Compactar"</string> <string name="menu_extract" msgid="8171946945982532262">"Extrair para…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Extrair tudo…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Extrair aqui"</string> + <string name="menu_browse" msgid="6007716414766674967">"Procurar"</string> <string name="menu_rename" msgid="1883113442688817554">"Renomear"</string> <string name="menu_inspect" msgid="7279855349299446224">"Ver informações"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Mostrar arquivos ocultos"</string> @@ -317,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Exibindo modo de grade."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Exibindo modo de lista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nome do arquivo"</string> </resources> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index af9f6417e..88466b258 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"A mostrar no modo de grelha…"</string> <string name="list_mode_showing" msgid="1225413902295895166">"A mostrar no modo de lista…"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nome do ficheiro"</string> </resources> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 5fd429d44..72b72aa1c 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Compactar"</string> <string name="menu_extract" msgid="8171946945982532262">"Extrair para…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Extrair tudo…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Extrair aqui"</string> + <string name="menu_browse" msgid="6007716414766674967">"Procurar"</string> <string name="menu_rename" msgid="1883113442688817554">"Renomear"</string> <string name="menu_inspect" msgid="7279855349299446224">"Ver informações"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Mostrar arquivos ocultos"</string> @@ -317,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Exibindo modo de grade."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Exibindo modo de lista."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Nome do arquivo"</string> </resources> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 5e4da7e89..82f43949e 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Se afișează în modul grilă."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Se afișează în modul listă."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Numele fișierului"</string> </resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index bba9f3110..931934b27 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Показано в виде таблицы."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Показано в виде списка."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Имя файла"</string> </resources> diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index 5b1f5ae52..9dbe949c9 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"සම්පීඩනය කරන්න"</string> <string name="menu_extract" msgid="8171946945982532262">"උපුටා ගන්න…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"සියල්ල උපුටා ගන්න…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"මෙතනට උපුටා ගන්න"</string> + <string name="menu_browse" msgid="6007716414766674967">"බ්රවුස් කරන්න"</string> <string name="menu_rename" msgid="1883113442688817554">"යළි නම් කරන්න"</string> <string name="menu_inspect" msgid="7279855349299446224">"තොරතුරු ලබා ගන්න"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"සැඟවුණු ගොනු පෙන්වන්න"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"ජාලක ප්රකාරය තුළ පෙන්වමින්."</string> <string name="list_mode_showing" msgid="1225413902295895166">"ලැයිස්තු ප්රකාරය තුළ පෙන්වමින්."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ගොනුවේ නම"</string> </resources> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 81900e553..353cfa113 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Zobrazované v režime mriežky."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Zobrazované v režime zoznamu."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Názov súboru"</string> </resources> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index f5670410f..f6d15591f 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -337,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Prikazano v načinu mreže"</string> <string name="list_mode_showing" msgid="1225413902295895166">"Prikazano v načinu seznama"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Ime datoteke"</string> </resources> diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index f25123c5d..c8cd908ae 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Po shfaq në modalitetin \"rrjetë\"."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Po shfaq në modalitetin \"listë\"."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Emri i skedarit"</string> </resources> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 198a80a1e..627e35356 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -315,6 +315,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Приказује се у режиму мреже."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Приказује се у режиму листе."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Назив фајла"</string> </resources> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index f4836240f..dab4bfbe2 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Visas i rutnätsläge."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Visas i listläge."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Filnamn"</string> </resources> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index c9f648b1b..7ec3309cf 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Kuonyesha katika hali ya gridi."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Kuonyesha katika hali ya orodha."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Jina la faili"</string> </resources> diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 6c944fdac..35a856f23 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"கட்டக் காட்சியில் காட்டுகிறது."</string> <string name="list_mode_showing" msgid="1225413902295895166">"பட்டியல் காட்சியில் காட்டுகிறது."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ஃபைல் பெயர்"</string> </resources> diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 9e8f4bdf4..ba463359d 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"గ్రిడ్ మోడ్లో చూపుతోంది."</string> <string name="list_mode_showing" msgid="1225413902295895166">"లిస్ట్ మోడ్లో చూపుతోంది."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ఫైల్ పేరు"</string> </resources> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index c0fa307b6..10181068d 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"บีบอัด"</string> <string name="menu_extract" msgid="8171946945982532262">"แตกข้อมูลไปยัง…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"แตกเอกสารทั้งหมด…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"แตกไฟล์ที่นี่"</string> + <string name="menu_browse" msgid="6007716414766674967">"เรียกดู"</string> <string name="menu_rename" msgid="1883113442688817554">"เปลี่ยนชื่อ"</string> <string name="menu_inspect" msgid="7279855349299446224">"รับข้อมูล"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"แสดงไฟล์ที่ซ่อนไว้"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"กำลังแสดงในโหมดตารางกริด"</string> <string name="list_mode_showing" msgid="1225413902295895166">"กำลังแสดงในโหมดรายการ"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"ชื่อไฟล์"</string> </resources> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 4efd565f9..3befbf583 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Ipinapakita sa grid mode."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Ipinapakita sa list mode."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Pangalan ng file"</string> </resources> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 39531634b..490f9ca29 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Tablo modunda gösteriliyor."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Liste modunda gösteriliyor."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Dosya adı"</string> </resources> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 5da9ae208..52f36ec44 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"Стиснути"</string> <string name="menu_extract" msgid="8171946945982532262">"Розпакувати…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"Розархівувати все…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"Розпакувати тут"</string> + <string name="menu_browse" msgid="6007716414766674967">"Переглянути"</string> <string name="menu_rename" msgid="1883113442688817554">"Перейменувати"</string> <string name="menu_inspect" msgid="7279855349299446224">"Переглянути інформацію"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"Показувати приховані файли"</string> @@ -339,6 +337,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Перегляд у режимі таблиці."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Перегляд у режимі списку."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Назва файлу"</string> </resources> diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index e485e68f7..9f20a9957 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"گرڈ وضع میں دکھائی جا رہی ہیں۔"</string> <string name="list_mode_showing" msgid="1225413902295895166">"فہرست وضع میں دکھائی جا رہی ہیں۔"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"فائل کا نام"</string> </resources> diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 1095f91cb..8e7c154f9 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Jadval shaklida chiqarilmoqda."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Roʻyxat shaklida chiqarilmoqda."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Fayl nomi"</string> </resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index b41634964..9d3fe1683 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Đang hiển thị ở chế độ lưới."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Đang hiển thị ở chế độ danh sách."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Tên tệp"</string> </resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index f9a55d300..939830937 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -46,10 +46,8 @@ <string name="menu_compress" msgid="37539111904724188">"压缩"</string> <string name="menu_extract" msgid="8171946945982532262">"解压到…"</string> <string name="menu_extract_all" msgid="7335680068521252718">"提取全部…"</string> - <!-- no translation found for menu_extract_here (8725302045721604762) --> - <skip /> - <!-- no translation found for menu_browse (6007716414766674967) --> - <skip /> + <string name="menu_extract_here" msgid="8725302045721604762">"解压缩到此处"</string> + <string name="menu_browse" msgid="6007716414766674967">"浏览"</string> <string name="menu_rename" msgid="1883113442688817554">"重命名"</string> <string name="menu_inspect" msgid="7279855349299446224">"获取信息"</string> <string name="menu_show_hidden_files" msgid="5140676344684492769">"显示隐藏的文件"</string> @@ -295,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"目前以网格模式显示。"</string> <string name="list_mode_showing" msgid="1225413902295895166">"目前以列表模式显示。"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"文件名"</string> </resources> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 419c087bf..aa923d75b 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"用格狀模式顯示緊。"</string> <string name="list_mode_showing" msgid="1225413902295895166">"用清單模式顯示緊。"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"檔案名稱"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index b0bf1ead4..9c99307b2 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"目前以格線模式顯示。"</string> <string name="list_mode_showing" msgid="1225413902295895166">"目前以清單模式顯示。"</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"檔案名稱"</string> </resources> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 7b448e8a1..80c39b98f 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -293,6 +293,5 @@ <string name="grid_mode_showing" msgid="2803166871485028508">"Ibonisa kumodi yegridi."</string> <string name="list_mode_showing" msgid="1225413902295895166">"Ibonisa kumodi yohlu."</string> <string name="bullet" msgid="5606740650312122766">"•"</string> - <!-- no translation found for file_name_hint (7843637320487415838) --> - <skip /> + <string name="file_name_hint" msgid="7843637320487415838">"Igama lefayela"</string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index f8ade4c47..c3f11bab4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -429,6 +429,7 @@ =1 {Zipping <xliff:g id="filename" example="foobar.txt">{filename}</xliff:g>} other {Zipping # files} }</string> + <string name="job_progress_panel_title" translatable="false">File Progress</string> <!-- Text in an alert dialog asking user to grant app access to a given directory in an external storage volume --> <string name="open_external_dialog_request">Grant <xliff:g id="appName" example="System Settings"><b>^1</b></xliff:g> diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java index 790feeac4..8a5779a69 100644 --- a/src/com/android/documentsui/BaseActivity.java +++ b/src/com/android/documentsui/BaseActivity.java @@ -20,6 +20,7 @@ import static com.android.documentsui.base.Shared.EXTRA_BENCHMARK; import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.base.State.MODE_GRID; import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; +import static com.android.documentsui.util.FlagUtils.isUsePeekPreviewFlagEnabled; import android.content.Context; import android.content.Intent; @@ -65,6 +66,7 @@ import com.android.documentsui.base.UserId; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.AppsRowManager; import com.android.documentsui.dirlist.DirectoryFragment; +import com.android.documentsui.peek.PeekViewManager; import com.android.documentsui.prefs.LocalPreferences; import com.android.documentsui.prefs.PreferencesMonitor; import com.android.documentsui.queries.CommandInterceptor; @@ -96,6 +98,7 @@ public abstract class BaseActivity protected SearchViewManager mSearchManager; protected AppsRowManager mAppsRowManager; + protected @Nullable PeekViewManager mPeekViewManager; protected UserIdManager mUserIdManager; protected UserManagerState mUserManagerState; protected State mState; @@ -414,6 +417,11 @@ public abstract class BaseActivity // Base classes must update result in their onCreate. setResult(AppCompatActivity.RESULT_CANCELED); updateRecentsSetting(); + + if (isUsePeekPreviewFlagEnabled()) { + mPeekViewManager = new PeekViewManager(this); + mPeekViewManager.initFragment(getSupportFragmentManager()); + } } private NavigationViewManager getNavigationViewManager(Breadcrumb breadcrumb, diff --git a/src/com/android/documentsui/HorizontalBreadcrumb.java b/src/com/android/documentsui/HorizontalBreadcrumb.java index f47f464c0..9d2fc723e 100644 --- a/src/com/android/documentsui/HorizontalBreadcrumb.java +++ b/src/com/android/documentsui/HorizontalBreadcrumb.java @@ -192,7 +192,12 @@ public final class HorizontalBreadcrumb extends RecyclerView implements Breadcru holder.mTitle.setText( isFirst ? mEnv.getCurrentRoot().title : mState.stack.get(position).displayName); - holder.mTitle.setEnabled(isLast); + if (isUseMaterial3FlagEnabled()) { + // The last path part in the breadcrumb is not clickable. + holder.mTitle.setEnabled(!isLast); + } else { + holder.mTitle.setEnabled(isLast); + } if (isUseMaterial3FlagEnabled()) { final int paddingHorizontal = (int) diff --git a/src/com/android/documentsui/IconUtils.java b/src/com/android/documentsui/IconUtils.java index ece38bb64..477209150 100644 --- a/src/com/android/documentsui/IconUtils.java +++ b/src/com/android/documentsui/IconUtils.java @@ -16,19 +16,56 @@ package com.android.documentsui; +import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; + import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; +import android.content.res.Resources; import android.graphics.Outline; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.util.TypedValue; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageView; import com.android.documentsui.base.UserId; +import com.android.documentsui.util.ColorUtils; + +import java.util.HashMap; +import java.util.Map; public class IconUtils { + // key: drawable resource id, value: color attribute id + private static final Map<Integer, Integer> sCustomIconColorMap = new HashMap<>(); + + static { + if (isUseMaterial3FlagEnabled()) { + // Use Resources.getSystem().getIdentifier() here instead of R.drawable.ic_doc_folder + // because com.android.internal.R is not public. + sCustomIconColorMap.put( + Resources.getSystem().getIdentifier("ic_doc_folder", "drawable", "android"), + com.google.android.material.R.attr.colorPrimaryFixedDim); + sCustomIconColorMap.put( + Resources.getSystem().getIdentifier("ic_doc_generic", "drawable", "android"), + com.google.android.material.R.attr.colorOutline); + sCustomIconColorMap.put( + Resources.getSystem() + .getIdentifier("ic_doc_certificate", "drawable", "android"), + com.google.android.material.R.attr.colorOutline); + sCustomIconColorMap.put( + Resources.getSystem().getIdentifier("ic_doc_codes", "drawable", "android"), + com.google.android.material.R.attr.colorOutline); + sCustomIconColorMap.put( + Resources.getSystem().getIdentifier("ic_doc_contact", "drawable", "android"), + com.google.android.material.R.attr.colorOutline); + sCustomIconColorMap.put( + Resources.getSystem().getIdentifier("ic_doc_font", "drawable", "android"), + com.google.android.material.R.attr.colorOutline); + } + } + public static Drawable loadPackageIcon(Context context, UserId userId, String authority, int icon, boolean maybeShowBadge) { if (icon != 0) { @@ -65,7 +102,17 @@ public class IconUtils { */ public static Drawable loadMimeIcon(Context context, String mimeType) { if (mimeType == null) return null; - return context.getContentResolver().getTypeInfo(mimeType).getIcon().loadDrawable(context); + Icon icon = context.getContentResolver().getTypeInfo(mimeType).getIcon(); + Drawable drawable = icon.loadDrawable(context); + // TODO(b/400263417): Remove this once RRO mime icons support dynamic colors. + if (isUseMaterial3FlagEnabled() + && drawable != null + && sCustomIconColorMap.containsKey(icon.getResId())) { + drawable.setTint( + ColorUtils.resolveMaterialColorAttribute( + context, sCustomIconColorMap.get(icon.getResId()))); + } + return drawable; } public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) { diff --git a/src/com/android/documentsui/JobPanelController.kt b/src/com/android/documentsui/JobPanelController.kt index b3b5f1cfd..a8ab8b0a4 100644 --- a/src/com/android/documentsui/JobPanelController.kt +++ b/src/com/android/documentsui/JobPanelController.kt @@ -20,7 +20,10 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.util.Log +import android.view.LayoutInflater import android.view.MenuItem +import android.view.ViewGroup +import android.widget.PopupWindow import android.widget.ProgressBar import com.android.documentsui.base.Menus import com.android.documentsui.services.FileOperationService @@ -77,8 +80,29 @@ class JobPanelController(private val mContext: Context) : BroadcastReceiver() { /** * Sets the menu item controlled by this class. The item's actionView must be a [ProgressBar]. */ + @Suppress("ktlint:standard:comment-wrapping") fun setMenuItem(menuItem: MenuItem) { - (menuItem.actionView as ProgressBar).max = MAX_PROGRESS + val progressIcon = menuItem.actionView as ProgressBar + progressIcon.max = MAX_PROGRESS + progressIcon.setOnClickListener { view -> + val panel = LayoutInflater.from(mContext).inflate( + R.layout.job_progress_panel, + /* root= */ null + ) + val popupWidth = mContext.resources.getDimension(R.dimen.job_progress_panel_width) + + mContext.resources.getDimension(R.dimen.job_progress_panel_margin) + val popup = PopupWindow( + /* contentView= */ panel, + /* width= */ popupWidth.toInt(), + /* height= */ ViewGroup.LayoutParams.WRAP_CONTENT, + /* focusable= */ true + ) + popup.showAsDropDown( + /* anchor= */ view, + /* xoff= */ view.width - popupWidth.toInt(), + /* yoff= */ 0 + ) + } mMenuItem = menuItem updateMenuItem(animate = false) } diff --git a/src/com/android/documentsui/dirlist/AnimationView.java b/src/com/android/documentsui/dirlist/AnimationView.java index d17bddf98..5813085b3 100644 --- a/src/com/android/documentsui/dirlist/AnimationView.java +++ b/src/com/android/documentsui/dirlist/AnimationView.java @@ -16,19 +16,22 @@ package com.android.documentsui.dirlist; -import androidx.annotation.IntDef; -import androidx.fragment.app.FragmentTransaction; +import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; import android.content.Context; import android.os.Bundle; import android.util.AttributeSet; import android.widget.LinearLayout; +import androidx.annotation.IntDef; +import androidx.fragment.app.FragmentTransaction; + import com.android.documentsui.R; import com.android.documentsui.base.Shared; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; /** * This class exists solely to support animated transition of our directory fragment. @@ -51,6 +54,8 @@ public class AnimationView extends LinearLayout { public static final int ANIM_LEAVE = 3; public static final int ANIM_ENTER = 4; + private final ArrayList<OnSizeChangedListener> mOnSizeChangedListeners = new ArrayList<>(); + private float mPosition = 0f; // The distance the animation will cover...currently matches the height of the @@ -65,11 +70,45 @@ public class AnimationView extends LinearLayout { super(context, attrs); } + /** + * A listener of the onSizeChanged method. + */ + public interface OnSizeChangedListener { + /** + * Called on the View's onSizeChanged. + */ + void onSizeChanged(); + } + + /** + * Adds a listener of the onSizeChanged method. + */ + public void addOnSizeChangedListener(OnSizeChangedListener listener) { + if (isUseMaterial3FlagEnabled()) { + mOnSizeChangedListeners.add(listener); + } + } + + /** + * Removes a listener of the onSizeChanged method. + */ + public void removeOnSizeChangedListener(OnSizeChangedListener listener) { + if (isUseMaterial3FlagEnabled()) { + mOnSizeChangedListeners.remove(listener); + } + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mSpan = h; setPosition(mPosition); + if (isUseMaterial3FlagEnabled()) { + for (int i = mOnSizeChangedListeners.size() - 1; i >= 0; --i) { + mOnSizeChangedListeners.get(i).onSizeChanged(); + } + } } public float getPosition() { diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java index 2ea906a60..2911d04e9 100644 --- a/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -108,6 +108,7 @@ import com.android.documentsui.clipping.ClipStore; import com.android.documentsui.clipping.DocumentClipper; import com.android.documentsui.clipping.UrisSupplier; import com.android.documentsui.dirlist.AnimationView.AnimationType; +import com.android.documentsui.dirlist.AnimationView.OnSizeChangedListener; import com.android.documentsui.picker.PickActivity; import com.android.documentsui.services.FileOperation; import com.android.documentsui.services.FileOperationService; @@ -188,7 +189,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On private SelectionMetadata mSelectionMetadata; private KeyInputHandler mKeyListener; private @Nullable DragHoverListener mDragHoverListener; - private View mRootView; + private AnimationView mRootView; private IconHelper mIconHelper; private SwipeRefreshLayout mRefreshLayout; private RecyclerView mRecView; @@ -416,13 +417,27 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On || Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action); } + private OnSizeChangedListener mOnSizeChangedListener = + new AnimationView.OnSizeChangedListener() { + @Override + public void onSizeChanged() { + if (isUseMaterial3FlagEnabled() && mState.derivedMode != MODE_LIST) { + // Update the grid layout when the window size changes. + updateLayout(mState.derivedMode); + } + } + }; + @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mHandler = new Handler(Looper.getMainLooper()); mActivity = (BaseActivity) getActivity(); - mRootView = inflater.inflate(R.layout.fragment_directory, container, false); + mRootView = (AnimationView) inflater.inflate(R.layout.fragment_directory, container, false); + if (isUseMaterial3FlagEnabled()) { + mRootView.addOnSizeChangedListener(mOnSizeChangedListener); + } mProgressBar = mRootView.findViewById(R.id.progressbar); assert mProgressBar != null; @@ -497,6 +512,10 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On mModel.removeUpdateListener(mAdapter.getModelUpdateListener()); setPreDrawListenerEnabled(false); + if (isUseMaterial3FlagEnabled()) { + mRootView.removeOnSizeChangedListener(mOnSizeChangedListener); + } + super.onDestroyView(); } @@ -809,7 +828,6 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On if (mLayout != null) { mLayout.setSpanCount(mColumnCount); } - int pad = getDirectoryPadding(mode); mAppBarHeight = getAppBarLayoutHeight(); mSaveLayoutHeight = getSaveLayoutHeight(); diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java index 86f7a1a14..cbe02dc25 100644 --- a/src/com/android/documentsui/files/ActionHandler.java +++ b/src/com/android/documentsui/files/ActionHandler.java @@ -71,6 +71,7 @@ import com.android.documentsui.clipping.DocumentClipper; import com.android.documentsui.clipping.UrisSupplier; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.inspector.InspectorActivity; +import com.android.documentsui.peek.PeekViewManager; import com.android.documentsui.queries.SearchViewManager; import com.android.documentsui.roots.ProvidersAccess; import com.android.documentsui.services.FileOperation; @@ -101,6 +102,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co private final ClipStore mClipStore; private final DragAndDropManager mDragAndDropManager; private final Runnable mCloseSelectionBar; + private final @Nullable PeekViewManager mPeekViewManager; ActionHandler( T activity, @@ -114,6 +116,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co DocumentClipper clipper, ClipStore clipStore, DragAndDropManager dragAndDropManager, + @Nullable PeekViewManager peekViewManager, Injector injector) { super(activity, state, providers, docs, searchMgr, executors, injector); @@ -125,6 +128,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co mClipper = clipper; mClipStore = clipStore; mDragAndDropManager = dragAndDropManager; + mPeekViewManager = peekViewManager; } @Override @@ -609,14 +613,16 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co mActivity.startActivity(intent); } - private void showPeek() { - Log.d(TAG, "Peek not implemented"); + private void showPeek(DocumentInfo doc) { + if (mPeekViewManager != null) { + mPeekViewManager.peekDocument(doc); + } } @Override public void showPreview(DocumentInfo doc) { - if (isUseMaterial3FlagEnabled() && isUsePeekPreviewFlagEnabled()) { - showPeek(); + if (isUsePeekPreviewFlagEnabled()) { + showPeek(doc); } else { showInspector(doc); } diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java index 50e266d38..b254ce525 100644 --- a/src/com/android/documentsui/files/FilesActivity.java +++ b/src/com/android/documentsui/files/FilesActivity.java @@ -19,6 +19,7 @@ package com.android.documentsui.files; import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_UNKNOWN; import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; +import static com.android.documentsui.util.FlagUtils.isVisualSignalsFlagEnabled; import static com.android.documentsui.util.FlagUtils.isZipNgFlagEnabled; import android.app.ActivityManager.TaskDescription; @@ -134,7 +135,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler return clipper.hasItemsToPaste(); } }, - getApplicationContext(), + isVisualSignalsFlagEnabled() ? this : getApplicationContext(), mInjector.selectionMgr, mProviders::getApplicationName, mInjector.getModel()::getItemUri, @@ -163,6 +164,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler clipper, DocumentsApplication.getClipStore(this), DocumentsApplication.getDragAndDropManager(this), + mPeekViewManager, mInjector); mInjector.searchManager = mSearchManager; @@ -210,9 +212,13 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler updateTaskDescription(intent); } - // Set save container background to transparent for edge to edge nav bar. - View saveContainer = findViewById(R.id.container_save); - saveContainer.setBackgroundColor(Color.TRANSPARENT); + // When the use_material3 flag is on, the file path bar is at the bottom of the layout and + // hence the edge to edge nav bar is no longer required. + if (!isUseMaterial3FlagEnabled()) { + // Set save container background to transparent for edge to edge nav bar. + View saveContainer = findViewById(R.id.container_save); + saveContainer.setBackgroundColor(Color.TRANSPARENT); + } presentFileErrors(icicle, intent); } diff --git a/src/com/android/documentsui/loaders/BaseFileLoader.kt b/src/com/android/documentsui/loaders/BaseFileLoader.kt index dd76217ac..fcb1d4cb0 100644 --- a/src/com/android/documentsui/loaders/BaseFileLoader.kt +++ b/src/com/android/documentsui/loaders/BaseFileLoader.kt @@ -77,7 +77,7 @@ abstract class BaseFileLoader( private var mResult: DirectoryResult? = null override fun cancelLoadInBackground() { - Log.d(TAG, "BasedFileLoader.cancelLoadInBackground") + Log.d(TAG, "${this::class.simpleName}.cancelLoadInBackground") super.cancelLoadInBackground() synchronized(this) { @@ -86,7 +86,7 @@ abstract class BaseFileLoader( } override fun deliverResult(result: DirectoryResult?) { - Log.d(TAG, "BasedFileLoader.deliverResult") + Log.d(TAG, "${this::class.simpleName}.deliverResult") if (isReset) { closeResult(result) return @@ -104,7 +104,7 @@ abstract class BaseFileLoader( } override fun onStartLoading() { - Log.d(TAG, "BasedFileLoader.onStartLoading") + Log.d(TAG, "${this::class.simpleName}.onStartLoading") val isCursorStale: Boolean = checkIfCursorStale(mResult) if (mResult != null && !isCursorStale) { deliverResult(mResult) @@ -115,17 +115,17 @@ abstract class BaseFileLoader( } override fun onStopLoading() { - Log.d(TAG, "BasedFileLoader.onStopLoading") + Log.d(TAG, "${this::class.simpleName}.onStopLoading") cancelLoad() } override fun onCanceled(result: DirectoryResult?) { - Log.d(TAG, "BasedFileLoader.onCanceled") + Log.d(TAG, "${this::class.simpleName}.onCanceled") closeResult(result) } override fun onReset() { - Log.d(TAG, "BasedFileLoader.onReset") + Log.d(TAG, "${this::class.simpleName}.onReset") super.onReset() // Ensure the loader is stopped diff --git a/src/com/android/documentsui/loaders/FolderLoader.kt b/src/com/android/documentsui/loaders/FolderLoader.kt index a166ca752..40c15dfe1 100644 --- a/src/com/android/documentsui/loaders/FolderLoader.kt +++ b/src/com/android/documentsui/loaders/FolderLoader.kt @@ -60,7 +60,7 @@ class FolderLoader( mListedDir.authority, mListedDir.documentId ) - var cursor = + val cursor = queryLocation(mRoot.rootId, folderChildrenUri, mOptions.otherQueryArgs, ALL_RESULTS) ?: emptyCursor() cursor.registerContentObserver(mObserver) diff --git a/src/com/android/documentsui/peek/PeekFragment.kt b/src/com/android/documentsui/peek/PeekFragment.kt new file mode 100644 index 000000000..50ee64efc --- /dev/null +++ b/src/com/android/documentsui/peek/PeekFragment.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.peek + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment + +import com.android.documentsui.R + +class PeekFragment : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.peek_layout, container, /* attachToRoot= */ false) + } +} diff --git a/src/com/android/documentsui/peek/PeekViewManager.kt b/src/com/android/documentsui/peek/PeekViewManager.kt new file mode 100644 index 000000000..9bbeba3bf --- /dev/null +++ b/src/com/android/documentsui/peek/PeekViewManager.kt @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.peek + +import android.app.Activity +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.FrameLayout +import androidx.annotation.IdRes +import androidx.fragment.app.FragmentManager +import com.android.documentsui.R +import androidx.fragment.app.FragmentTransaction +import com.android.documentsui.base.DocumentInfo +import com.android.documentsui.util.FlagUtils.Companion.isUsePeekPreviewFlagEnabled + +/** + * Manager that controls the Peek UI. + */ +open class PeekViewManager( + private val mActivity: Activity +) { + companion object { + const val TAG = "PeekViewManager" + } + + private var mPeekFragment: PeekFragment? = null + + open fun initFragment( + fm: FragmentManager + ) { + if (!isUsePeekPreviewFlagEnabled()) { + Log.e(TAG, "Attempting to create PeekViewManager while Peek disabled") + return + } + + if (getOverlayContainer() == null) { + Log.e(TAG, "Unable to find Peek container") + return + } + + // Load the Peek fragment into its container. + val peekFragment = PeekFragment() + mPeekFragment = peekFragment + val ft: FragmentTransaction = fm.beginTransaction() + ft.replace(getOverlayId(), peekFragment) + ft.commitAllowingStateLoss() + } + + open fun peekDocument(doc: DocumentInfo) { + if (mPeekFragment == null) { + Log.e(TAG, "Peek fragment not initialized") + return + } + show() + } + + @IdRes + private fun getOverlayId(): Int { + return R.id.peek_overlay + } + + private fun getOverlayContainer(): FrameLayout? { + return mActivity.findViewById(getOverlayId()) + } + + private fun show() { + getOverlayContainer()?.visibility = View.VISIBLE + } +}
\ No newline at end of file diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java index 68a797397..4f875072e 100644 --- a/src/com/android/documentsui/picker/PickActivity.java +++ b/src/com/android/documentsui/picker/PickActivity.java @@ -224,9 +224,11 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { } else if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_PICK_COPY_DESTINATION) { PickFragment.show(getSupportFragmentManager()); - } else { + } else if (!isUseMaterial3FlagEnabled()) { // If PickFragment or SaveFragment does not show, // Set save container background to transparent for edge to edge nav bar. + // However when the use_material3 flag is on, the file path bar is at the bottom of the + // layout and hence the edge to edge nav bar is no longer required. View saveContainer = findViewById(R.id.container_save); saveContainer.setBackgroundColor(Color.TRANSPARENT); } diff --git a/src/com/android/documentsui/util/FlagUtils.kt b/src/com/android/documentsui/util/FlagUtils.kt index a041dde44..cf81d5966 100644 --- a/src/com/android/documentsui/util/FlagUtils.kt +++ b/src/com/android/documentsui/util/FlagUtils.kt @@ -56,7 +56,7 @@ class FlagUtils { @JvmStatic fun isUsePeekPreviewFlagEnabled(): Boolean { - return Flags.usePeekPreviewRo() + return Flags.usePeekPreviewRo() && isUseMaterial3FlagEnabled() } } } diff --git a/tests/Android.bp b/tests/Android.bp index 41ccc1ab1..65e3f259f 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -42,6 +42,7 @@ android_library { name: "DocumentsUIPerfTests-lib", srcs: [ "common/com/android/documentsui/**/*.java", + "common/com/android/documentsui/**/*.kt", "functional/com/android/documentsui/ActivityTest.java", ], resource_dirs: [], @@ -70,6 +71,7 @@ android_library { srcs: [ "common/**/*.java", + "common/**/*.kt", "unit/**/*.java", "unit/**/*.kt", ], @@ -94,6 +96,7 @@ android_library { srcs: [ "common/**/*.java", + "common/**/*.kt", "functional/**/*.java", "functional/**/*.kt", "unit/**/*.java", diff --git a/tests/common/com/android/documentsui/bots/Bots.java b/tests/common/com/android/documentsui/bots/Bots.java index 8cc00ac7a..f0f69b9cf 100644 --- a/tests/common/com/android/documentsui/bots/Bots.java +++ b/tests/common/com/android/documentsui/bots/Bots.java @@ -48,6 +48,7 @@ public final class Bots { public final UiBot main; public final InspectorBot inspector; public final NotificationsBot notifications; + public final PeekBot peek; public Bots(UiDevice device, UiAutomation automation, Context context, int timeout) { main = new UiBot(device, context, TIMEOUT); @@ -61,13 +62,14 @@ public final class Bots { menu = new MenuBot(device, context, TIMEOUT); inspector = new InspectorBot(device, context, TIMEOUT); notifications = new NotificationsBot(device, context, TIMEOUT); + peek = new PeekBot(device, context, TIMEOUT); } /** * A test helper class that provides support for controlling directory list * and making assertions against the state of it. */ - static abstract class BaseBot { + public static abstract class BaseBot { public final UiDevice mDevice; final Context mContext; final int mTimeout; diff --git a/tests/common/com/android/documentsui/bots/DirectoryListBot.java b/tests/common/com/android/documentsui/bots/DirectoryListBot.java index 314013e53..8884bf0f2 100644 --- a/tests/common/com/android/documentsui/bots/DirectoryListBot.java +++ b/tests/common/com/android/documentsui/bots/DirectoryListBot.java @@ -16,6 +16,8 @@ package com.android.documentsui.bots; +import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; @@ -71,7 +73,7 @@ public class DirectoryListBot extends Bots.BaseBot { mDirListId = mTargetPackage + ":id/dir_list"; mItemRootId = mTargetPackage + ":id/item_root"; mPreviewId = mTargetPackage + ":id/preview_icon"; - mIconId = mTargetPackage + ":id/icon"; + mIconId = mTargetPackage + (isUseMaterial3FlagEnabled() ? ":id/icon_wrapper" : ":id/icon"); } public void assertDocumentsCount(int count) throws UiObjectNotFoundException { diff --git a/tests/common/com/android/documentsui/bots/PeekBot.kt b/tests/common/com/android/documentsui/bots/PeekBot.kt new file mode 100644 index 000000000..6906d5a1a --- /dev/null +++ b/tests/common/com/android/documentsui/bots/PeekBot.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.bots + +import android.content.Context +import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiObject +import junit.framework.Assert.assertFalse +import junit.framework.Assert.assertTrue + +/** + * A test helper class that provides support for controlling the peek overlay + * and making assertions against the state of it. + */ +class PeekBot( + device: UiDevice, + context: Context, + timeout: Int +) : Bots.BaseBot(device, context, timeout) { + + private val mOverlayId: String = "$mTargetPackage:id/peek_overlay" + private val mContainerId: String = "$mTargetPackage:id/peek_container" + + fun assertPeekActive() { + val peekContainer = findPeekContainer() + assertTrue(peekContainer.exists()) + } + + fun assertPeekHidden() { + val peekContainer = findPeekContainer() + assertFalse(peekContainer.exists()) + } + + fun findPeekContainer(): UiObject { + return findObject(mOverlayId, mContainerId) + } +} diff --git a/tests/common/com/android/documentsui/testing/MutableJobProgress.kt b/tests/common/com/android/documentsui/testing/MutableJobProgress.kt new file mode 100644 index 000000000..b2dd595f9 --- /dev/null +++ b/tests/common/com/android/documentsui/testing/MutableJobProgress.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.testing + +import com.android.documentsui.services.Job +import com.android.documentsui.services.JobProgress + +data class MutableJobProgress( + var id: String, + @Job.State var state: Int, + var msg: String?, + var hasFailures: Boolean, + var currentBytes: Long = -1, + var requiredBytes: Long = -1, + var msRemaining: Long = -1, +) { + fun toJobProgress() = + JobProgress(id, state, msg, hasFailures, currentBytes, requiredBytes, msRemaining) +} diff --git a/tests/common/com/android/documentsui/testing/TestPeekViewManager.kt b/tests/common/com/android/documentsui/testing/TestPeekViewManager.kt new file mode 100644 index 000000000..e3ad6033c --- /dev/null +++ b/tests/common/com/android/documentsui/testing/TestPeekViewManager.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.testing + +import android.app.Activity +import androidx.fragment.app.FragmentManager +import com.android.documentsui.base.DocumentInfo +import com.android.documentsui.peek.PeekViewManager + +class TestPeekViewManager(mActivity: Activity) : PeekViewManager(mActivity) { + + val peekDocument = TestEventListener<DocumentInfo>() + + override fun initFragment(fm: FragmentManager) { + throw UnsupportedOperationException() + } + + override fun peekDocument(doc: DocumentInfo) { + peekDocument.accept(doc) + } +}
\ No newline at end of file diff --git a/tests/functional/com/android/documentsui/JobPanelUiTest.kt b/tests/functional/com/android/documentsui/JobPanelUiTest.kt new file mode 100644 index 000000000..5b28b1f5d --- /dev/null +++ b/tests/functional/com/android/documentsui/JobPanelUiTest.kt @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui + +import android.content.Intent +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.doesNotExist +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import com.android.documentsui.files.FilesActivity +import com.android.documentsui.flags.Flags.FLAG_USE_MATERIAL3 +import com.android.documentsui.flags.Flags.FLAG_VISUAL_SIGNALS_RO +import com.android.documentsui.services.FileOperationService.ACTION_PROGRESS +import com.android.documentsui.services.FileOperationService.EXTRA_PROGRESS +import com.android.documentsui.services.Job +import com.android.documentsui.services.JobProgress +import com.android.documentsui.testing.MutableJobProgress +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RequiresFlagsEnabled(FLAG_USE_MATERIAL3, FLAG_VISUAL_SIGNALS_RO) +@RunWith(AndroidJUnit4::class) +class JobPanelUiTest : ActivityTestJunit4<FilesActivity>() { + @get:Rule + val mCheckFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + + private var mLastId = 0L + + private fun sendProgress(progresses: ArrayList<JobProgress>, id: Long = mLastId++) { + val context = InstrumentationRegistry.getInstrumentation().targetContext + var intent = Intent(ACTION_PROGRESS).apply { + `package` = context.packageName + putExtra("id", id) + putParcelableArrayListExtra(EXTRA_PROGRESS, progresses) + } + context.sendBroadcast(intent) + } + + @Before + override fun setUp() { + super.setUp() + } + + @After + override fun tearDown() { + super.tearDown() + } + + @Test + fun testJobPanelAppearsOnClick() { + onView(withId(R.id.option_menu_job_progress)).check(doesNotExist()) + onView(withId(R.id.job_progress_panel_title)).check(doesNotExist()) + + val progress = MutableJobProgress( + id = "jobId1", + state = Job.STATE_SET_UP, + msg = "Job started", + hasFailures = false, + currentBytes = 4, + requiredBytes = 10, + msRemaining = -1 + ) + sendProgress(arrayListOf(progress.toJobProgress())) + + onView(withId(R.id.option_menu_job_progress)) + .check(matches(isDisplayed())) + .perform(click()) + onView(withId(R.id.job_progress_panel_title)).check(matches(isDisplayed())) + } +} diff --git a/tests/functional/com/android/documentsui/peek/PeekUiTest.kt b/tests/functional/com/android/documentsui/peek/PeekUiTest.kt new file mode 100644 index 000000000..a7624df2f --- /dev/null +++ b/tests/functional/com/android/documentsui/peek/PeekUiTest.kt @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2025 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. + */ +package com.android.documentsui.peek + +import android.os.RemoteException +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import com.android.documentsui.ActivityTestJunit4 +import com.android.documentsui.files.FilesActivity +import com.android.documentsui.flags.Flags +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@LargeTest +@RunWith(AndroidJUnit4::class) +@RequiresFlagsEnabled(Flags.FLAG_USE_MATERIAL3, Flags.FLAG_USE_PEEK_PREVIEW_RO) +class PeekUiTest : ActivityTestJunit4<FilesActivity?>() { + @get:Rule + val mCheckFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + + @Before + @Throws(Exception::class) + override fun setUp() { + super.setUp() + initTestFiles() + } + + @After + @Throws(Exception::class) + override fun tearDown() { + super.tearDown() + } + + @Throws(RemoteException::class) + override fun initTestFiles() { + mDocsHelper!!.createDocument(rootDir0, "image/png", "image.png") + } + + @Test + @Throws( + Exception::class + ) + fun testShowPeek() { + bots!!.peek.assertPeekHidden() + bots!!.directory.selectDocument("image.png") + bots!!.main.clickActionItem("Get info") + bots!!.peek.assertPeekActive() + } +} diff --git a/tests/unit/com/android/documentsui/JobPanelControllerTest.kt b/tests/unit/com/android/documentsui/JobPanelControllerTest.kt index be0c9adbd..3e510edd9 100644 --- a/tests/unit/com/android/documentsui/JobPanelControllerTest.kt +++ b/tests/unit/com/android/documentsui/JobPanelControllerTest.kt @@ -30,6 +30,7 @@ import com.android.documentsui.services.FileOperationService.ACTION_PROGRESS import com.android.documentsui.services.FileOperationService.EXTRA_PROGRESS import com.android.documentsui.services.Job import com.android.documentsui.services.JobProgress +import com.android.documentsui.testing.MutableJobProgress import junit.framework.Assert.assertEquals import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue @@ -38,19 +39,6 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -private data class MutableJobProgress( - var id: String, - @Job.State var state: Int, - var msg: String?, - var hasFailures: Boolean, - var currentBytes: Long = -1, - var requiredBytes: Long = -1, - var msRemaining: Long = -1, -) { - fun toJobProgress() = - JobProgress(id, state, msg, hasFailures, currentBytes, requiredBytes, msRemaining) -} - @SmallTest @RequiresFlagsEnabled(FLAG_USE_MATERIAL3, FLAG_VISUAL_SIGNALS_RO) @RunWith(AndroidJUnit4::class) diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java index 1d6ef1fd6..5b19fcdc2 100644 --- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java +++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java @@ -76,6 +76,7 @@ import com.android.documentsui.testing.TestDocumentClipper; import com.android.documentsui.testing.TestDragAndDropManager; import com.android.documentsui.testing.TestEnv; import com.android.documentsui.testing.TestFeatures; +import com.android.documentsui.testing.TestPeekViewManager; import com.android.documentsui.testing.TestProvidersAccess; import com.android.documentsui.testing.UserManagers; import com.android.documentsui.ui.TestDialogController; @@ -110,6 +111,7 @@ public class ActionHandlerTest { private ActionHandler<TestActivity> mHandler; private TestDocumentClipper mClipper; private TestDragAndDropManager mDragAndDropManager; + private TestPeekViewManager mPeekViewManager; private TestFeatures mFeatures; private TestConfigStore mTestConfigStore; private boolean refreshAnswer = false; @@ -141,6 +143,7 @@ public class ActionHandlerTest { mDialogs = new TestDialogController(); mClipper = new TestDocumentClipper(); mDragAndDropManager = new TestDragAndDropManager(); + mPeekViewManager = new TestPeekViewManager(mActivity); mTestConfigStore = new TestConfigStore(); mEnv.state.configStore = mTestConfigStore; @@ -744,6 +747,8 @@ public class ActionHandlerTest { mHandler.showPreview(TestEnv.FILE_GIF); // The inspector activity is not called. mActivity.startActivity.assertNotCalled(); + mPeekViewManager.getPeekDocument().assertCalled(); + mPeekViewManager.getPeekDocument().assertLastArgument(TestEnv.FILE_GIF); } @Test @@ -751,6 +756,7 @@ public class ActionHandlerTest { public void testShowInspector() throws Exception { mHandler.showPreview(TestEnv.FILE_GIF); + mPeekViewManager.getPeekDocument().assertNotCalled(); mActivity.startActivity.assertCalled(); Intent intent = mActivity.startActivity.getLastValue(); assertTargetsComponent(intent, InspectorActivity.class); @@ -864,6 +870,7 @@ public class ActionHandlerTest { mClipper, null, // clip storage, not utilized unless we venture into *jumbo* clip territory. mDragAndDropManager, + mPeekViewManager, mEnv.injector); } } |