Merge "Fix nav bar leak in SystemUI" into qt-qpr1-dev

This commit is contained in:
Winson Chung
2019-12-12 21:27:08 +00:00
committed by Android (Google) Code Review
4 changed files with 32 additions and 10 deletions

View File

@@ -29,7 +29,7 @@ import java.util.concurrent.Executor;
*/ */
public abstract class CompositionSamplingListener { public abstract class CompositionSamplingListener {
private final long mNativeListener; private long mNativeListener;
private final Executor mExecutor; private final Executor mExecutor;
public CompositionSamplingListener(Executor executor) { public CompositionSamplingListener(Executor executor) {
@@ -37,13 +37,19 @@ public abstract class CompositionSamplingListener {
mNativeListener = nativeCreate(this); mNativeListener = nativeCreate(this);
} }
public void destroy() {
if (mNativeListener == 0) {
return;
}
unregister(this);
nativeDestroy(mNativeListener);
mNativeListener = 0;
}
@Override @Override
protected void finalize() throws Throwable { protected void finalize() throws Throwable {
try { try {
if (mNativeListener != 0) { destroy();
unregister(this);
nativeDestroy(mNativeListener);
}
} finally { } finally {
super.finalize(); super.finalize();
} }
@@ -59,6 +65,9 @@ public abstract class CompositionSamplingListener {
*/ */
public static void register(CompositionSamplingListener listener, public static void register(CompositionSamplingListener listener,
int displayId, IBinder stopLayer, Rect samplingArea) { int displayId, IBinder stopLayer, Rect samplingArea) {
if (listener.mNativeListener == 0) {
return;
}
Preconditions.checkArgument(displayId == Display.DEFAULT_DISPLAY, Preconditions.checkArgument(displayId == Display.DEFAULT_DISPLAY,
"default display only for now"); "default display only for now");
nativeRegister(listener.mNativeListener, stopLayer, samplingArea.left, samplingArea.top, nativeRegister(listener.mNativeListener, stopLayer, samplingArea.left, samplingArea.top,
@@ -69,6 +78,9 @@ public abstract class CompositionSamplingListener {
* Unregisters a sampling listener. * Unregisters a sampling listener.
*/ */
public static void unregister(CompositionSamplingListener listener) { public static void unregister(CompositionSamplingListener listener) {
if (listener.mNativeListener == 0) {
return;
}
nativeUnregister(listener.mNativeListener); nativeUnregister(listener.mNativeListener);
} }

View File

@@ -107,6 +107,11 @@ public class NavBarTintController implements View.OnAttachStateChangeListener,
requestUpdateSamplingListener(); requestUpdateSamplingListener();
} }
void stopAndDestroy() {
stop();
mSamplingListener.destroy();
}
@Override @Override
public void onViewAttachedToWindow(View view) { public void onViewAttachedToWindow(View view) {
requestUpdateSamplingListener(); requestUpdateSamplingListener();
@@ -114,8 +119,7 @@ public class NavBarTintController implements View.OnAttachStateChangeListener,
@Override @Override
public void onViewDetachedFromWindow(View view) { public void onViewDetachedFromWindow(View view) {
// Defer calling updateSamplingListener the attach info has not yet been reset stopAndDestroy();
requestUpdateSamplingListener();
} }
@Override @Override

View File

@@ -137,6 +137,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
private final MetricsLogger mMetricsLogger; private final MetricsLogger mMetricsLogger;
private final DeviceProvisionedController mDeviceProvisionedController; private final DeviceProvisionedController mDeviceProvisionedController;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final NavigationModeController mNavigationModeController;
protected NavigationBarView mNavigationBarView = null; protected NavigationBarView mNavigationBarView = null;
@@ -253,6 +254,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
mAssistManager = assistManager; mAssistManager = assistManager;
mAssistantAvailable = mAssistManager.getAssistInfoForUser(UserHandle.USER_CURRENT) != null; mAssistantAvailable = mAssistManager.getAssistInfoForUser(UserHandle.USER_CURRENT) != null;
mOverviewProxyService = overviewProxyService; mOverviewProxyService = overviewProxyService;
mNavigationModeController = navigationModeController;
mNavBarMode = navigationModeController.addListener(this); mNavBarMode = navigationModeController.addListener(this);
} }
@@ -292,6 +294,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
mNavigationModeController.removeListener(this);
mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener); mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener);
mContentResolver.unregisterContentObserver(mMagnificationObserver); mContentResolver.unregisterContentObserver(mMagnificationObserver);
mContentResolver.unregisterContentObserver(mAssistContentObserver); mContentResolver.unregisterContentObserver(mAssistContentObserver);

View File

@@ -127,6 +127,11 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
updateSamplingListener(); updateSamplingListener();
} }
void stopAndDestroy() {
stop();
mSamplingListener.destroy();
}
@Override @Override
public void onViewAttachedToWindow(View view) { public void onViewAttachedToWindow(View view) {
updateSamplingListener(); updateSamplingListener();
@@ -134,9 +139,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
@Override @Override
public void onViewDetachedFromWindow(View view) { public void onViewDetachedFromWindow(View view) {
// isAttachedToWindow is only changed after this call to the listeners, so let's post it stopAndDestroy();
// instead
postUpdateSamplingListener();
} }
@Override @Override