summaryrefslogtreecommitdiffstats
path: root/go
diff options
context:
space:
mode:
authorKevin <kevhan@google.com>2019-05-10 15:57:10 -0700
committerKevin <kevhan@google.com>2019-05-10 16:09:04 -0700
commitfd968a79a89e1762f048cf1f6855be6351c3c559 (patch)
tree6dc59c1920ef96b7c13cb97dc09f1d62be9f1716 /go
parent763a7bffa32ac95bc1f82bf6bd591627c3c73f53 (diff)
downloadandroid_packages_apps_Trebuchet-fd968a79a89e1762f048cf1f6855be6351c3c559.tar.gz
android_packages_apps_Trebuchet-fd968a79a89e1762f048cf1f6855be6351c3c559.tar.bz2
android_packages_apps_Trebuchet-fd968a79a89e1762f048cf1f6855be6351c3c559.zip
Scale down thumbnail with app surface
The recents Go app to overview transition has app scale down to a thumbnail but normally covers the thumbnail. However, apps with transparency will be semi-visible and will allow the user to see the thumbnail in the back at its final size. Instead, we should fit the thumbnail to the surface so that they both scale down at the same time. Bug: 132458092 Test: Go to app with transparency, scale down Change-Id: Iaebeaaf2ddcfc86fd4f55ef9d8c3f19583947c48
Diffstat (limited to 'go')
-rw-r--r--go/quickstep/res/layout/task_item_view.xml3
-rw-r--r--go/quickstep/src/com/android/quickstep/views/IconRecentsView.java42
2 files changed, 41 insertions, 4 deletions
diff --git a/go/quickstep/res/layout/task_item_view.xml b/go/quickstep/res/layout/task_item_view.xml
index 699178d57..ab2cf2804 100644
--- a/go/quickstep/res/layout/task_item_view.xml
+++ b/go/quickstep/res/layout/task_item_view.xml
@@ -18,7 +18,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/task_item_height"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:clipChildren="false">
<com.android.quickstep.views.TaskThumbnailIconView
android:id="@+id/task_icon_and_thumbnail"
android:layout_width="match_parent"
diff --git a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
index 771c7d7fa..c40d001aa 100644
--- a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
+++ b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
@@ -38,6 +38,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Matrix;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.ArraySet;
import android.util.AttributeSet;
@@ -723,6 +724,7 @@ public final class IconRecentsView extends FrameLayout implements Insettable {
Rect endRect = new Rect();
thumbnailView.getGlobalVisibleRect(endRect);
Rect appBounds = appTarget.sourceContainerBounds;
+ RectF currentAppRect = new RectF();
SyncRtSurfaceTransactionApplierCompat surfaceApplier =
new SyncRtSurfaceTransactionApplierCompat(this);
@@ -765,17 +767,30 @@ public final class IconRecentsView extends FrameLayout implements Insettable {
@Override
public void onUpdate(float percent) {
- appMatrix.preScale(mScaleX.value, mScaleY.value,
+ Matrix m = new Matrix();
+ m.preScale(mScaleX.value, mScaleY.value,
appBounds.width() / 2.0f, appBounds.height() / 2.0f);
- appMatrix.postTranslate(mTranslationX.value, mTranslationY.value);
-
+ m.postTranslate(mTranslationX.value, mTranslationY.value);
+ appMatrix.preConcat(m);
params[1] = new SurfaceParams(appTarget.leash, mAlpha.value, appMatrix,
null /* windowCrop */, getLayer(appTarget, boostedMode),
0 /* cornerRadius */);
surfaceApplier.scheduleApply(params);
+
+ m.mapRect(currentAppRect, new RectF(appBounds));
+ setViewToRect(thumbnailView, new RectF(endRect), currentAppRect);
appMatrix.reset();
}
});
+ remoteAppAnim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ thumbnailView.setTranslationY(0);
+ thumbnailView.setTranslationX(0);
+ thumbnailView.setScaleX(1);
+ thumbnailView.setScaleY(1);
+ }
+ });
anim.play(remoteAppAnim);
}
@@ -841,6 +856,27 @@ public final class IconRecentsView extends FrameLayout implements Insettable {
}
}
+ /**
+ * Set view properties so that the view fits to the target rect.
+ *
+ * @param view view to set
+ * @param origRect original rect that view was located
+ * @param targetRect rect to set to
+ */
+ private void setViewToRect(View view, RectF origRect, RectF targetRect) {
+ float dX = targetRect.left - origRect.left;
+ float dY = targetRect.top - origRect.top;
+ view.setTranslationX(dX);
+ view.setTranslationY(dY);
+
+ float scaleX = targetRect.width() / origRect.width();
+ float scaleY = targetRect.height() / origRect.height();
+ view.setPivotX(0);
+ view.setPivotY(0);
+ view.setScaleX(scaleX);
+ view.setScaleY(scaleY);
+ }
+
@Override
public void setInsets(Rect insets) {
mInsets = insets;