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 ...@@ -24,6 +24,8 @@ import org.chromium.chrome.browser.bookmarks.bottomsheet.BookmarkBottomSheetItem
import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; 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.LayoutViewBuilder;
import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
...@@ -81,7 +83,14 @@ public class BookmarkBottomSheetCoordinator { ...@@ -81,7 +83,14 @@ public class BookmarkBottomSheetCoordinator {
// Show the bottom sheet. // Show the bottom sheet.
mBottomSheetContent = new BookmarkBottomSheetContent( mBottomSheetContent = new BookmarkBottomSheetContent(
contentView, sheetItemListView::computeHorizontalScrollOffset); 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. // Loads top level bookmark folders into a ModelList.
...@@ -131,9 +140,20 @@ public class BookmarkBottomSheetCoordinator { ...@@ -131,9 +140,20 @@ public class BookmarkBottomSheetCoordinator {
} }
private void onClick(BookmarkItem bookmarkItem) { private void onClick(BookmarkItem bookmarkItem) {
mBottomSheetController.hideContent(mBottomSheetContent, /*animate=*/false); invokeCallback(bookmarkItem);
assert mCallback != null;
// 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.onResult(bookmarkItem);
mCallback = null;
} }
@VisibleForTesting @VisibleForTesting
......
...@@ -65,6 +65,7 @@ public class BookmarkBottomSheetTest { ...@@ -65,6 +65,7 @@ public class BookmarkBottomSheetTest {
private BottomSheetController mBottomSheetController; private BottomSheetController mBottomSheetController;
private BookmarkModel mBookmarkModel; private BookmarkModel mBookmarkModel;
private BookmarkItem mItemClicked; private BookmarkItem mItemClicked;
private boolean mCallbackInvoked;
@Before @Before
public void setUp() { public void setUp() {
...@@ -87,18 +88,29 @@ public class BookmarkBottomSheetTest { ...@@ -87,18 +88,29 @@ public class BookmarkBottomSheetTest {
mItemClicked = null; mItemClicked = null;
} }
private void onBottomSheetClicked(BookmarkItem item) { private void bottomSheetCallback(BookmarkItem item) {
mItemClicked = item; mItemClicked = item;
mCallbackInvoked = true;
} }
private void showBottomSheet() { private void showBottomSheet() {
TestThreadUtils.runOnUiThreadBlocking( TestThreadUtils.runOnUiThreadBlocking(
() -> { mBottomSheetCoordinator.show(this::onBottomSheetClicked); }); () -> { mBottomSheetCoordinator.show(this::bottomSheetCallback); });
CriteriaHelper.pollUiThread( CriteriaHelper.pollUiThread(
() -> mBottomSheetController.getSheetState() == SheetState.FULL); () -> mBottomSheetController.getSheetState() == SheetState.FULL);
} }
private void hideBottomSheet() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
mBottomSheetController.hideContent(
mBottomSheetCoordinator.getBottomSheetContentForTesting(), false);
});
CriteriaHelper.pollUiThread(
() -> mBottomSheetController.getSheetState() == SheetState.HIDDEN);
}
private void waitForBookmarkModelLoaded() { private void waitForBookmarkModelLoaded() {
// Must load partner bookmark backend, or the model will not be loaded. // Must load partner bookmark backend, or the model will not be loaded.
TestThreadUtils.runOnUiThreadBlocking( TestThreadUtils.runOnUiThreadBlocking(
...@@ -188,4 +200,14 @@ public class BookmarkBottomSheetTest { ...@@ -188,4 +200,14 @@ public class BookmarkBottomSheetTest {
Assert.assertEquals(BookmarkType.READING_LIST, mItemClicked.getId().getType()); Assert.assertEquals(BookmarkType.READING_LIST, mItemClicked.getId().getType());
Assert.assertTrue(mItemClicked.isFolder()); 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