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

Commit 7d148d1b authored by Nicolò Mazzucato's avatar Nicolò Mazzucato Committed by Android (Google) Code Review
Browse files

Merge "Convert ScopedUnfoldTransitionProgressProvider.java to kotlin"

parents bd203d05 8c7ad03e
Loading
Loading
Loading
Loading
+119 −0
Original line number Diff line number Diff line
@@ -13,64 +13,48 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.systemui.unfold.util;
package com.android.systemui.unfold.util

import android.annotation.NonNull;
import android.annotation.Nullable;

import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener;

import java.util.ArrayList;
import java.util.List;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener

/**
 * Manages progress listeners that can have smaller lifespan than the unfold animation.
 * Allows to limit getting transition updates to only when
 * {@link ScopedUnfoldTransitionProgressProvider#setReadyToHandleTransition} is called
 * [ScopedUnfoldTransitionProgressProvider.setReadyToHandleTransition] is called
 * with readyToHandleTransition = true
 *
 * If the transition has already started by the moment when the clients are ready to play
 * the transition then it will report transition started callback and current animation progress.
 */
public final class ScopedUnfoldTransitionProgressProvider implements
        UnfoldTransitionProgressProvider, TransitionProgressListener {
class ScopedUnfoldTransitionProgressProvider @JvmOverloads constructor(
    source: UnfoldTransitionProgressProvider? = null
) : UnfoldTransitionProgressProvider, TransitionProgressListener {

    private static final float PROGRESS_UNSET = -1f;
    private var source: UnfoldTransitionProgressProvider? = null

    @Nullable
    private UnfoldTransitionProgressProvider mSource;
    private val listeners: MutableList<TransitionProgressListener> = mutableListOf()

    private final List<TransitionProgressListener> mListeners = new ArrayList<>();
    private var isReadyToHandleTransition = false
    private var isTransitionRunning = false
    private var lastTransitionProgress = PROGRESS_UNSET

    private boolean mIsReadyToHandleTransition;
    private boolean mIsTransitionRunning;
    private float mLastTransitionProgress = PROGRESS_UNSET;

    public ScopedUnfoldTransitionProgressProvider() {
        this(null);
    init {
        setSourceProvider(source)
    }

    public ScopedUnfoldTransitionProgressProvider(
            @Nullable UnfoldTransitionProgressProvider source) {
        setSourceProvider(source);
    }

    /**
     * Sets the source for the unfold transition progress updates,
     * it replaces current provider if it is already set
     * @param provider transition provider that emits transition progress updates
     */
    public void setSourceProvider(@Nullable UnfoldTransitionProgressProvider provider) {
        if (mSource != null) {
            mSource.removeCallback(this);
        }
    fun setSourceProvider(provider: UnfoldTransitionProgressProvider?) {
        source?.removeCallback(this)

        if (provider != null) {
            mSource = provider;
            mSource.addCallback(this);
            source = provider
            provider.addCallback(this)
        } else {
            mSource = null;
            source = null
        }
    }

@@ -80,63 +64,56 @@ public final class ScopedUnfoldTransitionProgressProvider implements
     * are ready to consume the transition progress events.
     * Call it with readyToHandleTransition = false when listeners can't process the events.
     */
    public void setReadyToHandleTransition(boolean isReadyToHandleTransition) {
        if (mIsTransitionRunning) {
    fun setReadyToHandleTransition(isReadyToHandleTransition: Boolean) {
        if (isTransitionRunning) {
            if (isReadyToHandleTransition) {
                mListeners.forEach(TransitionProgressListener::onTransitionStarted);

                if (mLastTransitionProgress != PROGRESS_UNSET) {
                    mListeners.forEach(listener ->
                            listener.onTransitionProgress(mLastTransitionProgress));
                listeners.forEach { it.onTransitionStarted() }
                if (lastTransitionProgress != PROGRESS_UNSET) {
                    listeners.forEach { it.onTransitionProgress(lastTransitionProgress) }
                }
            } else {
                mIsTransitionRunning = false;
                mListeners.forEach(TransitionProgressListener::onTransitionFinished);
                isTransitionRunning = false
                listeners.forEach { it.onTransitionFinished() }
            }
        }

        mIsReadyToHandleTransition = isReadyToHandleTransition;
        this.isReadyToHandleTransition = isReadyToHandleTransition
    }

    @Override
    public void addCallback(@NonNull TransitionProgressListener listener) {
        mListeners.add(listener);
    override fun addCallback(listener: TransitionProgressListener) {
        listeners += listener
    }

    @Override
    public void removeCallback(@NonNull TransitionProgressListener listener) {
        mListeners.remove(listener);
    override fun removeCallback(listener: TransitionProgressListener) {
        listeners -= listener
    }

    @Override
    public void destroy() {
        mSource.removeCallback(this);
    override fun destroy() {
        source?.removeCallback(this)
    }

    @Override
    public void onTransitionStarted() {
        this.mIsTransitionRunning = true;
        if (mIsReadyToHandleTransition) {
            mListeners.forEach(TransitionProgressListener::onTransitionStarted);
    override fun onTransitionStarted() {
        isTransitionRunning = true
        if (isReadyToHandleTransition) {
            listeners.forEach { it.onTransitionStarted() }
        }
    }

    @Override
    public void onTransitionProgress(float progress) {
        if (mIsReadyToHandleTransition) {
            mListeners.forEach(listener -> listener.onTransitionProgress(progress));
    override fun onTransitionProgress(progress: Float) {
        if (isReadyToHandleTransition) {
            listeners.forEach { it.onTransitionProgress(progress) }
        }

        mLastTransitionProgress = progress;
        lastTransitionProgress = progress
    }

    @Override
    public void onTransitionFinished() {
        if (mIsReadyToHandleTransition) {
            mListeners.forEach(TransitionProgressListener::onTransitionFinished);
    override fun onTransitionFinished() {
        if (isReadyToHandleTransition) {
            listeners.forEach { it.onTransitionFinished() }
        }
        isTransitionRunning = false
        lastTransitionProgress = PROGRESS_UNSET
    }

        mIsTransitionRunning = false;
        mLastTransitionProgress = PROGRESS_UNSET;
    companion object {
        private const val PROGRESS_UNSET = -1f
    }
}