blob: f9ddeaef3e86d23b3b4374eaba5fe223aa192632 [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 Wasserman2c113402019-05-24 14:11:24 -040019import android.app.ActivityManager;
Govinda Wasserman48cdd682019-06-04 12:15:23 -040020import android.content.BroadcastReceiver;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040021import android.content.ComponentName;
22import android.content.Context;
Govinda Wasserman48cdd682019-06-04 12:15:23 -040023import android.content.Intent;
24import android.content.IntentFilter;
Govinda Wasserman8c78dee2019-06-13 09:58:22 -040025import android.content.pm.ResolveInfo;
Govinda Wasserman48cdd682019-06-04 12:15:23 -040026import android.os.Handler;
Govinda Wasserman1f606b02019-05-29 09:16:02 -040027import android.os.SystemClock;
Govinda Wasserman1f606b02019-05-29 09:16:02 -040028import android.provider.Settings;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040029
30import androidx.annotation.Nullable;
31
Govinda Wasserman1f606b02019-05-29 09:16:02 -040032import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040033import com.android.systemui.Dependency;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040034import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
35import com.android.systemui.plugins.statusbar.StatusBarStateController;
36import com.android.systemui.recents.OverviewProxyService;
37import com.android.systemui.shared.system.ActivityManagerWrapper;
Govinda Wasserman48cdd682019-06-04 12:15:23 -040038import com.android.systemui.shared.system.PackageManagerWrapper;
Govinda Wasserman2c113402019-05-24 14:11:24 -040039import com.android.systemui.shared.system.QuickStepContract;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040040import com.android.systemui.shared.system.TaskStackChangeListener;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040041import com.android.systemui.statusbar.StatusBarState;
42
Govinda Wasserman48cdd682019-06-04 12:15:23 -040043import java.io.PrintWriter;
44import java.time.LocalDate;
45import java.util.ArrayList;
Govinda Wasserman8c78dee2019-06-13 09:58:22 -040046import java.util.List;
Govinda Wasserman1f606b02019-05-29 09:16:02 -040047import java.util.concurrent.TimeUnit;
48
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040049/**
50 * Assistant handle behavior that hides the handles when the phone is dozing or in immersive mode,
51 * shows the handles when on lockscreen, and shows the handles temporarily when changing tasks or
52 * entering overview.
53 */
54final class AssistHandleReminderExpBehavior implements BehaviorController {
55
Govinda Wasserman1f606b02019-05-29 09:16:02 -040056 private static final String LEARNING_TIME_ELAPSED_KEY = "reminder_exp_learning_time_elapsed";
57 private static final String LEARNING_EVENT_COUNT_KEY = "reminder_exp_learning_event_count";
Govinda Wasserman48cdd682019-06-04 12:15:23 -040058 private static final String LEARNED_HINT_LAST_SHOWN_KEY =
59 "reminder_exp_learned_hint_last_shown";
Matt Casey176b2052019-06-18 16:27:56 -040060 private static final long DEFAULT_LEARNING_TIME_MS = TimeUnit.DAYS.toMillis(10);
61 private static final int DEFAULT_LEARNING_COUNT = 10;
Govinda Wasserman48cdd682019-06-04 12:15:23 -040062 private static final long DEFAULT_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS = 150;
63 private static final long DEFAULT_SHOW_AND_GO_DELAYED_LONG_DELAY_MS =
64 TimeUnit.SECONDS.toMillis(1);
65 private static final long DEFAULT_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS =
66 TimeUnit.SECONDS.toMillis(3);
67 private static final boolean DEFAULT_SUPPRESS_ON_LOCKSCREEN = false;
68 private static final boolean DEFAULT_SUPPRESS_ON_LAUNCHER = false;
Matt Casey176b2052019-06-18 16:27:56 -040069 private static final boolean DEFAULT_SUPPRESS_ON_APPS = true;
Govinda Wasserman3aa4f362019-06-19 11:23:43 -040070 private static final boolean DEFAULT_SHOW_WHEN_TAUGHT = false;
Govinda Wasserman1f606b02019-05-29 09:16:02 -040071
Govinda Wasserman8c78dee2019-06-13 09:58:22 -040072 private static final String[] DEFAULT_HOME_CHANGE_ACTIONS = new String[] {
73 PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED,
74 Intent.ACTION_BOOT_COMPLETED,
75 Intent.ACTION_PACKAGE_ADDED,
76 Intent.ACTION_PACKAGE_CHANGED,
77 Intent.ACTION_PACKAGE_REMOVED
78 };
79
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040080 private final StatusBarStateController.StateListener mStatusBarStateListener =
81 new StatusBarStateController.StateListener() {
82 @Override
83 public void onStateChanged(int newState) {
84 handleStatusBarStateChanged(newState);
85 }
86
87 @Override
88 public void onDozingChanged(boolean isDozing) {
89 handleDozingChanged(isDozing);
90 }
91 };
92 private final TaskStackChangeListener mTaskStackChangeListener =
93 new TaskStackChangeListener() {
94 @Override
Govinda Wasserman48cdd682019-06-04 12:15:23 -040095 public void onTaskMovedToFront(ActivityManager.RunningTaskInfo taskInfo) {
96 handleTaskStackTopChanged(taskInfo.taskId, taskInfo.topActivity);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -040097 }
98
99 @Override
100 public void onTaskCreated(int taskId, ComponentName componentName) {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400101 handleTaskStackTopChanged(taskId, componentName);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400102 }
103 };
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400104 private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener =
105 new OverviewProxyService.OverviewProxyListener() {
106 @Override
107 public void onOverviewShown(boolean fromHome) {
108 handleOverviewShown();
109 }
Govinda Wasserman2c113402019-05-24 14:11:24 -0400110
111 @Override
112 public void onSystemUiStateChanged(int sysuiStateFlags) {
113 handleSystemUiStateChanged(sysuiStateFlags);
114 }
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400115 };
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400116 private final BroadcastReceiver mDefaultHomeBroadcastReceiver = new BroadcastReceiver() {
117 @Override
118 public void onReceive(Context context, Intent intent) {
119 mDefaultHome = getCurrentDefaultHome();
120 }
121 };
Govinda Wasserman8c78dee2019-06-13 09:58:22 -0400122 private final IntentFilter mDefaultHomeIntentFilter;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400123 private final Runnable mResetConsecutiveTaskSwitches = this::resetConsecutiveTaskSwitches;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400124
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400125 private final Handler mHandler;
126 private final PhenotypeHelper mPhenotypeHelper;
Govinda Wasserman2c113402019-05-24 14:11:24 -0400127 private final StatusBarStateController mStatusBarStateController;
128 private final ActivityManagerWrapper mActivityManagerWrapper;
129 private final OverviewProxyService mOverviewProxyService;
130
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400131 private boolean mOnLockscreen;
132 private boolean mIsDozing;
133 private int mRunningTaskId;
Govinda Wasserman2c113402019-05-24 14:11:24 -0400134 private boolean mIsNavBarHidden;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400135 private boolean mIsLauncherShowing;
136 private int mConsecutiveTaskSwitches;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400137
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400138 /** Whether user has learned the gesture. */
139 private boolean mIsLearned;
140 private long mLastLearningTimestamp;
141 /** Uptime while in this behavior. */
142 private long mLearningTimeElapsed;
143 /** Number of successful Assistant invocations while in this behavior. */
144 private int mLearningCount;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400145 private long mLearnedHintLastShownEpochDay;
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400146
147 @Nullable private Context mContext;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400148 @Nullable private AssistHandleCallbacks mAssistHandleCallbacks;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400149 @Nullable private ComponentName mDefaultHome;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400150
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400151 AssistHandleReminderExpBehavior(Handler handler, PhenotypeHelper phenotypeHelper) {
152 mHandler = handler;
153 mPhenotypeHelper = phenotypeHelper;
Govinda Wasserman2c113402019-05-24 14:11:24 -0400154 mStatusBarStateController = Dependency.get(StatusBarStateController.class);
155 mActivityManagerWrapper = ActivityManagerWrapper.getInstance();
156 mOverviewProxyService = Dependency.get(OverviewProxyService.class);
Govinda Wasserman8c78dee2019-06-13 09:58:22 -0400157 mDefaultHomeIntentFilter = new IntentFilter();
158 for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
159 mDefaultHomeIntentFilter.addAction(action);
160 }
Govinda Wasserman2c113402019-05-24 14:11:24 -0400161 }
162
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400163 @Override
164 public void onModeActivated(Context context, AssistHandleCallbacks callbacks) {
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400165 mContext = context;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400166 mAssistHandleCallbacks = callbacks;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400167 mConsecutiveTaskSwitches = 0;
168 mDefaultHome = getCurrentDefaultHome();
169 context.registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400170 mOnLockscreen = onLockscreen(mStatusBarStateController.getState());
171 mIsDozing = mStatusBarStateController.isDozing();
172 mStatusBarStateController.addCallback(mStatusBarStateListener);
Govinda Wasserman2c113402019-05-24 14:11:24 -0400173 ActivityManager.RunningTaskInfo runningTaskInfo = mActivityManagerWrapper.getRunningTask();
174 mRunningTaskId = runningTaskInfo == null ? 0 : runningTaskInfo.taskId;
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400175 mActivityManagerWrapper.registerTaskStackListener(mTaskStackChangeListener);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400176 mOverviewProxyService.addCallback(mOverviewProxyListener);
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400177
178 mLearningTimeElapsed = Settings.Secure.getLong(
179 context.getContentResolver(), LEARNING_TIME_ELAPSED_KEY, /* default = */ 0);
180 mLearningCount = Settings.Secure.getInt(
181 context.getContentResolver(), LEARNING_EVENT_COUNT_KEY, /* default = */ 0);
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400182 mLearnedHintLastShownEpochDay = Settings.Secure.getLong(
183 context.getContentResolver(), LEARNED_HINT_LAST_SHOWN_KEY, /* default = */ 0);
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400184 mLastLearningTimestamp = SystemClock.uptimeMillis();
185
186 callbackForCurrentState(/* justUnlocked = */ false);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400187 }
188
189 @Override
190 public void onModeDeactivated() {
191 mAssistHandleCallbacks = null;
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400192 if (mContext != null) {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400193 mContext.unregisterReceiver(mDefaultHomeBroadcastReceiver);
194 Settings.Secure.putLong(mContext.getContentResolver(), LEARNING_TIME_ELAPSED_KEY, 0);
195 Settings.Secure.putInt(mContext.getContentResolver(), LEARNING_EVENT_COUNT_KEY, 0);
196 Settings.Secure.putLong(mContext.getContentResolver(), LEARNED_HINT_LAST_SHOWN_KEY, 0);
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400197 mContext = null;
198 }
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400199 mStatusBarStateController.removeCallback(mStatusBarStateListener);
200 mActivityManagerWrapper.unregisterTaskStackListener(mTaskStackChangeListener);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400201 mOverviewProxyService.removeCallback(mOverviewProxyListener);
202 }
203
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400204 @Override
205 public void onAssistantGesturePerformed() {
206 if (mContext == null) {
207 return;
208 }
209
210 Settings.Secure.putLong(
211 mContext.getContentResolver(), LEARNING_EVENT_COUNT_KEY, ++mLearningCount);
212 }
213
Govinda Wasserman2c113402019-05-24 14:11:24 -0400214 private static boolean isNavBarHidden(int sysuiStateFlags) {
215 return (sysuiStateFlags & QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
216 }
217
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400218 @Nullable
219 private static ComponentName getCurrentDefaultHome() {
Govinda Wasserman8c78dee2019-06-13 09:58:22 -0400220 List<ResolveInfo> homeActivities = new ArrayList<>();
221 ComponentName defaultHome =
222 PackageManagerWrapper.getInstance().getHomeActivities(homeActivities);
223 if (defaultHome != null) {
224 return defaultHome;
225 }
226
227 int topPriority = Integer.MIN_VALUE;
228 ComponentName topComponent = null;
229 for (ResolveInfo resolveInfo : homeActivities) {
230 if (resolveInfo.priority > topPriority) {
231 topComponent = resolveInfo.activityInfo.getComponentName();
232 topPriority = resolveInfo.priority;
233 } else if (resolveInfo.priority == topPriority) {
234 topComponent = null;
235 }
236 }
237 return topComponent;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400238 }
239
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400240 private void handleStatusBarStateChanged(int newState) {
241 boolean onLockscreen = onLockscreen(newState);
242 if (mOnLockscreen == onLockscreen) {
243 return;
244 }
245
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400246 resetConsecutiveTaskSwitches();
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400247 mOnLockscreen = onLockscreen;
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400248 callbackForCurrentState(!onLockscreen);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400249 }
250
251 private void handleDozingChanged(boolean isDozing) {
252 if (mIsDozing == isDozing) {
253 return;
254 }
255
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400256 resetConsecutiveTaskSwitches();
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400257 mIsDozing = isDozing;
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400258 callbackForCurrentState(/* justUnlocked = */ false);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400259 }
260
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400261 private void handleTaskStackTopChanged(int taskId, @Nullable ComponentName taskComponentName) {
262 if (mRunningTaskId == taskId || taskComponentName == null) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400263 return;
264 }
265
266 mRunningTaskId = taskId;
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400267 mIsLauncherShowing = taskComponentName.equals(mDefaultHome);
268 if (mIsLauncherShowing) {
269 resetConsecutiveTaskSwitches();
270 } else {
271 rescheduleConsecutiveTaskSwitchesReset();
272 mConsecutiveTaskSwitches++;
273 }
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400274 callbackForCurrentState(/* justUnlocked = */ false);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400275 }
276
Govinda Wasserman2c113402019-05-24 14:11:24 -0400277 private void handleSystemUiStateChanged(int sysuiStateFlags) {
278 boolean isNavBarHidden = isNavBarHidden(sysuiStateFlags);
279 if (mIsNavBarHidden == isNavBarHidden) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400280 return;
281 }
282
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400283 resetConsecutiveTaskSwitches();
Govinda Wasserman2c113402019-05-24 14:11:24 -0400284 mIsNavBarHidden = isNavBarHidden;
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400285 callbackForCurrentState(/* justUnlocked = */ false);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400286 }
287
288 private void handleOverviewShown() {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400289 resetConsecutiveTaskSwitches();
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400290 callbackForCurrentState(/* justUnlocked = */ false);
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400291 }
292
293 private boolean onLockscreen(int statusBarState) {
294 return statusBarState == StatusBarState.KEYGUARD
295 || statusBarState == StatusBarState.SHADE_LOCKED;
296 }
297
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400298 private void callbackForCurrentState(boolean justUnlocked) {
299 updateLearningStatus();
300
301 if (mIsLearned) {
302 callbackForLearnedState(justUnlocked);
303 } else {
304 callbackForUnlearnedState();
305 }
306 }
307
308 private void callbackForLearnedState(boolean justUnlocked) {
309 if (mAssistHandleCallbacks == null) {
310 return;
311 }
312
Govinda Wasserman3aa4f362019-06-19 11:23:43 -0400313 if (mIsDozing || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) {
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400314 mAssistHandleCallbacks.hide();
315 } else if (justUnlocked) {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400316 long currentEpochDay = LocalDate.now().toEpochDay();
317 if (mLearnedHintLastShownEpochDay < currentEpochDay) {
318 if (mContext != null) {
319 Settings.Secure.putLong(
320 mContext.getContentResolver(),
321 LEARNED_HINT_LAST_SHOWN_KEY,
322 currentEpochDay);
323 }
324 mLearnedHintLastShownEpochDay = currentEpochDay;
325 mAssistHandleCallbacks.showAndGo();
326 }
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400327 }
328 }
329
330 private void callbackForUnlearnedState() {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400331 if (mAssistHandleCallbacks == null) {
332 return;
333 }
334
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400335 if (mIsDozing || mIsNavBarHidden || isSuppressed()) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400336 mAssistHandleCallbacks.hide();
337 } else if (mOnLockscreen) {
338 mAssistHandleCallbacks.showAndStay();
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400339 } else if (mIsLauncherShowing) {
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400340 mAssistHandleCallbacks.showAndGo();
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400341 } else if (mConsecutiveTaskSwitches == 1) {
342 mAssistHandleCallbacks.showAndGoDelayed(
343 getShowAndGoDelayedShortDelayMs(), /* hideIfShowing = */ false);
344 } else {
345 mAssistHandleCallbacks.showAndGoDelayed(
346 getShowAndGoDelayedLongDelayMs(), /* hideIfShowing = */ true);
347 }
348 }
349
350 private boolean isSuppressed() {
351 if (mOnLockscreen) {
352 return getSuppressOnLockscreen();
353 } else if (mIsLauncherShowing) {
354 return getSuppressOnLauncher();
355 } else {
356 return getSuppressOnApps();
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400357 }
358 }
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400359
360 private void updateLearningStatus() {
361 if (mContext == null) {
362 return;
363 }
364
365 long currentTimestamp = SystemClock.uptimeMillis();
366 mLearningTimeElapsed += currentTimestamp - mLastLearningTimestamp;
367 mLastLearningTimestamp = currentTimestamp;
368 Settings.Secure.putLong(
369 mContext.getContentResolver(), LEARNING_TIME_ELAPSED_KEY, mLearningTimeElapsed);
370
371 mIsLearned =
372 mLearningCount >= getLearningCount() || mLearningTimeElapsed >= getLearningTimeMs();
373 }
374
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400375 private void resetConsecutiveTaskSwitches() {
376 mHandler.removeCallbacks(mResetConsecutiveTaskSwitches);
377 mConsecutiveTaskSwitches = 0;
378 }
379
380 private void rescheduleConsecutiveTaskSwitchesReset() {
381 mHandler.removeCallbacks(mResetConsecutiveTaskSwitches);
382 mHandler.postDelayed(mResetConsecutiveTaskSwitches, getShowAndGoDelayResetTimeoutMs());
383 }
384
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400385 private long getLearningTimeMs() {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400386 return mPhenotypeHelper.getLong(
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400387 SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS,
388 DEFAULT_LEARNING_TIME_MS);
389 }
390
391 private int getLearningCount() {
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400392 return mPhenotypeHelper.getInt(
Govinda Wasserman1f606b02019-05-29 09:16:02 -0400393 SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_COUNT,
394 DEFAULT_LEARNING_COUNT);
395 }
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400396
397 private long getShowAndGoDelayedShortDelayMs() {
398 return mPhenotypeHelper.getLong(
399 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS,
400 DEFAULT_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS);
401 }
402
403 private long getShowAndGoDelayedLongDelayMs() {
404 return mPhenotypeHelper.getLong(
405 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_LONG_DELAY_MS,
406 DEFAULT_SHOW_AND_GO_DELAYED_LONG_DELAY_MS);
407 }
408
409 private long getShowAndGoDelayResetTimeoutMs() {
410 return mPhenotypeHelper.getLong(
411 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS,
412 DEFAULT_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS);
413 }
414
415 private boolean getSuppressOnLockscreen() {
416 return mPhenotypeHelper.getBoolean(
417 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LOCKSCREEN,
418 DEFAULT_SUPPRESS_ON_LOCKSCREEN);
419 }
420
421 private boolean getSuppressOnLauncher() {
422 return mPhenotypeHelper.getBoolean(
423 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LAUNCHER,
424 DEFAULT_SUPPRESS_ON_LAUNCHER);
425 }
426
427 private boolean getSuppressOnApps() {
428 return mPhenotypeHelper.getBoolean(
429 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_APPS,
430 DEFAULT_SUPPRESS_ON_APPS);
431 }
432
Govinda Wasserman3aa4f362019-06-19 11:23:43 -0400433 private boolean getShowWhenTaught() {
434 return mPhenotypeHelper.getBoolean(
435 SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_WHEN_TAUGHT,
436 DEFAULT_SHOW_WHEN_TAUGHT);
437 }
438
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400439 @Override
440 public void dump(PrintWriter pw, String prefix) {
441 pw.println(prefix + "Current AssistHandleReminderExpBehavior State:");
442 pw.println(prefix + " mOnLockscreen=" + mOnLockscreen);
443 pw.println(prefix + " mIsDozing=" + mIsDozing);
444 pw.println(prefix + " mRunningTaskId=" + mRunningTaskId);
445 pw.println(prefix + " mDefaultHome=" + mDefaultHome);
446 pw.println(prefix + " mIsNavBarHidden=" + mIsNavBarHidden);
447 pw.println(prefix + " mIsLauncherShowing=" + mIsLauncherShowing);
448 pw.println(prefix + " mConsecutiveTaskSwitches=" + mConsecutiveTaskSwitches);
449 pw.println(prefix + " mIsLearned=" + mIsLearned);
450 pw.println(prefix + " mLastLearningTimestamp=" + mLastLearningTimestamp);
451 pw.println(prefix + " mLearningTimeElapsed=" + mLearningTimeElapsed);
452 pw.println(prefix + " mLearningCount=" + mLearningCount);
453 pw.println(prefix + " mLearnedHintLastShownEpochDay=" + mLearnedHintLastShownEpochDay);
454 pw.println(
455 prefix + " mAssistHandleCallbacks present: " + (mAssistHandleCallbacks != null));
456
457 pw.println(prefix + " Phenotype Flags:");
458 pw.println(prefix + " "
459 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS
460 + "="
461 + getLearningTimeMs());
462 pw.println(prefix + " "
463 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_COUNT
464 + "="
465 + getLearningCount());
466 pw.println(prefix + " "
467 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS
468 + "="
469 + getShowAndGoDelayedShortDelayMs());
470 pw.println(prefix + " "
471 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_LONG_DELAY_MS
472 + "="
473 + getShowAndGoDelayedLongDelayMs());
474 pw.println(prefix + " "
475 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS
476 + "="
477 + getShowAndGoDelayResetTimeoutMs());
478 pw.println(prefix + " "
479 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LOCKSCREEN
480 + "="
481 + getSuppressOnLockscreen());
482 pw.println(prefix + " "
483 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LAUNCHER
484 + "="
485 + getSuppressOnLauncher());
486 pw.println(prefix + " "
487 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_APPS
488 + "="
489 + getSuppressOnApps());
Govinda Wasserman3aa4f362019-06-19 11:23:43 -0400490 pw.println(prefix + " "
491 + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_WHEN_TAUGHT
492 + "="
493 + getShowWhenTaught());
Govinda Wasserman48cdd682019-06-04 12:15:23 -0400494 }
Govinda Wassermanc7495cd2019-05-20 14:43:28 -0400495}