diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 1b9b3b3..d0275ba 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -31,6 +31,10 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
 import android.nfc.NfcAdapter;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -679,6 +683,13 @@
         mDevelopmentPreferencesListener = null;
     }
 
+    @Override
+    public void setTaskDescription(ActivityManager.TaskDescription taskDescription) {
+        final Bitmap icon = getBitmapFromXmlResource(R.drawable.ic_launcher_settings);
+        taskDescription.setIcon(icon);
+        super.setTaskDescription(taskDescription);
+    }
+
     protected boolean isValidFragment(String fragmentName) {
         // Almost all fragments are wrapped in this,
         // except for a few that have their own activities.
@@ -1114,4 +1125,17 @@
         }
         super.onActivityResult(requestCode, resultCode, data);
     }
+
+    @VisibleForTesting
+    Bitmap getBitmapFromXmlResource(int drawableRes) {
+        Drawable drawable = getResources().getDrawable(drawableRes, getTheme());
+        Canvas canvas = new Canvas();
+        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
+                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        canvas.setBitmap(bitmap);
+        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
+        drawable.draw(canvas);
+
+        return bitmap;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index df7a454..6a5b935 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -16,12 +16,13 @@
 
 package com.android.settings;
 
+import android.app.ActivityManager;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import com.android.settings.testutils.FakeFeatureFactory;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -32,9 +33,12 @@
 import org.robolectric.annotation.Config;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -45,7 +49,10 @@
     private Context mContext;
     @Mock
     private FragmentManager mFragmentManager;
-
+    @Mock
+    private ActivityManager.TaskDescription mTaskDescription;
+    @Mock
+    private Bitmap mBitmap;
     private SettingsActivity mActivity;
 
     @Before
@@ -53,14 +60,16 @@
         MockitoAnnotations.initMocks(this);
         FakeFeatureFactory.setupForTest(mContext);
         final FakeFeatureFactory factory =
-            (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+                (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
         when(factory.dashboardFeatureProvider.isEnabled()).thenReturn(true);
+
+        mActivity = spy(new SettingsActivity());
+        doReturn(mBitmap).when(mActivity).getBitmapFromXmlResource(anyInt());
     }
 
     @Test
     public void testQueryTextChange_shouldUpdate() {
         final String testQuery = "abc";
-        mActivity = new SettingsActivity();
 
         assertThat(mActivity.mSearchQuery).isNull();
         try {
@@ -83,4 +92,11 @@
 
         mActivity.launchSettingFragment(null, true, mock(Intent.class));
     }
+
+    @Test
+    public void testSetTaskDescription_IconChanged() {
+        mActivity.setTaskDescription(mTaskDescription);
+
+        verify(mTaskDescription).setIcon(any());
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
index cc55a4e..181ae64 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
@@ -56,6 +56,10 @@
         // TODO: Remove this once Robolectric is updated.
         if (id == com.android.settings.R.drawable.switchbar_background) {
             return new ColorDrawable();
+        } else if (id == com.android.settings.R.drawable.ic_launcher_settings) {
+            // ic_launcher_settings uses adaptive-icon, which is not supported by robolectric,
+            // change it to a normal drawable.
+            id = com.android.settings.R.drawable.ic_settings_wireless;
         }
         return super.loadDrawable(value, id, theme);
     }
