summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/layout/global_screenshot.xml1
-rw-r--r--packages/SystemUI/res/layout/global_screenshot_action_chip.xml17
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java28
3 files changed, 33 insertions, 13 deletions
diff --git a/packages/SystemUI/res/layout/global_screenshot.xml b/packages/SystemUI/res/layout/global_screenshot.xml
index db109fe8a541..94a6bc566e73 100644
--- a/packages/SystemUI/res/layout/global_screenshot.xml
+++ b/packages/SystemUI/res/layout/global_screenshot.xml
@@ -38,6 +38,7 @@
android:elevation="1dp"
android:fillViewport="true"
android:layout_marginHorizontal="@dimen/screenshot_action_container_margin_horizontal"
+ android:layout_marginBottom="@dimen/screenshot_action_container_offset_y"
android:gravity="center"
android:paddingLeft="@dimen/screenshot_action_container_padding_left"
android:paddingRight="@dimen/screenshot_action_container_padding_right"
diff --git a/packages/SystemUI/res/layout/global_screenshot_action_chip.xml b/packages/SystemUI/res/layout/global_screenshot_action_chip.xml
index 6b94befad0f8..bd91ddb5f406 100644
--- a/packages/SystemUI/res/layout/global_screenshot_action_chip.xml
+++ b/packages/SystemUI/res/layout/global_screenshot_action_chip.xml
@@ -16,14 +16,15 @@
-->
<com.android.systemui.screenshot.ScreenshotActionChip
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/global_screenshot_action_chip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/screenshot_action_chip_margin_right"
- android:layout_gravity="center"
- android:paddingVertical="@dimen/screenshot_action_chip_padding_vertical"
- android:background="@drawable/action_chip_background"
- android:gravity="center">
+ android:id="@+id/global_screenshot_action_chip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/screenshot_action_chip_margin_right"
+ android:layout_gravity="center"
+ android:paddingVertical="@dimen/screenshot_action_chip_padding_vertical"
+ android:background="@drawable/action_chip_background"
+ android:alpha="0"
+ android:gravity="center">
<ImageView
android:id="@+id/screenshot_action_chip_icon"
android:layout_width="@dimen/screenshot_action_chip_icon_size"
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 70454d4d63df..8a02652acaf9 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -83,6 +83,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.statusbar.phone.StatusBar;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
@@ -163,6 +164,9 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
private static final long SCREENSHOT_TO_CORNER_X_DURATION_MS = 234;
private static final long SCREENSHOT_TO_CORNER_Y_DURATION_MS = 500;
private static final long SCREENSHOT_TO_CORNER_SCALE_DURATION_MS = 234;
+ private static final long SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS = 400;
+ private static final long SCREENSHOT_ACTIONS_ALPHA_DURATION_MS = 100;
+ private static final float SCREENSHOT_ACTIONS_START_SCALE_X = .7f;
private static final float ROUNDED_CORNER_RADIUS = .05f;
private static final long SCREENSHOT_CORNER_TIMEOUT_MILLIS = 6000;
private static final int MESSAGE_CORNER_TIMEOUT = 2;
@@ -262,6 +266,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
mScreenshotSelectorView.setFocusableInTouchMode(true);
mScreenshotView.setPivotX(0);
mScreenshotView.setPivotY(0);
+ mActionsContainer.setPivotX(0);
// Setup the window that we are going to use
mWindowLayoutParams = new WindowManager.LayoutParams(
@@ -651,6 +656,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
} catch (RemoteException e) {
}
+ ArrayList<ScreenshotActionChip> chips = new ArrayList<>();
+
for (Notification.Action smartAction : imageData.smartActions) {
ScreenshotActionChip actionChip = (ScreenshotActionChip) inflater.inflate(
R.layout.global_screenshot_action_chip, mActionsView, false);
@@ -662,6 +669,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
clearScreenshot("chip tapped");
});
mActionsView.addView(actionChip);
+ chips.add(actionChip);
}
ScreenshotActionChip shareChip = (ScreenshotActionChip) inflater.inflate(
@@ -673,6 +681,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
clearScreenshot("chip tapped");
});
mActionsView.addView(shareChip);
+ chips.add(shareChip);
ScreenshotActionChip editChip = (ScreenshotActionChip) inflater.inflate(
R.layout.global_screenshot_action_chip, mActionsView, false);
@@ -683,6 +692,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
clearScreenshot("chip tapped");
});
mActionsView.addView(editChip);
+ chips.add(editChip);
mScreenshotView.setOnClickListener(v -> {
try {
@@ -695,7 +705,6 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
});
mScreenshotView.setContentDescription(imageData.editAction.title);
-
if (DeviceConfig.getBoolean(NAMESPACE_SYSTEMUI, SCREENSHOT_SCROLLING_ENABLED, false)) {
ScreenshotActionChip scrollChip = (ScreenshotActionChip) inflater.inflate(
R.layout.global_screenshot_action_chip, mActionsView, false);
@@ -709,18 +718,27 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
scrollNotImplemented.show();
});
mActionsView.addView(scrollChip);
+ chips.add(scrollChip);
}
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
- mActionsContainer.setY(mDisplayMetrics.heightPixels);
+ animator.setDuration(SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS);
+ float alphaFraction = (float) SCREENSHOT_ACTIONS_ALPHA_DURATION_MS
+ / SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS;
mActionsContainer.setVisibility(VISIBLE);
- mActionsContainer.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
- float actionsViewHeight = mActionsContainer.getMeasuredHeight() + mScreenshotHeightPx;
+ mActionsContainer.setAlpha(0);
animator.addUpdateListener(animation -> {
float t = animation.getAnimatedFraction();
mBackgroundProtection.setAlpha(t);
- mActionsContainer.setY(mDisplayMetrics.heightPixels - actionsViewHeight * t);
+ mActionsContainer.setAlpha(t < alphaFraction ? t / alphaFraction : 1);
+ float containerScale = SCREENSHOT_ACTIONS_START_SCALE_X
+ + (t * (1 - SCREENSHOT_ACTIONS_START_SCALE_X));
+ mActionsContainer.setScaleX(containerScale);
+ for (ScreenshotActionChip chip : chips) {
+ chip.setAlpha(t);
+ chip.setScaleX(1 / containerScale); // invert to keep size of children constant
+ }
});
return animator;
}