1a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang/*
2a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * Copyright (C) 2016 The Android Open Source Project
3a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang *
4a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * you may not use this file except in compliance with the License.
6a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * You may obtain a copy of the License at
7a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang *
8a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang *
10a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * Unless required by applicable law or agreed to in writing, software
11a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * See the License for the specific language governing permissions and
14a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang * limitations under the License.
15a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang */
16a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
1734cfd2e24f748d5f723023eb12e1e111229a136eDoris Lingpackage com.android.settings.language;
18a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
191d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static com.google.common.truth.Truth.assertThat;
201d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Matchers.any;
211d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.doReturn;
221d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.mock;
231d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.spy;
241d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.times;
251d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.verify;
261d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport static org.mockito.Mockito.when;
271d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler
283720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.app.Activity;
292a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhangimport android.app.admin.DevicePolicyManager;
3022a39c2b93bc66db71238274a7683d329232d124James Lemieuximport android.arch.lifecycle.LifecycleObserver;
313720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.content.ComponentName;
322bc94d62713df640559ea9d21a3d54eb28886f5aSean Stoutimport android.content.ContentResolver;
33a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport android.content.Context;
343720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.content.pm.PackageManager;
354e34839a1e988f4dd8948071367c8f12c9a37b1eFan Zhangimport android.content.res.Resources;
36a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport android.hardware.input.InputManager;
373a32ee6132e1020b302062d9f3b0bdc4f3cfb2afFan Zhangimport android.os.UserManager;
383720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.provider.Settings;
394619ae065235f759789641f4622609491151e872Philip P. Moltmannimport android.view.autofill.AutofillManager;
403720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.view.inputmethod.InputMethodInfo;
413720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport android.view.inputmethod.InputMethodManager;
4234cfd2e24f748d5f723023eb12e1e111229a136eDoris Lingimport android.view.textservice.TextServicesManager;
43a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
44a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport com.android.settings.R;
453720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport com.android.settings.dashboard.SummaryLoader;
461d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settings.testutils.SettingsRobolectricTestRunner;
47742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritzeimport com.android.settings.testutils.XmlTestUtils;
481d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController;
49777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle;
50a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
51a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.junit.Before;
52a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.junit.Test;
53a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.junit.runner.RunWith;
54a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.mockito.Answers;
55a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.mockito.Mock;
56a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport org.mockito.MockitoAnnotations;
57742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritzeimport org.robolectric.RuntimeEnvironment;
58a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
593720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhangimport java.util.ArrayList;
60a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhangimport java.util.List;
61a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
62a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang@RunWith(SettingsRobolectricTestRunner.class)
6334cfd2e24f748d5f723023eb12e1e111229a136eDoris Lingpublic class LanguageAndInputSettingsTest {
64a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
65a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
667e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling    private Activity mActivity;
673720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    @Mock
683720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    private PackageManager mPackageManager;
693720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    @Mock
702a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    private InputManager mIm;
712a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    @Mock
722a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    private InputMethodManager mImm;
732a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    @Mock
742a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    private DevicePolicyManager mDpm;
752a9255b33c3a36bad699375e9d36ed9395583bdcFan Zhang    @Mock
763720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    private InputMethodManager mInputMethodManager;
774619ae065235f759789641f4622609491151e872Philip P. Moltmann    @Mock
784619ae065235f759789641f4622609491151e872Philip P. Moltmann    private AutofillManager mAutofillManager;
79a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    private TestFragment mFragment;
80a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
81a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    @Before
82a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    public void setUp() {
83a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        MockitoAnnotations.initMocks(this);
847e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mock(UserManager.class));
857e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.INPUT_SERVICE))
867e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling                .thenReturn(mock(InputManager.class));
877e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.INPUT_SERVICE)).thenReturn(mIm);
887e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE))
893720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang                .thenReturn(mock(TextServicesManager.class));
907e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(mDpm);
917e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when(mActivity.getSystemService(Context.INPUT_METHOD_SERVICE)).thenReturn(mImm);
927e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        when((Object) mActivity.getSystemService(AutofillManager.class))
934619ae065235f759789641f4622609491151e872Philip P. Moltmann                .thenReturn(mAutofillManager);
947e06ed21053f2434bd16784b2f0f4640f0df950fDoris Ling        mFragment = new TestFragment(mActivity);
95a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    }
96a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
97a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    @Test
98a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    public void testGetPreferenceScreenResId() {
9934cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling        assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.language_and_input);
100a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    }
101a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
102a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    @Test
103a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    public void testGetPreferenceControllers_shouldRegisterLifecycleObservers() {
1041d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler        final List<AbstractPreferenceController> controllers =
105f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang                mFragment.createPreferenceControllers(mActivity);
106a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        int lifecycleObserverCount = 0;
1071d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler        for (AbstractPreferenceController controller : controllers) {
108a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            if (controller instanceof LifecycleObserver) {
109a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang                lifecycleObserverCount++;
110a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            }
111a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        }
112a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        verify(mFragment.getLifecycle(), times(lifecycleObserverCount))
113a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang                .addObserver(any(LifecycleObserver.class));
114a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    }
115a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
11634cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling    @Test
11734cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling    public void testGetPreferenceControllers_shouldAllBeCreated() {
1181d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler        final List<AbstractPreferenceController> controllers =
119f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang                mFragment.createPreferenceControllers(mActivity);
12034cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling
12134cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling        assertThat(controllers.isEmpty()).isFalse();
12234cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling    }
12334cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling
1243720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    @Test
1253720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    public void testSummary_shouldSetToCurrentImeName() {
1263720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        final Activity activity = mock(Activity.class);
1273720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        final SummaryLoader loader = mock(SummaryLoader.class);
1283720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        final ComponentName componentName = new ComponentName("pkg", "cls");
1292bc94d62713df640559ea9d21a3d54eb28886f5aSean Stout        final ContentResolver cr = activity.getContentResolver();
1302bc94d62713df640559ea9d21a3d54eb28886f5aSean Stout        Settings.Secure.putString(cr, Settings.Secure.DEFAULT_INPUT_METHOD,
1313720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang                componentName.flattenToString());
1323720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        when(activity.getSystemService(Context.INPUT_METHOD_SERVICE))
1333720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang                .thenReturn(mInputMethodManager);
1343720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        when(activity.getPackageManager()).thenReturn(mPackageManager);
1353720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        final List<InputMethodInfo> imis = new ArrayList<>();
1363720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        imis.add(mock(InputMethodInfo.class));
1373720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        when(imis.get(0).getPackageName()).thenReturn(componentName.getPackageName());
1383720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        when(mInputMethodManager.getInputMethodList()).thenReturn(imis);
1393720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang
14022a39c2b93bc66db71238274a7683d329232d124James Lemieux        SummaryLoader.SummaryProvider provider = LanguageAndInputSettings.SUMMARY_PROVIDER_FACTORY
1413720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang                .createSummaryProvider(activity, loader);
1423720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang
1433720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        provider.setListening(true);
1443720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang
1453720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        verify(imis.get(0)).loadLabel(mPackageManager);
1463720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang        verify(loader).setSummary(provider, null);
1473720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang    }
1483720e0c4f1005242ff3b368b8f917eb5ca7d398bFan Zhang
149742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    @Test
150742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    public void testNonIndexableKeys_existInXmlLayout() {
151742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        final Context context = spy(RuntimeEnvironment.application);
1524e34839a1e988f4dd8948071367c8f12c9a37b1eFan Zhang        final Resources res = spy(RuntimeEnvironment.application.getResources());
15374c321a481e467748bc9c077daf2749c7162b321jeffreyhuang        final InputManager inputManager = mock(InputManager.class);
15474c321a481e467748bc9c077daf2749c7162b321jeffreyhuang        final TextServicesManager textServicesManager = mock(TextServicesManager.class);
15522a39c2b93bc66db71238274a7683d329232d124James Lemieux        when(inputManager.getInputDeviceIds()).thenReturn(new int[0]);
15674c321a481e467748bc9c077daf2749c7162b321jeffreyhuang        doReturn(inputManager).when(context).getSystemService(Context.INPUT_SERVICE);
15722a39c2b93bc66db71238274a7683d329232d124James Lemieux        doReturn(textServicesManager).when(context)
15822a39c2b93bc66db71238274a7683d329232d124James Lemieux            .getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
1594e34839a1e988f4dd8948071367c8f12c9a37b1eFan Zhang        doReturn(res).when(context).getResources();
1604e34839a1e988f4dd8948071367c8f12c9a37b1eFan Zhang        doReturn(false).when(res)
16174c321a481e467748bc9c077daf2749c7162b321jeffreyhuang                .getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys);
16222a39c2b93bc66db71238274a7683d329232d124James Lemieux        final List<String> niks =
16322a39c2b93bc66db71238274a7683d329232d124James Lemieux            LanguageAndInputSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context);
1646f60cddc9e4f9dfd932181765d6b75b2040b0ad7Doris Ling        LanguageAndInputSettings settings = new LanguageAndInputSettings();
1656f60cddc9e4f9dfd932181765d6b75b2040b0ad7Doris Ling        final int xmlId = settings.getPreferenceScreenResId();
166742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
167742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
168742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
169742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        assertThat(keys).containsAllIn(niks);
170742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    }
171742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
172742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    @Test
173742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    public void testPreferenceControllers_getPreferenceKeys_existInPreferenceScreen() {
17474c321a481e467748bc9c077daf2749c7162b321jeffreyhuang        final Context context = spy(RuntimeEnvironment.application);
17574c321a481e467748bc9c077daf2749c7162b321jeffreyhuang        final TextServicesManager textServicesManager = mock(TextServicesManager.class);
17622a39c2b93bc66db71238274a7683d329232d124James Lemieux        doReturn(textServicesManager).when(context)
17722a39c2b93bc66db71238274a7683d329232d124James Lemieux            .getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
178742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        final LanguageAndInputSettings fragment = new LanguageAndInputSettings();
17922a39c2b93bc66db71238274a7683d329232d124James Lemieux        final List<String> preferenceScreenKeys =
18022a39c2b93bc66db71238274a7683d329232d124James Lemieux            XmlTestUtils.getKeysFromPreferenceXml(context, fragment.getPreferenceScreenResId());
181742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        final List<String> preferenceKeys = new ArrayList<>();
182742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
183f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang        for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
184742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze            preferenceKeys.add(controller.getPreferenceKey());
185742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        }
186742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
187742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
188742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    }
189742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze
190b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    /**
191b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang     * Test fragment to expose lifecycle and context so we can verify behavior for observables.
192b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang     */
19334cfd2e24f748d5f723023eb12e1e111229a136eDoris Ling    public static class TestFragment extends LanguageAndInputSettings {
194a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
195a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        private Lifecycle mLifecycle;
196a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        private Context mContext;
197a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
198a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        public TestFragment(Context context) {
199a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            mContext = context;
200a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            mLifecycle = mock(Lifecycle.class);
201a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        }
202a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
203a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        @Override
204a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        public Context getContext() {
205a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            return mContext;
206a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        }
207a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang
208a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        @Override
20994a7c7d21c7dea18400642463ff4fc7d75ad1923Tony Mantler        public Lifecycle getLifecycle() {
210a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            if (mLifecycle == null) {
211a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang                return super.getLifecycle();
212a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            }
213a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang            return mLifecycle;
214a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang        }
215a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang    }
216a1d1d67ce3bd3d88e4d8811717565201956af459Fan Zhang}
217