[DocsUI M3] Util function for resolving material colors

This is a preparation for the Mime type icon color
customization.

Bug: 380746671
Test: m DocumentsUIGoogle && manual inspection
Flag: com.android.documentsui.flags.use_material3
Change-Id: Id0e50617ac06308433983a2581d5946793f228e8
diff --git a/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java b/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
index 838b1fa..6440967 100644
--- a/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
+++ b/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
@@ -22,13 +22,13 @@
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.util.Log;
-import android.util.TypedValue;
 import android.view.MotionEvent;
 
 import androidx.annotation.ColorRes;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
 import com.android.documentsui.R;
+import com.android.documentsui.util.ColorUtils;
 
 /**
  * A {@link SwipeRefreshLayout} that does not intercept any touch events. This relies on its nested
@@ -46,20 +46,12 @@
         super(context, attrs);
 
         if (isUseMaterial3FlagEnabled()) {
-            TypedValue spinnerColor = new TypedValue();
-            context.getTheme()
-                    .resolveAttribute(
-                            com.google.android.material.R.attr.colorOnPrimaryContainer,
-                            spinnerColor,
-                            true);
-            setColorSchemeResources(spinnerColor.resourceId);
-            TypedValue spinnerBackgroundColor = new TypedValue();
-            context.getTheme()
-                    .resolveAttribute(
-                            com.google.android.material.R.attr.colorPrimaryContainer,
-                            spinnerBackgroundColor,
-                            true);
-            setProgressBackgroundColorSchemeResource(spinnerBackgroundColor.resourceId);
+            setColorSchemeColors(
+                    ColorUtils.resolveMaterialColorAttribute(
+                            context, com.google.android.material.R.attr.colorOnPrimaryContainer));
+            setProgressBackgroundColorSchemeColor(
+                    ColorUtils.resolveMaterialColorAttribute(
+                            context, com.google.android.material.R.attr.colorPrimaryContainer));
         } else {
             final int[] styledAttrs = {android.R.attr.colorAccent};
 
diff --git a/src/com/android/documentsui/util/ColorUtils.kt b/src/com/android/documentsui/util/ColorUtils.kt
new file mode 100644
index 0000000..ee67b78
--- /dev/null
+++ b/src/com/android/documentsui/util/ColorUtils.kt
@@ -0,0 +1,36 @@
+/*
+ * 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.util
+
+import android.content.Context
+import android.util.TypedValue
+import androidx.annotation.AttrRes
+
+class ColorUtils {
+    companion object {
+        /**
+         * Resolve a color attribute from the Material3 theme, example usage.
+         * resolveMaterialColorAttribute(context, com.google.android.material.R.attr.XXX).
+         */
+        @JvmStatic
+        fun resolveMaterialColorAttribute(context: Context, @AttrRes colorAttrId: Int): Int {
+            val typedValue = TypedValue()
+            context.theme.resolveAttribute(colorAttrId, typedValue, true)
+            return typedValue.data
+        }
+    }
+}