Merge "Fix nav bar leak in SystemUI" into qt-qpr1-dev am: d6e73ec8f1
Change-Id: I39643a2f6e7edc9af7221a295eb201cda3244534
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user