Skip to content

Commit

Permalink
feature: ChildSceneLifecycleCallbacks add onSceneViewCreated
Browse files Browse the repository at this point in the history
  • Loading branch information
qii committed Aug 23, 2020
1 parent 4d99883 commit 4c47e48
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 1 deletion.
Expand Up @@ -114,6 +114,11 @@ public void onSceneCreated(Scene scene, Bundle savedInstanceState) {
log("Scene", scene.toString() + " onSceneCreated");
}

@Override
public void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
log("Scene", scene.toString() + " onSceneViewCreated");
}

@Override
public void onSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
log("Scene", scene.toString() + " onSceneActivityCreated");
Expand Down
10 changes: 10 additions & 0 deletions library/scene/src/main/java/com/bytedance/scene/Scene.java
Expand Up @@ -371,6 +371,7 @@ public void dispatchCreateView(@Nullable Bundle savedInstanceState, @NonNull Vie
throw new SuperNotCalledException("Scene " + this
+ " did not call through to super.onViewCreated()");
}
dispatchOnSceneViewCreated(this, savedInstanceState, false);
setState(State.VIEW_CREATED);
}

Expand Down Expand Up @@ -1132,6 +1133,15 @@ public void dispatchOnSceneCreated(@NonNull Scene scene, @Nullable Bundle savedI
}
}

/** @hide */
@RestrictTo(LIBRARY_GROUP)
public void dispatchOnSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState, boolean directChild) {
Scene parentScene = getParentScene();
if (parentScene != null) {
parentScene.dispatchOnSceneViewCreated(scene, savedInstanceState, scene == this);
}
}

/** @hide */
@RestrictTo(LIBRARY_GROUP)
public void dispatchOnSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState, boolean directChild) {
Expand Down
Expand Up @@ -673,6 +673,24 @@ public final void dispatchOnSceneCreated(@NonNull Scene scene, @Nullable Bundle
super.dispatchOnSceneCreated(scene, savedInstanceState, directChild);
}

/**
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
@Override
public final void dispatchOnSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState, boolean directChild) {
if (scene != this) {
List<NonNullPair<ChildSceneLifecycleCallbacks, Boolean>> list = new ArrayList<>(mLifecycleCallbacks);
for (NonNullPair<ChildSceneLifecycleCallbacks, Boolean> pair : list) {
if (directChild || pair.second) {
pair.first.onSceneViewCreated(scene, savedInstanceState);
}
}
}

super.dispatchOnSceneViewCreated(scene, savedInstanceState, directChild);
}

/**
* @hide
*/
Expand Down
Expand Up @@ -34,6 +34,11 @@ public void onSceneCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceS

}

@Override
public void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {

}

@Override
public void onSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {

Expand Down
Expand Up @@ -19,6 +19,7 @@

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import com.bytedance.scene.Scene;

/**
Expand All @@ -38,9 +39,18 @@ public interface ChildSceneLifecycleCallbacks {
@Deprecated
void onSceneCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState);

/**
* Called after the Scene has returned from {@link Scene#onViewCreated(View, Bundle)}.
* View is already created at this moment, but child Scene' view is not created.
*
* @param scene Scene changing state
* @param savedInstanceState Saved instance bundle from a previous instance
*/
void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState);

/**
* Called after the Scene has returned from {@link Scene#onActivityCreated(Bundle)}.
* View is already created at this moment.
* View is already created at this moment, and child Scene' view is created too.
*
* @param scene Scene changing state
* @param savedInstanceState Saved instance bundle from a previous instance
Expand Down
Expand Up @@ -784,6 +784,24 @@ public void dispatchOnSceneCreated(@NonNull Scene scene, @Nullable Bundle savedI
super.dispatchOnSceneCreated(scene, savedInstanceState, directChild);
}

/**
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
@Override
public final void dispatchOnSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState, boolean directChild) {
if (scene != this) {
List<NonNullPair<ChildSceneLifecycleCallbacks, Boolean>> list = new ArrayList<>(mLifecycleCallbacks);
for (NonNullPair<ChildSceneLifecycleCallbacks, Boolean> pair : list) {
if (directChild || pair.second) {
pair.first.onSceneViewCreated(scene, savedInstanceState);
}
}
}

super.dispatchOnSceneViewCreated(scene, savedInstanceState, directChild);
}

/**
* @hide
*/
Expand Down
Expand Up @@ -34,6 +34,7 @@ public class ChildSceneLifecycleCallbacksTests {
@Test
public void testNavigationSceneNotRecursiveExcludingOnSceneSaveInstanceState() {
final AtomicBoolean isCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isViewCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isActivityCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isStartedCalled = new AtomicBoolean(false);
final AtomicBoolean isResumedCalled = new AtomicBoolean(false);
Expand All @@ -52,6 +53,15 @@ public void onSceneCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceS
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (!isViewCreatedCalled.compareAndSet(false, true)) {
throw new IllegalStateException("crash");
}
assertNotNull(scene.getView());
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (!isActivityCreatedCalled.compareAndSet(false, true)) {
Expand Down Expand Up @@ -162,6 +172,7 @@ public Scene instantiateScene(ClassLoader cl, String className, Bundle bundle) {
lifecycleManager.onDestroyView();

assertTrue(isCreatedCalled.get());
assertTrue(isViewCreatedCalled.get());
assertTrue(isActivityCreatedCalled.get());
assertTrue(isStartedCalled.get());
assertTrue(isResumedCalled.get());
Expand All @@ -174,6 +185,7 @@ public Scene instantiateScene(ClassLoader cl, String className, Bundle bundle) {
@Test
public void testGroupSceneNotRecursiveExcludingOnSceneSaveInstanceState() {
final AtomicBoolean isCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isViewCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isActivityCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isStartedCalled = new AtomicBoolean(false);
final AtomicBoolean isResumedCalled = new AtomicBoolean(false);
Expand All @@ -192,6 +204,15 @@ public void onSceneCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceS
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (!isViewCreatedCalled.compareAndSet(false, true)) {
throw new IllegalStateException("crash");
}
assertNotNull(scene.getView());
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (!isActivityCreatedCalled.compareAndSet(false, true)) {
Expand Down Expand Up @@ -288,6 +309,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup co

rootScene.add(id, scene, "TAG");
assertTrue(isCreatedCalled.get());
assertTrue(isViewCreatedCalled.get());
assertTrue(isActivityCreatedCalled.get());
assertTrue(isStartedCalled.get());
assertTrue(isResumedCalled.get());
Expand All @@ -302,6 +324,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup co
@Test
public void testGroupSceneRecursiveExcludingOnSceneSaveInstanceState() {
final AtomicBoolean isCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isViewCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isActivityCreatedCalled = new AtomicBoolean(false);
final AtomicBoolean isStartedCalled = new AtomicBoolean(false);
final AtomicBoolean isResumedCalled = new AtomicBoolean(false);
Expand Down Expand Up @@ -331,6 +354,18 @@ public void onSceneCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceS
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneViewCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (scene != childScene) {
return;
}
if (!isViewCreatedCalled.compareAndSet(false, true)) {
throw new IllegalStateException("crash");
}
assertNotNull(scene.getView());
assertSame(State.NONE, scene.getState());
}

@Override
public void onSceneActivityCreated(@NonNull Scene scene, @Nullable Bundle savedInstanceState) {
if (scene != childScene) {
Expand Down Expand Up @@ -456,6 +491,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {

secondRootScene.add(secondRootId, childScene, "CHILD");
assertTrue(isCreatedCalled.get());
assertTrue(isViewCreatedCalled.get());
assertTrue(isActivityCreatedCalled.get());
assertTrue(isStartedCalled.get());
assertTrue(isResumedCalled.get());
Expand Down

0 comments on commit 4c47e48

Please sign in to comment.