Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2db3d79 authored by Ben Reich's avatar Ben Reich
Browse files

Update selection logic to use a separate MaterialToolbar

The selection bar was updated (behind the material3 flag) to update the
existing MaterialToolbar with the action mode menu. Unfortunately that
doesn't seem to play nice with the ActionView / ActionProvider pattern
(which the SearchView is using).

It seems the only way to achieve a detached selection bar (i.e. not an
actionmode bar) is to have a hidden secondary MaterialToolbar which
shows / hides when a selection is made.

This also largely walks back the changes that were made in ag/31787743
as well given they are not required anymore.

Bug: 412895530
Test: atest com.android.documentsui.FilesActivityUiTest
Test: atest com.android.documentsui.SearchViewUiTest
Flag: com.android.documentsui.flags.use_material3
Change-Id: I28877a84bd75a6ca584c125feeaeb38ac7dd81f2
parent 8a881537
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -66,6 +66,15 @@


        </com.google.android.material.appbar.MaterialToolbar>
        </com.google.android.material.appbar.MaterialToolbar>


        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/selection_bar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:touchscreenBlocksFocus="false"
            android:background="?attr/colorSurfaceBright"
            android:visibility="gone"
            app:layout_collapseMode="pin"/>

    </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.CollapsingToolbarLayout>


</com.google.android.material.appbar.AppBarLayout>
</com.google.android.material.appbar.AppBarLayout>
+27 −13
Original line number Original line Diff line number Diff line
@@ -54,6 +54,10 @@
                android:paddingTop="@dimen/main_container_padding_top"
                android:paddingTop="@dimen/main_container_padding_top"
                android:background="@drawable/main_container_top_section_background">
                android:background="@drawable/main_container_top_section_background">


                <FrameLayout
                    android:layout_height="match_parent"
                    android:layout_width="match_parent">

                    <com.google.android.material.appbar.MaterialToolbar
                    <com.google.android.material.appbar.MaterialToolbar
                        android:id="@+id/toolbar"
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_width="match_parent"
@@ -71,6 +75,16 @@


                    </com.google.android.material.appbar.MaterialToolbar>
                    </com.google.android.material.appbar.MaterialToolbar>


                    <com.google.android.material.appbar.MaterialToolbar
                        android:id="@+id/selection_bar"
                        android:layout_width="match_parent"
                        android:layout_height="?attr/actionBarSize"
                        android:touchscreenBlocksFocus="false"
                        android:background="?attr/colorSurfaceBright"
                        android:visibility="gone"/>

                </FrameLayout>

                <include layout="@layout/directory_header" />
                <include layout="@layout/directory_header" />


            </LinearLayout>
            </LinearLayout>
+27 −13
Original line number Original line Diff line number Diff line
@@ -85,6 +85,10 @@
                    android:paddingTop="@dimen/main_container_padding_top"
                    android:paddingTop="@dimen/main_container_padding_top"
                    android:background="@drawable/main_container_top_section_background">
                    android:background="@drawable/main_container_top_section_background">


                    <FrameLayout
                        android:layout_height="match_parent"
                        android:layout_width="match_parent">

                        <com.google.android.material.appbar.MaterialToolbar
                        <com.google.android.material.appbar.MaterialToolbar
                            android:id="@+id/toolbar"
                            android:id="@+id/toolbar"
                            android:layout_width="match_parent"
                            android:layout_width="match_parent"
@@ -102,6 +106,16 @@


                        </com.google.android.material.appbar.MaterialToolbar>
                        </com.google.android.material.appbar.MaterialToolbar>


                        <com.google.android.material.appbar.MaterialToolbar
                            android:id="@+id/selection_bar"
                            android:layout_width="match_parent"
                            android:layout_height="?attr/actionBarSize"
                            android:touchscreenBlocksFocus="false"
                            android:background="?attr/colorSurfaceBright"
                            android:visibility="gone"/>

                    </FrameLayout>

                    <include layout="@layout/directory_header" />
                    <include layout="@layout/directory_header" />


                </LinearLayout>
                </LinearLayout>
+7 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,13 @@
     limitations under the License.
     limitations under the License.
-->
-->


<!--
     All of the `item`'s below have both `android:showAsAction` and `app:showAsAction`
     intentionally. This is because when the `use_material3` flag is disabled, the menu is inflated
     into a menu via ActionMode and when the flag is enabled it is inflated into a MaterialToolbar.
     The former requires `android:showAsAction` whilst the latter requires `app:showAsAction`. When
     the `use_material3` flag has rolled out by default, the `android:showAsAction` can be removed.
-->
<menu
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    xmlns:app="http://schemas.android.com/apk/res-auto">
+13 −18
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.State.MODE_GRID;
import static com.android.documentsui.base.State.MODE_GRID;
import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import static com.android.documentsui.util.FlagUtils.isUsePeekPreviewFlagEnabled;
import static com.android.documentsui.util.FlagUtils.isUsePeekPreviewFlagEnabled;
import static com.android.documentsui.util.FlagUtils.isVisualSignalsFlagEnabled;
import static com.android.documentsui.util.Material3Config.getRes;
import static com.android.documentsui.util.Material3Config.getRes;


import android.content.Context;
import android.content.Context;
@@ -287,7 +288,7 @@ public abstract class BaseActivity


                if (isUseMaterial3FlagEnabled()) {
                if (isUseMaterial3FlagEnabled()) {
                    // Whenever a search chip is clicked, close the navigation bar.
                    // Whenever a search chip is clicked, close the navigation bar.
                    mNavigator.closeSelectionBar();
                    mInjector.selectionBarController.closeSelectionBar();
                }
                }
            }
            }


@@ -444,8 +445,7 @@ public abstract class BaseActivity
                    breadcrumb,
                    breadcrumb,
                    profileTabsContainer,
                    profileTabsContainer,
                    DocumentsApplication.getUserManagerState(this),
                    DocumentsApplication.getUserManagerState(this),
                    mConfigStore,
                    mConfigStore);
                    mInjector);
        }
        }
        return new NavigationViewManager(
        return new NavigationViewManager(
                this,
                this,
@@ -455,8 +455,7 @@ public abstract class BaseActivity
                breadcrumb,
                breadcrumb,
                profileTabsContainer,
                profileTabsContainer,
                DocumentsApplication.getUserIdManager(this),
                DocumentsApplication.getUserIdManager(this),
                mConfigStore,
                mConfigStore);
                mInjector);
    }
    }


    public void onPreferenceChanged(String pref) {
    public void onPreferenceChanged(String pref) {
@@ -472,7 +471,7 @@ public abstract class BaseActivity


        Runnable finishActionMode =
        Runnable finishActionMode =
                (isUseMaterial3FlagEnabled())
                (isUseMaterial3FlagEnabled())
                        ? mNavigator::closeSelectionBar
                        ? mInjector.selectionBarController::closeSelectionBar
                        : mInjector.actionModeController::finishActionMode;
                        : mInjector.actionModeController::finishActionMode;


        mRootsMonitor =
        mRootsMonitor =
@@ -496,13 +495,6 @@ public abstract class BaseActivity


    @Override
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    public boolean onCreateOptionsMenu(Menu menu) {
        if (isUseMaterial3FlagEnabled()) {
            // In Material3 the menu is now inflated in the `NavigationViewMenu`. This is currently
            // to allow for us to inflate between the action_menu and the activity menu. Once the
            // Material 3 flag is removed, the menus will be merged and we can rely on this single
            // inflation point.
            return super.onCreateOptionsMenu(menu);
        }
        boolean showMenu = super.onCreateOptionsMenu(menu);
        boolean showMenu = super.onCreateOptionsMenu(menu);


        getMenuInflater().inflate(getRes(R.menu.activity), menu);
        getMenuInflater().inflate(getRes(R.menu.activity), menu);
@@ -527,17 +519,20 @@ public abstract class BaseActivity
    @CallSuper
    @CallSuper
    public boolean onPrepareOptionsMenu(Menu menu) {
    public boolean onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        super.onPrepareOptionsMenu(menu);
        mSearchManager.showMenu(mState.stack);

        // Remove the subMenu when material3 is launched b/379776735.
        // Remove the subMenu when material3 is launched b/379776735.
        if (isUseMaterial3FlagEnabled()) {
        if (isUseMaterial3FlagEnabled()) {
            if (mNavigator != null) {
            mInjector.menuManager.updateSubMenu(null);
                mNavigator.updateActionMenu();
            }
        } else {
        } else {
            mSearchManager.showMenu(mState.stack);
            final ActionMenuView subMenuView = findViewById(getRes(R.id.sub_menu));
            final ActionMenuView subMenuView = findViewById(getRes(R.id.sub_menu));
            mInjector.menuManager.updateSubMenu(subMenuView.getMenu());
            mInjector.menuManager.updateSubMenu(subMenuView.getMenu());
        }
        }


        if (isVisualSignalsFlagEnabled()) {
            mInjector.menuManager.instantiateJobProgress(menu);
        }

        return true;
        return true;
    }
    }


@@ -647,7 +642,7 @@ public abstract class BaseActivity
        }
        }


        if (isUseMaterial3FlagEnabled()) {
        if (isUseMaterial3FlagEnabled()) {
            mNavigator.closeSelectionBar();
            mInjector.selectionBarController.closeSelectionBar();
        } else {
        } else {
            mInjector.actionModeController.finishActionMode();
            mInjector.actionModeController.finishActionMode();
        }
        }
Loading