CommandQueue.java revision 2580a976ec93a01ed00fae51364ad872bc591d95
10cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato/* 20cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Copyright (C) 2010 The Android Open Source Project 30cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 40cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 50cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * you may not use this file except in compliance with the License. 60cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * You may obtain a copy of the License at 70cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 80cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 90cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 100cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Unless required by applicable law or agreed to in writing, software 110cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 120cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * See the License for the specific language governing permissions and 140cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * limitations under the License. 150cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato */ 160cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1779de0c550037a5328bbc7f4fddaf02f192a5c283Joe Onoratopackage com.android.systemui.statusbar; 180cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 190cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport android.os.Handler; 20a0c56fe93925d20d9c0b830b9664699ce557e78cJoe Onoratoimport android.os.IBinder; 210cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport android.os.Message; 22de84f0e77ea2bf713d15c290264059a413c2486aJohn Spurlock 230cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport com.android.internal.statusbar.IStatusBar; 240cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport com.android.internal.statusbar.StatusBarIcon; 250cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport com.android.internal.statusbar.StatusBarIconList; 260cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 27f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato/** 28f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato * This class takes the functions from IStatusBar that come in on 29f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato * binder pool threads and posts messages to get them onto the main 30f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato * thread, and calls onto Callbacks. It also takes care of 314762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato * coalescing these calls so they don't stack up. For the calls 324762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato * are coalesced, note that they are all idempotent. 33f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato */ 34808182dc874e93582da38d013a4a790d6bc08fc9Joe Onoratopublic class CommandQueue extends IStatusBar.Stub { 351d4d30aebd2c22627131819cabfe95f97def2c83Daniel Sandler private static final int INDEX_MASK = 0xffff; 361d4d30aebd2c22627131819cabfe95f97def2c83Daniel Sandler private static final int MSG_SHIFT = 16; 371d4d30aebd2c22627131819cabfe95f97def2c83Daniel Sandler private static final int MSG_MASK = 0xffff << MSG_SHIFT; 380cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 391d4d30aebd2c22627131819cabfe95f97def2c83Daniel Sandler private static final int OP_SET_ICON = 1; 400cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private static final int OP_REMOVE_ICON = 2; 410cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 42e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov private static final int MSG_ICON = 1 << MSG_SHIFT; 43e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_DISABLE = 2 << MSG_SHIFT; 44e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_EXPAND_NOTIFICATIONS = 3 << MSG_SHIFT; 45e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_COLLAPSE_PANELS = 4 << MSG_SHIFT; 46e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_EXPAND_SETTINGS = 5 << MSG_SHIFT; 47e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_SET_SYSTEMUI_VISIBILITY = 6 << MSG_SHIFT; 48e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_TOP_APP_WINDOW_CHANGED = 7 << MSG_SHIFT; 49e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_SHOW_IME_BUTTON = 8 << MSG_SHIFT; 50e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_SET_HARD_KEYBOARD_STATUS = 9 << MSG_SHIFT; 51e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_TOGGLE_RECENT_APPS = 10 << MSG_SHIFT; 52e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_PRELOAD_RECENT_APPS = 11 << MSG_SHIFT; 53e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_CANCEL_PRELOAD_RECENT_APPS = 12 << MSG_SHIFT; 54e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_SET_WINDOW_STATE = 13 << MSG_SHIFT; 55e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_SHOW_RECENT_APPS = 14 << MSG_SHIFT; 56e71fefcc8b382947f6f6a8bf816b3889fb368fedChristoph Studer private static final int MSG_HIDE_RECENT_APPS = 15 << MSG_SHIFT; 57328310c6fac6066d338926bb43d359862cae36d2Daniel Sandler 589a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_NONE = 0; 599a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; 609a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_RECENTS_PANEL = 1 << 1; 619a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_NOTIFICATION_PANEL = 1 << 2; 629a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_INPUT_METHODS_PANEL = 1 << 3; 639a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller public static final int FLAG_EXCLUDE_COMPAT_MODE_PANEL = 1 << 4; 649a720f5eb6c67b581df22f4ecb498cebb459babeJim Miller 65b605fecd9e4282823af754b3968b21205d64554aJason Monk private static final String SHOW_IME_SWITCHER_KEY = "showImeSwitcherKey"; 66b605fecd9e4282823af754b3968b21205d64554aJason Monk 670cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private StatusBarIconList mList; 680cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private Callbacks mCallbacks; 690cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private Handler mHandler = new H(); 700cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 710cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato /** 720cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * These methods are called back on the main thread. 730cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato */ 740cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public interface Callbacks { 750cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon); 760cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void updateIcon(String slot, int index, int viewIndex, 770cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato StatusBarIcon old, StatusBarIcon icon); 780cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void removeIcon(String slot, int index, int viewIndex); 792580a976ec93a01ed00fae51364ad872bc591d95Jorim Jaggi public void disable(int state, boolean animate); 8011cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateExpandNotificationsPanel(); 8111cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateCollapsePanels(int flags); 8211cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateExpandSettingsPanel(); 833a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn public void setSystemUiVisibility(int vis, int mask); 847d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn public void topAppWindowChanged(boolean visible); 85b605fecd9e4282823af754b3968b21205d64554aJason Monk public void setImeWindowStatus(IBinder token, int vis, int backDisposition, 86b605fecd9e4282823af754b3968b21205d64554aJason Monk boolean showImeSwitcher); 872992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown public void setHardKeyboardStatus(boolean available, boolean enabled); 881e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung public void showRecentApps(boolean triggeredFromAltTab); 896cb485fd2e2f8ace05e1ff281ab0fc824d3652cbWinson Chung public void hideRecentApps(boolean triggeredFromAltTab); 903b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka public void toggleRecentApps(); 917f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka public void preloadRecentApps(); 921e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung public void cancelPreloadRecentApps(); 93e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public void showSearchPanel(); 94e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public void hideSearchPanel(); 959764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock public void setWindowState(int window, int state); 960cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 970cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 980cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public CommandQueue(Callbacks callbacks, StatusBarIconList list) { 990cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mCallbacks = callbacks; 1000cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mList = list; 1010cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1020cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1030cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void setIcon(int index, StatusBarIcon icon) { 1040cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato synchronized (mList) { 1050cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato int what = MSG_ICON | index; 1060cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mHandler.removeMessages(what); 1070cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mHandler.obtainMessage(what, OP_SET_ICON, 0, icon.clone()).sendToTarget(); 1080cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1090cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1100cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1110cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void removeIcon(int index) { 1120cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato synchronized (mList) { 1130cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato int what = MSG_ICON | index; 1140cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mHandler.removeMessages(what); 1150cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mHandler.obtainMessage(what, OP_REMOVE_ICON, 0, null).sendToTarget(); 1160cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1170cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1180cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 119f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato public void disable(int state) { 120f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato synchronized (mList) { 121f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato mHandler.removeMessages(MSG_DISABLE); 122f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato mHandler.obtainMessage(MSG_DISABLE, state, 0, null).sendToTarget(); 123f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato } 124f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato } 125f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato 12611cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateExpandNotificationsPanel() { 127e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov synchronized (mList) { 128e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov mHandler.removeMessages(MSG_EXPAND_NOTIFICATIONS); 129e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov mHandler.sendEmptyMessage(MSG_EXPAND_NOTIFICATIONS); 130e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov } 131e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov } 132e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov 13311cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateCollapsePanels() { 1344762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato synchronized (mList) { 13511cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mHandler.removeMessages(MSG_COLLAPSE_PANELS); 13611cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mHandler.sendEmptyMessage(MSG_COLLAPSE_PANELS); 1374762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato } 1384762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato } 1394762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato 14011cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler public void animateExpandSettingsPanel() { 141e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov synchronized (mList) { 14211cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mHandler.removeMessages(MSG_EXPAND_SETTINGS); 14311cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mHandler.sendEmptyMessage(MSG_EXPAND_SETTINGS); 1444762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato } 1454762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato } 1464762c2d75a55e0854bbff2f996748116d4ab1a37Joe Onorato 1473a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn public void setSystemUiVisibility(int vis, int mask) { 1489305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato synchronized (mList) { 14960ee25643e0a7b8841063a4e97b0f18c51807e91Daniel Sandler mHandler.removeMessages(MSG_SET_SYSTEMUI_VISIBILITY); 1503a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, vis, mask, null).sendToTarget(); 1519305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato } 1529305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato } 1539305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato 1547d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn public void topAppWindowChanged(boolean menuVisible) { 155e02d808abf370965c3c4e4d38af11bc69110fde2Daniel Sandler synchronized (mList) { 1567d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn mHandler.removeMessages(MSG_TOP_APP_WINDOW_CHANGED); 1577d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn mHandler.obtainMessage(MSG_TOP_APP_WINDOW_CHANGED, menuVisible ? 1 : 0, 0, 1587d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn null).sendToTarget(); 159e02d808abf370965c3c4e4d38af11bc69110fde2Daniel Sandler } 160e02d808abf370965c3c4e4d38af11bc69110fde2Daniel Sandler } 161e02d808abf370965c3c4e4d38af11bc69110fde2Daniel Sandler 162b605fecd9e4282823af754b3968b21205d64554aJason Monk public void setImeWindowStatus(IBinder token, int vis, int backDisposition, 163b605fecd9e4282823af754b3968b21205d64554aJason Monk boolean showImeSwitcher) { 16406487a58be22b100daf3f950b9a1d25c3ea42aa2satok synchronized (mList) { 16506487a58be22b100daf3f950b9a1d25c3ea42aa2satok mHandler.removeMessages(MSG_SHOW_IME_BUTTON); 166b605fecd9e4282823af754b3968b21205d64554aJason Monk Message m = mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, vis, backDisposition, token); 167b605fecd9e4282823af754b3968b21205d64554aJason Monk m.getData().putBoolean(SHOW_IME_SWITCHER_KEY, showImeSwitcher); 168b605fecd9e4282823af754b3968b21205d64554aJason Monk m.sendToTarget(); 16906487a58be22b100daf3f950b9a1d25c3ea42aa2satok } 17006487a58be22b100daf3f950b9a1d25c3ea42aa2satok } 17106487a58be22b100daf3f950b9a1d25c3ea42aa2satok 1722992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown public void setHardKeyboardStatus(boolean available, boolean enabled) { 1732992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown synchronized (mList) { 1742992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown mHandler.removeMessages(MSG_SET_HARD_KEYBOARD_STATUS); 1752992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown mHandler.obtainMessage(MSG_SET_HARD_KEYBOARD_STATUS, 1762992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown available ? 1 : 0, enabled ? 1 : 0).sendToTarget(); 1772992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown } 1782992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown } 1792992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown 1801e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung public void showRecentApps(boolean triggeredFromAltTab) { 1811e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung synchronized (mList) { 1821e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung mHandler.removeMessages(MSG_SHOW_RECENT_APPS); 1831e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung mHandler.obtainMessage(MSG_SHOW_RECENT_APPS, 1841e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung triggeredFromAltTab ? 1 : 0, 0, null).sendToTarget(); 1851e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung } 1861e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung } 1871e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung 1886cb485fd2e2f8ace05e1ff281ab0fc824d3652cbWinson Chung public void hideRecentApps(boolean triggeredFromAltTab) { 1891e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung synchronized (mList) { 1901e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung mHandler.removeMessages(MSG_HIDE_RECENT_APPS); 1916cb485fd2e2f8ace05e1ff281ab0fc824d3652cbWinson Chung mHandler.obtainMessage(MSG_HIDE_RECENT_APPS, 1926cb485fd2e2f8ace05e1ff281ab0fc824d3652cbWinson Chung triggeredFromAltTab ? 1 : 0, 0, null).sendToTarget(); 1931e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung } 1941e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung } 1951e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung 1963b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka public void toggleRecentApps() { 1973b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka synchronized (mList) { 1983b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka mHandler.removeMessages(MSG_TOGGLE_RECENT_APPS); 1993b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka mHandler.obtainMessage(MSG_TOGGLE_RECENT_APPS, 0, 0, null).sendToTarget(); 2003b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka } 2013b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka } 2023b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka 2037f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka public void preloadRecentApps() { 2047f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka synchronized (mList) { 2057f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mHandler.removeMessages(MSG_PRELOAD_RECENT_APPS); 2067f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mHandler.obtainMessage(MSG_PRELOAD_RECENT_APPS, 0, 0, null).sendToTarget(); 2077f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka } 2087f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka } 2097f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka 2107f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka public void cancelPreloadRecentApps() { 2117f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka synchronized (mList) { 2127f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mHandler.removeMessages(MSG_CANCEL_PRELOAD_RECENT_APPS); 2137f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mHandler.obtainMessage(MSG_CANCEL_PRELOAD_RECENT_APPS, 0, 0, null).sendToTarget(); 2147f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka } 2157f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka } 2167f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka 2179764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock public void setWindowState(int window, int state) { 2189764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock synchronized (mList) { 2195b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock // don't coalesce these 2209764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock mHandler.obtainMessage(MSG_SET_WINDOW_STATE, window, state, null).sendToTarget(); 2219764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock } 2229764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock } 2239764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock 224380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 2250cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private final class H extends Handler { 2260cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void handleMessage(Message msg) { 227f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato final int what = msg.what & MSG_MASK; 22866d7d01ed91968f4ed2e2669fd306aa2af61cd16Joe Onorato switch (what) { 2290cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato case MSG_ICON: { 230f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato final int index = msg.what & INDEX_MASK; 231f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato final int viewIndex = mList.getViewIndex(index); 2320cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato switch (msg.arg1) { 2330cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato case OP_SET_ICON: { 2340cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato StatusBarIcon icon = (StatusBarIcon)msg.obj; 2350cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato StatusBarIcon old = mList.getIcon(index); 2360cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (old == null) { 2370cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mList.setIcon(index, icon); 2380cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mCallbacks.addIcon(mList.getSlot(index), index, viewIndex, icon); 2390cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } else { 2400cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mList.setIcon(index, icon); 2410cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mCallbacks.updateIcon(mList.getSlot(index), index, viewIndex, 2420cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato old, icon); 2430cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 2440cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato break; 2450cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 2460cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato case OP_REMOVE_ICON: 247795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato if (mList.getIcon(index) != null) { 248795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato mList.removeIcon(index); 249795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato mCallbacks.removeIcon(mList.getSlot(index), index, viewIndex); 250795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato } 2510cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato break; 2520cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 2530cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato break; 254a0c56fe93925d20d9c0b830b9664699ce557e78cJoe Onorato } 255f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato case MSG_DISABLE: 2562580a976ec93a01ed00fae51364ad872bc591d95Jorim Jaggi mCallbacks.disable(msg.arg1, true /* animate */); 257f3f0e053f0cc66249a11639eb67d0cdc2da26dedJoe Onorato break; 258e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov case MSG_EXPAND_NOTIFICATIONS: 25911cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mCallbacks.animateExpandNotificationsPanel(); 260e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov break; 26111cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler case MSG_COLLAPSE_PANELS: 26211cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mCallbacks.animateCollapsePanels(0); 263e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov break; 26411cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler case MSG_EXPAND_SETTINGS: 26511cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler mCallbacks.animateExpandSettingsPanel(); 2669305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato break; 26760ee25643e0a7b8841063a4e97b0f18c51807e91Daniel Sandler case MSG_SET_SYSTEMUI_VISIBILITY: 2683a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn mCallbacks.setSystemUiVisibility(msg.arg1, msg.arg2); 2699305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato break; 2707d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn case MSG_TOP_APP_WINDOW_CHANGED: 2717d04932ef5c001769ccef244f551b75773f1666bDianne Hackborn mCallbacks.topAppWindowChanged(msg.arg1 != 0); 272e02d808abf370965c3c4e4d38af11bc69110fde2Daniel Sandler break; 27306487a58be22b100daf3f950b9a1d25c3ea42aa2satok case MSG_SHOW_IME_BUTTON: 274b605fecd9e4282823af754b3968b21205d64554aJason Monk mCallbacks.setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2, 275b605fecd9e4282823af754b3968b21205d64554aJason Monk msg.getData().getBoolean(SHOW_IME_SWITCHER_KEY, false)); 27606487a58be22b100daf3f950b9a1d25c3ea42aa2satok break; 2772992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown case MSG_SET_HARD_KEYBOARD_STATUS: 2782992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown mCallbacks.setHardKeyboardStatus(msg.arg1 != 0, msg.arg2 != 0); 2792992ea782fa61780d8e0de7a36a2a84622f8694bJeff Brown break; 2801e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung case MSG_SHOW_RECENT_APPS: 2811e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung mCallbacks.showRecentApps(msg.arg1 != 0); 2821e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung break; 2831e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung case MSG_HIDE_RECENT_APPS: 2846cb485fd2e2f8ace05e1ff281ab0fc824d3652cbWinson Chung mCallbacks.hideRecentApps(msg.arg1 != 0); 2851e8d71b605b4872e93200706a80a88a3ff25498cWinson Chung break; 2863b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka case MSG_TOGGLE_RECENT_APPS: 2873b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka mCallbacks.toggleRecentApps(); 2883b1fc47d004f6b29af8f40d181baa3460b1e3b15Michael Jurka break; 2897f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka case MSG_PRELOAD_RECENT_APPS: 2907f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mCallbacks.preloadRecentApps(); 2917f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka break; 2927f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka case MSG_CANCEL_PRELOAD_RECENT_APPS: 2937f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka mCallbacks.cancelPreloadRecentApps(); 2947f2668c8469934ce83a5647977f6e74ab782cf07Michael Jurka break; 2959764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock case MSG_SET_WINDOW_STATE: 2969764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock mCallbacks.setWindowState(msg.arg1, msg.arg2); 2979764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock break; 2985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2990cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 3000cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 3010cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 3020cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato} 3030cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 304