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 package com.android.settingslib.core.lifecycle;
17 
18 import static androidx.lifecycle.Lifecycle.Event.ON_CREATE;
19 import static androidx.lifecycle.Lifecycle.Event.ON_DESTROY;
20 import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
21 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
22 import static androidx.lifecycle.Lifecycle.Event.ON_START;
23 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
24 
25 import android.content.Context;
26 import android.os.Bundle;
27 import android.view.Menu;
28 import android.view.MenuInflater;
29 import android.view.MenuItem;
30 
31 import androidx.fragment.app.DialogFragment;
32 import androidx.lifecycle.LifecycleOwner;
33 
34 /**
35  * {@link DialogFragment} that has hooks to observe fragment lifecycle events.
36  */
37 public class ObservableDialogFragment extends DialogFragment implements LifecycleOwner {
38 
39     protected final Lifecycle mLifecycle = new Lifecycle(this);
40 
getSettingsLifecycle()41     public Lifecycle getSettingsLifecycle() {
42         return mLifecycle;
43     }
44 
45     @Override
onAttach(Context context)46     public void onAttach(Context context) {
47         super.onAttach(context);
48         mLifecycle.onAttach(context);
49     }
50 
51     @Override
onCreate(Bundle savedInstanceState)52     public void onCreate(Bundle savedInstanceState) {
53         mLifecycle.onCreate(savedInstanceState);
54         mLifecycle.handleLifecycleEvent(ON_CREATE);
55         super.onCreate(savedInstanceState);
56     }
57 
58     @Override
onStart()59     public void onStart() {
60         mLifecycle.handleLifecycleEvent(ON_START);
61         super.onStart();
62     }
63 
64     @Override
onResume()65     public void onResume() {
66         mLifecycle.handleLifecycleEvent(ON_RESUME);
67         super.onResume();
68     }
69 
70     @Override
onPause()71     public void onPause() {
72         mLifecycle.handleLifecycleEvent(ON_PAUSE);
73         super.onPause();
74     }
75 
76     @Override
onStop()77     public void onStop() {
78         mLifecycle.handleLifecycleEvent(ON_STOP);
79         super.onStop();
80     }
81 
82     @Override
onDestroy()83     public void onDestroy() {
84         mLifecycle.handleLifecycleEvent(ON_DESTROY);
85         super.onDestroy();
86     }
87 
88     @Override
onCreateOptionsMenu(final Menu menu, final MenuInflater inflater)89     public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
90         mLifecycle.onCreateOptionsMenu(menu, inflater);
91         super.onCreateOptionsMenu(menu, inflater);
92     }
93 
94     @Override
onPrepareOptionsMenu(final Menu menu)95     public void onPrepareOptionsMenu(final Menu menu) {
96         mLifecycle.onPrepareOptionsMenu(menu);
97         super.onPrepareOptionsMenu(menu);
98     }
99 
100     @Override
onOptionsItemSelected(final MenuItem menuItem)101     public boolean onOptionsItemSelected(final MenuItem menuItem) {
102         boolean lifecycleHandled = mLifecycle.onOptionsItemSelected(menuItem);
103         if (!lifecycleHandled) {
104             return super.onOptionsItemSelected(menuItem);
105         }
106         return lifecycleHandled;
107     }
108 }
109