Commit acbc5e46 authored by Theresa's avatar Theresa Committed by Commit Bot

[Feed] Unregister contextMenuListener and make BasicSnackbarApi static

The FeedNewTabPage previously added a context menu close listener to the
WindowAndroid without removing it, causing a memory leak. Remove the
context menu close listener in #destroy().

Also make BasicSnackbarApi static so that if the Feed session cache
holds on to it the entire FeedNewTabPage isn't kept in memory.

BUG=881954

Change-Id: I55c86e66c785c7ce70157454575a16bd8e5d15c6
Reviewed-on: https://chromium-review.googlesource.com/1217102Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Commit-Queue: Theresa <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589996}
parent 93e725af
......@@ -59,6 +59,7 @@ public class FeedNewTabPage extends NewTabPage {
private UiConfig mUiConfig;
private FrameLayout mRootView;
private ContextMenuManager mContextMenuManager;
// Used when Feed is enabled.
private @Nullable Stream mStream;
......@@ -69,12 +70,18 @@ public class FeedNewTabPage extends NewTabPage {
// Used when Feed is disabled by policy.
private @Nullable ScrollView mScrollViewForPolicy;
private class BasicSnackbarApi implements SnackbarApi {
private static class BasicSnackbarApi implements SnackbarApi {
private final SnackbarManager mManager;
public BasicSnackbarApi(SnackbarManager manager) {
mManager = manager;
}
@Override
public void show(String message) {
mNewTabPageManager.getSnackbarManager().showSnackbar(
Snackbar.make(message, new SnackbarManager.SnackbarController() {},
Snackbar.TYPE_ACTION, Snackbar.UMA_FEED_NTP_STREAM));
mManager.showSnackbar(Snackbar.make(message,
new SnackbarManager.SnackbarController() {}, Snackbar.TYPE_ACTION,
Snackbar.UMA_FEED_NTP_STREAM));
}
}
......@@ -193,15 +200,15 @@ public class FeedNewTabPage extends NewTabPage {
// is reparented.
// TODO(twellington): Move this somewhere it can be shared with NewTabPageView?
Runnable closeContextMenuCallback = () -> mTab.getActivity().closeContextMenu();
ContextMenuManager contextMenuManager =
mContextMenuManager =
new ContextMenuManager(mNewTabPageManager.getNavigationDelegate(), mMediator,
closeContextMenuCallback, false);
mTab.getWindowAndroid().addContextMenuCloseListener(contextMenuManager);
mTab.getWindowAndroid().addContextMenuCloseListener(mContextMenuManager);
mNewTabPageLayout.initialize(mNewTabPageManager, mTab, mTileGroupDelegate,
mSearchProviderHasLogo,
TemplateUrlService.getInstance().isDefaultSearchEngineGoogle(), mMediator,
contextMenuManager, mUiConfig);
mContextMenuManager, mUiConfig);
}
@Override
......@@ -220,6 +227,7 @@ public class FeedNewTabPage extends NewTabPage {
mMediator.destroy();
if (mImageLoader != null) mImageLoader.destroy();
if (mStreamLifecycleManager != null) mStreamLifecycleManager.destroy();
mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager);
}
@Override
......@@ -276,7 +284,8 @@ public class FeedNewTabPage extends NewTabPage {
.createFeedStreamScopeBuilder(activity, mImageLoader, actionApi,
new BasicStreamConfiguration(),
new BasicCardConfiguration(activity.getResources(), mUiConfig),
new BasicSnackbarApi(), new FeedBasicLogging(), offlineIndicator)
new BasicSnackbarApi(mNewTabPageManager.getSnackbarManager()),
new FeedBasicLogging(), offlineIndicator)
.build();
mStream = streamScope.getStream();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment