Add dialog launch animations
Adds animations to launch/dismiss UserDialog as well as animation for Settings. Missing animations of subdialogs (guest user and add user). Test: manual Test: 185360864 Bug: 185360864 Change-Id: Ifaca0ca28895960fced4bfa29160ce98bfd93552
This commit is contained in:
@@ -16,74 +16,78 @@
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:sysui="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="24dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:background="@drawable/qs_dialog_bg"
|
||||
>
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_height="wrap_content">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:textAlignment="center"
|
||||
android:text="@string/qs_user_switch_dialog_title"
|
||||
android:textAppearance="@style/TextAppearance.QSDialog.Title"
|
||||
android:layout_marginBottom="32dp"
|
||||
sysui:layout_constraintTop_toTopOf="parent"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
sysui:layout_constraintBottom_toTopOf="@id/grid"
|
||||
android:padding="24dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
>
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:textAlignment="center"
|
||||
android:text="@string/qs_user_switch_dialog_title"
|
||||
android:textAppearance="@style/TextAppearance.QSDialog.Title"
|
||||
android:layout_marginBottom="32dp"
|
||||
sysui:layout_constraintTop_toTopOf="parent"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
sysui:layout_constraintBottom_toTopOf="@id/grid"
|
||||
/>
|
||||
|
||||
<com.android.systemui.qs.PseudoGridView
|
||||
android:id="@+id/grid"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="28dp"
|
||||
sysui:verticalSpacing="4dp"
|
||||
sysui:horizontalSpacing="4dp"
|
||||
sysui:fixedChildWidth="80dp"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/title"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
sysui:layout_constraintBottom_toTopOf="@id/barrier"
|
||||
/>
|
||||
|
||||
<com.android.systemui.qs.PseudoGridView
|
||||
android:id="@+id/grid"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="28dp"
|
||||
sysui:verticalSpacing="4dp"
|
||||
sysui:horizontalSpacing="4dp"
|
||||
sysui:fixedChildWidth="80dp"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/title"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
sysui:layout_constraintBottom_toTopOf="@id/barrier"
|
||||
/>
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/barrier"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
sysui:barrierDirection="top"
|
||||
sysui:constraint_referenced_ids="settings,done"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/barrier"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
sysui:barrierDirection="top"
|
||||
sysui:constraint_referenced_ids="settings,done"
|
||||
/>
|
||||
<Button
|
||||
android:id="@+id/settings"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/quick_settings_more_user_settings"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/barrier"
|
||||
sysui:layout_constraintBottom_toBottomOf="parent"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toStartOf="@id/done"
|
||||
sysui:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||
style="@style/Widget.QSDialog.Button.BorderButton"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/settings"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/quick_settings_more_user_settings"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/barrier"
|
||||
sysui:layout_constraintBottom_toBottomOf="parent"
|
||||
sysui:layout_constraintStart_toStartOf="parent"
|
||||
sysui:layout_constraintEnd_toStartOf="@id/done"
|
||||
sysui:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||
style="@style/Widget.QSDialog.Button.BorderButton"
|
||||
/>
|
||||
<Button
|
||||
android:id="@+id/done"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/quick_settings_done"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/barrier"
|
||||
sysui:layout_constraintBottom_toBottomOf="parent"
|
||||
sysui:layout_constraintStart_toEndOf="@id/settings"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
style="@style/Widget.QSDialog.Button"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/done"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/quick_settings_done"
|
||||
sysui:layout_constraintTop_toBottomOf="@id/barrier"
|
||||
sysui:layout_constraintBottom_toBottomOf="parent"
|
||||
sysui:layout_constraintStart_toEndOf="@id/settings"
|
||||
sysui:layout_constraintEnd_toEndOf="parent"
|
||||
style="@style/Widget.QSDialog.Button"
|
||||
/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</FrameLayout>
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog" />
|
||||
<style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog">
|
||||
<item name="android:buttonCornerRadius">28dp</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Dialog.Alert" />
|
||||
|
||||
|
||||
@@ -417,7 +417,9 @@
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog" />
|
||||
<style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
|
||||
<item name="android:buttonCornerRadius">28dp</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
|
||||
|
||||
@@ -929,26 +931,14 @@
|
||||
<item name="actionDividerHeight">32dp</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.Dialog.QSDialog">
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
|
||||
<item name="android:dialogCornerRadius">28dp</item>
|
||||
<item name="android:buttonCornerRadius">28dp</item>
|
||||
<item name="android:colorBackground">@color/prv_color_surface</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.QSDialog.Title" parent="Theme.SystemUI.Dialog.QSDialog">
|
||||
<style name="TextAppearance.QSDialog.Title" parent="Theme.SystemUI.Dialog">
|
||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
||||
<item name="android:textSize">24sp</item>
|
||||
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||
<item name="android:lineHeight">32sp</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.QSDialog.Button" parent = "Theme.SystemUI.Dialog.QSDialog">
|
||||
<style name="Widget.QSDialog.Button" parent = "Theme.SystemUI.Dialog">
|
||||
<item name="android:background">@drawable/qs_dialog_btn_filled</item>
|
||||
<item name="android:textColor">@color/prv_text_color_on_accent</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.android.systemui.R
|
||||
*/
|
||||
class UserDialog(
|
||||
context: Context
|
||||
) : SystemUIDialog(context, R.style.Theme_SystemUI_Dialog_QSDialog) {
|
||||
) : SystemUIDialog(context) {
|
||||
|
||||
// create() is no-op after creation
|
||||
private lateinit var _doneButton: View
|
||||
@@ -72,7 +72,7 @@ class UserDialog(
|
||||
attributes.fitInsetsTypes = attributes.fitInsetsTypes or WindowInsets.Type.statusBars()
|
||||
attributes.receiveInsetsIgnoringZOrder = true
|
||||
setLayout(
|
||||
context.resources.getDimensionPixelSize(R.dimen.qs_panel_width),
|
||||
context.resources.getDimensionPixelSize(R.dimen.notification_panel_width),
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
setGravity(Gravity.CENTER)
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.content.Intent
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.FalsingManager
|
||||
@@ -36,6 +37,7 @@ class UserSwitchDialogController @VisibleForTesting constructor(
|
||||
private val userDetailViewAdapterProvider: Provider<UserDetailView.Adapter>,
|
||||
private val activityStarter: ActivityStarter,
|
||||
private val falsingManager: FalsingManager,
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val dialogFactory: (Context) -> UserDialog
|
||||
) {
|
||||
|
||||
@@ -43,11 +45,13 @@ class UserSwitchDialogController @VisibleForTesting constructor(
|
||||
constructor(
|
||||
userDetailViewAdapterProvider: Provider<UserDetailView.Adapter>,
|
||||
activityStarter: ActivityStarter,
|
||||
falsingManager: FalsingManager
|
||||
falsingManager: FalsingManager,
|
||||
dialogLaunchAnimator: DialogLaunchAnimator
|
||||
) : this(
|
||||
userDetailViewAdapterProvider,
|
||||
activityStarter,
|
||||
falsingManager,
|
||||
dialogLaunchAnimator,
|
||||
{ UserDialog(it) }
|
||||
)
|
||||
|
||||
@@ -69,7 +73,11 @@ class UserSwitchDialogController @VisibleForTesting constructor(
|
||||
|
||||
settingsButton.setOnClickListener {
|
||||
if (!falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||
activityStarter.postStartActivityDismissingKeyguard(USER_SETTINGS_INTENT, 0)
|
||||
dialogLaunchAnimator.disableAllCurrentDialogsExitAnimations()
|
||||
activityStarter.postStartActivityDismissingKeyguard(
|
||||
USER_SETTINGS_INTENT,
|
||||
0
|
||||
)
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
@@ -81,7 +89,7 @@ class UserSwitchDialogController @VisibleForTesting constructor(
|
||||
}
|
||||
adapter.linkToViewGroup(grid)
|
||||
|
||||
show()
|
||||
dialogLaunchAnimator.showFromView(this, view)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import android.testing.AndroidTestingRunner
|
||||
import android.view.View
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.FalsingManager
|
||||
import com.android.systemui.qs.PseudoGridView
|
||||
@@ -68,6 +69,8 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
|
||||
private lateinit var launchView: View
|
||||
@Mock
|
||||
private lateinit var gridView: PseudoGridView
|
||||
@Mock
|
||||
private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
|
||||
@Captor
|
||||
private lateinit var clickCaptor: ArgumentCaptor<View.OnClickListener>
|
||||
|
||||
@@ -87,6 +90,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
|
||||
{ userDetailViewAdapter },
|
||||
activityStarter,
|
||||
falsingManager,
|
||||
dialogLaunchAnimator,
|
||||
{ dialog }
|
||||
)
|
||||
}
|
||||
@@ -94,7 +98,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun showDialog_callsDialogShow() {
|
||||
controller.showDialog(launchView)
|
||||
verify(dialog).show()
|
||||
verify(dialogLaunchAnimator).showFromView(dialog, launchView)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user