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

Commit 8c7ad03e authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Convert ScopedUnfoldTransitionProgressProvider.java to kotlin

Test: NaturalRotationUnfoldProgressProviderTest
Bug: 208791440
Change-Id: I6b2f0fba5ab72aa1561403ed19ff71154f602d9e
parent 792db6a7
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
    }
}