1a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar/* 2a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * Copyright (C) 2017 The Android Open Source Project 3a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * 4a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * you may not use this file except in compliance with the License. 6a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * You may obtain a copy of the License at 7a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * 8a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * 10a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * See the License for the specific language governing permissions and 14a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * limitations under the License. 15a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar */ 16bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.lifecycle.testapp; 17a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 18bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport static androidx.lifecycle.testapp.TestEvent.OWNER_CALLBACK; 19a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 20a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.annotation.SuppressLint; 21a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.os.Bundle; 22a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.view.LayoutInflater; 23a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.view.View; 24a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.view.ViewGroup; 25a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport android.widget.FrameLayout; 26a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 27bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.annotation.Nullable; 28bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.core.util.Pair; 29bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.fragment.app.Fragment; 30bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.Lifecycle; 31bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverette 32a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport java.util.ArrayList; 33a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarimport java.util.List; 34a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 35a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar/** 36a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * A support fragment that collects all of its events. 37a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar */ 38a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar@SuppressLint("ValidFragment") 39a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyarpublic class CollectingSupportFragment extends Fragment implements CollectingLifecycleOwner { 40a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar private final List<Pair<TestEvent, Lifecycle.Event>> mCollectedEvents = 41a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar new ArrayList<>(); 42a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar private TestObserver mTestObserver = new TestObserver(mCollectedEvents); 43a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 44a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 45a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onCreate(Bundle savedInstanceState) { 46a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onCreate(savedInstanceState); 47a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_CREATE)); 48a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar getLifecycle().addObserver(mTestObserver); 49a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 50a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 51a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Nullable 52a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 53a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 54a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Nullable Bundle savedInstanceState) { 55a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar //noinspection ConstantConditions 56a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar FrameLayout layout = new FrameLayout(container.getContext()); 57a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar layout.setId(R.id.child_fragment_container); 58a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar return layout; 59a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 60a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 61a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar /** 62a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar * Runs a replace fragment transaction with 'fragment' on this Fragment. 63a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar */ 64a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void replaceFragment(Fragment fragment) { 65a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar getChildFragmentManager() 66a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar .beginTransaction() 67a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar .add(R.id.child_fragment_container, fragment) 68a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar .commitNow(); 69a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 70a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 71a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 72a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onStart() { 73a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onStart(); 74a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_START)); 75a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 76a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 77a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 78a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onResume() { 79a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onResume(); 80a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_RESUME)); 81a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 82a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 83a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 84a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onDestroy() { 85a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onDestroy(); 86a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_DESTROY)); 87a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 88a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 89a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 90a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onStop() { 91a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onStop(); 92a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_STOP)); 93a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 94a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 95a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 96a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public void onPause() { 97a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar super.onPause(); 98a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_PAUSE)); 99a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 100a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar 101a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar @Override 102a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar public List<Pair<TestEvent, Lifecycle.Event>> copyCollectedEvents() { 103a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar return new ArrayList<>(mCollectedEvents); 104a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar } 105a3e03220c47cf14088ac23de6eb535cf45012109Yigit Boyar} 106