Merge commit 'f9f9e248' into manualmerge

Conflicts:
	packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java
	tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java

Change-Id: Ibbb2fec2d8c6f5d41398272753d271dfae698100
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 3ef12f9..81091e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -175,8 +175,10 @@
                             break;
                         }
                         case OP_REMOVE_ICON:
-                            mList.removeIcon(index);
-                            mCallbacks.removeIcon(mList.getSlot(index), index, viewIndex);
+                            if (mList.getIcon(index) != null) {
+                                mList.removeIcon(index);
+                                mCallbacks.removeIcon(mList.getSlot(index), index, viewIndex);
+                            }
                             break;
                     }
                     break;
diff --git a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
index ca438ec..7e69ee4 100644
--- a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
+++ b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
@@ -60,6 +60,27 @@
     }
 
     private Test[] mTests = new Test[] {
+        new Test("Double Remove") {
+            public void run() {
+                Log.d(TAG, "set 0");
+                mStatusBarManager.setIcon("speakerphone", R.drawable.stat_sys_phone, 0);
+                Log.d(TAG, "remove 1");
+                mStatusBarManager.removeIcon("tty");
+
+                SystemClock.sleep(1000);
+
+                Log.d(TAG, "set 1");
+                mStatusBarManager.setIcon("tty", R.drawable.stat_sys_phone, 0);
+                if (false) {
+                    Log.d(TAG, "set 2");
+                    mStatusBarManager.setIcon("tty", R.drawable.stat_sys_phone, 0);
+                }
+                Log.d(TAG, "remove 2");
+                mStatusBarManager.removeIcon("tty");
+                Log.d(TAG, "set 3");
+                mStatusBarManager.setIcon("speakerphone", R.drawable.stat_sys_phone, 0);
+            }
+        },
         new Test("Hide (FLAG_FULLSCREEN)") {
             public void run() {
                 Window win = getWindow();