diff --git a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
index 6e47ff4..1c66f2a 100644
--- a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
@@ -129,7 +129,8 @@
             TaskShortcutFactory.PIN,
             TaskShortcutFactory.INSTALL,
             TaskShortcutFactory.FREE_FORM,
-            TaskShortcutFactory.WELLBEING
+            TaskShortcutFactory.WELLBEING,
+            TaskShortcutFactory.STORAGE_SCOPES,
     };
 
     /**
diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
index 255b910..923e049 100644
--- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
@@ -105,6 +105,26 @@
         }
     };
 
+    TaskShortcutFactory STORAGE_SCOPES = new TaskShortcutFactory() {
+        @Nullable
+        @Override
+        public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
+                TaskIdAttributeContainer taskContainer) {
+            TaskView taskView = taskContainer.getTaskView();
+
+            var s = SystemShortcut.StorageScopes.maybeGet(activity, taskContainer.getItemInfo(), taskView);
+            if (s == null) {
+                return null;
+            }
+            return Collections.singletonList(s);
+        }
+
+        @Override
+        public boolean showForSplitscreen() {
+            return true;
+        }
+    };
+
     class SplitSelectSystemShortcut extends SystemShortcut {
         private final TaskView mTaskView;
         private final SplitPositionOption mSplitPositionOption;
diff --git a/res/drawable/ic_sscopes_add_file.xml b/res/drawable/ic_sscopes_add_file.xml
new file mode 100644
index 0000000..0c78c3f
--- /dev/null
+++ b/res/drawable/ic_sscopes_add_file.xml
@@ -0,0 +1,13 @@
+<!-- note_add from Material Symbols -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48"
+    android:tint="?android:attr/colorControlNormal">
+
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M22.5,36.3H25.5V29.85H32V26.85H25.5V20.35H22.5V26.85H16V29.85H22.5ZM11,44Q9.8,44 8.9,43.1Q8,42.2 8,41V7Q8,5.8 8.9,4.9Q9.8,4 11,4H29.05L40,14.95V41Q40,42.2 39.1,43.1Q38.2,44 37,44ZM27.55,16.3V7H11Q11,7 11,7Q11,7 11,7V41Q11,41 11,41Q11,41 11,41H37Q37,41 37,41Q37,41 37,41V16.3ZM11,7V16.3V7V16.3V41Q11,41 11,41Q11,41 11,41Q11,41 11,41Q11,41 11,41V7Q11,7 11,7Q11,7 11,7Z"/>
+</vector>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 190a3a5..f33f0cd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -163,6 +163,8 @@
     <string name="uninstall_drop_target_label">Uninstall</string>
     <!-- Label for app info drop target. [CHAR_LIMIT=20] -->
     <string name="app_info_drop_target_label">App info</string>
+    <!-- Label for Storage Scopes drop target. [CHAR_LIMIT=20] -->
+    <string name="storage_scopes_drop_target_label">Storage Scopes</string>
     <!-- Label for install drop target. [CHAR_LIMIT=20] -->
     <string name="install_drop_target_label">Install</string>
     <!-- Label for install dismiss prediction. -->
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7da16c0..35b1262 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -60,6 +60,7 @@
 import static com.android.launcher3.model.ItemInstallQueue.FLAG_DRAG_AND_DROP;
 import static com.android.launcher3.popup.SystemShortcut.APP_INFO;
 import static com.android.launcher3.popup.SystemShortcut.INSTALL;
+import static com.android.launcher3.popup.SystemShortcut.STORAGE_SCOPES;
 import static com.android.launcher3.popup.SystemShortcut.WIDGETS;
 import static com.android.launcher3.states.RotationHelper.REQUEST_LOCK;
 import static com.android.launcher3.states.RotationHelper.REQUEST_NONE;
@@ -3252,7 +3253,7 @@
     }
 
     public Stream<SystemShortcut.Factory> getSupportedShortcuts() {
-        return Stream.of(APP_INFO, WIDGETS, INSTALL);
+        return Stream.of(APP_INFO, WIDGETS, INSTALL, STORAGE_SCOPES);
     }
 
     protected LauncherAccessibilityDelegate createAccessibilityDelegate() {
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index 69bba69..17fca39 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -4,13 +4,16 @@
 import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_WIDGETS_TAP;
 
 import android.app.ActivityOptions;
+import android.app.StorageScope;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.GosPackageState;
 import android.graphics.Rect;
 import android.view.View;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.window.SplashScreen;
 
 import androidx.annotation.Nullable;
 
@@ -210,6 +213,48 @@
         }
     }
 
+    public static final Factory<BaseDraggingActivity> STORAGE_SCOPES = StorageScopes::maybeGet;
+
+    public static class StorageScopes<T extends Context & ActivityContext> extends SystemShortcut<T> {
+
+        private String targetPackage;
+
+        private StorageScopes(T target, ItemInfo itemInfo, View originalView) {
+            super(R.drawable.ic_sscopes_add_file, R.string.storage_scopes_drop_target_label, target,
+                    itemInfo, originalView);
+        }
+
+        @Nullable
+        public static <T extends Context & ActivityContext> StorageScopes<T> maybeGet(T target, ItemInfo itemInfo, View originalView) {
+            String pkg = itemInfo.getTargetPackage();
+            if (pkg == null) {
+                return null;
+            }
+
+            GosPackageState ps = GosPackageState.get(pkg, itemInfo.user.getIdentifier());
+
+            if (ps != null && ps.hasFlag(GosPackageState.FLAG_STORAGE_SCOPES_ENABLED)) {
+                var res = new StorageScopes<T>(target, itemInfo, originalView);
+                res.targetPackage = pkg;
+                return res;
+            }
+
+            return null;
+        }
+
+        @Override
+        public void onClick(View v) {
+            dismissTaskMenuView(mTarget);
+
+            var intent = StorageScope.createConfigActivityIntent(targetPackage);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+            var opts = ActivityOptions.makeBasic()
+                    .setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_SOLID_COLOR)
+                    .toBundle();
+            mTarget.startActivityAsUser(intent, opts, mItemInfo.user);
+        }
+    }
+
     public static final Factory<BaseDraggingActivity> INSTALL =
             (activity, itemInfo, originalView) -> {
                 boolean supportsWebUI = (itemInfo instanceof WorkspaceItemInfo)
