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.annotation.Nullable;
26 import android.app.Activity;
27 import android.os.Bundle;
28 import android.os.PersistableBundle;
29 import android.view.Menu;
30 import android.view.MenuItem;
31 
32 import androidx.fragment.app.FragmentActivity;
33 import androidx.lifecycle.LifecycleOwner;
34 
35 /**
36  * {@link Activity} that has hooks to observe activity lifecycle events.
37  */
38 public class ObservableActivity extends FragmentActivity implements LifecycleOwner {
39 
40     private final Lifecycle mLifecycle = new Lifecycle(this);
41 
getSettingsLifecycle()42     public Lifecycle getSettingsLifecycle() {
43         return mLifecycle;
44     }
45 
46     @Override
onCreate(@ullable Bundle savedInstanceState)47     protected void onCreate(@Nullable Bundle savedInstanceState) {
48         mLifecycle.onAttach(this);
49         mLifecycle.onCreate(savedInstanceState);
50         mLifecycle.handleLifecycleEvent(ON_CREATE);
51         super.onCreate(savedInstanceState);
52     }
53 
54     @Override
onCreate(@ullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState)55     public void onCreate(@Nullable Bundle savedInstanceState,
56             @Nullable PersistableBundle persistentState) {
57         mLifecycle.onAttach(this);
58         mLifecycle.onCreate(savedInstanceState);
59         mLifecycle.handleLifecycleEvent(ON_CREATE);
60         super.onCreate(savedInstanceState, persistentState);
61     }
62 
63     @Override
onStart()64     protected void onStart() {
65         mLifecycle.handleLifecycleEvent(ON_START);
66         super.onStart();
67     }
68 
69     @Override
onResume()70     protected void onResume() {
71         mLifecycle.handleLifecycleEvent(ON_RESUME);
72         super.onResume();
73     }
74 
75     @Override
onPause()76     protected void onPause() {
77         mLifecycle.handleLifecycleEvent(ON_PAUSE);
78         super.onPause();
79     }
80 
81     @Override
onStop()82     protected void onStop() {
83         mLifecycle.handleLifecycleEvent(ON_STOP);
84         super.onStop();
85     }
86 
87     @Override
onDestroy()88     protected void onDestroy() {
89         mLifecycle.handleLifecycleEvent(ON_DESTROY);
90         super.onDestroy();
91     }
92 
93     @Override
onCreateOptionsMenu(final Menu menu)94     public boolean onCreateOptionsMenu(final Menu menu) {
95         if (super.onCreateOptionsMenu(menu)) {
96             mLifecycle.onCreateOptionsMenu(menu, null);
97             return true;
98         }
99         return false;
100     }
101 
102     @Override
onPrepareOptionsMenu(final Menu menu)103     public boolean onPrepareOptionsMenu(final Menu menu) {
104         if (super.onPrepareOptionsMenu(menu)) {
105             mLifecycle.onPrepareOptionsMenu(menu);
106             return true;
107         }
108         return false;
109     }
110 
111     @Override
onOptionsItemSelected(final MenuItem menuItem)112     public boolean onOptionsItemSelected(final MenuItem menuItem) {
113         boolean lifecycleHandled = mLifecycle.onOptionsItemSelected(menuItem);
114         if (!lifecycleHandled) {
115             return super.onOptionsItemSelected(menuItem);
116         }
117         return lifecycleHandled;
118     }
119 }
120