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 {
private final long mNativeListener;
private long mNativeListener;
private final Executor mExecutor;
public CompositionSamplingListener(Executor executor) {
@@ -37,13 +37,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();
}
@@ -59,6 +65,9 @@ public abstract class CompositionSamplingListener {
*/
public static void register(CompositionSamplingListener listener,
int displayId, IBinder stopLayer, Rect samplingArea) {
if (listener.mNativeListener == 0) {
return;
}
Preconditions.checkArgument(displayId == Display.DEFAULT_DISPLAY,
"default display only for now");
nativeRegister(listener.mNativeListener, stopLayer, samplingArea.left, samplingArea.top,
@@ -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

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

View File

@@ -137,6 +137,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;
@@ -253,6 +254,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
mAssistManager = assistManager;
mAssistantAvailable = mAssistManager.getAssistInfoForUser(UserHandle.USER_CURRENT) != null;
mOverviewProxyService = overviewProxyService;
mNavigationModeController = navigationModeController;
mNavBarMode = navigationModeController.addListener(this);
}
@@ -292,6 +294,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