Merge "Also update the account preferences in displayPreference()." into oc-dev
diff --git a/res/layout/app_details.xml b/res/layout/app_details.xml
index c3ffe1a..2db23e4 100644
--- a/res/layout/app_details.xml
+++ b/res/layout/app_details.xml
@@ -85,6 +85,7 @@
android:singleLine="false"
android:ellipsize="marquee"
android:gravity="start"
+ android:textDirection="locale"
android:paddingTop="8dp"/>
<TextView
diff --git a/res/layout/storage_summary_donut.xml b/res/layout/storage_summary_donut.xml
index 0266879..585fbf4 100644
--- a/res/layout/storage_summary_donut.xml
+++ b/res/layout/storage_summary_donut.xml
@@ -42,8 +42,7 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="?android:attr/colorAccent"
+ android:textAppearance="@android:style/TextAppearance.Material.Display1"
android:textSize="36sp" />
<TextView
@@ -70,7 +69,7 @@
android:id="@+id/donut"
android:layout_width="112dp"
android:layout_height="112dp"
- android:layout_marginEnd="16dp"
+ android:layout_marginEnd="32dp"
android:gravity="end|center_vertical"
android:minWidth="58dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 83aefa0..8d5c400 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6600,8 +6600,8 @@
<!-- [CHAR LIMIT=100] Notification Importance title: high importance level title -->
<string name="notification_importance_high_title">Urgent</string>
- <!-- [CHAR LIMIT=40] Notification importance title -->
- <string name="allow_sound">Allow Sound</string>
+ <!-- [CHAR LIMIT=40 BACKUP_MESSAGE_ID:6585849855452076626] Notification importance title -->
+ <string name="allow_sound">Allow sound</string>
<!-- [CHAR LIMIT=180] Notification importance summary -->
<string name="show_silently_summary">Don\'t make sound, vibrate, or peek these notifications into view on the current screen.</string>
@@ -6760,11 +6760,8 @@
<!-- [CHAR LIMIT=NONE] Channel notification settings: Block option description-->
<string name="notification_content_block_summary">Never show notifications in the shade or on peripheral devices</string>
- <!-- [CHAR LIMIT=NONE] Channel notification settings: Badging option title -->
- <string name="notification_badge_title">Badge app icon</string>
-
- <!-- [CHAR LIMIT=NONE] Channel notification settings: Badge option description-->
- <string name="notification_badge_summary">Show notifications as badges on the Home app, if supported.</string>
+ <!-- [CHAR LIMIT=NONE] [BACKUP_MESSAGE_ID:7166470350070693657] Channel notification settings: Badging option title -->
+ <string name="notification_badge_title">Allow icon badge</string>
<!-- [CHAR LIMIT=NONE] App notification settings: Override DND option title -->
<string name="app_notification_override_dnd_title">Override Do Not Disturb</string>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index bfb91ef..483b4a0 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -23,7 +23,6 @@
<com.android.settingslib.RestrictedSwitchPreference
android:key="badge"
android:title="@string/notification_badge_title"
- android:summary="@string/notification_badge_summary"
settings:useAdditionalSummary="true"
settings:restrictedSwitchSummary="@string/enabled_by_admin" />
diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml
index 7e5045a..4cf171f 100644
--- a/res/xml/channel_notification_settings.xml
+++ b/res/xml/channel_notification_settings.xml
@@ -41,7 +41,6 @@
<com.android.settingslib.RestrictedSwitchPreference
android:key="badge"
android:title="@string/notification_badge_title"
- android:summary="@string/notification_badge_summary"
settings:useAdditionalSummary="true"
settings:restrictedSwitchSummary="@string/enabled_by_admin" />
diff --git a/res/xml/storage_profile_fragment.xml b/res/xml/storage_profile_fragment.xml
index 0485279..be269e5 100644
--- a/res/xml/storage_profile_fragment.xml
+++ b/res/xml/storage_profile_fragment.xml
@@ -35,15 +35,18 @@
android:order="4" />
<com.android.settings.deviceinfo.StorageItemPreference
android:key="pref_movies"
- android:title="@string/storage_movies_tv" />
+ android:title="@string/storage_movies_tv"
+ android:icon="@drawable/ic_theaters_vd_theme_24"
+ android:order="5"
+ />
<com.android.settings.deviceinfo.StorageItemPreference
android:key="pref_other_apps"
android:title="@string/storage_other_apps"
android:icon="@drawable/ic_apps_vd_theme_24"
- android:order="5" />
+ android:order="6" />
<com.android.settings.deviceinfo.StorageItemPreference
android:key="pref_files"
android:title="@string/storage_files"
android:icon="@drawable/ic_folder_vd_theme_24"
- android:order="6" />
+ android:order="7" />
</PreferenceScreen>
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 4ce785a..f8df375 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -196,6 +196,7 @@
PackageManager pm = mContext.getPackageManager();
badgePreference(pm, userHandle, mPhotoPreference);
+ badgePreference(pm, userHandle, mMoviesPreference);
badgePreference(pm, userHandle, mAudioPreference);
badgePreference(pm, userHandle, mGamePreference);
badgePreference(pm, userHandle, mAppPreference);
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 0cbfd54..7a2e4c0 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -28,7 +28,6 @@
import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.PreferenceFragment;
import android.support.v7.preference.Preference;
-import android.text.TextUtils;
import android.view.View;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -45,6 +44,7 @@
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import java.util.ArrayList;
@@ -202,7 +202,11 @@
mState.ensureIcon(mAppEntry);
controller.setLabel(mAppEntry);
controller.setIcon(mAppEntry);
- controller.setSummary(getString(Utils.getInstallationStatus(mAppEntry.info)));
+ boolean isInstantApp = AppUtils.isInstant(mAppEntry.info);
+ CharSequence summary = isInstantApp
+ ? null : getString(Utils.getInstallationStatus(mAppEntry.info));
+ controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
+ controller.setSummary(summary);
}
controller.done(context, true /* rebindActions */);
diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index c627ea5..647219b 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -33,6 +33,7 @@
import android.provider.SearchIndexableData;
import android.provider.SearchIndexableResource;
import android.provider.SearchIndexablesContract;
+import android.support.annotation.DrawableRes;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -525,8 +526,6 @@
final int count = cursor.getCount();
if (count > 0) {
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 String className = cursor.getString(COLUMN_INDEX_XML_RES_CLASS_NAME);
@@ -720,7 +719,6 @@
final AttributeSet attrs = Xml.asAttributeSet(parser);
final String screenTitle = XmlParserUtils.getDataTitle(context, attrs);
-
String key = XmlParserUtils.getDataKey(context, attrs);
String title;
@@ -730,10 +728,11 @@
String keywords;
String headerKeywords;
String childFragment;
+ @DrawableRes
+ int iconResId;
ResultPayload payload;
boolean enabled;
final String fragmentName = sir.className;
- final int iconResId = sir.iconResId;
final int rank = sir.rank;
final String intentAction = sir.intentAction;
final String intentTargetPackage = sir.intentTargetPackage;
@@ -784,6 +783,7 @@
key = XmlParserUtils.getDataKey(context, attrs);
enabled = ! nonIndexableKeys.contains(key);
keywords = XmlParserUtils.getDataKeywords(context, attrs);
+ iconResId = XmlParserUtils.getDataIcon(context, attrs);
if (isHeaderUnique && TextUtils.equals(headerTitle, title)) {
isHeaderUnique = false;
@@ -853,7 +853,6 @@
List<String> nonIndexableKeys) {
final String className = sir.className;
- final int iconResId = sir.iconResId;
final int rank = sir.rank;
if (provider == null) {
@@ -881,7 +880,7 @@
.setEntries(raw.entries)
.setClassName(className)
.setScreenTitle(raw.screenTitle)
- .setIconResId(iconResId)
+ .setIconResId(raw.iconResId)
.setRank(rank)
.setIntentAction(raw.intentAction)
.setIntentTargetPackage(raw.intentTargetPackage)
@@ -907,7 +906,6 @@
continue;
}
- item.iconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
item.className = (TextUtils.isEmpty(item.className)) ? className : item.className;
indexFromResource(database, localeStr, item, nonIndexableKeys);
diff --git a/src/com/android/settings/search2/SearchViewHolder.java b/src/com/android/settings/search2/SearchViewHolder.java
index 67653e0..1175fcb 100644
--- a/src/com/android/settings/search2/SearchViewHolder.java
+++ b/src/com/android/settings/search2/SearchViewHolder.java
@@ -69,11 +69,9 @@
AppSearchResult appResult = (AppSearchResult) result;
PackageManager pm = fragment.getActivity().getPackageManager();
iconView.setImageDrawable(appResult.info.loadIcon(pm));
- } else if (result.icon != null) {
- iconView.setImageDrawable(result.icon);
- // TODO set color of icon
} else {
- iconView.setBackgroundResource(R.drawable.empty_icon);
+ // Valid even when result.icon is null.
+ iconView.setImageDrawable(result.icon);
}
bindBreadcrumbView(result);
diff --git a/src/com/android/settings/search2/XmlParserUtils.java b/src/com/android/settings/search2/XmlParserUtils.java
index 90b1c1f..17f1743 100644
--- a/src/com/android/settings/search2/XmlParserUtils.java
+++ b/src/com/android/settings/search2/XmlParserUtils.java
@@ -71,6 +71,14 @@
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.
*/
@@ -80,17 +88,9 @@
}
private static String getData(Context context, AttributeSet set, int[] attrs, int resId) {
- final TypedArray sa = context.obtainStyledAttributes(set, attrs);
- final TypedValue tv = sa.peekValue(resId);
-
- CharSequence data = null;
- if (tv != null && tv.type == TypedValue.TYPE_STRING) {
- if (tv.resourceId != 0) {
- data = context.getText(tv.resourceId);
- } else {
- data = tv.string;
- }
- }
+ final TypedArray ta = context.obtainStyledAttributes(set, attrs);
+ String data = ta.getString(resId);
+ ta.recycle();
return (data != null) ? data.toString() : null;
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
index bc42d1f..e8057a6 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -298,6 +298,8 @@
public void settingUserIdAppliesNewIcons() {
StorageItemPreference audio = spy(new StorageItemPreference(mContext));
audio.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference video = spy(new StorageItemPreference(mContext));
+ video.setIcon(R.drawable.ic_photo_library_vd_theme_24);
StorageItemPreference image = spy(new StorageItemPreference(mContext));
image.setIcon(R.drawable.ic_photo_library_vd_theme_24);
StorageItemPreference games = spy(new StorageItemPreference(mContext));
@@ -312,6 +314,8 @@
when(screen.findPreference(
eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio);
when(screen.findPreference(
+ eq(StorageItemPreferenceController.MOVIES_KEY))).thenReturn(video);
+ when(screen.findPreference(
eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image);
when(screen.findPreference(
eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
@@ -326,6 +330,7 @@
mController.setUserId(new UserHandle(10));
verify(audio, times(2)).setIcon(any(Drawable.class));
+ verify(video, times(2)).setIcon(any(Drawable.class));
verify(image, times(2)).setIcon(any(Drawable.class));
verify(games, times(2)).setIcon(any(Drawable.class));
verify(apps, times(2)).setIcon(any(Drawable.class));
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index d9934b1..69bd767 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
@@ -46,7 +47,9 @@
import com.android.settings.applications.AppHeaderController;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import org.junit.Before;
import org.junit.Test;
@@ -58,7 +61,6 @@
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.robolectric.RuntimeEnvironment;
-
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@@ -175,11 +177,37 @@
@Test
public void testInitHeader_HasAppEntry_BuildByAppEntry() {
+ ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
+ new InstantAppDataProvider() {
+ @Override
+ public boolean isInstantApp(ApplicationInfo info) {
+ return false;
+ }
+ });
mFragment.mAppEntry = mAppEntry;
mFragment.initHeader();
verify(mAppHeaderController).setIcon(mAppEntry);
verify(mAppHeaderController).setLabel(mAppEntry);
+ verify(mAppHeaderController).setIsInstantApp(false);
+ }
+
+ @Test
+ public void testInitHeader_HasAppEntry_InstantApp() {
+ ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
+ new InstantAppDataProvider() {
+ @Override
+ public boolean isInstantApp(ApplicationInfo info) {
+ return true;
+ }
+ });
+ mFragment.mAppEntry = mAppEntry;
+ mFragment.initHeader();
+
+ verify(mAppHeaderController).setIcon(mAppEntry);
+ verify(mAppHeaderController).setLabel(mAppEntry);
+ verify(mAppHeaderController).setIsInstantApp(true);
+ verify(mAppHeaderController).setSummary((CharSequence) null);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
index cc7e4ec..51cd484 100644
--- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
@@ -82,7 +82,7 @@
}
@Test
- public void testConstructor_MembersNotNull() {
+ public void testConstructor_membersNotNull() {
assertThat(mHolder.titleView).isNotNull();
assertThat(mHolder.summaryView).isNotNull();
assertThat(mHolder.iconView).isNotNull();
@@ -90,8 +90,8 @@
}
@Test
- public void testBindViewElements_AllUpdated() {
- SearchResult result = getSearchResult();
+ public void testBindViewElements_allUpdated() {
+ SearchResult result = getSearchResult(TITLE, SUMMARY, mIcon);
mHolder.onBind(mFragment, result);
mHolder.itemView.performClick();
@@ -110,6 +110,14 @@
}
@Test
+ public void testBindViewIcon_nullIcon_imageDrawableIsNull() {
+ final SearchResult result = getSearchResult(TITLE, SUMMARY, null);
+ mHolder.onBind(mFragment, result);
+
+ assertThat(mHolder.iconView.getDrawable()).isNull();
+ }
+
+ @Test
public void testBindViewElements_emptySummary_hideSummaryView() {
final SearchResult result = new Builder()
.addTitle(TITLE)
@@ -155,15 +163,15 @@
assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.GONE);
}
- private SearchResult getSearchResult() {
+ private SearchResult getSearchResult(String title, String summary, Drawable icon) {
Builder builder = new Builder();
- builder.addTitle(TITLE)
- .addSummary(SUMMARY)
+ builder.addTitle(title)
+ .addSummary(summary)
.addRank(1)
.addPayload(new IntentPayload(
new Intent().setComponent(new ComponentName("pkg", "class"))))
.addBreadcrumbs(new ArrayList<>())
- .addIcon(mIcon);
+ .addIcon(icon);
return builder.build();
}
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index 0a8326d..b76feff1 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -99,6 +99,7 @@
private final String screenTitle = "screen title";
private final String className = "class name";
private final int iconResId = 0xff;
+ private final int noIcon = 0;
private final String action = "action";
private final String targetPackage = "target package";
private final String targetClass = "target class";
@@ -388,7 +389,7 @@
// Class Name
assertThat(cursor.getString(11)).isEqualTo(className);
// Icon
- assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+ assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action
assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package
@@ -442,7 +443,7 @@
// Class Name
assertThat(cursor.getString(11)).isEqualTo(className);
// Icon
- assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+ assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action
assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package
@@ -496,7 +497,7 @@
// Class Name
assertThat(cursor.getString(11)).isEqualTo(className);
// Icon
- assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+ assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action
assertThat(cursor.getString(13)).isEqualTo(action);
// Target Package
@@ -515,6 +516,18 @@
assertThat(cursor.getBlob(20)).isNull();
}
+ @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 ->
// UpdateOneRowWithFilteredData -> UpdateOneRow
@@ -565,7 +578,7 @@
assertThat(cursor.getString(11))
.isEqualTo("com.android.settings.display.ScreenZoomSettings");
// Icon
- assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+ assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action
assertThat(cursor.getString(13)).isNull();
// Target Package
@@ -630,7 +643,7 @@
assertThat(cursor.getString(11))
.isEqualTo("com.android.settings.display.ScreenZoomSettings");
// Icon
- assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+ assertThat(cursor.getInt(12)).isEqualTo(noIcon);
// Intent Action
assertThat(cursor.getString(13)).isNull();
// Target Package