blob: 23c4166da1043262e3b0402b1c98595bc15c81f1 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080017package android.app;
18
Benjamin Franzcde0a2a2015-04-23 17:19:48 +010019import android.annotation.IntDef;
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -060020import android.annotation.SystemService;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080021import android.content.Context;
22import android.os.Binder;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080023import android.os.IBinder;
Charles Heede39092017-09-18 09:19:28 +010024import android.os.RemoteException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080025import android.os.ServiceManager;
Daniel Sandler9cbd3602011-10-18 22:59:00 -040026import android.util.Slog;
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080027import android.view.View;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080028
Joe Onorato0cbda992010-05-02 16:28:15 -070029import com.android.internal.statusbar.IStatusBarService;
30
Benjamin Franzcde0a2a2015-04-23 17:19:48 +010031import java.lang.annotation.Retention;
32import java.lang.annotation.RetentionPolicy;
33
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080034/**
35 * Allows an app to control the status bar.
36 *
37 * @hide
38 */
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -060039@SystemService(Context.STATUS_BAR_SERVICE)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080040public class StatusBarManager {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080041
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080042 public static final int DISABLE_EXPAND = View.STATUS_BAR_DISABLE_EXPAND;
43 public static final int DISABLE_NOTIFICATION_ICONS = View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS;
44 public static final int DISABLE_NOTIFICATION_ALERTS
45 = View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS;
Dan Sandlera5e0f412014-01-23 15:11:54 -050046 @Deprecated
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080047 public static final int DISABLE_NOTIFICATION_TICKER
48 = View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER;
49 public static final int DISABLE_SYSTEM_INFO = View.STATUS_BAR_DISABLE_SYSTEM_INFO;
Daniel Sandlerdba93562011-10-06 16:39:58 -040050 public static final int DISABLE_HOME = View.STATUS_BAR_DISABLE_HOME;
51 public static final int DISABLE_RECENT = View.STATUS_BAR_DISABLE_RECENT;
Joe Onorato6478adc2011-01-27 21:15:01 -080052 public static final int DISABLE_BACK = View.STATUS_BAR_DISABLE_BACK;
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080053 public static final int DISABLE_CLOCK = View.STATUS_BAR_DISABLE_CLOCK;
Daniel Sandlerd5483c32012-10-19 16:44:15 -040054 public static final int DISABLE_SEARCH = View.STATUS_BAR_DISABLE_SEARCH;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080055
Daniel Sandlerdba93562011-10-06 16:39:58 -040056 @Deprecated
57 public static final int DISABLE_NAVIGATION =
58 View.STATUS_BAR_DISABLE_HOME | View.STATUS_BAR_DISABLE_RECENT;
59
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080060 public static final int DISABLE_NONE = 0x00000000;
61
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080062 public static final int DISABLE_MASK = DISABLE_EXPAND | DISABLE_NOTIFICATION_ICONS
63 | DISABLE_NOTIFICATION_ALERTS | DISABLE_NOTIFICATION_TICKER
Daniel Sandlerd5483c32012-10-19 16:44:15 -040064 | DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK
65 | DISABLE_SEARCH;
Joe Onorato7bb8eeb2011-01-27 16:00:58 -080066
Benjamin Franz27cf1462015-04-23 19:36:42 +010067 /**
68 * Flag to disable quick settings.
69 *
70 * Setting this flag disables quick settings completely, but does not disable expanding the
71 * notification shade.
72 */
Charles He6a79b0d2017-09-18 09:50:58 +010073 public static final int DISABLE2_QUICK_SETTINGS = 1;
74 public static final int DISABLE2_SYSTEM_ICONS = 1 << 1;
Charles He2eda2422017-09-24 17:55:21 +010075 public static final int DISABLE2_NOTIFICATION_SHADE = 1 << 2;
Charles He9851a8d2017-10-10 17:31:30 +010076 public static final int DISABLE2_GLOBAL_ACTIONS = 1 << 3;
Benjamin Franz27cf1462015-04-23 19:36:42 +010077
Benjamin Franzcde0a2a2015-04-23 17:19:48 +010078 public static final int DISABLE2_NONE = 0x00000000;
79
Charles He2eda2422017-09-24 17:55:21 +010080 public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS
Charles He9851a8d2017-10-10 17:31:30 +010081 | DISABLE2_NOTIFICATION_SHADE | DISABLE2_GLOBAL_ACTIONS;
Benjamin Franzcde0a2a2015-04-23 17:19:48 +010082
83 @IntDef(flag = true,
Charles He2eda2422017-09-24 17:55:21 +010084 value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS,
Charles He9851a8d2017-10-10 17:31:30 +010085 DISABLE2_NOTIFICATION_SHADE, DISABLE2_GLOBAL_ACTIONS})
Benjamin Franzcde0a2a2015-04-23 17:19:48 +010086 @Retention(RetentionPolicy.SOURCE)
87 public @interface Disable2Flags {}
88
John Spurlock56d007b2013-10-28 18:40:56 -040089 public static final int NAVIGATION_HINT_BACK_ALT = 1 << 0;
Jason Monkf1ff2092014-04-29 16:50:53 -040090 public static final int NAVIGATION_HINT_IME_SHOWN = 1 << 1;
Daniel Sandler328310c2011-09-23 15:56:52 -040091
John Spurlock97642182013-07-29 17:58:39 -040092 public static final int WINDOW_STATUS_BAR = 1;
93 public static final int WINDOW_NAVIGATION_BAR = 2;
94
John Spurlock5b9145b2013-08-20 15:13:47 -040095 public static final int WINDOW_STATE_SHOWING = 0;
John Spurlock97642182013-07-29 17:58:39 -040096 public static final int WINDOW_STATE_HIDING = 1;
John Spurlock5b9145b2013-08-20 15:13:47 -040097 public static final int WINDOW_STATE_HIDDEN = 2;
John Spurlock97642182013-07-29 17:58:39 -040098
Jorim Jaggi40aa8812015-09-23 12:59:22 -070099 public static final int CAMERA_LAUNCH_SOURCE_WIGGLE = 0;
100 public static final int CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = 1;
Jonathan Solnita4138162017-05-10 21:06:04 -0700101 public static final int CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER = 2;
Jorim Jaggi40aa8812015-09-23 12:59:22 -0700102
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800103 private Context mContext;
Joe Onorato25f95f92010-04-08 18:37:10 -0500104 private IStatusBarService mService;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800105 private IBinder mToken = new Binder();
106
107 StatusBarManager(Context context) {
108 mContext = context;
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400109 }
110
111 private synchronized IStatusBarService getService() {
112 if (mService == null) {
113 mService = IStatusBarService.Stub.asInterface(
114 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
115 if (mService == null) {
116 Slog.w("StatusBarManager", "warning: no STATUS_BAR_SERVICE");
117 }
118 }
119 return mService;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800120 }
121
122 /**
123 * Disable some features in the status bar. Pass the bitwise-or of the DISABLE_* flags.
124 * To re-enable everything, pass {@link #DISABLE_NONE}.
125 */
126 public void disable(int what) {
127 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400128 final IStatusBarService svc = getService();
129 if (svc != null) {
130 svc.disable(what, mToken, mContext.getPackageName());
Jim Miller305c78c2011-10-16 14:54:38 -0700131 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800132 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700133 throw ex.rethrowFromSystemServer();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800134 }
135 }
Benjamin Franzcde0a2a2015-04-23 17:19:48 +0100136
137 /**
138 * Disable additional status bar features. Pass the bitwise-or of the DISABLE2_* flags.
139 * To re-enable everything, pass {@link #DISABLE_NONE}.
140 *
141 * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags.
142 */
143 public void disable2(@Disable2Flags int what) {
144 try {
145 final IStatusBarService svc = getService();
146 if (svc != null) {
147 svc.disable2(what, mToken, mContext.getPackageName());
148 }
149 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700150 throw ex.rethrowFromSystemServer();
Benjamin Franzcde0a2a2015-04-23 17:19:48 +0100151 }
152 }
153
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800154 /**
Daniel Sandler11cf1782012-09-27 14:03:08 -0400155 * Expand the notifications panel.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800156 */
Daniel Sandler11cf1782012-09-27 14:03:08 -0400157 public void expandNotificationsPanel() {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800158 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400159 final IStatusBarService svc = getService();
160 if (svc != null) {
Daniel Sandler11cf1782012-09-27 14:03:08 -0400161 svc.expandNotificationsPanel();
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400162 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800163 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700164 throw ex.rethrowFromSystemServer();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800165 }
166 }
167
168 /**
Daniel Sandler11cf1782012-09-27 14:03:08 -0400169 * Collapse the notifications and settings panels.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800170 */
Daniel Sandler11cf1782012-09-27 14:03:08 -0400171 public void collapsePanels() {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800172 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400173 final IStatusBarService svc = getService();
174 if (svc != null) {
Daniel Sandler11cf1782012-09-27 14:03:08 -0400175 svc.collapsePanels();
Svetoslav Ganove20a1772012-09-25 16:07:46 -0700176 }
177 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700178 throw ex.rethrowFromSystemServer();
Svetoslav Ganove20a1772012-09-25 16:07:46 -0700179 }
180 }
181
182 /**
Daniel Sandler11cf1782012-09-27 14:03:08 -0400183 * Expand the settings panel.
Svetoslav Ganove20a1772012-09-25 16:07:46 -0700184 */
Daniel Sandler11cf1782012-09-27 14:03:08 -0400185 public void expandSettingsPanel() {
Jason Monka9927322015-12-13 16:22:37 -0500186 expandSettingsPanel(null);
187 }
188
189 /**
190 * Expand the settings panel and open a subPanel, pass null to just open the settings panel.
191 */
192 public void expandSettingsPanel(String subPanel) {
Svetoslav Ganove20a1772012-09-25 16:07:46 -0700193 try {
194 final IStatusBarService svc = getService();
195 if (svc != null) {
Jason Monka9927322015-12-13 16:22:37 -0500196 svc.expandSettingsPanel(subPanel);
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400197 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800198 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700199 throw ex.rethrowFromSystemServer();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800200 }
201 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800202
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700203 public void setIcon(String slot, int iconId, int iconLevel, String contentDescription) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800204 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400205 final IStatusBarService svc = getService();
206 if (svc != null) {
207 svc.setIcon(slot, mContext.getPackageName(), iconId, iconLevel,
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700208 contentDescription);
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400209 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800210 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700211 throw ex.rethrowFromSystemServer();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800212 }
213 }
214
Joe Onorato0cbda992010-05-02 16:28:15 -0700215 public void removeIcon(String slot) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800216 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400217 final IStatusBarService svc = getService();
218 if (svc != null) {
219 svc.removeIcon(slot);
220 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800221 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700222 throw ex.rethrowFromSystemServer();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800223 }
224 }
Joe Onorato798ac4c2010-05-27 16:39:00 -0400225
226 public void setIconVisibility(String slot, boolean visible) {
227 try {
Daniel Sandler9cbd3602011-10-18 22:59:00 -0400228 final IStatusBarService svc = getService();
229 if (svc != null) {
230 svc.setIconVisibility(slot, visible);
231 }
Joe Onorato798ac4c2010-05-27 16:39:00 -0400232 } catch (RemoteException ex) {
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700233 throw ex.rethrowFromSystemServer();
Joe Onorato798ac4c2010-05-27 16:39:00 -0400234 }
235 }
John Spurlock5b9145b2013-08-20 15:13:47 -0400236
237 /** @hide */
238 public static String windowStateToString(int state) {
239 if (state == WINDOW_STATE_HIDING) return "WINDOW_STATE_HIDING";
240 if (state == WINDOW_STATE_HIDDEN) return "WINDOW_STATE_HIDDEN";
241 if (state == WINDOW_STATE_SHOWING) return "WINDOW_STATE_SHOWING";
242 return "WINDOW_STATE_UNKNOWN";
243 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800244}