From 6c423bd518da0852f9b18782c7b0ff743c92e7fe Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 11 Jan 2017 14:31:47 -0800 Subject: [PATCH] Parse external intent from cursor correctly for search. Test: RunSettingsRoboTests Change-Id: I7f4d442729b3376f28679a3372244a87924b96a1 --- .../CursorToSearchResultConverter.java | 8 +- .../CursorToSearchResultConverterTest.java | 77 ++++++++++--------- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/src/com/android/settings/search2/CursorToSearchResultConverter.java b/src/com/android/settings/search2/CursorToSearchResultConverter.java index 3255c0c0e5e..540932c01d9 100644 --- a/src/com/android/settings/search2/CursorToSearchResultConverter.java +++ b/src/com/android/settings/search2/CursorToSearchResultConverter.java @@ -30,7 +30,6 @@ import android.text.TextUtils; import android.util.Log; import com.android.settings.SettingsActivity; import com.android.settings.Utils; -import com.android.settings.search.Index; import java.util.ArrayList; import java.util.Collections; @@ -41,6 +40,8 @@ import java.util.Map; import java.util.Set; import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_ID; +import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS; +import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SCREEN_TITLE; import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_TITLE; import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SUMMARY_ON; import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_CLASS_NAME; @@ -176,7 +177,7 @@ class CursorToSearchResultConverter { String className, String pkgName ) { IntentPayload payload; if (TextUtils.isEmpty(action)) { - final String screenTitle = cursor.getString(Index.COLUMN_INDEX_SCREEN_TITLE); + final String screenTitle = cursor.getString(COLUMN_INDEX_SCREEN_TITLE); // Action is null, we will launch it as a sub-setting final Bundle args = new Bundle(); args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key); @@ -185,8 +186,7 @@ class CursorToSearchResultConverter { payload = new IntentPayload(intent); } else { final Intent intent = new Intent(action); - final String targetClass = cursor.getString( - Index.COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS); + final String targetClass = cursor.getString(COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS); if (!TextUtils.isEmpty(pkgName) && !TextUtils.isEmpty(targetClass)) { final ComponentName component = new ComponentName(pkgName, targetClass); intent.setComponent(component); diff --git a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java index 1847d0eabc4..6ad7501bc77 100644 --- a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java +++ b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java @@ -22,8 +22,8 @@ import android.content.Context; import android.content.Intent; import android.database.MatrixCursor; import android.graphics.drawable.Drawable; - import android.util.ArrayMap; + import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SubSettings; @@ -40,50 +40,30 @@ import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; -import static com.android.settings.search.IndexDatabaseHelper.IndexColumns; - import static com.google.common.truth.Truth.assertThat; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class CursorToSearchResultConverterTest { - private CursorToSearchResultConverter mConverter; - - private static final String[] COLUMNS = new String[]{ - IndexColumns.DOCID, - IndexColumns.DATA_TITLE, - IndexColumns.DATA_SUMMARY_ON, - IndexColumns.DATA_SUMMARY_OFF, - IndexColumns.CLASS_NAME, - IndexColumns.SCREEN_TITLE, - IndexColumns.ICON, - IndexColumns.INTENT_ACTION, - IndexColumns.INTENT_TARGET_PACKAGE, - IndexColumns.INTENT_TARGET_CLASS, - IndexColumns.DATA_KEY_REF, - IndexColumns.PAYLOAD_TYPE, - IndexColumns.PAYLOAD - }; - private static final String ID = "id"; private static final String[] TITLES = {"title1", "title2", "title3"}; private static final String SUMMARY = "summary"; + private static final String TARGET_PACKAGE = "a.b.c"; + private static final String TARGET_CLASS = "a.b.c.class"; private static final String QUERY = "query"; - private final int BASE_RANK = 1; + private static final Intent INTENT = new Intent("com.android.settings"); + private static final int ICON = R.drawable.ic_search_history; + private static final int BASE_RANK = 1; private static final int EXAMPLES = 3; - private static final Intent mIntent = new Intent("com.android.settings"); - private static final int mIcon = R.drawable.ic_search_history; - private List mResults; - private Drawable mDrawable; + private CursorToSearchResultConverter mConverter; @Before public void setUp() { Context context = Robolectric.buildActivity(Activity.class).get(); - mDrawable = context.getDrawable(mIcon); - mResults = new ArrayList<>(); + mDrawable = context.getDrawable(ICON); mConverter = new CursorToSearchResultConverter(context, QUERY); } @@ -128,6 +108,7 @@ public class CursorToSearchResultConverterTest { List results = mConverter.convertCursor(getDummyCursor(), BASE_RANK); for (int i = 0; i < EXAMPLES; i++) { Drawable resultDrawable = results.get(i).icon; + assertThat(resultDrawable).isNotNull(); assertThat(resultDrawable.toString()).isEqualTo(mDrawable.toString()); } } @@ -154,7 +135,7 @@ public class CursorToSearchResultConverterTest { @Test public void testParseCursor_MatchesIntentForSubSettings() { - MatrixCursor cursor = new MatrixCursor(COLUMNS); + MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS); final String BLANK = ""; cursor.addRow(new Object[]{ ID, // Doc ID @@ -184,13 +165,39 @@ public class CursorToSearchResultConverterTest { for (int i = 0; i < EXAMPLES; i++) { payload = (IntentPayload) results.get(i).payload; Intent intent = payload.intent; - assertThat(intent.getAction()).isEqualTo(mIntent.getAction()); + assertThat(intent.getAction()).isEqualTo(INTENT.getAction()); } } + @Test + public void testParseCursor_MatchesIntentPayloadForExternalApps() { + MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS); + cursor.addRow(new Object[]{ + ID, // Doc ID + TITLES[0], // Title + SUMMARY, // Summary on + SUMMARY, // summary off + null, // class + TITLES[0], // Title + null, // icon + Intent.ACTION_VIEW, // action + TARGET_PACKAGE, // target package + TARGET_CLASS, // target class + QUERY, // Key + PayloadType.INTENT, // Payload Type + null // Payload + }); + List results = mConverter.convertCursor(cursor, BASE_RANK); + IntentPayload payload = (IntentPayload) results.get(0).payload; + Intent intent = payload.intent; + + assertThat(intent.getComponent().getPackageName()).isEqualTo(TARGET_PACKAGE); + assertThat(intent.getComponent().getClassName()).isEqualTo(TARGET_CLASS); + } + @Test public void testParseCursor_MatchesInlineSwitchPayload() { - MatrixCursor cursor = new MatrixCursor(COLUMNS); + MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS); final String BLANK = ""; final String uri = "test.com"; final int type = ResultPayload.PayloadType.INLINE_SWITCH; @@ -230,19 +237,19 @@ public class CursorToSearchResultConverterTest { } private MatrixCursor getDummyCursor(boolean hasIcon) { - MatrixCursor cursor = new MatrixCursor(COLUMNS); + MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS); final String BLANK = ""; for (int i = 0; i < EXAMPLES; i++) { - ArrayList item = new ArrayList<>(COLUMNS.length); + ArrayList item = new ArrayList<>(DatabaseResultLoader.SELECT_COLUMNS.length); item.add(ID + i); // Doc ID item.add(TITLES[i]); // Title item.add(SUMMARY); // Summary on item.add(BLANK); // summary off item.add(BLANK); // classname item.add(BLANK); // screen title - item.add(hasIcon ? Integer.toString(mIcon) : null); // Icon - item.add(mIntent.getAction()); // Intent action + item.add(hasIcon ? Integer.toString(ICON) : null); // Icon + item.add(INTENT.getAction()); // Intent action item.add(BLANK); // target package item.add(BLANK); // target class item.add(BLANK); // Key