summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
Diffstat (limited to 'res')
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/color/grid_item_ripple_color.xml28
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_item_mask.xml21
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/drawable/grid_nameplate_background.xml214
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/drawer_layout.xml8
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/fixed_layout.xml7
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/item_doc_grid.xml295
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/job_progress_panel.xml43
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/nav_rail_layout.xml8
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/layout/peek_layout.xml22
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/values/colors.xml4
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml12
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/values/styles.xml7
-rw-r--r--res/flag(com.android.documentsui.flags.use_material3)/values/styles_text.xml4
-rw-r--r--res/values/strings.xml1
14 files changed, 423 insertions, 251 deletions
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)/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)/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/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 fe98c92b5..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
@@ -91,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 8c1fb7440..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>
@@ -71,8 +72,6 @@
<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>
@@ -81,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>
@@ -250,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 2f400ea24..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
@@ -159,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/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>