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

Commit a4ae8185 authored by Andrey Kulikov's avatar Andrey Kulikov
Browse files

Make transitions Scene.getCurrentScene() public

I pretty sure the getter method Scene.getCurrentScene() should be promoted to be public. This method is the only option for developers to understand is the sceneRoot already in the scene they need. Otherwise they have to introduce their own states and sync it with all scene changes which is more error-prone. To make it simpler to developers we can just make the method public. As an example of usage:

void displayMessages(List<Message> messages) {
    if (!messages.isEmpty()) {
        if (Scene.getCurrentScene(root) != messagesScene) {
            TransitionManager.go(messagesScene);
            MyAnalytics.trackDisplayMessages();
            (... more initialization ... )
        }
        messagesView.display(messages);
    }
}

Test: added a cts test for getCurrentScene
Change in AndroidX: aosp/807055
Bug: 118720709
Change-Id: Ic90e3576a82b5ab9a88e38e396efd49875968011
parent d33b50a6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45841,6 +45841,7 @@ package android.transition {
    ctor public deprecated Scene(android.view.ViewGroup, android.view.ViewGroup);
    method public void enter();
    method public void exit();
    method public static android.transition.Scene getCurrentScene(android.view.View);
    method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
    method public android.view.ViewGroup getSceneRoot();
    method public void setEnterAction(java.lang.Runnable);
+9 −5
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.transition;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.util.SparseArray;
@@ -196,22 +198,24 @@ public final class Scene {
     * information is used by Scene to determine whether there is a previous
     * scene which should be exited before the new scene is entered.
     *
     * @param view The view on which the current scene is being set
     * @param sceneRoot The view on which the current scene is being set
     */
    @UnsupportedAppUsage
    static void setCurrentScene(View view, Scene scene) {
        view.setTagInternal(com.android.internal.R.id.current_scene, scene);
    static void setCurrentScene(@NonNull View sceneRoot, @Nullable Scene scene) {
        sceneRoot.setTagInternal(com.android.internal.R.id.current_scene, scene);
    }

    /**
     * Gets the current {@link Scene} set on the given view. A scene is set on a view
     * only if that view is the scene root.
     *
     * @param sceneRoot The view on which the current scene will be returned
     * @return The current Scene set on this view. A value of null indicates that
     * no Scene is currently set.
     */
    static Scene getCurrentScene(View view) {
        return (Scene) view.getTag(com.android.internal.R.id.current_scene);
    @Nullable
    public static Scene getCurrentScene(@NonNull View sceneRoot) {
        return (Scene) sceneRoot.getTag(com.android.internal.R.id.current_scene);
    }

    /**