Loading packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +3 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; import static android.app.StatusBarManager.DISABLE_NONE; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import static com.android.systemui.util.SysuiLifecycle.viewAttachLifecycle; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.animation.ArgbEvaluator; Loading Loading @@ -166,6 +168,7 @@ public class BatteryMeterView extends LinearLayout implements setClipChildren(false); setClipToPadding(false); Dependency.get(ConfigurationController.class).observe(viewAttachLifecycle(this), this); } public void setForceShowPercent(boolean show) { Loading Loading @@ -289,7 +292,6 @@ public class BatteryMeterView extends LinearLayout implements Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser); updateShowPercent(); subscribeForTunerUpdates(); Dependency.get(ConfigurationController.class).addCallback(this); mUserTracker.startTracking(); } Loading @@ -300,7 +302,6 @@ public class BatteryMeterView extends LinearLayout implements mBatteryController.removeCallback(this); getContext().getContentResolver().unregisterContentObserver(mSettingObserver); unsubscribeFromTunerUpdates(); Dependency.get(ConfigurationController.class).removeCallback(this); } @Override Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +3 −4 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.annotation.IdRes; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.Fragment; import android.app.IActivityTaskManager; import android.app.StatusBarManager; import android.content.BroadcastReceiver; Loading Loading @@ -90,6 +89,7 @@ import com.android.systemui.statusbar.phone.ContextualButton.ContextButtonListen import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyButtonView; import com.android.systemui.util.LifecycleFragment; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -101,7 +101,7 @@ import java.util.function.Consumer; * Fragment containing the NavigationBarFragment. Contains logic for what happens * on clicks and view states of the nav bar. */ public class NavigationBarFragment extends Fragment implements Callbacks { public class NavigationBarFragment extends LifecycleFragment implements Callbacks { public static final String TAG = "NavigationBar"; private static final boolean DEBUG = false; Loading Loading @@ -199,7 +199,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCommandQueue = SysUiServiceProvider.getComponent(getContext(), CommandQueue.class); mCommandQueue.addCallback(this); mCommandQueue.observe(getLifecycle(), this); mStatusBar = SysUiServiceProvider.getComponent(getContext(), StatusBar.class); mRecents = SysUiServiceProvider.getComponent(getContext(), Recents.class); mDivider = SysUiServiceProvider.getComponent(getContext(), Divider.class); Loading @@ -225,7 +225,6 @@ public class NavigationBarFragment extends Fragment implements Callbacks { @Override public void onDestroy() { super.onDestroy(); mCommandQueue.removeCallback(this); Dependency.get(AccessibilityManagerWrapper.class).removeCallback( mAccessibilityListener); mContentResolver.unregisterContentObserver(mMagnificationObserver); Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackController.java +31 −2 Original line number Diff line number Diff line /* * Copyright (C) 2016 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 * 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 * Loading @@ -14,7 +15,35 @@ package com.android.systemui.statusbar.policy; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle.Event; import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleOwner; public interface CallbackController<T> { void addCallback(T listener); void removeCallback(T listener); /** * Wrapper to {@link #addCallback(Object)} when a lifecycle is in the resumed state * and {@link #removeCallback(Object)} when not resumed automatically. */ default T observe(LifecycleOwner owner, T listener) { return observe(owner.getLifecycle(), listener); } /** * Wrapper to {@link #addCallback(Object)} when a lifecycle is in the resumed state * and {@link #removeCallback(Object)} when not resumed automatically. */ default T observe(Lifecycle lifecycle, T listener) { lifecycle.addObserver((LifecycleEventObserver) (lifecycleOwner, event) -> { if (event == Event.ON_RESUME) { addCallback(listener); } else if (event == Event.ON_PAUSE) { removeCallback(listener); } }); return listener; } } packages/SystemUI/src/com/android/systemui/util/LifecycleFragment.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.systemui.util; 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.app.Fragment; import android.os.Bundle; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; /** * Version of {@link #Fragment} that is a {@link LifecycleOwner}. */ public class LifecycleFragment extends Fragment implements LifecycleOwner { private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); public Lifecycle getLifecycle() { return mLifecycle; } @CallSuper @Override public void onCreate(Bundle savedInstanceState) { mLifecycle.handleLifecycleEvent(ON_CREATE); super.onCreate(savedInstanceState); } @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(); } } packages/SystemUI/src/com/android/systemui/util/SysuiLifecycle.java 0 → 100644 +69 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.systemui.util; import static androidx.lifecycle.Lifecycle.State.DESTROYED; import static androidx.lifecycle.Lifecycle.State.RESUMED; import android.view.View; import android.view.View.OnAttachStateChangeListener; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; /** * Tools for generating lifecycle from sysui objects. */ public class SysuiLifecycle { private SysuiLifecycle() { } /** * Get a lifecycle that will be put into the resumed state when the view is attached * and goes to the destroyed state when the view is detached. */ public static LifecycleOwner viewAttachLifecycle(View v) { return new ViewLifecycle(v); } private static class ViewLifecycle implements LifecycleOwner, OnAttachStateChangeListener { private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); ViewLifecycle(View v) { v.addOnAttachStateChangeListener(this); } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } @Override public void onViewAttachedToWindow(View v) { mLifecycle.markState(RESUMED); } @Override public void onViewDetachedFromWindow(View v) { mLifecycle.markState(DESTROYED); } } } Loading
packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +3 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; import static android.app.StatusBarManager.DISABLE_NONE; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import static com.android.systemui.util.SysuiLifecycle.viewAttachLifecycle; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.animation.ArgbEvaluator; Loading Loading @@ -166,6 +168,7 @@ public class BatteryMeterView extends LinearLayout implements setClipChildren(false); setClipToPadding(false); Dependency.get(ConfigurationController.class).observe(viewAttachLifecycle(this), this); } public void setForceShowPercent(boolean show) { Loading Loading @@ -289,7 +292,6 @@ public class BatteryMeterView extends LinearLayout implements Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser); updateShowPercent(); subscribeForTunerUpdates(); Dependency.get(ConfigurationController.class).addCallback(this); mUserTracker.startTracking(); } Loading @@ -300,7 +302,6 @@ public class BatteryMeterView extends LinearLayout implements mBatteryController.removeCallback(this); getContext().getContentResolver().unregisterContentObserver(mSettingObserver); unsubscribeFromTunerUpdates(); Dependency.get(ConfigurationController.class).removeCallback(this); } @Override Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +3 −4 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.annotation.IdRes; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.Fragment; import android.app.IActivityTaskManager; import android.app.StatusBarManager; import android.content.BroadcastReceiver; Loading Loading @@ -90,6 +89,7 @@ import com.android.systemui.statusbar.phone.ContextualButton.ContextButtonListen import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyButtonView; import com.android.systemui.util.LifecycleFragment; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -101,7 +101,7 @@ import java.util.function.Consumer; * Fragment containing the NavigationBarFragment. Contains logic for what happens * on clicks and view states of the nav bar. */ public class NavigationBarFragment extends Fragment implements Callbacks { public class NavigationBarFragment extends LifecycleFragment implements Callbacks { public static final String TAG = "NavigationBar"; private static final boolean DEBUG = false; Loading Loading @@ -199,7 +199,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCommandQueue = SysUiServiceProvider.getComponent(getContext(), CommandQueue.class); mCommandQueue.addCallback(this); mCommandQueue.observe(getLifecycle(), this); mStatusBar = SysUiServiceProvider.getComponent(getContext(), StatusBar.class); mRecents = SysUiServiceProvider.getComponent(getContext(), Recents.class); mDivider = SysUiServiceProvider.getComponent(getContext(), Divider.class); Loading @@ -225,7 +225,6 @@ public class NavigationBarFragment extends Fragment implements Callbacks { @Override public void onDestroy() { super.onDestroy(); mCommandQueue.removeCallback(this); Dependency.get(AccessibilityManagerWrapper.class).removeCallback( mAccessibilityListener); mContentResolver.unregisterContentObserver(mMagnificationObserver); Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackController.java +31 −2 Original line number Diff line number Diff line /* * Copyright (C) 2016 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 * 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 * Loading @@ -14,7 +15,35 @@ package com.android.systemui.statusbar.policy; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle.Event; import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleOwner; public interface CallbackController<T> { void addCallback(T listener); void removeCallback(T listener); /** * Wrapper to {@link #addCallback(Object)} when a lifecycle is in the resumed state * and {@link #removeCallback(Object)} when not resumed automatically. */ default T observe(LifecycleOwner owner, T listener) { return observe(owner.getLifecycle(), listener); } /** * Wrapper to {@link #addCallback(Object)} when a lifecycle is in the resumed state * and {@link #removeCallback(Object)} when not resumed automatically. */ default T observe(Lifecycle lifecycle, T listener) { lifecycle.addObserver((LifecycleEventObserver) (lifecycleOwner, event) -> { if (event == Event.ON_RESUME) { addCallback(listener); } else if (event == Event.ON_PAUSE) { removeCallback(listener); } }); return listener; } }
packages/SystemUI/src/com/android/systemui/util/LifecycleFragment.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.systemui.util; 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.app.Fragment; import android.os.Bundle; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; /** * Version of {@link #Fragment} that is a {@link LifecycleOwner}. */ public class LifecycleFragment extends Fragment implements LifecycleOwner { private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); public Lifecycle getLifecycle() { return mLifecycle; } @CallSuper @Override public void onCreate(Bundle savedInstanceState) { mLifecycle.handleLifecycleEvent(ON_CREATE); super.onCreate(savedInstanceState); } @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(); } }
packages/SystemUI/src/com/android/systemui/util/SysuiLifecycle.java 0 → 100644 +69 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.systemui.util; import static androidx.lifecycle.Lifecycle.State.DESTROYED; import static androidx.lifecycle.Lifecycle.State.RESUMED; import android.view.View; import android.view.View.OnAttachStateChangeListener; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; /** * Tools for generating lifecycle from sysui objects. */ public class SysuiLifecycle { private SysuiLifecycle() { } /** * Get a lifecycle that will be put into the resumed state when the view is attached * and goes to the destroyed state when the view is detached. */ public static LifecycleOwner viewAttachLifecycle(View v) { return new ViewLifecycle(v); } private static class ViewLifecycle implements LifecycleOwner, OnAttachStateChangeListener { private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); ViewLifecycle(View v) { v.addOnAttachStateChangeListener(this); } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } @Override public void onViewAttachedToWindow(View v) { mLifecycle.markState(RESUMED); } @Override public void onViewDetachedFromWindow(View v) { mLifecycle.markState(DESTROYED); } } }