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

Commit 81eff37a authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "TouchHandler for hiding dream overlay complications." into tm-dev

parents 11a44a2c d3237afb
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