blob: 6cf2034e6c9b6ad02162b2110cbe88747693373f [file] [log] [blame]
Govinda Wassermanc7495cd2019-05-20 14:43:28 -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.assist;
18
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040019import android.content.Context;
20
21import androidx.annotation.Nullable;
22
23import com.android.systemui.Dependency;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040024import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
Govinda Wasserman2c113402019-05-24 14:11:24 -040025import com.android.systemui.plugins.statusbar.StatusBarStateController;
26import com.android.systemui.recents.OverviewProxyService;
27import com.android.systemui.shared.system.QuickStepContract;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040028
Govinda Wasserman48cdd682019-06-04 12:15:23 -040029import java.io.PrintWriter;
30
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040031/**
32 * Assistant Handle behavior that makes Assistant handles show/hide when the home handle is
33 * shown/hidden, respectively.
34 */
35final class AssistHandleLikeHomeBehavior implements BehaviorController {
36
Govinda Wasserman2c113402019-05-24 14:11:24 -040037 private final StatusBarStateController.StateListener mStatusBarStateListener =
38 new StatusBarStateController.StateListener() {
39 @Override
40 public void onDozingChanged(boolean isDozing) {
41 handleDozingChanged(isDozing);
42 }
43 };
44 private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener =
45 new OverviewProxyService.OverviewProxyListener() {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040046 @Override
Govinda Wasserman2c113402019-05-24 14:11:24 -040047 public void onSystemUiStateChanged(int sysuiStateFlags) {
48 handleSystemUiStateChange(sysuiStateFlags);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040049 }
50 };
Govinda Wasserman2c113402019-05-24 14:11:24 -040051 private final StatusBarStateController mStatusBarStateController;
52 private final OverviewProxyService mOverviewProxyService;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040053
Govinda Wasserman2c113402019-05-24 14:11:24 -040054 private boolean mIsDozing;
55 private boolean mIsHomeHandleHiding;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040056
57 @Nullable private AssistHandleCallbacks mAssistHandleCallbacks;
58
Govinda Wasserman2c113402019-05-24 14:11:24 -040059 AssistHandleLikeHomeBehavior() {
60 mStatusBarStateController = Dependency.get(StatusBarStateController.class);
61 mOverviewProxyService = Dependency.get(OverviewProxyService.class);
62 }
63
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040064 @Override
65 public void onModeActivated(Context context, AssistHandleCallbacks callbacks) {
66 mAssistHandleCallbacks = callbacks;
Govinda Wasserman2c113402019-05-24 14:11:24 -040067 mIsDozing = mStatusBarStateController.isDozing();
68 mStatusBarStateController.addCallback(mStatusBarStateListener);
69 mOverviewProxyService.addCallback(mOverviewProxyListener);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040070 callbackForCurrentState();
71 }
72
73 @Override
74 public void onModeDeactivated() {
75 mAssistHandleCallbacks = null;
Govinda Wasserman2c113402019-05-24 14:11:24 -040076 mOverviewProxyService.removeCallback(mOverviewProxyListener);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040077 }
78
Govinda Wasserman2c113402019-05-24 14:11:24 -040079 private static boolean isHomeHandleHiding(int sysuiStateFlags) {
80 return (sysuiStateFlags & QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
81 }
82
83 private void handleDozingChanged(boolean isDozing) {
84 if (mIsDozing == isDozing) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040085 return;
86 }
87
Govinda Wasserman2c113402019-05-24 14:11:24 -040088 mIsDozing = isDozing;
89 callbackForCurrentState();
90 }
91
92 private void handleSystemUiStateChange(int sysuiStateFlags) {
93 boolean isHomeHandleHiding = isHomeHandleHiding(sysuiStateFlags);
94 if (mIsHomeHandleHiding == isHomeHandleHiding) {
95 return;
96 }
97
98 mIsHomeHandleHiding = isHomeHandleHiding;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040099 callbackForCurrentState();
100 }
101
102 private void callbackForCurrentState() {
103 if (mAssistHandleCallbacks == null) {
104 return;
105 }
106
Govinda Wasserman2c113402019-05-24 14:11:24 -0400107 if (mIsHomeHandleHiding || mIsDozing) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400108 mAssistHandleCallbacks.hide();
Govinda Wasserman2c113402019-05-24 14:11:24 -0400109 } else {
110 mAssistHandleCallbacks.showAndStay();
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400111 }
112 }
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400113
114 @Override
115 public void dump(PrintWriter pw, String prefix) {
116 pw.println("Current AssistHandleLikeHomeBehavior State:");
117
118 pw.println(prefix + " mIsDozing=" + mIsDozing);
119 pw.println(prefix + " mIsHomeHandleHiding=" + mIsHomeHandleHiding);
120 }
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400121}