diff options
author | 2020-09-17 18:28:38 -0700 | |
---|---|---|
committer | 2020-09-18 14:28:55 -0700 | |
commit | 724581f6eab936a6596787a144ebe7e491ab2151 (patch) | |
tree | 523a787dba8b0bb57a1067d3d16e9bc1c3b5b8fb /src | |
parent | cce7f88c777d2469d7a59d1cfc3fe85f9707184d (diff) |
Add shadow to top toolbar.
To prevent visual glitch when entering selection mode,
we also need to update scroll flag of searchbar,
so that it cannot be scrolled out of screen now.
Bug: 168244886
Test: manual
Change-Id: Ia968ba2719c00ca9fe036ed5a94d2c29a5e2a143
Diffstat (limited to 'src')
5 files changed, 62 insertions, 21 deletions
diff --git a/src/com/android/documentsui/ActionModeController.java b/src/com/android/documentsui/ActionModeController.java index d8cf59000..89b8ff383 100644 --- a/src/com/android/documentsui/ActionModeController.java +++ b/src/com/android/documentsui/ActionModeController.java @@ -46,6 +46,7 @@ public class ActionModeController extends SelectionObserver<String> private final Activity mActivity; private final SelectionTracker<String> mSelectionMgr; + private final NavigationViewManager mNavigator; private final MenuManager mMenuManager; private final MessageBuilder mMessages; @@ -58,11 +59,13 @@ public class ActionModeController extends SelectionObserver<String> public ActionModeController( Activity activity, SelectionTracker<String> selectionMgr, + NavigationViewManager navigator, MenuManager menuManager, MessageBuilder messages) { mActivity = activity; mSelectionMgr = selectionMgr; + mNavigator = navigator; mMenuManager = menuManager; mMessages = messages; } @@ -132,6 +135,8 @@ public class ActionModeController extends SelectionObserver<String> // Re-enable TalkBack for the toolbars, as they are no longer covered by action mode. mScope.accessibilityImportanceSetter.setAccessibilityImportance( View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, R.id.toolbar, R.id.roots_toolbar); + + mNavigator.setActionModeActivated(false); } @Override @@ -141,6 +146,7 @@ public class ActionModeController extends SelectionObserver<String> mode.setTitle(mActivity.getResources().getQuantityString(R.plurals.selected_count, size)); if (size > 0) { + mNavigator.setActionModeActivated(true); // Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to // these controls when using linear navigation. diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java index 204971dce..52d2b1281 100644 --- a/src/com/android/documentsui/NavigationViewManager.java +++ b/src/com/android/documentsui/NavigationViewManager.java @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.util.Log; import android.view.View; import android.view.ViewOutlineProvider; +import android.widget.FrameLayout; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; @@ -35,7 +36,6 @@ import com.android.documentsui.dirlist.AnimationView; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; -import com.google.android.material.tabs.TabLayout; import java.util.function.IntConsumer; @@ -48,6 +48,7 @@ public class NavigationViewManager { private final DrawerController mDrawer; private final Toolbar mToolbar; + private final View mHeader; private final State mState; private final NavigationViewManager.Environment mEnv; private final Breadcrumb mBreadcrumb; @@ -55,9 +56,12 @@ public class NavigationViewManager { private final View mSearchBarView; private final CollapsingToolbarLayout mCollapsingBarLayout; private final Drawable mDefaultActionBarBackground; + private final ViewOutlineProvider mDefaultOutlineProvider; private final ViewOutlineProvider mSearchBarOutlineProvider; private final boolean mShowSearchBar; + private boolean mIsActionModeActivated = false; + public NavigationViewManager( BaseActivity activity, DrawerController drawer, @@ -68,6 +72,7 @@ public class NavigationViewManager { UserIdManager userIdManager) { mToolbar = activity.findViewById(R.id.toolbar); + mHeader = activity.findViewById(R.id.directory_header); mDrawer = drawer; mState = state; mEnv = env; @@ -85,6 +90,7 @@ public class NavigationViewManager { mSearchBarView = activity.findViewById(R.id.searchbar_title); mCollapsingBarLayout = activity.findViewById(R.id.collapsing_toolbar); mDefaultActionBarBackground = mToolbar.getBackground(); + mDefaultOutlineProvider = mToolbar.getOutlineProvider(); mShowSearchBar = activity.getResources().getBoolean(R.bool.show_search_bar); final Resources resources = mToolbar.getResources(); @@ -138,6 +144,11 @@ public class NavigationViewManager { return mProfileTabs.getSelectedUser(); } + public void setActionModeActivated(boolean actionModeActivated) { + mIsActionModeActivated = actionModeActivated; + update(); + } + public void update() { updateScrollFlag(); updateToolbar(); @@ -177,30 +188,44 @@ public class NavigationViewManager { AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) mCollapsingBarLayout.getLayoutParams(); - if (shouldShowSearchBar()) { - lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL - | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS - | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED); - } else { - lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL - | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); - } + lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL + | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); mCollapsingBarLayout.setLayoutParams(lp); } private void updateToolbar() { - if (shouldShowSearchBar()) { + CollapsingToolbarLayout.LayoutParams toolbarLayoutParams = + (CollapsingToolbarLayout.LayoutParams) mToolbar.getLayoutParams(); + + int headerTopOffset = 0; + if (shouldShowSearchBar() && !mIsActionModeActivated) { mToolbar.setBackgroundResource(R.drawable.search_bar_background); mToolbar.setOutlineProvider(mSearchBarOutlineProvider); + int searchBarMargin = mToolbar.getResources().getDimensionPixelSize( + R.dimen.search_bar_margin); + toolbarLayoutParams.setMargins(searchBarMargin, searchBarMargin, searchBarMargin, + searchBarMargin); + mToolbar.setLayoutParams(toolbarLayoutParams); + mToolbar.setElevation( + mToolbar.getResources().getDimensionPixelSize(R.dimen.search_bar_elevation)); + headerTopOffset = toolbarLayoutParams.height + searchBarMargin * 2; } else { mToolbar.setBackground(mDefaultActionBarBackground); - mToolbar.setOutlineProvider(null); + mToolbar.setOutlineProvider(mDefaultOutlineProvider); + int actionBarMargin = mToolbar.getResources().getDimensionPixelSize( + R.dimen.action_bar_margin); + toolbarLayoutParams.setMargins(0, 0, 0, /* bottom= */ actionBarMargin); + mToolbar.setLayoutParams(toolbarLayoutParams); + mToolbar.setElevation( + mToolbar.getResources().getDimensionPixelSize(R.dimen.action_bar_elevation)); + headerTopOffset = toolbarLayoutParams.height + actionBarMargin; } - if (mCollapsingBarLayout != null) { - View overlayBackground = - mCollapsingBarLayout.findViewById(R.id.toolbar_background_layout); - overlayBackground.setVisibility(shouldShowSearchBar() ? View.GONE : View.VISIBLE); + if (!mIsActionModeActivated) { + FrameLayout.LayoutParams headerLayoutParams = + (FrameLayout.LayoutParams) mHeader.getLayoutParams(); + headerLayoutParams.setMargins(0, /* top= */ headerTopOffset, 0, 0); + mHeader.setLayoutParams(headerLayoutParams); } } @@ -209,7 +234,8 @@ public class NavigationViewManager { } // Hamburger if drawer is present, else sad nullness. - private @Nullable Drawable getActionBarIcon() { + private @Nullable + Drawable getActionBarIcon() { if (mDrawer.isPresent()) { return mToolbar.getContext().getDrawable(R.drawable.ic_hamburger); } else { @@ -223,16 +249,23 @@ public class NavigationViewManager { interface Breadcrumb { void setup(Environment env, State state, IntConsumer listener); + void show(boolean visibility); + void postUpdate(); } interface Environment { - @Deprecated // Use CommonAddones#getCurrentRoot + @Deprecated + // Use CommonAddones#getCurrentRoot RootInfo getCurrentRoot(); + String getDrawerTitle(); - @Deprecated // Use CommonAddones#refreshCurrentRootAndDirectory + + @Deprecated + // Use CommonAddones#refreshCurrentRootAndDirectory void refreshCurrentRootAndDirectory(int animation); + boolean isSearchExpanded(); } } diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java index 1afb38eac..a25672650 100644 --- a/src/com/android/documentsui/files/FilesActivity.java +++ b/src/com/android/documentsui/files/FilesActivity.java @@ -132,6 +132,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler mInjector.actionModeController = new ActionModeController( this, mInjector.selectionMgr, + mNavigator, mInjector.menuManager, mInjector.messages); diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java index 5328c640e..c2fbd50a0 100644 --- a/src/com/android/documentsui/picker/PickActivity.java +++ b/src/com/android/documentsui/picker/PickActivity.java @@ -121,6 +121,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { mInjector.actionModeController = new ActionModeController( this, mInjector.selectionMgr, + mNavigator, mInjector.menuManager, mInjector.messages); diff --git a/src/com/android/documentsui/queries/SearchFragment.java b/src/com/android/documentsui/queries/SearchFragment.java index 667dc8e48..0223559c1 100644 --- a/src/com/android/documentsui/queries/SearchFragment.java +++ b/src/com/android/documentsui/queries/SearchFragment.java @@ -40,7 +40,7 @@ import com.android.documentsui.R; import java.util.List; -public class SearchFragment extends Fragment{ +public class SearchFragment extends Fragment { private static final String TAG = "SearchFragment"; private static final String KEY_QUERY = "query"; @@ -121,14 +121,14 @@ public class SearchFragment extends Fragment{ mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this::onHistoryItemClicked); - View toolbar = getActivity().findViewById(R.id.toolbar_background_layout); + View toolbar = getActivity().findViewById(R.id.toolbar); if (toolbar != null) { // Align top with the bottom of search bar. FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.setMargins(0, getResources().getDimensionPixelSize( - R.dimen.action_bar_space_height), 0, 0); + R.dimen.action_bar_margin) + toolbar.getLayoutParams().height, 0, 0); getView().setLayoutParams(layoutParams); } |