diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 08e8ab07dea7..df1df293574c 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn @@ -9,6 +9,8 @@ import("//build/config/python.gni") import("//build/util/process_version.gni") import("//chrome/android/chrome_common_shared_library.gni") import("//chrome/android/chrome_public_apk_tmpl.gni") +import("//chrome/android/features/tab_ui/tab_management_java_sources.gni") +import("//chrome/android/features/tab_ui/tab_ui_module_tmpl.gni") import("//chrome/android/features/vr/public_vr_java_sources.gni") import("//chrome/android/feed/feed_java_sources.gni") import("//chrome/android/monochrome_android_manifest_jinja_variables.gni") @@ -420,6 +422,9 @@ android_library("chrome_java") { java_files += public_vr_java_sources + # Include sources from public_tab_management_java_sources.gni. + java_files += public_tab_management_java_sources + if (enable_vr) { deps += [ ":chrome_vr_java_resources", @@ -585,6 +590,7 @@ junit_binary("chrome_junit_tests") { "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", + "//chrome/android/features/tab_ui:java", "//chrome/android/webapk/libs/client:client_java", "//chrome/android/webapk/libs/common:common_java", "//chrome/android/webapk/test:junit_test_support", @@ -687,6 +693,7 @@ android_library("chrome_test_java") { "//base:base_java_test_support", "//chrome/android:app_hooks_java", "//chrome/android:chrome_java", + "//chrome/android/features/tab_ui:java", "//chrome/android/third_party/compositor_animator:compositor_animator_java", "//chrome/android/webapk/libs/client:client_java", "//chrome/android/webapk/libs/common:common_java", @@ -2033,6 +2040,19 @@ template("monochrome_public_bundle_tmpl") { } } + tab_ui_module_tmpl("${target_name}__tab_ui_bundle_module") { + manifest_package = manifest_package + module_name = "TabUiMonochromePublic" + base_module_target = ":$_base_module_target_name" + if (_is_trichrome) { + version_code = trichrome_version_code + } else { + version_code = monochrome_version_code + } + version_name = chrome_version_name + uncompress_shared_libraries = true + } + android_app_bundle(target_name) { if (_is_trichrome) { add_native_lib_placeholders_for_base_module = true @@ -2049,7 +2069,7 @@ template("monochrome_public_bundle_tmpl") { extra_modules = [] if (modularize_ar) { - extra_modules = [ + extra_modules += [ { name = "ar" module_target = ":${target_name}__ar_bundle_module" @@ -2064,6 +2084,12 @@ template("monochrome_public_bundle_tmpl") { }, ] } + extra_modules += [ + { + name = "tab_ui" + module_target = ":${target_name}__tab_ui_bundle_module" + }, + ] } } diff --git a/chrome/android/features/module_names_to_package_ids.gni b/chrome/android/features/module_names_to_package_ids.gni index 3ab538fa5a8b..ff4d7966a19d 100644 --- a/chrome/android/features/module_names_to_package_ids.gni +++ b/chrome/android/features/module_names_to_package_ids.gni @@ -2,4 +2,5 @@ resource_packages_id_mapping = [ "ar=0x7e", "vr=0x7d", + "tab_ui=0x7c", ] diff --git a/chrome/android/features/tab_ui/AndroidManifest.xml b/chrome/android/features/tab_ui/AndroidManifest.xml new file mode 100644 index 000000000000..577915e80e50 --- /dev/null +++ b/chrome/android/features/tab_ui/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/chrome/android/features/tab_ui/BUILD.gn b/chrome/android/features/tab_ui/BUILD.gn new file mode 100644 index 000000000000..78854a94b66f --- /dev/null +++ b/chrome/android/features/tab_ui/BUILD.gn @@ -0,0 +1,58 @@ +# Copyright 2019 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. + +import("//build/config/android/rules.gni") +import("//chrome/common/features.gni") + +android_library("java") { + java_files = [ + "java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetMediator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetContent.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetProperties.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetToolbarCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetViewBinder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewHolder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerProperties.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListModel.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleImpl.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewHolder.java", + ] + + classpath_deps = [ + "//base:base_java", + "//chrome/android:chrome_java", + "//chrome/android:chrome_strings_grd", + "//chrome/android:ui_locale_string_resources", + "//chrome/app:java_strings_grd", + "//components/feature_engagement:feature_engagement_java", + "//components/policy/android:policy_java", + "//content/public/android:content_java_resources", + "//content/public/android:content_java", + "//third_party/android_deps:android_arch_lifecycle_common_java", + "//third_party/android_deps:android_arch_lifecycle_runtime_java", + "//third_party/android_deps:android_support_annotations_java", + "//third_party/android_deps:android_support_compat_java", + "//third_party/android_deps:android_support_v13_java", + "//third_party/android_deps:android_support_v7_appcompat_java", + "//third_party/android_deps:android_support_v7_recyclerview_java", + "//ui/android:ui_java", + ] +} diff --git a/chrome/android/features/tab_ui/java/DEPS b/chrome/android/features/tab_ui/java/DEPS new file mode 100644 index 000000000000..29603d98bc3e --- /dev/null +++ b/chrome/android/features/tab_ui/java/DEPS @@ -0,0 +1,6 @@ +include_rules = [ + "+components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement", + "+components/module_installer", + + "+content/public/android/java/src/org/chromium/content_public/browser", +] diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java similarity index 100% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcher.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcher.java new file mode 100644 index 000000000000..b39ca20598da --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcher.java @@ -0,0 +1,12 @@ +// Copyright 2019 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.tasks.tab_management; + +import org.chromium.chrome.browser.compositor.layouts.OverviewModeController; + +/** + * Interface for the Grid Tab Switcher. + */ +public interface GridTabSwitcher { OverviewModeController getOverviewModeController(); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java similarity index 95% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java index 35f0b63f5535..f67e2a259cb3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; @@ -26,7 +26,7 @@ * Parent coordinator that is responsible for showing a grid of tabs for the main TabSwitcher UI. */ public class GridTabSwitcherCoordinator - implements Destroyable, GridTabSwitcherMediator.ResetHandler { + implements Destroyable, GridTabSwitcher, GridTabSwitcherMediator.ResetHandler { private final PropertyModelChangeProcessor mContainerViewChangeProcessor; private final ActivityLifecycleDispatcher mLifecycleDispatcher; private final TabListCoordinator mTabGridCoordinator; @@ -55,6 +55,7 @@ public GridTabSwitcherCoordinator(Context context, * @return OverviewModeController implementation that will can be used for controlling * OverviewMode changes. */ + @Override public OverviewModeController getOverviewModeController() { return mMediator; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java similarity index 90% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java index 253e330e3456..3dda73977c08 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java @@ -2,15 +2,15 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.TOP_CONTROLS_HEIGHT; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.INITIAL_SCROLL_INDEX; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.IS_INCOGNITO; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.IS_VISIBLE; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.TOP_CONTROLS_HEIGHT; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.VISIBILITY_LISTENER; import org.chromium.chrome.browser.compositor.layouts.OverviewModeController; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; @@ -101,7 +101,6 @@ public void onTabModelSelected(TabModel newModel, TabModel oldModel) { mTabModelSelector.addObserver(mTabModelSelectorObserver); mTabModelObserver = new TabModelSelectorTabModelObserver(mTabModelSelector) { - @Override public void didSelectTab(Tab tab, int type, int lastId) { if (type == TabSelectionType.FROM_CLOSE || mShouldIgnoreNextSelect) { diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.java new file mode 100644 index 000000000000..4f4f33988fb2 --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.java @@ -0,0 +1,31 @@ +// Copyright 2018 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.tasks.tab_management; + +import org.chromium.chrome.R; + +/** + * Hacky class to avoid lint errors for resources called on the module. + */ +/* package */ class SilenceLintErrors { + // TODO(yusufo): Add these resources to the DFM + private int[] mRes = + new int[] {R.dimen.tab_grid_favicon_size, R.string.tab_management_module_title, + R.string.iph_tab_groups_quickly_compare_pages_text, + R.string.iph_tab_groups_tap_to_see_another_tab_text, + R.string.iph_tab_groups_your_tabs_together_text, + R.string.bottom_tab_grid_description, R.string.bottom_tab_grid_opened_half, + R.string.bottom_tab_grid_opened_full, R.string.bottom_tab_grid_closed, + R.dimen.tab_list_selected_inset, R.layout.tab_strip_item, + R.drawable.selected_tab_background, R.drawable.tab_grid_card_background, + R.layout.tab_grid_card_item, R.layout.tab_list_recycler_view_layout, + R.layout.bottom_tab_grid_toolbar, R.string.bottom_tab_grid_new_tab, + R.string.bottom_tab_grid_new_tab, R.plurals.bottom_tab_grid_title_placeholder, + R.string.iph_tab_groups_tap_to_see_another_tab_accessibility_text, + R.string.accessibility_bottom_tab_strip_expand_tab_sheet, + R.layout.bottom_tab_strip_toolbar}; + + private SilenceLintErrors() {} +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinder.java similarity index 70% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinder.java index 8eb9d48c7fef..da25caa93359 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinder.java @@ -2,15 +2,15 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.TOP_CONTROLS_HEIGHT; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.INITIAL_SCROLL_INDEX; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.IS_INCOGNITO; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.IS_VISIBLE; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.TOP_CONTROLS_HEIGHT; +import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.VISIBILITY_LISTENER; import android.widget.FrameLayout; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetContent.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetContent.java similarity index 88% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetContent.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetContent.java index 8e503da2a16d..1318f0a82b46 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetContent.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetContent.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.view.View; @@ -11,16 +11,16 @@ import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.ContentPriority; /** A {@link BottomSheetContent} that displays tab grid. **/ -public class BottomTabGridSheetContent implements BottomSheetContent { +public class TabGridSheetContent implements BottomSheetContent { private final TabListRecyclerView mRecyclerView; private final View mToolbarView; /** - * Construct a new {@link BottomTabGridSheetContent}. + * Construct a new {@link TabGridSheetContent}. * @param recyclerView The {@link TabListRecyclerView} holding the tab grid. * @param toolbarView The toolbar {@link View} to use.} */ - BottomTabGridSheetContent(TabListRecyclerView recyclerView, View toolbarView) { + TabGridSheetContent(TabListRecyclerView recyclerView, View toolbarView) { mRecyclerView = recyclerView; mToolbarView = toolbarView; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetCoordinator.java similarity index 74% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetCoordinator.java index 300b9114d718..c2d91b548cdc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetCoordinator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.app.Activity; import android.content.Context; @@ -11,7 +11,6 @@ import org.chromium.base.ApplicationStatus; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; -import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; @@ -23,32 +22,31 @@ import java.util.List; /** - * A coordinator for BottomTabGrid component. Manages the communication with + * A coordinator for TabGridSheet component. Manages the communication with * {@link TabListCoordinator} as well as the life-cycle of shared component * objects. */ -@ActivityScope -public class BottomTabGridCoordinator implements Destroyable { +public class TabGridSheetCoordinator implements Destroyable { private final Context mContext; private final TabListCoordinator mTabGridCoordinator; - private final BottomTabGridMediator mMediator; - private BottomTabGridSheetContent mBottomSheetContent; - private BottomTabGridSheetToolbarCoordinator mToolbarCoordinator; + private final TabGridSheetMediator mMediator; + private TabGridSheetContent mBottomSheetContent; + private TabGridSheetToolbarCoordinator mToolbarCoordinator; private final PropertyModel mToolbarPropertyModel; - BottomTabGridCoordinator(Context context, BottomSheetController bottomSheetController, + TabGridSheetCoordinator(Context context, BottomSheetController bottomSheetController, TabModelSelector tabModelSelector, TabContentManager tabContentManager, TabCreatorManager tabCreatorManager) { mContext = context; - mToolbarPropertyModel = new PropertyModel(BottomTabGridSheetProperties.ALL_KEYS); + mToolbarPropertyModel = new PropertyModel(TabGridSheetProperties.ALL_KEYS); mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context, tabModelSelector, tabContentManager, bottomSheetController.getBottomSheet(), false); - mMediator = new BottomTabGridMediator(mContext, bottomSheetController, - this::resetWithListOfTabs, mToolbarPropertyModel, tabModelSelector, - tabCreatorManager); + mMediator = + new TabGridSheetMediator(mContext, bottomSheetController, this::resetWithListOfTabs, + mToolbarPropertyModel, tabModelSelector, tabCreatorManager); startObservingForCreationIPH(); } @@ -70,8 +68,8 @@ public void destroy() { } /** - * Updates tabs list through {@link TabListCoordinator} with given list of Tabs and - * calls onReset() on {@link BottomTabGridMediator}. + * Updates tabs list through {@link TabListCoordinator} with given tab model and + * calls onReset() on {@link TabGridSheetMediator} */ public void resetWithListOfTabs(@Nullable List tabs) { mTabGridCoordinator.resetWithListOfTabs(tabs); @@ -82,9 +80,9 @@ public void resetWithListOfTabs(@Nullable List tabs) { private void updateBottomSheetContent(@Nullable List tabs) { if (tabs != null) { // create bottom sheet content - mToolbarCoordinator = new BottomTabGridSheetToolbarCoordinator( + mToolbarCoordinator = new TabGridSheetToolbarCoordinator( mContext, mTabGridCoordinator.getContainerView(), mToolbarPropertyModel); - mBottomSheetContent = new BottomTabGridSheetContent( + mBottomSheetContent = new TabGridSheetContent( mTabGridCoordinator.getContainerView(), mToolbarCoordinator.getView()); } else { if (mBottomSheetContent != null) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetMediator.java similarity index 83% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridMediator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetMediator.java index 3d41547c52c7..45fe213b0b72 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetMediator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.support.annotation.Nullable; @@ -29,17 +29,17 @@ import java.util.List; /** - * A mediator for the BottomTabGrid component, respoonsible for communicating + * A mediator for the TabGridSheet component, respoonsible for communicating * with the components' coordinator as well as managing the state of the bottom * sheet. */ -class BottomTabGridMediator implements Destroyable { +class TabGridSheetMediator implements Destroyable { /** - * Defines an interface for a {@link BottomTabGridMediator} reset event handler. + * Defines an interface for a {@link TabGridSheetMediator} reset event handler. */ interface ResetHandler { /** - * Handles a reset event originated from {@link BottomTabGridMediator}. + * Handles a reset event originated from {@link TabGridSheetMediator}. * * @param tabs List of Tabs to reset. */ @@ -54,7 +54,7 @@ interface ResetHandler { private final TabModelObserver mTabModelObserver; private final TabCreatorManager mTabCreatorManager; - BottomTabGridMediator(Context context, BottomSheetController bottomSheetController, + TabGridSheetMediator(Context context, BottomSheetController bottomSheetController, ResetHandler resetHandler, PropertyModel model, TabModelSelector tabModelSelector, TabCreatorManager tabCreatorManager) { mContext = context; @@ -98,15 +98,15 @@ public void didSelectTab(Tab tab, int type, int lastId) { /** * Handles communication with the bottom sheet based on the content provided. * - * @param sheetContent The {@link BottomTabGridSheetContent} to populate the + * @param sheetContent The {@link TabGridSheetContent} to populate the * bottom sheet with. When set to null, the bottom sheet * will be hidden. */ - void onReset(BottomTabGridSheetContent sheetContent) { + void onReset(TabGridSheetContent sheetContent) { if (sheetContent == null) { - hideBottomTabGridSheet(); + hideTabGridSheet(); } else { - showTabGridInBottomSheet(sheetContent); + showTabGridSheet(sheetContent); } } @@ -121,14 +121,14 @@ public void destroy() { } } - private void showTabGridInBottomSheet(BottomTabGridSheetContent sheetContent) { + private void showTabGridSheet(TabGridSheetContent sheetContent) { updateBottomSheetTitleAndMargin(); mBottomSheetController.getBottomSheet().addObserver(mSheetObserver); mBottomSheetController.requestShowContent(sheetContent, true); mBottomSheetController.expandSheet(); } - private void hideBottomTabGridSheet() { + private void hideTabGridSheet() { mBottomSheetController.hideContent(getCurrentSheetContent(), true); mBottomSheetController.getBottomSheet().removeObserver(mSheetObserver); } @@ -145,22 +145,22 @@ private void updateBottomSheetTitleAndMargin() { .getCurrentTabModelFilter() .getRelatedTabList(currentTab.getId()) .size(); - mModel.set(BottomTabGridSheetProperties.HEADER_TITLE, + mModel.set(TabGridSheetProperties.HEADER_TITLE, mContext.getResources().getQuantityString( R.plurals.bottom_tab_grid_title_placeholder, tabsCount, tabsCount)); - mModel.set(BottomTabGridSheetProperties.CONTENT_TOP_MARGIN, + mModel.set(TabGridSheetProperties.CONTENT_TOP_MARGIN, (int) mContext.getResources().getDimension(R.dimen.control_container_height)); } private void setupToolbarClickHandlers() { - mModel.set(BottomTabGridSheetProperties.COLLAPSE_CLICK_LISTENER, - getCollapseButtonClickListener()); - mModel.set(BottomTabGridSheetProperties.ADD_CLICK_LISTENER, getAddButtonClickListener()); + mModel.set( + TabGridSheetProperties.COLLAPSE_CLICK_LISTENER, getCollapseButtonClickListener()); + mModel.set(TabGridSheetProperties.ADD_CLICK_LISTENER, getAddButtonClickListener()); } private OnClickListener getCollapseButtonClickListener() { return view -> { - hideBottomTabGridSheet(); + hideTabGridSheet(); }; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetProperties.java similarity index 92% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetProperties.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetProperties.java index fbb04961df42..3d95fe584705 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetProperties.java @@ -2,14 +2,14 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.view.View.OnClickListener; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; -class BottomTabGridSheetProperties { +class TabGridSheetProperties { public static final PropertyModel .WritableObjectPropertyKey COLLAPSE_CLICK_LISTENER = new PropertyModel.WritableObjectPropertyKey(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetToolbarCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetToolbarCoordinator.java similarity index 71% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetToolbarCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetToolbarCoordinator.java index 36e4a1c08c13..6548ef330946 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetToolbarCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetToolbarCoordinator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.view.LayoutInflater; @@ -16,14 +16,14 @@ /** * Coordinator for the toolbar component that will be shown on top of the tab - * grid when presented inside the bottom sheet. {@link BottomTabGridCoordinator} + * grid when presented inside the bottom sheet. {@link TabGridSheetCoordinator} */ -class BottomTabGridSheetToolbarCoordinator implements Destroyable { - private final BottomTabListToolbarView mToolbarView; +class TabGridSheetToolbarCoordinator implements Destroyable { + private final TabGroupUiToolbarView mToolbarView; private final PropertyModelChangeProcessor mModelChangeProcessor; /** - * Construct a new {@link BottomTabGridSheetToolbarCoordinator}. + * Construct a new {@link TabGridSheetToolbarCoordinator}. * * @param context The {@link Context} used to retrieve resources. * @param contentView The {@link View} to which the content will @@ -31,13 +31,13 @@ class BottomTabGridSheetToolbarCoordinator implements Destroyable { * @param toolbarPropertyModel The {@link PropertyModel} instance representing * the toolbar. */ - BottomTabGridSheetToolbarCoordinator( + TabGridSheetToolbarCoordinator( Context context, ViewGroup contentView, PropertyModel toolbarPropertyModel) { - mToolbarView = (BottomTabListToolbarView) LayoutInflater.from(context).inflate( + mToolbarView = (TabGroupUiToolbarView) LayoutInflater.from(context).inflate( R.layout.bottom_tab_grid_toolbar, contentView, false); mModelChangeProcessor = PropertyModelChangeProcessor.create(toolbarPropertyModel, - new BottomTabGridSheetViewBinder.ViewHolder(mToolbarView, contentView), - BottomTabGridSheetViewBinder::bind); + new TabGridSheetViewBinder.ViewHolder(mToolbarView, contentView), + TabGridSheetViewBinder::bind); } /** @return The content {@link View}. */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetViewBinder.java similarity index 69% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetViewBinder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetViewBinder.java index 1a2ddf711573..a1da40caaedb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetViewBinder.java @@ -2,12 +2,12 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; -import static org.chromium.chrome.browser.tasks.tab_list_ui.BottomTabGridSheetProperties.ADD_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.tab_list_ui.BottomTabGridSheetProperties.COLLAPSE_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.tab_list_ui.BottomTabGridSheetProperties.CONTENT_TOP_MARGIN; -import static org.chromium.chrome.browser.tasks.tab_list_ui.BottomTabGridSheetProperties.HEADER_TITLE; +import static org.chromium.chrome.browser.tasks.tab_management.TabGridSheetProperties.ADD_CLICK_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabGridSheetProperties.COLLAPSE_CLICK_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabGridSheetProperties.CONTENT_TOP_MARGIN; +import static org.chromium.chrome.browser.tasks.tab_management.TabGridSheetProperties.HEADER_TITLE; import android.view.View; import android.widget.FrameLayout; @@ -16,17 +16,17 @@ import org.chromium.ui.modelutil.PropertyModel; /** - * ViewBinder for BottomTabGridSheet. + * ViewBinder for TabGridSheet. */ -class BottomTabGridSheetViewBinder { +class TabGridSheetViewBinder { /** - * ViewHolder class to get access to all {@link View}s inside the BottomTabGrid. + * ViewHolder class to get access to all {@link View}s inside the TabGridSheet. */ public static class ViewHolder { - public final BottomTabListToolbarView toolbarView; + public final TabGroupUiToolbarView toolbarView; public final View contentView; - ViewHolder(BottomTabListToolbarView toolbarView, View contentView) { + ViewHolder(TabGroupUiToolbarView toolbarView, View contentView) { this.toolbarView = toolbarView; this.contentView = contentView; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java similarity index 98% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java index 43f52fa9d27c..5f559ba10b2c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.res.Resources; import android.graphics.Bitmap; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewHolder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewHolder.java similarity index 96% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewHolder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewHolder.java index f6ba2e398938..636216882b48 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewHolder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewHolder.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v7.widget.RecyclerView; diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUi.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUi.java new file mode 100644 index 000000000000..b53281294a23 --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUi.java @@ -0,0 +1,15 @@ +// Copyright 2019 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.tasks.tab_management; + +import org.chromium.chrome.browser.ChromeActivity; + +/** + * Interface for the Tab Groups related UI. + */ +public interface TabGroupUi { + void initializeWithNative(ChromeActivity activity); + void destroy(); +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java similarity index 58% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java index a0e856b5e5c5..8ab604bbadd6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java @@ -2,39 +2,38 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.view.ViewGroup; +import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModelSelector; -import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController; import org.chromium.ui.modelutil.PropertyModel; import java.util.List; /** - * A coordinator for TabStripBottomToolbar component. Manages the communication with - * {@link TabListCoordinator}, {@link BottomTabGridCoordinator}, and + * A coordinator for TabGroupUi component. Manages the communication with + * {@link TabListCoordinator}, {@link TabGridSheetCoordinator}, and * {@link TabStripToolbarCoordinator}, as well as the life-cycle of shared component objects. */ -public class TabStripBottomToolbarCoordinator - implements Destroyable, TabStripBottomToolbarMediator.ResetHandler { +public class TabGroupUiCoordinator + implements Destroyable, TabGroupUiMediator.ResetHandler, TabGroupUi { private final Context mContext; private final PropertyModel mTabStripToolbarModel; - private BottomTabGridCoordinator mBottomTabGridCoordinator; + private TabGridSheetCoordinator mTabGridSheetCoordinator; private TabListCoordinator mTabStripCoordinator; - private TabStripBottomToolbarMediator mMediator; + private TabGroupUiMediator mMediator; private TabStripToolbarCoordinator mTabStripToolbarCoordinator; /** - * Creates a new {@link TabStripBottomToolbarCoordinator} + * Creates a new {@link TabGroupUiCoordinator} */ - public TabStripBottomToolbarCoordinator(ViewGroup parentView) { + public TabGroupUiCoordinator(ViewGroup parentView) { mContext = parentView.getContext(); mTabStripToolbarModel = new PropertyModel(TabStripToolbarViewProperties.ALL_KEYS); @@ -45,22 +44,22 @@ public TabStripBottomToolbarCoordinator(ViewGroup parentView) { /** * Handle any initialization that occurs once native has been loaded. */ - public void initializeWithNative(TabModelSelector tabModelSelector, - TabContentManager tabContentManager, TabCreatorManager tabCreatorManager, - BottomSheetController bottomSheetController) { + @Override + public void initializeWithNative(ChromeActivity activity) { + TabModelSelector tabModelSelector = activity.getTabModelSelector(); + TabContentManager tabContentManager = activity.getTabContentManager(); mTabStripCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.STRIP, mContext, tabModelSelector, tabContentManager, mTabStripToolbarCoordinator.getTabListContainerView(), true); - mBottomTabGridCoordinator = new BottomTabGridCoordinator(mContext, bottomSheetController, - tabModelSelector, tabContentManager, tabCreatorManager); + mTabGridSheetCoordinator = new TabGridSheetCoordinator(mContext, + activity.getBottomSheetController(), tabModelSelector, tabContentManager, activity); - mMediator = new TabStripBottomToolbarMediator( - this, mTabStripToolbarModel, tabModelSelector, tabCreatorManager); + mMediator = new TabGroupUiMediator(this, mTabStripToolbarModel, tabModelSelector, activity); } /** - * Handles a reset event originated from {@link TabStripBottomToolbarMediator} + * Handles a reset event originated from {@link TabGroupUiMediator} * when the bottom sheet is collapsed. * * @param tabs List of Tabs to reset. @@ -71,14 +70,14 @@ public void resetStripWithListOfTabs(List tabs) { } /** - * Handles a reset event originated from {@link TabStripBottomToolbarMediator} + * Handles a reset event originated from {@link TabGroupUiMediator} * when the bottom sheet is expanded. * * @param tabs List of Tabs to reset. */ @Override public void resetSheetWithListOfTabs(List tabs) { - mBottomTabGridCoordinator.resetWithListOfTabs(tabs); + mTabGridSheetCoordinator.resetWithListOfTabs(tabs); } /** @@ -87,7 +86,7 @@ public void resetSheetWithListOfTabs(List tabs) { @Override public void destroy() { mTabStripCoordinator.destroy(); - mBottomTabGridCoordinator.destroy(); + mTabGridSheetCoordinator.destroy(); mMediator.destroy(); } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java similarity index 87% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarMediator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java index 79602bd1a327..05cc81fb7e3b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.lifecycle.Destroyable; @@ -19,17 +19,17 @@ import java.util.List; /** - * A mediator for the TabStripBottomToolbar. Responsible for managing the + * A mediator for the TabGroupUi. Responsible for managing the * internal state of the component. */ -public class TabStripBottomToolbarMediator implements Destroyable { +public class TabGroupUiMediator implements Destroyable { /** - * Defines an interface for a {@link TabStripBottomToolbarMediator} reset event + * Defines an interface for a {@link TabGroupUiMediator} reset event * handler. */ interface ResetHandler { /** - * Handles a reset event originated from {@link TabStripBottomToolbarMediator} + * Handles a reset event originated from {@link TabGroupUiMediator} * when the bottom sheet is collapsed. * * @param tabs List of Tabs to reset. @@ -37,7 +37,7 @@ interface ResetHandler { void resetStripWithListOfTabs(List tabs); /** - * Handles a reset event originated from {@link TabStripBottomToolbarMediator} + * Handles a reset event originated from {@link TabGroupUiMediator} * when the bottom sheet is expanded. * * @param tabs List of Tabs to reset. @@ -51,7 +51,7 @@ interface ResetHandler { private final TabModelSelector mTabModelSelector; private final TabCreatorManager mTabCreatorManager; - TabStripBottomToolbarMediator(ResetHandler resetHandler, PropertyModel toolbarPropertyModel, + TabGroupUiMediator(ResetHandler resetHandler, PropertyModel toolbarPropertyModel, TabModelSelector tabModelSelector, TabCreatorManager tabCreatorManager) { mResetHandler = resetHandler; mToolbarPropertyModel = toolbarPropertyModel; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabListToolbarView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java similarity index 89% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabListToolbarView.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java index 1c483d4ac097..d6a65d1af074 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabListToolbarView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.util.AttributeSet; @@ -16,15 +16,15 @@ /** * Represents a generic toolbar used in the bottom strip/grid component. - * {@link BottomTabGridSheetToolbarCoordinator} + * {@link TabGridSheetToolbarCoordinator} */ -public class BottomTabListToolbarView extends FrameLayout { +public class TabGroupUiToolbarView extends FrameLayout { private ChromeImageView mRightButton; private ChromeImageView mLeftButton; private ViewGroup mContainerView; private TextView mTitleTextView; - public BottomTabListToolbarView(Context context, AttributeSet attrs) { + public TabGroupUiToolbarView(Context context, AttributeSet attrs) { super(context, attrs); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabStripToolbarViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java similarity index 63% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabStripToolbarViewBinder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java index 4beec2a0b983..dfbc812e1898 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabStripToolbarViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java @@ -2,19 +2,19 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabStripToolbarViewProperties.ADD_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabStripToolbarViewProperties.EXPAND_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE; +import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.ADD_CLICK_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.EXPAND_CLICK_LISTENER; +import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; /** - * ViewBinder for BottomTabStripToolbar. + * ViewBinder for TabGroupUiToolbar. */ -class BottomTabStripToolbarViewBinder { +class TabGroupUiToolbarViewBinder { /** * Binds the given model to the given view, updating the payload in propertyKey. * @@ -23,7 +23,7 @@ class BottomTabStripToolbarViewBinder { * @param propertyKey The key for the property to update for. */ public static void bind( - PropertyModel model, BottomTabListToolbarView view, PropertyKey propertyKey) { + PropertyModel model, TabGroupUiToolbarView view, PropertyKey propertyKey) { if (EXPAND_CLICK_LISTENER == propertyKey) { view.setLeftButtonOnClickListener(model.get(EXPAND_CLICK_LISTENER)); } else if (ADD_CLICK_LISTENER == propertyKey) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerProperties.java similarity index 96% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerProperties.java index fb42cf3d7f6d..bbbce8d3b356 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerProperties.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java similarity index 98% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java index f3f96fc02f95..a2db1dfe3fb3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.support.annotation.IntDef; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java similarity index 99% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java index 36eb7d3552d7..d738ea3ab4a8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.graphics.Bitmap; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListModel.java similarity index 87% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListModel.java index 616556d3868b..513265c2bd83 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListModel.java @@ -2,9 +2,9 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabProperties.TAB_ID; +import static org.chromium.chrome.browser.tasks.tab_management.TabProperties.TAB_ID; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.ui.modelutil.PropertyKey; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java similarity index 98% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java index f4cfc6d61c58..a345f9873ce7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModule.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModule.java new file mode 100644 index 000000000000..402b4daf0e28 --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModule.java @@ -0,0 +1,17 @@ +// Copyright 2019 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.tasks.tab_management; + +import android.view.ViewGroup; + +import org.chromium.chrome.browser.ChromeActivity; + +/** + * Interface to get access to components concerning tab management. + */ +public interface TabManagementModule { + GridTabSwitcher createGridTabSwitcher(ChromeActivity activity); + TabGroupUi createTabGroupUi(ViewGroup parentView); +} diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleImpl.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleImpl.java new file mode 100644 index 000000000000..4f34f5f30492 --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleImpl.java @@ -0,0 +1,29 @@ +// Copyright 2019 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.tasks.tab_management; + +import android.view.ViewGroup; + +import org.chromium.base.annotations.UsedByReflection; +import org.chromium.chrome.browser.ChromeActivity; + +/** + * Impl class that will resolve components for tab management. + */ +@UsedByReflection("TabManagementModuleProvider.java") +public class TabManagementModuleImpl implements TabManagementModule { + @Override + public GridTabSwitcher createGridTabSwitcher(ChromeActivity activity) { + return new GridTabSwitcherCoordinator(activity, activity.getLifecycleDispatcher(), + activity.getToolbarManager(), activity.getTabModelSelector(), + activity.getTabContentManager(), activity.getCompositorViewHolder(), + activity.getFullscreenManager()); + } + + @Override + public TabGroupUi createTabGroupUi(ViewGroup parentView) { + return new TabGroupUiCoordinator(parentView); + } +} diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java new file mode 100644 index 000000000000..17fcb67ca1b9 --- /dev/null +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java @@ -0,0 +1,35 @@ +// Copyright 2019 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.tasks.tab_management; + +import android.support.annotation.Nullable; + +import org.chromium.components.module_installer.ModuleInstaller; + +/** + * Provider class for TabManagementModule. + */ +public class TabManagementModuleProvider { + private static final String TAB_MANAGEMENT_MODULE_IMPL_CLASS_NAME = + "org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleImpl"; + + /** + * Returns fallback or real {@link TabManagementModule} implementation depending on whether + * the module is installed. + */ + public static @Nullable TabManagementModule getTabManagementModule() { + TabManagementModule tabManagementModule; + try { + tabManagementModule = + (TabManagementModule) Class.forName(TAB_MANAGEMENT_MODULE_IMPL_CLASS_NAME) + .newInstance(); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException + | IllegalArgumentException e) { + ModuleInstaller.installDeferred("tab_ui"); + return null; + } + return tabManagementModule; + } +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java similarity index 97% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabProperties.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java index 2f5cf26e97f9..e12668dcbd1f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.graphics.Bitmap; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarCoordinator.java similarity index 66% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarCoordinator.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarCoordinator.java index ab4bdd55396e..a69b64a5a8e0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarCoordinator.java @@ -2,9 +2,7 @@ // 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.tasks.tab_list_ui; - -import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT; +package org.chromium.chrome.browser.tasks.tab_management; import android.content.Context; import android.view.LayoutInflater; @@ -16,26 +14,23 @@ import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; -import javax.inject.Named; - /** - * A coordinator for BottomTabStripToolbar component. + * A coordinator for TabStripToolbar component. */ public class TabStripToolbarCoordinator implements Destroyable { - private final BottomTabListToolbarView mToolbarView; + private final TabGroupUiToolbarView mToolbarView; private final PropertyModel mModel; private final PropertyModelChangeProcessor mModelChangeProcessor; - TabStripToolbarCoordinator( - @Named(ACTIVITY_CONTEXT) Context context, ViewGroup parentView, PropertyModel model) { + TabStripToolbarCoordinator(Context context, ViewGroup parentView, PropertyModel model) { mModel = model; - mToolbarView = (BottomTabListToolbarView) LayoutInflater.from(context).inflate( + mToolbarView = (TabGroupUiToolbarView) LayoutInflater.from(context).inflate( R.layout.bottom_tab_strip_toolbar, parentView, false); parentView.addView(mToolbarView); mModelChangeProcessor = PropertyModelChangeProcessor.create( - model, mToolbarView, BottomTabStripToolbarViewBinder::bind); + model, mToolbarView, TabGroupUiToolbarViewBinder::bind); } View getView() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarViewProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java similarity index 88% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarViewProperties.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java index e6c9a747348f..3fdbf52d9863 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarViewProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java @@ -2,13 +2,16 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.view.View.OnClickListener; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; +/** + * {@link PropertyKey} list for the toolbar view on tabstrip. + */ class TabStripToolbarViewProperties { public static final PropertyModel .WritableObjectPropertyKey EXPAND_CLICK_LISTENER = diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java similarity index 98% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewBinder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java index 8b14fa53522f..d7fa2a9653c9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewHolder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewHolder.java similarity index 95% rename from chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewHolder.java rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewHolder.java index 1dab4e1446db..d199c087e7a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewHolder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewHolder.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinderTest.java similarity index 98% rename from chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinderTest.java rename to chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinderTest.java index 926d5172728e..7b57e662a7f6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinderTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinderTest.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; @@ -81,9 +81,8 @@ public static void setUpBeforeActivityLaunched() { public void setUpTest() throws Exception { super.setUpTest(); - ThreadUtils.runOnUiThreadBlocking(() -> { - mRecyclerView = getActivity().findViewById(R.id.tab_list_view); - }); + ThreadUtils.runOnUiThreadBlocking( + () -> { mRecyclerView = getActivity().findViewById(R.id.tab_list_view); }); mStartedShowingCallback = new CallbackHelper(); mFinishedShowingCallback = new CallbackHelper(); diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListViewHolderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java similarity index 99% rename from chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListViewHolderTest.java rename to chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java index e4ee53ef6198..887678b26886 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListViewHolderTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TestRecyclerViewSimpleViewBinder.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TestRecyclerViewSimpleViewBinder.java similarity index 96% rename from chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TestRecyclerViewSimpleViewBinder.java rename to chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TestRecyclerViewSimpleViewBinder.java index 92c2ded436f0..dd073d7f90c8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TestRecyclerViewSimpleViewBinder.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TestRecyclerViewSimpleViewBinder.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import android.support.v7.widget.RecyclerView; diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediatorUnitTest.java similarity index 98% rename from chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediatorUnitTest.java rename to chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediatorUnitTest.java index fd40528416c4..63717299f163 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediatorUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediatorUnitTest.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; @@ -16,7 +16,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.chromium.chrome.browser.tasks.tab_list_ui.GridTabSwitcherMediator.INITIAL_SCROLL_INDEX_OFFSET; +import static org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator.INITIAL_SCROLL_INDEX_OFFSET; import android.content.Context; import android.content.res.Resources; diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java similarity index 99% rename from chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediatorUnitTest.java rename to chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java index bdb7c6915423..d17256f26580 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediatorUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java @@ -2,7 +2,7 @@ // 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.tasks.tab_list_ui; +package org.chromium.chrome.browser.tasks.tab_management; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; diff --git a/chrome/android/features/tab_ui/tab_management_java_sources.gni b/chrome/android/features/tab_ui/tab_management_java_sources.gni new file mode 100644 index 000000000000..3a4223e63d04 --- /dev/null +++ b/chrome/android/features/tab_ui/tab_management_java_sources.gni @@ -0,0 +1,22 @@ +# Copyright 2019 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. + +public_tab_management_java_sources = [ + "//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcher.java", + "//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.java", + "//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUi.java", + "//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModule.java", + "//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java", +] + +tab_management_test_java_sources = [ + "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridContainerViewBinderTest.java", + "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java", + "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TestRecyclerViewSimpleViewBinder.java", +] + +tab_management_junit_java_sources = [ + "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediatorUnitTest.java", + "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java", +] diff --git a/chrome/android/features/tab_ui/tab_ui_module_tmpl.gni b/chrome/android/features/tab_ui/tab_ui_module_tmpl.gni new file mode 100644 index 000000000000..99b3b5723167 --- /dev/null +++ b/chrome/android/features/tab_ui/tab_ui_module_tmpl.gni @@ -0,0 +1,40 @@ +# Copyright 2019 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. + +import("//build/config/android/rules.gni") +import("//build/config/locales.gni") +import("//chrome/android/features/module_names_to_package_ids.gni") + +template("tab_ui_module_tmpl") { + _manifest = "$target_gen_dir/$target_name/AndroidManifest.xml" + _manifest_target = "${target_name}__manifest" + jinja_template(_manifest_target) { + input = "//chrome/android/features/tab_ui/AndroidManifest.xml" + output = _manifest + variables = [ + "target_sdk_version=$android_sdk_version", + "manifest_package=${invoker.manifest_package}", + ] + } + + android_app_bundle_module(target_name) { + forward_variables_from(invoker, + [ + "base_module_target", + "module_name", + "uncompress_shared_libraries", + "version_code", + "version_name", + ]) + android_manifest = _manifest + android_manifest_dep = ":${_manifest_target}" + proguard_enabled = !is_java_debug + aapt_locale_whitelist = locales + package_name = "tab_ui" + package_name_to_id_mapping = resource_packages_id_mapping + deps = [ + "//chrome/android/features/tab_ui:java", + ] + } +} diff --git a/chrome/android/java/res/layout/bottom_tab_grid_toolbar.xml b/chrome/android/java/res/layout/bottom_tab_grid_toolbar.xml index 9a6c369ae56c..a3c95d665288 100644 --- a/chrome/android/java/res/layout/bottom_tab_grid_toolbar.xml +++ b/chrome/android/java/res/layout/bottom_tab_grid_toolbar.xml @@ -3,7 +3,7 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> - - + diff --git a/chrome/android/java/res/layout/bottom_tab_strip_toolbar.xml b/chrome/android/java/res/layout/bottom_tab_strip_toolbar.xml index 01d8599e790f..6a3504fb5566 100644 --- a/chrome/android/java/res/layout/bottom_tab_strip_toolbar.xml +++ b/chrome/android/java/res/layout/bottom_tab_strip_toolbar.xml @@ -3,7 +3,7 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> - - + diff --git a/chrome/android/java/res/layout/tab_list_recycler_view_layout.xml b/chrome/android/java/res/layout/tab_list_recycler_view_layout.xml index ffdd4a3d00f1..065946082530 100644 --- a/chrome/android/java/res/layout/tab_list_recycler_view_layout.xml +++ b/chrome/android/java/res/layout/tab_list_recycler_view_layout.xml @@ -2,7 +2,7 @@ -<resetlink>reset sync

Your %1$swww.amazon.com timer ran out. It'll start again tomorrow. - Opened tabs - Opened tabs at half height - Opened tabs at full height - Opened tabs closed - {TABS_COUNT, plural, @@ -4071,11 +4066,9 @@ To change this setting, <resetlink>reset sync

%1$d8 tabs} } - Add new tab to group - Hide fullscreen grid @@ -4084,6 +4077,14 @@ To change this setting, <resetlink>reset sync

Show group's tabs in fullscreen grid + + + + Create group + + + Tab management + diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index 231f24b7c6ea..a78da5046adf 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni @@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/android/config.gni") +import("//chrome/android/features/tab_ui/tab_management_java_sources.gni") import("//chrome/android/feed/feed_java_sources.gni") import("//components/feed/features.gni") import("//components/offline_pages/buildflags/features.gni") @@ -1559,32 +1560,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java", "java/src/org/chromium/chrome/browser/tasks/TasksUma.java", "java/src/org/chromium/chrome/browser/tasks/tabgroup/TabGroupModelFilter.java", - "java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarViewProperties.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabListToolbarView.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabStripToolbarViewBinder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarMediator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripToolbarCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripBottomToolbarCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetProperties.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetToolbarCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetViewBinder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridMediator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/BottomTabGridSheetContent.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewHolder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListCoordinator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabProperties.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewBinder.java", - "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabStripViewHolder.java", + "java/src/org/chromium/chrome/browser/tasks/tab_groups/LayoutTabGroupCreationButton.java", "java/src/org/chromium/chrome/browser/toolbar/HomeButton.java", "java/src/org/chromium/chrome/browser/toolbar/IncognitoStateProvider.java", "java/src/org/chromium/chrome/browser/toolbar/IncognitoToggleTabLayout.java", @@ -2307,9 +2283,6 @@ chrome_test_java_sources = [ "javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java", "javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java", "javatests/src/org/chromium/chrome/browser/tabmodel/document/MockDocumentTabModel.java", - "javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListViewHolderTest.java", - "javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinderTest.java", - "javatests/src/org/chromium/chrome/browser/tasks/tab_list_ui/TestRecyclerViewSimpleViewBinder.java", "javatests/src/org/chromium/chrome/browser/test/ChromeBrowserTestRule.java", "javatests/src/org/chromium/chrome/browser/test/ClearAppDataTestRule.java", "javatests/src/org/chromium/chrome/browser/test/CommandLineInitRule.java", @@ -2534,8 +2507,6 @@ chrome_junit_test_java_sources = [ "junit/src/org/chromium/chrome/browser/tab/TabAttributesTest.java", "junit/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java", "junit/src/org/chromium/chrome/browser/tabstate/TabStateUnitTest.java", - "junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediatorUnitTest.java", - "junit/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediatorUnitTest.java", "junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java", "junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java", "junit/src/org/chromium/chrome/browser/usage_stats/PageViewObserverTest.java", @@ -2566,6 +2537,9 @@ if (enable_feed_in_chrome) { chrome_test_java_sources += feed_test_java_sources } +chrome_junit_test_java_sources += tab_management_junit_java_sources +chrome_test_java_sources += tab_management_test_java_sources + # This is enable_arcore, not package_arcore because the apk merger, for # example, would complain that the java classes.dex differs between 32bit and # 64bit. We must include this, even if we're not packaging the shim. diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 3dd91fda44b6..6ee84437fbfb 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -134870,6 +134870,7 @@ uploading your change for review. +