summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2017-06-20 23:35:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-06-20 23:36:01 +0000
commiteca0ae0663244b99a5eda8a241c73ffdb460ffba (patch)
tree199aa676cfe61ef185fddbb4fc00b977ed949786
parent00289d4da37f9a76b00fbc5d794211e47385a2cb (diff)
parentae90ba8927f1fc68f4d5c947ba40f7b7dff43c1d (diff)
Merge "Vary opacity based on number of tasks." into oc-dr1-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java69
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java2
3 files changed, 63 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 86b1d3b7efce..4de121488ecc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -72,6 +72,7 @@ import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent;
import com.android.systemui.recents.events.ui.ShowIncompatibleAppOverlayEvent;
import com.android.systemui.recents.events.ui.StackViewScrolledEvent;
+import com.android.systemui.recents.events.ui.TaskViewDismissedEvent;
import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent;
import com.android.systemui.recents.events.ui.UserInteractionEvent;
import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent;
@@ -420,8 +421,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
loadOpts.numVisibleTaskThumbnails = launchState.launchedNumVisibleThumbnails;
loader.loadTasks(this, loadPlan, loadOpts);
TaskStack stack = loadPlan.getTaskStack();
- mRecentsView.onReload(mIsVisible, stack.getTaskCount() == 0);
- mRecentsView.updateStack(stack, true /* setStackViewTasks */);
+ mRecentsView.onReload(stack, mIsVisible);
// Update the nav bar scrim, but defer the animation until the enter-window event
boolean animateNavBarScrim = !launchState.launchedViaDockGesture;
@@ -755,6 +755,10 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
ssp.removeTask(event.task.key.id);
}
+ public final void onBusEvent(TaskViewDismissedEvent event) {
+ mRecentsView.updateScrimOpacity();
+ }
+
public final void onBusEvent(AllTaskViewsDismissedEvent event) {
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.hasDockedTask()) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index d710244988cb..dca4a8d3308a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -31,6 +31,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.ArraySet;
import android.util.AttributeSet;
+import android.util.MathUtils;
import android.view.AppTransitionAnimationSpec;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -79,6 +80,7 @@ import com.android.systemui.recents.views.RecentsTransitionHelper.AnimationSpecC
import com.android.systemui.recents.views.RecentsTransitionHelper.AppTransitionAnimationSpecsFuture;
import com.android.systemui.stackdivider.WindowManagerProxy;
import com.android.systemui.statusbar.FlingAnimationUtils;
+import com.android.systemui.statusbar.phone.ScrimController;
import com.google.android.colorextraction.ColorExtractor;
import com.google.android.colorextraction.drawable.GradientDrawable;
@@ -96,11 +98,12 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
private static final String TAG = "RecentsView";
private static final int DEFAULT_UPDATE_SCRIM_DURATION = 200;
- private static final float DEFAULT_SCRIM_ALPHA = 0.8f;
private static final int SHOW_STACK_ACTION_BUTTON_DURATION = 134;
private static final int HIDE_STACK_ACTION_BUTTON_DURATION = 100;
+ private static final int BUSY_RECENTS_TASK_COUNT = 3;
+
private TaskStackView mTaskStackView;
private TextView mStackActionButton;
private TextView mEmptyView;
@@ -112,7 +115,7 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
Rect mSystemInsets = new Rect();
private int mDividerSize;
- private final float mScrimAlpha;
+ private float mBusynessFactor;
private GradientDrawable mBackgroundScrim;
private final SysuiColorExtractor mColorExtractor;
private Animator mBackgroundScrimAnimator;
@@ -143,10 +146,8 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
mDividerSize = ssp.getDockedDividerSize(context);
mTouchHandler = new RecentsViewTouchHandler(this);
mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
- mScrimAlpha = DEFAULT_SCRIM_ALPHA;
mBackgroundScrim = new GradientDrawable(context);
mBackgroundScrim.setCallback(this);
- mBackgroundScrim.setAlpha((int) (mScrimAlpha * 255));
mColorExtractor = Dependency.get(SysuiColorExtractor.class);
LayoutInflater inflater = LayoutInflater.from(context);
@@ -168,9 +169,10 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
/**
* Called from RecentsActivity when it is relaunched.
*/
- public void onReload(boolean isResumingFromVisible, boolean isTaskStackEmpty) {
- RecentsConfiguration config = Recents.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
+ public void onReload(TaskStack stack, boolean isResumingFromVisible) {
+ final RecentsConfiguration config = Recents.getConfiguration();
+ final RecentsActivityLaunchState launchState = config.getLaunchState();
+ final boolean isTaskStackEmpty = stack.getTaskCount() == 0;
if (mTaskStackView == null) {
isResumingFromVisible = false;
@@ -185,17 +187,19 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
// Update the stack
mTaskStackView.onReload(isResumingFromVisible);
+ updateStack(stack, true /* setStackViewTasks */);
+ updateBusyness();
if (isResumingFromVisible) {
// If we are already visible, then restore the background scrim
- animateBackgroundScrim(1f, DEFAULT_UPDATE_SCRIM_DURATION);
+ animateBackgroundScrim(getOpaqueScrimAlpha(), DEFAULT_UPDATE_SCRIM_DURATION);
} else {
// If we are already occluded by the app, then set the final background scrim alpha now.
// Otherwise, defer until the enter animation completes to animate the scrim alpha with
// the tasks for the home animation.
if (launchState.launchedViaDockGesture || launchState.launchedFromApp
|| isTaskStackEmpty) {
- mBackgroundScrim.setAlpha((int) (mScrimAlpha * 255));
+ mBackgroundScrim.setAlpha((int) (getOpaqueScrimAlpha() * 255));
} else {
mBackgroundScrim.setAlpha(0);
}
@@ -219,13 +223,40 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
}
/**
+ * Animates the scrim opacity based on how many tasks are visible.
+ * Called from {@link RecentsActivity} when tasks are dismissed.
+ */
+ public void updateScrimOpacity() {
+ if (updateBusyness()) {
+ animateBackgroundScrim(getOpaqueScrimAlpha(), DEFAULT_UPDATE_SCRIM_DURATION);
+ }
+ }
+
+ /**
+ * Updates the busyness factor.
+ *
+ * @return True if it changed.
+ */
+ private boolean updateBusyness() {
+ final int taskCount = mTaskStackView.getStack().getStackTaskCount();
+ final float busyness = Math.min(taskCount, BUSY_RECENTS_TASK_COUNT)
+ / (float) BUSY_RECENTS_TASK_COUNT;
+ if (mBusynessFactor == busyness) {
+ return false;
+ } else {
+ mBusynessFactor = busyness;
+ return true;
+ }
+ }
+
+ /**
* Returns the current TaskStack.
*/
public TaskStack getStack() {
return mTaskStackView.getStack();
}
- /*
+ /**
* Returns the window background scrim.
*/
public Drawable getBackgroundScrim() {
@@ -619,7 +650,7 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
if (!launchState.launchedViaDockGesture && !launchState.launchedFromApp
&& getStack().getTaskCount() > 0) {
- animateBackgroundScrim(1f,
+ animateBackgroundScrim(getOpaqueScrimAlpha(),
TaskStackAnimationHelper.ENTER_FROM_HOME_TRANSLATION_DURATION);
}
}
@@ -779,13 +810,25 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
}
/**
+ * Scrim alpha based on how busy recents is:
+ * Scrim will be {@link ScrimController#GRADIENT_SCRIM_ALPHA} when the stack is empty,
+ * and {@link ScrimController#GRADIENT_SCRIM_ALPHA_BUSY} when it's full.
+ *
+ * @return Alpha from 0 to 1.
+ */
+ private float getOpaqueScrimAlpha() {
+ return MathUtils.map(0, 1, ScrimController.GRADIENT_SCRIM_ALPHA,
+ ScrimController.GRADIENT_SCRIM_ALPHA_BUSY, mBusynessFactor);
+ }
+
+ /**
* Animates the background scrim to the given {@param alpha}.
*/
private void animateBackgroundScrim(float alpha, int duration) {
Utilities.cancelAnimationWithoutCallbacks(mBackgroundScrimAnimator);
// Calculate the absolute alpha to animate from
- int fromAlpha = mBackgroundScrim.getAlpha();
- int toAlpha = (int) (alpha * mScrimAlpha * 255);
+ final int fromAlpha = mBackgroundScrim.getAlpha();
+ final int toAlpha = (int) (alpha * 255);
mBackgroundScrimAnimator = ObjectAnimator.ofInt(mBackgroundScrim, Utilities.DRAWABLE_ALPHA,
fromAlpha, toAlpha);
mBackgroundScrimAnimator.setDuration(duration);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index bc278e0c3c2d..9275358e78bd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -58,7 +58,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
public static final Interpolator KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED
= new PathInterpolator(0.3f, 0f, 0.8f, 1f);
// Default alpha value for most scrims, if unsure use this constant
- public static final float GRADIENT_SCRIM_ALPHA = 0.60f;
+ public static final float GRADIENT_SCRIM_ALPHA = 0.45f;
// A scrim varies its opacity based on a busyness factor, for example
// how many notifications are currently visible.
public static final float GRADIENT_SCRIM_ALPHA_BUSY = 0.90f;