Merge "Only add icons to settings items with icons" into oc-dev am: ec00573139

am: ab13b378c9

Change-Id: I7194c8f3a1e17cc7b44548f97b0eabb51d4f6616
This commit is contained in:
Matthew Fritze
2017-05-11 00:54:01 +00:00
committed by android-build-merger
5 changed files with 51 additions and 34 deletions

View File

@@ -34,6 +34,7 @@ import android.os.Build;
import android.provider.SearchIndexableData; import android.provider.SearchIndexableData;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.provider.SearchIndexablesContract; import android.provider.SearchIndexablesContract;
import android.support.annotation.DrawableRes;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
@@ -527,8 +528,6 @@ public class DatabaseIndexingManager {
final int count = cursor.getCount(); final int count = cursor.getCount();
if (count > 0) { if (count > 0) {
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
final int providerRank = cursor.getInt(COLUMN_INDEX_XML_RES_RANK);
// TODO remove provider rank
final int xmlResId = cursor.getInt(COLUMN_INDEX_XML_RES_RESID); final int xmlResId = cursor.getInt(COLUMN_INDEX_XML_RES_RESID);
final String className = cursor.getString(COLUMN_INDEX_XML_RES_CLASS_NAME); final String className = cursor.getString(COLUMN_INDEX_XML_RES_CLASS_NAME);
@@ -722,7 +721,6 @@ public class DatabaseIndexingManager {
final AttributeSet attrs = Xml.asAttributeSet(parser); final AttributeSet attrs = Xml.asAttributeSet(parser);
final String screenTitle = XmlParserUtils.getDataTitle(context, attrs); final String screenTitle = XmlParserUtils.getDataTitle(context, attrs);
String key = XmlParserUtils.getDataKey(context, attrs); String key = XmlParserUtils.getDataKey(context, attrs);
String title; String title;
@@ -732,10 +730,11 @@ public class DatabaseIndexingManager {
String keywords; String keywords;
String headerKeywords; String headerKeywords;
String childFragment; String childFragment;
@DrawableRes
int iconResId;
ResultPayload payload; ResultPayload payload;
boolean enabled; boolean enabled;
final String fragmentName = sir.className; final String fragmentName = sir.className;
final int iconResId = sir.iconResId;
final int rank = sir.rank; final int rank = sir.rank;
final String intentAction = sir.intentAction; final String intentAction = sir.intentAction;
final String intentTargetPackage = sir.intentTargetPackage; final String intentTargetPackage = sir.intentTargetPackage;
@@ -786,6 +785,7 @@ public class DatabaseIndexingManager {
key = XmlParserUtils.getDataKey(context, attrs); key = XmlParserUtils.getDataKey(context, attrs);
enabled = ! nonIndexableKeys.contains(key); enabled = ! nonIndexableKeys.contains(key);
keywords = XmlParserUtils.getDataKeywords(context, attrs); keywords = XmlParserUtils.getDataKeywords(context, attrs);
iconResId = XmlParserUtils.getDataIcon(context, attrs);
if (isHeaderUnique && TextUtils.equals(headerTitle, title)) { if (isHeaderUnique && TextUtils.equals(headerTitle, title)) {
isHeaderUnique = false; isHeaderUnique = false;
@@ -855,7 +855,6 @@ public class DatabaseIndexingManager {
List<String> nonIndexableKeys) { List<String> nonIndexableKeys) {
final String className = sir.className; final String className = sir.className;
final int iconResId = sir.iconResId;
final int rank = sir.rank; final int rank = sir.rank;
if (provider == null) { if (provider == null) {
@@ -883,7 +882,7 @@ public class DatabaseIndexingManager {
.setEntries(raw.entries) .setEntries(raw.entries)
.setClassName(className) .setClassName(className)
.setScreenTitle(raw.screenTitle) .setScreenTitle(raw.screenTitle)
.setIconResId(iconResId) .setIconResId(raw.iconResId)
.setRank(rank) .setRank(rank)
.setIntentAction(raw.intentAction) .setIntentAction(raw.intentAction)
.setIntentTargetPackage(raw.intentTargetPackage) .setIntentTargetPackage(raw.intentTargetPackage)
@@ -909,7 +908,6 @@ public class DatabaseIndexingManager {
continue; continue;
} }
item.iconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
item.className = (TextUtils.isEmpty(item.className)) ? className : item.className; item.className = (TextUtils.isEmpty(item.className)) ? className : item.className;
indexFromResource(database, localeStr, item, nonIndexableKeys); indexFromResource(database, localeStr, item, nonIndexableKeys);

View File

@@ -72,11 +72,9 @@ public abstract class SearchViewHolder extends RecyclerView.ViewHolder {
AppSearchResult appResult = (AppSearchResult) result; AppSearchResult appResult = (AppSearchResult) result;
PackageManager pm = fragment.getActivity().getPackageManager(); PackageManager pm = fragment.getActivity().getPackageManager();
iconView.setImageDrawable(appResult.info.loadIcon(pm)); iconView.setImageDrawable(appResult.info.loadIcon(pm));
} else if (result.icon != null) {
iconView.setImageDrawable(result.icon);
// TODO set color of icon
} else { } else {
iconView.setBackgroundResource(R.drawable.empty_icon); // Valid even when result.icon is null.
iconView.setImageDrawable(result.icon);
} }
bindBreadcrumbView(result); bindBreadcrumbView(result);

View File

@@ -71,6 +71,14 @@ public class XmlParserUtils {
return getData(context, attrs, R.styleable.Preference, R.styleable.Preference_keywords); return getData(context, attrs, R.styleable.Preference, R.styleable.Preference_keywords);
} }
public static int getDataIcon(Context context, AttributeSet attrs) {
final TypedArray ta = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.Preference);
final int dataIcon = ta.getResourceId(com.android.internal.R.styleable.Icon_icon, 0);
ta.recycle();
return dataIcon;
}
/** /**
* Returns the fragment name if this preference launches a child fragment. * Returns the fragment name if this preference launches a child fragment.
*/ */
@@ -80,17 +88,9 @@ public class XmlParserUtils {
} }
private static String getData(Context context, AttributeSet set, int[] attrs, int resId) { private static String getData(Context context, AttributeSet set, int[] attrs, int resId) {
final TypedArray sa = context.obtainStyledAttributes(set, attrs); final TypedArray ta = context.obtainStyledAttributes(set, attrs);
final TypedValue tv = sa.peekValue(resId); String data = ta.getString(resId);
ta.recycle();
CharSequence data = null;
if (tv != null && tv.type == TypedValue.TYPE_STRING) {
if (tv.resourceId != 0) {
data = context.getText(tv.resourceId);
} else {
data = tv.string;
}
}
return (data != null) ? data.toString() : null; return (data != null) ? data.toString() : null;
} }

View File

@@ -99,6 +99,7 @@ public class DatabaseIndexingManagerTest {
private final String screenTitle = "screen title"; private final String screenTitle = "screen title";
private final String className = "class name"; private final String className = "class name";
private final int iconResId = 0xff; private final int iconResId = 0xff;
private final int noIcon = 0;
private final String action = "action"; private final String action = "action";
private final String targetPackage = "target package"; private final String targetPackage = "target package";
private final String targetClass = "target class"; private final String targetClass = "target class";
@@ -394,7 +395,7 @@ public class DatabaseIndexingManagerTest {
// Class Name // Class Name
assertThat(cursor.getString(11)).isEqualTo(className); assertThat(cursor.getString(11)).isEqualTo(className);
// Icon // Icon
assertThat(cursor.getInt(12)).isEqualTo(iconResId); assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action // Intent Action
assertThat(cursor.getString(13)).isEqualTo(action); assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package // Target Package
@@ -451,7 +452,7 @@ public class DatabaseIndexingManagerTest {
// Class Name // Class Name
assertThat(cursor.getString(11)).isEqualTo(className); assertThat(cursor.getString(11)).isEqualTo(className);
// Icon // Icon
assertThat(cursor.getInt(12)).isEqualTo(iconResId); assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action // Intent Action
assertThat(cursor.getString(13)).isEqualTo(action); assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package // Target Package
@@ -508,7 +509,7 @@ public class DatabaseIndexingManagerTest {
// Class Name // Class Name
assertThat(cursor.getString(11)).isEqualTo(className); assertThat(cursor.getString(11)).isEqualTo(className);
// Icon // Icon
assertThat(cursor.getInt(12)).isEqualTo(iconResId); assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action // Intent Action
assertThat(cursor.getString(13)).isEqualTo(action); assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package // Target Package
@@ -530,6 +531,18 @@ public class DatabaseIndexingManagerTest {
assertThat(unmarshalledPayload).isInstanceOf(ResultPayload.class); assertThat(unmarshalledPayload).isInstanceOf(ResultPayload.class);
} }
@Test
public void testAddResource_iconAddedFromXml() {
SearchIndexableResource resource = getFakeResource(R.xml.connected_devices);
mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>());
Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
cursor.moveToPosition(0);
// Icon
assertThat(cursor.getInt(12)).isNotEqualTo(noIcon);
}
// Tests for the flow: IndexOneResource -> IndexFromProvider -> IndexFromResource -> // Tests for the flow: IndexOneResource -> IndexFromProvider -> IndexFromResource ->
// UpdateOneRowWithFilteredData -> UpdateOneRow // UpdateOneRowWithFilteredData -> UpdateOneRow
@@ -580,7 +593,7 @@ public class DatabaseIndexingManagerTest {
assertThat(cursor.getString(11)) assertThat(cursor.getString(11))
.isEqualTo("com.android.settings.display.ScreenZoomSettings"); .isEqualTo("com.android.settings.display.ScreenZoomSettings");
// Icon // Icon
assertThat(cursor.getInt(12)).isEqualTo(iconResId); assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action // Intent Action
assertThat(cursor.getString(13)).isNull(); assertThat(cursor.getString(13)).isNull();
// Target Package // Target Package
@@ -648,7 +661,7 @@ public class DatabaseIndexingManagerTest {
assertThat(cursor.getString(11)) assertThat(cursor.getString(11))
.isEqualTo("com.android.settings.display.ScreenZoomSettings"); .isEqualTo("com.android.settings.display.ScreenZoomSettings");
// Icon // Icon
assertThat(cursor.getInt(12)).isEqualTo(iconResId); assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action // Intent Action
assertThat(cursor.getString(13)).isNull(); assertThat(cursor.getString(13)).isNull();
// Target Package // Target Package

View File

@@ -78,7 +78,7 @@ public class IntentSearchViewHolderTest {
} }
@Test @Test
public void testConstructor_MembersNotNull() { public void testConstructor_membersNotNull() {
assertThat(mHolder.titleView).isNotNull(); assertThat(mHolder.titleView).isNotNull();
assertThat(mHolder.summaryView).isNotNull(); assertThat(mHolder.summaryView).isNotNull();
assertThat(mHolder.iconView).isNotNull(); assertThat(mHolder.iconView).isNotNull();
@@ -86,8 +86,8 @@ public class IntentSearchViewHolderTest {
} }
@Test @Test
public void testBindViewElements_AllUpdated() { public void testBindViewElements_allUpdated() {
SearchResult result = getSearchResult(); SearchResult result = getSearchResult(TITLE, SUMMARY, mIcon);
mHolder.onBind(mFragment, result); mHolder.onBind(mFragment, result);
mHolder.itemView.performClick(); mHolder.itemView.performClick();
@@ -105,6 +105,14 @@ public class IntentSearchViewHolderTest {
any(Pair.class)); any(Pair.class));
} }
@Test
public void testBindViewIcon_nullIcon_imageDrawableIsNull() {
final SearchResult result = getSearchResult(TITLE, SUMMARY, null);
mHolder.onBind(mFragment, result);
assertThat(mHolder.iconView.getDrawable()).isNull();
}
@Test @Test
public void testBindViewElements_emptySummary_hideSummaryView() { public void testBindViewElements_emptySummary_hideSummaryView() {
final SearchResult result = new Builder() final SearchResult result = new Builder()
@@ -151,15 +159,15 @@ public class IntentSearchViewHolderTest {
assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.GONE); assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.GONE);
} }
private SearchResult getSearchResult() { private SearchResult getSearchResult(String title, String summary, Drawable icon) {
Builder builder = new Builder(); Builder builder = new Builder();
builder.addTitle(TITLE) builder.addTitle(title)
.addSummary(SUMMARY) .addSummary(summary)
.addRank(1) .addRank(1)
.addPayload(new ResultPayload( .addPayload(new ResultPayload(
new Intent().setComponent(new ComponentName("pkg", "class")))) new Intent().setComponent(new ComponentName("pkg", "class"))))
.addBreadcrumbs(new ArrayList<>()) .addBreadcrumbs(new ArrayList<>())
.addIcon(mIcon); .addIcon(icon);
return builder.build(); return builder.build();
} }