From f6a573530eb3f5ea4325efed3b98d2bdeb6f23f2 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Wed, 11 Sep 2024 22:50:36 +0800 Subject: [PATCH] Move ObservablePreferenceFragment class Bug: 365922551 Flag: EXEMPT Move class only Test: Presubmit Change-Id: I17851055b09d73b95e6adaafbe96f4375d5f637e --- Android.bp | 4 +- .../core/InstrumentedPreferenceFragment.java | 1 - .../core/ObservablePreferenceFragment.java | 137 ++++++++++++++++++ .../OwnerInfoPreferenceController.java | 2 +- .../OwnerInfoPreferenceControllerTest.java | 2 +- 5 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 src/com/android/settings/core/ObservablePreferenceFragment.java diff --git a/Android.bp b/Android.bp index 8b903ba91be..0a58ee8ea7c 100644 --- a/Android.bp +++ b/Android.bp @@ -94,8 +94,10 @@ android_library { "MediaDrmSettingsFlagsLib", "Settings-change-ids", "SettingsLib", - "SettingsLibDataStore", "SettingsLibActivityEmbedding", + "SettingsLibDataStore", + "SettingsLibMetadata", + "SettingsLibPreference", "aconfig_settings_flags_lib", "accessibility_settings_flags_lib", "contextualcards", diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java index 4d871d4c3ff..9b03e9b16e2 100644 --- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java +++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java @@ -37,7 +37,6 @@ import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.SettingsJankMonitor; import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin; -import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; /** * Instrumented fragment that logs visibility state. diff --git a/src/com/android/settings/core/ObservablePreferenceFragment.java b/src/com/android/settings/core/ObservablePreferenceFragment.java new file mode 100644 index 00000000000..997317dbc1a --- /dev/null +++ b/src/com/android/settings/core/ObservablePreferenceFragment.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.core; + + +import static androidx.lifecycle.Lifecycle.Event.ON_CREATE; +import static androidx.lifecycle.Lifecycle.Event.ON_DESTROY; +import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE; +import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; +import static androidx.lifecycle.Lifecycle.Event.ON_START; +import static androidx.lifecycle.Lifecycle.Event.ON_STOP; + +import android.annotation.CallSuper; +import android.content.Context; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import androidx.lifecycle.LifecycleOwner; +import androidx.preference.PreferenceScreen; + +import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.preference.PreferenceFragment; + +/** + * Preference fragment that has hooks to observe fragment lifecycle events. + */ +public abstract class ObservablePreferenceFragment extends PreferenceFragment + implements LifecycleOwner { + + private final Lifecycle mLifecycle = new Lifecycle(this); + + public Lifecycle getSettingsLifecycle() { + return mLifecycle; + } + + @CallSuper + @Override + public void onAttach(Context context) { + super.onAttach(context); + mLifecycle.onAttach(context); + } + + @CallSuper + @Override + public void onCreate(Bundle savedInstanceState) { + mLifecycle.onCreate(savedInstanceState); + mLifecycle.handleLifecycleEvent(ON_CREATE); + super.onCreate(savedInstanceState); + } + + @Override + public void setPreferenceScreen(PreferenceScreen preferenceScreen) { + mLifecycle.setPreferenceScreen(preferenceScreen); + super.setPreferenceScreen(preferenceScreen); + } + + @CallSuper + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mLifecycle.onSaveInstanceState(outState); + } + + @CallSuper + @Override + public void onStart() { + mLifecycle.handleLifecycleEvent(ON_START); + super.onStart(); + } + + @CallSuper + @Override + public void onResume() { + mLifecycle.handleLifecycleEvent(ON_RESUME); + super.onResume(); + } + + @CallSuper + @Override + public void onPause() { + mLifecycle.handleLifecycleEvent(ON_PAUSE); + super.onPause(); + } + + @CallSuper + @Override + public void onStop() { + mLifecycle.handleLifecycleEvent(ON_STOP); + super.onStop(); + } + + @CallSuper + @Override + public void onDestroy() { + mLifecycle.handleLifecycleEvent(ON_DESTROY); + super.onDestroy(); + } + + @CallSuper + @Override + public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + mLifecycle.onCreateOptionsMenu(menu, inflater); + super.onCreateOptionsMenu(menu, inflater); + } + + @CallSuper + @Override + public void onPrepareOptionsMenu(final Menu menu) { + mLifecycle.onPrepareOptionsMenu(menu); + super.onPrepareOptionsMenu(menu); + } + + @CallSuper + @Override + public boolean onOptionsItemSelected(final MenuItem menuItem) { + boolean lifecycleHandled = mLifecycle.onOptionsItemSelected(menuItem); + if (!lifecycleHandled) { + return super.onOptionsItemSelected(menuItem); + } + return lifecycleHandled; + } +} diff --git a/src/com/android/settings/security/OwnerInfoPreferenceController.java b/src/com/android/settings/security/OwnerInfoPreferenceController.java index 248301671a0..67dbbc14738 100644 --- a/src/com/android/settings/security/OwnerInfoPreferenceController.java +++ b/src/com/android/settings/security/OwnerInfoPreferenceController.java @@ -24,6 +24,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.core.ObservablePreferenceFragment; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.users.OwnerInfoSettings; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; @@ -31,7 +32,6 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import com.android.settingslib.core.lifecycle.events.OnResume; public class OwnerInfoPreferenceController extends AbstractPreferenceController diff --git a/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java index 81f4fce1517..0db950be6de 100644 --- a/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java @@ -36,11 +36,11 @@ import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.core.ObservablePreferenceFragment; import com.android.settings.users.OwnerInfoSettings; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import org.junit.Before; import org.junit.Test;