Loading packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.java→packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt +119 −0 Original line number Diff line number Diff line Loading @@ -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 } } Loading @@ -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 } } Loading
packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.java→packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt +119 −0 Original line number Diff line number Diff line Loading @@ -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 } } Loading @@ -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 } }