diff --git a/res/values/config.xml b/res/values/config.xml
index 6a7a1bd..3c58a06 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -49,6 +49,8 @@
     <string name="config_wallpaper_picker_class" translatable="false">com.android.settings.Settings$WallpaperSettingsActivity</string>
     <!-- Fully-qualified class name for the styles & wallpaper picker activity. -->
     <string name="config_styles_and_wallpaper_picker_class" translatable="false"></string>
+    <!-- Intent extra for wallpaper picker activity. -->
+    <string name="config_wallpaper_picker_launch_extra" translatable="false">com.android.wallpaper.LAUNCH_SOURCE</string>
 
     <!-- Manufacturer backup settings to launch -->
     <string name="config_backup_settings_intent" translatable="false"></string>
diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java
index 72054e9..00687b2 100644
--- a/src/com/android/settings/display/WallpaperPreferenceController.java
+++ b/src/com/android/settings/display/WallpaperPreferenceController.java
@@ -36,10 +36,12 @@
 
 public class WallpaperPreferenceController extends BasePreferenceController {
     private static final String TAG = "WallpaperPrefController";
+    private static final String LAUNCHED_SETTINGS = "app_launched_settings";
 
     private final String mWallpaperPackage;
     private final String mWallpaperClass;
     private final String mStylesAndWallpaperClass;
+    private final String mWallpaperLaunchExtra;
 
     public WallpaperPreferenceController(Context context, String key) {
         super(context, key);
@@ -47,6 +49,7 @@
         mWallpaperClass = mContext.getString(R.string.config_wallpaper_picker_class);
         mStylesAndWallpaperClass =
                 mContext.getString(R.string.config_styles_and_wallpaper_picker_class);
+        mWallpaperLaunchExtra = mContext.getString(R.string.config_wallpaper_picker_launch_extra);
     }
 
     @Override
@@ -96,7 +99,8 @@
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (getPreferenceKey().equals(preference.getKey())) {
-            final Intent intent = new Intent().setComponent(getComponentName());
+            final Intent intent = new Intent().setComponent(
+                getComponentName()).putExtra(mWallpaperLaunchExtra, LAUNCHED_SETTINGS);
             if (areStylesAvailable()) {
                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             }
diff --git a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
index 999e92c..c2b3fa0 100644
--- a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
+++ b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
@@ -23,6 +23,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.R;
 import com.android.settings.display.WallpaperPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.Indexable;
@@ -40,11 +41,18 @@
     private static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR";
     private static final String WALLPAPER_FOCUS = "focus_wallpaper";
     private static final String WALLPAPER_ONLY = "wallpaper_only";
+    private static final String LAUNCHED_SUW = "app_launched_suw";
+
+    private String mWallpaperLaunchExtra;
 
     @Override
     protected void addExtras(Intent intent) {
         if (WizardManagerHelper.isAnySetupWizard(intent)) {
             intent.putExtra(WALLPAPER_FLAVOR_EXTRA, WALLPAPER_ONLY);
+
+            mWallpaperLaunchExtra =
+                    getResources().getString(R.string.config_wallpaper_picker_launch_extra);
+            intent.putExtra(mWallpaperLaunchExtra, LAUNCHED_SUW);
         } else {
             intent.putExtra(WALLPAPER_FLAVOR_EXTRA, WALLPAPER_FOCUS);
         }
diff --git a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
index a8893ea..04bd4bb 100644
--- a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
@@ -211,4 +211,19 @@
                 .getNextStartedActivityForResult().intent.getComponent().getClassName())
                 .isEqualTo(mContext.getString(R.string.config_styles_and_wallpaper_picker_class));
     }
+
+    @Test
+    public void handlePreferenceTreeClick_launchSourceExtra() {
+        mShadowPackageManager.setResolveInfosForIntent(
+            mWallpaperIntent, Lists.newArrayList());
+        mShadowPackageManager.setResolveInfosForIntent(
+            mStylesAndWallpaperIntent, Lists.newArrayList());
+        Preference preference = new Preference(mContext);
+        preference.setKey(TEST_KEY);
+
+        mController.handlePreferenceTreeClick(preference);
+
+        assertThat(Shadows.shadowOf(mContext).getNextStartedActivityForResult()
+            .intent.hasExtra("com.android.wallpaper.LAUNCH_SOURCE")).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
index 73f12c2..6201bcb 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
@@ -56,6 +56,7 @@
     private static final String PACKAGE_WALLPAPER_ACTIVITY =
             "com.android.settings.wallpaper.WallpaperSuggestionActivity";
     private static final String WALLPAPER_FLAVOR = "com.android.launcher3.WALLPAPER_FLAVOR";
+    private static final String WALLPAPER_LAUNCH_SOURCE = "com.android.wallpaper.LAUNCH_SOURCE";
 
     @Before
     public void setUp() {
@@ -100,7 +101,7 @@
     }
 
     @Test
-    public void addExtras_intentFromSetupWizard_extrasHasWallpaperOnly() {
+    public void addExtras_intentFromSetupWizard_extrasHasWallpaperOnlyAndLaunchedSuw() {
         WallpaperSuggestionActivity activity =
                 Robolectric.buildActivity(WallpaperSuggestionActivity.class, new Intent(
                         Intent.ACTION_MAIN).setComponent(
@@ -112,6 +113,8 @@
 
         assertThat(intent).isNotNull();
         assertThat(intent.getStringExtra(WALLPAPER_FLAVOR)).isEqualTo("wallpaper_only");
+        assertThat(intent.getStringExtra(WALLPAPER_LAUNCH_SOURCE))
+                .isEqualTo("app_launched_suw");
     }
 
     @Test
