blob: 0d2589847bcb3d1d36f3ae453b6d098fb5a622fc [file] [log] [blame]
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -04001/*
2 * Copyright (C) 2019 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
17package com.android.systemui.statusbar.phone;
18
wilsonshihe8321942019-10-18 18:39:46 +080019import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
20
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040021import android.app.StatusBarManager;
wilsonshihe8321942019-10-18 18:39:46 +080022import android.graphics.RectF;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040023import android.hardware.display.AmbientDisplayConfiguration;
24import android.media.AudioManager;
25import android.media.session.MediaSessionLegacyHelper;
26import android.os.SystemClock;
27import android.os.UserHandle;
28import android.provider.Settings;
29import android.view.GestureDetector;
30import android.view.InputDevice;
31import android.view.KeyEvent;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040032import android.view.MotionEvent;
33import android.view.View;
34import android.view.ViewGroup;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040035
36import com.android.internal.annotations.VisibleForTesting;
37import com.android.systemui.ExpandHelper;
38import com.android.systemui.R;
Jerry Chang50c5da42019-10-16 17:21:07 +080039import com.android.systemui.dock.DockManager;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040040import com.android.systemui.doze.DozeLog;
41import com.android.systemui.plugins.FalsingManager;
42import com.android.systemui.shared.plugins.PluginManager;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040043import com.android.systemui.statusbar.CommandQueue;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040044import com.android.systemui.statusbar.DragDownHelper;
45import com.android.systemui.statusbar.NotificationLockscreenUserManager;
Lucas Dupin13f4b8a2020-02-19 13:41:52 -080046import com.android.systemui.statusbar.NotificationShadeDepthController;
Beverlyf937f292020-02-20 13:45:36 -050047import com.android.systemui.statusbar.PulseExpansionHandler;
48import com.android.systemui.statusbar.SuperStatusBarViewFactory;
Lucas Dupind236ee32019-10-08 15:33:59 -070049import com.android.systemui.statusbar.SysuiStatusBarStateController;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040050import com.android.systemui.statusbar.notification.DynamicPrivacyController;
51import com.android.systemui.statusbar.notification.NotificationEntryManager;
52import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
53import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
Lucas Dupind236ee32019-10-08 15:33:59 -070054import com.android.systemui.statusbar.policy.KeyguardStateController;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040055import com.android.systemui.tuner.TunerService;
56import com.android.systemui.util.InjectionInflationController;
57
58import java.io.FileDescriptor;
59import java.io.PrintWriter;
60
61import javax.inject.Inject;
Heemin Seog82b96cd2019-11-12 16:40:00 -080062
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040063/**
wilsonshihe8321942019-10-18 18:39:46 +080064 * Controller for {@link NotificationShadeWindowView}.
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040065 */
wilsonshihe8321942019-10-18 18:39:46 +080066public class NotificationShadeWindowViewController {
Heemin Seog82b96cd2019-11-12 16:40:00 -080067 private final InjectionInflationController mInjectionInflationController;
68 private final NotificationWakeUpCoordinator mCoordinator;
69 private final PulseExpansionHandler mPulseExpansionHandler;
70 private final DynamicPrivacyController mDynamicPrivacyController;
71 private final KeyguardBypassController mBypassController;
72 private final PluginManager mPluginManager;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040073 private final FalsingManager mFalsingManager;
Heemin Seog82b96cd2019-11-12 16:40:00 -080074 private final TunerService mTunerService;
75 private final NotificationLockscreenUserManager mNotificationLockscreenUserManager;
76 private final NotificationEntryManager mNotificationEntryManager;
77 private final KeyguardStateController mKeyguardStateController;
78 private final SysuiStatusBarStateController mStatusBarStateController;
79 private final DozeLog mDozeLog;
80 private final DozeParameters mDozeParameters;
81 private final CommandQueue mCommandQueue;
wilsonshihe8321942019-10-18 18:39:46 +080082 private final NotificationShadeWindowView mView;
Heemin Seogba6337f2019-12-10 15:34:37 -080083 private final ShadeController mShadeController;
Lucas Dupin13f4b8a2020-02-19 13:41:52 -080084 private final NotificationShadeDepthController mDepthController;
Heemin Seog82b96cd2019-11-12 16:40:00 -080085
86 private GestureDetector mGestureDetector;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040087 private View mBrightnessMirror;
88 private boolean mTouchActive;
89 private boolean mTouchCancelled;
90 private boolean mExpandAnimationPending;
91 private boolean mExpandAnimationRunning;
92 private NotificationStackScrollLayout mStackScrollLayout;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040093 private PhoneStatusBarView mStatusBarView;
Beverlyf937f292020-02-20 13:45:36 -050094 private PhoneStatusBarTransitions mBarTransitions;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040095 private StatusBar mService;
wilsonshih2065eb72020-05-06 17:44:37 +080096 private NotificationShadeWindowController mNotificationShadeWindowController;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040097 private DragDownHelper mDragDownHelper;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040098 private boolean mDoubleTapEnabled;
99 private boolean mSingleTapEnabled;
100 private boolean mExpandingBelowNotch;
Jerry Chang50c5da42019-10-16 17:21:07 +0800101 private final DockManager mDockManager;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500102 private final NotificationPanelViewController mNotificationPanelViewController;
Beverlyf937f292020-02-20 13:45:36 -0500103 private final SuperStatusBarViewFactory mStatusBarViewFactory;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400104
wilsonshihe8321942019-10-18 18:39:46 +0800105 // Used for determining view / touch intersection
106 private int[] mTempLocation = new int[2];
107 private RectF mTempRect = new RectF();
108 private boolean mIsTrackingBarGesture = false;
109
Heemin Seog82b96cd2019-11-12 16:40:00 -0800110 @Inject
wilsonshihe8321942019-10-18 18:39:46 +0800111 public NotificationShadeWindowViewController(
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400112 InjectionInflationController injectionInflationController,
113 NotificationWakeUpCoordinator coordinator,
114 PulseExpansionHandler pulseExpansionHandler,
115 DynamicPrivacyController dynamicPrivacyController,
116 KeyguardBypassController bypassController,
117 FalsingManager falsingManager,
118 PluginManager pluginManager,
119 TunerService tunerService,
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400120 NotificationLockscreenUserManager notificationLockscreenUserManager,
121 NotificationEntryManager notificationEntryManager,
Lucas Dupind236ee32019-10-08 15:33:59 -0700122 KeyguardStateController keyguardStateController,
123 SysuiStatusBarStateController statusBarStateController,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400124 DozeLog dozeLog,
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400125 DozeParameters dozeParameters,
Jerry Chang50c5da42019-10-16 17:21:07 +0800126 CommandQueue commandQueue,
Heemin Seogba6337f2019-12-10 15:34:37 -0800127 ShadeController shadeController,
Dave Mankoffc1bbce12019-11-25 11:27:36 -0500128 DockManager dockManager,
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800129 NotificationShadeDepthController depthController,
Beverlyf937f292020-02-20 13:45:36 -0500130 NotificationShadeWindowView notificationShadeWindowView,
131 NotificationPanelViewController notificationPanelViewController,
132 SuperStatusBarViewFactory statusBarViewFactory) {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800133 mInjectionInflationController = injectionInflationController;
134 mCoordinator = coordinator;
135 mPulseExpansionHandler = pulseExpansionHandler;
136 mDynamicPrivacyController = dynamicPrivacyController;
137 mBypassController = bypassController;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400138 mFalsingManager = falsingManager;
Heemin Seog82b96cd2019-11-12 16:40:00 -0800139 mPluginManager = pluginManager;
140 mTunerService = tunerService;
141 mNotificationLockscreenUserManager = notificationLockscreenUserManager;
142 mNotificationEntryManager = notificationEntryManager;
143 mKeyguardStateController = keyguardStateController;
144 mStatusBarStateController = statusBarStateController;
145 mDozeLog = dozeLog;
146 mDozeParameters = dozeParameters;
147 mCommandQueue = commandQueue;
Beverlyf937f292020-02-20 13:45:36 -0500148 mView = notificationShadeWindowView;
Heemin Seogba6337f2019-12-10 15:34:37 -0800149 mShadeController = shadeController;
Jerry Chang50c5da42019-10-16 17:21:07 +0800150 mDockManager = dockManager;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500151 mNotificationPanelViewController = notificationPanelViewController;
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800152 mDepthController = depthController;
Beverlyf937f292020-02-20 13:45:36 -0500153 mStatusBarViewFactory = statusBarViewFactory;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400154
Heemin Seog82b96cd2019-11-12 16:40:00 -0800155 // This view is not part of the newly inflated expanded status bar.
156 mBrightnessMirror = mView.findViewById(R.id.brightness_mirror);
157 }
158
159 /** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
160 public void setupExpandedStatusBar() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400161 mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400162
163 TunerService.Tunable tunable = (key, newValue) -> {
164 AmbientDisplayConfiguration configuration =
165 new AmbientDisplayConfiguration(mView.getContext());
166 switch (key) {
167 case Settings.Secure.DOZE_DOUBLE_TAP_GESTURE:
168 mDoubleTapEnabled = configuration.doubleTapGestureEnabled(
169 UserHandle.USER_CURRENT);
170 break;
171 case Settings.Secure.DOZE_TAP_SCREEN_GESTURE:
172 mSingleTapEnabled = configuration.tapGestureEnabled(UserHandle.USER_CURRENT);
173 }
174 };
Heemin Seog82b96cd2019-11-12 16:40:00 -0800175 mTunerService.addTunable(tunable,
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400176 Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
177 Settings.Secure.DOZE_TAP_SCREEN_GESTURE);
178
179 GestureDetector.SimpleOnGestureListener gestureListener =
180 new GestureDetector.SimpleOnGestureListener() {
181 @Override
182 public boolean onSingleTapConfirmed(MotionEvent e) {
Jerry Chang50c5da42019-10-16 17:21:07 +0800183 if (mSingleTapEnabled && !mDockManager.isDocked()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400184 mService.wakeUpIfDozing(
185 SystemClock.uptimeMillis(), mView, "SINGLE_TAP");
186 return true;
187 }
188 return false;
189 }
190
191 @Override
192 public boolean onDoubleTap(MotionEvent e) {
193 if (mDoubleTapEnabled || mSingleTapEnabled) {
194 mService.wakeUpIfDozing(
195 SystemClock.uptimeMillis(), mView, "DOUBLE_TAP");
196 return true;
197 }
198 return false;
199 }
200 };
201 mGestureDetector = new GestureDetector(mView.getContext(), gestureListener);
202
wilsonshihe8321942019-10-18 18:39:46 +0800203 mView.setInteractionEventHandler(new NotificationShadeWindowView.InteractionEventHandler() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400204 @Override
205 public Boolean handleDispatchTouchEvent(MotionEvent ev) {
206 boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
207 boolean isUp = ev.getActionMasked() == MotionEvent.ACTION_UP;
208 boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL;
209
Dave Mankoff978588f2019-11-15 17:24:12 -0500210 boolean expandingBelowNotch = mExpandingBelowNotch;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400211 if (isUp || isCancel) {
212 mExpandingBelowNotch = false;
213 }
214
215 // Reset manual touch dispatch state here but make sure the UP/CANCEL event still
216 // gets
217 // delivered.
218
219 if (!isCancel && mService.shouldIgnoreTouch()) {
220 return false;
221 }
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500222 if (isDown && mNotificationPanelViewController.isFullyCollapsed()) {
223 mNotificationPanelViewController.startExpandLatencyTracking();
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400224 }
225 if (isDown) {
226 setTouchActive(true);
227 mTouchCancelled = false;
228 } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
229 || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
230 setTouchActive(false);
231 }
232 if (mTouchCancelled || mExpandAnimationRunning || mExpandAnimationPending) {
233 return false;
234 }
235 mFalsingManager.onTouchEvent(ev, mView.getWidth(), mView.getHeight());
236 mGestureDetector.onTouchEvent(ev);
237 if (mBrightnessMirror != null
238 && mBrightnessMirror.getVisibility() == View.VISIBLE) {
239 // Disallow new pointers while the brightness mirror is visible. This is so that
240 // you can't touch anything other than the brightness slider while the mirror is
241 // showing and the rest of the panel is transparent.
242 if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
243 return false;
244 }
245 }
246 if (isDown) {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800247 mStackScrollLayout.closeControlsIfOutsideTouch(ev);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400248 }
Heemin Seoge9f4e962019-12-05 11:55:27 -0800249 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400250 mService.mDozeScrimController.extendPulse();
251 }
252 // In case we start outside of the view bounds (below the status bar), we need to
253 // dispatch
254 // the touch manually as the view system can't accommodate for touches outside of
255 // the
256 // regular view bounds.
257 if (isDown && ev.getY() >= mView.getBottom()) {
258 mExpandingBelowNotch = true;
Dave Mankoff978588f2019-11-15 17:24:12 -0500259 expandingBelowNotch = true;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400260 }
Dave Mankoff978588f2019-11-15 17:24:12 -0500261 if (expandingBelowNotch) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400262 return mStatusBarView.dispatchTouchEvent(ev);
263 }
264
wilsonshihe8321942019-10-18 18:39:46 +0800265 if (!mIsTrackingBarGesture && isDown
266 && mNotificationPanelViewController.isFullyCollapsed()) {
267 float x = ev.getRawX();
268 float y = ev.getRawY();
269 if (isIntersecting(mStatusBarView, x, y)) {
270 if (mService.isSameStatusBarState(WINDOW_STATE_SHOWING)) {
271 mIsTrackingBarGesture = true;
272 return mStatusBarView.dispatchTouchEvent(ev);
273 } else { // it's hidden or hiding, don't send to notification shade.
274 return true;
275 }
276 }
277 } else if (mIsTrackingBarGesture) {
278 final boolean sendToNotification = mStatusBarView.dispatchTouchEvent(ev);
279 if (isUp || isCancel) {
280 mIsTrackingBarGesture = false;
281 }
282 return sendToNotification;
283 }
284
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400285 return null;
286 }
287
288 @Override
289 public boolean shouldInterceptTouchEvent(MotionEvent ev) {
Heemin Seoge9f4e962019-12-05 11:55:27 -0800290 if (mStatusBarStateController.isDozing() && !mService.isPulsing()
291 && !mDockManager.isDocked()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400292 // Capture all touch events in always-on.
293 return true;
294 }
295 boolean intercept = false;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500296 if (mNotificationPanelViewController.isFullyExpanded()
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400297 && mDragDownHelper.isDragDownEnabled()
298 && !mService.isBouncerShowing()
Heemin Seoge9f4e962019-12-05 11:55:27 -0800299 && !mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400300 intercept = mDragDownHelper.onInterceptTouchEvent(ev);
301 }
302
303 return intercept;
304
305 }
306
307 @Override
308 public void didIntercept(MotionEvent ev) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400309 MotionEvent cancellation = MotionEvent.obtain(ev);
310 cancellation.setAction(MotionEvent.ACTION_CANCEL);
Heemin Seog82b96cd2019-11-12 16:40:00 -0800311 mStackScrollLayout.onInterceptTouchEvent(cancellation);
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500312 mNotificationPanelViewController.getView().onInterceptTouchEvent(cancellation);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400313 cancellation.recycle();
314 }
315
316 @Override
317 public boolean handleTouchEvent(MotionEvent ev) {
318 boolean handled = false;
Heemin Seoge9f4e962019-12-05 11:55:27 -0800319 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400320 handled = !mService.isPulsing();
321 }
322 if ((mDragDownHelper.isDragDownEnabled() && !handled)
323 || mDragDownHelper.isDraggingDown()) {
324 // we still want to finish our drag down gesture when locking the screen
325 handled = mDragDownHelper.onTouchEvent(ev);
326 }
327
328 return handled;
329 }
330
331 @Override
332 public void didNotHandleTouchEvent(MotionEvent ev) {
333 final int action = ev.getActionMasked();
334 if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
335 mService.setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
336 }
337 }
338
339 @Override
340 public boolean interceptMediaKey(KeyEvent event) {
341 return mService.interceptMediaKey(event);
342 }
343
344 @Override
345 public boolean dispatchKeyEvent(KeyEvent event) {
346 boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
347 switch (event.getKeyCode()) {
348 case KeyEvent.KEYCODE_BACK:
349 if (!down) {
350 mService.onBackPressed();
351 }
352 return true;
353 case KeyEvent.KEYCODE_MENU:
354 if (!down) {
355 return mService.onMenuPressed();
356 }
357 break;
358 case KeyEvent.KEYCODE_SPACE:
359 if (!down) {
360 return mService.onSpacePressed();
361 }
362 break;
363 case KeyEvent.KEYCODE_VOLUME_DOWN:
364 case KeyEvent.KEYCODE_VOLUME_UP:
Heemin Seoge9f4e962019-12-05 11:55:27 -0800365 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400366 MediaSessionLegacyHelper.getHelper(mView.getContext())
367 .sendVolumeKeyEvent(
368 event, AudioManager.USE_DEFAULT_STREAM_TYPE, true);
369 return true;
370 }
371 break;
372 }
373 return false;
374 }
375 });
376
377 mView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
378 @Override
379 public void onChildViewAdded(View parent, View child) {
380 if (child.getId() == R.id.brightness_mirror) {
381 mBrightnessMirror = child;
382 }
383 }
384
385 @Override
386 public void onChildViewRemoved(View parent, View child) {
387 }
388 });
Heemin Seog82b96cd2019-11-12 16:40:00 -0800389
390 ExpandHelper.Callback expandHelperCallback = mStackScrollLayout.getExpandHelperCallback();
391 DragDownHelper.DragDownCallback dragDownCallback = mStackScrollLayout.getDragDownCallback();
392 setDragDownHelper(
393 new DragDownHelper(
394 mView.getContext(), mView, expandHelperCallback,
395 dragDownCallback, mFalsingManager));
Lucas Dupin991415e2019-11-25 17:48:58 -0800396
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800397 mDepthController.setRoot(mView);
398 mNotificationPanelViewController.addExpansionListener(mDepthController);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400399 }
400
wilsonshihe8321942019-10-18 18:39:46 +0800401 public NotificationShadeWindowView getView() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400402 return mView;
403 }
404
405 public void setTouchActive(boolean touchActive) {
406 mTouchActive = touchActive;
407 }
408
409 public void cancelCurrentTouch() {
410 if (mTouchActive) {
411 final long now = SystemClock.uptimeMillis();
412 MotionEvent event = MotionEvent.obtain(now, now,
413 MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
414 event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
415 mView.dispatchTouchEvent(event);
416 event.recycle();
417 mTouchCancelled = true;
418 }
419 }
420
421 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
422 pw.print(" mExpandAnimationPending=");
423 pw.println(mExpandAnimationPending);
424 pw.print(" mExpandAnimationRunning=");
425 pw.println(mExpandAnimationRunning);
426 pw.print(" mTouchCancelled=");
427 pw.println(mTouchCancelled);
428 pw.print(" mTouchActive=");
429 pw.println(mTouchActive);
430 }
431
432 public void setExpandAnimationPending(boolean pending) {
433 mExpandAnimationPending = pending;
wilsonshih2065eb72020-05-06 17:44:37 +0800434 mNotificationShadeWindowController
435 .setLaunchingActivity(mExpandAnimationPending | mExpandAnimationRunning);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400436 }
437
438 public void setExpandAnimationRunning(boolean running) {
439 mExpandAnimationRunning = running;
wilsonshih2065eb72020-05-06 17:44:37 +0800440 mNotificationShadeWindowController
441 .setLaunchingActivity(mExpandAnimationPending | mExpandAnimationRunning);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400442 }
443
444 public void cancelExpandHelper() {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800445 if (mStackScrollLayout != null) {
446 mStackScrollLayout.cancelExpandHelper();
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400447 }
448 }
449
Beverlyf937f292020-02-20 13:45:36 -0500450 public PhoneStatusBarTransitions getBarTransitions() {
451 return mBarTransitions;
452 }
453
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400454 public void setStatusBarView(PhoneStatusBarView statusBarView) {
455 mStatusBarView = statusBarView;
Beverlyf937f292020-02-20 13:45:36 -0500456 if (statusBarView != null && mStatusBarViewFactory != null) {
457 mBarTransitions = new PhoneStatusBarTransitions(
458 statusBarView,
459 mStatusBarViewFactory.getStatusBarWindowView()
460 .findViewById(R.id.status_bar_container));
461 }
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400462 }
463
wilsonshih2065eb72020-05-06 17:44:37 +0800464 public void setService(StatusBar statusBar, NotificationShadeWindowController controller) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400465 mService = statusBar;
wilsonshih2065eb72020-05-06 17:44:37 +0800466 mNotificationShadeWindowController = controller;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400467 }
468
469 @VisibleForTesting
470 void setDragDownHelper(DragDownHelper dragDownHelper) {
471 mDragDownHelper = dragDownHelper;
472 }
wilsonshihe8321942019-10-18 18:39:46 +0800473
474 private boolean isIntersecting(View view, float x, float y) {
475 mTempLocation = view.getLocationOnScreen();
476 mTempRect.set(mTempLocation[0], mTempLocation[1], mTempLocation[0] + view.getWidth(),
477 mTempLocation[1] + view.getHeight());
478 return mTempRect.contains(x, y);
479 }
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400480}