Commit c99ee945 authored by Xing Liu's avatar Xing Liu Committed by Chromium LUCI CQ

Read later: Handle bottom sheet close.

Handles bottom sheet close correctly.

TBR=dtrainor@chromium.org

Bug: 1151001
Change-Id: Ibfd3c2b2a6de0552727a5cf80bb3a9170b99439b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2585540
Commit-Queue: Xing Liu <xingliu@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#835968}
parent 8684058f
......@@ -24,6 +24,8 @@ import org.chromium.chrome.browser.bookmarks.bottomsheet.BookmarkBottomSheetItem
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason;
import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.ui.modelutil.LayoutViewBuilder;
import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
......@@ -81,7 +83,14 @@ public class BookmarkBottomSheetCoordinator {
// Show the bottom sheet.
mBottomSheetContent = new BookmarkBottomSheetContent(
contentView, sheetItemListView::computeHorizontalScrollOffset);
mBottomSheetController.requestShowContent(mBottomSheetContent, /*animate=*/false);
mBottomSheetController.addObserver(new EmptyBottomSheetObserver() {
@Override
public void onSheetClosed(@StateChangeReason int reason) {
onBottomSheetClosed();
mBottomSheetController.removeObserver(this);
}
});
mBottomSheetController.requestShowContent(mBottomSheetContent, /*animate=*/true);
}
// Loads top level bookmark folders into a ModelList.
......@@ -131,9 +140,20 @@ public class BookmarkBottomSheetCoordinator {
}
private void onClick(BookmarkItem bookmarkItem) {
mBottomSheetController.hideContent(mBottomSheetContent, /*animate=*/false);
assert mCallback != null;
invokeCallback(bookmarkItem);
// This will result in onBottomSheetClosed() being called.
mBottomSheetController.hideContent(mBottomSheetContent, /*animate=*/true);
}
private void onBottomSheetClosed() {
invokeCallback(null);
}
private void invokeCallback(BookmarkItem bookmarkItem) {
if (mCallback == null) return;
mCallback.onResult(bookmarkItem);
mCallback = null;
}
@VisibleForTesting
......
......@@ -65,6 +65,7 @@ public class BookmarkBottomSheetTest {
private BottomSheetController mBottomSheetController;
private BookmarkModel mBookmarkModel;
private BookmarkItem mItemClicked;
private boolean mCallbackInvoked;
@Before
public void setUp() {
......@@ -87,18 +88,29 @@ public class BookmarkBottomSheetTest {
mItemClicked = null;
}
private void onBottomSheetClicked(BookmarkItem item) {
private void bottomSheetCallback(BookmarkItem item) {
mItemClicked = item;
mCallbackInvoked = true;
}
private void showBottomSheet() {
TestThreadUtils.runOnUiThreadBlocking(
() -> { mBottomSheetCoordinator.show(this::onBottomSheetClicked); });
() -> { mBottomSheetCoordinator.show(this::bottomSheetCallback); });
CriteriaHelper.pollUiThread(
() -> mBottomSheetController.getSheetState() == SheetState.FULL);
}
private void hideBottomSheet() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
mBottomSheetController.hideContent(
mBottomSheetCoordinator.getBottomSheetContentForTesting(), false);
});
CriteriaHelper.pollUiThread(
() -> mBottomSheetController.getSheetState() == SheetState.HIDDEN);
}
private void waitForBookmarkModelLoaded() {
// Must load partner bookmark backend, or the model will not be loaded.
TestThreadUtils.runOnUiThreadBlocking(
......@@ -188,4 +200,14 @@ public class BookmarkBottomSheetTest {
Assert.assertEquals(BookmarkType.READING_LIST, mItemClicked.getId().getType());
Assert.assertTrue(mItemClicked.isFolder());
}
@Test
@MediumTest
public void testBottomSheetCloseInvokeCallback() {
showBottomSheet();
onView(withText("Reading list")).check(matches(isDisplayed()));
hideBottomSheet();
Assert.assertNull(mItemClicked);
Assert.assertTrue(mCallbackInvoked);
}
}
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