Merge "Update text input layout style and fix focus bug."
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 87438a8..6fe7b1e 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -103,6 +103,7 @@
private RootsMonitor<BaseActivity> mRootsMonitor;
private long mStartTime;
+ private boolean mHasQueryContentFromIntent;
private PreferencesMonitor mPreferencesMonitor;
@@ -194,7 +195,12 @@
mSearchManager = new SearchViewManager(searchListener, queryInterceptor,
chipGroup, icicle);
mSearchManager.updateChips(getCurrentRoot().derivedMimeTypes);
-
+ // parse the query content from intent when launch the
+ // activity at the first time
+ if (icicle == null) {
+ mHasQueryContentFromIntent = mSearchManager.parseQueryContentFromIntent(getIntent(),
+ mState.action);
+ }
mSortController = SortController.create(this, mState.derivedMode, mState.sortModel);
mPreferencesMonitor = new PreferencesMonitor(
@@ -440,6 +446,12 @@
// from the saved state passed in onCreate().
mSearchManager.cancelSearch();
+ // only set the query content in the first launch
+ if (mHasQueryContentFromIntent) {
+ mHasQueryContentFromIntent = false;
+ mSearchManager.setCurrentSearch(mSearchManager.getQueryContentFromIntent());
+ }
+
mState.derivedMode = LocalPreferences.getViewMode(this, mState.stack.getRoot(), MODE_GRID);
refreshDirectory(anim);
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index 9cabf2c..0cf9e9f 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -17,7 +17,11 @@
package com.android.documentsui.queries;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
+import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
+import static com.android.documentsui.base.State.ACTION_OPEN;
+import static com.android.documentsui.base.State.ActionType;
+import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -44,6 +48,7 @@
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
+import com.android.documentsui.base.State;
import com.google.android.material.chip.ChipGroup;
@@ -74,6 +79,7 @@
@GuardedBy("mSearchLock")
private @Nullable TimerTask mQueuedSearchTask;
private @Nullable String mCurrentSearch;
+ private String mQueryContentFromIntent;
private boolean mSearchExpanded;
private boolean mIgnoreNextClose;
private boolean mFullBar;
@@ -123,6 +129,24 @@
}
/**
+ * Parse the query content from Intent. If the action is not {@link State#ACTION_GET_CONTENT}
+ * or {@link State#ACTION_OPEN}, don't perform search.
+ * @param intent the intent to parse.
+ * @param action the action to check.
+ * @return True, if get the query content from the intent. Otherwise, false.
+ */
+ public boolean parseQueryContentFromIntent(Intent intent, @ActionType int action) {
+ if (action == ACTION_OPEN || action == ACTION_GET_CONTENT) {
+ final String queryString = intent.getStringExtra(Intent.EXTRA_CONTENT_QUERY);
+ if (!TextUtils.isEmpty(queryString)) {
+ mQueryContentFromIntent = queryString;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Build the bundle of query arguments.
* Example: search string and mime types
*
@@ -256,7 +280,7 @@
* @return True if it cancels search. False if it does not operate search currently.
*/
public boolean cancelSearch() {
- if (isExpanded() || isSearching()) {
+ if (mSearchView != null && (isExpanded() || isSearching())) {
cancelQueuedSearch();
// If the query string is not empty search view won't get iconified
mSearchView.setQuery("", false);
@@ -449,6 +473,19 @@
return mCurrentSearch;
}
+ /**
+ * Get the query content from intent.
+ * @return If has query content, return the query content. Otherwise, return null
+ * @see #parseQueryContentFromIntent(Intent, int)
+ */
+ public String getQueryContentFromIntent() {
+ return mQueryContentFromIntent;
+ }
+
+ public void setCurrentSearch(String queryString) {
+ mCurrentSearch = queryString;
+ }
+
public boolean isSearching() {
return mCurrentSearch != null || mChipViewManager.hasCheckedItems();
}
diff --git a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
index ba62e2f..73fc39f 100644
--- a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
@@ -466,6 +466,16 @@
}
@Test
+ public void testOpenAppRootWithQueryContent_matchedContent() throws Exception {
+ final String queryContent = "query";
+ mActivity.intent.putExtra(Intent.EXTRA_CONTENT_QUERY, queryContent);
+ mHandler.openRoot(TestResolveInfo.create());
+ assertEquals(queryContent,
+ mActivity.startActivityForResult.getLastValue().first.getStringExtra(
+ Intent.EXTRA_CONTENT_QUERY));
+ }
+
+ @Test
public void testPreviewItem() throws Exception {
mActivity.resources.setQuickViewerPackage("corptropolis.viewer");
mActivity.currentRoot = TestProvidersAccess.HOME;
diff --git a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
index 44ec387..e0e5a3a 100644
--- a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
+++ b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
@@ -16,12 +16,14 @@
package com.android.documentsui.queries;
+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.assertTrue;
import static org.mockito.Mockito.mock;
+import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.provider.DocumentsContract;
@@ -114,6 +116,27 @@
mTestHandler.dispatchAllMessages();
}
+
+ @Test
+ public void testParseQueryContent_ActionIsNotMatched_NotParseQueryContent() {
+ final String queryString = "query";
+ Intent intent = new Intent();
+ intent.putExtra(Intent.EXTRA_CONTENT_QUERY, queryString);
+
+ mSearchViewManager.parseQueryContentFromIntent(intent, -1);
+ assertTrue(mSearchViewManager.getQueryContentFromIntent() == null);
+ }
+
+ @Test
+ public void testParseQueryContent_queryContentIsMatched() {
+ final String queryString = "query";
+ Intent intent = new Intent();
+ intent.putExtra(Intent.EXTRA_CONTENT_QUERY, queryString);
+
+ mSearchViewManager.parseQueryContentFromIntent(intent, ACTION_GET_CONTENT);
+ assertEquals(queryString, mSearchViewManager.getQueryContentFromIntent());
+ }
+
@Test
public void testIsExpanded_ExpandsOnClick() {
mSearchViewManager.onClick(null);