Improve animation from keyguard shortcut

This CL improves the activity launch animations from keyguard shortcuts
by changing their background to be a rounded rectangle instead of an
oval, so that it can be properly animated during the launch, and by
adding support for StateListDrawable in
GhostedViewLaunchAnimatorController.

See b/265280100#comment6 for a video.

Bug: 265280100
Test: Launch an activity from a keyguard shortcut
Change-Id: Id22045a64a062ebea5be5adebda667f4616f0597
This commit is contained in:
Jordan Demeulenaere
2023-01-17 11:02:23 +01:00
parent 9758d71bd9
commit e1e5f29d68
4 changed files with 20 additions and 16 deletions

View File

@@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.InsetDrawable
import android.graphics.drawable.LayerDrawable
import android.graphics.drawable.StateListDrawable
import android.util.Log
import android.view.GhostView
import android.view.View
@@ -341,6 +342,10 @@ open class GhostedViewLaunchAnimatorController @JvmOverloads constructor(
}
}
if (drawable is StateListDrawable) {
return findGradientDrawable(drawable.current)
}
return null
}
}

View File

@@ -27,22 +27,26 @@
android:top="3dp"
android:right="3dp"
android:bottom="3dp">
<shape android:shape="oval">
<!-- We make the shapes a rounded rectangle instead of an oval so that it can animate -->
<!-- properly into an app/dialog. -->
<shape android:shape="rectangle">
<solid android:color="?androidprv:attr/colorSurface"/>
<size
android:width="@dimen/keyguard_affordance_width"
android:height="@dimen/keyguard_affordance_height"/>
android:width="@dimen/keyguard_affordance_fixed_width"
android:height="@dimen/keyguard_affordance_fixed_height"/>
<corners android:radius="@dimen/keyguard_affordance_fixed_radius"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<shape android:shape="rectangle">
<stroke
android:color="@color/control_primary_text"
android:width="2dp"/>
<size
android:width="@dimen/keyguard_affordance_width"
android:height="@dimen/keyguard_affordance_height"/>
android:width="@dimen/keyguard_affordance_fixed_width"
android:height="@dimen/keyguard_affordance_fixed_height"/>
<corners android:radius="@dimen/keyguard_affordance_fixed_radius"/>
</shape>
</item>
</layer-list>
@@ -55,11 +59,12 @@
android:top="3dp"
android:right="3dp"
android:bottom="3dp">
<shape android:shape="oval">
<shape android:shape="rectangle">
<solid android:color="?androidprv:attr/colorSurface"/>
<size
android:width="@dimen/keyguard_affordance_width"
android:height="@dimen/keyguard_affordance_height"/>
android:width="@dimen/keyguard_affordance_fixed_width"
android:height="@dimen/keyguard_affordance_fixed_height"/>
<corners android:radius="@dimen/keyguard_affordance_fixed_radius"/>
</shape>
</item>
</layer-list>

View File

@@ -30,10 +30,6 @@
<!-- Margin on the left side of the carrier text on Keyguard -->
<dimen name="keyguard_carrier_text_margin">24dp</dimen>
<!-- The width/height of the phone/camera/unlock icon on keyguard. -->
<dimen name="keyguard_affordance_height">80dp</dimen>
<dimen name="keyguard_affordance_width">120dp</dimen>
<!-- Screen pinning request width -->
<dimen name="screen_pinning_request_width">400dp</dimen>
<!-- Screen pinning request bottom button circle widths -->

View File

@@ -762,12 +762,10 @@
<dimen name="go_to_full_shade_appearing_translation">200dp</dimen>
<!-- The width/height of the keyguard bottom area icon view on keyguard. -->
<dimen name="keyguard_affordance_height">48dp</dimen>
<dimen name="keyguard_affordance_width">48dp</dimen>
<dimen name="keyguard_affordance_fixed_height">48dp</dimen>
<dimen name="keyguard_affordance_fixed_width">48dp</dimen>
<dimen name="keyguard_affordance_fixed_radius">24dp</dimen>
<!-- Amount the button should shake when it's not long-pressed for long enough. -->
<dimen name="keyguard_affordance_shake_amplitude">8dp</dimen>