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

Commit cf4e86e4 authored by Bryce Lee's avatar Bryce Lee Committed by Automerger Merge Worker
Browse files

Merge "TouchHandler for hiding dream overlay complications." into tm-dev am: 81eff37a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16995286

Change-Id: I1ac57db0fecfa2462f2a93f1ae25f57c6ff2bf7a
parents f9653bf9 81eff37a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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>
+13 −0
Original line number Diff line number Diff line
@@ -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
+41 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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";

    /**
@@ -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);
                    }
                });
    }

    /**
@@ -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);
+33 −0
Original line number Diff line number Diff line
@@ -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
@@ -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);
    }
}
+11 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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