Commit 31ea038d authored by Xing Liu's avatar Xing Liu Committed by Commit Bot

Read later: Setup bookmark bottom sheet class structure.

This CL sets up the class structure for bookmark bottom sheet. Details
will be added in following CLs.

A instrumentation test is also added, which only contains a simple test
to check the bottom sheet opened with a title text view.

Bug: 1128074,1133496
Change-Id: I02d7a488ffa46e9ee4f6993003dfade8e7fbb3b1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2473078
Commit-Queue: Xing Liu <xingliu@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarBrandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824564}
parent 905887d7
...@@ -797,6 +797,7 @@ chrome_java_resources = [ ...@@ -797,6 +797,7 @@ chrome_java_resources = [
"java/res/layout/bluetooth_scanning_permission_dialog_row.xml", "java/res/layout/bluetooth_scanning_permission_dialog_row.xml",
"java/res/layout/bookmark_action_bar.xml", "java/res/layout/bookmark_action_bar.xml",
"java/res/layout/bookmark_add_edit_folder_activity.xml", "java/res/layout/bookmark_add_edit_folder_activity.xml",
"java/res/layout/bookmark_bottom_sheet.xml",
"java/res/layout/bookmark_edit.xml", "java/res/layout/bookmark_edit.xml",
"java/res/layout/bookmark_folder_row.xml", "java/res/layout/bookmark_folder_row.xml",
"java/res/layout/bookmark_folder_select_activity.xml", "java/res/layout/bookmark_folder_select_activity.xml",
......
...@@ -163,6 +163,8 @@ chrome_java_sources = [ ...@@ -163,6 +163,8 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java",
"java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java",
"java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java", "java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java",
"java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetContent.java",
"java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetCoordinator.java",
"java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetProvider.java", "java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetProvider.java",
"java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetProxy.java", "java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetProxy.java",
"java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java", "java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java",
......
...@@ -74,6 +74,7 @@ chrome_test_java_sources = [ ...@@ -74,6 +74,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java", "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java",
"javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java", "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java",
"javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java", "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java",
"javatests/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetTest.java",
"javatests/src/org/chromium/chrome/browser/browserservices/OriginVerifierTest.java", "javatests/src/org/chromium/chrome/browser/browserservices/OriginVerifierTest.java",
"javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java", "javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java",
"javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java", "javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java",
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/sheet_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bookmarks_bottom_sheet_title"
android:textAppearance="@style/TextAppearance.TextMedium.Secondary" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sheet_item_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.bookmarks.bottomsheet;
import android.view.View;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
/**
* Bookmark bottom sheet's implementation of {@link BottomSheetContent}.
*/
class BookmarkBottomSheetContent implements BottomSheetContent {
private final View mContentView;
private final Supplier<Integer> mScrollOffsetSupplier;
/**
* Constructs the bookmark bottom sheet view.
*/
BookmarkBottomSheetContent(View contentView, Supplier<Integer> scrollOffsetSupplier) {
mContentView = contentView;
mScrollOffsetSupplier = scrollOffsetSupplier;
}
// BottomSheetContent implementation.
@Override
public View getContentView() {
return mContentView;
}
@Override
public View getToolbarView() {
return null;
}
@Override
public int getVerticalScrollOffset() {
return mScrollOffsetSupplier.get();
}
@Override
public void destroy() {}
@Override
public int getPriority() {
return BottomSheetContent.ContentPriority.HIGH;
}
@Override
public int getPeekHeight() {
return BottomSheetContent.HeightMode.DISABLED;
}
@Override
public float getFullHeightRatio() {
return BottomSheetContent.HeightMode.WRAP_CONTENT;
}
@Override
public boolean swipeToDismissEnabled() {
return false;
}
@Override
public int getSheetContentDescriptionStringId() {
// TODO(xingliu): Add the correct accessibility strings.
return R.string.reading_list_title;
}
@Override
public int getSheetHalfHeightAccessibilityStringId() {
return R.string.reading_list_title;
}
@Override
public int getSheetFullHeightAccessibilityStringId() {
return R.string.reading_list_title;
}
@Override
public int getSheetClosedAccessibilityStringId() {
return R.string.reading_list_title;
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.bookmarks.bottomsheet;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
/**
* The coordinator used to show the bookmark bottom sheet when trying to add a bookmark. The bottom
* sheet contains a list of folders that the bookmark can be added to.
*/
public class BookmarkBottomSheetCoordinator {
private final BottomSheetController mBottomSheetController;
private final Context mContext;
private BookmarkBottomSheetContent mBottomSheetContent;
/**
* Constructs the bookmark bottom sheet.
* @param context The Android context that contains the bookmark bottom sheet.
* @param bottomSheetController The controller to perform operations on the bottom sheet.
*/
public BookmarkBottomSheetCoordinator(
Context context, @NonNull BottomSheetController bottomSheetController) {
mContext = context;
mBottomSheetController = bottomSheetController;
}
/**
* Shows the bookmark bottom sheet.
*/
public void show() {
View contentView = LayoutInflater.from(mContext).inflate(
org.chromium.chrome.R.layout.bookmark_bottom_sheet, /*root=*/null);
RecyclerView sheetItemListView =
contentView.findViewById(org.chromium.chrome.R.id.sheet_item_list);
// TODO(xingliu): Load actual top level bookmark folders.
sheetItemListView.setAdapter(new SimpleRecyclerViewAdapter(new ModelList()));
mBottomSheetContent = new BookmarkBottomSheetContent(
contentView, sheetItemListView::computeHorizontalScrollOffset);
mBottomSheetController.requestShowContent(mBottomSheetContent, /*animate=*/false);
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.bookmarks.bottomsheet;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import androidx.test.filters.MediumTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.SheetState;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
/**
* Test to verify bookmark bottom sheet.
*/
@RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class BookmarkBottomSheetTest {
@Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
private BookmarkBottomSheetCoordinator mBottomSheetCoordinator;
private BottomSheetController mBottomSheetController;
@Before
public void setUp() {
mActivityTestRule.startMainActivityOnBlankPage();
mBottomSheetController = mActivityTestRule.getActivity()
.getRootUiCoordinatorForTesting()
.getBottomSheetController();
mBottomSheetCoordinator = new BookmarkBottomSheetCoordinator(
mActivityTestRule.getActivity(), mBottomSheetController);
}
private void showBottomSheet() {
TestThreadUtils.runOnUiThreadBlocking(() -> { mBottomSheetCoordinator.show(); });
CriteriaHelper.pollUiThread(
() -> mBottomSheetController.getSheetState() == SheetState.FULL);
}
@Test
@MediumTest
public void testBottomSheetShow() {
showBottomSheet();
onView(withId(R.id.sheet_title)).check(matches(isDisplayed()));
}
}
...@@ -3034,6 +3034,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n ...@@ -3034,6 +3034,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
<message name="IDS_BOOKMARK_NO_RESULT" desc="Text explaining that no bookmarks are found to match a search query"> <message name="IDS_BOOKMARK_NO_RESULT" desc="Text explaining that no bookmarks are found to match a search query">
Can’t find that bookmark. Check your spelling or add a new bookmark. Can’t find that bookmark. Check your spelling or add a new bookmark.
</message> </message>
<message name="IDS_BOOKMARKS_BOTTOM_SHEET_TITLE" desc="The title for the bookmark bottom sheet, shown when trying to add a bookmark. Translation should match TC ID 9191031968346938109.">
Add to
</message>
<message name="IDS_EDIT_BOOKMARK" desc='The string prompting the user to edit the content of a bookmark. [CHAR-LIMIT=30]'> <message name="IDS_EDIT_BOOKMARK" desc='The string prompting the user to edit the content of a bookmark. [CHAR-LIMIT=30]'>
Edit bookmark Edit bookmark
</message> </message>
......
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