13f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu/* This file is auto-generated from BaseFragment.java. DO NOT MODIFY. */ 23f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 33f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu/* 43f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Copyright (C) 2014 The Android Open Source Project 53f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * 63f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 73f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * in compliance with the License. You may obtain a copy of the License at 83f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * 93f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * http://www.apache.org/licenses/LICENSE-2.0 103f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * 113f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License 123f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 133f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * or implied. See the License for the specific language governing permissions and limitations under 143f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * the License. 153f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 163f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gupackage android.support.v17.leanback.app; 173f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 183f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.os.Bundle; 193f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.support.v17.leanback.R; 203f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.support.v17.leanback.transition.TransitionHelper; 213f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.support.v17.leanback.transition.TransitionListener; 223f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.view.View; 233f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Guimport android.view.ViewTreeObserver; 243f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 25a5a85434f936023043f074fb86eaa6d48f7f6411Dake Guimport android.support.v17.leanback.util.StateMachine; 26a5a85434f936023043f074fb86eaa6d48f7f6411Dake Guimport android.support.v17.leanback.util.StateMachine.State; 27a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 28a5a85434f936023043f074fb86eaa6d48f7f6411Dake Guimport static android.support.v17.leanback.util.StateMachine.*; 29a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 303f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu/** 313f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * @hide 323f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 33e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stoutclass BaseSupportFragment extends BrandedSupportFragment { 343f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 35a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu /** 36a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Condition: {@link TransitionHelper#systemSupportsEntranceTransitions()} is true 37a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Action: none 38a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu */ 39684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata private final State STATE_ALLOWED = new State() { 40a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu @Override 41a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu public boolean canRun() { 42a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return TransitionHelper.systemSupportsEntranceTransitions(); 43a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 44684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata 45684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata @Override 46684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata public void run() { 47684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata mProgressBarManager.show(); 48684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata } 49a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu }; 50a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 51a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu /** 52a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Condition: {@link #isReadyForPrepareEntranceTransition()} is true 53a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Action: {@link #onEntranceTransitionPrepare()} } 54a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu */ 55a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu private final State STATE_PREPARE = new State() { 56a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu @Override 57a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu public boolean canRun() { 58a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return isReadyForPrepareEntranceTransition(); 59a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 60a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 61a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu @Override 62a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu public void run() { 63a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu onEntranceTransitionPrepare(); 64a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 65a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu }; 66a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 67a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu /** 68a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Condition: {@link #isReadyForStartEntranceTransition()} is true 69a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Action: {@link #onExecuteEntranceTransition()} } 70a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu */ 71a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu private final State STATE_START = new State() { 72a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu @Override 73a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu public boolean canRun() { 74a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return isReadyForStartEntranceTransition(); 75a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 76a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 77a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu @Override 78a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu public void run() { 79684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata mProgressBarManager.hide(); 80a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu onExecuteEntranceTransition(); 81a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 82a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu }; 83a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 84a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu final StateMachine mEnterTransitionStates; 85a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 863f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu private Object mEntranceTransition; 87684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata private final ProgressBarManager mProgressBarManager = new ProgressBarManager(); 883f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 89a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu BaseSupportFragment() { 90a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates = new StateMachine(); 91a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.addState(STATE_ALLOWED); 92a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.addState(STATE_PREPARE); 93a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.addState(STATE_START); 94a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 95a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 963f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 973f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void onViewCreated(View view, Bundle savedInstanceState) { 983f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu super.onViewCreated(view, savedInstanceState); 99a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu performPendingStates(); 100a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 101a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 102a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu final void performPendingStates() { 103a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.runPendingStates(); 1043f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1053f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1063f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 1073f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Enables entrance transition.<p> 1083f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Entrance transition is the standard slide-in transition that shows rows of data in 1093f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * browse screen and details screen. 1103f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <p> 111572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu * The method is ignored before LOLLIPOP (API21). 112572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu * <p> 1133f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * This method must be called in or 1143f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * before onCreate(). Typically entrance transition should be enabled when savedInstance is 1153f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * null so that fragment restored from instanceState does not run an extra entrance transition. 1163f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * When the entrance transition is enabled, the fragment will make headers and content 1173f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * hidden initially. 1183f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * When data of rows are ready, app must call {@link #startEntranceTransition()} to kick off 1193f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * the transition, otherwise the rows will be invisible forever. 1203f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <p> 1213f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * It is similar to android:windowsEnterTransition and can be considered a late-executed 1223f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * android:windowsEnterTransition controlled by app. There are two reasons that app needs it: 1233f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <li> Workaround the problem that activity transition is not available between launcher and 1243f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * app. Browse activity must programmatically start the slide-in transition.</li> 1253f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <li> Separates DetailsOverviewRow transition from other rows transition. So that 1263f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * the DetailsOverviewRow transition can be executed earlier without waiting for all rows 1273f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * to be loaded.</li> 1283f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <p> 1293f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Transition object is returned by createEntranceTransition(). Typically the app does not need 1303f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * override the default transition that browse and details provides. 1313f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1323f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void prepareEntranceTransition() { 133a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.runState(STATE_ALLOWED); 134a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.runState(STATE_PREPARE); 1353f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1363f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1373f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 1383f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Return true if entrance transition is enabled and not started yet. 1393f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Entrance transition can only be executed once and isEntranceTransitionEnabled() 1403f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * is reset to false after entrance transition is started. 1413f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1423f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu boolean isEntranceTransitionEnabled() { 143a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu // Enabled when passed STATE_ALLOWED in prepareEntranceTransition call. 144a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return STATE_ALLOWED.getStatus() == STATUS_EXECUTED; 1453f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1463f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1473f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 1483f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Create entrance transition. Subclass can override to load transition from 1493f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * resource or construct manually. Typically app does not need to 1503f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * override the default transition that browse and details provides. 1513f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1523f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected Object createEntranceTransition() { 1533f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu return null; 1543f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1553f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1563f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 1573f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Run entrance transition. Subclass may use TransitionManager to perform 1583f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * go(Scene) or beginDelayedTransition(). App should not override the default 1593f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * implementation of browse and details fragment. 1603f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1613f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected void runEntranceTransition(Object entranceTransition) { 1623f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1633f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1643f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 165902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu * Callback when entrance transition is prepared. This is when fragment should 166902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu * stop user input and animations. 167902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu */ 168902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu protected void onEntranceTransitionPrepare() { 169902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu } 170902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu 171902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu /** 172902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu * Callback when entrance transition is started. This is when fragment should 173902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu * stop processing layout. 1743f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1753f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected void onEntranceTransitionStart() { 1763f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1773f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1783f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 1793f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Callback when entrance transition is ended. 1803f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 1813f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected void onEntranceTransitionEnd() { 1823f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1833f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 1843f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 185a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Returns true if it is ready to perform {@link #prepareEntranceTransition()}, false otherwise. 186a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Subclass may override and add additional conditions. 187a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * @return True if it is ready to perform {@link #prepareEntranceTransition()}, false otherwise. 188a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Subclass may override and add additional conditions. 189a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu */ 190a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu boolean isReadyForPrepareEntranceTransition() { 191a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return getView() != null; 192a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 193a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 194a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu /** 195a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Returns true if it is ready to perform {@link #startEntranceTransition()}, false otherwise. 196a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Subclass may override and add additional conditions. 197a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * @return True if it is ready to perform {@link #startEntranceTransition()}, false otherwise. 198a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu * Subclass may override and add additional conditions. 199a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu */ 200a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu boolean isReadyForStartEntranceTransition() { 201a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu return getView() != null; 202a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 203a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 204a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu /** 2053f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * When fragment finishes loading data, it should call startEntranceTransition() 2063f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * to execute the entrance transition. 2073f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * startEntranceTransition() will start transition only if both two conditions 2083f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * are satisfied: 2093f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <li> prepareEntranceTransition() was called.</li> 2103f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <li> has not executed entrance transition yet.</li> 2113f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * <p> 2123f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * If startEntranceTransition() is called before onViewCreated(), it will be pending 2133f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * and executed when view is created. 2143f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 2153f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void startEntranceTransition() { 216a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.runState(STATE_START); 217a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu } 218a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu 219a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu void onExecuteEntranceTransition() { 2203f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu // wait till views get their initial position before start transition 2213f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu final View view = getView(); 2223f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu view.getViewTreeObserver().addOnPreDrawListener( 2233f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu new ViewTreeObserver.OnPreDrawListener() { 2243f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 2253f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public boolean onPreDraw() { 2263f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu view.getViewTreeObserver().removeOnPreDrawListener(this); 2273f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu internalCreateEntranceTransition(); 228902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu if (mEntranceTransition != null) { 229902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu onEntranceTransitionStart(); 230902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu runEntranceTransition(mEntranceTransition); 231902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu } 2323f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu return false; 2333f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2343f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu }); 2353f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu view.invalidate(); 2363f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2373f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 2383f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu void internalCreateEntranceTransition() { 2393f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mEntranceTransition = createEntranceTransition(); 2403f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu if (mEntranceTransition == null) { 2413f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu return; 2423f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2438403619efebe94666c0615c3fc85080a303acf80Dake Gu TransitionHelper.addTransitionListener(mEntranceTransition, new TransitionListener() { 2443f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 2453f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void onTransitionEnd(Object transition) { 2463f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mEntranceTransition = null; 2473f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu onEntranceTransitionEnd(); 248a5a85434f936023043f074fb86eaa6d48f7f6411Dake Gu mEnterTransitionStates.resetStatus(); 2493f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2503f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu }); 2513f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 252684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata 253684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata /** 254684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata * Returns the {@link ProgressBarManager}. 255684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata */ 256684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata public final ProgressBarManager getProgressBarManager() { 257684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata return mProgressBarManager; 258684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata } 2593f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu} 260