1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settingslib.core.lifecycle;
18 
19 import static androidx.lifecycle.Lifecycle.Event.ON_CREATE;
20 import static androidx.lifecycle.Lifecycle.Event.ON_DESTROY;
21 import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
22 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
23 import static androidx.lifecycle.Lifecycle.Event.ON_START;
24 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
25 
26 import android.annotation.CallSuper;
27 import android.content.Context;
28 import android.os.Bundle;
29 import android.view.Menu;
30 import android.view.MenuInflater;
31 import android.view.MenuItem;
32 
33 import androidx.fragment.app.Fragment;
34 import androidx.lifecycle.LifecycleOwner;
35 
36 public class ObservableFragment extends Fragment implements LifecycleOwner {
37 
38     private final Lifecycle mLifecycle = new Lifecycle(this);
39 
getSettingsLifecycle()40     public Lifecycle getSettingsLifecycle() {
41         return mLifecycle;
42     }
43 
44     @CallSuper
45     @Override
onAttach(Context context)46     public void onAttach(Context context) {
47         super.onAttach(context);
48         mLifecycle.onAttach(context);
49     }
50 
51     @CallSuper
52     @Override
onCreate(Bundle savedInstanceState)53     public void onCreate(Bundle savedInstanceState) {
54         mLifecycle.onCreate(savedInstanceState);
55         mLifecycle.handleLifecycleEvent(ON_CREATE);
56         super.onCreate(savedInstanceState);
57     }
58 
59     @CallSuper
60     @Override
onSaveInstanceState(Bundle outState)61     public void onSaveInstanceState(Bundle outState) {
62         super.onSaveInstanceState(outState);
63         mLifecycle.onSaveInstanceState(outState);
64     }
65 
66     @CallSuper
67     @Override
onStart()68     public void onStart() {
69         mLifecycle.handleLifecycleEvent(ON_START);
70         super.onStart();
71     }
72 
73     @CallSuper
74     @Override
onResume()75     public void onResume() {
76         mLifecycle.handleLifecycleEvent(ON_RESUME);
77         super.onResume();
78     }
79 
80     @CallSuper
81     @Override
onPause()82     public void onPause() {
83         mLifecycle.handleLifecycleEvent(ON_PAUSE);
84         super.onPause();
85     }
86 
87     @CallSuper
88     @Override
onStop()89     public void onStop() {
90         mLifecycle.handleLifecycleEvent(ON_STOP);
91         super.onStop();
92     }
93 
94     @CallSuper
95     @Override
onDestroy()96     public void onDestroy() {
97         mLifecycle.handleLifecycleEvent(ON_DESTROY);
98         super.onDestroy();
99     }
100 
101     @CallSuper
102     @Override
onCreateOptionsMenu(final Menu menu, final MenuInflater inflater)103     public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
104         mLifecycle.onCreateOptionsMenu(menu, inflater);
105         super.onCreateOptionsMenu(menu, inflater);
106     }
107 
108     @CallSuper
109     @Override
onPrepareOptionsMenu(final Menu menu)110     public void onPrepareOptionsMenu(final Menu menu) {
111         mLifecycle.onPrepareOptionsMenu(menu);
112         super.onPrepareOptionsMenu(menu);
113     }
114 
115     @CallSuper
116     @Override
onOptionsItemSelected(final MenuItem menuItem)117     public boolean onOptionsItemSelected(final MenuItem menuItem) {
118         boolean lifecycleHandled = mLifecycle.onOptionsItemSelected(menuItem);
119         if (!lifecycleHandled) {
120             return super.onOptionsItemSelected(menuItem);
121         }
122         return lifecycleHandled;
123     }
124 }
125