blob: 596a607bb8ad9708418bb446396d0d8f8f048fd0 [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;
96 private DragDownHelper mDragDownHelper;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -040097 private boolean mDoubleTapEnabled;
98 private boolean mSingleTapEnabled;
99 private boolean mExpandingBelowNotch;
Jerry Chang50c5da42019-10-16 17:21:07 +0800100 private final DockManager mDockManager;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500101 private final NotificationPanelViewController mNotificationPanelViewController;
Beverlyf937f292020-02-20 13:45:36 -0500102 private final SuperStatusBarViewFactory mStatusBarViewFactory;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400103
wilsonshihe8321942019-10-18 18:39:46 +0800104 // Used for determining view / touch intersection
105 private int[] mTempLocation = new int[2];
106 private RectF mTempRect = new RectF();
107 private boolean mIsTrackingBarGesture = false;
108
Heemin Seog82b96cd2019-11-12 16:40:00 -0800109 @Inject
wilsonshihe8321942019-10-18 18:39:46 +0800110 public NotificationShadeWindowViewController(
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400111 InjectionInflationController injectionInflationController,
112 NotificationWakeUpCoordinator coordinator,
113 PulseExpansionHandler pulseExpansionHandler,
114 DynamicPrivacyController dynamicPrivacyController,
115 KeyguardBypassController bypassController,
116 FalsingManager falsingManager,
117 PluginManager pluginManager,
118 TunerService tunerService,
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400119 NotificationLockscreenUserManager notificationLockscreenUserManager,
120 NotificationEntryManager notificationEntryManager,
Lucas Dupind236ee32019-10-08 15:33:59 -0700121 KeyguardStateController keyguardStateController,
122 SysuiStatusBarStateController statusBarStateController,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400123 DozeLog dozeLog,
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400124 DozeParameters dozeParameters,
Jerry Chang50c5da42019-10-16 17:21:07 +0800125 CommandQueue commandQueue,
Heemin Seogba6337f2019-12-10 15:34:37 -0800126 ShadeController shadeController,
Dave Mankoffc1bbce12019-11-25 11:27:36 -0500127 DockManager dockManager,
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800128 NotificationShadeDepthController depthController,
Beverlyf937f292020-02-20 13:45:36 -0500129 NotificationShadeWindowView notificationShadeWindowView,
130 NotificationPanelViewController notificationPanelViewController,
131 SuperStatusBarViewFactory statusBarViewFactory) {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800132 mInjectionInflationController = injectionInflationController;
133 mCoordinator = coordinator;
134 mPulseExpansionHandler = pulseExpansionHandler;
135 mDynamicPrivacyController = dynamicPrivacyController;
136 mBypassController = bypassController;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400137 mFalsingManager = falsingManager;
Heemin Seog82b96cd2019-11-12 16:40:00 -0800138 mPluginManager = pluginManager;
139 mTunerService = tunerService;
140 mNotificationLockscreenUserManager = notificationLockscreenUserManager;
141 mNotificationEntryManager = notificationEntryManager;
142 mKeyguardStateController = keyguardStateController;
143 mStatusBarStateController = statusBarStateController;
144 mDozeLog = dozeLog;
145 mDozeParameters = dozeParameters;
146 mCommandQueue = commandQueue;
Beverlyf937f292020-02-20 13:45:36 -0500147 mView = notificationShadeWindowView;
Heemin Seogba6337f2019-12-10 15:34:37 -0800148 mShadeController = shadeController;
Jerry Chang50c5da42019-10-16 17:21:07 +0800149 mDockManager = dockManager;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500150 mNotificationPanelViewController = notificationPanelViewController;
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800151 mDepthController = depthController;
Beverlyf937f292020-02-20 13:45:36 -0500152 mStatusBarViewFactory = statusBarViewFactory;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400153
Heemin Seog82b96cd2019-11-12 16:40:00 -0800154 // This view is not part of the newly inflated expanded status bar.
155 mBrightnessMirror = mView.findViewById(R.id.brightness_mirror);
156 }
157
158 /** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
159 public void setupExpandedStatusBar() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400160 mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400161
162 TunerService.Tunable tunable = (key, newValue) -> {
163 AmbientDisplayConfiguration configuration =
164 new AmbientDisplayConfiguration(mView.getContext());
165 switch (key) {
166 case Settings.Secure.DOZE_DOUBLE_TAP_GESTURE:
167 mDoubleTapEnabled = configuration.doubleTapGestureEnabled(
168 UserHandle.USER_CURRENT);
169 break;
170 case Settings.Secure.DOZE_TAP_SCREEN_GESTURE:
171 mSingleTapEnabled = configuration.tapGestureEnabled(UserHandle.USER_CURRENT);
172 }
173 };
Heemin Seog82b96cd2019-11-12 16:40:00 -0800174 mTunerService.addTunable(tunable,
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400175 Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
176 Settings.Secure.DOZE_TAP_SCREEN_GESTURE);
177
178 GestureDetector.SimpleOnGestureListener gestureListener =
179 new GestureDetector.SimpleOnGestureListener() {
180 @Override
181 public boolean onSingleTapConfirmed(MotionEvent e) {
Jerry Chang50c5da42019-10-16 17:21:07 +0800182 if (mSingleTapEnabled && !mDockManager.isDocked()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400183 mService.wakeUpIfDozing(
184 SystemClock.uptimeMillis(), mView, "SINGLE_TAP");
185 return true;
186 }
187 return false;
188 }
189
190 @Override
191 public boolean onDoubleTap(MotionEvent e) {
192 if (mDoubleTapEnabled || mSingleTapEnabled) {
193 mService.wakeUpIfDozing(
194 SystemClock.uptimeMillis(), mView, "DOUBLE_TAP");
195 return true;
196 }
197 return false;
198 }
199 };
200 mGestureDetector = new GestureDetector(mView.getContext(), gestureListener);
201
wilsonshihe8321942019-10-18 18:39:46 +0800202 mView.setInteractionEventHandler(new NotificationShadeWindowView.InteractionEventHandler() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400203 @Override
204 public Boolean handleDispatchTouchEvent(MotionEvent ev) {
205 boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
206 boolean isUp = ev.getActionMasked() == MotionEvent.ACTION_UP;
207 boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL;
208
Dave Mankoff978588f2019-11-15 17:24:12 -0500209 boolean expandingBelowNotch = mExpandingBelowNotch;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400210 if (isUp || isCancel) {
211 mExpandingBelowNotch = false;
212 }
213
214 // Reset manual touch dispatch state here but make sure the UP/CANCEL event still
215 // gets
216 // delivered.
217
218 if (!isCancel && mService.shouldIgnoreTouch()) {
219 return false;
220 }
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500221 if (isDown && mNotificationPanelViewController.isFullyCollapsed()) {
222 mNotificationPanelViewController.startExpandLatencyTracking();
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400223 }
224 if (isDown) {
225 setTouchActive(true);
226 mTouchCancelled = false;
227 } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
228 || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
229 setTouchActive(false);
230 }
231 if (mTouchCancelled || mExpandAnimationRunning || mExpandAnimationPending) {
232 return false;
233 }
234 mFalsingManager.onTouchEvent(ev, mView.getWidth(), mView.getHeight());
235 mGestureDetector.onTouchEvent(ev);
236 if (mBrightnessMirror != null
237 && mBrightnessMirror.getVisibility() == View.VISIBLE) {
238 // Disallow new pointers while the brightness mirror is visible. This is so that
239 // you can't touch anything other than the brightness slider while the mirror is
240 // showing and the rest of the panel is transparent.
241 if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
242 return false;
243 }
244 }
245 if (isDown) {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800246 mStackScrollLayout.closeControlsIfOutsideTouch(ev);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400247 }
Heemin Seoge9f4e962019-12-05 11:55:27 -0800248 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400249 mService.mDozeScrimController.extendPulse();
250 }
251 // In case we start outside of the view bounds (below the status bar), we need to
252 // dispatch
253 // the touch manually as the view system can't accommodate for touches outside of
254 // the
255 // regular view bounds.
256 if (isDown && ev.getY() >= mView.getBottom()) {
257 mExpandingBelowNotch = true;
Dave Mankoff978588f2019-11-15 17:24:12 -0500258 expandingBelowNotch = true;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400259 }
Dave Mankoff978588f2019-11-15 17:24:12 -0500260 if (expandingBelowNotch) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400261 return mStatusBarView.dispatchTouchEvent(ev);
262 }
263
wilsonshihe8321942019-10-18 18:39:46 +0800264 if (!mIsTrackingBarGesture && isDown
265 && mNotificationPanelViewController.isFullyCollapsed()) {
266 float x = ev.getRawX();
267 float y = ev.getRawY();
268 if (isIntersecting(mStatusBarView, x, y)) {
269 if (mService.isSameStatusBarState(WINDOW_STATE_SHOWING)) {
270 mIsTrackingBarGesture = true;
271 return mStatusBarView.dispatchTouchEvent(ev);
272 } else { // it's hidden or hiding, don't send to notification shade.
273 return true;
274 }
275 }
276 } else if (mIsTrackingBarGesture) {
277 final boolean sendToNotification = mStatusBarView.dispatchTouchEvent(ev);
278 if (isUp || isCancel) {
279 mIsTrackingBarGesture = false;
280 }
281 return sendToNotification;
282 }
283
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400284 return null;
285 }
286
287 @Override
288 public boolean shouldInterceptTouchEvent(MotionEvent ev) {
Heemin Seoge9f4e962019-12-05 11:55:27 -0800289 if (mStatusBarStateController.isDozing() && !mService.isPulsing()
290 && !mDockManager.isDocked()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400291 // Capture all touch events in always-on.
292 return true;
293 }
294 boolean intercept = false;
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500295 if (mNotificationPanelViewController.isFullyExpanded()
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400296 && mDragDownHelper.isDragDownEnabled()
297 && !mService.isBouncerShowing()
Heemin Seoge9f4e962019-12-05 11:55:27 -0800298 && !mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400299 intercept = mDragDownHelper.onInterceptTouchEvent(ev);
300 }
301
302 return intercept;
303
304 }
305
306 @Override
307 public void didIntercept(MotionEvent ev) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400308 MotionEvent cancellation = MotionEvent.obtain(ev);
309 cancellation.setAction(MotionEvent.ACTION_CANCEL);
Heemin Seog82b96cd2019-11-12 16:40:00 -0800310 mStackScrollLayout.onInterceptTouchEvent(cancellation);
Dave Mankoffaf8163f2020-01-08 14:24:35 -0500311 mNotificationPanelViewController.getView().onInterceptTouchEvent(cancellation);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400312 cancellation.recycle();
313 }
314
315 @Override
316 public boolean handleTouchEvent(MotionEvent ev) {
317 boolean handled = false;
Heemin Seoge9f4e962019-12-05 11:55:27 -0800318 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400319 handled = !mService.isPulsing();
320 }
321 if ((mDragDownHelper.isDragDownEnabled() && !handled)
322 || mDragDownHelper.isDraggingDown()) {
323 // we still want to finish our drag down gesture when locking the screen
324 handled = mDragDownHelper.onTouchEvent(ev);
325 }
326
327 return handled;
328 }
329
330 @Override
331 public void didNotHandleTouchEvent(MotionEvent ev) {
332 final int action = ev.getActionMasked();
333 if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
334 mService.setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
335 }
336 }
337
338 @Override
339 public boolean interceptMediaKey(KeyEvent event) {
340 return mService.interceptMediaKey(event);
341 }
342
343 @Override
344 public boolean dispatchKeyEvent(KeyEvent event) {
345 boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
346 switch (event.getKeyCode()) {
347 case KeyEvent.KEYCODE_BACK:
348 if (!down) {
349 mService.onBackPressed();
350 }
351 return true;
352 case KeyEvent.KEYCODE_MENU:
353 if (!down) {
354 return mService.onMenuPressed();
355 }
356 break;
357 case KeyEvent.KEYCODE_SPACE:
358 if (!down) {
359 return mService.onSpacePressed();
360 }
361 break;
362 case KeyEvent.KEYCODE_VOLUME_DOWN:
363 case KeyEvent.KEYCODE_VOLUME_UP:
Heemin Seoge9f4e962019-12-05 11:55:27 -0800364 if (mStatusBarStateController.isDozing()) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400365 MediaSessionLegacyHelper.getHelper(mView.getContext())
366 .sendVolumeKeyEvent(
367 event, AudioManager.USE_DEFAULT_STREAM_TYPE, true);
368 return true;
369 }
370 break;
371 }
372 return false;
373 }
374 });
375
376 mView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
377 @Override
378 public void onChildViewAdded(View parent, View child) {
379 if (child.getId() == R.id.brightness_mirror) {
380 mBrightnessMirror = child;
381 }
382 }
383
384 @Override
385 public void onChildViewRemoved(View parent, View child) {
386 }
387 });
Heemin Seog82b96cd2019-11-12 16:40:00 -0800388
389 ExpandHelper.Callback expandHelperCallback = mStackScrollLayout.getExpandHelperCallback();
390 DragDownHelper.DragDownCallback dragDownCallback = mStackScrollLayout.getDragDownCallback();
391 setDragDownHelper(
392 new DragDownHelper(
393 mView.getContext(), mView, expandHelperCallback,
394 dragDownCallback, mFalsingManager));
Lucas Dupin991415e2019-11-25 17:48:58 -0800395
Lucas Dupin13f4b8a2020-02-19 13:41:52 -0800396 mDepthController.setRoot(mView);
397 mNotificationPanelViewController.addExpansionListener(mDepthController);
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400398 }
399
wilsonshihe8321942019-10-18 18:39:46 +0800400 public NotificationShadeWindowView getView() {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400401 return mView;
402 }
403
404 public void setTouchActive(boolean touchActive) {
405 mTouchActive = touchActive;
406 }
407
408 public void cancelCurrentTouch() {
409 if (mTouchActive) {
410 final long now = SystemClock.uptimeMillis();
411 MotionEvent event = MotionEvent.obtain(now, now,
412 MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
413 event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
414 mView.dispatchTouchEvent(event);
415 event.recycle();
416 mTouchCancelled = true;
417 }
418 }
419
420 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
421 pw.print(" mExpandAnimationPending=");
422 pw.println(mExpandAnimationPending);
423 pw.print(" mExpandAnimationRunning=");
424 pw.println(mExpandAnimationRunning);
425 pw.print(" mTouchCancelled=");
426 pw.println(mTouchCancelled);
427 pw.print(" mTouchActive=");
428 pw.println(mTouchActive);
429 }
430
431 public void setExpandAnimationPending(boolean pending) {
432 mExpandAnimationPending = pending;
433 }
434
435 public void setExpandAnimationRunning(boolean running) {
436 mExpandAnimationRunning = running;
437 }
438
439 public void cancelExpandHelper() {
Heemin Seog82b96cd2019-11-12 16:40:00 -0800440 if (mStackScrollLayout != null) {
441 mStackScrollLayout.cancelExpandHelper();
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400442 }
443 }
444
Beverlyf937f292020-02-20 13:45:36 -0500445 public PhoneStatusBarTransitions getBarTransitions() {
446 return mBarTransitions;
447 }
448
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400449 public void setStatusBarView(PhoneStatusBarView statusBarView) {
450 mStatusBarView = statusBarView;
Beverlyf937f292020-02-20 13:45:36 -0500451 if (statusBarView != null && mStatusBarViewFactory != null) {
452 mBarTransitions = new PhoneStatusBarTransitions(
453 statusBarView,
454 mStatusBarViewFactory.getStatusBarWindowView()
455 .findViewById(R.id.status_bar_container));
456 }
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400457 }
458
Tracy Zhoufe40c852020-05-12 18:37:43 +0000459 public void setService(StatusBar statusBar) {
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400460 mService = statusBar;
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400461 }
462
463 @VisibleForTesting
464 void setDragDownHelper(DragDownHelper dragDownHelper) {
465 mDragDownHelper = dragDownHelper;
466 }
wilsonshihe8321942019-10-18 18:39:46 +0800467
468 private boolean isIntersecting(View view, float x, float y) {
469 mTempLocation = view.getLocationOnScreen();
470 mTempRect.set(mTempLocation[0], mTempLocation[1], mTempLocation[0] + view.getWidth(),
471 mTempLocation[1] + view.getHeight());
472 return mTempRect.contains(x, y);
473 }
Dave Mankoff0cf8dfc2019-09-27 12:46:41 -0400474}