Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 542b77b9 authored by George Lin's avatar George Lin
Browse files

[TP] Clock carousel on preview section

Overlay clock carousel on the lock screen preview
The feature is gated by isUseRevampedUiEnabled

Test: Manually test the clock carousel overlaying preview
Bug: 262924178

Change-Id: Iaeec32aae419a5764dca6c98274e69cfcc34b0f7
parent 7d68d039
Loading
Loading
Loading
Loading
+102 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2023 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<androidx.constraintlayout.motion.widget.MotionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motion_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layoutDescription="@xml/carousel_scene">

    <FrameLayout
        android:id="@+id/item_view_0"
        android:layout_width="@dimen/clock_carousel_item_small_size"
        android:layout_height="@dimen/clock_carousel_item_small_size"
        android:layout_marginEnd="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/item_view_1"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_1"
        android:layout_width="@dimen/clock_carousel_item_small_size"
        android:layout_height="@dimen/clock_carousel_item_small_size"
        android:layout_marginEnd="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/item_view_2"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_2"
        android:layout_width="@dimen/clock_carousel_item_large_size"
        android:layout_height="@dimen/clock_carousel_item_large_size"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_3"
        android:layout_width="@dimen/clock_carousel_item_small_size"
        android:layout_height="@dimen/clock_carousel_item_small_size"
        android:layout_marginStart="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/item_view_2"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_4"
        android:layout_width="@dimen/clock_carousel_item_small_size"
        android:layout_height="@dimen/clock_carousel_item_small_size"
        android:layout_marginStart="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/item_view_3"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.helper.widget.Carousel
        android:id="@+id/carousel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:carousel_backwardTransition="@+id/backward"
        app:carousel_firstView="@+id/item_view_2"
        app:carousel_forwardTransition="@+id/forward"
        app:carousel_infinite="true"
        app:carousel_nextState="@+id/next"
        app:carousel_previousState="@+id/previous"
        app:constraint_referenced_ids="item_view_0,item_view_1,item_view_2,item_view_3,item_view_4" />

    <!-- The guidelines make sure that only the view in the middle show between the lines  -->
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="100dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_end"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="100dp" />
</androidx.constraintlayout.motion.widget.MotionLayout>
 No newline at end of file
+2 −84
Original line number Original line Diff line number Diff line
@@ -14,89 +14,7 @@
     See the License for the specific language governing permissions and
     See the License for the specific language governing permissions and
     limitations under the License.
     limitations under the License.
-->
-->
<androidx.constraintlayout.motion.widget.MotionLayout
<com.android.customization.picker.clock.ui.view.ClockCarouselView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motion_container"
    android:layout_width="match_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_height="wrap_content"/>
    app:layoutDescription="@xml/carousel_scene">
 No newline at end of file

    <FrameLayout
        android:id="@+id/item_view_0"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginEnd="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/item_view_1"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginEnd="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/item_view_2"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_2"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginStart="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/item_view_2"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/item_view_4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginStart="16dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/item_view_3"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.helper.widget.Carousel
        android:id="@+id/carousel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:carousel_backwardTransition="@+id/backward"
        app:carousel_firstView="@+id/item_view_2"
        app:carousel_forwardTransition="@+id/forward"
        app:carousel_infinite="true"
        app:carousel_nextState="@+id/next"
        app:carousel_previousState="@+id/previous"
        app:constraint_referenced_ids="item_view_0,item_view_1,item_view_2,item_view_3,item_view_4" />

    <!-- The guidelines make sure that only the view in the middle show between the lines  -->
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="100dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_end"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="100dp" />
</androidx.constraintlayout.motion.widget.MotionLayout>
 No newline at end of file
+4 −0
Original line number Original line Diff line number Diff line
@@ -152,4 +152,8 @@
    <dimen name="keyguard_quick_affordance_icon_size">24dp</dimen>
    <dimen name="keyguard_quick_affordance_icon_size">24dp</dimen>
    <!-- Width of a single selectable item in the lock screen quick affordance picker. -->
    <!-- Width of a single selectable item in the lock screen quick affordance picker. -->
    <dimen name="keyguard_quick_affordance_picker_item_width">74dp</dimen>
    <dimen name="keyguard_quick_affordance_picker_item_width">74dp</dimen>

    <dimen name="clock_carousel_item_small_size">100dp</dimen>
    <dimen name="clock_carousel_item_large_size">120dp</dimen>
    <dimen name="clock_carousel_item_margin">32dp</dimen>
</resources>
</resources>
+18 −18
Original line number Original line Diff line number Diff line
@@ -40,8 +40,8 @@
    <ConstraintSet android:id="@+id/previous">
    <ConstraintSet android:id="@+id/previous">
        <Constraint
        <Constraint
            android:id="@+id/item_view_0"
            android:id="@+id/item_view_0"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
@@ -56,12 +56,12 @@
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginStart="16dp"
            android:layout_marginStart="@dimen/clock_carousel_item_margin"
            android:layout_marginEnd="16dp" />
            android:layout_marginEnd="@dimen/clock_carousel_item_margin" />
        <Constraint
        <Constraint
            android:id="@+id/item_view_2"
            android:id="@+id/item_view_2"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
@@ -71,8 +71,8 @@
    <ConstraintSet android:id="@+id/start">
    <ConstraintSet android:id="@+id/start">
        <Constraint
        <Constraint
            android:id="@+id/item_view_1"
            android:id="@+id/item_view_1"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
@@ -87,12 +87,12 @@
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginStart="16dp"
            android:layout_marginStart="@dimen/clock_carousel_item_margin"
            android:layout_marginEnd="16dp" />
            android:layout_marginEnd="@dimen/clock_carousel_item_margin" />
        <Constraint
        <Constraint
            android:id="@+id/item_view_3"
            android:id="@+id/item_view_3"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
@@ -102,8 +102,8 @@
    <ConstraintSet android:id="@+id/next">
    <ConstraintSet android:id="@+id/next">
        <Constraint
        <Constraint
            android:id="@+id/item_view_2"
            android:id="@+id/item_view_2"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintEnd_toStartOf="@id/guideline_start"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
@@ -118,12 +118,12 @@
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintEnd_toEndOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginStart="16dp"
            android:layout_marginStart="@dimen/clock_carousel_item_margin"
            android:layout_marginEnd="16dp" />
            android:layout_marginEnd="@dimen/clock_carousel_item_margin" />
        <Constraint
        <Constraint
            android:id="@+id/item_view_4"
            android:id="@+id/item_view_4"
            android:layout_width="100dp"
            android:layout_width="@dimen/clock_carousel_item_small_size"
            android:layout_height="100dp"
            android:layout_height="@dimen/clock_carousel_item_small_size"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintStart_toStartOf="@id/guideline_end"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintBottom_toBottomOf="parent"
+10 −4
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.customization.model.theme.ThemeBundleProvider
import com.android.customization.model.theme.ThemeManager
import com.android.customization.model.theme.ThemeManager
import com.android.customization.picker.clock.data.repository.ClockRegistryProvider
import com.android.customization.picker.clock.data.repository.ClockRegistryProvider
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel
import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel
@@ -37,23 +38,23 @@ interface CustomizationInjector : Injector {
        provider: ThemeBundleProvider,
        provider: ThemeBundleProvider,
        activity: FragmentActivity,
        activity: FragmentActivity,
        overlayManagerCompat: OverlayManagerCompat,
        overlayManagerCompat: OverlayManagerCompat,
        logger: ThemesUserEventLogger
        logger: ThemesUserEventLogger,
    ): ThemeManager
    ): ThemeManager


    fun getKeyguardQuickAffordancePickerInteractor(
    fun getKeyguardQuickAffordancePickerInteractor(
        context: Context
        context: Context,
    ): KeyguardQuickAffordancePickerInteractor
    ): KeyguardQuickAffordancePickerInteractor


    fun getClockRegistryProvider(context: Context): ClockRegistryProvider
    fun getClockRegistryProvider(context: Context): ClockRegistryProvider


    fun getClockPickerInteractor(
    fun getClockPickerInteractor(
        context: Context,
        context: Context,
        clockRegistry: ClockRegistry
        clockRegistry: ClockRegistry,
    ): ClockPickerInteractor
    ): ClockPickerInteractor


    fun getClockSectionViewModel(
    fun getClockSectionViewModel(
        context: Context,
        context: Context,
        clockRegistry: ClockRegistry
        clockRegistry: ClockRegistry,
    ): ClockSectionViewModel
    ): ClockSectionViewModel


    fun getColorPickerInteractor(
    fun getColorPickerInteractor(
@@ -65,4 +66,9 @@ interface CustomizationInjector : Injector {
        context: Context,
        context: Context,
        wallpaperColorsViewModel: WallpaperColorsViewModel,
        wallpaperColorsViewModel: WallpaperColorsViewModel,
    ): ColorPickerViewModel.Factory
    ): ColorPickerViewModel.Factory

    fun getClockCarouselViewModel(
        context: Context,
        clockRegistry: ClockRegistry,
    ): ClockCarouselViewModel
}
}
Loading