summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Zemiao Zhu <zemiao@google.com> 2020-09-17 18:28:38 -0700
committer Zemiao Zhu <zemiao@google.com> 2020-09-18 14:28:55 -0700
commit724581f6eab936a6596787a144ebe7e491ab2151 (patch)
tree523a787dba8b0bb57a1067d3d16e9bc1c3b5b8fb
parentcce7f88c777d2469d7a59d1cfc3fe85f9707184d (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
-rw-r--r--res/layout/directory_app_bar.xml13
-rw-r--r--res/layout/directory_header.xml1
-rw-r--r--res/layout/drawer_layout.xml15
-rw-r--r--res/values-sw720dp/dimens.xml2
-rw-r--r--res/values/dimens.xml7
-rw-r--r--res/values/styles.xml2
-rw-r--r--src/com/android/documentsui/ActionModeController.java6
-rw-r--r--src/com/android/documentsui/NavigationViewManager.java69
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java1
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java1
-rw-r--r--src/com/android/documentsui/queries/SearchFragment.java6
11 files changed, 74 insertions, 49 deletions
diff --git a/res/layout/directory_app_bar.xml b/res/layout/directory_app_bar.xml
index 3225ce599..ad80ec201 100644
--- a/res/layout/directory_app_bar.xml
+++ b/res/layout/directory_app_bar.xml
@@ -34,17 +34,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <include layout="@layout/directory_header"/>
+ <include layout="@layout/directory_header" />
</androidx.core.widget.NestedScrollView>
- <View
- android:id="@+id/toolbar_background_layout"
- android:layout_width="match_parent"
- android:layout_height="@dimen/action_bar_space_height"
- android:background="?android:attr/colorBackground"
- app:layout_collapseMode="pin"/>
-
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
@@ -53,7 +46,7 @@
android:background="?android:attr/colorBackground"
android:theme="?actionBarTheme"
android:popupTheme="?actionBarPopupTheme"
- android:elevation="3dp"
+ android:elevation="@dimen/search_bar_elevation"
app:collapseContentDescription="@string/button_back"
app:titleTextAppearance="@style/ToolbarTitle"
app:layout_collapseMode="pin">
@@ -64,7 +57,7 @@
android:layout_height="?android:attr/actionBarSize"
android:gravity="center_vertical"
android:text="@string/search_bar_hint"
- android:textAppearance="@style/SearchBarTitle"/>
+ android:textAppearance="@style/SearchBarTitle" />
</androidx.appcompat.widget.Toolbar>
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
index 94c52e978..b7ab7d96a 100644
--- a/res/layout/directory_header.xml
+++ b/res/layout/directory_header.xml
@@ -18,7 +18,6 @@
android:id="@+id/directory_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/action_bar_space_margin"
android:orientation="vertical">
<com.android.documentsui.HorizontalBreadcrumb
diff --git a/res/layout/drawer_layout.xml b/res/layout/drawer_layout.xml
index 0b2a81d72..7cb185fad 100644
--- a/res/layout/drawer_layout.xml
+++ b/res/layout/drawer_layout.xml
@@ -38,19 +38,12 @@
android:layout_height="match_parent"
app:layout_behavior="@string/scrolling_behavior">
- <LinearLayout
+ <FrameLayout
+ android:id="@+id/container_directory"
+ android:clipToPadding="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical">
-
- <FrameLayout
- android:id="@+id/container_directory"
- android:clipToPadding="false"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- </LinearLayout>
+ android:layout_weight="1" />
<FrameLayout
android:id="@+id/container_search_fragment"
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 7ce3b5307..85c370ab9 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -28,6 +28,4 @@
<dimen name="search_bar_text_margin_start">55dp</dimen>
<dimen name="search_bar_text_margin_end">24dp</dimen>
<dimen name="search_bar_icon_padding">16dp</dimen>
-
- <dimen name="action_bar_space_margin">0dp</dimen>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 07ee69526..d2c01b937 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -110,15 +110,16 @@
<dimen name="apps_row_exit_icon_margin_bottom">6dp</dimen>
<dimen name="apps_row_item_text_margin_horizontal">8dp</dimen>
+ <dimen name="search_bar_elevation">3dp</dimen>
<dimen name="search_bar_radius">8dp</dimen>
<dimen name="search_bar_background_margin_start">0dp</dimen>
<dimen name="search_bar_background_margin_end">0dp</dimen>
<dimen name="search_bar_margin">8dp</dimen>
<dimen name="search_bar_text_size">16dp</dimen>
+
+ <dimen name="action_bar_elevation">3dp</dimen>
+ <dimen name="action_bar_margin">1dp</dimen>
<dimen name="action_bar_size">48dp</dimen>
- <!--This value should equal actionBarSize + (2 x search_bar_margin)-->
- <dimen name="action_bar_space_height">64dp</dimen>
- <dimen name="action_bar_space_margin">@dimen/action_bar_space_height</dimen>
<dimen name="action_mode_text_size">18sp</dimen>
<dimen name="refresh_icon_range">64dp</dimen>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7b90d06dc..d35005af2 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -21,7 +21,7 @@
<style name="ActionModeStyle" parent="Widget.AppCompat.ActionMode">
<!-- attr "height" was used by support lib should not in overlay scope -->
- <item name="height">@dimen/action_bar_space_height</item>
+ <item name="height">@dimen/action_bar_size</item>
<item name="titleTextStyle">@style/ActionModeTitle</item>
<item name="android:layout_margin">@dimen/search_bar_margin</item>
</style>
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);
}