1990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 3990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 4990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * you may not use this file except in compliance with the License. 6990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * You may obtain a copy of the License at 7990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 8990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 9990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 10990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Unless required by applicable law or agreed to in writing, software 11990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 12990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * See the License for the specific language governing permissions and 14990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * limitations under the License. 15990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount */ 16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.fragment.app; 17990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 18990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.mockito.Matchers.any; 19990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.mockito.Mockito.mock; 20990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.mockito.Mockito.never; 21990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.mockito.Mockito.reset; 22990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.mockito.Mockito.verify; 23990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 24990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.os.Bundle; 25990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.os.SystemClock; 26990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.transition.Transition; 27990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.LayoutInflater; 28990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.View; 29990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.ViewGroup; 30990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 31990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount/** 32990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * A fragment that has transitions that can be tracked. 33990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount */ 34990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountpublic class TransitionFragment extends StrictViewFragment { 35990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingVisibility enterTransition = new TrackingVisibility(); 36990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingVisibility reenterTransition = new TrackingVisibility(); 37990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingVisibility exitTransition = new TrackingVisibility(); 38990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingVisibility returnTransition = new TrackingVisibility(); 39990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingTransition sharedElementEnter = new TrackingTransition(); 40990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final TrackingTransition sharedElementReturn = new TrackingTransition(); 41990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 42990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount private Transition.TransitionListener mListener = mock(Transition.TransitionListener.class); 43990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 44990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public TransitionFragment() { 45990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setEnterTransition(enterTransition); 46990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setReenterTransition(reenterTransition); 47990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setExitTransition(exitTransition); 48990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setReturnTransition(returnTransition); 49990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setSharedElementEnterTransition(sharedElementEnter); 50990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount setSharedElementReturnTransition(sharedElementReturn); 51990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount enterTransition.addListener(mListener); 52116d033c8569becf78f6ac24caf37ebb368a1aaeGeorge Mount sharedElementEnter.addListener(mListener); 53990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount reenterTransition.addListener(mListener); 54990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount exitTransition.addListener(mListener); 55990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount returnTransition.addListener(mListener); 56116d033c8569becf78f6ac24caf37ebb368a1aaeGeorge Mount sharedElementReturn.addListener(mListener); 57990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 58990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 59990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 60990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public View onCreateView(LayoutInflater inflater, ViewGroup container, 61990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Bundle savedInstanceState) { 62990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount checkGetActivity(); 63990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount checkState("onCreateView", CREATED); 64990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mOnCreateViewCalled = true; 65990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return super.onCreateView(inflater, container, savedInstanceState); 66990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 67990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 68990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount void waitForTransition() throws InterruptedException { 69ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas verify(mListener, CtsMockitoUtils.within(300)).onTransitionEnd((Transition) any()); 70990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount reset(mListener); 71990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 72990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 73990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount void waitForNoTransition() throws InterruptedException { 74990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount SystemClock.sleep(250); 75990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount verify(mListener, never()).onTransitionStart((Transition) any()); 76990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 77990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount} 78