blob: 9c8189a216bd92c9305e27eafd7090ad887e5be2 [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;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070027
28/** Manages the scrims for the various system bars. */
29public class SystemBarScrimViews {
30
Winson35f30502015-09-28 11:24:36 -070031 Context mContext;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070032
Winson Chungcdbbb7e2014-06-24 12:11:49 -070033 View mNavBarScrimView;
34
35 boolean mHasNavBarScrim;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070036 boolean mShouldAnimateNavBarScrim;
37
Winson35f30502015-09-28 11:24:36 -070038 int mNavBarScrimEnterDuration;
39
Winson35f30502015-09-28 11:24:36 -070040 public SystemBarScrimViews(Activity activity) {
41 mContext = activity;
Winson Chung8e548f72014-06-24 14:40:53 -070042 mNavBarScrimView = activity.findViewById(R.id.nav_bar_scrim);
Winson35f30502015-09-28 11:24:36 -070043 mNavBarScrimEnterDuration = activity.getResources().getInteger(
44 R.integer.recents_nav_bar_scrim_enter_duration);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070045 }
46
47 /**
48 * Prepares the scrim views for animating when entering Recents. This will be called before
Winsona1ededd2016-03-25 12:23:12 -070049 * the first draw, unless we are updating the scrim on configuration change.
Winson Chungcdbbb7e2014-06-24 12:11:49 -070050 */
Winson49df4202016-01-25 17:33:34 -080051 public void prepareEnterRecentsAnimation(boolean hasNavBarScrim, boolean animateNavBarScrim) {
52 mHasNavBarScrim = hasNavBarScrim;
Winson Chung9a742902015-12-11 10:25:40 -050053 mShouldAnimateNavBarScrim = animateNavBarScrim;
Winson Chungcdbbb7e2014-06-24 12:11:49 -070054
55 mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ?
56 View.VISIBLE : View.INVISIBLE);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070057 }
58
Winson88737542016-02-17 13:27:33 -080059 /**
60 * Animates the nav bar scrim visibility.
61 */
62 public void animateNavBarScrimVisibility(boolean visible, AnimationProps animation) {
63 int toY = 0;
64 if (visible) {
65 mNavBarScrimView.setVisibility(View.VISIBLE);
66 mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight());
67 } else {
68 toY = mNavBarScrimView.getMeasuredHeight();
69 }
70 if (animation != AnimationProps.IMMEDIATE) {
71 mNavBarScrimView.animate()
72 .translationY(toY)
73 .setDuration(animation.getDuration(AnimationProps.BOUNDS))
74 .setInterpolator(animation.getInterpolator(AnimationProps.BOUNDS))
75 .start();
76 } else {
77 mNavBarScrimView.setTranslationY(toY);
78 }
79 }
80
Winson412e1802015-10-20 16:57:57 -070081 /**** EventBus events ****/
82
Winson Chungcdbbb7e2014-06-24 12:11:49 -070083 /**
84 * Starts animating the scrim views when entering Recents.
85 */
Winson3fb67562015-11-11 10:39:03 -080086 public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
Winson88737542016-02-17 13:27:33 -080087 if (mHasNavBarScrim) {
88 AnimationProps animation = mShouldAnimateNavBarScrim
89 ? new AnimationProps()
90 .setDuration(AnimationProps.BOUNDS, mNavBarScrimEnterDuration)
91 .setInterpolator(AnimationProps.BOUNDS, Interpolators.DECELERATE_QUINT)
92 : AnimationProps.IMMEDIATE;
93 animateNavBarScrimVisibility(true, animation);
Winson Chungcdbbb7e2014-06-24 12:11:49 -070094 }
95 }
96
97 /**
98 * Starts animating the scrim views when leaving Recents (either via launching a task, or
99 * going home).
100 */
Winson412e1802015-10-20 16:57:57 -0700101 public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
Winson88737542016-02-17 13:27:33 -0800102 if (mHasNavBarScrim) {
103 AnimationProps animation = new AnimationProps()
104 .setDuration(AnimationProps.BOUNDS,
105 TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION)
106 .setInterpolator(AnimationProps.BOUNDS, Interpolators.FAST_OUT_SLOW_IN);
107 animateNavBarScrimVisibility(false, animation);
Winson Chungcdbbb7e2014-06-24 12:11:49 -0700108 }
109 }
Winson Chungcdbbb7e2014-06-24 12:11:49 -0700110}