Loading packages/SystemUI/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -701,4 +701,10 @@ <!-- How long in milliseconds before full burn-in protection is achieved. --> <integer name="config_dreamOverlayMillisUntilFullJitter">240000</integer> <integer name="complicationFadeOutMs">500</integer> <integer name="complicationFadeInMs">500</integer> <integer name="complicationRestoreMs">1000</integer> </resources> packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java +13 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,19 @@ public interface Complication { void requestExitDream(); } /** * The implementation of this interface is in charge of managing the visible state of * the shown complication. */ interface VisibilityController { /** * Called to set the visibility of all shown and future complications. * @param visibility The desired future visibility. * @param animate whether the change should be animated. */ void setVisibility(@View.Visibility int visibility, boolean animate); } /** * Returned through {@link Complication#createView(ComplicationViewModel)}, {@link ViewHolder} * is a container for a single {@link Complication} instance. The {@link Host} guarantees that Loading packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java +41 −2 Original line number Diff line number Diff line Loading @@ -16,17 +16,23 @@ package com.android.systemui.dreams.complication; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_IN_DURATION; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_OUT_DURATION; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Constraints; import com.android.systemui.R; import com.android.systemui.dreams.dagger.DreamOverlayComponent; import com.android.systemui.touch.TouchInsetManager; import java.util.ArrayList; Loading @@ -43,7 +49,8 @@ import javax.inject.Named; * their layout parameters and attributes. The management of this set is done by * {@link ComplicationHostViewController}. */ public class ComplicationLayoutEngine { @DreamOverlayComponent.DreamOverlayScope public class ComplicationLayoutEngine implements Complication.VisibilityController { public static final String TAG = "ComplicationLayoutEngine"; /** Loading Loading @@ -454,15 +461,45 @@ public class ComplicationLayoutEngine { private final HashMap<ComplicationId, ViewEntry> mEntries = new HashMap<>(); private final HashMap<Integer, PositionGroup> mPositions = new HashMap<>(); private final TouchInsetManager.TouchInsetSession mSession; private final int mFadeInDuration; private final int mFadeOutDuration; private ViewPropertyAnimator mViewPropertyAnimator; /** */ @Inject public ComplicationLayoutEngine(@Named(SCOPED_COMPLICATIONS_LAYOUT) ConstraintLayout layout, @Named(COMPLICATION_MARGIN) int margin, TouchInsetManager.TouchInsetSession session) { TouchInsetManager.TouchInsetSession session, @Named(COMPLICATIONS_FADE_IN_DURATION) int fadeInDuration, @Named(COMPLICATIONS_FADE_OUT_DURATION) int fadeOutDuration) { mLayout = layout; mMargin = margin; mSession = session; mFadeInDuration = fadeInDuration; mFadeOutDuration = fadeOutDuration; } @Override public void setVisibility(int visibility, boolean animate) { final boolean appearing = visibility == View.VISIBLE; if (mViewPropertyAnimator != null) { mViewPropertyAnimator.cancel(); } if (appearing) { mLayout.setVisibility(View.VISIBLE); } mViewPropertyAnimator = mLayout.animate() .alpha(appearing ? 1f : 0f) .setDuration(appearing ? mFadeInDuration : mFadeOutDuration) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mLayout.setVisibility(visibility); } }); } /** Loading @@ -477,6 +514,8 @@ public class ComplicationLayoutEngine { */ public void addComplication(ComplicationId id, View view, ComplicationLayoutParams lp, @Complication.Category int category) { Log.d(TAG, "engine: " + this + " addComplication"); // If the complication is present, remove. if (mEntries.containsKey(id)) { removeComplication(id); Loading packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java +33 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ import dagger.Provides; public abstract class ComplicationHostViewModule { public static final String SCOPED_COMPLICATIONS_LAYOUT = "scoped_complications_layout"; public static final String COMPLICATION_MARGIN = "complication_margin"; public static final String COMPLICATIONS_FADE_OUT_DURATION = "complications_fade_out_duration"; public static final String COMPLICATIONS_FADE_IN_DURATION = "complications_fade_in_duration"; public static final String COMPLICATIONS_RESTORE_TIMEOUT = "complication_restore_timeout"; /** * Generates a {@link ConstraintLayout}, which can host Loading @@ -60,4 +63,34 @@ public abstract class ComplicationHostViewModule { static int providesComplicationPadding(@Main Resources resources) { return resources.getDimensionPixelSize(R.dimen.dream_overlay_complication_margin); } /** * Provides the fade out duration for complications. */ @Provides @Named(COMPLICATIONS_FADE_OUT_DURATION) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeOutDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeOutMs); } /** * Provides the fade in duration for complications. */ @Provides @Named(COMPLICATIONS_FADE_IN_DURATION) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeInDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeInMs); } /** * Provides the timeout for restoring complication visibility. */ @Provides @Named(COMPLICATIONS_RESTORE_TIMEOUT) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsRestoreTimeout(@Main Resources resources) { return resources.getInteger(R.integer.complicationRestoreMs); } } packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java +11 −0 Original line number Diff line number Diff line Loading @@ -21,7 +21,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelStore; import com.android.systemui.dreams.complication.Complication; import com.android.systemui.dreams.complication.ComplicationCollectionViewModel; import com.android.systemui.dreams.complication.ComplicationLayoutEngine; import java.lang.annotation.Documented; import java.lang.annotation.Retention; Loading Loading @@ -62,4 +64,13 @@ public interface ComplicationModule { return provider.get(ComplicationCollectionViewModel.class); } /** * Provides the visibility controller for display complications. */ @Provides static Complication.VisibilityController providesVisibilityController( ComplicationLayoutEngine engine) { return engine; } } Loading
packages/SystemUI/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -701,4 +701,10 @@ <!-- How long in milliseconds before full burn-in protection is achieved. --> <integer name="config_dreamOverlayMillisUntilFullJitter">240000</integer> <integer name="complicationFadeOutMs">500</integer> <integer name="complicationFadeInMs">500</integer> <integer name="complicationRestoreMs">1000</integer> </resources>
packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java +13 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,19 @@ public interface Complication { void requestExitDream(); } /** * The implementation of this interface is in charge of managing the visible state of * the shown complication. */ interface VisibilityController { /** * Called to set the visibility of all shown and future complications. * @param visibility The desired future visibility. * @param animate whether the change should be animated. */ void setVisibility(@View.Visibility int visibility, boolean animate); } /** * Returned through {@link Complication#createView(ComplicationViewModel)}, {@link ViewHolder} * is a container for a single {@link Complication} instance. The {@link Host} guarantees that Loading
packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java +41 −2 Original line number Diff line number Diff line Loading @@ -16,17 +16,23 @@ package com.android.systemui.dreams.complication; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_IN_DURATION; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_OUT_DURATION; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN; import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Constraints; import com.android.systemui.R; import com.android.systemui.dreams.dagger.DreamOverlayComponent; import com.android.systemui.touch.TouchInsetManager; import java.util.ArrayList; Loading @@ -43,7 +49,8 @@ import javax.inject.Named; * their layout parameters and attributes. The management of this set is done by * {@link ComplicationHostViewController}. */ public class ComplicationLayoutEngine { @DreamOverlayComponent.DreamOverlayScope public class ComplicationLayoutEngine implements Complication.VisibilityController { public static final String TAG = "ComplicationLayoutEngine"; /** Loading Loading @@ -454,15 +461,45 @@ public class ComplicationLayoutEngine { private final HashMap<ComplicationId, ViewEntry> mEntries = new HashMap<>(); private final HashMap<Integer, PositionGroup> mPositions = new HashMap<>(); private final TouchInsetManager.TouchInsetSession mSession; private final int mFadeInDuration; private final int mFadeOutDuration; private ViewPropertyAnimator mViewPropertyAnimator; /** */ @Inject public ComplicationLayoutEngine(@Named(SCOPED_COMPLICATIONS_LAYOUT) ConstraintLayout layout, @Named(COMPLICATION_MARGIN) int margin, TouchInsetManager.TouchInsetSession session) { TouchInsetManager.TouchInsetSession session, @Named(COMPLICATIONS_FADE_IN_DURATION) int fadeInDuration, @Named(COMPLICATIONS_FADE_OUT_DURATION) int fadeOutDuration) { mLayout = layout; mMargin = margin; mSession = session; mFadeInDuration = fadeInDuration; mFadeOutDuration = fadeOutDuration; } @Override public void setVisibility(int visibility, boolean animate) { final boolean appearing = visibility == View.VISIBLE; if (mViewPropertyAnimator != null) { mViewPropertyAnimator.cancel(); } if (appearing) { mLayout.setVisibility(View.VISIBLE); } mViewPropertyAnimator = mLayout.animate() .alpha(appearing ? 1f : 0f) .setDuration(appearing ? mFadeInDuration : mFadeOutDuration) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mLayout.setVisibility(visibility); } }); } /** Loading @@ -477,6 +514,8 @@ public class ComplicationLayoutEngine { */ public void addComplication(ComplicationId id, View view, ComplicationLayoutParams lp, @Complication.Category int category) { Log.d(TAG, "engine: " + this + " addComplication"); // If the complication is present, remove. if (mEntries.containsKey(id)) { removeComplication(id); Loading
packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java +33 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ import dagger.Provides; public abstract class ComplicationHostViewModule { public static final String SCOPED_COMPLICATIONS_LAYOUT = "scoped_complications_layout"; public static final String COMPLICATION_MARGIN = "complication_margin"; public static final String COMPLICATIONS_FADE_OUT_DURATION = "complications_fade_out_duration"; public static final String COMPLICATIONS_FADE_IN_DURATION = "complications_fade_in_duration"; public static final String COMPLICATIONS_RESTORE_TIMEOUT = "complication_restore_timeout"; /** * Generates a {@link ConstraintLayout}, which can host Loading @@ -60,4 +63,34 @@ public abstract class ComplicationHostViewModule { static int providesComplicationPadding(@Main Resources resources) { return resources.getDimensionPixelSize(R.dimen.dream_overlay_complication_margin); } /** * Provides the fade out duration for complications. */ @Provides @Named(COMPLICATIONS_FADE_OUT_DURATION) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeOutDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeOutMs); } /** * Provides the fade in duration for complications. */ @Provides @Named(COMPLICATIONS_FADE_IN_DURATION) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeInDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeInMs); } /** * Provides the timeout for restoring complication visibility. */ @Provides @Named(COMPLICATIONS_RESTORE_TIMEOUT) @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsRestoreTimeout(@Main Resources resources) { return resources.getInteger(R.integer.complicationRestoreMs); } }
packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java +11 −0 Original line number Diff line number Diff line Loading @@ -21,7 +21,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelStore; import com.android.systemui.dreams.complication.Complication; import com.android.systemui.dreams.complication.ComplicationCollectionViewModel; import com.android.systemui.dreams.complication.ComplicationLayoutEngine; import java.lang.annotation.Documented; import java.lang.annotation.Retention; Loading Loading @@ -62,4 +64,13 @@ public interface ComplicationModule { return provider.get(ComplicationCollectionViewModel.class); } /** * Provides the visibility controller for display complications. */ @Provides static Complication.VisibilityController providesVisibilityController( ComplicationLayoutEngine engine) { return engine; } }