Merge "Scrolling on the most recent task upon Overview start" into ub-launcher3-edmonton
diff --git a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
index 29399142..e346310 100644
--- a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
+++ b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
@@ -118,6 +118,7 @@
finish();
} else if (mFinished) {
// Animation callback was already finished, skip the animation.
+ mAnimator.start();
mAnimator.end();
} else {
// Start the animation
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 20ecde9..b472d61 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -59,6 +59,9 @@
import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
/**
* A simple activity to show the recently launched tasks
*/
@@ -271,4 +274,11 @@
.addCategory(Intent.CATEGORY_HOME)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
+
+ @Override
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ super.dump(prefix, fd, writer, args);
+ writer.println(prefix + "Misc:");
+ dumpMisc(writer);
+ }
}
diff --git a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java
index b47af2d..69b77b4 100644
--- a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java
+++ b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java
@@ -47,6 +47,7 @@
private static final int THRESHOLD_ALPHA_DARK = 102;
private static final int THRESHOLD_ALPHA_LIGHT = 46;
+ private static final int THRESHOLD_ALPHA_SUPER_LIGHT = 128;
// In transposed layout, we simply draw a flat color.
private boolean mDrawingFlatColor;
@@ -76,8 +77,13 @@
mMaxScrimAlpha = OVERVIEW.getWorkspaceScrimAlpha(mLauncher);
mEndAlpha = Color.alpha(mEndScrim);
- mThresholdAlpha = Themes.getAttrBoolean(mLauncher, R.attr.isMainColorDark)
- ? THRESHOLD_ALPHA_DARK : THRESHOLD_ALPHA_LIGHT;
+ if (Themes.getAttrBoolean(mLauncher, R.attr.isMainColorDark)) {
+ mThresholdAlpha = THRESHOLD_ALPHA_DARK;
+ } else if (Themes.getAttrBoolean(mLauncher, R.attr.isWorkspaceDarkText)) {
+ mThresholdAlpha = THRESHOLD_ALPHA_SUPER_LIGHT;
+ } else {
+ mThresholdAlpha = THRESHOLD_ALPHA_LIGHT;
+ }
mRadius = mLauncher.getResources().getDimension(R.dimen.shelf_surface_radius);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8526d7c..631626f 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -60,7 +60,7 @@
<item name="android:textColorTertiary">#CCFFFFFF</item>
<item name="android:textColorHint">#A0FFFFFF</item>
<item name="android:colorControlHighlight">#A0FFFFFF</item>
- <item name="android:colorPrimary">#FF333333</item>
+ <item name="android:colorPrimary">#FF212121</item>
<item name="allAppsScrimColor">#EA212121</item>
<item name="allAppsNavBarScrimColor">#80000000</item>
<item name="popupColorPrimary">?android:attr/colorPrimary</item>
diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java
index 1f70cfa..3e4589d 100644
--- a/src/com/android/launcher3/BaseActivity.java
+++ b/src/com/android/launcher3/BaseActivity.java
@@ -17,6 +17,7 @@
package com.android.launcher3;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
+
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.app.Activity;
@@ -24,15 +25,14 @@
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.res.Configuration;
-import android.graphics.Point;
import android.support.annotation.IntDef;
-import android.view.Display;
import android.view.View.AccessibilityDelegate;
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.util.SystemUiController;
+import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.util.ArrayList;
@@ -223,4 +223,12 @@
public interface MultiWindowModeChangedListener {
void onMultiWindowModeChanged(boolean isInMultiWindowMode);
}
+
+ protected void dumpMisc(PrintWriter writer) {
+ writer.println(" deviceProfile isTransposed=" + getDeviceProfile().isVerticalBarLayout());
+ writer.println(" orientation=" + getResources().getConfiguration().orientation);
+ writer.println(" mSystemUiController: " + mSystemUiController);
+ writer.println(" mActivityFlags: " + mActivityFlags);
+ writer.println(" mForceInvisible: " + mForceInvisible);
+ }
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 12d29a8..bf73149 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2279,8 +2279,8 @@
writer.print(prefix + "\tmWorkspaceLoading=" + mWorkspaceLoading);
writer.print(" mPendingRequestArgs=" + mPendingRequestArgs);
writer.println(" mPendingActivityResult=" + mPendingActivityResult);
- writer.println(" deviceProfile isTransposed=" + getDeviceProfile().isVerticalBarLayout());
- writer.println(" orientation=" + getResources().getConfiguration().orientation);
+ writer.println(" mRotationHelper: " + mRotationHelper);
+ dumpMisc(writer);
try {
FileLog.flushAll(writer);
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index 3a1837d..7fef904 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -1,3 +1,4 @@
+
/*
* Copyright (C) 2008 The Android Open Source Project
*
@@ -479,6 +480,7 @@
case ANIMATION_END_REMAIN_VISIBLE:
break;
}
+ mDropAnim = null;
}
});
mDropAnim.start();
@@ -488,6 +490,7 @@
if (mDropAnim != null) {
mDropAnim.cancel();
}
+ mDropAnim = null;
if (mDropView != null) {
mDragController.onDeferredEndDrag(mDropView);
}
diff --git a/src/com/android/launcher3/qsb/QsbWidgetHostView.java b/src/com/android/launcher3/qsb/QsbWidgetHostView.java
index a8a41f6..7d8a4db 100644
--- a/src/com/android/launcher3/qsb/QsbWidgetHostView.java
+++ b/src/com/android/launcher3/qsb/QsbWidgetHostView.java
@@ -73,6 +73,18 @@
return getDefaultView(this);
}
+ @Override
+ protected View getDefaultView() {
+ View v = super.getDefaultView();
+ v.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Launcher.getLauncher(getContext()).startSearch("", false, null, true);
+ }
+ });
+ return v;
+ }
+
public static View getDefaultView(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.qsb_default_view, parent, false);
diff --git a/src/com/android/launcher3/states/RotationHelper.java b/src/com/android/launcher3/states/RotationHelper.java
index 0036bb9..e866445 100644
--- a/src/com/android/launcher3/states/RotationHelper.java
+++ b/src/com/android/launcher3/states/RotationHelper.java
@@ -150,4 +150,12 @@
mActivity.setRequestedOrientation(activityFlags);
}
}
+
+ @Override
+ public String toString() {
+ return String.format("[mStateHandlerRequest=%d, mCurrentStateRequest=%d,"
+ + " mLastActivityFlags=%d, mIgnoreAutoRotateSettings=%b, mAutoRotateEnabled=%b]",
+ mStateHandlerRequest, mCurrentStateRequest, mLastActivityFlags,
+ mIgnoreAutoRotateSettings, mAutoRotateEnabled);
+ }
}
diff --git a/src/com/android/launcher3/util/SystemUiController.java b/src/com/android/launcher3/util/SystemUiController.java
index 7ef53a9..86995b7 100644
--- a/src/com/android/launcher3/util/SystemUiController.java
+++ b/src/com/android/launcher3/util/SystemUiController.java
@@ -16,11 +16,14 @@
package com.android.launcher3.util;
+import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import com.android.launcher3.Utilities;
+import java.util.Arrays;
+
/**
* Utility class to manage various window flags to control system UI.
*/
@@ -78,4 +81,9 @@
mWindow.getDecorView().setSystemUiVisibility(newFlags);
}
}
+
+ @Override
+ public String toString() {
+ return "mStates=" + Arrays.toString(mStates);
+ }
}
diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java
index 28602f5..5dcfe4a 100644
--- a/src/com/android/launcher3/views/ScrimView.java
+++ b/src/com/android/launcher3/views/ScrimView.java
@@ -18,14 +18,24 @@
import static android.content.Context.ACCESSIBILITY_SERVICE;
import static android.support.v4.graphics.ColorUtils.compositeColors;
import static android.support.v4.graphics.ColorUtils.setAlphaComponent;
+import static android.view.MotionEvent.ACTION_DOWN;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
+import static com.android.launcher3.anim.Interpolators.ACCEL;
+import static com.android.launcher3.anim.Interpolators.DEACCEL;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.Keyframe;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.animation.RectEvaluator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
@@ -85,6 +95,8 @@
protected final int mDragHandleSize;
private final Rect mDragHandleBounds;
+ private final RectF mHitRect = new RectF();
+
private final AccessibilityHelper mAccessibilityHelper;
@Nullable
protected Drawable mDragHandle;
@@ -110,6 +122,7 @@
@Override
public void setInsets(Rect insets) {
updateDragHandleBounds();
+ updateDragHandleVisibility(null);
}
@Override
@@ -179,6 +192,46 @@
}
}
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ boolean value = super.onTouchEvent(event);
+ if (!value && mDragHandle != null && event.getAction() == ACTION_DOWN
+ && mDragHandle.getAlpha() == 255
+ && mHitRect.contains(event.getX(), event.getY())) {
+
+ final Drawable drawable = mDragHandle;
+ mDragHandle = null;
+ drawable.setBounds(mDragHandleBounds);
+
+ Rect topBounds = new Rect(mDragHandleBounds);
+ topBounds.offset(0, -mDragHandleBounds.height() / 2);
+
+ Rect invalidateRegion = new Rect(mDragHandleBounds);
+ invalidateRegion.top = topBounds.top;
+
+ Keyframe frameTop = Keyframe.ofObject(0.6f, topBounds);
+ frameTop.setInterpolator(DEACCEL);
+ Keyframe frameBot = Keyframe.ofObject(1, mDragHandleBounds);
+ frameBot.setInterpolator(ACCEL);
+ PropertyValuesHolder holder = PropertyValuesHolder .ofKeyframe("bounds",
+ Keyframe.ofObject(0, mDragHandleBounds), frameTop, frameBot);
+ holder.setEvaluator(new RectEvaluator());
+
+ ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(drawable, holder);
+ anim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ getOverlay().remove(drawable);
+ updateDragHandleVisibility(drawable);
+ }
+ });
+ anim.addUpdateListener((v) -> invalidate(invalidateRegion));
+ getOverlay().add(drawable);
+ anim.start();
+ }
+ return value;
+ }
+
protected void updateDragHandleBounds() {
DeviceProfile grid = mLauncher.getDeviceProfile();
final int left;
@@ -198,6 +251,9 @@
topMargin = grid.hotseatBarSizePx;
}
mDragHandleBounds.offsetTo(left, top - topMargin);
+ mHitRect.set(mDragHandleBounds);
+ float inset = -mDragHandleSize / 2;
+ mHitRect.inset(inset, inset);
if (mDragHandle != null) {
mDragHandle.setBounds(mDragHandleBounds);
@@ -210,17 +266,29 @@
stateManager.removeStateListener(this);
if (enabled) {
- mDragHandle = mLauncher.getDrawable(R.drawable.drag_handle_indicator);
- mDragHandle.setBounds(mDragHandleBounds);
-
stateManager.addStateListener(this);
onStateSetImmediately(mLauncher.getStateManager().getState());
-
- updateDragHandleAlpha();
} else {
- mDragHandle = null;
+ setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
}
- invalidate();
+ updateDragHandleVisibility(null);
+ }
+
+ private void updateDragHandleVisibility(Drawable recycle) {
+ boolean visible = mLauncher.getDeviceProfile().isVerticalBarLayout() || mAM.isEnabled();
+ boolean wasVisible = mDragHandle != null;
+ if (visible != wasVisible) {
+ if (visible) {
+ mDragHandle = recycle != null ? recycle :
+ mLauncher.getDrawable(R.drawable.drag_handle_indicator);
+ mDragHandle.setBounds(mDragHandleBounds);
+
+ updateDragHandleAlpha();
+ } else {
+ mDragHandle = null;
+ }
+ invalidate();
+ }
}
@Override