summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2019-08-20 17:57:27 +0800
committer Tony Huang <tonyychuang@google.com> 2019-08-30 16:09:50 +0800
commit0c9bebf505a13de3e821b9854da8cdf1bee580f8 (patch)
treecc5f8cb4cccd76a77b46c6861f78404107dbe934
parent7b1ba41ec0137956a33c05fe7f2e187c5c3f2183 (diff)
Implement pause search history
Use preferences to enable or disable search history recording. Bug: 138173111 Test: manual Test: atest DocumentsUIGoogleTests Change-Id: I105184198a0d527c430a4eb3fa4e6efdf996e947
-rw-r--r--src/com/android/documentsui/BaseActivity.java2
-rw-r--r--src/com/android/documentsui/prefs/ScopedPreferences.java24
-rw-r--r--src/com/android/documentsui/queries/SearchViewManager.java18
-rw-r--r--tests/common/com/android/documentsui/testing/TestScopedPreferences.java13
-rw-r--r--tests/common/com/android/documentsui/testing/TestSearchViewManager.java2
-rw-r--r--tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java25
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();