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

Commit 1f7f2397 authored by Aga Wronska's avatar Aga Wronska
Browse files

Keep Search View visible after search completed

Improve Search View behavior
Add Search View background color

Bug:26143355
Change-Id: Ifdc4bfff56fc6244c571dfbeff4179e1515d53b7
parent c9a0d952
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -15,11 +15,19 @@
-->

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- showAsAction flag impacts the behavior of SearchView.
     When set to collapseActionView, collapsing SearchView to icon is the
     default behavior. It would fit UX, however after expanding SearchView is
     shown on the left site of the toolbar (replacing title). Since no way to
     prevent this behavior was found, the flag is set to always. SearchView is
     always visible by default and it is being collapse manually by calling
     setIconified() method
-->
    <item
        android:id="@+id/menu_search"
        android:title="@string/menu_search"
        android:icon="@drawable/ic_menu_search"
        android:showAsAction="always|collapseActionView"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView"
        android:imeOptions="actionSearch" />
    <item
+2 −0
Original line number Diff line number Diff line
@@ -33,4 +33,6 @@
    <color name="item_doc_background">#fffafafa</color>
    <color name="item_doc_background_selected">#ffe0f2f1</color>

    <color name="menu_search_background">#ff676f74</color>

</resources>
+54 −33
Original line number Diff line number Diff line
@@ -38,13 +38,15 @@ import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
@@ -214,6 +216,7 @@ public abstract class BaseActivity extends Activity {
                case R.id.menu_advanced:
                case R.id.menu_file_size:
                case R.id.menu_new_window:
                case R.id.menu_search:
                    break;
                default:
                    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
@@ -315,6 +318,8 @@ public abstract class BaseActivity extends Activity {
     * the (abstract) directoryChanged method will be called.
     * @param anim
     */
    // TODO: Refactor the usage of the method - now it is called not only when the directory
    // changed, but also to refresh the content of the directory while searching
    final void onCurrentDirectoryChanged(int anim) {
        mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
        onDirectoryChanged(anim);
@@ -325,8 +330,12 @@ public abstract class BaseActivity extends Activity {
        }

        updateActionBar();

        // Prevents searchView from being recreated while searching
        if (!mSearchManager.isSearching()) {
            invalidateOptionsMenu();
        }
    }

    final List<String> getExcludedAuthorities() {
        List<String> authorities = new ArrayList<>();
@@ -682,7 +691,7 @@ public abstract class BaseActivity extends Activity {
     * Facade over the various search parts in the menu.
     */
    final class SearchManager implements
            SearchView.OnCloseListener, OnActionExpandListener, OnQueryTextListener,
            SearchView.OnCloseListener, OnQueryTextListener, OnClickListener, OnFocusChangeListener,
            DocumentsToolBar.OnActionViewCollapsedListener {

        private boolean mSearchExpanded;
@@ -700,9 +709,10 @@ public abstract class BaseActivity extends Activity {
            mView = (SearchView) mMenu.getActionView();

            mActionBar.setOnActionViewCollapsedListener(this);
            mMenu.setOnActionExpandListener(this);
            mView.setOnQueryTextListener(this);
            mView.setOnCloseListener(this);
            mView.setOnSearchClickListener(this);
            mView.setOnQueryTextFocusChangeListener(this);
        }

        /**
@@ -755,19 +765,13 @@ public abstract class BaseActivity extends Activity {
         *     search currently.
         */
        boolean cancelSearch() {
            boolean collapsed = false;
            boolean closed = false;

            if (mActionBar.hasExpandedActionView()) {
                mActionBar.collapseActionView();
                collapsed = true;
            }

            if (isExpanded() || isSearching()) {
                onClose();
                closed = true;
                // If the query string is not empty search view won't get iconified
                mView.setQuery("", false);
                mView.setIconified(true);
                return true;
            }
            return collapsed || closed;
            return false;
        }

        boolean isSearching() {
@@ -778,6 +782,11 @@ public abstract class BaseActivity extends Activity {
            return mSearchExpanded;
        }

        /**
         * Clears the search.
         * @return True if the default behavior of clearing/dismissing SearchView should be
         *      overridden. False otherwise.
         */
        @Override
        public boolean onClose() {
            mSearchExpanded = false;
@@ -786,33 +795,33 @@ public abstract class BaseActivity extends Activity {
                return false;
            }

            mView.setBackgroundColor(
                    getResources().getColor(android.R.color.transparent, null));

            // Refresh the directory if a search was done
            if(mState.currentSearch != null) {
                mState.currentSearch = null;
                onCurrentDirectoryChanged(ANIM_NONE);
            return false;
            }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            mSearchExpanded = true;
            updateActionBar();
            return true;
            return false;
        }

        /**
         * Sets mSearchExpanded.
         * Called when search icon is clicked to start search.
         * Used to detect when the view expanded instead of onMenuItemActionExpand, because
         * SearchView has showAsAction set to always and onMenuItemAction* methods are not called.
         */
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            mSearchExpanded = false;
            if (mIgnoreNextCollapse) {
                mIgnoreNextCollapse = false;
                return true;
            }
            mState.currentSearch = null;
            onCurrentDirectoryChanged(ANIM_NONE);
            return true;
        public void onClick (View v) {
            mSearchExpanded = true;
            mView.setBackgroundColor(
                    getResources().getColor(R.color.menu_search_background, null));
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            mSearchExpanded = true;
            mState.currentSearch = query;
            mView.clearFocus();
            onCurrentDirectoryChanged(ANIM_NONE);
@@ -824,6 +833,18 @@ public abstract class BaseActivity extends Activity {
            return false;
        }

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus) {
                if(mState.currentSearch == null) {
                    mView.setIconified(true);
                }
                else if(TextUtils.isEmpty(mView.getQuery())) {
                    cancelSearch();
                }
            }
        }

        @Override
        public void onActionViewCollapsed() {
            updateActionBar();
+0 −1
Original line number Diff line number Diff line
@@ -403,7 +403,6 @@ public class DirectoryFragment extends Fragment {
                    state.derivedMode = result.mode;
                }
                state.derivedSortOrder = result.sortOrder;
                ((BaseActivity) context).onStateChanged();

                updateDisplayState();