blob: 13ad9a5ee90d86f48381c08bf8bf22099864ebe3 [file] [log] [blame]
Winson Chungcdbbb7e2014-06-24 12:11:49 -07001/*
2 * Copyright (C) 2014 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.recents.views;
18
Winson Chung8e548f72014-06-24 14:40:53 -070019import android.app.Activity;
Winson35f30502015-09-28 11:24:36 -070020import android.content.Context;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070021import android.view.View;
Winsonc0d70582016-01-29 10:24:39 -080022
23import com.android.systemui.Interpolators;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070024import com.android.systemui.R;
Winson412e1802015-10-20 16:57:57 -070025import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
Winson3fb67562015-11-11 10:39:03 -080026import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent;
Winson3b6ba1a2016-03-22 15:37:54 -070027import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070028
29/** Manages the scrims for the various system bars. */
30public class SystemBarScrimViews {
31
Winson35f30502015-09-28 11:24:36 -070032 Context mContext;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070033
Winson Chungcdbbb7e2014-06-24 12:11:49 -070034 View mNavBarScrimView;
35
36 boolean mHasNavBarScrim;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070037 boolean mShouldAnimateNavBarScrim;
38
Winson35f30502015-09-28 11:24:36 -070039 int mNavBarScrimEnterDuration;
40
Winson35f30502015-09-28 11:24:36 -070041 public SystemBarScrimViews(Activity activity) {
42 mContext = activity;
Winson Chung8e548f72014-06-24 14:40:53 -070043 mNavBarScrimView = activity.findViewById(R.id.nav_bar_scrim);
Winson35f30502015-09-28 11:24:36 -070044 mNavBarScrimEnterDuration = activity.getResources().getInteger(
45 R.integer.recents_nav_bar_scrim_enter_duration);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070046 }
47
48 /**
49 * Prepares the scrim views for animating when entering Recents. This will be called before
Winsona1ededd2016-03-25 12:23:12 -070050 * the first draw, unless we are updating the scrim on configuration change.
Winson Chungcdbbb7e2014-06-24 12:11:49 -070051 */
Winson49df4202016-01-25 17:33:34 -080052 public void prepareEnterRecentsAnimation(boolean hasNavBarScrim, boolean animateNavBarScrim) {
53 mHasNavBarScrim = hasNavBarScrim;
Winson Chung9a742902015-12-11 10:25:40 -050054 mShouldAnimateNavBarScrim = animateNavBarScrim;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070055
56 mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ?
57 View.VISIBLE : View.INVISIBLE);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070058 }
59
Winson88737542016-02-17 13:27:33 -080060 /**
61 * Animates the nav bar scrim visibility.
62 */
63 public void animateNavBarScrimVisibility(boolean visible, AnimationProps animation) {
64 int toY = 0;
65 if (visible) {
66 mNavBarScrimView.setVisibility(View.VISIBLE);
67 mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight());
68 } else {
69 toY = mNavBarScrimView.getMeasuredHeight();
70 }
71 if (animation != AnimationProps.IMMEDIATE) {
72 mNavBarScrimView.animate()
73 .translationY(toY)
74 .setDuration(animation.getDuration(AnimationProps.BOUNDS))
75 .setInterpolator(animation.getInterpolator(AnimationProps.BOUNDS))
76 .start();
77 } else {
78 mNavBarScrimView.setTranslationY(toY);
79 }
80 }
81
Winson412e1802015-10-20 16:57:57 -070082 /**** EventBus events ****/
83
Winson Chungcdbbb7e2014-06-24 12:11:49 -070084 /**
85 * Starts animating the scrim views when entering Recents.
86 */
Winson3fb67562015-11-11 10:39:03 -080087 public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
Winson88737542016-02-17 13:27:33 -080088 if (mHasNavBarScrim) {
89 AnimationProps animation = mShouldAnimateNavBarScrim
90 ? new AnimationProps()
91 .setDuration(AnimationProps.BOUNDS, mNavBarScrimEnterDuration)
92 .setInterpolator(AnimationProps.BOUNDS, Interpolators.DECELERATE_QUINT)
93 : AnimationProps.IMMEDIATE;
94 animateNavBarScrimVisibility(true, animation);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070095 }
96 }
97
98 /**
99 * Starts animating the scrim views when leaving Recents (either via launching a task, or
100 * going home).
101 */
Winson412e1802015-10-20 16:57:57 -0700102 public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
Winson88737542016-02-17 13:27:33 -0800103 if (mHasNavBarScrim) {
104 AnimationProps animation = new AnimationProps()
105 .setDuration(AnimationProps.BOUNDS,
106 TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION)
107 .setInterpolator(AnimationProps.BOUNDS, Interpolators.FAST_OUT_SLOW_IN);
108 animateNavBarScrimVisibility(false, animation);
Winson Chungcdbbb7e2014-06-24 12:11:49 -0700109 }
110 }
Winson3b6ba1a2016-03-22 15:37:54 -0700111
112 public final void onBusEvent(DismissAllTaskViewsEvent event) {
113 if (mHasNavBarScrim) {
114 AnimationProps animation = new AnimationProps()
115 .setDuration(AnimationProps.BOUNDS,
116 TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION)
117 .setInterpolator(AnimationProps.BOUNDS, Interpolators.FAST_OUT_SLOW_IN);
118 animateNavBarScrimVisibility(false, animation);
119 }
120 }
Winson Chungcdbbb7e2014-06-24 12:11:49 -0700121}