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