Merge "Fix nav bar leak in SystemUI"

This commit is contained in:
Winson Chung
2019-09-26 16:28:41 +00:00
committed by Android (Google) Code Review
3 changed files with 26 additions and 8 deletions

View File

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

View File

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

View File

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