diff options
author | 2019-08-20 17:57:27 +0800 | |
---|---|---|
committer | 2019-08-30 16:09:50 +0800 | |
commit | 0c9bebf505a13de3e821b9854da8cdf1bee580f8 (patch) | |
tree | cc5f8cb4cccd76a77b46c6861f78404107dbe934 | |
parent | 7b1ba41ec0137956a33c05fe7f2e187c5c3f2183 (diff) |
Implement pause search history
Use preferences to enable or disable search history recording.
Bug: 138173111
Test: manual
Test: atest DocumentsUIGoogleTests
Change-Id: I105184198a0d527c430a4eb3fa4e6efdf996e947
6 files changed, 74 insertions, 10 deletions
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java index 733a74cff..389ef6c36 100644 --- a/src/com/android/documentsui/BaseActivity.java +++ b/src/com/android/documentsui/BaseActivity.java @@ -247,7 +247,7 @@ public abstract class BaseActivity ViewGroup chipGroup = findViewById(R.id.search_chip_group); mSearchManager = new SearchViewManager(searchListener, queryInterceptor, - chipGroup, icicle); + chipGroup, icicle, mInjector.prefs::isRecordSearch); // initialize the chip sets by accept mime types mSearchManager.initChipSets(mState.acceptMimes); // update the chip items by the mime types of the root diff --git a/src/com/android/documentsui/prefs/ScopedPreferences.java b/src/com/android/documentsui/prefs/ScopedPreferences.java index 545358539..a0db76ef7 100644 --- a/src/com/android/documentsui/prefs/ScopedPreferences.java +++ b/src/com/android/documentsui/prefs/ScopedPreferences.java @@ -30,13 +30,23 @@ import com.android.documentsui.R; */ public interface ScopedPreferences { - static final String INCLUDE_DEVICE_ROOT = "includeDeviceRoot"; - static final String ENABLE_ARCHIVE_CREATION = "enableArchiveCreation-"; + String INCLUDE_DEVICE_ROOT = "includeDeviceRoot"; + String RECORD_SEARCH = "recordSearch"; boolean getShowDeviceRoot(); void setShowDeviceRoot(boolean display); /** + * Get boolean preferences values of recordSearch. + */ + boolean isRecordSearch(); + + /** + * Set boolean preferences values of recordSearch. + */ + void setRecordSearch(boolean show); + + /** * @param scope An arbitrary string representitive of the scope * for prefs that are set using this object. */ @@ -70,6 +80,16 @@ public interface ScopedPreferences { public void setShowDeviceRoot(boolean display) { mSharedPrefs.edit().putBoolean(INCLUDE_DEVICE_ROOT, display).apply(); } + + @Override + public boolean isRecordSearch() { + return mSharedPrefs.getBoolean(RECORD_SEARCH, true); + } + + @Override + public void setRecordSearch(boolean show) { + mSharedPrefs.edit().putBoolean(RECORD_SEARCH, show).apply(); + } } static boolean shouldBackup(String s) { diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java index c498329b9..8564d7a9c 100644 --- a/src/com/android/documentsui/queries/SearchViewManager.java +++ b/src/com/android/documentsui/queries/SearchViewManager.java @@ -37,6 +37,7 @@ import android.view.View.OnFocusChangeListener; import android.view.ViewGroup; import androidx.annotation.GuardedBy; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.widget.SearchView; @@ -54,6 +55,7 @@ import com.android.documentsui.base.State; import java.util.Timer; import java.util.TimerTask; +import java.util.function.BooleanSupplier; /** * Manages searching UI behavior. @@ -72,6 +74,7 @@ public class SearchViewManager implements private final SearchChipViewManager mChipViewManager; private final Timer mTimer; private final Handler mUiHandler; + private final BooleanSupplier mRecordSearchSupplier; private final Object mSearchLock; @GuardedBy("mSearchLock") @@ -94,9 +97,10 @@ public class SearchViewManager implements SearchManagerListener listener, EventHandler<String> commandProcessor, ViewGroup chipGroup, - @Nullable Bundle savedState) { + @Nullable Bundle savedState, + @NonNull BooleanSupplier recordSearchSupplier) { this(listener, commandProcessor, new SearchChipViewManager(chipGroup), savedState, - new Timer(), new Handler(Looper.getMainLooper())); + recordSearchSupplier, new Timer(), new Handler(Looper.getMainLooper())); } @VisibleForTesting @@ -105,6 +109,7 @@ public class SearchViewManager implements EventHandler<String> commandProcessor, SearchChipViewManager chipViewManager, @Nullable Bundle savedState, + @NonNull BooleanSupplier recordSearchSupplier, Timer timer, Handler handler) { assert (listener != null); @@ -117,6 +122,7 @@ public class SearchViewManager implements mUiHandler = handler; mChipViewManager = chipViewManager; mChipViewManager.setSearchChipViewManagerListener(this::onChipCheckedStateChanged); + mRecordSearchSupplier = recordSearchSupplier; if (savedState != null) { mCurrentSearch = savedState.getString(Shared.EXTRA_QUERY); @@ -538,6 +544,14 @@ public class SearchViewManager implements * Record current search for history. */ public void recordHistory() { + if (!mRecordSearchSupplier.getAsBoolean()) { + return; + } + + recordHistoryInternal(); + } + + protected void recordHistoryInternal() { SearchHistoryManager.getInstance( mSearchView.getContext().getApplicationContext()).addHistory(mCurrentSearch); } diff --git a/tests/common/com/android/documentsui/testing/TestScopedPreferences.java b/tests/common/com/android/documentsui/testing/TestScopedPreferences.java index e2227b99c..2ef79c4d4 100644 --- a/tests/common/com/android/documentsui/testing/TestScopedPreferences.java +++ b/tests/common/com/android/documentsui/testing/TestScopedPreferences.java @@ -24,6 +24,7 @@ import com.android.documentsui.prefs.ScopedPreferences; public class TestScopedPreferences implements ScopedPreferences { private boolean mShowDeviceRoot; + private boolean mIsRecordSearch; @Override public boolean getShowDeviceRoot() { @@ -34,4 +35,14 @@ public class TestScopedPreferences implements ScopedPreferences { public void setShowDeviceRoot(boolean display) { mShowDeviceRoot = display; } - } + + @Override + public boolean isRecordSearch() { + return mIsRecordSearch; + } + + @Override + public void setRecordSearch(boolean show) { + mIsRecordSearch = show; + } +} diff --git a/tests/common/com/android/documentsui/testing/TestSearchViewManager.java b/tests/common/com/android/documentsui/testing/TestSearchViewManager.java index dbc5c4480..f5cde8aa0 100644 --- a/tests/common/com/android/documentsui/testing/TestSearchViewManager.java +++ b/tests/common/com/android/documentsui/testing/TestSearchViewManager.java @@ -66,7 +66,7 @@ public class TestSearchViewManager extends SearchViewManager { } }, new CommandInterceptor(new TestFeatures()), mock(ViewGroup.class), - null /* savedState */); + null /* savedState */, () -> true /* recordSearchSupplier */); } @Override diff --git a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java index c4be9f3b1..07c5324e4 100644 --- a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java +++ b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java @@ -26,6 +26,7 @@ import static com.android.documentsui.base.State.ACTION_GET_CONTENT; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.mock; @@ -42,6 +43,7 @@ import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -66,6 +68,7 @@ import java.util.HashSet; import java.util.Set; import java.util.Timer; import java.util.TimerTask; +import java.util.function.BooleanSupplier; @RunWith(AndroidJUnit4.class) @SmallTest @@ -80,6 +83,7 @@ public final class SearchViewManagerTest { private SearchChipViewManager mSearchChipViewManager; private boolean mListenerOnSearchChangedCalled; + private boolean mRecordSearch; @Before public void setUp() { @@ -116,8 +120,11 @@ public final class SearchViewManagerTest { ViewGroup chipGroup = mock(ViewGroup.class); mSearchChipViewManager = spy(new SearchChipViewManager(chipGroup)); + BooleanSupplier supplier = () -> mRecordSearch; + mRecordSearch = true; mSearchViewManager = new TestableSearchViewManager(searchListener, mTestEventHandler, - mSearchChipViewManager, null /* savedState */, mTestTimer, mTestHandler); + mSearchChipViewManager, null /* savedState */, supplier, + mTestTimer, mTestHandler); mTestMenu = TestMenu.create(); mSearchMenuItem = mTestMenu.findItem(R.id.option_menu_search); @@ -133,9 +140,11 @@ public final class SearchViewManagerTest { EventHandler<String> commandProcessor, SearchChipViewManager chipViewManager, @Nullable Bundle savedState, + @NonNull BooleanSupplier pauseHistorySupplier, Timer timer, Handler handler) { - super(listener, commandProcessor, chipViewManager, savedState, timer, handler); + super(listener, commandProcessor, chipViewManager, savedState, + pauseHistorySupplier, timer, handler); } @Override @@ -146,7 +155,7 @@ public final class SearchViewManagerTest { } @Override - public void recordHistory() { + protected void recordHistoryInternal() { mHistoryRecorded = getCurrentSearch(); } @@ -313,6 +322,16 @@ public final class SearchViewManagerTest { } @Test + public void testHistoryRecorded_pauseRecord() { + mRecordSearch = false; + + mSearchViewManager.onClick(null); + mSearchViewManager.onQueryTextSubmit("q"); + + assertNull(mSearchViewManager.getRecordedHistory()); + } + + @Test public void testCheckedChipItems_IsEmptyIfSearchCanceled() throws Exception { mSearchViewManager.onClick(null); mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); |