19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17305c78cce649056643641c51f12f2b6d2eb839f3Jim Miller
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franzimport android.annotation.IntDef;
21d86b8fea43ebb6e5c31691b44d8ceb0d8d3c9072Jeff Sharkeyimport android.annotation.SystemService;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Binder;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager;
279cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandlerimport android.util.Slog;
287bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onoratoimport android.view.View;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
300cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport com.android.internal.statusbar.IStatusBarService;
310cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato
32cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franzimport java.lang.annotation.Retention;
33cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franzimport java.lang.annotation.RetentionPolicy;
34cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Allows an app to control the status bar.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
40d86b8fea43ebb6e5c31691b44d8ceb0d8d3c9072Jeff Sharkey@SystemService(Context.STATUS_BAR_SERVICE)
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class StatusBarManager {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
437bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_EXPAND = View.STATUS_BAR_DISABLE_EXPAND;
447bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_NOTIFICATION_ICONS = View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS;
457bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_NOTIFICATION_ALERTS
467bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato            = View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS;
47a5e0f415d351ad1a9c0ffde8d93df91a2384591fDan Sandler    @Deprecated
487bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_NOTIFICATION_TICKER
497bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato            = View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER;
507bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_SYSTEM_INFO = View.STATUS_BAR_DISABLE_SYSTEM_INFO;
51dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler    public static final int DISABLE_HOME = View.STATUS_BAR_DISABLE_HOME;
52dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler    public static final int DISABLE_RECENT = View.STATUS_BAR_DISABLE_RECENT;
536478adc6b4c35f8c56176582bcde029998e7436fJoe Onorato    public static final int DISABLE_BACK = View.STATUS_BAR_DISABLE_BACK;
547bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_CLOCK = View.STATUS_BAR_DISABLE_CLOCK;
55d5483c3157a28e2ebc05a0c918df8a2be0a7fc89Daniel Sandler    public static final int DISABLE_SEARCH = View.STATUS_BAR_DISABLE_SEARCH;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
57dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler    @Deprecated
58dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler    public static final int DISABLE_NAVIGATION =
59dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler            View.STATUS_BAR_DISABLE_HOME | View.STATUS_BAR_DISABLE_RECENT;
60dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DISABLE_NONE = 0x00000000;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
637bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato    public static final int DISABLE_MASK = DISABLE_EXPAND | DISABLE_NOTIFICATION_ICONS
647bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato            | DISABLE_NOTIFICATION_ALERTS | DISABLE_NOTIFICATION_TICKER
65d5483c3157a28e2ebc05a0c918df8a2be0a7fc89Daniel Sandler            | DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK
66d5483c3157a28e2ebc05a0c918df8a2be0a7fc89Daniel Sandler            | DISABLE_SEARCH;
677bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato
6827cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz    /**
6927cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz     * Flag to disable quick settings.
7027cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz     *
7127cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz     * Setting this flag disables quick settings completely, but does not disable expanding the
7227cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz     * notification shade.
7327cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz     */
7427cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz    public static final int DISABLE2_QUICK_SETTINGS = 0x00000001;
7527cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz
76cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    public static final int DISABLE2_NONE = 0x00000000;
77cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
7827cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz    public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS;
79cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
80cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    @IntDef(flag = true,
8127cf146361125d1233c487ec215d5d794f5dde17Benjamin Franz            value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS})
82cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    @Retention(RetentionPolicy.SOURCE)
83cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    public @interface Disable2Flags {}
84cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
8556d007b99841f7f603e5d5bc5c23b94c010f1945John Spurlock    public static final int NAVIGATION_HINT_BACK_ALT      = 1 << 0;
86f1ff209523a2474cb0e7aab0e083596c4afbe37fJason Monk    public static final int NAVIGATION_HINT_IME_SHOWN     = 1 << 1;
87328310c6fac6066d338926bb43d359862cae36d2Daniel Sandler
889764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock    public static final int WINDOW_STATUS_BAR = 1;
899764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock    public static final int WINDOW_NAVIGATION_BAR = 2;
909764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock
915b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock    public static final int WINDOW_STATE_SHOWING = 0;
929764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock    public static final int WINDOW_STATE_HIDING = 1;
935b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock    public static final int WINDOW_STATE_HIDDEN = 2;
949764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock
9540aa8811bc817293d7400c14fa60350d2350d29fJorim Jaggi    public static final int CAMERA_LAUNCH_SOURCE_WIGGLE = 0;
9640aa8811bc817293d7400c14fa60350d2350d29fJorim Jaggi    public static final int CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = 1;
97a41381660c960844658b6d16f4b6539d7edf56c8Jonathan Solnit    public static final int CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER = 2;
9840aa8811bc817293d7400c14fa60350d2350d29fJorim Jaggi
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Context mContext;
10025f95f92005594f2ef094001c54cb4c39eec3adeJoe Onorato    private IStatusBarService mService;
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private IBinder mToken = new Binder();
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    StatusBarManager(Context context) {
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
1059cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler    }
1069cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler
1079cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler    private synchronized IStatusBarService getService() {
1089cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler        if (mService == null) {
1099cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            mService = IStatusBarService.Stub.asInterface(
1109cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                    ServiceManager.getService(Context.STATUS_BAR_SERVICE));
1119cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (mService == null) {
1129cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                Slog.w("StatusBarManager", "warning: no STATUS_BAR_SERVICE");
1139cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
1149cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler        }
1159cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler        return mService;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disable some features in the status bar.  Pass the bitwise-or of the DISABLE_* flags.
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * To re-enable everything, pass {@link #DISABLE_NONE}.
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void disable(int what) {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1249cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
1259cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
1269cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                svc.disable(what, mToken, mContext.getPackageName());
127305c78cce649056643641c51f12f2b6d2eb839f3Jim Miller            }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
129c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
132cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
133cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    /**
134cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz     * Disable additional status bar features. Pass the bitwise-or of the DISABLE2_* flags.
135cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz     * To re-enable everything, pass {@link #DISABLE_NONE}.
136cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz     *
137cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz     * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags.
138cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz     */
139cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    public void disable2(@Disable2Flags int what) {
140cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz        try {
141cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz            final IStatusBarService svc = getService();
142cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz            if (svc != null) {
143cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz                svc.disable2(what, mToken, mContext.getPackageName());
144cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz            }
145cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz        } catch (RemoteException ex) {
146c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
147cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz        }
148cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz    }
149cde0a2a9ea00d6e4acfe6ce7a7c9061343df7fa3Benjamin Franz
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15111cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler     * Expand the notifications panel.
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15311cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler    public void expandNotificationsPanel() {
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1559cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
1569cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
15711cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler                svc.expandNotificationsPanel();
1589cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
160c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16511cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler     * Collapse the notifications and settings panels.
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16711cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler    public void collapsePanels() {
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1699cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
1709cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
17111cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler                svc.collapsePanels();
172e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov            }
173e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov        } catch (RemoteException ex) {
174c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
175e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov        }
176e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov    }
177e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov
178e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov    /**
17911cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler     * Expand the settings panel.
180e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov     */
18111cf178100e71d3f9f34ab5865e03a277c5eadaaDaniel Sandler    public void expandSettingsPanel() {
182a9927325eda025504d59bb6594fee8e240d95b01Jason Monk        expandSettingsPanel(null);
183a9927325eda025504d59bb6594fee8e240d95b01Jason Monk    }
184a9927325eda025504d59bb6594fee8e240d95b01Jason Monk
185a9927325eda025504d59bb6594fee8e240d95b01Jason Monk    /**
186a9927325eda025504d59bb6594fee8e240d95b01Jason Monk     * Expand the settings panel and open a subPanel, pass null to just open the settings panel.
187a9927325eda025504d59bb6594fee8e240d95b01Jason Monk     */
188a9927325eda025504d59bb6594fee8e240d95b01Jason Monk    public void expandSettingsPanel(String subPanel) {
189e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov        try {
190e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov            final IStatusBarService svc = getService();
191e20a177d3f147f3011647c3bdab401f90b2c5d1dSvetoslav Ganov            if (svc != null) {
192a9927325eda025504d59bb6594fee8e240d95b01Jason Monk                svc.expandSettingsPanel(subPanel);
1939cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
195c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1996179ea3196e9306d3f14361fe9ef14191b1edba6Svetoslav Ganov    public void setIcon(String slot, int iconId, int iconLevel, String contentDescription) {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2019cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
2029cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
2039cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                svc.setIcon(slot, mContext.getPackageName(), iconId, iconLevel,
2046179ea3196e9306d3f14361fe9ef14191b1edba6Svetoslav Ganov                    contentDescription);
2059cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
207c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2110cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato    public void removeIcon(String slot) {
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2139cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
2149cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
2159cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                svc.removeIcon(slot);
2169cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
218c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
221798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato
222798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato    public void setIconVisibility(String slot, boolean visible) {
223798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato        try {
2249cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            final IStatusBarService svc = getService();
2259cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            if (svc != null) {
2269cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler                svc.setIconVisibility(slot, visible);
2279cbd360a670ca6deb7f2e933f1b79361b84f80a2Daniel Sandler            }
228798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato        } catch (RemoteException ex) {
229c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey            throw ex.rethrowFromSystemServer();
230798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato        }
231798ac4c7d79534a8230623b737b5b1b6a415d105Joe Onorato    }
2325b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock
2335b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock    /** @hide */
2345b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock    public static String windowStateToString(int state) {
2355b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock        if (state == WINDOW_STATE_HIDING) return "WINDOW_STATE_HIDING";
2365b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock        if (state == WINDOW_STATE_HIDDEN) return "WINDOW_STATE_HIDDEN";
2375b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock        if (state == WINDOW_STATE_SHOWING) return "WINDOW_STATE_SHOWING";
2385b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock        return "WINDOW_STATE_UNKNOWN";
2395b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock    }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
241